On Mon, Jul 9, 2018 at 3:14 AM, Giampaolo Rodola' <g.rod...@gmail.com> wrote: > > > On Sun, Jul 8, 2018 at 6:45 PM Steve Holden <st...@holdenweb.com> wrote: >> >> On Sun, Jul 8, 2018 at 10:41 AM, Giampaolo Rodola' <g.rod...@gmail.com> >> wrote: >>> >>> [...] >>> I find that (space between the parentheses of a function call statement) >>> too unnatural as a place where to put an assignment. It is not even >>> "guarded" by a keyword like "if" or "while" which can help as indicators >>> that an assignment may occur. Also, I think it's way too easy to confuse it >>> with a keyword argument: >>> >>> >>> foo(x = 1) # keyword arg >>> >>> foo(x := 1) # assignment + value passing >>> [...] >> >> >> But the PEP 8 spellings are >> >> foo(x=1) >> >> and >> >> f(x := 1). >> >> The extra spacing makes it obvious that this isn't a regular named >> argument. > > > What if the author of the code I'm reading didn't respect PEP-8? I don't > think it's fair to invoke PEP-8 as a counter-measure to obviate a syntax > which can clearly be mistaken with something else simply by omitting 2 > spaces. Not to mention that I don't see why anyone would want to declare a > variable in there in the first place. >
It's not about why someone would want to assign inside a function call. It's about why it should be forbidden. Perhaps nobody has a good reason to use THlS_OBJECT as a variable name, and it's potentially very confusing; but should the grammar of Python forbid it? No. Because there is no value in forbidding it. Python's grammar has a number of weird edge cases due to necessity (for instance, "for x in a if cond else b:" works, but not in a comprehension), and when there's an actual conflict, sure, you can say "but nobody would ever want to do that, so we'll forbid it". In this case, there is no conflict. ChrisA _______________________________________________ Python-Dev mailing list Python-Dev@python.org https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com