[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.

    if Var(expr):

-------------- next part --------------
class Var:
    """Var proxies another value; it allows assignment expressions

    Written by JimJJewett, inspired by Paul Moore's
    >>> 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

if __name__ == "__main__":

More information about the Python-ideas mailing list