Python中賦值的含義及說明
Python中賦值的含義
在C++中,變量就是對象本身,對變量賦值就改變了它代表的對象。
而在Python中,賦值的含義卻是關聯(lián)變量名字和實際對象,即變量指向了實際對象,當對變量再次賦值時,變量原來指向的對象并不會改變(其實對象的reference count會減1),而是變量指向了新的對象而已。
所以這還導致了一個后果,當多個變量指向同一個對象時,那么用其中一個變量修改對象后,其它指向同一對象的變量也“被改變”了。
下面的代碼清楚地顯示了這一點:
>>> a = [0, 1, 2, 3] >>> b = a >>> a [0, 1, 2, 3] >>> b [0, 1, 2, 3] >>> a[0] = 99 >>> a [99, 1, 2, 3] >>> b [99, 1, 2, 3] >>> a = [5, 6, 7, 8] >>> a [5, 6, 7, 8] >>> b [99, 1, 2, 3]
Python賦值語句的多種形式
Python語言本身有許多獨特之處, 入門易難精通(另一個角度看,簡單但強勁的語法背后隱藏了許多復雜的實現(xiàn)),現(xiàn)以Python賦值語句的多種形式為例說明。
賦值語句的特性
賦值語句創(chuàng)建對象引用,而不是對象復制;
變量在首次賦值時會被創(chuàng)建,不必提前預聲明變量名;
變量在引用前必須先賦值;
執(zhí)行隱式賦值的一些操作,如: 模塊導入、函數(shù)和類的定義、函數(shù)參數(shù)、for循環(huán)變量。
運算 | 解釋 |
spam = 'Spam' | 基礎(basic)形式 |
spam, ham = 'yum', 'YUM' | 元組賦值(基于位置) |
[spam, ham] = ['yun', 'YUM'] | 列表賦值(基于位置) |
a, b, c, d = 'Spam' | 推廣的(generalized)序列賦值 |
a, *b = 'Spam' | 擴展序列解包(Unpacking:解包、拆包) |
spam = ham = 'lunch' | 多目標(multiple target)賦值 |
spam += 42 | 增強(augmented)賦值 |
上表取自《Python學習手冊》表 11-1
基礎(basic)形式
常見,如:
a=123
元組賦值(元組解包賦值)
a, b, c= 1, 2, "john"
等同于 (a, b, c) = (1, 2, "john")
兩個整型對象1和2的分配給變量 a 和 b,字符串對象 "john" 分配給變量 c。元組可以省略括號。
也是一種交換兩個變量的值,卻不需要自行創(chuàng)建臨時變量的方式,見后邊“Python中交換兩個變量的值”法二。
列表賦值(列表解包賦值)
[x, y, z] = [10, 20, 30]
推廣的(generalized)序列賦值
可以為多個對象指定多個變量。任何序列或其它可迭代的值可以付給長度相同的名稱序列。如:
a, b, c = 'xyz'
參見下圖:
擴展序列解包(Extended sequence unpacking)
帶星號前綴的變量名字,可以收集未被匹配的元素項。如:
a, *b, c = [1, 2, 3, 4]
參見下圖:
多目標(multiple target)賦值
Python允許你同時為多個變量賦值。例如:
a = b = c = 2
以上實例,創(chuàng)建一個整型對象,值為2,三個變量被分配到相同的內(nèi)存空間上。
增強(augmented)賦值
除+=外,還有-=、*=、/=、%=、**=、//=
【簡要說明】
運算符 | 描述 | 功效 |
+= | 加法賦值運算符 | c += a 等效于 c = c + a |
-= | 減法賦值運算符 | c -= a 等效于 c = c - a |
*= | 乘法賦值運算符 | c *= a 等效于 c = c * a |
/= | 除法賦值運算符 | c /= a 等效于 c = c / a |
%= | 取模賦值運算符 | c %= a 等效于 c = c % a |
**= | 冪賦值運算符 | c **= a 等效于 c = c ** a |
//= | 取整除賦值運算符 | c //= a 等效于 c = c // a |
Python中交換兩個變量的值
假設
x = 10 y = 20
法一: 創(chuàng)建臨時變量,并交換
臨時變量 temp ,將 x 的值存儲在 temp 變量中,接著將 y 值賦給 x,最后將 temp 賦值給 y 變量。
temp = x x = y y = temp
法二:不使用臨時變量,python特有的,利用元組賦值
x, y = y, x
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
python提取具有某種特定字符串的行數(shù)據(jù)方法
今天小編就為大家分享一篇python提取具有某種特定字符串的行數(shù)據(jù)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-12-12python中[[]] * (n)和[[] for _ in 
本文主要介紹了python中[[]] * (n)和[[] for _ in range(n)]的區(qū)別詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2024-02-02python神經(jīng)網(wǎng)絡MobileNet模型的復現(xiàn)詳解
這篇文章主要為大家介紹了python神經(jīng)網(wǎng)絡MobileNet模型的復現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-05-05