Antoon Pardon wrote:
On 2009-04-24, Steven D'Aprano <st...@remove-this-cybersource.com.au> wrote:
On Fri, 24 Apr 2009 03:00:26 -0700, GC-Martijn wrote:

Hello,

I'm trying to do a if statement with a function inside it. I want to use
that variable inside that if loop , without defining it.

def Test():
    return 'Vla'

I searching something like this:

if (t = Test()) == 'Vla':
    print t # Vla

or

if (t = Test()):
    print t # Vla
Fortunately, there is no way of doing that with Python.

There is a way to do something close.

def x(v):
    x.val = v
    return v

if x(3)==3:
    print('x.val is ', x.val)
# prints
x.val is  3

In OP's case, condition is "x(Test()) == 'Vla'"

This is one  source of hard-to-debug bugs that Python doesn't have.

I think this is an unfortunate consequence of choosing '=' for the
assignment.

Actually, is is a consequence of making assignment a statement rather than an expression. And that is because if assignment were an expression, the new name would have to be quoted. Or there would have to be a special exception to the normal expression evaulation rule. In other words, the problems one sees in a pure expression language. Note that C, for instance, which has such a special exception, does not, last I knew, allow a,b = 1,2.

The solution for this use case is to encapsulate the binding within a function. The above is one possible example. One could use a pocket class instead of a pocket function. Or

def set_echo(name, val):
  globals()[name] = val
  return val

if set_echo('t', Test()) == 'Vla': print t ...

Terry Jan Reedy


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

Reply via email to