中文字幕一区二区人妻电影,亚洲av无码一区二区乱子伦as ,亚洲精品无码永久在线观看,亚洲成aⅴ人片久青草影院按摩,亚洲黑人巨大videos

Python中的變量

發(fā)布于:2021-02-01 14:59:20

0

183

0

基礎(chǔ)知識 python 變量

在上一篇關(guān)于Python基本數(shù)據(jù)類型的教程中,您看到了如何創(chuàng)建各種Python數(shù)據(jù)類型的值。但到目前為止,所有顯示的值都是文本值或常量值:

>>> print(5.3)
5.3

如果您正在編寫更復(fù)雜的代碼,那么您的程序?qū)⑿枰S著程序執(zhí)行的進行而改變的數(shù)據(jù)。

您將在本教程中學(xué)習(xí)到:您將學(xué)習(xí)如何用抽象術(shù)語對象來描述Python程序中的每一項數(shù)據(jù),以及如何使用名為變量的符號名稱來操作對象。

變量賦值

將變量視為附加到特定對象的名稱。在Python中,變量不需要像許多其他編程語言那樣預(yù)先聲明或定義。要創(chuàng)建一個變量,只需給它賦值,然后開始使用它。賦值用一個等號(=)完成:

>>> n = 300

這被讀取或解釋為“n被賦值300”,一旦這樣做,n可以用在語句或表達式中,其值將被替換:

>>> print(n)
300

就像文本值可以在REPL會話中直接從解釋器提示符顯示一樣,無需print(),變量也可以:

>>> n
300

稍后,如果您更改n的值并再次使用它,新值將被替換:

>>> n = 1000
>>> print(n)
1000
>>> n
1000

Python還允許鏈式賦值,這使得可以同時將相同的值賦給多個變量:

>>> a = b = c = 300
>>> print(a, b, c)
300 300 300

上面的鏈式賦值將300賦給變量a、bc同時進行。

Python中的變量類型

在許多編程語言中,變量是靜態(tài)類型的。這意味著變量最初被聲明為具有特定的數(shù)據(jù)類型,并且在其生存期內(nèi)分配給它的任何值都必須始終具有該類型。

Python中的變量不受此限制。在Python中,可以為變量分配一種類型的值,然后再重新分配另一種類型的值:

>>> var = 23.5
>>> print(var)
23.5

>>> var = "Now I'm a string"
>>> print(var)
Now I'm a string

對象引用

進行變量賦值時實際發(fā)生了什么?這是Python中的一個重要問題,因為答案與許多其他編程語言中的答案有些不同。

Python是一種高度面向?qū)ο蟮恼Z言。事實上,Python程序中幾乎所有的數(shù)據(jù)項都是特定類型或類的對象。(這一點將在這些教程中多次重復(fù)。)

考慮以下代碼:

>>> print(300)
300

當(dāng)呈現(xiàn)語句時,解釋器執(zhí)行以下操作:

  • 創(chuàng)建整數(shù)對象

  • 給它值300

  • 顯示它在控制臺中

您可以看到使用內(nèi)置的函數(shù)創(chuàng)建了一個整數(shù)對象:

>>> type(300)

Python變量是一個符號名,是指向?qū)ο蟮囊没蛑羔?。一旦一個對象被指定給一個變量,你就可以用這個名字來引用這個對象。但是數(shù)據(jù)本身仍然包含在對象中。

例如:

>>> n = 300

此賦值創(chuàng)建一個值為300的整數(shù)對象,并指定變量n指向該對象。

可變參考圖

下面的代碼驗證是否n指向整數(shù)對象:

>>> print(n)
300
>>> type(n)
<class 'int'>

現(xiàn)在考慮以下語句:

>>> m = n

執(zhí)行它會發(fā)生什么?Python不會創(chuàng)建另一個對象。它只是創(chuàng)建一個新的符號名稱或引用m,它指向指向的同一對象n。

Python變量引用同一對象(插圖)

接下來,假設(shè)您這樣做:

>>> m = 400

現(xiàn)在,Python使用value創(chuàng)建一個新的整數(shù)對象400,并m成為對其的引用。

對Python中單獨對象的引用(圖)

最后,假設(shè)此語句接下來執(zhí)行:

>>> n = "foo"

現(xiàn)在,Python使用該值創(chuàng)建一個字符串對象,"foo"并對其進行n引用。

Python變量參考圖

不再有對整數(shù)對象的引用300。它是孤立的,無法訪問它。

本系列中的教程有時會提到對象的生命周期。對象的生命始于創(chuàng)建之時,這時至少創(chuàng)建了對其的一個引用。如上所見,在對象的生存期內(nèi),可能會創(chuàng)建對該對象的其他引用,并且對它的引用也會被刪除。只要有至少一個引用,一個對象就可以保持原樣。

當(dāng)對一個對象的引用數(shù)降至零時,將無法再訪問該對象。到那時,它的壽命結(jié)束了。Python最終將注意到它不可訪問,并回收分配的內(nèi)存,以便將其用于其他用途。在計算機術(shù)語中,此過程稱為垃圾收集。

對象標(biāo)識

在Python中,創(chuàng)建的每個對象都有一個唯一標(biāo)識它的數(shù)字。在生命周期重疊的任何時期,保證沒有兩個對象具有相同的標(biāo)識符。一旦一個對象的引用計數(shù)降到零并且被垃圾收集,就像上面的300對象一樣,那么它的標(biāo)識號就變?yōu)榭捎?,并且可以再次使用?/span>

內(nèi)置的Python函數(shù)id()返回一個對象的整數(shù)標(biāo)識符。使用id()函數(shù),您可以驗證兩個變量確實指向同一對象:

>>> n = 300
>>> m = n
>>> id(n)
60127840
>>> id(m)
60127840

>>> m = 400
>>> id(m)
60127872

賦值后m = nmn都指向同一對象,由id(m)id(n)返回相同數(shù)字的事實確認。一旦m被重新分配到400,mn指向具有不同標(biāo)識的不同對象。

深入:緩存小整數(shù)值

根據(jù)您現(xiàn)在對Python中變量賦值和對象引用的了解,下面的內(nèi)容可能不會讓您感到驚訝:

>>> m = 300
>>> n = 300
>>> id(m)
60062304
>>> id(n)
60062896

通過語句m = 300,Python創(chuàng)建了一個值為300的整數(shù)對象,并將m設(shè)置為對它的引用。然后將n類似地分配給值為300的整數(shù)對象,但不是相同的對象。因此,它們具有不同的標(biāo)識,您可以通過id()。

返回的值來驗證這些標(biāo)識,但請考慮以下情況:

>>> m = 30
>>> n = 30
>>> id(m)
1405569120
>>> id(n)
1405569120

這里,mn分別分配給值為30的整數(shù)對象。但在這種情況下,id(m)id(n)是相同的!

為了優(yōu)化,解釋器在啟動時為[-5, 256]范圍內(nèi)的整數(shù)創(chuàng)建對象,然后在程序執(zhí)行期間重用它們。因此,當(dāng)您將單獨的變量賦給此范圍內(nèi)的整數(shù)值時,它們實際上將引用同一對象。

變量名

到目前為止,您看到的示例使用了簡短的變量名,如mn。但是變量名可能更冗長。事實上,這樣做通常是有益的,因為這樣可以使變量的用途乍一看更加明顯。

正式地說,Python中的變量名可以是任意長度,可以由大小寫字母(A-Z、a-z)、數(shù)字(0-9)和下劃線字符(_). 另一個限制是,盡管變量名可以包含數(shù)字,但變量名的第一個字符不能是數(shù)字。

注意:Python3的一個新增功能是完全支持Unicode,它也允許變量名中使用Unicode字符。在以后的教程中,您將更深入地了解Unicode。

例如,以下所有變量名都是有效的:

>>> name = "Bob"
>>> Age = 54
>>> has_W2 = True
>>> print(name, Age, has_W2)
Bob 54 True

但是這個不是,因為變量名不能以數(shù)字開頭:

>>> 1099_filed = False
SyntaxError: invalid token

請注意,大小寫非常重要。小寫字母和大寫字母不一樣。下劃線字符的使用也很重要。以下每一項都定義了一個不同的變量:

>>> age = 1
>>> Age = 2
>>> aGe = 3
>>> AGE = 4
>>> a_g_e = 5
>>> _age = 6
>>> age_ = 7
>>> _AGE_ = 8

>>> print(age, Age, aGe, AGE, a_g_e, _age, age_, _AGE_)
1 2 3 4 5 6 7 8

沒有什么可以阻止您在同一個程序中創(chuàng)建兩個不同的變量,即ageAge,或者就此而言agE。但這可能是不明智的。當(dāng)你離開你的代碼一段時間后,它很可能會迷惑任何試圖閱讀你的代碼的人,甚至你自己。

給一個變量起一個足夠描述性的名字是值得的,這樣可以清楚地說明它的用途。例如,假設(shè)你正在統(tǒng)計大學(xué)畢業(yè)的人數(shù)。您可以選擇以下任一選項:

>>> numberofcollegegraduates = 2500
>>> NUMBEROFCOLLEGEGRADUATES = 2500
>>> numberOfCollegeGraduates = 2500
>>> NumberOfCollegeGraduates = 2500
>>> number_of_college_graduates = 2500

>>> print(numberofcollegegraduates, NUMBEROFCOLLEGEGRADUATES,
... numberOfCollegeGraduates, NumberOfCollegeGraduates,
... number_of_college_graduates)
2500 2500 2500 2500 2500

所有這些選項都可能比nncg等更好。至少你可以從名稱中看出變量的值應(yīng)該代表什么。

另一方面,它們不一定都是同樣易讀的。與許多事情一樣,這是個人喜好的問題,但大多數(shù)人會發(fā)現(xiàn)前兩個例子,字母都擠在一起,更難閱讀,尤其是所有大寫字母中的那一個。最常用的構(gòu)造多詞變量名的方法是最后三個示例:

  • 駝峰大小寫:第二個和隨后的單詞都大寫,以便于查看單詞邊界。(據(jù)推測,有人在某個時候突然想到,散布在變量名中的大寫字母有點像駝峰。)

  • 例如:numberOfCollegeGraduates

  • Pascal Case:與camel Case相同,除了第一個單詞也是大寫的以外。

  • 示例:NumberOfCollegeGraduates

  • 蛇形格:單詞之間用下劃線隔開。

  • 示例:number_of_college_graduates

程序員們以驚人的熱情進行了激烈的辯論,到底哪一個更好??梢詾樗麄兯腥颂岢龊侠淼恼摀?jù)。使用這三個中最吸引你的一個。選擇一個并始終如一地使用它。

稍后您將看到,變量并不是唯一可以命名的東西。您還可以命名函數(shù)、類、模塊等。適用于變量名的規(guī)則也適用于標(biāo)識符,標(biāo)識符是程序?qū)ο竺Q的更通用術(shù)語。

Python代碼的樣式指南,也稱為pep8,包含命名約定,列出了不同對象類型名稱的建議標(biāo)準。pep8包含以下建議:

  • 函數(shù)和變量名應(yīng)使用Snake Case。

  • 類名應(yīng)使用Pascal Case。(PEP 8將此稱為“大寫”約定。)

保留字(關(guān)鍵字)

標(biāo)識符名稱還有一個限制。Python語言保留了一小組指定特殊語言功能的關(guān)鍵字。任何對象都不能與保留字同名。

在Python3.6中,有33個保留關(guān)鍵字:

{xunruicms_img_title}

您可以通過輸入help("keywords")Python解釋器隨時查看此列表。保留字區(qū)分大小寫,必須完全按照所示使用。除,和外False,它們?nèi)繛樾懽帜浮?/p>

嘗試創(chuàng)建與任何保留字同名的變量會導(dǎo)致錯誤:

>>> for = 3
SyntaxError: invalid syntax

結(jié)論

本教程介紹了Python變量的基礎(chǔ)知識,包括對象引用和標(biāo)識以及Python標(biāo)識符的命名。

您現(xiàn)在已經(jīng)對Python的某些數(shù)據(jù)類型有了很好的了解,并且知道如何創(chuàng)建引用這些類型的對象的變量。

接下來,您將看到如何將數(shù)據(jù)對象組合成涉及各種操作的表達式。