python操作数是什么意思_为什么’和”或’或’在Python中返回操
作数?
我认为你对⽂档的内容感到困惑.看看这两个⽂档部分:
Truth Value Testing and Boolean Operators.引⽤第⼀节的最后⼀段:
Operations and built-in functions that have a Boolean result always return 0 or False for false and 1 or True for true, unless otherwise stated. (Important exception: the Boolean operations or and and always return one of their operands.)
正如你所看到的,你对操作和内置函数是正确的,但是看到重要的异常部分,很明确的说,布尔运算符将返回其操作数之⼀.
现在,他们可以返回⼏乎不依赖于运算符的短路逻辑.对于或运算符,它将返回表达式中的第⼀个真实值,因为当它到⼀个时,整个表达式是真的.在每个操作数都是伪造的情况下,或者将返回最后⼀个操作数,这意味着它会遍历每⼀个操作数都⽆法到真实的操作数.
对于和运算符,如果表达式为true,它将返回最后⼀个操作数,如果表达式为false,则返回第⼀个falsey操作数.您可以阅读更多关于Short Circuit Evaluation at the Wikipedia Page.
你有很多例⼦在你的问题,让我们分析⼀些:
>>> False and 1 # return false (short circuited at first falsey value)
False
>>> True and 1 # return 1 (never short circuited and return the last truthy value)
1
>>> 1 and False # return false (short circuited at first falsey value, in this case the last operand)
False
>>> 1 and True # return True (never short circuited and return the last truthy value)
True
>>> True and 121 # return 121 (never short circuited and return the last truthy value)
121
>>> False or 1 # return 1 (since the first operand was falsey, or kept looking for a first truthy value which happened to be the last operator)
1
>>> False or 112 # return 112 for same reason as above
random在python中的意思112
>>> False or "Khadijah" # return "Khadijah" for same reason as above
'Khadijah'
>>> True and 'Khadijah' # return "Khadijah" because same reason as second example
'Khadijah'
我认为这应该是⼀个重点.为了帮助您进⼀步了解为什么这是有⽤的,请考虑以下⽰例:
您有⼀个随机⽣成名称的函数
import random
def generate_name():
return random.choice(['John', 'Carl', 'Tiffany'])
你有⼀个变量,你不知道它是否已经分配了⼀个名字,⽽不是做:
if var is None:
var = generate_name()
你可以做oneliner:
var = var or generate_name()
由于None是⼀个假值,否则将继续搜索并评估第⼆个操作数,这是调⽤该函数最终返回⽣成的名称.这是⼀个⾮常愚蠢的例⼦,我已经看到了这种风格的更好的⽤法(虽然不是在Python中).我现在不能出来⼀个更好的例⼦.你也可以看⼀看这个问题,有⾮常有⽤的答案主题:Does Python support short-circuiting?
最后但并⾮最不重要的是,这与静态类型,鸭型,动态,解释,编译,⽆论语⾔⽆关.这只是⼀个语⾔功能,可能会很⽅便,这是⾮常常见的,因为⼏乎所有的编程语⾔,我可以想到提供这个功能.
希望这可以帮助!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论