简单的python条件语句快捷语法

时间:2013-04-24 10:37:55

标签: python python-2.7 conditional-statements

我无法理解下面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 个答案:

答案 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这件事很有用,因为如果spamNone,它就不会执行通常会给spam.eggs的{​​{1}}部分。< / p>

答案 1 :(得分:2)

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

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

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

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

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

答案 2 :(得分:1)

如果number的价值为True(因此,不是0None),则该函数只会返回该数字。

如果该数字的值为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("")