当前位置: 首页 > 面试题库 >

如果x :, vs如果x == True,vs如果x为True

许奇
2023-03-14
问题内容

抱歉,是否曾经有人问过这个问题,但是我徒劳地寻找我 确切 问题的答案。基本上,对于Python
2.7,我有一个程序运行一系列地理处理工具,具体取决于用户在脚本中调整的一系列True / False变量所要求的内容,例如

x = True

if x:
    run function

但是,我现在发现x不必在字面上是“ True”即可运行该函数。例如:

In: x = True
    if x:
        print True

Out: True

In: x = 123
    if x:
        print True

Out: True

In: x = 'False'
    if x:
        print True

Out: True

In: x = False
    if x:
        print True

Out:

因此,除False以外的任何值似乎都将评估为True,如果 x == Truex为True 则不是这种情况。看到PEP
8强烈建议仅使用 if x:
变体,是否有人可以解释为什么会出现这种现象?看来,如果x:更多地是对“如果x不为假”或“如果x存在”的检验。考虑到这一点,我相信如果x为True,我应该使用:在这种情况下,尽管PEP
8不得不说。

亲切的问候


问题答案:

Python中的以下值在if和其他逻辑上下文中为false :

  • False
  • None
  • 数值等于0,如00.0-0.0
  • 字符串''u''
  • 容器(例如列表,元组和字典)
  • 实现__bool__(在Python3中)False__nonzero__(在Python2中)返回False或的任何对象0
  • 任何未实现__bool__(在Python3中)或__nonzero__(在Python2中)但确实实现__len__了返回等于0的值的东西

如果任何一个对象适用,则该对象被视为“ false”,否则为“ true”,无论该对象实际上与False或等于还是相同。True

现在,如果已经安排了x必须是对象True或对象之一False,则可以放心地编写if x。如果您安排了“真实性”x指示是否要执行该操作(无论类型如何),那么可以放心地编写if x。您可以在哪里写,应该更喜欢这样做,因为它更容易阅读。

通常,如果允许x使用该值,True那么您将处于两种情况之一,因此您将不会编写if x is True。重要的是正确记录的含义x,以使其反映代码中使用的测试。

希望Python程序员知道什么被认为是正确的,因此,如果您仅编写文档,“如果该函数x为true,则运行该函数”,那么这表示原始代码的作用。对其进行记录,“如果…x is True将运行功能”将具有不同的含义,并且由于PEP8中的样式规则要求测试真实性而不是特定值,因此不太常用True

但是,如果您希望代码在x为空容器的情况下与在不同情况下的行为有所不同None,则可以编写类似的代码if x is not None



 类似资料:
  • 问题内容: 看起来“ if x”几乎像是较长的“ if x is None”语法的简写。它们在功能上是相同的,还是在给定x值的情况下两者的评估结果不同? 我认为行为在所有Python实现中也应该是相同的-但是,如果存在细微的差异,那真是太好了。 问题答案: 在以下情况下: 该测试将有所不同: 之所以如此,是因为测试身份,含义 相当于 因此

  • 问题内容: 我可以用吗: 代替 后者似乎太冗长。有区别吗? 问题答案: 该声明 将调用(请参阅特殊方法名称文档)并使用该函数的返回值。总结如下: 要求执行真值测试和内置操作;应该返回或,或者它们的整数等效值或。如果未定义此方法,则调用该方法(如果已定义),并且如果其结果为非零,则将该对象视为true。如果一个类既未定义,也未定义,则其所有实例均被视为true。 另一方面, 仅 将参考与进行比较以查

  • 问题内容: 这两行代码有什么区别: 和 一个比另一个更有效吗? 会更好用吗 问题答案: 使用一下两个版本生成的字节码: 后者的操作较少,因此效率可能会略高一些。 在致谢中指出了),您所进行的操作与操作数量完全相同,只是更改并切换为: : 在这种情况下,除非每次比较所需的工作量有所不同,否则您根本看不到任何性能差异。 但是,请注意,这两个版本 不会永远是逻辑上相同的 ,因为这将取决于实现方式和有问题

  • 我希望这个问题提清楚!我已经看过很多关于循环和if\u else子句等的指南,但还没有找到答案。 我试图在一大组txt文件中找到出现大量(比如说5个)关键字的段落。示例关键字为“运动”和“原因”。我的数据是整齐的(txt文件已被拆分,因此每行有一个单词),我使用正则表达式添加了列(每个关键字一个),如果行包含关键字,则显示“TRUE”,否则为false。现在为了找到感兴趣的段落,我想在同一行中复制

  • 问题内容: 我已经对Java中的x * x或Math.pow(x,2)更快进行了一些测试。我原本以为简单的x * x会更快一些,但是事实证明它的速度差不多相等。有人可以启发我吗,那怎么可能? 问题答案: 就您所知,它完全是JITted(甚至已经在编译时)了。由于没有真实的上下文,此类微基准很少会提供非常有用的结果。 绝对不是一个彼此优先的理由,因为现实世界中的代码很少有简单的操作作为性能热点。

  • 问题内容: 做这个: 意思是这样的: 如果是这样,我对Dive Into Python中的示例5.14 完全感到困惑。密钥如何既等于“名称”又等于项目?另一方面,“和项目”是否只是问项目是否作为变量存在? 问题答案: 意味着。 请记住,这有几种可能。例如将评估为。