筆者原創,文章轉載需註明,如果喜歡請點贊+關注,感謝支持!本文爲Python函數學習系列第三篇,python的常用內置函數。
由於篇幅問題,目前官網基於python3.7.7一共包含69個內置函數,共分爲3個章節進行講解,每個章節包含23個內置函數,同時會重點講解常用的的內置函數。
python官網關於內置函數的說明:https://docs.python.org/zh-cn/3.7/library/functions.html
目錄
Python常用的內置函數
什麼是內置函數?
其實內置函數就是python自己內置、定義的一些函數。
比如我們常用的print()打印,intput()輸出等等內置函數一樣,pyhton官方給你設定好的函數,可以直接拿來用。
目前python官方一共給出69個內置函數。下面是python官方給出的所有已知最新的內置函數:傳送門
下面的內容就根據字母順序將常用的內置函數進行詳細說明:
1. aba()
abs
(x)返回一個數的絕對值。實參可以是整數或浮點數。如果實參是一個複數,返回它的模。
說明:aba()絕對值函數,返回int類型。
舉例:
a = -1
print(abs(a))
print(type(abs(a)))
1
<class 'int'>
2. all()
說明:all
()函數用來判斷所有元素爲真,返回True。
all
(iterable)如果 iterable 的所有元素爲真(或迭代器爲空),返回
True
。等價於:def all(iterable): for element in iterable: if not element: return False return True
any
(iterable)如果 iterable 的任一元素爲真則返回
True
。 如果迭代器爲空,返回False
。 等價於:def any(iterable): for element in iterable: if element: return True return False
使用場景:all()函數一般應用場景在需要判斷多個條件時,用all()函數。
舉例:
list = '1,2,3'
print(all(list))
print(type(all(list)))
True
<class 'bool'>
3.any
()
說明:all函數是判斷所有元素,而any是判斷任一元素爲真則返回True。
any(iterable)
如果 iterable 的任一元素爲真則返回 True。 如果迭代器爲空,返回 False。 等價於:
def any(iterable):
for element in iterable:
if element:
return True
return False
舉例:
list = []
print(any(list))
list = [1]
print(any(list))
print(type(any(list)))
False
True
<class 'bool'>
4.ascii
()
說明:aascii() 函數會將所有非 ascii 字符替換爲轉義字符,並返回任何對象(字符串,元組,列表等)的可讀版本。
就像函數
repr()
,返回一個對象可打印的字符串,但是repr()
返回的字符串中非 ASCII 編碼的字符,會使用\x
、\u
和\U
來轉義。生成的字符串和 Python 2 的repr()
返回的結果相似。
print(ascii('中國'))
print(type(ascii('中國')))
'\u4e2d\u56fd'
<class 'str'>
5.bin
()
說明:bin()函數用於將一個整數轉變爲一個前綴爲“0b”的二進制字符串。
將一個整數轉變爲一個前綴爲“0b”的二進制字符串。結果是一個合法的 Python 表達式。如果 x 不是 Python 的
int
對象,那它需要定義__index__()
方法返回一個整數。一些例子:>>> bin(3) '0b11' >>> bin(-10) '-0b1010'
如果不一定需要前綴“0b”,還可以使用如下的方法。
>>> format(14, '#b'), format(14, 'b') ('0b1110', '1110') >>> f'{14:#b}', f'{14:b}' ('0b1110', '1110')
舉例:
print(bin(99))
print(type(bin(99)))
0b1100011
<class 'str'>
備註:需要注意bin函數轉換後返回值是字符串格式。
6.bool()
說明:bool()函數作用就是布爾類型轉換。
bool()返回一個布爾值,
True
或者False
。 x 使用標準的 真值測試過程 來轉換。如果 x 是假的或者被省略,返回False
;其他情況返回True
。bool
類是int
的子類(參見 數字類型 --- int, float, complex)。其他類不能繼承自它。它只有False
和True
兩個實例(參見 布爾值)。在 3.7 版更改: x 現在只能作爲位置參數。
舉例:
print(bool())
print(bool(''))
print(bool(0))
print(bool(1))
print(type(bool(1)))
False
False
False
True
<class 'bool'>
備註:布爾類型轉換是最常用的數據類型轉換的內置函數之一,常用在while循環,等需要返回值爲bool值的情況。
7.breakpoint()
說明:breakpoint
是 Python 3.7 中新增加的內置函數,breakpoint
(*args, **kws)此函數會在調用時將你陷入調試器中。
breakpoint
(*args, **kws)此函數會在調用時將你陷入調試器中。具體來說,它調用sys.breakpointhook()
,直接傳遞args
和kws
。默認情況下,sys.breakpointhook()
調用pdb.set_trace()
且沒有參數。在這種情況下,它純粹是一個便利函數,因此您不必顯式導入pdb
且鍵入儘可能少的代碼即可進入調試器。但是,sys.breakpointhook()
可以設置爲其他一些函數並被breakpoint()
自動調用,以允許進入你想用的調試器。
備註:暫時沒有應用場景,後續在具體的應用場景中再詳細展開研究。
8.bytearray()
說明:bytearray() 方法返回一個新字節數組。這個數組裏的元素是可變的,並且每個元素的值範圍: 0 <= x < 256。
class
bytearray
([source[, encoding[, errors]]])返回一個新的 bytes 數組。
bytearray
類是一個可變序列,包含範圍爲 0 <= x < 256 的整數。它有可變序列大部分常見的方法,見 可變序列類型 的描述;同時有bytes
類型的大部分方法,參見 bytes 和 bytearray 操作。可選形參 source 可以用不同的方式來初始化數組:
如果是一個 string,您必須提供 encoding 參數(errors 參數仍是可選的);
bytearray()
會使用str.encode()
方法來將 string 轉變成 bytes。如果是一個 integer,會初始化大小爲該數字的數組,並使用 null 字節填充。
如果是一個符合 buffer 接口的對象,該對象的只讀 buffer 會用來初始化字節數組。
如果是一個 iterable 可迭代對象,它的元素的範圍必須是
0 <= x < 256
的整數,它會被用作數組的初始內容。如果沒有實參,則創建大小爲 0 的數組。
舉例:
print(bytearray([1,2,3]))
bytearray(b'\x01\x02\x03')
9.bytes()
說明:bytes 函數返回一個新的 bytes 對象,該對象是一個 0 <= x < 256 區間內的整數不可變序列。它是 bytearray 的不可變版本。
class
bytes
([source[, encoding[, errors]]])返回一個新的“bytes”對象, 是一個不可變序列,包含範圍爲
0 <= x < 256
的整數。bytes
是bytearray
的不可變版本 - 它有其中不改變序列的方法和相同的索引、切片操作。因此,構造函數的實參和
bytearray()
相同。字節對象還可以用字面值創建,參見 字符串和字節串字面值。
另見 二進制序列類型 --- bytes, bytearray, memoryview,bytes 對象 和 bytes 和 bytearray 操作。
舉例:
print(bytes([1,2,3]))
print(type(bytes([1,2,3])))
b'\x01\x02\x03'
<class 'bytes'>
備註:類和對象相關的內置函數會在之後的學習中再詳細說明。
10.callable
()
說明:callable() 函數用於檢查一個對象是否是可調用的。如果返回 True,object 仍然可能調用失敗;但如果返回 False,調用對象 object 絕對不會成功。
對於函數、方法、lambda 函式、 類以及實現了 __call__ 方法的類實例, 它都返回 True。
callable
(object)如果參數 object 是可調用的就返回
True
,否則返回False
。 如果返回True
,調用仍可能失敗,但如果返回False
,則調用 object 將肯定不會成功。 請注意類是可調用的(調用類將返回一個新的實例);如果實例所屬的類有__call__()
則它就是可調用的。3.2 新版功能: 這個函數一開始在 Python 3.0 被移除了,但在 Python 3.2 被重新加入。
舉例:
print(callable(1))
print(callable(None))
False
False
備註:類和對象相關的內置函數會在之後的學習中再詳細說明。
11.chr
()
說明:chr() 用一個範圍在 range(256)內的(就是0~255)整數作參數,返回一個對應的字符。返回值是當前整數對應的 ASCII 字符。
chr
(i)返回 Unicode 碼位爲整數 i 的字符的字符串格式。例如,
chr(97)
返回字符串'a'
,chr(8364)
返回字符串'€'
。這是ord()
的逆函數。實參的合法範圍是 0 到 1,114,111(16 進製表示是 0x10FFFF)。如果 i 超過這個範圍,會觸發
ValueError
異常。
@
classmethod
把一個方法封裝成類方法。
一個類方法把類自己作爲第一個實參,就像一個實例方法把實例自己作爲第一個實參。請用以下習慣來聲明類方法:
class C:
@classmethod
def f(cls, arg1, arg2, ...): ...
print(chr(0x31))
print(chr(65))
print(type(chr(60)))
1
A
<class 'str'>
12.classmethod
說明:classmethod 修飾符對應的函數不需要實例化,不需要 self 參數,但第一個參數需要是表示自身類的 cls 參數,可以來調用類的屬性,類的方法,實例化對象等。
@classmethod
這樣的形式稱爲函數的 decorator -- 詳情參閱 函數定義。類方法的調用可以在類上進行 (例如
C.f()
) 也可以在實例上進行 (例如C().f()
)。 其所屬類以外的類實例會被忽略。 如果類方法在其所屬類的派生類上調用,則該派生類對象會被作爲隱含的第一個參數被傳入。類方法與 C++ 或 Java 中的靜態方法不同。 如果你需要後者,請參閱
staticmethod()
。想了解更多有關類方法的信息,請參閱 標準類型層級結構 。
備註:一般用作聲明類屬性,類和對象相關的內置函數會在之後的學習中再詳細說明。
@classmethod
13.compile()
說明:compile() 函數將一個字符串編譯爲字節代碼。
compile
(source, filename, mode, flags=0, dont_inherit=False, optimize=-1)將 source 編譯成代碼或 AST 對象。代碼對象可以被
exec()
或eval()
執行。source 可以是常規的字符串、字節字符串,或者 AST 對象。參見ast
模塊的文檔瞭解如何使用 AST 對象。filename 實參需要是代碼讀取的文件名;如果代碼不需要從文件中讀取,可以傳入一些可辨識的值(經常會使用
'<string>'
)。mode 實參指定了編譯代碼必須用的模式。如果 source 是語句序列,可以是
'exec'
;如果是單一表達式,可以是'eval'
;如果是單個交互式語句,可以是'single'
。(在最後一種情況下,如果表達式執行結果不是None
將會被打印出來。)可選參數 flags 和 dont_inherit 控制在編譯 source 時要用到哪個 future 語句。 如果兩者都未提供(或都爲零)則會使用調用
compile()
的代碼中有效的 future 語句來編譯代碼。 如果給出了 flags 參數但沒有 dont_inherit (或是爲零) 則 flags 參數所指定的 以及那些無論如何都有效的 future 語句會被使用。 如果 dont_inherit 爲一個非零整數,則只使用 flags 參數 -- 在調用外圍有效的 future 語句將被忽略。Future 語句使用比特位來指定,多個語句可以通過按位或來指定。具體特性的比特位可以通過
__future__
模塊中的_Feature
類的實例的compiler_flag
屬性來獲得。optimize 實參指定編譯器的優化級別;默認值
-1
選擇與解釋器的-O
選項相同的優化級別。顯式級別爲0
(沒有優化;__debug__
爲真)、1
(斷言被刪除,__debug__
爲假)或2
(文檔字符串也被刪除)。如果編譯的源碼不合法,此函數會觸發
SyntaxError
異常;如果源碼包含 null 字節,則會觸發ValueError
異常。如果您想分析 Python 代碼的 AST 表示,請參閱
ast.parse()
。註解
在
'single'
或'eval'
模式編譯多行代碼字符串時,輸入必須以至少一個換行符結尾。 這使code
模塊更容易檢測語句的完整性。警告
在將足夠大或者足夠複雜的字符串編譯成 AST 對象時,Python 解釋器有可以因爲 Python AST 編譯器的棧深度限制而崩潰。
在 3.2 版更改: 允許使用 Windows 和 Mac 的換行符。在
'exec'
模式不再需要以換行符結尾。增加了 optimize 形參。在 3.5 版更改: 之前 source 中包含 null 字節的話會觸發
TypeError
異常。
舉例:
str = 'for i in range(0,10): print(i)'
print(compile(str,'','exec'))
<code object <module> at 0x0000027982A81F60, file "", line 1>
14.complex()
說明:complex() 函數用於創建一個值爲 real + imag * j 的複數或者轉化一個字符串或數爲複數。如果第一個參數爲字符串,則不需要指定第二個參數。
class
complex
([real[, imag]])返回值爲 real + imag*1j 的複數,或將字符串或數字轉換爲複數。如果第一個形參是字符串,則它被解釋爲一個複數,並且函數調用時必須沒有第二個形參。第二個形參不能是字符串。每個實參都可以是任意的數值類型(包括複數)。如果省略了 imag,則默認值爲零,構造函數會像
int
和float
一樣進行數值轉換。如果兩個實參都省略,則返回0j
。註解
當從字符串轉換時,字符串在
+
或-
的周圍必須不能有空格。例如complex('1+2j')
是合法的,但complex('1 + 2j')
會觸發ValueError
異常。數字類型 --- int, float, complex 描述了複數類型。
在 3.6 版更改: 您可以使用下劃線將代碼文字中的數字進行分組。
舉例:
print(complex(1,2))
(1+2j)
15.delattr
()
說明:delattr 函數用於刪除屬性。
delattr
(object, name)
setattr()
相關的函數。實參是一個對象和一個字符串。該字符串必須是對象的某個屬性。如果對象允許,該函數將刪除指定的屬性。例如delattr(x, 'foobar')
等價於del x.foobar
。
備註:類和對象在python學習中還未涉及到,所以暫時不深入研究,後續在逐步補充。
16. dict
()
說明:dict() 函數用於創建一個字典。
class
dict
(**kwarg)class
dict
(mapping, **kwarg)class
dict
(iterable, **kwarg)創建一個新的字典。
dict
對象是一個字典類。參見dict
和 映射類型 --- dict 瞭解這個類。其他容器類型,請參見內置的
list
、set
和tuple
類,以及collections
模塊。
舉例:
a = dict()
print(a)
print(type(a))
{}
<class 'dict'>
17.dir()
說明:dir()函數不帶參數時,返回當前範圍內的變量、方法和定義的類型列表;帶參數時,返回參數的屬性、方法列表。如果參數包含方法__dir__(),該方法將被調用。如果參數不包含__dir__(),該方法將最大限度地收集參數信息。
dir
([object])如果沒有實參,則返回當前本地作用域中的名稱列表。如果有實參,它會嘗試返回該對象的有效屬性列表。
如果對象有一個名爲
__dir__()
的方法,那麼該方法將被調用,並且必須返回一個屬性列表。這允許實現自定義__getattr__()
或__getattribute__()
函數的對象能夠自定義dir()
來報告它們的屬性。如果對象不提供
__dir__()
,這個函數會嘗試從對象已定義的__dict__
屬性和類型對象收集信息。結果列表並不總是完整的,如果對象有自定義__getattr__()
,那結果可能不準確。默認的
dir()
機制對不同類型的對象行爲不同,它會試圖返回最相關而不是最全的信息:
如果對象是模塊對象,則列表包含模塊的屬性名稱。
如果對象是類型或類對象,則列表包含它們的屬性名稱,並且遞歸查找所有基類的屬性。
否則,列表包含對象的屬性名稱,它的類屬性名稱,並且遞歸查找它的類的所有基類的屬性。
返回的列表按字母表排序。例如:
>>> import struct
>>> dir() # show the names in the module namespace
['__builtins__', '__name__', 'struct']
>>> dir(struct) # show the names in the struct module
['Struct', '__all__', '__builtins__', '__cached__', '__doc__', '__file__',
'__initializing__', '__loader__', '__name__', '__package__',
'_clearcache', 'calcsize', 'error', 'pack', 'pack_into',
'unpack', 'unpack_from']
>>> class Shape:
... def __dir__(self):
... return ['area', 'perimeter', 'location']
>>> s = Shape()
>>> dir(s)
['area', 'location', 'perimeter']
註解
因爲
dir()
主要是爲了便於在交互式時使用,所以它會試圖返回人們感興趣的名字集合,而不是試圖保證結果的嚴格性或一致性,它具體的行爲也可能在不同版本之間改變。例如,當實參是一個類時,metaclass 的屬性不包含在結果列表中。
備註:暫時沒有應用場景,後續在具體的應用場景中再詳細展開研究。
18.divmod
()
說明:python divmod() 函數把除數和餘數運算結果結合起來,返回一個包含商和餘數的元組(a // b, a % b)。
divmod
(a, b)它將兩個(非複數)數字作爲實參,並在執行整數除法時返回一對商和餘數。對於混合操作數類型,適用雙目算術運算符的規則。對於整數,結果和
(a // b, a % b)
一致。對於浮點數,結果是(q, a % b)
,q 通常是math.floor(a / b)
但可能會比 1 小。在任何情況下,q * b + a % b
和 a 基本相等;如果a % b
非零,它的符號和 b 一樣,並且0 <= abs(a % b) < abs(b)
。
舉例:
print(divmod(200,13))
(15, 5)
19.enumerate
()
說明:enumerate() 函數用於將一個可遍歷的數據對象(如列表、元組或字符串)組合爲一個索引序列,同時列出數據和數據下標,一般用在 for 循環當中。
enumerate
(iterable, start=0)返回一個枚舉對象。iterable 必須是一個序列,或 iterator,或其他支持迭代的對象。
enumerate()
返回的迭代器的__next__()
方法返回一個元組,裏面包含一個計數值(從 start 開始,默認爲 0)和通過迭代 iterable 獲得的值。
>>> seasons = ['Spring', 'Summer', 'Fall', 'Winter']
>>> list(enumerate(seasons))
[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
>>> list(enumerate(seasons, start=1))
[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]
等價於:
def enumerate(sequence, start=0):
n = start
for elem in sequence:
yield n, elem
n += 1
舉例:
seq = ['one', 'two', 'three']
i = 0
for element in seq:
print(i,seq[i])
i += 1
0 one
1 two
2 three
20.eval
()
說明:eval() 函數用來執行一個字符串表達式,並返回表達式的值。
eval
(expression[, globals[, locals]])實參是一個字符串,以及可選的 globals 和 locals。globals 實參必須是一個字典。locals 可以是任何映射對象。
expression 參數會作爲一個 Python 表達式(從技術上說是一個條件列表)被解析並求值,使用 globals 和 locals 字典作爲全局和局部命名空間。 如果 globals 字典存在且不包含以
__builtins__
爲鍵的值,則會在解析 expression 之前插入以此爲鍵的對內置模塊builtins
的字典的引用。 這意味着 expression 通常具有對標準builtins
模塊的完全訪問權限且受限的環境會被傳播。 如果省略 locals 字典則其默認值爲 globals 字典。 如果兩個字典同時省略,表達式會在eval()
被調用的環境中執行。 返回值爲表達式求值的結果。 語法錯誤將作爲異常被報告。 例如:
>>> x = 1
>>> eval('x+1')
2
這個函數也可以用來執行任何代碼對象(如
compile()
創建的)。這種情況下,參數是代碼對象,而不是字符串。如果編譯該對象時的 mode 實參是'exec'
那麼eval()
返回值爲None
。提示:
exec()
函數支持動態執行語句。globals()
和locals()
函數各自返回當前的全局和本地字典,因此您可以將它們傳遞給eval()
或exec()
來使用。另外可以參閱
ast.literal_eval()
,該函數可以安全執行僅包含文字的表達式字符串。
舉例:
a=1
g={'a':20}
print(eval("a+1",g))
21
21.exec
()
說明:exec 執行儲存在字符串或文件中的Python語句,相比於 eval,exec可以執行更復雜的 Python 代碼。
exec
(object[, globals[, locals]])這個函數支持動態執行 Python 代碼。object 必須是字符串或者代碼對象。如果是字符串,那麼該字符串將被解析爲一系列 Python 語句並執行(除非發生語法錯誤)。1 如果是代碼對象,它將被直接執行。在任何情況下,被執行的代碼都需要和文件輸入一樣是有效的(見參考手冊中關於文件輸入的章節)。請注意即使在傳遞給
exec()
函數的代碼的上下文中,return
和yield
語句也不能在函數定義之外使用。該函數返回值是None
。無論哪種情況,如果省略了可選參數,代碼將在當前範圍內執行。如果提供了 globals 參數,就必須是字典類型,而且會被用作全局和本地變量。如果同時提供了 globals 和 locals 參數,它們分別被用作全局和本地變量。如果提供了 locals 參數,則它可以是任何映射型的對象。請記住在模塊層級,全局和本地變量是相同的字典。如果 exec 有兩個不同的 globals 和 locals 對象,代碼就像嵌入在類定義中一樣執行。
如果 globals 字典不包含
__builtins__
鍵值,則將爲該鍵插入對內建builtins
模塊字典的引用。因此,在將執行的代碼傳遞給exec()
之前,可以通過將自己的__builtins__
字典插入到 globals 中來控制可以使用哪些內置代碼。註解
內置
globals()
和locals()
函數各自返回當前的全局和本地字典,因此可以將它們傳遞給exec()
的第二個和第三個實參。註解
默認情況下,locals 的行爲如下面
locals()
函數描述的一樣:不要試圖改變默認的 locals 字典。如果您想在exec()
函數返回時知道代碼對 locals 的變動,請明確地傳遞 locals 字典。
備註:暫時沒有應用場景,後續在具體的應用場景中再詳細展開研究。
22.filter
()
說明:filter() 函數用於過濾序列,過濾掉不符合條件的元素,返回由符合條件元素組成的新列表。
該接收兩個參數,第一個爲函數,第二個爲序列,序列的每個元素作爲參數傳遞給函數進行判斷,然後返回 True 或 False,最後將返回 True 的元素放到新列表中。
filter
(function, iterable)用 iterable 中函數 function 返回真的那些元素,構建一個新的迭代器。iterable 可以是一個序列,一個支持迭代的容器,或一個迭代器。如果 function 是
None
,則會假設它是一個身份函數,即 iterable 中所有返回假的元素會被移除。請注意,
filter(function, iterable)
相當於一個生成器表達式,當 function 不是None
的時候爲(item for item in iterable if function(item))
;function 是None
的時候爲(item for item in iterable if item)
。請參閱
itertools.filterfalse()
瞭解,只有 function 返回 false 時才選取 iterable 中元素的補充函數。
l = [x for x in range(0, 10)]
print(list(filter(None, l)))
[1, 2, 3, 4, 5, 6, 7, 8, 9]
23.float
()
說明:數據類型轉換爲float()浮點數類型。
class float([x])
返回從數字或字符串 x 生成的浮點數。
如果實參是字符串,則它必須是包含十進制數字的字符串,字符串前面可以有符號,之前也可以有空格。可選的符號有 '+' 和 '-' ; '+' 對創建的值沒有影響。實參也可以是 NaN(非數字)、正負無窮大的字符串。確切地說,除去首尾的空格後,輸入必須遵循以下語法:
sign ::= "+" | "-"
infinity ::= "Infinity" | "inf"
nan ::= "nan"
numeric_value ::=
floatnumber
|infinity
|nan
numeric_string ::= [sign
]numeric_value
這裏,
floatnumber
是 Python 浮點數的字符串形式,詳見 浮點數字面值。字母大小寫都可以,例如,“inf”、“Inf”、“INFINITY”、“iNfINity” 都可以表示正無窮大。另一方面,如果實參是整數或浮點數,則返回具有相同值(在 Python 浮點精度範圍內)的浮點數。如果實參在 Python 浮點精度範圍外,則會觸發
OverflowError
。對於一般的 Python 對象
x
,float(x)
指派給x.__float__()
。如果沒有實參,則返回
0.0
。示例:
>>>
>>> float('+1.23')
1.23
>>> float(' -12345\n')
-12345.0
>>> float('1e-003')
0.001
>>> float('+1E6')
1000000.0
>>> float('-Infinity')
-inf
數字類型 --- int, float, complex 描述了浮點類型。
在 3.6 版更改: 您可以使用下劃線將代碼文字中的數字進行分組。
在 3.7 版更改: x 現在只能作爲位置參數。
舉例:
num = 100
print(float(num))
print(type(float(num)))
100.0
<class 'float'>
以上便是《Python學習13:內置函數(一)》所有內容,下一篇爲內置函數(二)講解更多內置函數的定義和用法。
目前《Python學習》專題正在不斷更新,原創不易,如果喜歡請點贊和關注,謝謝大家的支持!
獲得更多免費的學習資料請添加微信公衆號——風起怨江南,有任何問題可以隨時和我交流溝通。