新手求教:这种情况下 Python 函数的关键字参数,为什么不加引号?

初学 Python,求教:

def print_dict(**person):
        print(person)

print_dict( a ='jack', b ='rose')
# {'a': 'jack', 'b': 'rose'}

形参前加了两个星号,这样 Python 会创建一个字典,用来装实参。我有点不明白的是为什么调用函数的时候,参数是: a = "Jack" 而不是 "a" = "Jack" , a既然是要放在字典中的键,为什么不带引号?

求解惑,非常感谢!

阅读 7.4k
5 个回答

“语法就是这样,没有为什么”——这样的说法实在是憋屈死我了。幸好终于找到了自己能理解和接受的答案。
查了很多资料,我的理解是,这种语法是dict constructor构建字典的一种方式:如果没有给出位置参数,则创建空字典。如果给出了位置参数并且它是一个映射对象,则将使用与映射对象相同的键值对创建一个字典。
这里的情况,就是通过构造器创建字典。而构造器确实就就这样创建的,正如大家说的,语法就是这样,折腾一圈又回来了哈哈,但是很值得。
参考:
python 文档 4.10. Mapping Types — dict 链接在这里:https://docs.python.org/3/lib...
以及:
https://docs.python.org/3/tut...
理解的也不是很透彻,欢迎补充和更正。

字符串无法作为变量使用,所以不能"a"="jack"。

print_dict( a ='jack', b ='rose')

这是“调用”,调用的格式就这样,语法要求的,没有为什么。跟后面是不是要把 a 作为一个 dictkey 没关系。

如果加了引号就是字符串了,字符串是不能作为变量的,如果这里不用**person而是用"a" = "Jack",是会报SyntaxError错误的

没有为什么,语法要求,如果你其它语言也学了,就不会有这种疑问了。记着就行了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题