3 ms·
I wonder, why that kind of ambiguity or complexity even comes to your mind at all. Just because python is weird? def foo(self, arg=expression): could, and sho
by codesnik 7mo ago
I wonder, why that kind of ambiguity or complexity even comes to your mind at all. Just because python is weird?
def foo(self, arg=expression):
could, and should work as if it was written like this (pseudocode)
def foo(self, arg?):
if is_not_given(arg):
arg=expression
if "expression" is a literal or a constructor, it'd be called right there and produce new object, if "expression" is a reference to an object in outer scope, it'd be still the same object.
it's a simple code transformation, very, very predictable behavior, and most languages with closures and default values for arguments do it this way. Except python.
- 1718627440 7mo agoWhat you want is for an assignment in a function definition to be a lambda. def foo (self, arg=lambda : expression): Assignment of unevaluated expressions is not a thing yet in Python and would be really surprising. If you really want that, that is what you get with a lambda. > most languages with closures and default values for arguments do it this way. Do these also evaluate function definitions at runtime?
- codesnik 7mo agoyes they do. check ruby for example.