我正在读一本关于Python的书,书中有一个关于多目标作业的特殊部分。这本书是这样解释的:

但我看不出这有什么用。这对我来说毫无意义。你为什么要使用更多的变量?有理由这么做吗?这与使用:a='spam',然后打印出a 3次有何不同?
我只能想到用它来清空一行中的变量。
发布于 2013-12-11 15:48:48
多个赋值的一个很好的用途是将一组变量设置为相同的数字。
以下是一个示范:
>>> vowels = consonants = total = 0
>>> mystr = "abcdefghi"
>>> for char in mystr:
... if char in "aeiou":
... vowels += 1
... elif char in "bcdfghjklmnpqrstvwxyz":
... consonants += 1
... total += 1
...
>>> print "Vowels: {}\nConsonants: {}\nTotal: {}".format(vowels, consonants, total)
Vowels: 3
Consonants: 6
Total: 9
>>>如果没有多个任务,我就必须这样做:
>>> vowels = 0
>>> consonants = 0
>>> total = 0正如你所看到的,这是一个更长的喘息。
总之,多个赋值只是Python语法的糖分,可以使事情变得更容易/更干净。
发布于 2013-12-11 16:02:09
主要是为了方便。如果您想要初始化一组变量,那么在一行中进行这些操作比在多个行上更方便。书中甚至提到,在您引用的片段末尾:“例如,当将一组计数器初始化为零时”。
除此之外,这本书实际上是错的。所示示例
a = b = c = 'spam'不等于
c = 'spam'
b = c
a = b它真正所做的基本上是
tmp = 'spam'
a = tmp
b = tmp
c = tmp
del tmp注意任务的顺序!当一些目标相互依赖时,这就产生了不同的效果。例如,
>>> x = [3, 5, 7]
>>> a = 1
>>> a = x[a] = 2
>>> a
2
>>> x
[3, 5, 2]根据这本书,x[1]将成为2,但显然并非如此。
有关进一步阅读,请参见前面的堆栈溢出问题:
How do chained assignments work?
What is this kind of assignment in Python called? a = b = True
可能还有其他几个(查看右侧栏上的链接)。
发布于 2013-12-11 15:51:02
您可能需要用相同的值初始化多个变量,但是使用它们时可能会有所不同。可能是为了这样的事情:
def fibonacci(n):
a = b = 1
while a < n:
c = a
a = a + b
b = c
return a(变量与元组交换,取消包装以避免混乱,就像被否决的答案一样)
一个重要的注意事项:
>>> a = b = []是危险的。它可能不像你想的那样。
>>> b.append(7)
>>> print(b)
[7]
>>> print(a)
[7] # ???????这是由于变量如何在Python中作为名称或标签工作,而不是在其他语言中作为值容器工作。有关详细解释,请参见this答案。
https://stackoverflow.com/questions/20523387
复制相似问题