[Python-Dev] (name := expression) doesn't fit the narrative of PEP 20 (original) (raw)

Steven D'Aprano steve at pearwood.info
Thu Apr 26 08:09:57 EDT 2018


On Thu, Apr 26, 2018 at 10:17:34AM +0200, Antoine Pitrou wrote:

I also wonder how long it will be before someone writes:

def f(arg): global lazyvalue if predicate(arg) and (lazyvalue := frobnicate()) > arg: ... (or something similar with "nonlocal")

What if they did? I don't think that's especially worse than any other use of a global, including the current version:

def f(arg):
    global _lazy_value
    _lazy_value = frobnicate()
    if predicate(arg) and _lazy_value > arg:
        ...

I'm not putting either version forward as paragons of Pythonic code, but honestly, they're not so awful that we should reject this PEP because of the risk that somebody will do this. People write crappy code and misuse features all the time. I cannot count the number of times people write list comps just for the side-effects, intentionally throwing away the resulting list:

[alist.sort() for alist in list_of_lists]
[print(alist) for alist in list_of_lists]

and the honest truth is that when I'm engaged in exploratory coding in the REPR, sometimes if I'm feeling lazy I'll do it too. The world goes on, and comprehensions are still useful even if people sometimes misuse them.

-- Steve



More information about the Python-Dev mailing list