python * 操作符拆解字典变量

d = {"name": "Jim", "gender": "male", "age": 20}
print(*d)

为什么这段代码的运行结果是:

name gender age
[Finished in 0.1s]

但,我单独运行*d,就会报错:SyntaxError: can't use starred expression here

*d

请问,是什么原因?

阅读 8k
2 个回答
  • *** 只在“传参”时才有用。
  • * 处理“顺序参数”,比如 f(1,2,3) ,可以是 f(*[1,2,3])
  • ** 处理“关键词参数”,比如 f(a=1, b=2, c=3) , 可以是 f(**{'a':1, 'b': 2, 'c': 3})

至于你说的问题,本质上,在 Python3 中, * 后面需要的是一个 sequence ,更准备地说,是一个 iterable 的对象:

# -*- coding: utf-8 -*-


class A(object):
    l = [1,2,3]

    def __init__(self):
        self.n = 0

    def __iter__(self):
        return self

    def __next__(self):
        if self.n >= len(self.l):
            raise StopIteration()

        n = self.l[self.n]
        self.n += 1
        return n


print(*A())

而你代码中的 d ,是一个 dict ,自然是一个可以 iterable 的对象。

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