该
is运营商不匹配变量的值,但这些实例本身.
它到底意味着什么?
我声明了两个变量命名x并y在两个变量中分配相同的值,但是当我使用is运算符时它返回false .
我需要澄清一下.这是我的代码.
x = [1, 2, 3]
y = [1, 2, 3]
print x is y #It prints false!
Run Code Online (Sandbox Code Playgroud) 我刚刚才知道有Truthy和Falsy在Python这是与正常不同的价值观True和False?
是否有人可以深入解释什么truthy和falsy值?
我应该在哪里使用它们?
truthy和True值以及falsy和False值之间有什么区别?
如果以前曾经问过这个问题,我会道歉,但是我徒劳地搜索了我的确切问题的答案.基本上,使用Python 2.7,我有一个运行一系列地理处理工具的程序,取决于用户在脚本中调整的一系列True/False变量所需的内容,例如
x = True
if x:
run function
Run Code Online (Sandbox Code Playgroud)
但是,我现在发现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:
Run Code Online (Sandbox Code Playgroud)
因此,除False之外的任何值似乎都会计算为True,如果x == True或x为True,则不会出现这种情况.看作PEP 8强烈建议仅使用if x: variant,有人可以解释为什么会出现这种情况吗?似乎如果x:更像是"如果x不是假"或"如果x存在"的测试.考虑到这一点,我相信如果x是真的我应该使用:在这种情况下,尽管PEP 8必须说.
亲切的问候
我正在编写一个封装任意对象的类,包括简单类型.我希望"is"关键字对封装的值进行操作,例如此行为:
Wrapper(True) is True -> True
Wrapper(False) is True -> False
Wrapper(None) is None -> True
Wrapper(1) is 1 -> True
Run Code Online (Sandbox Code Playgroud)
是否有任何对象方法可以覆盖以获得此行为?
我if今天在python 条款中遇到了意外的结果:
import numpy
if numpy.allclose(6.0, 6.1, rtol=0, atol=0.5):
print 'close enough' # works as expected (prints message)
if numpy.allclose(6.0, 6.1, rtol=0, atol=0.5) is True:
print 'close enough' # does NOT work as expected (prints nothing)
Run Code Online (Sandbox Code Playgroud)
经过一番探讨(即这个问题,特别是这个答案)之后,我明白了原因:type返回的numpy.allclose()是numpy.bool_而不是简单的旧bool,而且显然是foo = numpy.bool_(1),然后if foo将评估,True同时if foo is True将评估False.这似乎是is运营商的工作.
我的问题是:为什么numpy有自己的布尔类型,根据这种情况,最佳做法是什么?我可以写逃脱if foo:得到预期的行为在上面的例子,但我喜欢更严格if foo is True:,因为它排除之类的东西2,并 …
在 Python 中,内置常量 None 保证是单数。这种情况只有一个例子。
其他内置类型的情况并非如此。具有相同内容的字符串或数字并不唯一。两个字符串“a”和“a”不是唯一的,而是具有不同的实例。对于具有相同内部值的两个数字(例如 1.0 和 1.0)也是如此。
内置布尔常量 True 和 False 是否像 None 一样唯一,或者它们是否有不同的实例?
一个具体的例子是:
value = 1 == 1
Run Code Online (Sandbox Code Playgroud)
在这种情况下与?value相同的实例True