def myfunc(): #f1
return 0 or 1
#The above returns 1
def myfunc(): #f2
return 1 or 0
#The above also returns 1
def myfunc(): #f3
return 0 or -1
#The above returns -1
def myfunc(): #f4
return -1 or 1
#The above returns -1
def myfunc(): #f5
return 1 or -1
#The above returns 1
def myfunc(): #f6
return 1 and -1
#The above returns 1
从f1
,f2
,f3
返回非零值。但是在f4
和f5
的情况下,它会在return
关键字后面立即返回值。但是在f6
的情况下,它返回-1。我无法理解这是如何运作的。
感谢您的解释:)
答案 0 :(得分:3)
or
返回第一个值,如果它等于True,否则返回第二个值。
在Python中,任何非0的整数在布尔上下文中都是True。因此,1和-1都是True,如果另一个值为0,则返回。
and
正好相反:如果不为True,则返回第一个值,否则返回第二个值。
答案 1 :(得分:0)
这可以帮到你:
>>> bool(0)
False
>>> bool(1)
True
>>> bool(-1)
True
请记住真相表:
TRUE OR ANYTHING is TRUE
FALSE AND ANYTHING is FALSE
答案 2 :(得分:0)
这称为短路,即and
or
和not
的工作方式。
您可以在此处查看相关文档:https://docs.python.org/3.4/library/stdtypes.html#boolean-operations-and-or-not
所以在你的函数#f6中,第一个操作数1
的计算结果为True
,但是有一个and
,因此python还必须评估以下-1
。
如果您直接从文档中了解x and y
的定义适用于您的案例1 and -1
,则说明:
如果1为假,则为1,否则为-1
由于1
不是False
,您将转到else
部分,然后会返回-1
。
这就是为什么你得到-1
作为第六个函数的返回。