Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Does python have an assignment operator for logical or?

Tags:

python

Is there any way to to logical-or-assignment in python? Much like a += 5

I would like to be able to do something like this:

a = True
a or= time_consuming_func_returning_bool()

to avoid calling the time-consuming function. That would be neat.

like image 424
Moberg Avatar asked Sep 05 '26 02:09

Moberg


1 Answers

Not really. Closest two options I have in mind:

a = a if a else b
a = a or b

Unless I am misunderstanding and you mean bitwise:

a=5  #101
a|=3 #010

result is a==7 (111). Of course |= will work with True and False, but I'm not sure it's considered proper in the language:

a=True
a|=False

works, a will be True. The only concern here is semantic. If the usage is buried in deep code, someone skimming will assume you're using binary operations here - the above methods are more readable when considering logic.

An even bigger caveat, mentioned by @Moberg, is that Boolean operators aren't lazy. Define

def b():
    print("Don't print this!")
    return False

Then

a|=b()

will print the string even though a is True and it doesn't matter what b is. This is because as far as the Boolean operation is concerned, True is just 1, and b can be any number, so it must be evaluated. Using a or b() or a if a else b() will work as expected.

like image 118
kabanus Avatar answered Sep 07 '26 14:09

kabanus



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!