概述
建议你了解一下知乎的代码块排版:
def test(**agr):
print(agr)
#定义一个key为int型的字典
dict1 = {1:110}
# 以下三个是错误的
test(1=110)#很明显的错误
test("1"=110)#为什么这样赋值不行?
test(**dict1) # 编译器提示:test() keywords must be strings 这里key值为什么不可以是不可变类型int?
#定义一个key为str型的字典
dict2= {"tel":110}
# 以下两个是正确的
test(**dict2)
test(tel=110)
一般,约定俗成的写法是:
def test(**kwargs):
print(kwargs)
kwargs就是keyword arguments的缩写。
“keywords must be strings”这只是规定,关键字必须是str类型。实际上,上面的实验如果你再进一步,会发现有趣的现象:
test("1"=110) # 这个显然不行,出现在参数列表里的应该是变量名,而不能是字符串
dict1 = {"1":110}
test(**dict1) # 这时候就是正确的,只要满足“关键字必须是str类型”
也就是说,“关键字必须是str类型”,同时,关键字只要是字符串就可以了。字符串不能作为参数名称(参数名称需要符合变量命名规范),但是当你使用字典传入时却是可以的。
所以,为了保证test(**dict1)不出错,在传入之前可以作一下处理,确保key是str类型:
test(**{str(k): v for k, v in dict1.items()})
结果如下:
>>> dict1
{1: 110}
>>> test(**dict1)
Traceback (most recent call last):
File "", line 1, in
TypeError: test() keywords must be strings
>>> test(**{str(k): v for k, v in dict1.items()})
{'1': 110}
另外,传入的字典中不能有与已有参数重名的,即key的字符串不能与已有参数名相同:
>>> def test2(a, **arg):
... print(a)
... print(arg)
...
>>> d2 = {"a": 1}
>>> test2(1, **d2)
Traceback (most recent call last):
File "", line 1, in
TypeError: test2() got multiple values for argument 'a'
最后
以上就是动听火龙果为你收集整理的下列关于python字典变量的定义中错误的是_为什么python的字典的值不能是不可变类型的int?这段简单的代码有什么错误?...的全部内容,希望文章能够帮你解决下列关于python字典变量的定义中错误的是_为什么python的字典的值不能是不可变类型的int?这段简单的代码有什么错误?...所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复