foo { |x| puts x }
def tmp(x): print x foo(tmp)
The other thing is that Python has no concept of context. In Ruby, I can type:
foo(x)
self.foo(x)
class Foo def self.property(name) define_method(name) do instance_variable_get(name) end end end class Bar < Foo property :x end
Ruby's instance_eval method extends this further, allowing you to execute a block of code in the context of any object you wish.
myfunc <- lambda x: (print x) or x*x # SyntaxError myfunc <- lambda x: print(x) or x*x # OK in Py3
Rather, I'd say that part of the zen of python is: implicit is better than explicit, and I prefer python's behavior in this instance.
The other thing is that Python has no concept of context. In Ruby, I can type:
And it will execute foo(x) for the containing object. In Python, the closest equivalent would be: This syntax difference may seem trivial, but it allows you to do some very interesting things to classes. For instance: Now the class Bar has a method called "x", without us needing to explicitly define it.Ruby's instance_eval method extends this further, allowing you to execute a block of code in the context of any object you wish.