下列关于python字典变量的定义中错误的是

您所在的位置:网站首页 关于python字典变量的定义 下列关于python字典变量的定义中错误的是

下列关于python字典变量的定义中错误的是

2023-09-06 02:55| 来源: 网络整理| 查看: 265

建议你了解一下知乎的代码块排版:

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