我正在尝试学习python,并且遇到了一些既好又短的代码,但并不完全有意义
背景是:
def fn(*args):
return len(args) and max(args)-min(args)
Run Code Online (Sandbox Code Playgroud)
我得到它正在做的事情,但为什么python这样做 - 即返回值而不是True/False?
10 and 7-2
Run Code Online (Sandbox Code Playgroud)
返回5.同样,更改和将导致或将导致功能更改.所以
10 or 7 - 2
Run Code Online (Sandbox Code Playgroud)
会回来10.
这是合法/可靠的风格,还是有任何问题?
在Java或C中,我们将<condition> ? X : Y其转换为Python X if <condition> else Y.
但也有这个小技巧:<condition> and X or Y.
虽然我明白,这是相当于前述三元运营商,我觉得很难把握如何and和or运营商能够产生正确的结果.这背后的逻辑是什么?
所以,我正在玩翻译,并输入以下内容:
In [95]: 1 and 2
Out[95]: 2
In [96]: 1 and 5
Out[96]: 5
In [97]: 234324 and 2
Out[97]: 2
In [98]: 234324 and 22343243242
Out[98]: 22343243242L
In [99]: 1 or 2 and 9
Out[99]: 1
Run Code Online (Sandbox Code Playgroud)
最初我认为它与False和True值有关,因为:
In [101]: True + True
Out[101]: 2
In [102]: True * 5
Out[102]: 5
Run Code Online (Sandbox Code Playgroud)
但这似乎并不相关,因为False总是为0,而且从上面的试验来看,它似乎不是输出的最大值.
我不能在这里诚实地看到这种模式,并且在文档中找不到任何东西(老实说,我真的不知道如何有效地寻找它).
那么,怎么做
int(x) [logical operation] int(y)
Run Code Online (Sandbox Code Playgroud)
在Python工作?
它背后有什么逻辑吗?
>>>'a' and 'b' and 'c'
'c'
>>>'a' or 'b' or 'c'
'a'
Run Code Online (Sandbox Code Playgroud) 如果这是低于标准的问题,我非常抱歉,但我找不到明确的答案。
正如标题所说,为什么True and (~True)给出 -2 而True&(~True)给出 0?另外,为什么他们两个都不给False?
这是非常违反直觉的,因为我期望有一个布尔表达式&并且and应该以相同的方式工作。