溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Python基礎(chǔ)語法-內(nèi)存管理-運算符-程序控制

發(fā)布時間:2020-06-09 17:01:02 來源:網(wǎng)絡(luò) 閱讀:608 作者:Python熱愛者 欄目:編程語言

1 Python 基礎(chǔ)語法

所有語言都有它自己規(guī)定的格式,Python也不例外,下面從幾個方面來了解。

1.1 注釋

?在Python中主要的使用的注釋方式是#號,當(dāng)然在某些情況下三對單引號也是可以的,比如在函數(shù)中可以作為函數(shù)的說明。


Python基礎(chǔ)語法-內(nèi)存管理-運算符-程序控制

1.2 縮進

C語言使用的是花括號來表示層級關(guān)系,但是看起來不簡潔,挺難看,而Python使用的是縮進的方式表示層級關(guān)系,并且約定4個空格為一個層級。

1.3 續(xù)行

當(dāng)我們一行的代碼超過了一屏顯示的長度以后,多數(shù)情況下為了直觀,我們會另起一行,接著些,在Python中在行尾使用?\?標(biāo)識續(xù)行,但如果在表達(dá)式或者某一段代碼中使用了括號,那么Python認(rèn)為括號內(nèi)是一個整體,內(nèi)部跨行不需要使用\。

1.4 標(biāo)識符

????????很多時候,我們寫代碼的過程中會對我們需要的數(shù)據(jù)進行存儲并命名,方便后續(xù)使用,這個命名被稱為標(biāo)識符,針對標(biāo)識符Python進行了如下要求:

一個名字,用來指代一個值

只能是字母、數(shù)字下劃線的組合

只能以字母或者下劃線開頭

不能是Python的關(guān)鍵字,例如def、class就不能作為標(biāo)識符

Python是大小寫敏感的

????????在我們寫代碼的過程中最好遵循下列約定:

不允許使用中文

不允許使用歧義單詞,例如class_

在Python中不要隨便使用下劃線開頭的標(biāo)識符

1.5 轉(zhuǎn)義序列

????????python中內(nèi)置了很多特殊的符號,比如換行、制表符什么的,部分含義如下:

\\:單個\表示轉(zhuǎn)義,\\?就指代?\?這個符號。表示把\后面的字符進行轉(zhuǎn)義,不用特殊方式進行轉(zhuǎn)換。

\t:制表符,一般用來進行輸出格式調(diào)整,比如對齊等

\r:回車符

\n: 換行符

1.6 數(shù)字

在Python中數(shù)字主要分為三種類型:整型,浮點數(shù),復(fù)數(shù)。

整型:在Python3中,不區(qū)分long和int,所有整型均為int類型,當(dāng)然還包括了不同進制,比如2進制,8進制,16進制等,都為int類型。需要注意的是Python中的bool型屬于整型的子類,所以bool的兩個值,用整型可以表示為,0:False,非0:True。

浮點數(shù):即帶小數(shù)點的float型

復(fù)數(shù):用于科學(xué)計算,比如1+2j等

1.7 字符串

在Python中,使用'(單引號),"(雙引號)括起來表示引用字符的序列,使用''',""",則可以跨行,并且自由的使用單雙引號。除此之外還可以在字符串前加一定的符號來確切的表示字符串。

r: 字符串前加r或者R,表示該字符串不做任何處理,所見即所得

f: 3.6版本開始新增的前綴,表示格式化字符串,例如變量引用


Python基礎(chǔ)語法-內(nèi)存管理-運算符-程序控制

1.8 其他

????????在Python中還有一些地方和其他語言有很大區(qū)別,比如:

常量:本身指代一旦賦值就不能被改變的標(biāo)識符,但是Python中是沒有這個概念的,換句話說就是,Python中,只要你看的到的東西,是都可以進行修改的。

字面常量:一個單獨的量,看字面意思就知其含義,比如12,就表示數(shù)字12

變量:賦值后,可以改變值的標(biāo)識符。

注意:在Python中是不需要提前申明變量的類型的,所以變量的賦值即定義

total =2500# 定義了一個total變量,它的值是2500。 賦值即定義

2 Python 運算符

在Python中,運算符是比較重要的知識了,因為很多地方都需要知道多個數(shù)據(jù)的大小關(guān)系、邏輯關(guān)系,當(dāng)然賦值也是需要用到運算符的,根據(jù)類型的不同,主要分為賦值運算符、算數(shù)運算符、關(guān)系運算符、邏輯運算符以及位運算符。

2.1 賦值運算符

我們?nèi)粘J褂玫?號就屬于賦值運算符的一種,在Python還有如下算數(shù)運算符:

=:賦值,例如:x=3,y='abc'

+=?:自加,例如:x+=2,則表示x=x+2

-=:自減,例如:x-=2,表示x=x-2

*=:自乘,例如:x=2,表示x=x2

/=:自除,例如:x/=2,表示x=x/2

%=:自取余,例如:x%=2,表示x=x%2。 x對2取余數(shù),假如x=6,那么取余為0

當(dāng)把數(shù)字賦值給一個變量的時候不用加引號,而賦值字符串給變量的時候就需要加引號了,否則python認(rèn)為你賦值的是另一個變量。

2.2 算數(shù)運算符

????????數(shù)學(xué)計算中的+,-,* 等都屬于算數(shù)運算符的一種,其他的運算符如下:

+:加,用來計算數(shù)字,如果字符串、列表等相加,等于是把兩個對象拼到一起

-:減,同數(shù)學(xué)減

*:乘,同數(shù)學(xué)乘

/:除,4/3,默認(rèn)是整除,為了得到小數(shù),可以把其中一個變量變成浮點型,4.0/3或4/3.0

//:表示只取整數(shù),4.0/3 答案是1.33333,如果用4.0//,因為取整則,答案是1

%:表示取余數(shù),10%2余0,10%3余1

**:表示乘方 2**3 表示2的3次方

2.3 關(guān)系運算符

????????關(guān)系運算符顧名思義就是判斷關(guān)系的,比如大于,小于啊,等等,需要注意的是返回值為布爾值:即True或者False。更多的符號有:

>:大于,例如1>2,值是False

<:小于,例如1<2,值是True

>=:大于等于,例如1>=2,值是False

<=: 小于等于,例如1<=2,值是True

==:是否等于,例如1==2,值是False

!=:不等于,例如 1!=2,值是True

2.4 邏輯運算符

邏輯運算符主要包含了三個:and,or,not

and:邏輯與,只要有1個是false那么值就是False,1==2 and 1<2 ,值是False,1!=2 and 1<2,值是Frue

or:邏輯或,只要有一個是true那么值就是true,1=2 and 1<2 ,值是true

not:邏輯非,取反 not 1<2,值是true

邏輯運算符又被稱為短路運算符:

and 如果第一個表達(dá)式為False,后面就沒必要計算了,這個邏輯表達(dá)式一定為False

or如果第一個表達(dá)式為True,后面就沒必要計算了,這個邏輯表達(dá)式一定為True

2.5 位運算符

????????故名思議,位運算符主要是針對位進行的計算的,它比加減運算略快,通常也比乘除法運算要快很多。說到位就不得不提補碼了,因為計算機存儲負(fù)數(shù)時使用的都是補碼。

2.5.1 原碼、反碼、補碼、負(fù)數(shù)表示法

????????計算機當(dāng)初因為成本、復(fù)雜等各種原因,在進行加減法計算的時候,會把減法變?yōu)榧臃ㄟM行計算,如何理解呢?例如5-1,在計算機中進行計算的時候?qū)嶋H上用的是5+(-1),而負(fù)數(shù)在內(nèi)存中并不會直接寫個-0b1,負(fù)數(shù)在計算機中使用的是補碼進行存儲和運算的,計算機中有關(guān)數(shù)字的都有什么瑪?什么是補碼?

原碼:即人類可讀的二進制位(0b101,0b1)

反碼:正數(shù)的反碼與原碼相同;負(fù)數(shù)的反碼符號位不變其余按位取反

補碼:正數(shù)的補碼與原碼相同;負(fù)數(shù)的補碼符號位不變其余按位取反后+1

需要注意的是:負(fù)數(shù)在計算機中使用補碼進行存儲,比如-1在計算機存儲的是1111 1111,負(fù)數(shù)補碼的補碼就表示負(fù)數(shù)本身。正數(shù)的原碼反碼補碼都是相同的,計算機存儲內(nèi)存中的數(shù)字都為二進制位,當(dāng)我們想要查看具體代表的值時,計算機會轉(zhuǎn)換為人類可讀的原碼進行顯示,即:如果最高的符號位是0,那么認(rèn)為它是正數(shù),不進行去補,而最高的符號位如果是1,那么它會認(rèn)為它是負(fù)數(shù),會按照負(fù)數(shù)的取補的規(guī)則進行計算后展示。

例題:計算機,計算 5 - 1 的過程


Python基礎(chǔ)語法-內(nèi)存管理-運算符-程序控制

例題:計算~12


Python基礎(chǔ)語法-內(nèi)存管理-運算符-程序控制

2.5.2 位運算符

????????針對位的運算符主要有:& | ~ ^ << >>.

&:按位與,即按位相乘(1101 & 0001 , 與出來是0001)

|:按位或,即按位相加,不進位(1101 | 0001,或出來是1101)?0乘任何數(shù)是0,1+任何數(shù)是1

^:按位異或

~:取反

<<:左移(位)

>>:右移(位),例如32 >> 3 等于32//8 , 結(jié)果是4

位運算符,日常使用的不多,但是如果你想做一個高級程序員,那么位運算是你必備的技能哦

2.6 成員、身份運算符

in/not in 成員測試,測試一個元素是否在一個序列中

is /is not 統(tǒng)一性的測試

2.7 運算符優(yōu)先級


Python基礎(chǔ)語法-內(nèi)存管理-運算符-程序控制

小結(jié):

算數(shù)運算符?>?位運算符?>?身份運算符?>?成員運算符?>?邏輯運算符

記不住的話,記得用括號

長表達(dá)式,多用括號。

注意:在Python中,賦值即定義,如果一個變量已經(jīng)定義,賦值相當(dāng)于重新定義

3 Python 內(nèi)存管理

????????計算機的內(nèi)存大多是線性編址的(1001,1002,1003門牌號,挨著排列的),現(xiàn)在有一個變量var1需要1001~1007空間,var2需要1008~1012空間,如下圖


Python基礎(chǔ)語法-內(nèi)存管理-運算符-程序控制

過了一段時間以后,var1中的1002,和1005不用了,var2的1010也不用了,內(nèi)存就變成了如下的情況:


Python基礎(chǔ)語法-內(nèi)存管理-運算符-程序控制

這時又來了一個 var3 需要申請 3個空間,在當(dāng)前情況下就沒辦法進行分配了


Python基礎(chǔ)語法-內(nèi)存管理-運算符-程序控制

這種情況就是我們常說的內(nèi)存空洞了,也叫內(nèi)存碎片化,如果沒辦法進行碎片整理,那么這些分散的內(nèi)存空間將沒有辦法被重新使用

3.1 Python的內(nèi)存特性

變量無需事先聲明,也不需要指定類型,這是動態(tài)語言的特性

Python使用引用計數(shù)記錄所有對象的引用數(shù)。

當(dāng)對象的引用數(shù)變?yōu)?,它就可以被垃圾回收GC

當(dāng)對變量進行賦值時,同時會增加該對象的引用計數(shù)

函數(shù)或代碼塊運行完畢,變量會消亡,那么引用計數(shù)會減少

3.2 Python的GC管理

Python在對內(nèi)存進行管理時會像Java那樣對內(nèi)存進行分類,Java中將內(nèi)存分為了老生代,新生代,持久化代,而Python中則分成了0,1,2三代,其中0代可以理解為臨時存儲,1代為短期存儲,2代為長期存儲,當(dāng)應(yīng)用申請內(nèi)存時,會根據(jù)內(nèi)存情況先分配0帶給程序使用,然后定期檢查各個區(qū)的使用情況,如果某個程序在0區(qū)待的夠久,那么在 Python 啟動GC的時候,就會把它從0區(qū)移動到1區(qū),同理在1區(qū)時間夠久的,移動到2區(qū)。當(dāng)然在啟動GC的時候還會檢查引用計數(shù)為0的對象,然后清理掉。

需要注意的是,Python啟動GC的同時,不能進行其它的任務(wù)。頻繁的垃圾回收將大大降低Python的工作效率。如果內(nèi)存中的對象不多,就沒有必要總啟動垃圾回收。所以,Python只會在特定條件下,自動啟動垃圾回收。當(dāng)Python運行時,會記錄其中分配對象(object allocation)和取消分配對象(object deallocation)的次數(shù)。當(dāng)兩者的差值高于某個閾值時,垃圾回收才會啟動。


Python基礎(chǔ)語法-內(nèi)存管理-運算符-程序控制

所以:

Python編程中一般無需關(guān)心變量的存亡,一般也不用關(guān)心內(nèi)存的管理,由Python的GC統(tǒng)一進行垃圾回收

當(dāng)有關(guān)Python性能問題的時候,就需要考慮變量引用的問題,盡量不要釋放內(nèi)存,交由Python GC來操作,除非你更懂它。


Python基礎(chǔ)語法-內(nèi)存管理-運算符-程序控制

4 程序控制

Python的程序控制主要分為順序,分支,循環(huán),這也和大多數(shù)語言是相同的。

順序結(jié)構(gòu):按照先后順序一條一條執(zhí)行,比如:先起床,再刷牙,再吃飯

分支結(jié)構(gòu):根據(jù)不同的情況判斷,條件滿足后執(zhí)行相應(yīng)的操作,比如你去買個西紅柿,如果看見西瓜,就買兩個(真正的程序員會買回來兩個西紅柿的,別問我為什么,哈哈)

循環(huán)結(jié)構(gòu):條件滿足就反復(fù)執(zhí)行,不滿足就不執(zhí)行或者不再執(zhí)行(循環(huán)完畢)

4.1 分支結(jié)構(gòu)

計算機之所以能做很多自動化的任務(wù),因為它可以自己做條件判斷。在Python中主要通過if以及else的搭配來完成條件判斷的工作。條件判斷主要有三種基本用法。

4.1.1 單分支

顧名思義即如果怎么樣,就怎么樣。(if)


Python基礎(chǔ)語法-內(nèi)存管理-運算符-程序控制

表達(dá)式:是將不同的數(shù)據(jù)(包括變量、函數(shù))用運算符號按一定規(guī)則連接起來的一種式子。

4.1.2 多分支

多分支有分為兩種情況:

如果怎么樣,就怎么樣,否則,怎么樣。(if、else)

如果1怎么樣,就怎么樣,如果2怎么樣,就怎么樣...,否則,怎么樣(if、elif、else)


Python基礎(chǔ)語法-內(nèi)存管理-運算符-程序控制

4.1.3 分支嵌套

????????分支嵌套,就是將多個兩個或多個if判斷進行層級嵌套,完成更精確的判斷。


Python基礎(chǔ)語法-內(nèi)存管理-運算符-程序控制

4.1.4 小結(jié)

條件的寫法非常多,可以寫一個表達(dá)式或者多個表達(dá)式都可以,表達(dá)式的值為0,就表示false。

if就是判斷,主要就是對表達(dá)式的邏輯值進行判斷

邏輯值(bool)包含了兩個值:

True:表示非空的量(比如:string、tuple、list、set、dictionary),所有非零數(shù)。

False:表示0,None,空的量(空字符串,空字典,空列表,空即可,空元祖)等。這些對象又可以成為False等價

4.2 循環(huán)

為了讓計算機能反復(fù)執(zhí)行某一操作,我們需要循環(huán)語句來完成。Python中的循環(huán)主要有兩種:for循環(huán)和while循環(huán)。

4.2.1 for 循環(huán)

基本所有語言都有for關(guān)鍵字,它的曝光率遠(yuǎn)遠(yuǎn)超過其它關(guān)鍵字,但每個語言有它自己的格式,在Python中它的格式為


Python基礎(chǔ)語法-內(nèi)存管理-運算符-程序控制

在很多情況下,我們需要循環(huán)一定次數(shù),我們一般使用range函數(shù)來構(gòu)建可迭代對象。


Python基礎(chǔ)語法-內(nèi)存管理-運算符-程序控制

?range是一個函數(shù),接受1個或三個變量用于生成可迭代對象,可以理解它是一個生成器,如果不對range進行迭代,那么它就是一個生成器對象,不會直接計算數(shù)據(jù),只有迭代,或者使用list函數(shù)才可以獲取其生成的值,一般稱這種方式為惰性求值。在Python2.x中是會直接生成列表的

4.2.2 for循環(huán)的else語句

else語句是for循環(huán)正常結(jié)束后要執(zhí)行的語句,如果for循環(huán)被終止(比如滿足某條件跳出循環(huán),break等),那么就不會執(zhí)行else后面的語句,它的格式為:


Python基礎(chǔ)語法-內(nèi)存管理-運算符-程序控制

例子:


Python基礎(chǔ)語法-內(nèi)存管理-運算符-程序控制

4.2.3 while循環(huán)

????????for 循環(huán)主要去對列表、字符串、文件的行數(shù)等有次數(shù)的循環(huán)上,while 一般在無限循環(huán),或者在某些有條件的控制上,直到表達(dá)式變?yōu)榧?或者有一個break),才退會出while循環(huán),表達(dá)式是一個邏輯表達(dá)式,必須返回一個True或False。


Python基礎(chǔ)語法-內(nèi)存管理-運算符-程序控制

練習(xí):判斷輸入的時候是空字符,是的話,就退出循環(huán)


Python基礎(chǔ)語法-內(nèi)存管理-運算符-程序控制

while循環(huán)和for循環(huán)一樣都含有else語句,當(dāng)while循環(huán)正常執(zhí)行完畢,就會被觸發(fā)執(zhí)行。


Python基礎(chǔ)語法-內(nèi)存管理-運算符-程序控制

4.2.4 Python循環(huán)控制

Python中的循環(huán)控制主要有三種方式,即:continue、break、pass。

continue:繼續(xù),當(dāng)滿足條件后,跳過本次循環(huán)。

break:退出,當(dāng)滿足某一個條件后,終止循環(huán)。

pass:占位符,僅僅起到占位的左右,沒有其他效果。

需要注意的是:

continue和break是循環(huán)的控制語句,只影響當(dāng)前循環(huán),包括while、for循環(huán)

如果循環(huán)嵌套,continue和break也只影響語句所在的那一層循環(huán)

continue和break不是跳出語句塊,所以if exp: break 不是跳出if,而是終止if外的break的所在的循環(huán)

練習(xí):給定一個不超過5位數(shù)的正整數(shù),判斷該數(shù)的位數(shù),一次打印出萬位,千位,百位,十位,個位的數(shù)字


Python基礎(chǔ)語法-內(nèi)存管理-運算符-程序控制


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI