On Tue, 10 Nov 2009 23:00:09 -0800, r wrote: > I think what has escaped everyone (including myself until my second > post) is the fact that what really needs to happen
Why? > is for variable > *assignments* to return a boolean to any "statements" that evaluate the > assignment -- like in an "if" or "elif" construct. I don't even understand what that means. > The current "with" > statement cannot replace that action and was never meant for such > things. > > if range(0) as var: > #python will never execute even one line > #in this block because bool(var) == None No, that's impossible. bool() always returns True or False, not None. > #also since bool(var) equals None, the Incorrect. >>> True == None False >>> False == None False > #variable "var" will never be created! That will cause no end of trouble. if range(N) as var: do_something_with_var() if var: print "Oops, this blows up if N <= 0" Conditional assignments are a terrible idea. > elif range(10) as var: > #this block will execute and the variable "var" > #will be added to appropriate namespace containing > #a list of 10 ints > > var = 100 #var is still available in this namespace! > > > Very clean, very elegant solution to a messy problem that pops up in > python code quite often. You haven't actually explained what the messy problem is. var = range(N) if var: ... is not a messy problem. It's perfectly reasonable. If you need to do two things with a value, you assign it to a name first: var = range(N) p = var.index(5) var.append(42) x = func(10) y = x + 1 z = x*2 x = func(10) if x: y = x + 1 Why is the third example, with an if... test, so special that it needs special syntax to make it a two-liner? Would you suggest we can write this? # instead of var = range(N) p = range(N).index(5) as var # var might be range(N), or undefined. var.append(42) > It not only saves one distracting line of code > per usage but makes the code more readable. What distracting line of code? -- Steven -- http://mail.python.org/mailman/listinfo/python-list