这两个python函数有什么区别?

时间:2013-04-11 15:16:41

标签: python if-statement python-2.7 return

我无法理解我在Python中看到的一些简写符号。有人能够解释这两个功能之间的区别吗? 谢谢。

def test1():
   first = "David"
   last = "Smith"
   if first and last:
      print last


def test2():
   first = "David"
   last = "Smith"
   print first and last

3 个答案:

答案 0 :(得分:5)

第一个函数始终返回None(打印Smith),而第二个函数始终返回"Smith" *

快速了解and

python and运算符返回它遇到的第一个“falsy”值。如果它没有遇到“假”值,那么它返回最后一个值(即“true-y”)这就解释了原因:

"David" and "Smith"

始终返回"Smith"。由于两者都是非空字符串,因此它们都是“true-y”值。

"" and "Smith"

将返回"",因为它是一个假值。


* OP发布的原始功能实际上是:

def test2():
   first = "David"
   last = "Smith"
   return first and last

答案 1 :(得分:3)

函数test1()test2()之间的区别在于test1()显式打印last的值,只要表达式first and last的结果得到评估即可如果为true,test2()将打印表达式first and last的结果。打印的字符串是相同的,因为表达式first and last的结果是last的值 - 但仅因为first的计算结果为真。

在Python中,如果and表达式的左侧评估为true,则表达式的结果是该表达式的右侧。由于布尔运算符的短路,如果and表达式的左侧求值为false,则返回表达式的左侧。

or也会在Python中出现短路,返回表达式最左边部分的值,决定整个表达式的真值。

所以,再看几个测试函数:

def test3():
    first = ""
    last = "Smith"
    if first and last:
        print last

def test4():
    first = ""
    last = "Smith"
    print first and last

def test5():
    first = "David"
    last = "Smith"
    if first or last:
        print last

def test6():
    first = "David"
    last = "Smith"
    print first or last

def test7():
    first = "David"
    last = ""
    if first or last:
        print last

def test8():
    first = "David"
    last = ""
    print first or last

test3()不会打印任何内容 test4()将打印""

test5()将打印"Smith" test6()将打印"David"

test7()将打印"" test8()将打印"David"

答案 2 :(得分:0)

你问,这两个片段之间有什么区别?

if first and last:
  print last

print first and last

在第一种情况下,代码将打印last的值,否则不会。

在第二种情况下,代码将打印first and last的值。如果您习惯使用C,那么您可能会认为a and b的值是布尔值True或False。但你错了。

a and b评估a;如果a是真实的,则表达式的值为b。如果a错误,则表达式的值为a

"David" and "Smith" -> "Smith"
0 and "Smith" -> 0
1 and "Smith" -> "Smith" 
"David" and 0 -> 0
"David" and 1 -> 1

Generallly:

  • 第一个有时会打印某些内容,而不会打印其他内容。
    • 第二部分一直在打印。
  • 首先打印last,如果它打印任何东西
    • 第二张根据first的真实性打印lastfirst

具体而言,如果first永远是"",则第二个示例将打印"" 首先不会打印任何东西。