当前位置:  开发笔记 > 编程语言 > 正文

逗号分隔变量赋值

如何解决《逗号分隔变量赋值》经验,为你挑选了1个好方法。

有人可以向我解释第4行是做什么的吗?

1 def fib2(n):  # return Fibonacci series up to n
2 ...     """Return a list containing the Fibonacci series up to n."""
3...     result = []
4...     a, b = 0, 1  #this line
5...     while a < n:
6...         result.append(a)
7...         a, b = b, a+b
8...     return result    

Willem Van O.. 10

你描述的是元组赋值:

a, b = 0, 1

相当于a = 0b = 1.

但是,如果您想要交换值,它可能会产生有趣的效果.喜欢:

a,b = b,a

将首先构造一个元组(b,a),然后将其解包并将其分配给ab.因此,这不等同于:

#not equal to
a = b
b = a

但是(使用临时):

t = a
a = b
b = t

通常,如果您在赋值运算符左侧有逗号分隔的变量列表,并且生成元组的表达式,则会将元组解压缩并存储在值中.所以:

t = (1,'a',None)
a,b,c = t

将分配1a,'a'bNonec.请注意,这不是语法糖:编译器不会查看左侧变量的数量是否与右侧元组的长度相同,因此您可以从函数等返回元组并将它们解压缩到单独的变量中.



1> Willem Van O..:

你描述的是元组赋值:

a, b = 0, 1

相当于a = 0b = 1.

但是,如果您想要交换值,它可能会产生有趣的效果.喜欢:

a,b = b,a

将首先构造一个元组(b,a),然后将其解包并将其分配给ab.因此,这不等同于:

#not equal to
a = b
b = a

但是(使用临时):

t = a
a = b
b = t

通常,如果您在赋值运算符左侧有逗号分隔的变量列表,并且生成元组的表达式,则会将元组解压缩并存储在值中.所以:

t = (1,'a',None)
a,b,c = t

将分配1a,'a'bNonec.请注意,这不是语法糖:编译器不会查看左侧变量的数量是否与右侧元组的长度相同,因此您可以从函数等返回元组并将它们解压缩到单独的变量中.


我一直把它称为元组打包/解包,或者更常见的是*序列解包*.参见[元组和序列](https://docs.python.org/2/tutorial/datastructures.html#tuples-and-sequences)
推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有