🐍 Python for Ruby Developers: A Comparison Guide

This guide highlights the core differences between Python and Ruby, focusing on concepts familiar to a Ruby developer. The goal is to provide a quick reference for adapting your thinking and syntax.

Concept Ruby Python
Syntax Block-based with do...end or {}. Indentation is for readability. Optional parentheses for method calls. Indentation-based, where whitespace defines blocks. Colons (:) are required for if, for, def, etc.
String Interpolation Uses #{variable} inside double-quoted strings. Uses f-strings (formatted string literals) f"hello {variable}" or the .format() method.
Lists & Arrays An Array is the primary ordered collection. A list is the primary ordered collection. A tuple is an immutable (unchangeable) version of a list.
Hashes & Dictionaries A Hash is an unordered key-value collection, often using symbols as keys ({key: 'value'}). A dict (dictionary) is an unordered key-value collection, often using strings as keys ({'key': 'value'}).
Falsy Values false and nil are the only falsy values. Everything else is truthy. False, None, empty collections ([], {}, (), ''), and the number 0 are all falsy.
Methods & Functions Defined with def, ended with end. return is optional. Blocks are passed implicitly. Defined with def, ended with indentation. return is optional, but often used for clarity. Callables are functions, not methods on objects by default.
Inheritance Uses the < operator in the class definition. Uses parentheses () in the class definition. (e.g., class Dog(Animal):).
Constants Uppercase names are constants, but a warning is issued if they are reassigned. No true constants. All-uppercase names (CONST_NAME) are a convention to signify a variable should not be changed. In Python, a variable intended to be a constant is written in ALL_CAPS. For example, PI = 3.14159. This is a signal to other developers that the value should not be changed. However, unlike Ruby, which issues a warning if you try to reassign a constant, the Python interpreter will not prevent you from modifying the value.
Package Management Bundler manages gems via a Gemfile. pipenv manages packages via a Pipfile and Pipfile.lock. pip and requirements.txt are also very common.
Class Syntax class MyClass, end. Instance variables use@variable. class MyClass: Instance variables are defined with self.variable in the __init__ method.
Looping each, map, collect, times are methods on objects. for loops iterate over any iterable. List comprehensions x for x in list are a very common Pythonic pattern.
Method Visibility public, private, protected. All methods are public by default. Use a leading underscore _method by convention for "private" methods, or double underscores __method for name-mangling.
Testing RSpec and Minitest are popular. Pytest and unittest are popular.