我正在试图找出这段代码的作用:
printdead, printlive = '_#'
这是一个实现基本细胞自动机的网站:https://rosettacode.org/wiki/One-dimensional_cellular_automata#Python
显然我可以通过简单地写
来取代上述陈述printdead = '_'
printlive = '#'
printdead = '_'; printlive = '#'
printdead, printlive = '_', '#'
这对我来说完全没问题。但第一个声明如何运作?
答案 0 :(得分:3)
你是对的。
第一个语句将在一个字符串中拆分作为输入的字符串并解压缩列表。因此,使用此语法,左侧表达式中的变量需要与字符串中的字符一样多。
答案 1 :(得分:3)
它被称为可迭代解包。如果赋值的右侧是可迭代对象,则可以将值解压缩为不同的名称。字符串,列表和元组只是Python中迭代的几个例子。
>>> a, b, c = '123'
>>> a, b, c
('1', '2', '3')
>>> a, b, c = [1, 2, 3]
>>> a, b, c
(1, 2, 3)
>>> a, b, c = (1, 2, 3)
>>> a, b, c
(1, 2, 3)
如果您使用的是Python 3,则可以访问Extended Iterable Unpacking 这允许您在作业中使用一个通配符。
>>> a, *b, c = 'test123'
>>> a, b, c
('t', ['e', 's', 't', '1', '2'], '3')
>>> head, *tail = 'test123'
>>> head
't'
>>> tail
['e', 's', 't', '1', '2', '3']