On Sat, Oct 23, 2021 at 5:16 PM Chris Angelico <[email protected]> wrote:
> # Very common: Use None and replace it in the function
> def bisect_right(a, x, lo=0, hi=None, *, key=None):
> if hi is None:
> hi = len(a)
>
Note that if this is changed to
def bisect_right(a, x, lo=0, hi[whatever]len(a), *, key=None):
then you'll lose the ability to pass hi=None to mean the end of the array.
For this argument of bisect_right, None actually makes sense since it's
used for that purpose in slices, and it would probably be a
backward-compatibility problem to drop support for it also. So you will
still have to write
def bisect_right(a, x, lo=0, hi[whatever]len(a), *, key=None):
if hi is None:
hi = len(a)
Self-referential expressions will result in UnboundLocalError::
>
> def spam(eggs=>eggs): # Nope
>
That seems like not a rule of its own, but a special case of this rule:
deferred arguments that haven't been assigned to yet are unbound (and not,
say, set to some implementation-specific value analogous to
_USE_GLOBAL_DEFAULT).
> def bisect(a, hi=>len(a)):
>
That looks like an anonymous function that takes a single parameter named
hi, ignores it, and returns the length of a free variable named a. It may
even mean that in Python someday in expression contexts. But it's
definitely not what it means here.
hi<=len(a) would make a bit more sense.
> def bisect(a, hi=:len(a)):
>
This one annoys me the least, though I can't say why.
def bisect(a, hi?=len(a)):
>
? seems reasonable for omitted/defaulted arguments, but that's not what
this PEP is about. I can't see why call-time evaluation would have a ? and
def-time evaluation wouldn't.
def bisect(a, hi!=len(a)):
>
Same basic problem as => (and <=). Is hi equal to len(a), or not?
def bisect(a, hi=`len(a)`):
>
It looks like the backticks are part of the expression rather than the
function-parameter syntax, but they aren't, and never could be - even if
there was a deferred-evaluation syntax at the expression level, it couldn't
be used here, because the lexical environment would be wrong.
> Since default arguments behave largely the same whether they're early or
> late
> bound,
They seem very different to me. They're evaluated in a different lexical
scope, and many use cases for this extension depend on the changed scoping.
_______________________________________________
Python-ideas mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at
https://mail.python.org/archives/list/[email protected]/message/22DEQDF35SOBW6OC2Z2GGBVAQKIKHMPM/
Code of Conduct: http://python.org/psf/codeofconduct/