在學習python中總有一些問題困擾我們:
Python中有這么多函數,記住所有這些的最好方法是什么?
學習我們日常需要的函數(如enumerate 和range)的最佳方法是什么?
你怎么知道用 Python 解決問題的所有方法?你會記住它們嗎?
實際上PyPI 上有幾十個內置函數和類,數百個工具捆綁在 Python 的標準庫中,還有數千個第三方庫。沒有人能記住所有這些東西。
我建議對這些知識按以下進行分類:
有些內容我們應該記住,以便我熟悉它們
有些內容我們應該知道,,以便我以后可以更有效地查找它們
有些內容除非有一天我需要它們,否則我根本不應該花費太長時間去研究它們。
考慮到這種方法,我們將瀏覽 Python 文檔中的內置函數頁面。
要說完所有內容文章會比較長,我會分幾篇進行,這篇我們先說前10個最通用的內在函數,所以如果你時間緊迫或特別想看某個內置函數,你不必逐一查看,可以直接定位到你感興趣的內容上:
我估計大多數 Python 開發人員只需要大約 30 個內置函數,但其中 30 個取決于實際使用Python 所做的事情。
我們全局的方式來看看 Python 的所有 71 個內置函數。
我將嘗試將這些內置插件分為五類:
眾所周知的內置插件:大多數較新的Pythonistas 很快就迫不及待地接觸到這些內置插件
被新的Pythonistas忽略:了解這些函數很有用,但是當對 Python 較新時,它們很容易被忽略
稍后再學習:這些內置插件通常很有用,但會在需要時/如果需要它們時找到它們
也許最終會學習這些:這些可以派上用場,但僅限于特定情況
可能不需要這些:除非正在做一些相當專業的事情,否則不太可能需要這些
第 1 類和第2 類中的內置函數是幾乎所有 Python 程序員最終都應該學習的基本內置函數。
第 3 類和第 4 類中的內置程序是專門的內置程序,它們通常非常有用,但對它們的需求會因你對 Python 的使用而異。第 5 類是神秘的內置插件,當你需要它們時可能會非常方便,但許多 Python 程序員可能永遠不需要。
Pythonistas的注意事項:我將所有這些內置函數稱為函數,但其中 27 個實際上不是函數。
眾所周知的內置函數(可能大家已經知道):
len
str
int
float
list
tuple
dict
set
range
新的 Python 程序員經常忽略的內置函數:
sum
enumerate
zip
bool
reversed
sorted
min
max
any
all
還有 5 個通常被忽視的內置插件,我建議了解這些插件,因為它們使調試更容易:
dir
vars
breakpoint
type
help
除了上面的 25 個內置函數外,我們還將在稍后學習中簡要介紹其他 46 個內置函數,也許最終會學習它,也可能不需要這些部分。
10個常見的內置函數
如果你一直在編寫 Python 代碼,那么這些內置函數可能已經很熟悉了。
你可能已經知道它的打印功能,但可能不知道 print 還可以接受的各種關鍵字參數:
>>> words = ["Welcome", "to", "Python"]
>>> print(words)
['Welcome', 'to', 'Python']
>>> print(*words, end="!\n")
Welcome to Python!
>>> print(*words, sep="\n")
Welcome
to
Python
你可以自己測試下。
len
在 Python 中,我們不寫 my_list.length() 或 my_string.length 之類的東西;相反,我們奇怪地(至少對于新的 Pythonistas)用 len(my_list) 和 len(my_string)。
>>> words = ["Welcome", "to", "Python"]
>>> len(words)
3
不管你是否喜歡這個類似運算符的 len 函數,你都必須使用了,所以你需要習慣它。
str
與許多其他編程語言不同,Python 沒有類型強制,因此你無法在 Python 中連接字符串和數字。
>>> version = 3
>>> "Python " + version
Traceback (most recent call last):
File "
TypeError: can only concatenate str (not "int") to str
Python 拒絕將 3 個整數強制轉換為字符串,因此我們需要自己手動完成,使用內置的 str 函數(從技術上講是類,但正如我所說,我將調用這些函數):
>>> version = 3
>>> "Python " + str(version)
'Python 3'
int
你是否有用戶輸入并需要將其轉換為數字?你需要 int 函數!
int 函數可以將字符串轉換為整數:
>>> program_name = "Python 3"
>>> version_number = program_name.split()[-1]
>>> int(version_number)
3
還可以使用 int 將浮點數截斷為整數:
>>> from math import sqrt
>>> sqrt(28)
5.291502622129181
>>> int(sqrt(28))
5
請注意,如果需要在除法時截斷, // 運算符可能更合適(盡管這對負數的工作方式不同):int(3 / 2) == 3 // 2。
float
需要轉換為數字的字符串實際上不是整數, 就需要使用 float 而不是 int 進行此轉換。
>>> 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 將整數轉換為浮點數。
在 Python 2 中,我們曾經使用 float 將整數轉換為浮點數來強制浮點除法而不是整數除法。“整數除法”在 Python 3 中不再存在(除非你專門使用 // 運算符),因此我們不再需要 float 來達到此目的。因此,如果在 Python 3 代碼中看到 float(x) / y,則可以將其更改為僅 x / y。
list
列表函數這樣做:
>>> numbers = [2, 1, 3, 5, 8]
>>> squares = (n**2 for n in numbers)
>>> squares
>>> list_of_squares = list(squares)
>>> list_of_squares
[4, 1, 9, 25, 64]
如果你知道正在使用列表,則可以使用 copy 方法制作列表的新副本:
>>> copy_of_squares = list_of_squares.copy()
但是如果你不知道你正在使用的迭代器是什么,列表函數是循環遍歷一個迭代器并復制它的更通用的方法:
>>> copy_of_squares = list(list_of_squares)
也可以為此使用列表推導,但如果是新手我不建議這樣做。
>>> my_list = list() # Don't do this
>>> my_list = [] # Do this instead
使用 [] 被認為更慣用,因為這些方括號 ([]) 實際上看起來像 Python 列表。
tuple
tuple 函數與 list 函數非常相似,不同之處在于它生成元組:
>>> numbers = [2, 1, 3, 4, 7]
>>> tuple(numbers)
(2, 1, 3, 4, 7)
如果你需要一個元組而不是一個列表,因為正在嘗試創建一個可散列的集合以在字典鍵中使用,例如,將希望通過列表訪問元組。
dict
dict 函數創建一個新字典。
與 list 和 tuple 類似,dict 函數等效于循環遍歷鍵值對的可迭代對象并從中創建字典。
給定一個包含兩項元組的列表:
>>> 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函數替換:
>>> colors = dict(color_counts)
>>> colors
{'red': 2, 'green': 1, 'blue' 3, 'purple': 5}
dict 函數接受兩種類型的參數:
另一個字典(映射是通用術語),在這種情況下,該字典將被復制
一個鍵值元組列表(更準確地說,是一個包含兩項迭代的迭代),在這種情況下,一個新的字典將從這些元組中構造出來
所以這也有效:
>>> colors
{'red': 2, 'green': 1, 'blue' 3, 'purple': 5}
>>> new_dictionary = dict(colors)
>>> new_dictionary
{'red': 2, 'green': 1, 'blue' 3, 'purple': 5}
dict 函數還可以接受關鍵字參數來制作帶有基于字符串的鍵的字典:
>>> person = dict(name='Trey Hunner', profession='Python Trainer')
>>> person
{'name': 'Trey Hunner', 'profession': 'Python Trainer'}
但我更喜歡使用字典文字來代替:
>>> person = {'name': 'Trey Hunner', 'profession': 'Python Trainer'}
>>> person
{'name': 'Trey Hunner', 'profession': 'Python Trainer'}
字典字面量語法更靈活,速度也更快,但最重要的是,我發現它更清楚地傳達了我們正在創建字典的事實。
與列表和元組一樣,空字典也應該使用文字語法來制作:
>>> my_list = dict() # Don't do this
>>> my_list = {} # Do this instead
使用 {} 的 CPU 效率稍高一些,但更重要的是它更符合習慣:通常會看到花括號 ({}) 用于制作字典,但 dict 的使用頻率要低得多。
set
set 函數創建一個新集合。它接受一個可哈希值(字符串、數字或其他不可變類型)的迭代并返回一個集合:
>>> numbers = [1, 1, 2, 3, 5, 8]
>>> set(numbers)
{1, 2, 3, 5, 8}
沒有辦法用 {} 集合字面量語法創建一個空集(普通的 {} 創建一個字典),所以 set 函數是創建一個空集的唯一方法:
>>> numbers = set()
>>> numbers
set()
實際上這是一個不對,因為我們有這個:
>>> {*()} # This makes an empty set
set()
但是這種語法令人困惑(它依賴于 * 運算符的一個較少使用的功能),所以我不推薦它。
range
range 函數為我們提供了一個 range 對象,它表示一個數字范圍:
>>> range(10_000)
range(0, 10000)
>>> range(-1_000_000_000, 1_000_000_000)
range(-1000000000, 1000000000)
生成的數字范圍包括起始數字,但不包括終止數字(范圍(0, 10)不包括 10)。
當想循環數字時,范圍函數很有用。
>>> for n in range(0, 50, 10):
... print(n)
...
0
10
20
30
40
一個常見的用例是執行 n 次操作(順便說一下,這是一個列表生成式):
first_five = [get_things() for _ in range(5)]
Python 2 的 range 函數返回一個列表,這意味著上面的表達式會產生非常大的列表。Python 3 的范圍與 Python 2 的 xrange 類似(盡管它們有點不同),因為當我們遍歷這些范圍對象時,數字是惰性計算的,想必Python3的方式更好。
以上就是最常用的python內建函數使用了,接下來一篇講解釋另外10有用的內建函數。
聲明:
本站(www.rxbbx.com)部分圖文轉自網絡,刊登本文僅為傳播信息之用,絕不代表贊同其觀點或擔保其真實性。若有來源標注錯誤或侵犯了您的合法權益,請作者持權屬證明與本網聯系,我們將及時更正、刪除,謝謝