还记得这个上面这段fib代码吗?
它与普通赋值语句不同的是,同时给两个变量进行赋值。
写了这么多段代码,它们的执行顺序都是从上至下,从左到右依次进行,但是到了这里却变成了先执行等号右边的,再执行等号左边的。在等号右边是从左到右执行,左边同样如此
a, b = 0, 1while a < 10: print(a) a, b = b, a+b # b, a+b将首先执行,这段代码是从左到右依次执行的。# a,b在等号右边的值执行完成后,才开始执行。才开始执行。请在python官网的解释器中运行下面的代码
4, 5a = 4, 5print(a)type(a)print(a[0])type(a[0])那我们继续运行以下代码呢?
a = 4, 5a, b = 4, 5a, b = 4, 5, 6 #ValueError: too many values to unpack (expected 2)a, *b = 4, 5, 6 print(a, b)总结一下a, *b = 4, 5, 6的执行流程:
在解释器中执行以下代码,帮助理解上面的内容
a = (1, 2)a[0] = 3aa = [1, 2]a[0] = 3a运行发上面的代码,你会发现这里的*号和上面的*号作用相反,上面的*会接收一个tuple把多个值给到一个变量身上。但这里是把变量里的多个值分别送出去,一个是用来接收的,一个是用来输送的。这里要注意区别一下*的这两种用法的不同作用。
一个星号是接收变量,但两个星号是在接收字典,但是它们的顺序不能变,请看以下的代码
def out_print(a, *b, **c): print('a:', a) print('b:', b) print('c:', c)out_print(1, 2, 3, 4, 5, c=6)out_print(c=6, 1, 2, 3, 4, 5) # 错误的使用顺序out_print(1, 2, c=6, 3, 4, 5) # 错误的使用顺序def out_print(*b, **c): print('b:', b) print('c:', c)def out_print(*b): print('b:', b)def out_print(**c): print('c:', c)def out_print(a, **c, *b): # 错误的定义顺序 print('a:', a) print('b:', b) print('c:', c)def out_print(*b, **c, a): # 错误的定义顺序 print('a:', a) print('b:', b) print('c:', c)接下来请阅读“linux系统系列教程:1-隐藏到幕后的linux”的内容。
