我无法理解下面python中的速记条件语句。
def number(number):
return number or number == 3
print number("")
这种快捷语法是什么意思?它是否与以下相同?
def number(number):
if number or number == 3:
return number
print number("")
第一个打印False,后者打印None(我相信None表示语法无效?)。
答案 0 :(得分:4)
在这种情况下,条件语句有点无意义(除了一些非常奇怪的情况,例如覆盖number
的equals / integer / boolean值)。
基本上你现在正在做的是这样的:
def number(number):
if number:
return number
else:
return number == 3
如果有and
会有用,那么现在它毫无意义。
或者可以这样有用:
return spam or eggs
如果垃圾邮件不为空,则会返回垃圾邮件,否则会返回垃圾邮件。
插图btw:
>>> for number in range(5):
... print 'number', number, number or number == 3
number 0 False
number 1 1
number 2 2
number 3 3
number 4 4
number and number == 3 or 5
的长版
def number(number):
if number and number == 3:
return 3
else:
return 5
spam and spam.eggs
这件事很有用,因为如果spam
为None
,它就不会执行通常会给spam.eggs
的{{1}}部分。< / p>
答案 1 :(得分:2)
两种情况下的相关表达都是number or number == 3
。
Python将此表达式拆分为两部分:(number) or (number == 3)
它首先评估各个部分,然后使用or
评估结果。
因此,我们""
(视为False
)or
"" == 3
(评估至False
)。
此变为 "" or False
。由于两个表达式都是False
- y,因此整个表达式的计算结果为False
。
在第一个函数中,返回表达式的值,即False
。
在第二个函数中,只有表达式的值为true才返回。如果它是假的,你不会返回任何东西。
在python中,默认情况下,一个不返回任何内容的函数会返回None
。
答案 2 :(得分:1)
如果number
的价值为True
(因此,不是0
或None
),则该函数只会返回该数字。
如果该数字的值为False
,则该函数将返回number == 3
(如果是True
,则为False
,其他为number == 3
由于后者将总是返回False(如果return number or False
,那么该函数在第一种情况下将返回3),它可以缩短为:
{{1}}
如果数字不是0或无,则返回该数字,否则返回False。
答案 3 :(得分:1)
它与Python如何评估表达式和对象有关。
你的第一个例子:
你发送一个空字符串""
,这对Python来说是False
,就像一个空列表([]
)。
def number(number):
# so this will now be (False) or (number == 3) but since the first
# expression was False it will not evaluate the number comparison and thusly
# return False
return number or number == 3
print number("")
你的第二个例子是另外一个例子。
您有明确的if
说明如果数字评估为True
,即。不为空或数字等于3
进入以下区块并从中返回。
但是由于你提供了一个空字符串,我们刚刚学会了返回False,它将传递if并返回任何Python函数None
的默认值。
def number(number):
if number or number == 3:
return number
#default says return None here.
print number("")