[Python-ideas] Combining test and assignment
Jim Jewett
jimjjewett at gmail.com
Mon Jan 23 02:44:38 CET 2012
On Sat, Jan 21, 2012 at 11:05 PM, Eike Hein <sho at eikehein.com> wrote:
> On 1/22/2012 4:48 AM, Nick Coghlan wrote:
>> Simple embedded assignment, though, only works when the
>> predicate is just "bool" - as soon as the condition differs from the
>> value you want to access, you need to revert to the existing idiom
>> *anyway*.
> Actually, just to be clear, in the use case I had in mind
> spam() is returning a numeric value. That satisfies a truth
> test and is still useful in other ways (but I assume you
> are actually on the same page, hence the quotation marks
> around bool).
Perhaps. Does bool(spam()) produce the right answer? Or did you need
to work with 0, or ignore -1?
> Another, possibly better way is to modify locals(), i.e.:
Well, not locals directly, but the following was inspired by the
quantification thread.
You still need to declare the Var before the test expression, but the
declaration can be just a placeholder.
x=Var()
...
if Var(expr):
-jJ
-------------- next part --------------
class Var:
"""Var proxies another value; it allows assignment expressions
Written by JimJJewett, inspired by Paul Moore's
http://mail.python.org/pipermail/python-ideas/2012-January/013417.html
>>> x=Var()
>>> if x:
... print("True", x)
... else:
... print("False", x)
False Var(None)
>>> if x(5):
... print("True", x.value)
... else:
... print("False", x.value)
True 5
>>> if x({}):
... print("True", x.value)
... else:
... print("False", x.value)
False {}
"""
def __init__(self, value=None): self(value)
def __call__(self, value): self.value=value; return self
def __bool__(self): return bool(self.value)
def __repr__(self): return "Var(%r)" % (self.value,)
def _test():
import doctest
doctest.testmod()
if __name__ == "__main__":
_test()
More information about the Python-ideas
mailing list