在學(xué)習(xí)python中總有一些問題困擾我們: Python中有這么多函數(shù),記住所有這些的最好方法是什么? 學(xué)習(xí)我們?nèi)粘P枰暮瘮?shù)(如enumerate 和range)的最佳方法是什么? 你怎么知道用 Python 解決問題的所有方法?你會記住它們嗎? 實際上PyPI 上有幾十個內(nèi)置函數(shù)和類,數(shù)百個工具捆綁在 Python 的標(biāo)準(zhǔn)庫中,還有數(shù)千個第三方庫。沒有人能記住所有這些東西。 我建議對這些知識按以下進(jìn)行分類: 有些內(nèi)容我們應(yīng)該記住,以便我熟悉它們 有些內(nèi)容我們應(yīng)該知道,,以便我以后可以更有效地查找它們 有些內(nèi)容除非有一天我需要它們,否則我根本不應(yīng)該花費(fèi)太長時間去研究它們。 考慮到這種方法,我們將瀏覽 Python 文檔中的內(nèi)置函數(shù)頁面。 要說完所有內(nèi)容文章會比較長,我會分幾篇進(jìn)行,這篇我們先說前10個最通用的內(nèi)在函數(shù),所以如果你時間緊迫或特別想看某個內(nèi)置函數(shù),你不必逐一查看,可以直接定位到你感興趣的內(nèi)容上: 我估計大多數(shù) Python 開發(fā)人員只需要大約 30 個內(nèi)置函數(shù),但其中 30 個取決于實際使用Python 所做的事情。 我們?nèi)值姆绞絹砜纯?Python 的所有 71 個內(nèi)置函數(shù)。 我將嘗試將這些內(nèi)置插件分為五類: 眾所周知的內(nèi)置插件:大多數(shù)較新的Pythonistas 很快就迫不及待地接觸到這些內(nèi)置插件 被新的Pythonistas忽略:了解這些函數(shù)很有用,但是當(dāng)對 Python 較新時,它們很容易被忽略 稍后再學(xué)習(xí):這些內(nèi)置插件通常很有用,但會在需要時/如果需要它們時找到它們 也許最終會學(xué)習(xí)這些:這些可以派上用場,但僅限于特定情況 可能不需要這些:除非正在做一些相當(dāng)專業(yè)的事情,否則不太可能需要這些 第 1 類和第2 類中的內(nèi)置函數(shù)是幾乎所有 Python 程序員最終都應(yīng)該學(xué)習(xí)的基本內(nèi)置函數(shù)。
Pythonistas的注意事項:我將所有這些內(nèi)置函數(shù)稱為函數(shù),但其中 27 個實際上不是函數(shù)。 眾所周知的內(nèi)置函數(shù)(可能大家已經(jīng)知道): printlenstrintfloatlisttupledictsetrange 新的 Python 程序員經(jīng)常忽略的內(nèi)置函數(shù):
還有 5 個通常被忽視的內(nèi)置插件,我建議了解這些插件,因為它們使調(diào)試更容易:
除了上面的 25 個內(nèi)置函數(shù)外,我們還將在稍后學(xué)習(xí)中簡要介紹其他 46 個內(nèi)置函數(shù),也許最終會學(xué)習(xí)它,也可能不需要這些部分。 10個常見的內(nèi)置函數(shù) 如果你一直在編寫 Python 代碼,那么這些內(nèi)置函數(shù)可能已經(jīng)很熟悉了。 你可能已經(jīng)知道它的打印功能,但可能不知道 print 還可以接受的各種關(guān)鍵字參數(shù): >>> words = ['Welcome', 'to', 'Python']>>> print(words)['Welcome', 'to', 'Python']>>> print(*words, end='!\n')Welcome to Python!>>> print(*words, sep='\n')WelcometoPython 你可以自己測試下。 len在 Python 中,我們不寫 my_list.length() 或 my_string.length 之類的東西;相反,我們奇怪地(至少對于新的 Pythonistas)用 len(my_list) 和 len(my_string)。
不管你是否喜歡這個類似運(yùn)算符的 len 函數(shù),你都必須使用了,所以你需要習(xí)慣它。 str與許多其他編程語言不同,Python 沒有類型強(qiáng)制,因此你無法在 Python 中連接字符串和數(shù)字。 >>> version = 3>>> 'Python ' + versionTraceback (most recent call last): File '<stdin>', line 1, in <module>TypeError: can only concatenate str (not 'int') to str Python 拒絕將 3 個整數(shù)強(qiáng)制轉(zhuǎn)換為字符串,因此我們需要自己手動完成,使用內(nèi)置的 str 函數(shù)(從技術(shù)上講是類,但正如我所說,我將調(diào)用這些函數(shù)):
int你是否有用戶輸入并需要將其轉(zhuǎn)換為數(shù)字?你需要 int 函數(shù)! int 函數(shù)可以將字符串轉(zhuǎn)換為整數(shù): >>> program_name = 'Python 3'>>> version_number = program_name.split()[-1]>>> int(version_number)3 還可以使用 int 將浮點數(shù)截斷為整數(shù):
請注意,如果需要在除法時截斷, // 運(yùn)算符可能更合適(盡管這對負(fù)數(shù)的工作方式不同):int(3 / 2) == 3 // 2。 float需要轉(zhuǎn)換為數(shù)字的字符串實際上不是整數(shù), 就需要使用 float 而不是 int 進(jìn)行此轉(zhuǎn)換。 >>> program_name = 'Python 3'>>> version_number = program_name.split()[-1]>>> float(version_number)3.0>>> pi_digits = '3.141592653589793238462643383279502884197169399375'>>> len(pi_digits)50>>> float(pi_digits)3.141592653589793 還可以使用 float 將整數(shù)轉(zhuǎn)換為浮點數(shù)。 在 Python 2 中,我們曾經(jīng)使用 float 將整數(shù)轉(zhuǎn)換為浮點數(shù)來強(qiáng)制浮點除法而不是整數(shù)除法?!罢麛?shù)除法”在 Python 3 中不再存在(除非你專門使用 // 運(yùn)算符),因此我們不再需要 float 來達(dá)到此目的。因此,如果在 Python 3 代碼中看到 float(x) / y,則可以將其更改為僅 x / y。 list列表函數(shù)這樣做:
如果你知道正在使用列表,則可以使用 copy 方法制作列表的新副本: >>> copy_of_squares = list_of_squares.copy() 但是如果你不知道你正在使用的迭代器是什么,列表函數(shù)是循環(huán)遍歷一個迭代器并復(fù)制它的更通用的方法:
也可以為此使用列表推導(dǎo),但如果是新手我不建議這樣做。 >>> my_list = list() # Don't do this>>> my_list = [] # Do this instead 使用 [] 被認(rèn)為更慣用,因為這些方括號 ([]) 實際上看起來像 Python 列表。 tupletuple 函數(shù)與 list 函數(shù)非常相似,不同之處在于它生成元組:
如果你需要一個元組而不是一個列表,因為正在嘗試創(chuàng)建一個可散列的集合以在字典鍵中使用,例如,將希望通過列表訪問元組。 dictdict 函數(shù)創(chuàng)建一個新字典。 與 list 和 tuple 類似,dict 函數(shù)等效于循環(huán)遍歷鍵值對的可迭代對象并從中創(chuàng)建字典。 給定一個包含兩項元組的列表: >>> color_counts = [('red', 2), ('green', 1), ('blue', 3), ('purple', 5)]>>> colors = {}>>> for color, n in color_counts:... colors[color] = n...>>> colors{'red': 2, 'green': 1, 'blue' 3, 'purple': 5} 用dict函數(shù)替換:
dict 函數(shù)接受兩種類型的參數(shù): 另一個字典(映射是通用術(shù)語),在這種情況下,該字典將被復(fù)制 一個鍵值元組列表(更準(zhǔn)確地說,是一個包含兩項迭代的迭代),在這種情況下,一個新的字典將從這些元組中構(gòu)造出來 所以這也有效: >>> colors{'red': 2, 'green': 1, 'blue' 3, 'purple': 5}>>> new_dictionary = dict(colors)>>> new_dictionary{'red': 2, 'green': 1, 'blue' 3, 'purple': 5} dict 函數(shù)還可以接受關(guān)鍵字參數(shù)來制作帶有基于字符串的鍵的字典:
但我更喜歡使用字典文字來代替: >>> person = {'name': 'Trey Hunner', 'profession': 'Python Trainer'}>>> person{'name': 'Trey Hunner', 'profession': 'Python Trainer'} 字典字面量語法更靈活,速度也更快,但最重要的是,我發(fā)現(xiàn)它更清楚地傳達(dá)了我們正在創(chuàng)建字典的事實。 與列表和元組一樣,空字典也應(yīng)該使用文字語法來制作:
使用 {} 的 CPU 效率稍高一些,但更重要的是它更符合習(xí)慣:通常會看到花括號 ({}) 用于制作字典,但 dict 的使用頻率要低得多。 setset 函數(shù)創(chuàng)建一個新集合。它接受一個可哈希值(字符串、數(shù)字或其他不可變類型)的迭代并返回一個集合: >>> numbers = [1, 1, 2, 3, 5, 8]>>> set(numbers){1, 2, 3, 5, 8} 沒有辦法用 {} 集合字面量語法創(chuàng)建一個空集(普通的 {} 創(chuàng)建一個字典),所以 set 函數(shù)是創(chuàng)建一個空集的唯一方法:
實際上這是一個不對,因為我們有這個: >>> {*()} # This makes an empty setset() 但是這種語法令人困惑(它依賴于 * 運(yùn)算符的一個較少使用的功能),所以我不推薦它。 rangerange 函數(shù)為我們提供了一個 range 對象,它表示一個數(shù)字范圍:
生成的數(shù)字范圍包括起始數(shù)字,但不包括終止數(shù)字(范圍(0, 10)不包括 10)。 當(dāng)想循環(huán)數(shù)字時,范圍函數(shù)很有用。 >>> for n in range(0, 50, 10):... print(n)...010203040 一個常見的用例是執(zhí)行 n 次操作(順便說一下,這是一個列表生成式):
Python 2 的 range 函數(shù)返回一個列表,這意味著上面的表達(dá)式會產(chǎn)生非常大的列表。Python 3 的范圍與 Python 2 的 xrange 類似(盡管它們有點不同),因為當(dāng)我們遍歷這些范圍對象時,數(shù)字是惰性計算的,想必Python3的方式更好。 以上就是最常用的python內(nèi)建函數(shù)使用了,接下來一篇講解釋另外10有用的內(nèi)建函數(shù)。 |
|