Conditional assignments
I was wondering, is it possible to do something like the following? The given code obviously doesn't work.
l = 5
(l == 5)*(k = 7) #Returns error message.
The reason is, I'd rather avoid doing something like the following for the project I'm currently working on.
if stmt1 == True or stmt2 == True:
if stmt1 == True:
k = 7
if k == 7:
# Evaluate suite
else:
# Evaluate different suite
Thisisnotanid
Junior Poster in Training
60 posts since Dec 2010
Reputation Points: 10
Solved Threads: 0
No it's not possible to have assignments in if conditions. The reason is that assignment is a statement and cannot be part of an expression (the same applies to += -=, etc), while the 'if' statement expects an expression. The potential problem with your code above is that it evaluates stmt1 several times. You could write it this way
c = expr1
if c or expr2:
if c:
k = 7
if k == 7:
# etc
else:
# etc
Notice that '== True' is usually not needed. I know it looks restricting if you're used to C code, but it is one of the features that make python code clear.
Gribouillis
Posting Maven
2,786 posts since Jul 2008
Reputation Points: 1,044
Solved Threads: 691
Something along these lines?
>>> ctrl = 5
>>> k = 7 if ctrl == 5 else None
>>> k
7
pyTony
pyMod
5,359 posts since Apr 2010
Reputation Points: 782
Solved Threads: 852
Thanks fellas, that was helpful. Gribouillis, It turns out that the method you outlined is actually equivalent to what I am trying to do, so I can make use of that. PyTony, I wanted to have the assignment nested in an if statement; I was hoping to avoid having to do precisely what you outlined.
Thisisnotanid
Junior Poster in Training
60 posts since Dec 2010
Reputation Points: 10
Solved Threads: 0
It turns out that something like what's being discussed is possible. It's not equivalent, but if you design with this catch in mind, you can make your programs behave in a way which mimics the desired behavior:
l = 5
k = 7*(l == 5)
Note, that while implementing boolean algebra in such a way can come handy, it can not always replace logic. For example, if '*' in the following is not replaced with 'and', the code will return an error message.
list = range(10) # Some list
a = len(list)
b = a + 5
for l in xrange(b):
if (l < a)*(not list[l]%2):
print list[l]
Thisisnotanid
Junior Poster in Training
60 posts since Dec 2010
Reputation Points: 10
Solved Threads: 0