在Python中为True定义值时的奇怪行为

Heyitsbmo

这不是一个实际的问题-我只是对观察到的某些奇怪行为感到好奇,并想知道我是否正确理解“ is”运算符。

这是一些可预测的Python解释器输出:

>>> True is True
True
>>> (1==1) is True
True

现在让我们定义一个名为True的变量:

>>> True = 'abc'
>>> True == 'abc'
True
>>> True is 'abc'
True

对于布尔运算,解释器仍将返回“ True”,但是布尔运算的结果被认为既不等于“ abc”也不等于True。

>>> (1==1)
True
>>> (1==1) is 'abc'
False
>>> (1==1) is True
False

谁能解释这个奇怪的行为?

星期二

要在您自己的答案中添加更多内容(应为注释,但很长,需要格式化):

python2.7
...
>>> import __builtin__
>>> id(True)
7744528
>>> id(__builtin__.True)
7744528
>>> True = 'abc'
>>> id(True)
34386540544

from的值id(本质上)是Python对象的内部标识或“真名”(如果您愿意)。(实际上是一个C指针变成了一个整数。)该is测试比较对象身份。

>>> 1==1
True
>>> id(1==1)
7744528

这表明比较的布尔结果是“旧” True,仍可作为__builtin__.True

您重新绑定了名称__main__.True(您在解释器>>>提示符下的当前模块__main__):

>>> True
'abc'
>>> __builtin__.True
True

和:

>>> import __main__
>>> id(__main__.True)
34386540544
>>> __main__.True
'abc'
>>> 

在初学者的Python程序中,当他们编写如下函数时,经常会发生相同的事情:

def foo(list):
    ...

list是内置函数,但在函数内部foo,名称已重新绑定到参数。然后在...零件的某个地方,他们会感到惊讶:

    x = list(y)

他们希望此方法可以调用__builtin__.list,但是它尝试将其局部变量作为函数调用。

(有可能,但通常不是好的样式,import __builtin__而是通过这些名称来调用事物。也可以重新绑定__builtin__名称,但这是一个更糟糕的主意。:-))

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从python中的列表继承时的奇怪行为

来自分类Dev

在C中定义long long变量时的奇怪行为

来自分类Dev

在Scala中优化自身类型的类型定义时的奇怪行为

来自分类Dev

在Python中将数字提高为零的幂时的奇怪行为

来自分类Dev

在Unity中为GameObject设置颜色时的奇怪行为

来自分类Dev

在Access SQL中检查Null值时的奇怪行为

来自分类Dev

在绑定的ComboBox中设置null值时的奇怪行为

来自分类Dev

更改列表中列表的值时的奇怪行为

来自分类Dev

在python中替换字符串时出现奇怪的行为

来自分类Dev

在cython cdef类中创建python属性时的奇怪行为

来自分类Dev

在python中替换字符串时出现奇怪的行为

来自分类Dev

laravel:查询为空时的奇怪行为

来自分类Dev

Perl在解浮值时的奇怪行为

来自分类Dev

PHP更改值时的奇怪行为

来自分类Dev

python中的奇怪线程行为

来自分类Dev

python中str的奇怪行为

来自分类Dev

Python中循环的奇怪行为

来自分类Dev

将运算符定义为类中的朋友的奇怪行为

来自分类Dev

使用jQuery / For-Loop进行子选择时修改表中的值时的奇怪行为

来自分类Dev

奇怪的行为:“ [12,13,14]中的12 == True”在Python中是什么意思

来自分类Dev

奇怪的行为:“ [12,13,14]中的12 == True”在Python中是什么意思

来自分类Dev

使用可见度时奇怪的CSS行为:隐藏。是在规范中定义的吗?

来自分类Dev

覆盖部署为 Tomcat 中的 WAR 的 spring-boot 应用程序的属性时的奇怪行为

来自分类Dev

返回选项时mapValues中的奇怪行为

来自分类Dev

检查Alloy中的断言时的奇怪行为

来自分类Dev

在LowerCamelCase中命名变量时的奇怪行为

来自分类Dev

从R中的stdin读取时的奇怪行为

来自分类Dev

在viewDidLoad中调用addSubView时的奇怪行为

来自分类Dev

在 Pendrive 中传输文件时的奇怪行为

Related 相关文章

  1. 1

    从python中的列表继承时的奇怪行为

  2. 2

    在C中定义long long变量时的奇怪行为

  3. 3

    在Scala中优化自身类型的类型定义时的奇怪行为

  4. 4

    在Python中将数字提高为零的幂时的奇怪行为

  5. 5

    在Unity中为GameObject设置颜色时的奇怪行为

  6. 6

    在Access SQL中检查Null值时的奇怪行为

  7. 7

    在绑定的ComboBox中设置null值时的奇怪行为

  8. 8

    更改列表中列表的值时的奇怪行为

  9. 9

    在python中替换字符串时出现奇怪的行为

  10. 10

    在cython cdef类中创建python属性时的奇怪行为

  11. 11

    在python中替换字符串时出现奇怪的行为

  12. 12

    laravel:查询为空时的奇怪行为

  13. 13

    Perl在解浮值时的奇怪行为

  14. 14

    PHP更改值时的奇怪行为

  15. 15

    python中的奇怪线程行为

  16. 16

    python中str的奇怪行为

  17. 17

    Python中循环的奇怪行为

  18. 18

    将运算符定义为类中的朋友的奇怪行为

  19. 19

    使用jQuery / For-Loop进行子选择时修改表中的值时的奇怪行为

  20. 20

    奇怪的行为:“ [12,13,14]中的12 == True”在Python中是什么意思

  21. 21

    奇怪的行为:“ [12,13,14]中的12 == True”在Python中是什么意思

  22. 22

    使用可见度时奇怪的CSS行为:隐藏。是在规范中定义的吗?

  23. 23

    覆盖部署为 Tomcat 中的 WAR 的 spring-boot 应用程序的属性时的奇怪行为

  24. 24

    返回选项时mapValues中的奇怪行为

  25. 25

    检查Alloy中的断言时的奇怪行为

  26. 26

    在LowerCamelCase中命名变量时的奇怪行为

  27. 27

    从R中的stdin读取时的奇怪行为

  28. 28

    在viewDidLoad中调用addSubView时的奇怪行为

  29. 29

    在 Pendrive 中传输文件时的奇怪行为

热门标签

归档