为什么True和1等效作为字典键?

时间:2014-06-13 11:56:10

标签: python

我的代码中有一个非常奇怪的错误...在某些时候我必须将值转换为unicode字符串,但需要特殊处理的一些特殊值(None,True,False)除外。

代码看起来像这样:

conversions = {
    None: 'null',
    True: 'true',
    False: 'false',
}

def translate(val):
    return conversions.get(val, unicode(val))

但是当传入值1时,我在期待u'true'的时候回到u'1'。所以我打开了一个控制台,玩了一下:

Python 2.7.5 (default, May 15 2013, 22:43:36) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> d = {True: 'yeah', False: 'boooh'}

>>> d[1]
'yeah'
>>> d[0]
'boooh'

>>> 1 in d
True
>>> 0 in d
True

>>> True is 1
False

因此,事实证明01的行为方式与TrueFalse相同。为什么?这是令人困惑的,并导致像这样的奇怪的错误......

0 个答案:

没有答案