首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多目标分配

多目标分配
EN

Stack Overflow用户
提问于 2013-12-11 15:39:34
回答 4查看 1.6K关注 0票数 1

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

但我看不出这有什么用。这对我来说毫无意义。你为什么要使用更多的变量?有理由这么做吗?这与使用:a='spam',然后打印出a 3次有何不同?

我只能想到用它来清空一行中的变量。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-12-11 15:48:48

多个赋值的一个很好的用途是将一组变量设置为相同的数字。

以下是一个示范:

代码语言:javascript
复制
>>> 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
>>>

如果没有多个任务,我就必须这样做:

代码语言:javascript
复制
>>> vowels = 0
>>> consonants = 0
>>> total = 0

正如你所看到的,这是一个更长的喘息。

总之,多个赋值只是Python语法的糖分,可以使事情变得更容易/更干净。

票数 6
EN

Stack Overflow用户

发布于 2013-12-11 16:02:09

主要是为了方便。如果您想要初始化一组变量,那么在一行中进行这些操作比在多个行上更方便。书中甚至提到,在您引用的片段末尾:“例如,当将一组计数器初始化为零时”。

除此之外,这本书实际上是错的。所示示例

代码语言:javascript
复制
a = b = c = 'spam'

不等于

代码语言:javascript
复制
c = 'spam'
b = c
a = b

它真正所做的基本上是

代码语言:javascript
复制
tmp = 'spam'
a = tmp
b = tmp
c = tmp
del tmp

注意任务的顺序!当一些目标相互依赖时,这就产生了不同的效果。例如,

代码语言:javascript
复制
>>> 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

Python - are there advantages/disadvantages to assignment statements with multiple (target list "=") groups?

可能还有其他几个(查看右侧栏上的链接)。

票数 3
EN

Stack Overflow用户

发布于 2013-12-11 15:51:02

您可能需要用相同的值初始化多个变量,但是使用它们时可能会有所不同。可能是为了这样的事情:

代码语言:javascript
复制
def fibonacci(n):
    a = b = 1
    while a < n:
        c = a
        a = a + b
        b = c
    return a

(变量与元组交换,取消包装以避免混乱,就像被否决的答案一样)

一个重要的注意事项:

代码语言:javascript
复制
>>> a = b = []

是危险的。它可能不像你想的那样。

代码语言:javascript
复制
>>> b.append(7)
>>> print(b)
[7]
>>> print(a)
[7]           # ???????

这是由于变量如何在Python中作为名称或标签工作,而不是在其他语言中作为值容器工作。有关详细解释,请参见this答案。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20523387

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档