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