+ 1
Python: the "OR" logical operator question
b="abc" func1 = (lambda s:s[1:]) func2 = (lambda s:s[:-1]) func3 = (lambda s:s[1:]) or (lambda s:s[:-1]) print (func1 (b)) #outputs bc print (func2 (b)) #outputs ab print (func3 (b)) #outputs bc --> From what I understand, this is the same as: "bc" or "ab" --> or is a logical operator... so why isn't the output a true/false type? --> what does "bc" or "ab" evaluate to bc?
5 Answers
+ 3
Or is a logical operator, which checks for the first value.
If the first value is true/truthy then it will return the first value
If the first value is false/falsey then it will return the second value!
'Or' operator can return anything đ
It is not bound to return only true or false
Falsey values are => 0, "", [], (), (,), {}, None
Truthy are all the values accept the above mentioned values!
Since the function returning "bc" is truthy then it will not allow the or operator to go for the second value! And hence the first value i.e. "bc" is returned!
More to know:
Try this:
func3 = (lambda s: s[1:1]) or (lambda s: s[:-1])
+ 1
Solus
Ya, that's why I added it in 'more to know'
(lambda s:s[1:1]) is not any string, it is a function!
And function is not there in the falsey list!
Hence, the first function will be considered! No matter what it is returning!
I guess, I confused you in my first answer! đ
(Edited it)
0
Any thing other than None, zero, empty string, empty list, empty dictionary and so on is true and in or operator if the first expression equal true then no need to check the rest
for example 2 or 3 = 2,
'a' or 'b' = a
But
"" or 'b' = b since empty string is false so it needs to check the second expression which is b
0 or 3 = 3 because 0 is false
0
Namit Jain
b="abc"
func1 = (lambda s:s[1:1])
func2 = (lambda s:s[:-1])
func3 = (lambda s: s[1:1]) or (lambda s: s[:-1])
print (func1 (b)) #outputs empty string --> falsey
print (func2 (b)) #outputs ab --> truthy
print (func3 (b)) # (lambda s:s[1:1]) outputs an empty string (the first value)
This follows the opposite rule as you've mentioned:
" If the first value is true/truthy then it will return the second value
If the first value is false/falsey then it will return the first value! "
How come?
0
Ruba Kh
How would you explain this then?
b="abc"
func1 = (lambda s:s[1:1])
func2 = (lambda s:s[:-1])
func3 = (lambda s: s[1:1]) or (lambda s: s[:-1])
print (func1 (b)) #outputs empty string --> false
print (func2 (b)) #outputs ab --> true
print (func3 (b)) # (lambda s:s[1:1]) outputs an empty string (the first value)