常见的陷阱是混淆相等比较运算符is和==。
a == b比较的值a和b。
a is b将比较认同的a和b。
为了显示:
a = 'Python is fun!' b = 'Python is fun!' a == b # 返回True a is b # 返回False a = [1, 2, 3, 4, 5] b = a # b引用a a == b # 真正 a is b # 真正 b = a[:] # b现在引用a的副本 a == b # 真正 a is b # 错误[!!]
基本上,is可以视为的简写。id(a) == id(b)
除此之外,还有一些运行时环境的怪癖使事情变得更加复杂。True与相比,短字符串和小整数将返回is,这是因为Python机器试图为同一对象使用更少的内存。
a = 'short' b = 'short' c = 5 d = 5 a is b # 真正 c is d # 真正
但是较长的字符串和较大的整数将分别存储。
a = 'not so short' b = 'not so short' c = 1000 d = 1000 a is b # 假 c is d # 假
您应该is用来测试None:
if myvar is not None: # 不无 pass if myvar is None: # 没有 pass
的用途is是测试“前哨”(即唯一对象)。
sentinel = object() def myfunc(var=sentinel): if var is sentinel: # 没有提供价值 pass else: # 提供了价值 pass
问题内容: A = 314 结果: 我知道在if语句中使用两个“ =”和“ is”是不正常的。但是我想知道Python解释器如何解释该语句。 表达式是同时解释还是短路解释? 问题答案: 您遇到的事情称为 运算符链接 。 从比较文档: 可以任意链接比较,例如 与等效,不同之处在于比较仅被评估一次(但是在两种情况下,如果发现错误,则根本不评估)。 强调我的。 因此,这意味着将被解释为,仅此而已。 更一
问题内容: 我正在使用Python2.x。 比较时我的编辑会警告我,但使用时不会警告。 我在Python Shell中进行了测试,并确定两者都是有效的语法,但我的编辑器似乎在说这是首选。 是这样吗?如果是,为什么? 问题答案: 摘要: 使用时要核对对象的身份(如检查,看看是否是)。使用时要检查的平等(例如是等于?)。 说明: 你可以在其中返回的自定义类True 例如: is检查对象身份。只有1个对
当我比较,但是当我使用。 我在pythonshell中做了一个测试,确定两者都是有效语法,但我的编辑器似乎在说是首选。 情况是否如此,如果是,原因何在?
我试图通过API访问XML文档。当我尝试用python连接时,我得到一个403状态代码。但是,当我将链接粘贴到chrome浏览器中时,数据将按其应有的方式显示。我知道我可能需要在Python中为我的请求添加一些头,但我不知道如何这样做。 我可以在chrome中获取标题,但不确定需要添加哪些标题到请求中 接受:text/html、application/xhtml-xml、application/x
is是对比地址,==是对比值
问题内容: 我试图以递归方式将本地主机中的目录与远程linux机器中的目录进行比较。但是,当我执行下一条命令时: 说这是行不通的: 差异:ssh admin@10.0.0.10:/ home / admin:没有这样的文件或目录 递归比较目录内容的正确方法是什么? 提前致谢 问题答案: 如果不需要区分文件中的详细信息,只需获取目录/文件名的差异,然后尝试以下操作: (注意:需要设置“没有密码的SS