Python程式基本組成與輸入輸出
變數與型別
在python程式中,一切資料結構都是儲存在堆空間中的物件。python程式中的變數都是引用變數,可以指向任何型別的物件。
語句與表示式
常用的語句包括:
結構定義語句(函式定義和類定義)
賦值語句(普通賦值和擴充套件賦值)
控制語句(if-else條件、for迴圈、while迴圈、continue、break和return)
模組引入語句(import和from-import)
異常語句(異常捕獲try-except/finally、異常丟擲raise)
變數作用域宣告語句(global和nonlocal)
上下文管理語句(with)
斷言語句(assert)
常用的表示式:
布林表示式
算術表示式
比較表示式
簡單集合構造表示式(例如,[1,2,3])
複雜集合構造表示式(例如,[x+1 for x in y])
lambda表示式
呼叫表示式
屬性解引用表示式
元素解引用表示式
模組與包
python模組被引入到程式中時,是堆空間的一個物件。python模組中通常包含python物件的定義以及python語句。當一個模組被首次引入時,python直譯器會執行對應的python檔案,並同時建立一個模組型別物件。模組中的全域性物件會被作為屬性新增到該模組物件的屬性集合中。
模組引用方式:
(1)通過關鍵字import
(2)通過關鍵字from...import...
python中的模組也是一種普通物件,可以被當作引數任意傳遞。
python的包是一個包含init.py檔案的檔案,當首次引入一個包時,init.py檔案會被預設執行。
python包在程式中本質上也是一個模組物件,其特性與模組基本相同。
類與例項
python中的類,是一個類型別的物件,可以通過關鍵字class在程式任何地方定義。
python中的類可以繼承多個基類,子類中的屬性可以覆蓋父類的屬性來實現過載。
例項物件可以擁有自身的屬性字典,不與其他例項物件共享。
函式與方法
通過關鍵字def在程式任何地方定義。
當一個函式物件被作為引數時,其執行所需的環境也會被作為閉包進行過程間的傳遞。
python中的lambda表示式本質上是一個匿名的函式,使用起來與函式幾乎無差別。
python中的方法實則是被動態繫結閉包的函式,可分為類方法、例項方法和靜態方法。
類方法:屬於某個類,在呼叫時,其所屬的類物件會被隱式地傳遞給方法的第一個引數。
例項方法:其對應的例項物件會被隱式地傳遞給該方法的第一個引數。
靜態方法:不屬於任何類或例項,在呼叫時,其效果等同於一個自由函式,不存在任何隱式引數傳遞
動態物件
python中的物件具體可以分為不可變物件和可變物件。
不可變物件是指物件的內部屬性不可以變,常見的不可變物件包括整數、浮點數、字串和元組等。
可變物件則是指物件的內部屬性是可以被任意改變的。可變物件具有非常強的動態性,其內部屬性可以被任意新增、修改或刪除。
python中的反射是指可以利用一些元物件的設施來訪問、更改和刪除物件屬性(包括方法的追加和呼叫等)。
python中常用的反射 函式包括hasattr()、getattr()、setattr()和delattr()等。
python中提供了exec()和eval()函式,exec()用於執行一段動態構造的語句塊;eval()則用於執行一個動態構造的表示式。
註釋內容
使用#或者引號包裹的內容
main
當py檔案是被呼叫時,name 的值為模組名,當檔案被執行時,name 為'main '
為了確保py檔案可以被直接執行,也可以被import作為模組匯入,每個py程式碼中都應包含:
if __name__ == '__main__': dosthing(args)
這裡的args是指python xxx.py xxx
中的[xxx.py
,xxx
]
Python使用縮排對齊組織程式碼的執行,所有沒有縮排的程式碼(非函式定義和類定義),都會在載入時自動執行,這些程式碼,可以認為是Python的main函式
檔案開頭的!#
為類Unix系統提供更多資訊,
第一行以 #! 開頭的程式碼, 在計算機行業中叫做 "shebang", 也叫做 sha-bang / hashbang / pound-bang / hash-pling, 其作用是"指定由哪個直譯器來執行指令碼".
一般我們用來指定使用python的版本,系統會優先查詢這個地址的執行檔案
#!/usr/bin/python3
輸出
Python兩種輸出值的方式: 表示式語句和 print() 函式。
第三種方式是使用檔案物件的 write() 方法,標準輸出檔案可以用 sys.stdout 引用。
如果你希望輸出的形式更加多樣,可以使用 str.format() 函式來格式化輸出值。
如果你希望將輸出的值轉成字串,可以使用 repr() 或 str() 函式來實現。
str(): 函式返回一個使用者易讀的表達形式。
repr(): 產生一個直譯器易讀的表達形式。
>>> s = 'Hello, Runoob' >>> str(s) 'Hello, Runoob' >>> repr(s) "'Hello, Runoob'" >>> str(1/7) '0.14285714285714285' >>> x = 10 * 3.25 >>> y = 200 * 200 >>> s = 'x 的值為: ' + repr(x) + ',y 的值為:' + repr(y) + '...' >>> print(s) x 的值為: 32.5,y 的值為:40000... >>> #repr() 函式可以轉義字串中的特殊字元 ... hello = 'hello, runoob\n' >>> hellos = repr(hello) >>> print(hellos) 'hello, runoob\n' >>> # repr() 的引數可以是 Python 的任何物件 ... repr((x, y, ('Google', 'Runoob'))) "(32.5, 40000, ('Google', 'Runoob'))"
兩個print會列印在不同的兩行,如果希望連續不換行列印,前一個結尾使用end引數
>>> print('a',end='');print('b') ab
rjust可以右側新增空白,ljust左側新增空白,format方法中數字{:xd}字串{:ns}有類似作用
>>> print('{0:3s}{1:3s}{2:3s}'.format('a','b','c'));print('a'.ljust(2),'b'.ljust(2),'c'.ljust(2)); abc abc
zfill()用於在數字左側空位補0
>>> '12'.zfill(5) '00012' >>> '-3.14'.zfill(7) '-003.14' >>> '3.14159265359'.zfill(5) '3.14159265359'
字串的format方法
format()方法是用format引數替換字串中大括號,預設為依次替換,{3}可以指定使用第三個引數
>>> '{}-{}'.format('a','b') 'a-b' >>> '{1}-{0}-{1}'.format('a','b') 'b-a-b' >>> '{b}-{a}'.format(a='a',b='b') 'b-a'
format中'!a' (使用 ascii()), '!s' (使用 str()) 和 '!r' (使用 repr()) 可以用於在格式化某個值之前對其進行轉化:
>>> print('{a!r}-{a}'.format(a='\n\'OK\'')) "\n'OK'"- 'OK'
format中{a:10}表示a至少佔10個字元位置,{a:2s}或{a:2d}類似,可以用來對齊
format中字串可以使用[]直接訪問引數字典的同名屬性
>>> table = {'Google': 1, 'Runoob': 2, 'Taobao': 3} >>> print('Runoob: {0[Runoob]:d}; Google: {0[Google]:d}; Taobao: {0[Taobao]:d}'.format(table)) Runoob: 2; Google: 1; Taobao: 3 >>> table = {'Google': 1, 'Runoob': 2, 'Taobao': 3} >>> print('Runoob: {Runoob:d}; Google: {Google:d}; Taobao: {Taobao:d}'.format(**table)) Runoob: 2; Google: 1; Taobao: 3
% 操作符也可以實現字串格式化。 它將左邊的引數作為類似 sprintf() 式的格式化字串, 而將右邊的代入, 然後返回格式化後的字串. 例如:
>>> import math >>> print('常量 PI 的值近似為:%5.3f。' % math.pi) 常量 PI 的值近似為:3.142。
讀取輸入
Python提供了 input() 內建函式從標準輸入讀入一行文字,預設的標準輸入是鍵盤。
input 可以接收一個Python表示式作為輸入,並將運算結果返回。
str = input("請輸入:"); print ("你輸入的內容是: ", str)