網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
Python中賦值的含義
在C++中,變量就是對(duì)象本身,對(duì)變量賦值就改變了它代表的對(duì)象。
而在Python中,賦值的含義卻是關(guān)聯(lián)變量名字和實(shí)際對(duì)象,即變量指向了實(shí)際對(duì)象,當(dāng)對(duì)變量再次賦值時(shí),變量原來(lái)指向的對(duì)象并不會(huì)改變(其實(shí)對(duì)象的reference count會(huì)減1),而是變量指向了新的對(duì)象而已。
所以這還導(dǎo)致了一個(gè)后果,當(dāng)多個(gè)變量指向同一個(gè)對(duì)象時(shí),那么用其中一個(gè)變量修改對(duì)象后,其它指向同一對(duì)象的變量也“被改變”了。
下面的代碼清楚地顯示了這一點(diǎn):
>>> 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賦值語(yǔ)句的多種形式
Python語(yǔ)言本身有許多獨(dú)特之處, 入門易難精通(另一個(gè)角度看,簡(jiǎn)單但強(qiáng)勁的語(yǔ)法背后隱藏了許多復(fù)雜的實(shí)現(xiàn)),現(xiàn)以Python賦值語(yǔ)句的多種形式為例說(shuō)明。
賦值語(yǔ)句的特性
賦值語(yǔ)句創(chuàng)建對(duì)象引用,而不是對(duì)象復(fù)制;
變量在首次賦值時(shí)會(huì)被創(chuàng)建,不必提前預(yù)聲明變量名;
變量在引用前必須先賦值;
執(zhí)行隱式賦值的一些操作,如: 模塊導(dǎo)入、函數(shù)和類的定義、函數(shù)參數(shù)、for循環(huán)變量。
運(yùn)算 |
解釋 |
spam = 'Spam' |
基礎(chǔ)(basic)形式 |
spam, ham = 'yum', 'YUM' |
元組賦值(基于位置) |
[spam, ham] = ['yun', 'YUM'] |
列表賦值(基于位置) |
a, b, c, d = 'Spam' |
推廣的(generalized)序列賦值 |
a, *b = 'Spam' |
擴(kuò)展序列解包(Unpacking:解包、拆包) |
spam = ham = 'lunch' |
多目標(biāo)(multiple target)賦值 |
spam += 42 |
增強(qiáng)(augmented)賦值 |
上表取自《Python學(xué)習(xí)手冊(cè)》表 11-1
基礎(chǔ)(basic)形式
常見,如:
a=123
元組賦值(元組解包賦值)
a, b, c= 1, 2, "john"
等同于 (a, b, c) = (1, 2, "john")
兩個(gè)整型對(duì)象1和2的分配給變量 a 和 b,字符串對(duì)象 "john" 分配給變量 c。元組可以省略括號(hào)。
也是一種交換兩個(gè)變量的值,卻不需要自行創(chuàng)建臨時(shí)變量的方式,見后邊“Python中交換兩個(gè)變量的值”法二。
列表賦值(列表解包賦值)
[x, y, z] = [10, 20, 30]
推廣的(generalized)序列賦值
可以為多個(gè)對(duì)象指定多個(gè)變量。任何序列或其它可迭代的值可以付給長(zhǎng)度相同的名稱序列。如:
a, b, c = 'xyz'
參見下圖:
擴(kuò)展序列解包(Extended sequence unpacking)
帶星號(hào)前綴的變量名字,可以收集未被匹配的元素項(xiàng)。如:
a, *b, c = [1, 2, 3, 4]
參見下圖:
多目標(biāo)(multiple target)賦值
Python允許你同時(shí)為多個(gè)變量賦值。例如:
a = b = c = 2
以上實(shí)例,創(chuàng)建一個(gè)整型對(duì)象,值為2,三個(gè)變量被分配到相同的內(nèi)存空間上。
增強(qiáng)(augmented)賦值
除+=外,還有-=、*=、/=、%=、**=、//=
【簡(jiǎn)要說(shuō)明】
運(yùn)算符 |
描述 |
功效 |
+= |
加法賦值運(yùn)算符 |
c += a 等效于 c = c + a |
-= |
減法賦值運(yùn)算符 |
c -= a 等效于 c = c - a |
*= |
乘法賦值運(yùn)算符 |
c *= a 等效于 c = c * a |
/= |
除法賦值運(yùn)算符 |
c /= a 等效于 c = c / a |
%= |
取模賦值運(yùn)算符 |
c %= a 等效于 c = c % a |
**= |
冪賦值運(yùn)算符 |
c **= a 等效于 c = c ** a |
//= |
取整除賦值運(yùn)算符 |
c //= a 等效于 c = c // a |
Python中交換兩個(gè)變量的值
假設(shè)
x = 10
y = 20
法一: 創(chuàng)建臨時(shí)變量,并交換
臨時(shí)變量 temp ,將 x 的值存儲(chǔ)在 temp 變量中,接著將 y 值賦給 x,最后將 temp 賦值給 y 變量。
temp = x
x = y
y = temp
法二:不使用臨時(shí)變量,python特有的,利用元組賦值
x, y = y, x
原文鏈接:https://blog.csdn.net/m0_46463996/article/details/108001481
相關(guān)推薦
- 2023-05-20 linux?shell輸出換行簡(jiǎn)單實(shí)例_linux shell
- 2022-09-15 c語(yǔ)言如何實(shí)現(xiàn)兩數(shù)之和_C 語(yǔ)言
- 2022-09-05 C語(yǔ)言之關(guān)于二維數(shù)組在函數(shù)中的調(diào)用問(wèn)題_C 語(yǔ)言
- 2023-03-28 python數(shù)組如何添加整行或整列_python
- 2022-03-08 C++中的對(duì)象初始化操作代碼_C 語(yǔ)言
- 2022-07-01 詳解如何在Go語(yǔ)言中調(diào)用C源代碼_Golang
- 2022-05-21 Ingress七層路由機(jī)制實(shí)現(xiàn)域名的方式訪問(wèn)k8s_服務(wù)器其它
- 2022-10-23 React日期時(shí)間顯示組件的封裝方法_React
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支