Python 解包运算符 (*)
Python unpacking operator (*)
我正在研究 python codegolf 并看到有人以一种奇怪的方式使用解包运算符:
*s,='abcde'
我知道解包操作符基本上是遍历一个序列。所以我知道
s=[*'abcde']
将 "unpack" abcde
字符串并保存 ['a', 'b', 'c', 'd', 'e']
到变量 s
.
谁能尽可能详细地解释一下
*s,='abcde'
声明工作?我知道它与 s=[*'abcde']
做同样的事情,但它以不同的方式完成它。为什么解包迭代器在变量上,而不是字符串上?为什么变量名后面有个逗号?
这是Iterable Unpacking。您可能在其他地方看到过从单个表达式为多个变量赋值
a, b, c = [1, 2, 3]
此语法包含 *
以指示此变量应该是一个列表,其中包含未明确分配给另一个变量的可迭代元素。
a, *b, c = [1, 2, 3, 4, 5]
print(b)
# [2, 3, 4]
那么,您的示例中发生了什么?只有一个变量名被分配给了,所以它将把所有没有分配给另一个变量的项目都拿走,在这个例子中就是所有的变量。如果你尝试
*s='abcde'
你会得到
SyntaxError: starred assignment target must be in a list or tuple
这就是那个逗号在那里的原因,因为尾随逗号是您指示单值元组的方式。
仅在创建单个元组时才需要尾随逗号(a.k.a。单例);在所有其他情况下都是可选的。没有尾随逗号的单个表达式不会创建元组,而是生成该表达式的值。
我正在研究 python codegolf 并看到有人以一种奇怪的方式使用解包运算符:
*s,='abcde'
我知道解包操作符基本上是遍历一个序列。所以我知道
s=[*'abcde']
将 "unpack" abcde
字符串并保存 ['a', 'b', 'c', 'd', 'e']
到变量 s
.
谁能尽可能详细地解释一下
*s,='abcde'
声明工作?我知道它与 s=[*'abcde']
做同样的事情,但它以不同的方式完成它。为什么解包迭代器在变量上,而不是字符串上?为什么变量名后面有个逗号?
这是Iterable Unpacking。您可能在其他地方看到过从单个表达式为多个变量赋值
a, b, c = [1, 2, 3]
此语法包含 *
以指示此变量应该是一个列表,其中包含未明确分配给另一个变量的可迭代元素。
a, *b, c = [1, 2, 3, 4, 5]
print(b)
# [2, 3, 4]
那么,您的示例中发生了什么?只有一个变量名被分配给了,所以它将把所有没有分配给另一个变量的项目都拿走,在这个例子中就是所有的变量。如果你尝试
*s='abcde'
你会得到
SyntaxError: starred assignment target must be in a list or tuple
这就是那个逗号在那里的原因,因为尾随逗号是您指示单值元组的方式。
仅在创建单个元组时才需要尾随逗号(a.k.a。单例);在所有其他情况下都是可选的。没有尾随逗号的单个表达式不会创建元组,而是生成该表达式的值。