Steven D'Aprano wrote:

Why is the third example, with an if... test, so special that it needs
special syntax to make it a two-liner?
...because Beautiful is better than ugly.

I can quote the Zen too:

Special cases aren't special enough to break the rules.

You haven't demonstrated that your construct is "beautiful", or the existing way of writing it is "ugly".

# apparently not ugly
x = func()
y = x + 1
z = 2*x
# also not ugly
var = range(N)
var.append(42)
find(23, var)

# still not ugly
var = range(N)
for x in var:
    do_something_with(x, var)

# not ugly
var = MyClass()
with var.magic as x:
    process(var)


# why is this ugly?
var = range(N)
if var:
    process(var)

This is the first time I have seen this explanation and justification of the status quo. Thanks for posting it so clearly.

...
What's so special about "truth-seeking"?

as a second use

for x in range(N) as var:
    do_something_with(x, var)


That would save a line too, it would behave exactly as you specified, and it uses virtually the identical syntax: "expr as name".

I know that Guido does not want to generalize 'as' as a substitute for '=' except where really necessary. The three current uses in import, with, and except statements are necessary because the object being bound is produced in the statement itself and so the assignment cannot be separated into a prior proper assignment statement.

Terry Jan Reedy

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to