python学习之最常用的内置函数
python學習之最常用的內置函數
Python 內置函數總共有70余個(通常把內置類也統稱為內置函數),覆蓋面廣,功能強大。不過,對于初學者在初級階段,掌握下面幾個函數是當務之急。
(1) 控制臺輸出函數 print()
print() 應該是每一個初學者首先接觸到的函數,也一定用得非常熟練。我們知道,print() 函數一次可以打印多個對象,打印對象可以是任意類型。此外,print() 函數還有4個默認參數,靈活運用,方能得心應手。
print(*objects, sep=’ ‘, end=’\n’, file=sys.stdout, flush=False)
- objects – 零個或多個輸出對象。輸出多個對象時,需要用半角逗號分隔
- sep – 用來間隔多個對象,默認值是一個空格
- end – 用來設定以什么結尾。默認值是換行符 \n,我們可以換成其他字符串
- file – 要寫入的文件對象
- flush – 輸出是否被緩存通常決定于 file,但如果 flush 關鍵字參數為 True,流會被強制刷新
(2) 控制臺輸入函數 input()
input() 函數常用于程序執行過程中接收用戶輸入的參數,用戶敲擊回車鍵,函數即返回用戶輸入的字符串,但不包括回車符。因input() 函數本身具備IO阻塞的功能,所以也可用于作為程序調試斷點來使用。input() 函數沒有默認參數,但接受一個字符串作為輸入提示信息。
>>> nums = input('請輸入3個整數,中間以空格分割,回車結束輸入:') 請輸入3個整數,中間以空格分割,回車結束輸入:3 4 5 6 >>> print(nums) # 請注意,nums是一個字符串,不是整數 3 4 5 6 >>> [int(item) for item in nums.split()] # 這樣才可以把輸入的字符串變成3個整數 [3, 4, 5, 6](3) 可迭代對象長度函數 len()
len() 函數也是初學者接觸最早、最容易記住的函數之一,len 是 length 簡寫,該函數用于返回列表、元祖、字典、字符串等可迭代對象的長度(或稱為元素數量)。至于什么是可迭代對象,暫時可以不用深究,隨著學習的深入,會逐步理解的。
(4) 序列生成器函數 range()
通常我們是在學習 for 循環的時候,認識的 range() 函數。最初(py2時代),range() 函數返回的是一個列表,因為太耗內存,所以進入新時代(py3時代)之后,range() 函數不再返回列表,而是range類了。
(5) 格式化輸出函數 format()
雖然這里提到的是 format() 函數,但大多數情況下,我更喜歡用%去做格式化輸出。讀者可以通過下面的例子體會一下兩種格式化方法的差異。
下面給出用%去做格式化輸出的常用符號速查表。
| %d,%i | 轉換為帶符號的十進制形式的整數 |
| %o | 轉換為帶符號的八進制形式的整數 |
| %x,%X | 轉換為帶符號的十六進制形式的整數 |
| %e | 轉化為科學計數法表示的浮點數(e 小寫) |
| %E | 轉化為科學計數法表示的浮點數(E 大寫) |
| %f,%F | 轉化為十進制形式的浮點數 |
| %g | 智能選擇使用 %f 或 %e 格式 |
| %G | 智能選擇使用 %F 或 %E 格式 |
| %c | 格式化字符及其 ASCII 碼 |
| %r | 使用 repr() 將變量或表達式轉換為字符串 |
| %s | 使用 str() 將變量或表達式轉換為字符串 |
(6) 排序函數 sorted()
排序是比較常見的需求。排序函數 sorted() 不會改變原有的數據結構,而是返回一個新的排序結果。這一點,和列表類的 sort() 方法不同。列表類的 sort() 方法改變了列表自身,且無返回值。
>>> sorted([3,2,7,1,5]) # 一維列表排序 [1, 2, 3, 5, 7] >>> sorted([3,2,7,1,5], reverse=True) # 一維列表排序,逆序輸出 [7, 5, 3, 2, 1](7) 文件操作函數 open()
文件讀寫是程序員最基本的技能之一,必須熟練掌握。好在Python的文件操作非常簡單,很容易上手。通常文件讀寫時,不管正常還是非正常結束,一定要關閉文件——這需要捕獲異常并進行處理。為了簡化代碼,使之更加優雅,我習慣使用 with - as 來操作文件。
打開文件有多種模式,詳見下表:
| r / rt | 只讀模式(默認) | 只能獲取文本內容,不能寫入 |
| rb | 二進制只讀模式 | 使用二進制獲取文本內容, 通常用于獲取圖片視頻等非文本 |
| r+ | 讀寫追加 | 用于讀寫,文件指針放在內容開頭 |
| rb+ | 二進制讀寫追加 | 用于二進制讀寫,文件指針放在內容開頭 |
| w / wt | 只寫模式 | 用于寫入內容,會將原本的內容覆蓋 |
| w+ | 只寫追加 | 用于寫入內容,會在原本的內容之后續寫 |
| wb | 二進制只寫模式 | 用于寫入二進制內容,會將原本的內容覆蓋 通常用于寫入圖片視頻等非文本 |
| wb+ | 二進制只寫追加 | 用于寫入二進制內容,會在原本的內容之后續寫 通常用于寫入圖片視頻等非文本 |
| a / at | 讀寫追加 | 用于讀取或寫入內容,寫入會在原本的內容之后續寫 沒有文本則創建文本 |
| ab | 二進制讀寫追加 | 用于讀取或寫入二進制內容,寫入會在原本內容之后續寫 沒有文本則創建文本 |
| a+ | 讀寫追加 | 用于讀取或寫入內容,寫入會在原本的內容之后續寫 沒有文本則創建文本 |
| ab+ | 二進制讀寫追加 | 用于讀取或寫入二進制內容,寫入會在原本內容之后續寫 沒有文本則創建文本 |
下面的例子,演示了如何將數據寫入到csv文件,又如何讀出csv文件中的數據。
>>> with open(r'd:\csv_data.csv', 'w') as fp: # 寫csv文件for line in [[0.468,0.975,0.446],[0.718,0.826,0.359]]:ok = fp.write('%s\n'%','.join([str(item) for item in line]))>>> with open(r'd:\csv_data.csv', 'r') as fp:print(fp.read())0.468,0.975,0.446 0.468,0.975,0.446>>> with open(r'd:\csv_data.csv', 'r') as fp: # 讀csv文件for line in fp.readlines():print('%s - %s - %s'%tuple(line.strip().split(',')))0.468 - 0.975 - 0.446 0.468 - 0.975 - 0.446 12345678910111213141516(8) 類型相關函數 type()/isinstance()
對于初學者來說,運行代碼時出了問題是最頭疼的事兒:根本不知道發生了什么,又該從何處入手。如果不是縮進錯誤,或者找不到模塊一類的初級錯誤,那么,查看變量的類型,也許是最值得一試的調試方法。type() 就是用于查看對象類型的函數。
>>> type(5) <class 'int'> >>> type('ssdf') <class 'str'> >>> type([]) <class 'list'> >>> type(print) <class 'builtin_function_or_method'> >>> type(range(5)) <class 'range'> 12345678910但是,有很多同學了解了 type() 之后,喜歡用它來做類型判斷,這是不正確的。用于類型判斷的函數是isinstance(),請看:
>>> a = [3,4,5] >>> b = ('x', 'y') >>> c = dict() >>> d = 'python' >>> isinstance(a, list) True >>> isinstance(b, list) False >>> isinstance(c, (dict,str)) True >>> isinstance(d, (dict,str)) True >>> isinstance(b, (dict,str)) False 1234567891011121314(9) 特殊功能函數 enumerate()/zip()/map()/chr()/ord()
遍歷列表、字符串等可迭代對象的時候,如果我們想同時得到元素的索引序號,enumerate() 函數就可以派上用場了。enumerate() 返回可迭代對象的索引和元素組成的元組的迭代對象,所以,不用擔心該函數的效率和資源消耗情況,放心使用好了。
>>> for index, item in enumerate([True, False, None]):print(index, item, sep='->')0->True 1->False 2->None >>> for index, item in enumerate('xyz'):print(index, item, sep='->')0->x 1->y 2->z 123456789101112zip() 函數也有一個經典的應用場景:同時遍歷多個列表。
>>> a = ['x','y','z'] >>> b = [3,4,5] >>> for k, v in zip(a,b):print(k, v, sep='->')x->3 y->4 z->5 12345678map() 函數可以理解為對列表中的每一個元素做一次計算,這個計算由函數參數指定。這個作為參數的函數,可以是普通的函數,也可以是 lambda 匿名函數。我們以對列表中各元素開三次方為例,演示一下man() 函數的用法。
>>> def extract(x): # 開3次方return pow(x, 1/3)>>> result = map(extract, [7,8,9]) # 使用函數extract()對列表元素逐一開3次方,返回一個迭代對象 >>> list(result) # 將迭代對象轉為list [1.912931182772389, 2.0, 2.080083823051904] >>> list(map(lambda x:pow(x, 1/3), [7,8,9])) # 使用lambda函數,更簡潔 [1.912931182772389, 2.0, 2.080083823051904] 12345678chr() 函數返回 ascii 編碼值對應的字符,ord() 函數返回字符的 ascii 編碼值, 二者是互逆的操作。
>>> chr(65) 'A' >>> ord('Z') 90 >>> for i in range(26):print(chr(65+i), sep='', end='')ABCDEFGHIJKLMNOPQRSTUVWXYZ 12345678(10) 數學函數 sum()/max()/min()/abs()/pow()/divmod()/round()
Python 內置的數學計算與統計函數不多,但基本夠用。不過,如果你需要對數函數和三角函數的話,你恐怕得導入 manth 模塊(標準模塊)或者其他模塊了(比如 numpy 等)。需要提醒大家的是,很多教科書說,做開方運算就得導入 manth 模塊,其實,內置函數 pow() 是既可以乘方,也可以開方的。
總結
以上是生活随笔為你收集整理的python学习之最常用的内置函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python都有哪些包装_Python基
- 下一篇: OSI七层协议讲解