Python3學習筆記 | 十二、Python的語句與語法-賦值與表達式

  • 2019 年 10 月 6 日
  • 筆記

一、賦值語句簡介

在Python里,賦值語句與其它語言有所不同,它不是直接把相應的值賦給變數,而是把對象的地址賦給變數,讓變數可以找到相應的對象,這個叫做對象的引用。 • 賦值語句建立對象引用值。Python賦值可以理解成存儲了對象的指針 • 變數名在首次賦值時會被創建。因為變數本身沒有類型,所以不需要提前創建 • 變數名在引用前必須先賦值。 • 執行隱式賦值的一些操作。所謂的隱式賦值,就是函數調用、模組倒入、類的定義、for 循環等。

二、賦值語句形式

_text = 『Text』 :基本形式 _text1, _text2 = 『Text1』, 『Text2』 :序列賦值-元組賦值運算 [_text1, _text2] = [『Text1』, 『Text2』] :序列賦值-列表賦值運算 t1, t2, t3, t4 = 『TEXT』 :序列賦值-字元串賦值運算 t1, *t2 = 『TEXT』 :擴展的序列解包(Python 3.x) t1 = t2 = 『TEXT』 :多目標賦值運算 t1 += 1 :增強賦值運算

三、序列賦值

>>> _1st=1  >>> _2nd=2  >>> first,second=_1st,_2nd  >>> first  1  >>> second  2

變數的個數與後面序列的元素個數必須一致。

>>> [a,b,c] = (1,2,3)  >>> [a,b,c]  [1, 2, 3]  >>> [a,b,c]='abc'  >>> [a,b,c]  ['a', 'b', 'c']

1、不對稱

我們有三個變數,a,b,c。我們想把text存儲到這三個變數里:

>>> a,b,c='text'[0],'text'[1],'text'[2]  >>> a,b,c  ('t', 'e', 'x')  >>> a,b,c=list('text'[:2])+['text'[2:]]  >>> a,b,c  ('t', 'e', 'xt')  >>> a,b='text'[:2];c='text'[2:]  >>> a,b,c  ('t', 'e', 'xt')  >>> (a,b),c='text'[:2],'text'[2:]  >>> a,b,c  ('t', 'e', 'xt')

2、迭代用法

>>> mylist=[(1,2,3),(4,5,6),(7,8,9)]  >>> for a,b,c in mylist:  ...     print(a,b,c)  ...  1 2 3  4 5 6  7 8 9

這個可以理解為:每次迭代的時候,提取一個列表裡的元素。第一次為例:提取(1,2,3),然後執行a,b,c = (1,2,3)。因此第一次a引用的值是1,b為2,c為3。以此類推。

>>> L=[1,2,3,4]  >>> while L:  ...     T,L=L[0],L[1:];print(T,L)  ...  1 [2, 3, 4]  2 [3, 4]  3 [4]  4 []

3、擴展序列解包

之前變數與對象不對稱的時候,需要特殊操作。這個在Python3.x之後有了新的用法。

>>> a,*b,c=1,2,3,4  >>> a,b,c  (1, [2, 3], 4)

之前的循環方法,在這裡也可以使用擴展序列解包:

>>> L=[1,2,3,4]  >>> while L:  ...     T,*L=L;print(T,L)  ...  1 [2, 3, 4]  2 [3, 4]  3 [4]  4 []

擴展解包當遇到只有一個元素,或者沒有元素的時候即在邊界情況的時候:

>>> T=(1,2)  >>> a,*b=T  >>> a,b  (1, [2])  >>> a,b,*c=T  >>> a,b,c  (1, 2, [])  >>> *a,b,c=T  >>> a,b,c  ([], 1, 2)  >>> *a=T   File "<stdin>", line 1  SyntaxError: starred assignment target must be in a list or tuple  >>> *a,=T  >>> a  [1, 2]

四、多目標賦值

多目標賦值就是按下面方式賦值:

>>> a=b=c='Dora'

這個時候,跟之前說的,會把所有到對象的引用賦給a, b, c三個變數。因此這個時候這三個都是完全一樣的。

>>> a=b=c='Dora'  >>> a is b  True  >>> b is c  True  >>> a is c  True

上邊賦值相當於:

c = 'Dora'  b = c  a = b

關於共享引用,請查看之前筆記:「類型與運算-其它」中的引用與賦值。

五、增強賦值語句

下面的幾個語句就是增強賦值語句: X += Y,X -= Y,X = Y X /= Y,X *= Y,X //= Y X %= Y,X &=Y,X |= Y X ^= Y,X <<= Y,X >>= Y 舉個例子: X += 1 我們可以認為這個是 X = X + 1, 但在列表中是有區別的。

>>> M=L=[1,2]  >>> L=L+[3,4]  >>> M,L  ([1, 2], [1, 2, 3, 4])  >>> M=L=[1,2]  >>> L+=[3,4]  >>> M,L  ([1, 2, 3, 4], [1, 2, 3, 4])

六、變數命名規則

變數名可以是大小寫字母,數字和下劃線「」。但只能以大小寫字母或下劃線開頭,不能以數字開頭。變數名是區分大小寫的。保留字元是不能使用的。 Python 3.0里的保留字元: False,class,finally,is, return,None,continue,for, lambda,try,True,def, from,nonlocal,while,and, del,global,not,with, as,elif,if,or,yield, assert,else,import,pass, break,except,in,raise 在Python2.7里exec,print是保留欄位,但nonlocal, False, True不是。 特殊變數名: _main等,前後都有兩個下劃線的變數名,有很多是有特殊意義的。

七、表達式語句

表達式,就是等號右邊的部分。表達式本身不會存儲:

>>> d=print('Dora')  Dora  >>> d  >>> print(d)  None

常見表達式語句: Add(1, 2):函數調用 MyClass.Add(1,2):方法調用 Text:列印變數(交互模式) print(『My text』):列印操作


Tags: