下列关于python字典变量的定义中错误的是 |
您所在的位置:网站首页 › 关于python字典变量的定义 › 下列关于python字典变量的定义中错误的是 |
建议你了解一下知乎的代码块排版: 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' |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |