-1

我无法理解下面 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 意味着语法无效?)。

4

4 回答 4

4

在这种情况下,条件语句有点没有意义(除了一些非常奇怪的情况,比如覆盖 的等于/整数/布尔值number)。

基本上你现在正在做的事情是这样的:

def number(number):
    if number:
        return number
    else:
        return number == 3

如果有一个and它会很有用,现在它是没有意义的。

or 可以像这样有用:

return spam or eggs

如果 spam 不为空,它将返回垃圾邮件,否则将返回鸡蛋。

插图顺便说一句:

>>> 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通常会给出AttributeError.

于 2013-04-24T10:44:10.577 回答
2

两种情况下的相关表达式是number or number == 3

Python 将此表达式分为两部分:(number) or (number == 3) 它首先评估各个部分,然后使用or.

所以我们有""(视为Falseor "" == 3评估False)。这成为 "" or False. 由于两个表达式都是False-y,因此整个表达式的计算结果为False

在第一个函数中,您返回表达式的值,即False. 在第二个函数中,只有当表达式为真时才返回表达式的值。如果它是假的,你不会返回任何东西。

在python中,默认情况下不返回任何内容的函数会返回None

于 2013-04-24T10:46:48.587 回答
1

如果number值为True(So, not 0or None),该函数只返回数字。

如果数字的值为False,则函数将返回number == 3(所以True如果它是 3,False否则)

由于后者总是返回 False (如果number == 3,那么函数在第一种情况下会返回 3 ),它可以缩短为:

return number or False
如果它不是 0 或 None,它将返回该数字,否则它将返回 False。

于 2013-04-24T10:43:43.150 回答
1

它与 Python 如何评估表达式和对象有关。

你的第一个例子:

你发送一个空字符串"",这对 PythonFalse来说很像一个空列表 ( [])。

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说明,如果数字评估为Trueie。不为空或数字等于3进入下一个块并从中返回。

但是由于您提供了一个空字符串,我们刚刚了解到它返回 False,它会绕过 if 并返回任何 Python 函数的默认值,None.

def number(number):
    if number or number == 3:
        return number
    #default says return None here.

print number("")
于 2013-04-24T10:44:33.010 回答