概
述:賦值語句是程式設計世界裡最常見的語句。
在python
中,擁有一些其他語言不具有的賦值技巧。
python
語句賦值的基本形式是:
在等號的左邊寫賦值語句的目標;在等式的右邊寫要賦值的物件。左側的目標可以是變數名或物件元素,而右側的物件可以是任何會計算得到的物件的表示式。需要注意:
賦值語句建立物件的引用值。
python
賦值語句會把物件的引用值儲存在變數名或資料結構的元素內。
變數名在首次賦值時會被建立。
變數名在引用前必須先賦值
隱式賦值語句:
import
、from
、def
、class
、for
、函式引數。 1
2 34 5
6 78 9
10 11
12 13
14 15
16 17
>>> #
基本賦值
... name = ['hinata','naruto','xlx']
>>> name
['hinata', 'naruto', 'xlx']
>>> # (1)
賦值語句建立物件的引用值。
... name2 = name
>>> name[0] = 'nici'
>>> name
['nici', 'naruto', 'xlx']
>>> name2
['nici', 'naruto', 'xlx']
>>> #
變數名在首次賦值時會被建立。
... #
變數名在引用前必須先賦值
... name = name3
traceback (most recent call last):
file "", line 3, in
nameerror: name 'name3' is not defined
說明:賦值語句建立物件的引用值。
上述**中,修改了
name
,name2
的值隨之改變。
變數名在引用前必須先賦值。
上述**中,
name3
沒被賦值就被引用,所以報
」not defined」
錯誤。
序列賦值可以多個賦值操作同時進行,也可以交換或者多個變數的值。 1
2 34 5 6
>>> x,y,z = 1,2,3
>>> print x,y,z
1 2 3
>>> x,y = y,x
>>> print x,y,z
2 1 3
上述的做法實際上是叫做序列解包或者遞迴解包。形象表示如下; 1
2 34 5
6 78 9
10 11
12 13
14 15
>>> values = 1,2,3
>>> values
(1, 2, 3)
>>> x,y,z = values
>>> print x,y,z
1 2 3
>>> a,b,c = 'abc'
>>> print a,b,c
a b c
>>> scoundrel =
>>> key,value = scoundrel.popitem()
>>> key
'age'
>>> value
16
注意:
所解包的序列中的元素數量必須和放置在賦值符號
=左邊的變數數量完全一致,否則
python
會在賦值時引發異常。 1
2 34 5
6 7 8
>>> x,y = (1,2,3)
traceback (most recent call last):
file "", line 1, in
valueerror: too many values to unpack
>>> x,y,z = 1,2
traceback (most recent call last):
file "", line 1, in
valueerror: need more than 2 values to unpack
鏈式賦值是將同一值賦值給多個變數的途徑。 1
2 34 5 6
>>> a=b=1
>>> a,b
(1, 1)
>>> b = b + 1
>>> a,b
(1, 2)
注意,若變數
a和變數
b是引用變數時,需要額外小心。 1
2 34 5 6
>>> a=b=
>>> a,b
(, )
>>> a,b
(['hinata'], ['hinata'])
這時,我們需要單獨賦值。 1
2 34 5
>>> a =
>>> b =
>>> a,b
(['hinata'], )
將x = x + y
寫成x += y
的形式,就是增量賦值。 1
2 34 5
6 78 9
10 11
12 13
14 >>> x = 1
>>> y = 2
>>> x += y
>>> x
3 >>> x &= y
>>> x
2 >>> x //= y
>>> x
1 >>> x **= y
>>> x 1
增強賦值語句的優點
左側只需計算一次。
在x += y中,x
出現一次,則只需計算一次。而在完整形式
x = x + y 中,x
出現兩次,則必須執行兩次。因此,增強賦值語句通常執行得更快。
優化技術會自動選擇。對於支援原處修改的物件而言,增強形式會自動執行原處的修改運算,而不是相比來說速度更慢的複製。
注意:對於
』+=』
,通常隱含的意思是:對列表是做原處修改的意思。其完全不像
』+』合併,總是生成新的物件。如下面**所示:
1 23 4
5 67 8
9 10
11 12
13 14
15 16
17 18
19 20
21 22
23 24
>>> l = [1,2]
>>> m = l
>>> l = l + [3,4]
>>> l,m
([1, 2, 3, 4], [1, 2])
>>>
>>> l = [1,2]
>>> m = l
>>> l += [3,4]
>>> l,m
([1, 2, 3, 4], [1, 2, 3, 4])
>>>
>>> l = [1,2]
>>> m = l
>>> l,m
([1, 2, 3], [1, 2, 3])
>>>
>>>
>>> l = [1,2]
>>> m = l
>>> l.extend([3,4])
>>> l,m
([1, 2, 3, 4], [1, 2, 3, 4])
注意:由於字串是不可變型別,所以
』+=』
對於字串沒有上述的效果。 1
2 34 5
6 78 9
10 11
12 >>> l = 'i'
>>> m = l
>>> l = l + ' love'
>>> l,m
('i love', 'i')
>>>
>>>
>>> l = 'i love'
>>> m = l
>>> l += ' you'
>>> l,m
('i love you', 'i love')
5 Python中的控制語句
3推倒或內涵 選擇語句的基本形式 if 條件 語句elif 條件 語句else 語句if 語句示例 age input please input your year age int age if age 18 print 未成年 elif age 18 and age 25 print 青年 els...
5 python學習 條件語句
程式語言一般都由這麼幾個部分組成 變數條件分支語句 迴圈語句 函式 這裡要說的就是條件分支語句。python的條件語句和shell指令碼的非常像,也就是ifelse ifelse這種形式,其中else if可以縮寫為elif。if 條件判斷1 執行1 elif 條件判斷2 執行2 elif 條件判斷...
python學習之路(5)Python字元和運算子
在python中,字串屬於不可變物件。不支援原地修改,如果需要修改其中的值,智慧型建立新的字串物件。但是,經常我們確實需要原地修改字串,可以使用io.stringio物件或array模組。例如,開啟idle。import io s hello,sxt sio io.stringio s sio io...