Python 解釋器自帶的函數叫做內置函數,這些函數可以直接使用,不需要導入某個模塊。
如果你熟悉 Shell 編程,了解什么是 Shell 內置命令,那么你也很容易理解什么是 Python 內置函數,它們的概念是類似的。
將使用頻繁的代碼段封裝起來,並給它起一個名字,以后使用的時候只要知道名字就可以,這就是函數。函數就是一段封裝好的、可以重復使用的代碼,它使得我們的程序更加模塊化,不需要編寫大量重復的代碼。
內置函數和標准庫函數是不一樣的。
Python 解釋器也是一個程序,它給用戶提供了一些常用功能,並給它們起了獨一無二的名字,這些常用功能就是內置函數。Python 解釋器啟動以后,內置函數也生效了,可以直接拿來使用。
Python 標准庫相當於解釋器的外部擴展,它並不會隨着解釋器的啟動而啟動,要想使用這些外部擴展,必須提前導入。Python 標准庫非常龐大,包含了很多模塊,要想使用某個函數,必須提前導入對應的模塊,否則函數是無效的。
內置函數是解釋器的一部分,它隨着解釋器的啟動而生效;標准庫函數是解釋器的外部擴展,導入模塊以后才能生效。一般來說,內置函數的執行效率要高於標准庫函數。
Python 解釋器一旦啟動,所有的內置函數都生效了;而導入標准庫的某個模塊,只是該模塊下的函數生效,並不是所有的標准庫函數都生效。
內置函數的數量必須被嚴格控制,否則 Python 解釋器會變得龐大和臃腫。一般來說,只有那些使用頻繁或者和語言本身綁定比較緊密的函數,才會被提升為內置函數。
例如,在屏幕上輸出文本就是使用最頻繁的功能之一,所以 print() 是 Python 的內置函數。
在 Python 2.x 中,print 是一個關鍵字;到了 Python 3.x 中,print 變成了內置函數。
除了 print() 函數,Python 解釋器還提供了更多內置函數,下表列出了 Python 3.x 中的所有內置函數。
| 內置函數 | ||||
|---|---|---|---|---|
| abs() | delattr() | hash() | memoryview() | set() |
| all() | dict() | help() | min() | setattr() |
| any() | dir() | hex() | next() | slicea() |
| ascii() | divmod() | id() | object() | sorted() |
| bin() | enumerate() | input() | oct() | staticmethod() |
| bool() | eval() | int() | open() | str() |
| breakpoint() | exec() | isinstance() | ord() | sum() |
| bytearray() | filter() | issubclass() | pow() | super() |
| bytes() | float() | iter() | print() | tuple() |
| callable() | format() | len() | property() | type() |
| chr() | frozenset() | list() | range() | vars() |
| classmethod() | getattr() | locals() | repr() | zip() |
| compile() | globals() | map() | reversed() | __import__() |
| complex() | hasattr() | max() | round() | |
表 1 中各個內置函數的具體功能和用法,可通過訪問 https://docs.python.org/zh-cn/3/library/functions.html 進行查看。
注意,不要使用內置函數的名字作為標識符使用(例如變量名、函數名、類名、模板名、對象名等),雖然這樣做 Python 解釋器不會報錯,但這會導致同名的內置函數被覆蓋,從而無法使用。例如:
>>> print = "http://c.biancheng.net/python/" #將print作為變量名
>>> print("Hello World!") #print函數被覆蓋,失效
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
print("Hello World!")
TypeError: 'str' object is not callable
