日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python赋值语句格式_Python中变量和变量赋值的几种形式

發布時間:2025/4/5 python 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python赋值语句格式_Python中变量和变量赋值的几种形式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

動態類型的語言

python是動態類型的語言,不需要聲明變量的類型。

實際上,python中的變量僅僅只是用來保存一個數據對象的地址。無論是什么數據對象,在內存中創建好數據對象之后,都只是把它的地址保存到變量名中。所以變量名是類型無關的,但它指向的值是類型相關的,可以是數值、字符串、列表、函數、類、對象等等。這些內存對象中都至少包含3部分:對象類型、對象的引用計數(用來判斷改對象是否可被垃圾回收器回收)、對象的值。

因此,a = 3中,變量名a保存的是數據對象3的地址,之后可以為其賦值一個字符串a = “hello”,這時a保存的是"hello"字符串的地址。在這個類型改變的過程中,a僅僅只是修改了一下地址而已。

變量的命名風格

python中的變量命名時只能包含數字、大小寫字母、下劃線這三種類型的字符,并且數字不能是首字符。

還有一些有特殊意義的變量命名方式(目前這些內容了解即可):

前綴并后綴雙下劃線的變量,如__ name__,這種類型的變量在python中有特殊意義,屬于對象的內置屬性,以后學了類和對象就知道了

單下劃線前綴的變量,如_x,這類變量不會被from ModuleName import *的方式導入

雙下劃線前綴的變量,如__x,這類變量是類的本地變量或稱為類的私有變量,它會擴展成__classname_x

除此之外,還有約定俗成的命名方式:

常量以全大寫字符表示

普通變量、函數名、方法名都以小寫字母開頭命名

模塊名、包名以全小寫字母命名

類名以大寫字母開頭

因為只是約定俗成,所以沒有強制限制。

變量賦值的幾種形式細節

本文解釋python中變量賦值的形式,并解釋一些細節。后面還有一篇文章解釋python中按引用賦值的文章。

python中變量賦值的幾種形式。

注意:python的數值是不可變對象,無法在原處修改數據,所以不支持自增、自減。

其中(1)-(3)無需過多解釋,唯一需要注意的是,當使用逗號的時候,python總會臨時或永久地建立成tuple來保存元素,所以x, y = “long”, "shuai"在內部完全等價于(x, y) = (“long”, “shuai”)。

實際上,列表元素也可以賦值給元組,或者元組賦值給列表,只要兩邊的序列元素個數能對應,無所謂左右兩邊的序列類型:

對于(4)賦值方式,是序列賦值的行為,在python中,只要是序列,都可以這樣賦值。正如這里的變量賦值情況等價于:

如果換成其它的序列也一樣。例如:

但是變量和序列中的元素必須一一對應。如果變量名與元素個數不同,則會報錯,除非只有一個變量名,這表示將整個序列賦值給這個變量。

如果想要將序列中的元素賦值給不等的變量,可以考慮先將序列進行切片。

(5)的賦值方式則正好是讓變量名少于元素個數的方式。這種賦值形式稱為序列解包(下文會專門解釋這種賦值方式),多出來的元素會全部以列表的方式賦值給最后一個變量名。正如這里等價于:

下面兩種賦值方式得到的結果是一樣的,a是字符串,b是列表,b都包含3個元素:

賦值的結果:

(6)的賦值方式等價于:

python賦值時,總是先計算"=“右邊的結果,然后將結果按照賦值方式賦值給”="左邊的變量。所以,這里的過程是先將"long"賦值給變量b,再將b賦值給變量a。

因為總是先計算右邊,所以交換變量非常的方便。

(7)的賦值方式a += 3在結果上等價于a = a + 3,在其它語言中這兩種賦值方式是完全等價的,但在python中這種增強賦值的方式要比后者更高效率些,為什么效率要高一些,下文會稍作解釋。在很大程度上來說,Python中只要是簡化的形式,基本上都比更復雜的等價形式效率更高。

(8)的賦值方式((a, b), c) = (‘lo’, ‘ng’)是將序列進行嵌套序列賦值,將’lo’賦值給元組(a, b),'ng’賦值給c,元組又進一步賦值a=‘l’, b=‘o’。這種賦值方式在python中很好用,特別是在表達式中賦值的時候,比如for循環和函數參數:

關于序列解包

在前面簡單介紹了一下序列解包:

當使用一個前綴變量的時候,表示將序列中對應的元素全部收集到一個列表中(注意,總是一個列表),這個列表名為開頭的那個變量名。*號可以出現在任意位置處,只要賦值的時候能前后對應位置關系即可。

注意其中的幾個關鍵字:序列、對應的元素、列表

序列意味著可以是列表、元組、字符串等等

列表意味著只要收集不報錯,賦值給解包變量的一定是一個列表

對應的元素意味著可能收集到0或任意個元素到列表。

不管如何,收集的結果總是列表,只不過可能是空列表或者只有一個元素的列表。

例如:

兩個注意事項:

因為序列解包是根據元素位置來進行賦值的,所以不能出現多個解包變量

如果將序列直接賦值給單個解包變量時(即沒有普通變量),這個解包變量必須放在列表或元組中

之所以單個解包變量時必須放在元組或變量中,看下面兩個等價的例子就很容易理解了:

最后,序列解包是切片的便捷替代方式。能用序列解包的,都能用切片來實現,但切片要輸入額外的各種字符。例如:

需要注意,解包返回的一定是列表,但序列切片返回的內容則取決于序列的類型。例如下面元組的切片返回的是元組,而不是列表:

二元賦值表達式

python支持類似于a += 3這種二元表達式。比如:

在python中的某些情況下,這種二元賦值表達式可能比普通的賦值方式效率更高些。原因有二:

二元賦值表達式中,a可能會是一個表達式,它只需計算評估一次,而a = a + 3中,a要計算兩次。

對于可變對象,可以直接在原處修改得到修改后的值,而普通的一元賦值表達式必須在內存中新創建一個修改后的數據對象,并賦值給變量

第一點無需解釋。關于第二點,看下面的例子:

對于上面(1)和(4)的一元賦值表達式,先取得L,然后創建一個新的列表對象,將L拷貝到新列表對象中,并將4或5,6放進新列表對象,最后賦值給L。這個過程中涉及到了幾個步驟:新分配內存、內存中列表拷貝、放入新數據。

而(2)(3)是等價的,(5)(6)也是等價的,它們都是直接在內存中的原始列表處修改,不會有拷貝操作,新建的數據對象僅僅只是一個元素。

按照理論上來說,確實二元賦值方式要效率高一些,但要注意的是,列表中保存的只是各元素的引用,所以拷貝列表也僅僅只是拷貝一點引用,這是微乎其微的開銷。所以一元賦值和二元賦值的差距在這一點的性能上基本沒差距,主要的差距還在于一元、二元賦值方式可能存在的表達式不同評估次數。

總的來說,使用二元賦值表達式通常可以作為可變對象賦值的一種優化手段。

總結

以上是生活随笔為你收集整理的python赋值语句格式_Python中变量和变量赋值的几种形式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。