十一、給小白看的最後一篇Python基礎教程
@Author:Runsen
13、Python標準庫
Python標準庫是隨Pthon附帶安裝的,包含了大量極其有用的模組。
我們主要了解下sys和os就夠了。
13.1 sys模組
sys模組主要是針對與Python解釋器相關的變數和方法,不是主機作業系統。
sys.argv #獲取命令行參數列表,第一個元素是程式本身
sys.exit(n) #退出Python程式,exit(0)表示正常退出。當參數非0時,會引發一個SystemExit異常,可以在程式中捕獲該異常
sys.version #獲取Python解釋程器的版本資訊
sys.maxsize #最大的Int值,64位平台是2**63 - 1
sys.path #返回模組的搜索路徑,初始化時使用PYTHONPATH環境變數的值
sys.platform #返回作業系統平台名稱
sys.stdin #輸入相關
sys.stdout #輸出相關
sys.stderr #錯誤相關
sys.exc_info() #返回異常資訊三元元組
sys.getdefaultencoding() #獲取系統當前編碼,默認為utf-8
sys.setdefaultencoding() #設置系統的默認編碼
sys.getfilesystemencoding() #獲取文件系統使用編碼方式,默認是utf-8
sys.modules #以字典的形式返回所有當前Python環境中已經導入的模組
sys.builtin_module_names #返回一個列表,包含所有已經編譯到Python解釋器里的模組的名字
sys.copyright #當前Python的版權資訊
sys.flags #命令行標識狀態資訊列表。只讀。
sys.getrefcount(object) #返回對象的引用數量
sys.getrecursionlimit() #返回Python最大遞歸深度,默認1000
sys.getsizeof(object[, default]) #返回對象的大小
sys.getswitchinterval() #返回執行緒切換時間間隔,默認0.005秒
sys.setswitchinterval(interval) #設置執行緒切換的時間間隔,單位秒
sys.getwindowsversion() #返回當前windwos系統的版本資訊
sys.hash_info #返回Python默認的哈希方法的參數
sys.implementation #當前正在運行的Python解釋器的具體實現,比如CPython
sys.thread_info #當前執行緒資訊
上面是sys模組所有語法,我們看看就夠了,了解下sys.argv和sys.path就足夠了
sys.argv是一個腳本執行參數列表,列表的第一個元素是腳本名稱,從第二個元素開始才是真正的參數。
# test.py
import sys
for index, arg in enumerate(sys.argv):
print("第%d個參數是: %s" % (index, arg))
#輸出
第0個參數是: test.py
第1個參數是: 1
第2個參數是: 2
第3個參數是: 3
第4個參數是: 4
argv:獲取程式外部向程式傳遞的參數
# script.py
import sys
print(sys.argv[0])
print(sys.argv[1])
運行:
# python script.py argv1
sys.py
argv1
sys.path
path是一個目錄列表,供Python從中查找模組。在Python啟動時,sys.path根據內建規則和PYTHONPATH變數進行初始化。sys.path的第一個元素通常是個空字元串,表示當前目錄。
>>> sys.path
['', 'C:\\Python36\\Lib\\idlelib', 'C:\\Python36\\python36.zip', 'C:\\Python36\\DLLs', 'C:\\Python36\\lib', 'C:\\Python36', 'C:\\Python36\\lib\\site-packages']
sys.path本質上是一個列表,可以進行append、insert、pop、remove等各種列表相關的操作,但通常都進行append操作,添加自己想要的查找路徑。
sys.stdin、sys.stdout、sys.stderr
- stdin用於所有的互動式輸入(包括input()函數)。
- stdout用於print()的列印輸出或者input()函數的提示符。
- stderr用於解釋器自己的提示資訊和錯誤資訊。
簡而言之,這三個屬性就是作業系統的標準輸入、輸出和錯誤流,它們返回的都是一個「文件類型」對象,支援read()、write()和flush()等操作。
>>> import sys
>>> s = sys.stdin.readline()
i don't like python
>>> s
'i don't like python\n'
>>> sys.stdout.write(s)
i don't like python
20
python3中sys.stdin與input的區別:
input()方法和stdin()類似,不同的是input()括弧內可以直接填寫說明文字。
s = input('Please input something!')
print('Please input something!',) # 逗號表示不換行
s = sys.stdin.readline()[:-1] # -1 拋棄輸入流中的'\n' 換行符
當我們print(obj)的時候,事實上是調用了sys.stdout.write(obj+’\n’),將內容列印到控制台(默認是顯示器),然後追加一個換行符。以下兩行等價:
sys.stdout.write('hello'+'\n')
print('hello')
13.2 os模組
該模組包含普遍的作業系統功能
-
os.name字元串指示你正在使用的平台。比如對於Windows,它是’nt’,而對於Linux/Unix用戶,它是’posix’
-
os.getcwd()函數得到當前工作目錄,即當前Python腳本工作的目錄路徑
-
os.getenv()和os.putenv()函數分別用來讀取和設置環境變數
-
os.listdir()返回指定目錄下的所有文件和目錄名
-
os.remove()函數用來刪除一個文件
-
os.system()函數用來運行shell命令
-
os.linesep字元串給出當前平台使用的行終止符。例如,Windows使用’\r\n’,Linux使用’\n’而Mac使用’\r’
-
os.sep 作業系統特定的路徑分割符
-
os.path.split()函數返回一個路徑的目錄名和文件名
-
os.path.isfile()和os.path.isdir()函數分別檢驗給出的路徑是一個文件還是目錄
-
os.path.existe()函數用來檢驗給出的路徑是否真地存在
14、類中的特別方法
名稱 | 說明 |
---|---|
init(self,…) | 這個方法在新建對象恰好要被返回使用之前被調用。 |
del(self) | 恰好在對象要被刪除之前調用。 |
str(self) | 在我們對對象使用print語句或是使用str()的時候調用。 |
getitem(self,key) | 使用x[key]索引操作符的時候調用。 |
len(self) | 對序列對象使用內建的len()函數的時候調用。 |
下面的類中定義了上表中的方法:
class Array:
__list = []
def __init__(self):
print "constructor"
def __del__(self):
print "destructor"
def __str__(self):
return "this self-defined array class"
def __getitem__(self, key):
return self.__list[key]
def __len__(self):
return len(self.__list)
def Add(self, value):
self.__list.append(value)
def Remove(self, index):
del self.__list[index]
def DisplayItems(self):
print "show all items----"
for item in self.__list:
print item
arr = Array() #constructor
print(arr) #this self-defined array class
print(len(arr)) #0
arr.Add(1)
arr.Add(2)
arr.Add(3)
print(len(arr)) #3
print(arr[0]) #1
arr.DisplayItems()
#show all items----
#1
#2
#3
arr.Remove(1)
arr.DisplayItems()
#show all items----
#1
#3
#destructor
15、列表推導式
通過列表綜合,可以從一個已有的列表導出一個新的列表。
list1 = [1, 2, 3, 4, 5]
list2 = [i*2 for i in list1 if i > 3]
print(list1) #[1, 2, 3, 4, 5]
print(list2) #[8, 10]
16、 *和**args區別
當函數接收元組或字典形式的參數的時候,有一種特殊的方法,使用*和**前綴。
該方法在函數需要獲取可變數量的參數的時候特別有用。
由於在args變數前有*前綴,所有多餘的函數參數都會作為一個元組存儲在args中。如果使用的是**前綴,多餘的參數則會被認為是一個字典的鍵/值對。
*args接受元組
**args接受字典
def powersum(power, *args):
total = 0
for i in args:
total += pow(i, power)
return total
print (powersum(2, 1, 2, 3))
#14 1^2+2^2+3^2 = 14
def displaydic(**args):
for key,value in args.items():
print( "key:%s;value:%s" % (key, value))
displaydic(a="one", b="two", c="three")
#key:a;value:one
#key:c;value:three
#key:b;value:two
17、lambda函數
lambda語句被用來創建新的函數對象,並在運行時返回它們。lambda需要一個參數,後面僅跟單個表達式作為函數體,而表達式的值被這個
新建的函數返回。 注意,print語句也不能用在lambda形式中,只能使用表達式。
func = lambda s: s * 3
print(func("Runsen ")) # Runsen Runsen Runsen
func2 = lambda a, b: a * b
print(func2(2, 3)) #6
18、exec/eval
exec語句用來執行儲存在字元串或文件中的Python語句
eval語句用來計算存儲在字元串中的有效Python表達式。
cmd = "print 'hello world'"
exec cmd #hello world
expression = "10 * 2 + 5"
print(eval(expression)) #25
exec還批量創建變數,這個大家可能忽視
for i in range(8):
exec('v' + str(i) + ' = ' + str(i))
print('v' + str(i) + ':', eval('v' + str(i)))
v0: 0
v1: 1
v2: 2
v3: 3
v4: 4
v5: 5
v6: 6
v7: 7
19、assert
assert語句用來斷言某個條件是真的,並且在它非真的時候引發一個錯誤–AssertionError。
>>> assert True # 條件為 true 正常執行
>>> assert False # 條件為 false 觸發異常
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AssertionError
assert一般和try except連用
flag = True
assert flag == True
try:
assert flag == False
except AssertionError:
print ("failed")
else:
print ("pass")
failed
20、repr
repr函數用來取得對象的規範字元串表示。
注意,在大多數時候有eval(repr(object)) == object。
可以通過定義類的__repr__方法來控制對象在被repr函數調用的時候返回的內容。
arr = [1, 2, 3]
print(arr) #[1, 2, 3]
print(repr(arr)) #[1, 2, 3]
其實Python就是這麼簡單,學Python就是看官方文檔,看demo,程式碼跟做英語閱讀似的,多看官方文檔,然後調下第三方庫,實現需求就行了。
本文已收錄 GitHub,傳送門~ ,裡面更有大廠面試完整考點,歡迎 Star。