'2'<'1'== False #False
('2'<'1')== False #True
'2'<('1'== False) #error
Run Code Online (Sandbox Code Playgroud)
python3中的代码我们知道python3中的运算符优先级 https://docs.python.org/3/reference/expressions.html#operator-precedence
Ars*_*nic 15
'2'<'1'== False
Run Code Online (Sandbox Code Playgroud)
它'2'<'1' and '1' == False根据操作符链进行评估{感谢@ymonad 提供此链接}
这将被评估为 False
('2'<'1')== False
Run Code Online (Sandbox Code Playgroud)
由于()具有更高的优先级,因此将首先进行评估。所以表达式将被简化为False == False将评估为True
'2'<('1'== False)
Run Code Online (Sandbox Code Playgroud)
首先('1' == False)评估哪个是False但现在操作是'2'<Falsepython中的非法操作
编辑:
在评论区回答@snr 提出的问题
关键问题是为什么 '1'== False 有效而 '2'< bool 无效
这是因为相等比较(== 和 !=)的默认行为是基于对象的身份,并且由于对象False和对象'1'不共享相同的身份,因此结果将是False
而未提供其他比较(<、>、<= 和 >=)的默认行为,因此尝试这样做会引发 TypeError
您可以在OP 提供的文档链接中找到它(在标题值比较下)
当 python 尝试这样做string < string时,它会变成 ascii 并按字母顺序排序。
https://careerkarma.com/blog/python-compare-strings/
顺便说一下,1个ascii是49,2个ascii是50
'2'<'1'== False #False
Run Code Online (Sandbox Code Playgroud)
它被评估为'2'<'1' and '1' == False False
因为
50 < 49 and 1 == False-> False and False->False
('2'<'1')== False # True
Run Code Online (Sandbox Code Playgroud)
它让 python 首先执行 () 。
(50 < 49) == False->
False == False->True
'2'<('1'== False) #error
Run Code Online (Sandbox Code Playgroud)
首先('1' == False)评估的是 False 并且您尝试这样做'2'<False。它得到一个错误。
Python 运算符优先级:https://www.mathcs.emory.edu/~valerie/courses/fall10/155/resources/op_precedence.html
| 归档时间: |
|
| 查看次数: |
950 次 |
| 最近记录: |