python - 在 Python 中解包字典时,单(非双)星号 * 是什么意思?

标签 python dictionary iterable-unpacking

谁能解释一下使用单星号或双星号解压字典时的区别?您可以在函数参数中使用它们时提及它们的区别,前提是它与此处相关,我不这么认为。

但是,可能存在一些相关性,因为它们共享相同的星号语法。

def foo(a,b)
    return a+b

tmp = {1:2,3:4}
foo(*tmp)        #you get 4
foo(**tmp)       #typeError: keyword should be string. Why it bothers to check the type of keyword? 

此外,为什么在这种情况下作为函数参数传递时,字典的键不允许是非字符串?有没有异常(exception)?为什么他们这样设计Python,是因为编译器无法推导出这里的类型还是什么?

最佳答案

例如,当字典作为列表迭代时,迭代采用它的键

for key in tmp:
    print(key)

相同
for key in tmp.keys():
    print(key)

在这种情况下,解包为 *tmp 等同于 *tmp.keys(),忽略值。如果您想使用这些值,您可以使用 *tmp.values()

双星号用于定义带有关键字参数的函数,例如

def foo(a, b):

def foo(**kwargs):

在这里您可以将参数存储在字典中并将其作为**tmp 传递。在第一种情况下,键必须是带有函数公司中定义的参数名称的字符串。在第二种情况下,您可以使用 kwargs 作为函数内部的字典。

关于python - 在 Python 中解包字典时,单(非双)星号 * 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53148037/

相关文章:

python - 从 Python2 到 Python3 的这种解包行为的变化是什么?

python - 如何在弹性 beantalk 上更新 python Flask 应用程序?

python - 将一个列表解压到 python 中另一个列表的索引中

python - 使用 enqueue 将数字生成器添加到堆栈数据结构

ruby-on-rails - 返回 : i18n best practices for large translation dictionaries

python - 错误: nothing to repeat at position

Python 在 dict 中使用 %s 来调用 value

python - 如何检查一个iterable是否可以再次被遍历?

python - 删除 RISE 中的问号和进入/退出按钮(Jupyter Notebook)

python - 获取 self 的所有属性的字典,不包括子类属性