NIl*_*rma 12 python comparison
Variable = None
Run Code Online (Sandbox Code Playgroud)
在特定情况下这三者之间有什么区别吗?如果哪一个更适合使用没有区别?
if Variable:
print "Hello world"
Run Code Online (Sandbox Code Playgroud)
和
if Variable is not None:
print "Hello world"
Run Code Online (Sandbox Code Playgroud)
和
if Variable != None:
print "Hello world"
Run Code Online (Sandbox Code Playgroud)
无变量的情况是一样的吗?
aba*_*ert 10
在特定情况下这三者之间有什么区别吗?
第一个询问变量是否是任何虚假的.对于除了None- ,任何空序列等之外的所有事情False,此测试都将失败0.
第二个问是否是魔法单身常数None.这只会为None自己失败.
第三个问是否是任何认为自己等于的东西None.例如,这将失败Holder(None),其中Holder一个包装类,其实例比较等于它们持有的任何内容.或者,为了给代码例子提供一个不太现实但更短的代码:
class Stupid(object):
def __ne__(self, other):
return False
Variable = Stupid()
Run Code Online (Sandbox Code Playgroud)
最后一个很少有用; 事实上,如果你认为你可能需要检查== None或者!= None,你没有专门创建透明包装类或类似的东西,你可能真的想要is None或is not None.但其他两个都非常有用和常见.
如果哪一个更适合使用没有区别?
嗯,有是有差别,哪一个更适合取决于特定的用途.
在这个问题的结束,它好像你可能会问是否有在特定情况下,任何的区别Variable,绝对是None.在这种情况下,当然三者之间没有功能差异.*所有这些都保证是假的,因此什么都不做.这意味着三者中的任何一个都没有区别,也没有任何代码.哪个更简单,更易读,更快.
*有一个性能差的第一个不具有LOAD_CONST的None,或者叫一个比较操作.并且,即使你以某种方式设法重新绑定None或更改None常量的值(可能是通过在堆上捣乱ctypes?),第一个更有可能仍然有效.但这些都不重要 - 如果他们再这样做,那么根本没有任何代码会更快,更可靠.
not x如果为真x为None,False,[],{},等.
x is not None将永远是True,除非变量实际上是None.
编辑:
无论何时您想检查变量是否实际设置为正确值,这都具有实际意义.否则你可能会遇到问题.例如,如果要评估项目列表并执行以下操作:
if not x:
Run Code Online (Sandbox Code Playgroud)
要检查是否提供了列表,那么条件将在空列表上触发,该列表可能仍然是有效输入.那么在这种情况下,你想查一下
if x is not None:
Run Code Online (Sandbox Code Playgroud)
允许空列表作为有效输入,但仍检查没有提供任何列表的情况.
在None作为这样的值是可比的null或nil在某些语言中值.它是一个占位符,缺少定义变量中的值(如果它未定义,则会抛出一个NameError).这就是None在某些情况下将该值用作默认值的原因:
>>> def foo():
... pass
...
>>> x = foo()
>>> x is None
True
Run Code Online (Sandbox Code Playgroud)
它也经常用作可选变量的默认值:
>>> def foo(bar=None):
... if bar is None:
... print('No argument passed.')
... else:
... print('Variable bar: %s' % str(bar))
...
>>> foo(0)
Variable bar: 0
>>> foo()
No argument passed.
Run Code Online (Sandbox Code Playgroud)
这样,0仍然是一个有效值,False如果选中,则评估为if not bar:.
该官员PEP 8的建议是测试无与身份检查:
if Variable is not None:
print "Hello world"
Run Code Online (Sandbox Code Playgroud)
相等/不等式测试也可以使用,但速度较慢且不符合习惯:
if Variable != None:
print "Hello world"
Run Code Online (Sandbox Code Playgroud)
测试变量的布尔值会产生不同的结果。如果变量是空容器或等于零的数字,则以下测试将打印“hello world”:
# Hello world won't print for any of these values:
for Variable in (), '', u'', {}, [], 0, 0.0, 0j, None:
if Variable:
print "Hello world"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20989 次 |
| 最近记录: |