在 Python 3 中,`print(x)` 和 `print(*x)` 有什么区别?

3

我记不清在哪里看到的,但我不理解这里发生了什么。 print(*x) 有什么用途呢?以下是代码:

x = [(1, 2), (3, 4)]
print(x)
print(*x)

y = [1, 2, 3, 4]
print(y)
print(*y)

z = 1, 2, 3, 4
print(z)
print(*z)

给出以下输出:
[(1, 2), (3, 4)]
(1, 2) (3, 4)
[1, 2, 3, 4]
1 2 3 4
(1, 2, 3, 4)
1 2 3 4

我知道正在发生什么,但不知道具体是什么。在之前的情况下,它只是输出它们,没有任何括号或逗号。但当我将其与字典一起使用时:

a = {1: "a", 2: [1, 2, 3], 3: (4, 5, 6)}
print(a)
print(*a)

我只在第二个打印语句时才收到了密钥:

{1: 'a', 2: [1, 2, 3], 3: (4, 5, 6)}
1 2 3

关于字典,迭代字典会迭代。当您使用*解包参数时,它只是迭代您的容器。 - juanpa.arrivillaga
3个回答

1
这里已经描述了*将“从列表或元组中解包参数”。当你使用print(*var)时,它就像打印多个变量一样:
x = [(1, 2), (3, 4)]
print(*x)
# (1, 2) (3, 4)
# Same as follow
for v in x:
    print(v, end=' ')

当您解包一个 dict 时,它返回 dict 的键。这就是为什么您只能通过 print(*dict) 获取键。应用相同的 for 循环,您将得到与 print(*a) 相同的结果:
a = {1: "a", 2: [1, 2, 3], 3: (4, 5, 6)}
for v in a:
    print(v, end=' ')

1
在Python中,像列表、字典等数据类型会从中解包值... 为了更好地理解, a = ["someone",23] "hi my name {} my age is {} ".format(a[0],a[1]) 您可以通过以下方式实现相同的效果: "hi my name {} my age is {} ".format(*a)

0
*x是对值解包的简写。
therefore for a list x (1, 2, 3, 4) 
*x is 1, 2, 3, 4 as unpacked values

阅读this以获取有关解包的更多信息


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接