您好,登錄后才能下訂單哦!
1 Python 基礎語法
所有語言都有它自己規定的格式,Python也不例外,下面從幾個方面來了解。
1.1 注釋
?在Python中主要的使用的注釋方式是#號,當然在某些情況下三對單引號也是可以的,比如在函數中可以作為函數的說明。
1.2 縮進
C語言使用的是花括號來表示層級關系,但是看起來不簡潔,挺難看,而Python使用的是縮進的方式表示層級關系,并且約定4個空格為一個層級。
1.3 續行
當我們一行的代碼超過了一屏顯示的長度以后,多數情況下為了直觀,我們會另起一行,接著些,在Python中在行尾使用?\?標識續行,但如果在表達式或者某一段代碼中使用了括號,那么Python認為括號內是一個整體,內部跨行不需要使用\。
1.4 標識符
????????很多時候,我們寫代碼的過程中會對我們需要的數據進行存儲并命名,方便后續使用,這個命名被稱為標識符,針對標識符Python進行了如下要求:
一個名字,用來指代一個值
只能是字母、數字下劃線的組合
只能以字母或者下劃線開頭
不能是Python的關鍵字,例如def、class就不能作為標識符
Python是大小寫敏感的
????????在我們寫代碼的過程中最好遵循下列約定:
不允許使用中文
不允許使用歧義單詞,例如class_
在Python中不要隨便使用下劃線開頭的標識符
1.5 轉義序列
????????python中內置了很多特殊的符號,比如換行、制表符什么的,部分含義如下:
\\:單個\表示轉義,\\?就指代?\?這個符號。表示把\后面的字符進行轉義,不用特殊方式進行轉換。
\t:制表符,一般用來進行輸出格式調整,比如對齊等
\r:回車符
\n: 換行符
1.6 數字
在Python中數字主要分為三種類型:整型,浮點數,復數。
整型:在Python3中,不區分long和int,所有整型均為int類型,當然還包括了不同進制,比如2進制,8進制,16進制等,都為int類型。需要注意的是Python中的bool型屬于整型的子類,所以bool的兩個值,用整型可以表示為,0:False,非0:True。
浮點數:即帶小數點的float型
復數:用于科學計算,比如1+2j等
1.7 字符串
在Python中,使用'(單引號),"(雙引號)括起來表示引用字符的序列,使用''',""",則可以跨行,并且自由的使用單雙引號。除此之外還可以在字符串前加一定的符號來確切的表示字符串。
r: 字符串前加r或者R,表示該字符串不做任何處理,所見即所得
f: 3.6版本開始新增的前綴,表示格式化字符串,例如變量引用
1.8 其他
????????在Python中還有一些地方和其他語言有很大區別,比如:
常量:本身指代一旦賦值就不能被改變的標識符,但是Python中是沒有這個概念的,換句話說就是,Python中,只要你看的到的東西,是都可以進行修改的。
字面常量:一個單獨的量,看字面意思就知其含義,比如12,就表示數字12
變量:賦值后,可以改變值的標識符。
注意:在Python中是不需要提前申明變量的類型的,所以變量的賦值即定義
total =2500# 定義了一個total變量,它的值是2500。 賦值即定義
2 Python 運算符
在Python中,運算符是比較重要的知識了,因為很多地方都需要知道多個數據的大小關系、邏輯關系,當然賦值也是需要用到運算符的,根據類型的不同,主要分為賦值運算符、算數運算符、關系運算符、邏輯運算符以及位運算符。
2.1 賦值運算符
我們日常使用的=號就屬于賦值運算符的一種,在Python還有如下算數運算符:
=:賦值,例如: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取余數,假如x=6,那么取余為0
當把數字賦值給一個變量的時候不用加引號,而賦值字符串給變量的時候就需要加引號了,否則python認為你賦值的是另一個變量。
2.2 算數運算符
????????數學計算中的+,-,* 等都屬于算數運算符的一種,其他的運算符如下:
+:加,用來計算數字,如果字符串、列表等相加,等于是把兩個對象拼到一起
-:減,同數學減
*:乘,同數學乘
/:除,4/3,默認是整除,為了得到小數,可以把其中一個變量變成浮點型,4.0/3或4/3.0
//:表示只取整數,4.0/3 答案是1.33333,如果用4.0//,因為取整則,答案是1
%:表示取余數,10%2余0,10%3余1
**:表示乘方 2**3 表示2的3次方
2.3 關系運算符
????????關系運算符顧名思義就是判斷關系的,比如大于,小于啊,等等,需要注意的是返回值為布爾值:即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 如果第一個表達式為False,后面就沒必要計算了,這個邏輯表達式一定為False
or如果第一個表達式為True,后面就沒必要計算了,這個邏輯表達式一定為True
2.5 位運算符
????????故名思議,位運算符主要是針對位進行的計算的,它比加減運算略快,通常也比乘除法運算要快很多。說到位就不得不提補碼了,因為計算機存儲負數時使用的都是補碼。
2.5.1 原碼、反碼、補碼、負數表示法
????????計算機當初因為成本、復雜等各種原因,在進行加減法計算的時候,會把減法變為加法進行計算,如何理解呢?例如5-1,在計算機中進行計算的時候實際上用的是5+(-1),而負數在內存中并不會直接寫個-0b1,負數在計算機中使用的是補碼進行存儲和運算的,計算機中有關數字的都有什么瑪?什么是補碼?
原碼:即人類可讀的二進制位(0b101,0b1)
反碼:正數的反碼與原碼相同;負數的反碼符號位不變其余按位取反
補碼:正數的補碼與原碼相同;負數的補碼符號位不變其余按位取反后+1
需要注意的是:負數在計算機中使用補碼進行存儲,比如-1在計算機存儲的是1111 1111,負數補碼的補碼就表示負數本身。正數的原碼反碼補碼都是相同的,計算機存儲內存中的數字都為二進制位,當我們想要查看具體代表的值時,計算機會轉換為人類可讀的原碼進行顯示,即:如果最高的符號位是0,那么認為它是正數,不進行去補,而最高的符號位如果是1,那么它會認為它是負數,會按照負數的取補的規則進行計算后展示。
例題:計算機,計算 5 - 1 的過程
例題:計算~12
2.5.2 位運算符
????????針對位的運算符主要有:& | ~ ^ << >>.
&:按位與,即按位相乘(1101 & 0001 , 與出來是0001)
|:按位或,即按位相加,不進位(1101 | 0001,或出來是1101)?0乘任何數是0,1+任何數是1
^:按位異或
~:取反
<<:左移(位)
>>:右移(位),例如32 >> 3 等于32//8 , 結果是4
位運算符,日常使用的不多,但是如果你想做一個高級程序員,那么位運算是你必備的技能哦
2.6 成員、身份運算符
in/not in 成員測試,測試一個元素是否在一個序列中
is /is not 統一性的測試
2.7 運算符優先級
小結:
算數運算符?>?位運算符?>?身份運算符?>?成員運算符?>?邏輯運算符
記不住的話,記得用括號
長表達式,多用括號。
注意:在Python中,賦值即定義,如果一個變量已經定義,賦值相當于重新定義
3 Python 內存管理
????????計算機的內存大多是線性編址的(1001,1002,1003門牌號,挨著排列的),現在有一個變量var1需要1001~1007空間,var2需要1008~1012空間,如下圖
過了一段時間以后,var1中的1002,和1005不用了,var2的1010也不用了,內存就變成了如下的情況:
這時又來了一個 var3 需要申請 3個空間,在當前情況下就沒辦法進行分配了
這種情況就是我們常說的內存空洞了,也叫內存碎片化,如果沒辦法進行碎片整理,那么這些分散的內存空間將沒有辦法被重新使用
3.1 Python的內存特性
變量無需事先聲明,也不需要指定類型,這是動態語言的特性
Python使用引用計數記錄所有對象的引用數。
當對象的引用數變為0,它就可以被垃圾回收GC
當對變量進行賦值時,同時會增加該對象的引用計數
函數或代碼塊運行完畢,變量會消亡,那么引用計數會減少
3.2 Python的GC管理
Python在對內存進行管理時會像Java那樣對內存進行分類,Java中將內存分為了老生代,新生代,持久化代,而Python中則分成了0,1,2三代,其中0代可以理解為臨時存儲,1代為短期存儲,2代為長期存儲,當應用申請內存時,會根據內存情況先分配0帶給程序使用,然后定期檢查各個區的使用情況,如果某個程序在0區待的夠久,那么在 Python 啟動GC的時候,就會把它從0區移動到1區,同理在1區時間夠久的,移動到2區。當然在啟動GC的時候還會檢查引用計數為0的對象,然后清理掉。
需要注意的是,Python啟動GC的同時,不能進行其它的任務。頻繁的垃圾回收將大大降低Python的工作效率。如果內存中的對象不多,就沒有必要總啟動垃圾回收。所以,Python只會在特定條件下,自動啟動垃圾回收。當Python運行時,會記錄其中分配對象(object allocation)和取消分配對象(object deallocation)的次數。當兩者的差值高于某個閾值時,垃圾回收才會啟動。
所以:
Python編程中一般無需關心變量的存亡,一般也不用關心內存的管理,由Python的GC統一進行垃圾回收
當有關Python性能問題的時候,就需要考慮變量引用的問題,盡量不要釋放內存,交由Python GC來操作,除非你更懂它。
4 程序控制
Python的程序控制主要分為順序,分支,循環,這也和大多數語言是相同的。
順序結構:按照先后順序一條一條執行,比如:先起床,再刷牙,再吃飯
分支結構:根據不同的情況判斷,條件滿足后執行相應的操作,比如你去買個西紅柿,如果看見西瓜,就買兩個(真正的程序員會買回來兩個西紅柿的,別問我為什么,哈哈)
循環結構:條件滿足就反復執行,不滿足就不執行或者不再執行(循環完畢)
4.1 分支結構
計算機之所以能做很多自動化的任務,因為它可以自己做條件判斷。在Python中主要通過if以及else的搭配來完成條件判斷的工作。條件判斷主要有三種基本用法。
4.1.1 單分支
顧名思義即如果怎么樣,就怎么樣。(if)
表達式:是將不同的數據(包括變量、函數)用運算符號按一定規則連接起來的一種式子。
4.1.2 多分支
多分支有分為兩種情況:
如果怎么樣,就怎么樣,否則,怎么樣。(if、else)
如果1怎么樣,就怎么樣,如果2怎么樣,就怎么樣...,否則,怎么樣(if、elif、else)
4.1.3 分支嵌套
????????分支嵌套,就是將多個兩個或多個if判斷進行層級嵌套,完成更精確的判斷。
4.1.4 小結
條件的寫法非常多,可以寫一個表達式或者多個表達式都可以,表達式的值為0,就表示false。
if就是判斷,主要就是對表達式的邏輯值進行判斷
邏輯值(bool)包含了兩個值:
True:表示非空的量(比如:string、tuple、list、set、dictionary),所有非零數。
False:表示0,None,空的量(空字符串,空字典,空列表,空即可,空元祖)等。這些對象又可以成為False等價
4.2 循環
為了讓計算機能反復執行某一操作,我們需要循環語句來完成。Python中的循環主要有兩種:for循環和while循環。
4.2.1 for 循環
基本所有語言都有for關鍵字,它的曝光率遠遠超過其它關鍵字,但每個語言有它自己的格式,在Python中它的格式為
在很多情況下,我們需要循環一定次數,我們一般使用range函數來構建可迭代對象。
?range是一個函數,接受1個或三個變量用于生成可迭代對象,可以理解它是一個生成器,如果不對range進行迭代,那么它就是一個生成器對象,不會直接計算數據,只有迭代,或者使用list函數才可以獲取其生成的值,一般稱這種方式為惰性求值。在Python2.x中是會直接生成列表的
4.2.2 for循環的else語句
else語句是for循環正常結束后要執行的語句,如果for循環被終止(比如滿足某條件跳出循環,break等),那么就不會執行else后面的語句,它的格式為:
例子:
4.2.3 while循環
????????for 循環主要去對列表、字符串、文件的行數等有次數的循環上,while 一般在無限循環,或者在某些有條件的控制上,直到表達式變為假(或者有一個break),才退會出while循環,表達式是一個邏輯表達式,必須返回一個True或False。
練習:判斷輸入的時候是空字符,是的話,就退出循環
while循環和for循環一樣都含有else語句,當while循環正常執行完畢,就會被觸發執行。
4.2.4 Python循環控制
Python中的循環控制主要有三種方式,即:continue、break、pass。
continue:繼續,當滿足條件后,跳過本次循環。
break:退出,當滿足某一個條件后,終止循環。
pass:占位符,僅僅起到占位的左右,沒有其他效果。
需要注意的是:
continue和break是循環的控制語句,只影響當前循環,包括while、for循環
如果循環嵌套,continue和break也只影響語句所在的那一層循環
continue和break不是跳出語句塊,所以if exp: break 不是跳出if,而是終止if外的break的所在的循環
練習:給定一個不超過5位數的正整數,判斷該數的位數,一次打印出萬位,千位,百位,十位,個位的數字
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。