目錄python
全部語言都有它本身規定的格式,Python也不例外,下面從幾個方面來了解。程序員
在Python中主要的使用的註釋方式是#號,固然在某些狀況下三對單引號也是能夠的,好比在函數中能夠做爲函數的說明。express
num =int(input('>>>: ')) # 輸入一個數字 if num >= 1000: # 條件判斷 if num >= 10000: # 大於10000 print('5') # 打印5位 else: '''不然''' print('4') '''打印4''' else: if num >= 100: print('3') elif num >= 10: print('2') else: print('1')
C語言使用的是花括號來表示層級關係,可是看起來不簡潔,挺難看
,而Python使用的是縮進的方式表示層級關係,而且約定4個空格
爲一個層級。編程
當咱們一行的代碼超過了一屏顯示的長度之後,多數狀況下爲了直觀,咱們會另起一行,接着些,在Python中在行尾使用 \
標識續行,但若是在表達式或者某一段代碼中使用了括號,那麼Python認爲括號內是一個總體,內部跨行不須要使用\
。bash
不少時候,咱們寫代碼的過程當中會對咱們須要的數據進行存儲並命名,方便後續使用,這個命名被稱爲標識符,針對標識符Python進行了以下要求:函數
在咱們寫代碼的過程當中最好遵循下列約定:性能
python中內置了不少特殊的符號,好比換行、製表符什麼的,部分含義以下:測試
\\
:單個\
表示轉義,\\
就指代 \
這個符號。表示把\後面的字符進行轉義,不用特殊方式進行轉換。\t
:製表符,通常用來進行輸出格式調整,好比對齊等\r
:回車符\n
: 換行符 在Python中數字主要分爲三種類型:整型
,浮點數
,複數
。ui
整型
:在Python3中,不區分long和int,全部整型均爲int類型,固然還包括了不一樣進制,好比2進制,8進制,16進制等,都爲int類型。須要注意的是Python中的bool型
屬於整型的子類,因此bool的兩個值,用整型能夠表示爲,0:False,非0:True
。浮點數
:即帶小數點的float型複數
:用於科學計算,好比1+2j等 在Python中,使用'
(單引號),"
(雙引號)括起來表示引用字符的序列,使用'''
,"""
,則能夠跨行,而且自由的使用單雙引號。除此以外還能夠在字符串前加必定的符號來確切的表示字符串。code
str1 = r'hello\nworld' # 因爲使用了r前綴,因此並不會把\n解釋爲換行 str2 = f'nihao {str1}' # 相似於 'nihao{}'.format(str1) print(str1) # hello\nworld print(str2) # nihao hello\nworld
在Python中還有一些地方和其餘語言有很大區別,好比:
常量
:自己指代一旦賦值就不能被改變的標識符,可是Python中是沒有這個概念的,換句話說就是,Python中,只要你看的到的東西,是均可以進行修改的。注意:在Python中是不須要提早申明變量的類型的,因此變量的賦值即定義
total = 2500 # 定義了一個total變量,它的值是2500。 賦值即定義
在Python中,運算符是比較重要的知識了,由於不少地方都須要知道多個數據的大小關係、邏輯關係,固然賦值也是須要用到運算符的,根據類型的不一樣,主要分爲賦值運算符
、算數運算符
、關係運算符
、邏輯運算符
以及位運算符
。
咱們平常使用的=號
就屬於賦值運算符的一種,在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認爲你賦值的是另外一個變量。
數學計算中的+,-,* 等都屬於算數運算符的一種,其餘的運算符以下:
+
:加,用來計算數字,若是字符串、列表等相加,等因而把兩個對象拼到一塊兒-
:減,同數學減*
:乘,同數學乘/
:除,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次方關係運算符顧名思義就是判斷關係的,好比大於,小於啊,等等,須要注意的是返回值爲布爾值:即True或者False。更多的符號有:
>
:大於,例如1>2,值是False<
:小於,例如1<2,值是True>=
:大於等於,例如1>=2,值是False<=
: 小於等於,例如1<=2,值是True==
:是否等於,例如1==2,值是False!=
:不等於,例如 1!=2,值是True 邏輯運算符主要包含了三個:and
,or
,not
and
:邏輯與,只要有1個是false那麼值就是False,1==2 and 1<2 ,值是False,1!=2 and 1<2,值是Frueor
:邏輯或,只要有一個是true那麼值就是true,1=2 and 1<2 ,值是truenot
:邏輯非,取反 not 1<2,值是true邏輯運算符又被稱爲短路運算符:
故名思議,位運算符主要是針對位進行的計算的,它比加減運算略快,一般也比乘除法運算要快不少。說到位就不得不提補碼了,由於計算機存儲負數時使用的都是補碼。
計算機當初由於成本、複雜等各類緣由,在進行加減法計算的時候,會把減法變爲加法進行計算,如何理解呢?例如5-1,在計算機中進行計算的時候實際上用的是5+(-1),而負數在內存中並不會直接寫個-0b1,負數在計算機中使用的是補碼進行存儲和運算的,計算機中有關數字的都有什麼瑪?什麼是補碼?
須要注意的是:負數在計算機中使用補碼進行存儲,好比-1
在計算機存儲的是1111 1111
,負數補碼的補碼就表示負數自己。正數的原碼反碼補碼都是相同的,計算機存儲內存中的數字都爲二進制位,當咱們想要查看具體表明的值時,計算機會轉換爲人類可讀的原碼進行顯示,即:若是最高的符號位是0,那麼認爲它是正數,不進行去補,而最高的符號位若是是1,那麼它會認爲它是負數,會按照負數的取補的規則進行計算後展現。
例題:計算機,計算 5 - 1 的過程
# 計算機中計算的是 5 + -1 # 推導方法: 0000 0101 # 5的原碼 1111 1110 # -1的補碼 1111 1111 # -1的反碼 10000 0100 # 溢出位捨去 0000 0100 # 5-1 的結果爲 4
例題:計算~12
# ~12 表示取反 # 先將初始數轉換爲二進制,取反,的道德是補碼,再對補碼去補碼纔是取反的結果 0000 1100 # 12的原碼 1111 0011 # 取反,獲得補碼 1000 1100 # 再次取反,獲得反碼 1000 1101 # +1 獲得原碼 轉換爲10進制就是-13了
針對位的運算符主要有:& | ~ ^ << >>.
&
:按位與,即按位相乘(1101 & 0001 , 與出來是0001)|
:按位或,即按位相加,不進位(1101 | 0001,或出來是1101) 0乘任何數是0,1+任何數是1^
:按位異或~
:取反<<
:左移(位)>>
:右移(位),例如32 >> 3 等於32//8 , 結果是4位運算符,平常使用的很少,可是若是你想作一個高級程序員,那麼位運算是你必備的技能哦
運算符 | 描述 |
---|---|
** | 指數 (最高優先級) |
~ + - | 按位翻轉, 一元加號和減號 (最後兩個的方法名爲 +@ 和 -@) |
* / % // | |
+ - | 加法減法 |
>> << | 右移,左移運算符 |
& | 位 'AND' |
^ | | 位運算符 |
<= < > >= | 比較運算符 |
<> == != | 等於運算符 |
= %= /= //= -= += *= **= | 賦值運算符 |
is is not | 身份運算符 |
in not in | 成員運算符 |
not and or | 邏輯運算符 |
小結:
算數運算符
> 位運算符
> 身份運算符
> 成員運算符
> 邏輯運算符
注意:在Python中,賦值即定義,若是一個變量已經定義,賦值至關於從新定義
計算機的內存大可能是線性編址的(1001,1002,1003門牌號,挨着排列的),如今有一個變量var1須要1001~1007空間,var2須要1008~1012空間,以下圖
過了一段時間之後,var1中的1002,和1005不用了,var2的1010也不用了,內存就變成了以下的狀況:
這時又來了一個 var3 須要申請 3個空間,在當前狀況下就沒辦法進行分配了
這種狀況就是咱們常說的內存空洞了,也叫內存碎片化,若是沒辦法進行碎片整理,那麼這些分散的內存空間將沒有辦法被從新使用
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)的次數。當二者的差值高於某個閾值時,垃圾回收纔會啓動。
因此:
# 查看引用計數 # 因爲1,2,15等這種常數,同時被Python語言解釋器自己等引用,因此直接打印計數器它的引用計數並不會是1。 >>> import sys >>> x = [] >>> print(sys.getrefcount(x)) # 函數在執行時會進行參數傳遞操做,會使引用計數+1 2 >>> print(sys.getrefcount([])) 1 >>>
Python的程序控制主要分爲順序,分支,循環,這也和大多數語言是相同的。
順序結構
:按照前後順序一條一條執行,好比:先起牀,再刷牙,再吃飯分支結構
:根據不一樣的狀況判斷,條件知足後執行相應的操做,好比你去買個西紅柿,若是看見西瓜,就買兩個(真正的程序員會買回來兩個西紅柿的,別問我爲何,哈哈)循環結構
:條件知足就反覆執行,不知足就不執行或者再也不執行(循環完畢)計算機之因此能作不少自動化的任務,由於它能夠本身作條件判斷。在Python中主要經過if以及else的搭配來完成條件判斷的工做。條件判斷主要有三種基本用法。
顧名思義即若是怎麼樣,就怎麼樣。(if)
if expression: statement(s) 注意:python使用縮進做爲其語句分組的方法,請使用4個空格 expression 表示條件表達式(好比:a>b) statement 表示要執行的代碼
表達式:是將不一樣的數據(包括變量、函數)用運算符號按必定規則鏈接起來的一種式子。
多分支有分爲兩種狀況:
if expression: statement(s) else: statement(s) # else、elif,if都屬於同級 if expression: statement(s) elif expression: statement(s) else: statement(s) 注意:python使用縮進做爲其語句分組的方法,請使用4個空格 expression 表示條件表達式,必須是一個bool類型,由於這裏會隱式的使用bool(expression)進行轉換 statement 表示要執行的代碼
分支嵌套,就是將多個兩個或多個if判斷進行層級嵌套,完成更精確的判斷。
if expression: statement(s) # 非必須,看狀況 if expression: statement(s) else: # 非必須,看狀況 statement(s) # 非必須,看狀況 else: statement(s)
True
:表示非空的量(好比:string、tuple、list、set、dictionary),全部非零數。 False
:表示0,None,空的量(空字符串,空字典,空列表,空便可,空元祖)等。這些對象又能夠成爲False等價
爲了讓計算機能反覆執行某一操做,咱們須要循環語句來完成。Python中的循環主要有兩種:for循環和while循環。
基本全部語言都有for關鍵字,它的曝光率遠遠超過其它關鍵字,但每一個語言有它本身的格式,在Python中它的格式爲
for element in iteratable: statemen(s) # element 在循環時表示元素的變量(自行指定) # iteratable:這裏表示一個可迭代對象,好比字符串,列表 # statemen(s) 表示要執行的代碼段
在不少狀況下,咱們須要循環必定次數,咱們通常使用range函數來構建可迭代對象。
# range 用法說明: range(stop) -> range object range(start, stop[, step]) -> range object # stop:表示中止位,默認從0開始 # start:起始位置 # step:步長(間隔) # range(1,10,2) --> 1,3,4,5,7,9
range是一個函數,接受1個或三個變量用於生成可迭代對象,能夠理解它是一個生成器,若是不對range進行迭代,那麼它就是一個生成器對象,不會直接計算數據,只有迭代,或者使用list函數才能夠獲取其生成的值,通常稱這種方式爲惰性求值。在Python2.x中是會直接生成列表的
else語句是for循環正常結束後要執行的語句,若是for循環被終止(好比知足某條件跳出循環,break等),那麼就不會執行else後面的語句,它的格式爲:
for iterating_var in sequence: statemen(s) else: statemen(s)
例子:
for i in range(0,10,2): if not i % 2 == 0: print('發現奇數') break else: # 當循環執行完畢,沒有發現奇數,就會執行else語句 print('沒有奇數')
for 循環主要去對列表、字符串、文件的行數等有次數的循環上,while 通常在無限循環,或者在某些有條件的控制上,直到表達式變爲假(或者有一個break),才退會出while循環,表達式是一個邏輯表達式,必須返回一個True或False。
# 語法格式 while expression: statement(s) #注意:避免寫成死循環
練習:判斷輸入的時候是空字符,是的話,就退出循環
while True: user_info = input('>>>: ') if not user_info: break print('Good,None to Quit')
while循環和for循環同樣都含有else語句,當while循環正常執行完畢,就會被觸發執行。
flag = 1 while flag < 10: if not flag % 2: print('發現偶數') break # 若是發現偶數會直接跳出循環,不會執行else語句 flag += 2 else: # 若是沒有發現偶數,循環正常執行完畢,會執行else語句 print('沒有發現偶數')
Python中的循環控制主要有三種方式,即:continue
、break
、pass
。
continue
:繼續,當知足條件後,跳過本次循環。 break
:退出,當知足某一個條件後,終止循環。 pass
:佔位符,僅僅起到佔位的左右,沒有其餘效果。須要注意的是:
練習:給定一個不超過5位數的正整數,判斷該數的位數,一次打印出萬位,千位,百位,十位,個位的數字
num = 54321 weight = 10000 for i in range(5): c = num // weight print(c) num = num % weight weight //= 10