只是好奇,我发现可以在不加引号的情况下定义字典键。这是否意味着Python存在漏洞?
在代码中,以下语句不会引发异常:
>>> {foo:'foo', bar:'bar'}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'foo' is not defined
Python程序员如何处理他们的键?您是否主张使用未引用或引用的键,以及为什么?
只是好奇,我发现可以在不加引号的情况下定义字典键。这是否意味着Python存在漏洞?
在代码中,以下语句不会引发异常:
>>> {foo:'foo', bar:'bar'}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'foo' is not defined
Python程序员如何处理他们的键?您是否主张使用未引用或引用的键,以及为什么?
字典的键可以是任何可哈希对象(字符串、整数、元组等):
>>> dct = {'a': 1, 1: 'a'}
>>> dct['a']
1
>>> dct[1]
'a'
>>>
'a'
一样。
就你提到的说:
我成功地定义了我的键却没有用引号
我猜你指的是像这样的做法:
dct = {key1: 1, key2: 'a'}
上面的代码并没有什么特别之处。它只是意味着名称key1
和key2
引用可哈希对象,这些对象现在成为字典的键。以下是一个示例:
>>> key1 = 'a'
>>> key2 = 1
>>> dct = {key1: 1, key2: 'a'}
>>> dct[key1]
1
>>> dct[key2]
'a'
>>> dct['a']
1
>>> dct[1]
'a'
>>>
dict
来创建一个字典:dct = dict(key1='a', key2=1)
那么你应该知道,键仍然是普通字符串:
>>> dct = dict(key1='a', key2=1)
>>> dct
{'key2': 1, 'key1': 'a'}
>>> dct[key1]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'key1' is not defined
>>> dct['key1']
'a'
>>>
dict(key1=1, key2='a')
,它与{'key1': 1, 'key2': 'a'}
意思相同。但也有可能不是这样,从问题中很难判断... - abarnert{foo:'foo', bar:'bar'}
这样的东西。 - aug2uagfoo ='whatever'
。 - user2555451
dict(key=1)
和{'key':1}
吗? - ryanpattison{key:1}
中的key
不是一个预先存在的变量。在REPL中会抛出异常,因此需要注意。 - aug2uag