我是靠谱客的博主 动听火龙果,最近开发中收集的这篇文章主要介绍下列关于python字典变量的定义中错误的是_为什么python的字典的值不能是不可变类型的int?这段简单的代码有什么错误?...,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

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?这段简单的代码有什么错误?...所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(65)

评论列表共有 0 条评论

立即
投稿
返回
顶部