I’m a little busy recently, so I’ll reply to as much as I can now and reply to the rest later.
Scratch the stuff I said about scope. Backtick expressions should inherit the scope normally like any other nested function. > That's different behaviour from regular functions, where names are only > resolved when the function is called. What benefits are there to the late name lookup of normal functions? I’m looking to have backtick expressions raise early, not late. We can relax the names to be optional if a ternary expression is used within the backtick expression. I realized that the behavior of Backtick Expressions can be silently affected by global variables. Example: x = 1 def increment_each(l): return map(`x+1`, l) ## Explicit expression, implicit usage Explicit backtick expressions are ones that, for all parameters that the created function produces, it uses a caret before the name of the parameter. The other names must exist when the backtick expression is evaluated. Example: parameter = 0 is_integer = `int(^parameter) == ^parameter` # arity: 1 despite the global definition self = 'James' str = `^self.__class__.__str__(^self)` # arity: 1 despite the global definition str(type(lambda: 1)) # use our custom str function on the function type; output: <type 'function' at 0x84910> ## Implicitly Created Backtick Expression Implicit baktick expressions, ones that mention undefined parameters without using the caret mark are generally discouraged. However they create UncastBacktickExpression, which must be cast using the .to_safe(*names) method to be used, which takes in a list of parameter names and outputs a normal backtick expression. Even if the variable is defined on a global level, it can be explicitly overridden in to_safe. Example 1 `x+1`.to_safe('x')(1) # output: 2 Example 2 x = 0 `x+1`.to_safe('x')(1) # output: 2 If a backtick expression has no unspecified names and has no carets, it is an implicit backtick expression. This allows developers to safely omit the ^ when the code that is using the resulting backtick expression is aware of the parameters to be used, given that it's obvious to the developer which names are parameters. > On Jan 21, 2019, at 1:56 AM, Steven D'Aprano <st...@pearwood.info> wrote: > > That's different behaviour from regular functions, where names are only > resolved when the function is called. _______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/