2024-05-12 20:10:19 发布
网友
如果我写下:
d = { 0:'a', 1:'b' } d[False] = 'c' d[True] = 'd' print(d)
我得到:
为什么要强迫他们进入INT?它反过来做同样的事情。在
d = {False:'a', True:'b'} d[0] = 'c' d[1] = 'd' print(d)
输出为:
{False:'c', True: 'd'}
可以禁用吗?是虫子吗?在
因为这些值被认为是相等的:
>>> True == 1 True >>> >>> False == 0 True
并且具有相同的哈希值:
因此,从字典的角度来看,True和{}与{}和{}是无法区分的。在
True
没有办法“禁用”这个你不应该在dict中使用非同质键。在
在这种特定情况下,一个潜在的解决方法是为True和{}保留特殊的int值,而不是分别为1和{}(假设您需要1和{}作为独立键)。例如,-1代表True,而{}代表False。在
1
-1
False
只是提供一些关于阿尔沙吉回答的背景。在
两个布尔值True和False与整数有着奇怪的关系。在
一方面,它们具有不同的字符串表示形式,并且具有不同的标识:
>>> print(True) True >>> print(1) 1 >>> True is 1 False
另一方面,它们在比较和算术下表现为整数:
这种行为的原因是兼容性。很久以前,bool类型不存在。”Boolean“运算符复制了C行为,将0和{}重用为“false”和“true”。在
bool
0
最终Guido实现了this didn't make much sense,并添加了我们知道和喜爱的常量。在
但是有个问题。即使在那时,已经有很多代码将布尔值当作整数来处理。如果布尔操作开始使用“正确”类型,所有这些代码都将中断。在
所以圭多做出了妥协。布尔值有自己的类型bool,并且与整数的显示方式不同。但是在算术运算和比较中,尤其是__eq__和{},它们被视为一个整体。所以旧代码将继续工作,而新代码仍然可以利用新的bool类型。在
__eq__
也许在python4中会发生变化。但是现在,bool是int的一个子类,我们不得不接受它。在
int
(另一方面,这就是为什么True和{}是以标题大小写的,而不是像其他Python关键字那样使用小写的原因之一。)
bool是int的一个子类,其表示为“False”或“True”,但其值为0或1。在
因为这些值被认为是相等的:
并且具有相同的哈希值:
^{pr2}$因此,从字典的角度来看,}与{}和{}是无法区分的。在
True
和{没有办法“禁用”这个你不应该在dict中使用非同质键。在
在这种特定情况下,一个潜在的解决方法是为}保留特殊的int值,而不是分别为}(假设您需要}作为独立键)。例如,}代表
True
和{1
和{1
和{-1
代表True
,而{False
。在只是提供一些关于阿尔沙吉回答的背景。在
两个布尔值
True
和False
与整数有着奇怪的关系。在一方面,它们具有不同的字符串表示形式,并且具有不同的标识:
另一方面,它们在比较和算术下表现为整数:
^{pr2}$这种行为的原因是兼容性。很久以前,}重用为“false”和“true”。在
bool
类型不存在。”Boolean“运算符复制了C行为,将0
和{最终Guido实现了this didn't make much sense,并添加了我们知道和喜爱的常量。在
但是有个问题。即使在那时,已经有很多代码将布尔值当作整数来处理。如果布尔操作开始使用“正确”类型,所有这些代码都将中断。在
所以圭多做出了妥协。布尔值有自己的类型},它们被视为一个整体。所以旧代码将继续工作,而新代码仍然可以利用新的
bool
,并且与整数的显示方式不同。但是在算术运算和比较中,尤其是__eq__
和{bool
类型。在也许在python4中会发生变化。但是现在,
bool
是int
的一个子类,我们不得不接受它。在(另一方面,这就是为什么}是以标题大小写的,而不是像其他Python关键字那样使用小写的原因之一。)
True
和{bool
是int
的一个子类,其表示为“False”或“True”,但其值为0或1。在相关问题 更多 >
编程相关推荐