gpt4 book ai didi

python - pep8 小烦恼

转载 作者:太空狗 更新时间:2023-10-30 00:56:12 24 4
gpt4 key购买 nike

/tmp/spam.py 中:

n = 69

if n == True:
print 'potato'

pep8 实用程序提示这个条件:

wim@SDFA100461C:/tmp$ pep8 spam.py 
spam.py:3:6: E712 comparison to True should be 'if cond is True:' or 'if cond:'
  • 根据pep8,第一个建议是错误的/“更糟”本身
  • 第二个建议改变了代码的行为

对于您实际上确实想要检查与 True 是否相等的情况,最佳实践是什么?使用 is 使用 True 进行身份检查是否正常?为什么 pep8 实用程序提供了 pep8 本身明确反对的替代方案?

最佳答案

如果你真的需要用 True 检查相等性,那么使用 == 并忽略 PEP8,但在几乎任何可以想象的情况下'你想要什么。

如果您想知道您拥有的值是否是 Python 认为为真的值之一,请使用 if cond:。如果你想知道你拥有的值是否是单例值 True 然后使用 is True, boolean 值 TrueFalse 是单例,所以在这种情况下使用 is 是正确的。

如果你需要测试你的对象是否是单例 True,但是 linter 或 code reviewer 提示 is True,那么 isinstance(x, bool) 和 x 是行为等效(但速度较慢)的替代品。

检查 x == True 是一个中途之家。当 x 为 True 时为 true,对于 x=69 为 false,但还有其他对象本身不是 True 但对于 x==True 给出了意想不到的 true 结果,例如 1 == True 为 true。 (感谢@Ant)。

所以把它们放在一起:

value of n:    True  1     69     False   0
-----------------------------------------------
expression result
-----------------------------------------------
if n: True True True False False
if n is True: True False False False False
if n==True: True True False False False

从该表中选择给出您真正想要的结果的行(最后一个不是)。

关于python - pep8 小烦恼,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21019797/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com