內建函式

Python 直譯器有內建多個可隨時使用的函式和型別。以下按照英文字母排序列出。

內建函式

abs(x)

回傳一個數的絕對值,引數可以是整數、浮點數或有實現__abs__() 的物件。如果引數是一個複數,回傳它的純量(大小)。

aiter(async_iterable)

回傳非同步疊代器 做為非同步可疊代物件。相當於呼叫 x.__aiter__()。

注意:與iter() 不同,aiter() 沒有兩個引數的變體。

在 3.10 版被加入.

all(iterable)

如果iterable 的所有元素皆為真(或 iterable 為空)則回傳True。等價於:

defall(iterable):forelementiniterable:ifnotelement:returnFalsereturnTrue
awaitableanext(async_iterator)
awaitableanext(async_iterator,default)

當進入 await 時,從給定的asynchronous iterator 中回傳下一個項目(item),疊代完畢則回傳default

這是內建函式next() 的非同步版本,其行為類似於:

呼叫async_iterator__anext__() 方法,回傳awaitable。等待返回疊代器的下一個值。如果指定default,當疊代器結束時會返回該值,否則會引發StopAsyncIteration

在 3.10 版被加入.

any(iterable)

如果iterable 的任一元素為真,回傳True。如果 iterable 是空的,則回傳False。等價於:

defany(iterable):forelementiniterable:ifelement:returnTruereturnFalse
ascii(object)

就像函式repr(),回傳一個表示物件的字串,但是repr() 回傳的字串中非 ASCII 編碼的字元會被跳脫 (escape),像是\x\u\U。這個函式生成的字串和 Python 2 的repr() 回傳的結果相似。

bin(x)

將一個整數轉變為一個前綴為 "0b" 的二進位制字串。結果是一個有效的 Python 運算式。如果x 不是 Python 的int 物件,那它需要定義__index__() method 回傳一個整數。舉例來說:

>>>bin(3)'0b11'>>>bin(-10)'-0b1010'

如果不一定需要 "0b" 前綴,還可以使用如下的方法。

>>>format(14,'#b'),format(14,'b')('0b1110', '1110')>>>f'{14:#b}',f'{14:b}'('0b1110', '1110')

可參考format() 取得更多資訊。

classbool(object=False,/)

回傳一個布林值,即True 或者False。引數會使用標準的真值測試程序來轉換。如果引數為假或者被省略,則回傳False;其他情況回傳Truebool class(類別)是int 的 subclass(子類別)(參見數值型別 --- int、float、complex),其他 class 不能繼承自它。它只有FalseTrue 兩個實例(參見Boolean 型別 - bool)。

在 3.7 版的變更:現在為僅限位置參數。

breakpoint(*args,**kws)

這個函式將呼叫sys.breakpointhook() 函式,並將argskws 傳遞給它。這將有效地讓你在特定的呼叫點進入除錯器。預設情況下,sys.breakpointhook() 呼叫pdb.set_trace() 不須帶任何引數。這樣的設計是為了方便使用者,讓他們不需要額外地導入pdb 模組或輸入太多程式就可以進入除錯器。然而,可以將sys.breakpointhook() 設置為其他函式,並且breakpoint() 將自動呼叫該函式,讓你進入所選擇的除錯器。如果無法存取sys.breakpointhook() 這個函式,則此函式將引發RuntimeError

預設情況下,breakpoint() 的行為可以透過PYTHONBREAKPOINT 環境變數來更改。有關使用詳情,請參考sys.breakpointhook()

請注意,如果sys.breakpointhook() 被替換了,則無法保證此功能。

引發一個附帶引數breakpointhook稽核事件builtins.breakpoint

在 3.7 版被加入.

classbytearray(source=b'')
classbytearray(source,encoding)
classbytearray(source,encoding,errors)

回傳一個新的 bytes 陣列。bytearray class 是一個可變的整數序列,包含範圍為 0 <= x < 256 的整數。它有可變序列大部分常見的 method(如在Mutable Sequence Types 中所述),同時也有bytes 型別大部分的 method,參見Bytes 和 Bytearray 的操作

選擇性參數source 可以被用來以不同的方式初始化陣列:

  • 如果是一個string,你必須提供encoding 參數(以及選擇性地提供errors );bytearray() 會使用str.encode() method 來將 string 轉變成 bytes。

  • 如果是一個integer,陣列則會有該數值的長度,並以 null bytes 來當作初始值。

  • 如果是一個符合buffer 介面的物件,該物件的唯讀 buffer 會被用來初始化 bytes 陣列。

  • 如果是一個iterable,它的元素必須是範圍為0<=x<256 的整數,並且會被用作陣列的初始值。

如果沒有引數,則建立長度為 0 的陣列。

可參考Binary Sequence Types --- bytes, bytearray, memoryviewBytearray 物件

classbytes(source=b'')
classbytes(source,encoding)
classbytes(source,encoding,errors)

回傳一個新的 "bytes" 物件,會是一個元素是範圍為0<=x<256 整數的不可變序列。bytesbytearray 的不可變版本 — 它的同樣具備不改變物件的 method,也有相同的索引和切片操作。

因此,建構函式的引數和bytearray() 相同。

Bytes 物件還可以用文字建立,參見String and Bytes literals

可參考Binary Sequence Types --- bytes, bytearray, memoryviewBytes ObjectsBytes 和 Bytearray 的操作

callable(object)

如果引數object 是可呼叫的,回傳True,否則回傳False。如果回傳True,呼叫仍可能會失敗;但如果回傳False,則呼叫object 肯定會失敗。注意 class 是可呼叫的(呼叫 class 會回傳一個新的實例);如果實例的 class 有定義__call__() method,則它是可呼叫的。

在 3.2 版被加入:這個函式一開始在 Python 3.0 被移除,但在 Python 3.2 又被重新加入。

chr(i)

回傳代表字元之 Unicode 編碼位置為整數i 的字串。例如,chr(97) 回傳字串'a',而chr(8364) 回傳字串'€'。這是ord() 的逆函式。

引數的有效範圍是 0 到 1,114,111(16 進制表示為 0x10FFFF)。如果i 超過這個範圍,會引發ValueError

@classmethod

把一個 method 封裝成 class method(類別方法)。

一個 class method 把自己的 class 作為第一個引數,就像一個實例 method 把實例自己作為第一個引數。請用以下慣例來宣告 class method:

classC:@classmethoddeff(cls,arg1,arg2):...

@classmethod 語法是一個函式decorator — 參見函式定義 中關於函式定義的詳細介紹。

一個 class method 可以在 class(如C.f())或實例(如C().f())上呼叫。實例除了它的 class 資訊,其他都會被忽略。如果一個 class method 在 subclass 上呼叫,subclass 會作為第一個引數傳入。

Class method 和 C++ 與 Java 的 static method 是有區別的。如果你想瞭解 static method,請看本節的staticmethod()。關於 class method 的更多資訊,請參考標準型別階層

在 3.9 版的變更:Class methods 現在可以包裝其他描述器,例如property()

在 3.10 版的變更:Class method 現在繼承了 method 屬性(__module____name____qualname____doc____annotations__),並擁有一個新的__wrapped__ 屬性。

Deprecated since version 3.11, removed in version 3.13:Class methods 不能再包裝其他的描述器,例如property()

compile(source,filename,mode,flags=0,dont_inherit=False,optimize=-1)

source 編譯成程式碼或 AST 物件。程式碼物件可以被exec()eval() 執行。source 可以是一般的字串、bytes 字串、或者 AST 物件。參見ast module(模組)的說明文件瞭解如何使用 AST 物件。

filename 引數必須是程式碼的檔名;如果程式碼不是從檔案中讀取,可以傳入一些可辨識的值(經常會使用'<string>' 來替代)。

mode 引數指定了編譯程式碼時必須用的模式。如果source 是一系列的陳述式,可以是'exec';如果是單一運算式,可以是'eval';如果是單個互動式陳述式,可以是'single'(在最後一種情況下,如果運算式執行結果不是None 則會被印出來)。

可選引數flagsdont_inherit 控制啟用哪個編譯器選項以及允許哪個未來功能。如果兩者都不存在(或兩者都為零),則會呼叫與compile() 相同旗標的程式碼來編譯。如果給定flags 引數而未給定dont_inherit*(或為零)則無論如何都會使用由 *flags 引數所指定的編譯器選項和未來陳述式。如果dont_inherit 是一個非零整數,則使用flags 引數 -- 周圍程式碼中的旗標(未來功能和編譯器選項)將被忽略。

編譯器選項和 future 陳述式使用 bits 來表示,可以一起被位元操作 OR 來表示複數個選項。需要被具體定義特徵的位元域可以透過__future__ module 中_Feature 實例中的compiler_flag 屬性來獲得。編譯器旗標可以在ast module 中搜尋有PyCF_ 前綴的名稱。

引數optimize 用來指定編譯器的最佳化級別;預設值-1 選擇與直譯器的-O 選項相同的最佳化級別。其他級別為0(沒有最佳化;__debug__ 為真值)、1(assert 被刪除,__debug__ 為假值)或2(說明字串 (docstring) 也被刪除)。

如果編譯的原始碼無效,此函式會引發SyntaxError,如果原始碼包含 null bytes,則會引發ValueError

如果你想解析 Python 程式碼為 AST 運算式,請參閱ast.parse()

引發一個附帶引數sourcefilename稽核事件compile。此事件也可能由隱式編譯 (implicit compilation) 所引發。

備註

'single''eval' 模式編譯多行程式碼時,輸入必須以至少一個換行符結尾。這使code module 更容易檢測陳述式的完整性。

警告

如果編譯足夠大或者足夠複雜的字串成 AST 物件時,Python 直譯器會因為 Python AST 編譯器的 stack 深度限制而崩潰。

在 3.2 版的變更:允許使用 Windows 和 Mac 的換行符號。此外,在'exec' 模式不需要以換行符號結尾。增加了optimize 參數。

在 3.5 版的變更:在之前的版本,source 中包含 null bytes 會引發TypeError

在 3.8 版被加入:ast.PyCF_ALLOW_TOP_LEVEL_AWAIT 現在可以傳遞旗標以啟用對頂層awaitasyncforasyncwith 的支援。

classcomplex(number=0,/)
classcomplex(string,/)
classcomplex(real=0,imag=0)

Convert a single string or number to a complex number, or create acomplex number from real and imaginary parts.

例如:

If the argument is a string, it must contain either a real part (in thesame format as forfloat()) or an imaginary part (in the sameformat but with a'j' or'J' suffix), or both real and imaginaryparts (the sign of the imaginary part is mandatory in this case).The string can optionally be surrounded by whitespaces and the roundparentheses'(' and')', which are ignored.The string must not contain whitespace between'+','-', the'j' or'J' suffix, and the decimal number.For example,complex('1+2j') is fine, butcomplex('1+2j') raisesValueError.More precisely, the input must conform to thecomplexvalueproduction rule in the following grammar, after parentheses and leading andtrailing whitespace characters are removed:

complexvalue ::=floatvalue |floatvalue ("j" | "J") |floatvaluesignabsfloatvalue ("j" | "J")

如果引數是一個數字,則建構函式會像intfloat 一樣進行數值轉換。對於一個普通的 Python 物件xcomplex(x) 會委派給x.__complex__()。如果__complex__() 未定義,則會回退 (fall back) 到__float__()。如果__float__() 未定義,則會再回退到__index__()

If two arguments are provided or keyword arguments are used, each argumentmay be any numeric type (including complex).If both arguments are real numbers, return a complex number with the realcomponentreal and the imaginary componentimag.If both arguments are complex numbers, return a complex number with the realcomponentreal.real-imag.imag and the imaginary componentreal.imag+imag.real.If one of arguments is a real number, only its real component is used inthe above expressions.

If all arguments are omitted, returns0j.

複數型別在數值型別 --- int、float、complex 中有相關描述。

在 3.6 版的變更:可以使用底線將程式碼文字中的數字進行分組。

在 3.8 版的變更:如果__complex__()__float__() 未定義,則會回退到__index__()

delattr(object,name)

這是setattr() 相關的函式。引數是一個物件和一個字串,該字串必須是物件中某個屬性名稱。如果物件允許,該函式將刪除指定的屬性。例如delattr(x,'foobar') 等價於delx.foobarname 不必是個 Python 識別符 (identifier)(請見setattr())。

classdict(**kwarg)
classdict(mapping,**kwarg)
classdict(iterable,**kwarg)

建立一個新的 dictionary(字典)。dict 物件是一個 dictionary class。參見dictMapping Types --- dict 來瞭解這個 class。

其他容器型別,請參見內建的listsettuple class,以及collections module。

dir()
dir(object)

如果沒有引數,則回傳目前區域作用域 (local scope) 中的名稱列表。如果有引數,它會嘗試回傳該物件的有效屬性列表。

如果物件有一個名為__dir__() 的 method,那麼該 method 將被呼叫,並且必須回傳一個屬性列表。這允許實現自定義__getattr__()__getattribute__() 函式的物件能夠自定義dir() 來報告它們的屬性。

如果物件不提供__dir__(),這個函式會嘗試從物件已定義的__dict__ 屬性和型別物件收集資訊。結果列表並不總是完整的,如果物件有自定義__getattr__(),那結果可能不準確。

預設的dir() 機制對不同型別的物件有不同行為,它會試圖回傳最相關而非最完整的資訊:

  • 如果物件是 module 物件,則列表包含 module 的屬性名稱。

  • 如果物件是型別或 class 物件,則列表包含它們的屬性名稱,並且遞迴查詢其基礎的所有屬性。

  • 否則,包含物件的屬性名稱列表、它的 class 屬性名稱,並且遞迴查詢它的 class 的所有基礎 class 的屬性。

回傳的列表按字母表排序,例如:

>>>importstruct>>>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']>>>classShape:...def__dir__(self):...return['area','perimeter','location']...>>>s=Shape()>>>dir(s)['area', 'location', 'perimeter']

備註

因為dir() 主要是為了便於在互動式提示字元時使用,所以它會試圖回傳人們感興趣的名稱集合,而不是試圖保證結果的嚴格性或一致性,它具體的行為也可能在不同版本之間改變。例如,當引數是一個 class 時,metaclass 的屬性不包含在結果列表中。

divmod(a,b)

它將兩個(非複數)數字作為引數,並在執行整數除法時回傳一對商和餘數。對於混合運算元型別,適用二進位算術運算子的規則。對於整數,運算結果和(a//b,a%b) 一致。對於浮點數,運算結果是(q,a%b)q 通常是math.floor(a/b) 但可能會比 1 小。在任何情況下,q*b+a%ba 基本相等,如果a%b 非零,則它的符號和b 一樣,且0<=abs(a%b)<abs(b)

enumerate(iterable,start=0)

回傳一個列舉 (enumerate) 物件。iterable 必須是一個序列、iterator 或其他支援疊代的物件。enumerate() 回傳之 iterator 的__next__() method 回傳一個 tuple(元組),裡面包含一個計數值(從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')]

等價於:

defenumerate(iterable,start=0):n=startforeleminiterable:yieldn,elemn+=1
eval(source,/,globals=None,locals=None)
參數:
  • source (str |code object) -- A Python expression.

  • globals (dict |None) -- The global namespace (default:None).

  • locals (mapping |None) -- The local namespace (default:None).

回傳:

The result of the evaluated expression.

引發:

Syntax errors are reported as exceptions.

警告

This function executes arbitrary code. Calling it withuser-supplied input may lead to security vulnerabilities.

expression 引數會被視為一條 Python 運算式(技術上而言,是條件列表)來剖析及求值,而globalslocals 對映分別用作全域和區域命名空間。如果globals dictionary 存在但缺少__builtins__ 的鍵值,那expression 被剖析之前,將為該鍵插入對內建builtins module dictionary 的引用。這麼一來,在將__builtins__ dictionary 傳入eval() 之前,你可以透過將它插入globals 來控制你需要哪些內建函式來執行程式碼。如果locals 對映被省略,那它的預設值是globals dictionary。如果兩個對映都被省略,則以在eval() 被呼叫的環境中的globalslocals 執行運算式。請注意,eval() 在封閉 (enclosing) 環境中無法存取巢狀作用域 (non-locals),除非呼叫eval() 的作用域已經有參照它們(例如透過nonlocal 陳述式)。

範例:

>>>x=1>>>eval('x+1')2

這個函式也可以用來執行任意程式碼物件(如被compile() 建立的那些)。這種情況下,傳入的引數是程式碼物件而不是字串。如果編譯該物件時的mode 引數是'exec',那麼eval() 回傳值為None

提示:exec() 函式支援動態執行陳述式。globals()locals() 函式分別回傳目前的全域性和局部性 dictionary,它們對於將引數傳遞給eval()exec() 可能會方便許多。

如果給定來源是一個字串,那麼其前後的空格和定位字元會被移除。

另外可以參閱ast.literal_eval(),該函式可以安全執行僅包含文字的運算式字串。

引發一個附帶程式碼物件為引數的稽核事件exec。也可能會引發程式碼編譯事件。

在 3.13 版的變更:Theglobals andlocals arguments can now be passed as keywords.

在 3.13 版的變更:The semantics of the defaultlocals namespace have been adjusted asdescribed for thelocals() builtin.

exec(source,/,globals=None,locals=None,*,closure=None)

警告

This function executes arbitrary code. Calling it withuser-supplied input may lead to security vulnerabilities.

這個函式支援動態執行 Python 程式碼。source 必須是字串或者程式碼物件。如果是字串,那麼該字串將被剖析為一系列 Python 陳述式並執行(除非發生語法錯誤)。[1] 如果是程式碼物件,它將被直接執行。無論哪種情況,被執行的程式碼都需要和檔案輸入一樣是有效的(可參閱語言參考手冊中關於檔案輸入的章節)。請注意,即使在傳遞給exec() 函式的程式碼的上下文中,nonlocalyieldreturn 陳述式也不能在函式之外使用。該函式回傳值是None

無論哪種情況,如果省略了選擇性的部分,程式碼將在目前作用域內執行。如果只提供了globals 引數,就必須是 dictionary 型別(且不能是 dictionary 的子類別),而且會被用作全域和區域變數。如果同時提供了globalslocals,它們分別被用作全域和區域變數。如果提供了locals,則它可以是任何對映物件。請記住在 module 層級中全域和區域變數是相同的 dictionary。

備註

Whenexec gets two separate objects asglobals andlocals, thecode will be executed as if it were embedded in a class definition. Thismeans functions and classes defined in the executed code will not be ableto access variables assigned at the top level (as the "top level"variables are treated as class variables in a class definition).

如果globals dictionary 不包含__builtins__ 鍵值,則將為該鍵插入對內建builtins module dictionary 的引用。這麼一來,在將__builtins__ dictionary 傳入exec() 之前,你可以透過將它插入globals 來控制你需要哪些內建函式來執行程式碼。

closure 引數會指定一個閉包 (closure) — 它是一個 cellvar(格變數)的 tuple。只有在object 是一個含有自由(閉包)變數 (free (closure) variables) 的程式碼物件時,它才有效。Tuple 的長度必須與程式碼物件的co_freevars 屬性完全匹配。

引發一個附帶程式碼物件為引數的稽核事件exec。也可能會引發程式碼編譯事件。

備註

內建globals()locals() 函式各自回傳目前的全域和區域命名空間,因此可以將它們傳遞給exec() 的第二個和第三個引數以供後續使用。

備註

預設情況下,locals 的行為如下面locals() 函式描述的一樣。如果你想在exec() 函式回傳時知道程式碼對locals 的變動,請明確地傳遞locals dictionary 。

在 3.11 版的變更:增加了closure 參數。

在 3.13 版的變更:Theglobals andlocals arguments can now be passed as keywords.

在 3.13 版的變更:The semantics of the defaultlocals namespace have been adjusted asdescribed for thelocals() builtin.

filter(function,iterable)

iterable 中函式function 為 True 的那些元素,構建一個新的 iterator。iterable 可以是一個序列、一個支援疊代的容器、或一個 iterator。如果functionNone,則會假設它是一個識別性函式,即iterable 中所有假值元素會被移除。

請注意,filter(function,iterable) 相當於一個生成器運算式,當 function 不是None 的時候為(itemforiteminiterableiffunction(item));function 是None 的時候為(itemforiteminiterableifitem)

請參閱itertools.filterfalse(),只有function 為 false 時才選取iterable 中元素的互補函式。

classfloat(number=0.0,/)
classfloat(string,/)

回傳從數字或字串生成的浮點數。

例如:

如果引數是字串,則它必須是包含十進位制數字的字串,字串前面可以有符號,之前也可以有空格。選擇性的符號有'+''-''+' 對建立的值沒有影響。引數也可以是 NaN(非數字)或正負無窮大的字串。確切地說,除去首尾的空格後,輸入必須遵循以下語法中floatvalue 的生成規則:

sign          ::= "+" | "-"infinity      ::= "Infinity" | "inf"nan           ::= "nan"digit         ::= <a Unicode decimal digit, i.e. characters in Unicode general category Nd>digitpart     ::=digit (["_"]digit)*number        ::= [digitpart] "."digitpart |digitpart ["."]exponent      ::= ("e" | "E") [sign]digitpartfloatnumber   ::=number [exponent]absfloatvalue ::=floatnumber |infinity |nanfloatvalue    ::= [sign]absfloatvalue

字母大小寫不影響,例如,"inf"、"Inf"、"INFINITY"、"iNfINity" 都可以表示正無窮大。

否則,如果引數是整數或浮點數,則回傳具有相同值(在 Python 浮點精度範圍內)的浮點數。如果引數在 Python 浮點精度範圍外,則會引發OverflowError

對於一般的 Python 物件xfloat(x) 會委派給x.__float__()。如果未定義__float__() 則會回退到__index__()

如果沒有引數,則回傳0.0

數值型別 --- int、float、complex 描述了浮點數型別。

在 3.6 版的變更:可以使用底線將程式碼文字中的數字進行分組。

在 3.7 版的變更:現在為僅限位置參數。

在 3.8 版的變更:如果__float__() 未定義,則會回退到__index__()

format(value,format_spec='')

value 轉換為format_spec 控制的 "格式化" 表示。format_spec 的解釋取決於value 引數的型別,但是大多數內建型別使用標準格式化語法:格式規格 (Format Specification) 迷你語言

預設的format_spec 是一個空字串,它通常和呼叫str(value) 的效果相同。

呼叫format(value,format_spec) 會轉換成type(value).__format__(value,format_spec),當搜尋 value 的__format__() method 時,會忽略實例中的字典。如果搜尋到object 這個 method 但format_spec 不為空,或是format_spec 或回傳值不是字串,則會引發TypeError

在 3.4 版的變更:format_spec 不是空字串時,object().__format__(format_spec) 會引發TypeError

classfrozenset(iterable=set())

回傳一個新的frozenset 物件,它包含選擇性引數iterable 中的元素。frozenset 是一個內建的 class。有關此 class 的文件,請參閱frozensetSet Types --- set, frozenset

請參閱內建的setlisttupledict class,以及collections module 來了解其它的容器。

getattr(object,name)
getattr(object,name,default)

回傳object 之具名屬性的值。name 必須是字串。如果該字串是物件屬性之一的名稱,則回傳該屬性的值。例如,getattr(x,'foobar') 等同於x.foobar。如果指定的屬性不存在,且提供了default 值,則回傳其值,否則引發AttributeErrorname 不必是個 Python 識別符 (identifier)(請見setattr())。

備註

由於私有名稱改編 (private name mangling) 是發生在編譯期,因此你必須手動改編私有屬性(有兩個前導底線的屬性)的名稱,才能使用getattr() 來取得它。

globals()

回傳代表目前 module 命名空間的 dictionary。對於在函式中的程式碼來說,這在定義函式時設定且不論該函式是在何處呼叫都會保持相同。

hasattr(object,name)

該引數是一個物件和一個字串。如果字串是物件屬性之一的名稱,則回傳True,否則回傳False。(此功能是透過呼叫getattr(object,name) 並檢查是否引發AttributeError 來實作的。)

hash(object)

回傳該物件的雜湊值(如果它有的話)。雜湊值是整數。它們在 dictionary 查詢元素時用來快速比較 dictionary 的鍵。相同大小的數字數值有相同的雜湊值(即使它們型別不同,如 1 和 1.0)。

備註

請注意,如果物件帶有自訂的__hash__() 方法,hash() 將根據運行機器的位元長度來截斷回傳值。

help()
help(request)

啟動內建的幫助系統(此函式主要以互動式使用)。如果沒有引數,直譯器控制台裡會啟動互動式幫助系統。如果引數是一個字串,則會在 module、函式、class、method、關鍵字或說明文件主題中搜尋該字串,並在控制台上列印幫助資訊。如果引數是其他任意物件,則會生成該物件的幫助頁。

請注意,呼叫help() 時,如果斜線 (/) 出現在函式的參數列表中,這表示斜線前面的參數是僅限位置 (positional-only) 參數。有關更多資訊,請參閱常見問答集中的僅限位置參數條目

此函式會被site module 加入到內建命名空間。

在 3.4 版的變更:對於pydocinspect 的變更,使得可呼叫物件回報的的簽名 (signature) 更加全面和一致。

hex(x)

將整數轉換為以 "0x" 為前綴的小寫十六進位制字串。如果x 不是 Pythonint 物件,則必須定義一個__index__() method 並且回傳一個整數。舉例來說:

>>>hex(255)'0xff'>>>hex(-42)'-0x2a'

如果要將整數轉換為大寫或小寫的十六進位制字串,並可選擇有無 "0x" 前綴,則可以使用如下方法:

>>>'%#x'%255,'%x'%255,'%X'%255('0xff', 'ff', 'FF')>>>format(255,'#x'),format(255,'x'),format(255,'X')('0xff', 'ff', 'FF')>>>f'{255:#x}',f'{255:x}',f'{255:X}'('0xff', 'ff', 'FF')

可參考format() 取得更多資訊。

另請參閱int() 將十六進位制字串轉換為以 16 為基數的整數。

備註

如果要取得浮點數的十六進位制字串形式,請使用float.hex() method。

id(object)

回傳物件的 "識別性" 。該值是一個整數,在此物件的生命週期中保證是唯一且恆定的。兩個生命期不重疊的物件可能具有相同的id() 值。

這是該物件在記憶體中的位址。

引發一個附帶引數id稽核事件builtins.id

input()
input(prompt)

如果有提供prompt 引數,則將其寫入標準輸出,末尾不帶換行符。接下來,該函式從輸入中讀取一行,將其轉換為字串(去除末尾的換行符)並回傳。當讀取到 EOF 時,則引發EOFError。例如:

>>>s=input('--> ')--> Monty Python's Flying Circus>>>s"Monty Python's Flying Circus"

如果載入了readline module,input() 將使用它來提供複雜的行編輯和歷史記錄功能。

引發一個附帶讀取輸入前的引數prompt稽核事件builtins.input

引發一個附帶成功讀取結果的稽核事件builtins.input/result

classint(number=0,/)
classint(string,/,base=10)

Return an integer object constructed from a number or a string, or return0 if no arguments are given.

例如:

如果引數定義了__int__(),則int(x) 回傳x.__int__()。如果引數定義了__index__() 則回傳x.__index__()。如果引數定義了__trunc__() 則回傳x.__trunc__()。對於浮點數,則會向零的方向無條件捨去。

如果引數不是數字或如果有給定base,則它必須是個字串、bytesbytearray 實例,表示基數 (radix)base 中的整數。可選地,字串之前可以有+-(中間沒有空格)、可有個前導的零、也可被空格包圍、或在數字間有單一底線。

一個 n 進制的整數字串,包含各個代表 0 到 n-1 的數字,0–9 可以用任何 Unicode 十進制數字表示,10–35 可以用az(或AZ)表示。預設的base 是 10。允許的進位制有 0、2–36。2、8、16 進位制的字串可以在程式碼中用0b/0B0o/0O0x/0X 前綴來表示,如同程式碼中的整數文字。進位制為 0 的字串將以和程式碼整數字面值 (integer literal in code) 類似的方式來直譯,最後由前綴決定的結果會是 2、8、10、16 進制中的一個,所以int('010',0) 是非法的,但int('010')int('010',8) 是有效的。

整數型別定義請參閱數值型別 --- int、float、complex

在 3.4 版的變更:如果base 不是int 的實例,但base 物件有base.__index__ method,則會呼叫該 method 來取得此進位制所需的整數。以前的版本使用base.__int__ 而不是base.__index__

在 3.6 版的變更:可以使用底線將程式碼文字中的數字進行分組。

在 3.7 版的變更:第一個參數為僅限位置參數。

在 3.8 版的變更:如果未定義__int__() 則會回退到__index__()

在 3.11 版的變更:__trunc__() 的委派已棄用。

在 3.11 版的變更:int 的字串輸入和字串表示法可以被限制,以避免阻斷服務攻擊 (denial of service attack)。在字串x 轉換為int 時已超出限制,或是在int 轉換為字串時將會超出限制時,會引發ValueError。請參閱整數字串轉換的長度限制說明文件。

isinstance(object,classinfo)

如果object 引數是classinfo 引數的實例,或者是(直接、間接或virtual)subclass 的實例,則回傳True。如果object 不是給定型別的物件,函式始終回傳False。如果classinfo 是包含物件型別的 tuple(或多個遞迴 tuple)或一個包含多種型別的聯合型別 (Union Type),若object 是其中的任何一個物件的實例則回傳True。如果classinfo 既不是型別,也不是型別 tuple 或型別的遞迴 tuple,那麼會引發TypeError 異常。若是先前檢查已經成功,TypeError 可能不會再因為不合格的型別而被引發。

在 3.10 版的變更:classinfo 可以是一個聯合型別 (Union Type)

issubclass(class,classinfo)

如果classclassinfo 的 subclass(直接、間接或virtual),則回傳Trueclassinfo 可以是 class 物件的 tuple(或遞迴地其他類似 tuple)或是一個聯合型別 (Union Type),此時若classclassinfo 中任一元素的 subclass 時則回傳True。其他情況,會引發TypeError

在 3.10 版的變更:classinfo 可以是一個聯合型別 (Union Type)

iter(object)
iter(object,sentinel)

回傳一個iterator 物件。根據是否存在第二個引數,第一個引數的意義是非常不同的。如果沒有第二個引數,object 必須是支援iterable 協定(有__iter__() method)的集合物件,或必須支援序列協定(有__getitem__() 方法,且數字引數從0 開始)。如果它不支援這些協定,會引發TypeError。如果有第二個引數sentinel,那麼object 必須是可呼叫的物件,這種情況下生成的 iterator,每次疊代呼叫__next__() 時會不帶引數地呼叫object;如果回傳的結果是sentinel 則引發StopIteration,否則回傳呼叫結果。

另請參閱疊代器型別

iter() 的第二種形式有一個好用的應用,是能夠建立一個區塊閱讀器 (block-reader)。例如,從二進位資料庫檔案中讀取固定寬度的區塊,直到檔案的結尾:

fromfunctoolsimportpartialwithopen('mydata.db','rb')asf:forblockiniter(partial(f.read,64),b''):process_block(block)
len(s)

回傳物件的長度(元素個數)。引數可以是序列(如 string、bytes、tuple、list 或 range)或集合(如 dictionary、set 或 frozen set)。

如果物件長度大於sys.maxsize,像是range(2**100),則len 會引發OverflowError

classlist
classlist(iterable)

除了是函式,list 也是可變序列型別,詳情請參閱List(串列)Sequence Types --- list, tuple, range

locals()

Return a mapping object representing the current local symbol table, withvariable names as the keys, and their currently bound references as thevalues.

At module scope, as well as when usingexec() oreval() witha single namespace, this function returns the same namespace asglobals().

At class scope, it returns the namespace that will be passed to themetaclass constructor.

When usingexec() oreval() with separate local and globalarguments, it returns the local namespace passed in to the function call.

In all of the above cases, each call tolocals() in a given frame ofexecution will return thesame mapping object. Changes made throughthe mapping object returned fromlocals() will be visible as assigned,reassigned, or deleted local variables, and assigning, reassigning, ordeleting local variables will immediately affect the contents of thereturned mapping object.

In anoptimized scope (including functions, generators, andcoroutines), each call tolocals() instead returns a fresh dictionarycontaining the current bindings of the function's local variables and anynonlocal cell references. In this case, name binding changes made via thereturned dict arenot written back to the corresponding local variablesor nonlocal cell references, and assigning, reassigning, or deleting localvariables and nonlocal cell references doesnot affect the contentsof previously returned dictionaries.

Callinglocals() as part of a comprehension in a function, generator, orcoroutine is equivalent to calling it in the containing scope, except thatthe comprehension's initialised iteration variables will be included. Inother scopes, it behaves as if the comprehension were running as a nestedfunction.

Callinglocals() as part of a generator expression is equivalent tocalling it in a nested generator function.

在 3.12 版的變更:The behaviour oflocals() in a comprehension has been updated asdescribed inPEP 709.

在 3.13 版的變更:As part ofPEP 667, the semantics of mutating the mapping objectsreturned from this function are now defined. The behavior inoptimized scopes is now as described above.Aside from being defined, the behaviour in other scopes remainsunchanged from previous versions.

map(function,iterable,*iterables)

產生一個將function 應用於iterable 中所有元素,並收集回傳結果的 iterator。如果傳遞了額外的iterables 引數,則function 必須接受相同個數的引數,並使用所有從 iterables 中同時取得的元素。當有多個 iterables 時,最短的 iteratable 耗盡時 iterator 也會結束。如果函式的輸入已經被編排為引數的 tuple,請參閱itertools.starmap()

max(iterable,*,key=None)
max(iterable,*,default,key=None)
max(arg1,arg2,*args,key=None)

回傳 iterable 中最大的元素,或者回傳兩個以上的引數中最大的。

如果只提供了一個位置引數,它必須是個iterable,iterable 中最大的元素會被回傳。如果提供了兩個或以上的位置引數,則回傳最大的位置引數。

這個函式有兩個選擇性的僅限關鍵字引數。key 引數能指定單一引數所使用的排序函式,如同list.sort() 的使用方式。default 引數是當 iterable 為空時回傳的物件。如果 iterable 為空,並且沒有提供default,則會引發ValueError

如果有多個最大元素,則此函式將回傳第一個找到的。這和其他穩定排序工具如sorted(iterable,key=keyfunc,reverse=True)[0]heapq.nlargest(1,iterable,key=keyfunc) 一致。

在 3.4 版的變更:新增default 僅限關鍵字參數。

在 3.8 版的變更:key 可以為None

classmemoryview(object)

回傳由給定的引數所建立之「memory view(記憶體檢視)」物件。有關詳細資訊,請參閱Memory Views

min(iterable,*,key=None)
min(iterable,*,default,key=None)
min(arg1,arg2,*args,key=None)

回傳 iterable 中最小的元素,或者回傳兩個以上的引數中最小的。

如果只提供了一個位置引數,它必須是iterable,iterable 中最小的元素會被回傳。如果提供了兩個以上的位置引數,則回傳最小的位置引數。

這個函式有兩個選擇性的僅限關鍵字引數。key 引數能指定單一引數所使用的排序函式,如同list.sort() 的使用方式。default 引數是當 iterable 為空時回傳的物件。如果 iterable 為空,並且沒有提供default,則會引發ValueError

如果有多個最小元素,則此函式將回傳第一個找到的。這和其他穩定排序工具如sorted(iterable,key=keyfunc)[0]heapq.nsmallest(1,iterable,key=keyfunc) 一致。

在 3.4 版的變更:新增default 僅限關鍵字參數。

在 3.8 版的變更:key 可以為None

next(iterator)
next(iterator,default)

透過呼叫iterator__next__() method 取得下一個元素。如果 iterator 耗盡,則回傳給定的預設值default,如果沒有預設值則引發StopIteration

classobject

這是所有其他 class 的基礎,它具有所有 Python class 實例的通用 method。當建構函式被呼叫時,它會回傳一個新的沒有特徵 (featureless) 的物件。這個建構函式不接受任何引數。

備註

由於object 實例沒有__dict__ 屬性,因此無法將任意屬性賦給object 的實例。

oct(x)

將一個整數轉變為一個前綴為 "0o" 的八進位制字串。回傳結果是一個有效的 Python 運算式。如果x 不是 Python 的int 物件,那它需要定義__index__() method 回傳一個整數。舉例來說:

>>>oct(8)'0o10'>>>oct(-56)'-0o70'

如果要將整數轉換為八進位制字串,不論是否具備 "0o" 前綴,都可以使用下面的方法。

>>>'%#o'%10,'%o'%10('0o12', '12')>>>format(10,'#o'),format(10,'o')('0o12', '12')>>>f'{10:#o}',f'{10:o}'('0o12', '12')

可參考format() 取得更多資訊。

open(file,mode='r',buffering=-1,encoding=None,errors=None,newline=None,closefd=True,opener=None)

開啟file 並回傳對應的檔案物件。如果該檔案不能開啟,則引發OSError。關於使用此函式的更多方法,請參閱讀寫檔案

file 是一個類路徑物件,是將被開啟之檔案的路徑(絕對路徑或目前工作目錄的相對路徑),或是要被包裝 (wrap) 檔案的整數檔案描述器 (file descriptor)。(如果有給定檔案描述器,它會隨著回傳的 I/O 物件關閉而關閉,除非closefd 被設為False。)

mode 是一個選擇性字串,用於指定開啟檔案的模式。預設值是'r',這意味著它以文字模式開啟並讀取。其他常見模式有:寫入'w'(會捨去已經存在的檔案)、唯一性建立'x'、追加寫入'a'(在一些 Unix 系統上,無論目前的檔案指標在什麼位置,所有 寫入都會追加到檔案末尾)。在文字模式,如果沒有指定encoding,則根據電腦平臺來決定使用的編碼:呼叫locale.getencoding() 來取得目前的本地編碼。(要讀取和寫入原始 bytes,請使用二進位制模式且不要指定encoding。)可用的模式有:

字元

意義

'r'

讀取(預設)

'w'

寫入,會先清除檔案內容

'x'

唯一性建立,如果文件已存在則會失敗

'a'

寫入,如果檔案存在則在其末端附加內容

'b'

二進制模式

't'

文字模式(預設)

'+'

更新(讀取並寫入)

預設的模式是'r'(開啟並讀取文字,同'rt')。'w+''w+b' 模式會開啟並清除檔案。'r+''r+b' 模式會開啟且保留檔案內容。

總覽中所述,Python 能區分二進制和文字的 I/O。在二進制模式下開啟的檔案(mode 引數中含有'b')會將其內容以bytes 物件回傳,而不進行任何解碼。在文字模式(預設情況,或當mode 引數中含有't'),檔案的內容會以str 回傳,其位元組已經先被解碼,使用的是取決於平台的編碼系統或是給定的encoding

備註

Python 不會使用底層作業系統對於文字檔案的操作概念;所有的處理都是由 Python 獨自完成的,因此能獨立於不同平台。

buffering 是一個選擇性的整數,用於設定緩衝策略。傳入 0 表示關閉緩衝(僅在二進制模式下被允許),1 表示行緩衝(line buffering,僅在文字模式下可用),而 >1 的整數是指示一個大小固定的區塊緩衝區 (chunk buffer),其位元組的數量。請注意,此類指定緩衝區大小的方式適用於二進制緩衝 I/O,但是TextIOWrapper(以mode='r+' 開啟的檔案)會有另一種緩衝方式。若要在TextIOWrapper 中停用緩衝,可考慮使用io.TextIOWrapper.reconfigure()write_through 旗標。若未給定buffering 引數,則預設的緩衝策略會運作如下:

  • 二進制檔案會以固定大小的區塊進行緩衝;緩衝區的大小是使用啟發式嘗試 (heuristic trying) 來決定底層設備的「區塊大小」,並會回退到io.DEFAULT_BUFFER_SIZE。在許多系統上,緩衝區的長度通常為 4096 或 8192 個位元組。

  • 「互動式」文字檔(isatty() 回傳True 的檔案)會使用列緩衝。其他文字檔則使用上述的二進制檔案緩衝策略。

encoding 是用於解碼或編碼檔案的編碼系統之名稱。它只應該在文字模式下使用。預設的編碼系統會取決於平台(根據locale.getencoding() 回傳的內容),但 Python 支援的任何text encoding(文字編碼)都是可以使用的。關於支援的編碼系統清單,請參閱codecs module。

errors 是一個選擇性的字串,用於指定要如何處理編碼和解碼的錯誤——它不能在二進制模式下使用。有許多不同的標準錯誤處理程式(error handler,在Error Handlers有列出清單),不過任何已註冊到codecs.register_error() 的錯誤處理程式名稱也都是有效的。標準的名稱包括:

  • 'strict' 如果發生編碼錯誤,則引發ValueError 例外。預設值None 也有相同的效果。

  • 'ignore' 忽略錯誤。請注意,忽略編碼錯誤可能導致資料遺失。

  • 'replace' 會在格式不正確的資料位置插入一個替換標誌(像是'?')。

  • 'surrogateescape' 會將任何不正確的位元組表示為低位代理碼元 (low surrogate code unit),範圍從 U+DC80 到 U+DCFF。在寫入資料時,這些代理碼元將會被還原回surrogateescape 錯誤處理程式當時所處理的那些相同位元組。這對於處理未知編碼方式的檔案會很好用。

  • 'xmlcharrefreplace' 僅在寫入檔案時可支援。編碼系統不支援的字元會被替換為適當的 XML 字元參考 (character reference)&#nnn;

  • 'backslashreplace' 會用 Python 的反斜線跳脫序列 (backslashed escape sequence) 替換格式不正確的資料。

  • 'namereplace'(也僅在寫入時支援)會將不支援的字元替換為\N{...} 跳脫序列。

newline 會決定如何剖析資料串流 (stream) 中的換行字元。它可以是None'''\n''\r''\r\n'。它的運作規則如下:

  • 從資料串流讀取輸入時,如果newlineNone,則會啟用通用換行模式。輸入資料中的行結尾可以是'\n''\r''\r\n',這些符號會被轉換為'\n' 之後再回傳給呼叫方。如果是'',也會啟用通用換行模式,但在回傳給呼叫方時,行尾符號不會被轉換。如果它是任何其他有效的值,則輸入資料的行只會由給定的字串做結尾,且在回傳給呼叫方時,行尾符號不會被轉換。

  • 將輸出寫入資料串流時,如果newlineNone,則被寫入的任何'\n' 字元都會轉換為系統預設的行分隔符號os.linesep。如果newline'''\n',則不做任何轉換。如果newline 是任何其他有效的值,則寫入的任何'\n' 字元都將轉換為給定的字串。

如果closefdFalse,且給定的file 引數是一個檔案描述器而不是檔名,則當檔案關閉時,底層的檔案描述器會保持開啟狀態。如果有給定一個檔名,則closefd 必須是True(預設值);否則將引發錯誤。

透過以opener 傳遞一個可呼叫物件,就可以自訂開啟函式。然後透過以引數 (file,flags) 呼叫opener,就能取得檔案物件的底層檔案描述器。opener 必須回傳一個開啟的檔案描述器(將os.open 作為opener 傳入,在功能上的結果會相當於傳入None)。

新建立的檔案是不可繼承的

下面的範例使用os.open() 函式回傳值當作dir_fd 的參數,從給定的目錄中用相對路徑開啟檔案:

>>>importos>>>dir_fd=os.open('somedir',os.O_RDONLY)>>>defopener(path,flags):...returnos.open(path,flags,dir_fd=dir_fd)...>>>withopen('spamspam.txt','w',opener=opener)asf:...print('This will be written to somedir/spamspam.txt',file=f)...>>>os.close(dir_fd)# don't leak a file descriptor

open() 函式回傳的file object 型別取決於模式。當open() 是在文字模式中開啟檔案時('w''r''wt''rt' 等),它會回傳io.TextIOBase 的一個 subclass(具體來說,就是io.TextIOWrapper)。使用有緩衝的二進制模式開啟檔案時,回傳的 class 則會是io.BufferedIOBase 的 subclass。確切的 class 各不相同:在讀取的二進制模式,它會回傳io.BufferedReader;在寫入和附加的二進制模式,它會回傳io.BufferedWriter,而在讀/寫模式,它會回傳io.BufferedRandom。當緩衝被停用時,會回傳原始資料串流io.FileIO,它是io.RawIOBase 的一個 subclass。

另請參閱檔案操作模組,例如fileinputio(定義了open() 的 module )、osos.pathtempfile 以及shutil

引發一個附帶引數pathmodeflags稽核事件open

modeflags 引數可能會被原始的呼叫所修改或推論 (infer)。

在 3.3 版的變更:

  • 增加了opener 參數。

  • 增加了'x' 模式。

  • 過去引發的IOError,現在是OSError 的別名。

  • 如果檔案已存在但使用了唯一性建立模式 ('x'),現在會引發FileExistsError

在 3.4 版的變更:

  • 檔案在此版本開始是不可繼承的。

在 3.5 版的變更:

  • 如果系統呼叫被中斷,但訊號處理程式沒有引發例外,此函式現在會重試系統呼叫,而不是引發InterruptedError 例外(原因詳見PEP 475)。

  • 增加了'namereplace' 錯誤處理程式。

在 3.6 版的變更:

  • 增加對於實作os.PathLike 物件的支援。

  • 在 Windows 上,開啟一個控制臺緩衝區可能會回傳io.RawIOBase 的 subclass,而不是io.FileIO

在 3.11 版的變更:'U' 模式被移除。

ord(c)

對於代表單個 Unicode 字元的字串,回傳代表它 Unicode 編碼位置的整數。例如ord('a') 回傳整數97ord('€')(歐元符號)回傳8364。這是chr() 的逆函式。

pow(base,exp,mod=None)

回傳baseexp 次方;如果mod 存在,則回傳baseexp 次方對mod 取餘數(比直接呼叫pow(base,exp)%mod 計算更高效)。兩個引數形式的pow(exp,exp) 等價於次方運算子:base**exp

引數必須是數值型別。對於混合型別的運算元,會套用二元算術運算子的強制轉型 (coercion) 規則。對於int 運算元,運算結果會(在強制轉型後)與運算元的型別相同,除非第二個引數是負數;在這種情況下,所有的引數都會被轉換為浮點數並得到浮點數的結果。例如,pow(10,2) 會回傳100,但pow(10,-2) 會回傳0.01。如果底數 (base) 是型別為intfloat 的負數且指數 (exponent) 不是整數,則會得到一個複數的結果,例如pow(-9,0.5) 會回傳一個接近3j 的值。如果底數 (base) 是型別為intfloat 的負數且指數為整數,則會得到一個浮點數的結果,例如pow(-9,2.0) 會回傳81.0

對於int 運算元baseexp,如果有給定mod,則mod 也必須是整數型別,且mod 必須不為零。如果有給定modexp 為負,則base 必須與mod 互質。在這種情況下,會回傳pow(inv_base,-exp,mod),其中inv_basebasemod 的模倒數 (inverse modulo)。

以下是一個計算3897 取模倒數的範例:

>>>pow(38,-1,mod=97)23>>>23*38%97==1True

在 3.8 版的變更:對於int 運算元,現在pow 的三引數形式允許第二個引數為負數,也容許模倒數的計算。

在 3.8 版的變更:允許關鍵字引數。在此之前只支援位置引數。

print(*objects,sep='',end='\n',file=None,flush=False)

objects 列印到文字資料串流file,用sep 分隔並以end 結尾。如果有給定sependfileflush,那麼它們必須是關鍵字引數的形式。

所有的非關鍵字引數都會像是str() 操作一樣地被轉換為字串,並寫入資料串流,彼此以sep 分隔,並以end 結尾。sepend 都必須是字串;它們也可以是None,這表示使用預設值。如果沒有給定objectsprint() 就只會寫入end

file 引數必須是一個有write(string) method 的物件;如果沒有給定或被設為None,則將使用sys.stdout。因為要列印的引數會被轉換為文字字串,所以print() 不能用於二進位模式的檔案物件。對於此類物件,請改用file.write(...)

輸出緩衝通常會由file 決定。但是如果flush 為 true,則資料串流會被強制清除。

在 3.3 版的變更:增加了flush 關鍵字引數。

classproperty(fget=None,fset=None,fdel=None,doc=None)

回傳 property 屬性。

fget 是一個用於取得屬性值的函式,fset 是一個用於設定屬性值的函式,fdel 是一個用於刪除屬性值的函式,而doc 會為該屬性建立一個說明字串。

一個典型的用途是定義一個受管理的屬性x

classC:def__init__(self):self._x=Nonedefgetx(self):returnself._xdefsetx(self,value):self._x=valuedefdelx(self):delself._xx=property(getx,setx,delx,"I'm the 'x' property.")

如果cC 的一個實例,則c.x 將會叫用取得器 (getter),c.x=value 會呼叫設定器 (setter),而delc.x 會叫用刪除器 (deleter)。

如果有給定doc,它將會是 property 屬性的說明字串。否則,property 會複製fget 的說明字串(如果它存在的話)。這樣一來,就能夠輕鬆地使用property() 作為裝飾器來建立唯讀屬性:

classParrot:def__init__(self):self._voltage=100000@propertydefvoltage(self):"""Get the current voltage."""returnself._voltage

The@property decorator turns thevoltage() method into a "getter"for a read-only attribute with the same name, and it sets the docstring forvoltage to "Get the current voltage."

@getter
@setter
@deleter

A property object hasgetter,setter,anddeleter methods usable as decorators that create acopy of the property with the corresponding accessor function set to thedecorated function. This is best explained with an example:

classC:def__init__(self):self._x=None@propertydefx(self):"""I'm the 'x' property."""returnself._x@x.setterdefx(self,value):self._x=value@x.deleterdefx(self):delself._x

This code is exactly equivalent to the first example. Be sure to give theadditional functions the same name as the original property (x in thiscase.)

The returned property object also has the attributesfget,fset, andfdel corresponding to the constructor arguments.

在 3.5 版的變更:The docstrings of property objects are now writeable.

__name__

Attribute holding the name of the property. The name of the propertycan be changed at runtime.

在 3.13 版被加入.

classrange(stop)
classrange(start,stop,step=1)

Rather than being a function,range is actually an immutablesequence type, as documented inRanges andSequence Types --- list, tuple, range.

repr(object)

Return a string containing a printable representation of an object. For manytypes, this function makes an attempt to return a string that would yield anobject with the same value when passed toeval(); otherwise, therepresentation is a string enclosed in angle brackets that contains the nameof the type of the object together with additional information oftenincluding the name and address of the object. A class can control what thisfunction returns for its instancesby defining a__repr__() method.Ifsys.displayhook() is not accessible, this function will raiseRuntimeError.

This class has a custom representation that can be evaluated:

classPerson:def__init__(self,name,age):self.name=nameself.age=agedef__repr__(self):returnf"Person('{self.name}',{self.age})"
reversed(seq)

Return a reverseiterator.seq must be an object which hasa__reversed__() method or supports the sequence protocol (the__len__() method and the__getitem__() methodwith integer arguments starting at0).

round(number,ndigits=None)

Returnnumber rounded tondigits precision after the decimalpoint. Ifndigits is omitted or isNone, it returns thenearest integer to its input.

For the built-in types supportinground(), values are rounded to theclosest multiple of 10 to the power minusndigits; if two multiples areequally close, rounding is done toward the even choice (so, for example,bothround(0.5) andround(-0.5) are0, andround(1.5) is2). Any integer value is valid forndigits (positive, zero, ornegative). The return value is an integer ifndigits is omitted orNone.Otherwise, the return value has the same type asnumber.

For a general Python objectnumber,round delegates tonumber.__round__.

備註

The behavior ofround() for floats can be surprising: for example,round(2.675,2) gives2.67 instead of the expected2.68.This is not a bug: it's a result of the fact that most decimal fractionscan't be represented exactly as a float. See浮點數運算:問題與限制 formore information.

classset
classset(iterable)

Return a newset object, optionally with elements taken fromiterable.set is a built-in class. Seeset andSet Types --- set, frozenset for documentation about this class.

For other containers see the built-infrozenset,list,tuple, anddict classes, as well as thecollectionsmodule.

setattr(object,name,value)

This is the counterpart ofgetattr(). The arguments are an object, astring, and an arbitrary value. The string may name an existing attribute or anew attribute. The function assigns the value to the attribute, provided theobject allows it. For example,setattr(x,'foobar',123) is equivalent tox.foobar=123.

name need not be a Python identifier as defined inIdentifiers and keywordsunless the object chooses to enforce that, for example in a custom__getattribute__() or via__slots__.An attribute whose name is not an identifier will not be accessible usingthe dot notation, but is accessible throughgetattr() etc..

備註

Sinceprivate name mangling happens atcompilation time, one must manually mangle a private attribute's(attributes with two leading underscores) name in order to set it withsetattr().

classslice(stop)
classslice(start,stop,step=None)

Return aslice object representing the set of indices specified byrange(start,stop,step). Thestart andstep arguments default toNone.

start
stop
step

Slice objects have read-only data attributesstart,stop, andstep which merely return the argumentvalues (or their default). They have no other explicit functionality;however, they are used by NumPy and other third-party packages.

Slice objects are also generated when extended indexing syntax is used. Forexample:a[start:stop:step] ora[start:stop,i]. Seeitertools.islice() for an alternate version that returns aniterator.

在 3.12 版的變更:Slice objects are nowhashable (providedstart,stop, andstep are hashable).

sorted(iterable,/,*,key=None,reverse=False)

Return a new sorted list from the items initerable.

有兩個選擇性引數,只能使用關鍵字引數來指定。

key specifies a function of one argument that is used to extract a comparisonkey from each element initerable (for example,key=str.lower). Thedefault value isNone (compare the elements directly).

reverse is a boolean value. If set toTrue, then the list elements aresorted as if each comparison were reversed.

Usefunctools.cmp_to_key() to convert an old-stylecmp function to akey function.

The built-insorted() function is guaranteed to be stable. A sort isstable if it guarantees not to change the relative order of elements thatcompare equal --- this is helpful for sorting in multiple passes (forexample, sort by department, then by salary grade).

The sort algorithm uses only< comparisons between items. Whiledefining an__lt__() method will suffice for sorting,PEP 8 recommends that all sixrich comparisons be implemented. This will help avoid bugs when usingthe same data with other ordering tools such asmax() that relyon a different underlying method. Implementing all six comparisonsalso helps avoid confusion for mixed type comparisons which can callreflected the__gt__() method.

For sorting examples and a brief sorting tutorial, see排序技法.

@staticmethod

Transform a method into a static method.

A static method does not receive an implicit first argument. To declare a staticmethod, use this idiom:

classC:@staticmethoddeff(arg1,arg2,argN):...

@staticmethod 語法是一個函式decorator - 參見函式定義 中的詳細介紹。

A static method can be called either on the class (such asC.f()) or onan instance (such asC().f()).Moreover, the static methoddescriptor is also callable, so it canbe used in the class definition (such asf()).

Static methods in Python are similar to those found in Java or C++. Also, seeclassmethod() for a variant that is useful for creating alternate classconstructors.

Like all decorators, it is also possible to callstaticmethod asa regular function and do something with its result. This is neededin some cases where you need a reference to a function from a classbody and you want to avoid the automatic transformation to instancemethod. For these cases, use this idiom:

defregular_function():...classC:method=staticmethod(regular_function)

關於 static method 的更多資訊,請參考標準型別階層

在 3.10 版的變更:Static method 現在繼承了 method 屬性(__module____name____qualname____doc____annotations__),並擁有一個新的__wrapped__ 屬性,且為如一般函式的可呼叫物件。

classstr(object='')
classstr(object=b'',encoding='utf-8',errors='strict')

Return astr version ofobject. Seestr() for details.

str is the built-in stringclass. For general informationabout strings, seeText Sequence Type --- str.

sum(iterable,/,start=0)

Sumsstart and the items of aniterable from left to right and returns thetotal. Theiterable's items are normally numbers, and the start value is notallowed to be a string.

For some use cases, there are good alternatives tosum().The preferred, fast way to concatenate a sequence of strings is by calling''.join(sequence). To add floating-point values with extended precision,seemath.fsum(). To concatenate a series of iterables, consider usingitertools.chain().

在 3.8 版的變更:start 參數可被指定為關鍵字引數。

在 3.12 版的變更:Summation of floats switched to an algorithmthat gives higher accuracy and better commutativity on most builds.

classsuper
classsuper(type,object_or_type=None)

Return a proxy object that delegates method calls to a parent or siblingclass oftype. This is useful for accessing inherited methods that havebeen overridden in a class.

Theobject_or_type determines themethod resolution orderto be searched. The search starts from the class right after thetype.

For example, if__mro__ ofobject_or_type isD->B->C->A->object and the value oftype isB,thensuper() searchesC->A->object.

The__mro__ attribute of the class corresponding toobject_or_type lists the method resolution search order used by bothgetattr() andsuper(). The attribute is dynamic and can changewhenever the inheritance hierarchy is updated.

If the second argument is omitted, the super object returned is unbound. Ifthe second argument is an object,isinstance(obj,type) must be true. Ifthe second argument is a type,issubclass(type2,type) must be true (thisis useful for classmethods).

When called directly within an ordinary method of a class, both arguments maybe omitted ("zero-argumentsuper()"). In this case,type will be theenclosing class, andobj will be the first argument of the immediatelyenclosing function (typicallyself). (This means that zero-argumentsuper() will not work as expected within nested functions, includinggenerator expressions, which implicitly create nested functions.)

There are two typical use cases forsuper. In a class hierarchy withsingle inheritance,super can be used to refer to parent classes withoutnaming them explicitly, thus making the code more maintainable. This useclosely parallels the use ofsuper in other programming languages.

The second use case is to support cooperative multiple inheritance in adynamic execution environment. This use case is unique to Python and isnot found in statically compiled languages or languages that only supportsingle inheritance. This makes it possible to implement "diamond diagrams"where multiple base classes implement the same method. Good design dictatesthat such implementations have the same calling signature in every case (because theorder of calls is determined at runtime, because that order adaptsto changes in the class hierarchy, and because that order can includesibling classes that are unknown prior to runtime).

For both use cases, a typical superclass call looks like this:

classC(B):defmethod(self,arg):super().method(arg)# This does the same thing as:# super(C, self).method(arg)

In addition to method lookups,super() also works for attributelookups. One possible use case for this is callingdescriptorsin a parent or sibling class.

Note thatsuper() is implemented as part of the binding process forexplicit dotted attribute lookups such assuper().__getitem__(name).It does so by implementing its own__getattribute__() methodfor searchingclasses in a predictable order that supports cooperative multiple inheritance.Accordingly,super() is undefined for implicit lookups using statements oroperators such assuper()[name].

Also note that, aside from the zero argument form,super() is notlimited to use inside methods. The two argument form specifies thearguments exactly and makes the appropriate references. The zeroargument form only works inside a class definition, as the compiler fillsin the necessary details to correctly retrieve the class being defined,as well as accessing the current instance for ordinary methods.

For practical suggestions on how to design cooperative classes usingsuper(), seeguide to using super().

classtuple
classtuple(iterable)

Rather than being a function,tuple is actually an immutablesequence type, as documented inTuples andSequence Types --- list, tuple, range.

classtype(object)
classtype(name,bases,dict,**kwds)

With one argument, return the type of anobject. The return value is atype object and generally the same object as returned byobject.__class__.

Theisinstance() built-in function is recommended for testing the typeof an object, because it takes subclasses into account.

With three arguments, return a new type object. This is essentially adynamic form of theclass statement. Thename string isthe class name and becomes the__name__ attribute.Thebases tuple contains the base classes and becomes the__bases__ attribute; if empty,object, theultimate base of all classes, is added. Thedict dictionary containsattribute and method definitions for the class body; it may be copiedor wrapped before becoming the__dict__ attribute.The following two statements create identicaltype objects:

>>>classX:...a=1...>>>X=type('X',(),dict(a=1))

See also:

Keyword arguments provided to the three argument form are passed to theappropriate metaclass machinery (usually__init_subclass__())in the same way that keywords in a classdefinition (besidesmetaclass) would.

另請參閱Customizing class creation

在 3.6 版的變更:Subclasses oftype which don't overridetype.__new__ may nolonger use the one-argument form to get the type of an object.

vars()
vars(object)

Return the__dict__ attribute for a module, class, instance,or any other object with a__dict__ attribute.

Objects such as modules and instances have an updateable__dict__attribute; however, other objects may have write restrictions on their__dict__ attributes (for example, classes use atypes.MappingProxyType to prevent direct dictionary updates).

Without an argument,vars() acts likelocals().

ATypeError exception is raised if an object is specified butit doesn't have a__dict__ attribute (for example, ifits class defines the__slots__ attribute).

在 3.13 版的變更:The result of calling this function without an argument has beenupdated as described for thelocals() builtin.

zip(*iterables,strict=False)

Iterate over several iterables in parallel, producing tuples with an itemfrom each one.

例如:

>>>foriteminzip([1,2,3],['sugar','spice','everything nice']):...print(item)...(1, 'sugar')(2, 'spice')(3, 'everything nice')

More formally:zip() returns an iterator of tuples, where thei-thtuple contains thei-th element from each of the argument iterables.

Another way to think ofzip() is that it turns rows into columns, andcolumns into rows. This is similar totransposing a matrix.

zip() is lazy: The elements won't be processed until the iterable isiterated on, e.g. by afor loop or by wrapping in alist.

One thing to consider is that the iterables passed tozip() could havedifferent lengths; sometimes by design, and sometimes because of a bug inthe code that prepared these iterables. Python offers three differentapproaches to dealing with this issue:

  • By default,zip() stops when the shortest iterable is exhausted.It will ignore the remaining items in the longer iterables, cutting offthe result to the length of the shortest iterable:

    >>>list(zip(range(3),['fee','fi','fo','fum']))[(0, 'fee'), (1, 'fi'), (2, 'fo')]
  • zip() is often used in cases where the iterables are assumed to beof equal length. In such cases, it's recommended to use thestrict=Trueoption. Its output is the same as regularzip():

    >>>list(zip(('a','b','c'),(1,2,3),strict=True))[('a', 1), ('b', 2), ('c', 3)]

    Unlike the default behavior, it raises aValueError if one iterableis exhausted before the others:

    >>>foriteminzip(range(3),['fee','fi','fo','fum'],strict=True):...print(item)...(0, 'fee')(1, 'fi')(2, 'fo')Traceback (most recent call last):...ValueError:zip() argument 2 is longer than argument 1

    Without thestrict=True argument, any bug that results in iterables ofdifferent lengths will be silenced, possibly manifesting as a hard-to-findbug in another part of the program.

  • Shorter iterables can be padded with a constant value to make all theiterables have the same length. This is done byitertools.zip_longest().

Edge cases: With a single iterable argument,zip() returns aniterator of 1-tuples. With no arguments, it returns an empty iterator.

Tips and tricks:

  • The left-to-right evaluation order of the iterables is guaranteed. Thismakes possible an idiom for clustering a data series into n-length groupsusingzip(*[iter(s)]*n,strict=True). This repeats thesame iteratorn times so that each output tuple has the result ofn calls to theiterator. This has the effect of dividing the input into n-length chunks.

  • zip() in conjunction with the* operator can be used to unzip alist:

    >>>x=[1,2,3]>>>y=[4,5,6]>>>list(zip(x,y))[(1, 4), (2, 5), (3, 6)]>>>x2,y2=zip(*zip(x,y))>>>x==list(x2)andy==list(y2)True

在 3.10 版的變更:增加了strict 引數。

__import__(name,globals=None,locals=None,fromlist=(),level=0)

備註

This is an advanced function that is not needed in everyday Pythonprogramming, unlikeimportlib.import_module().

This function is invoked by theimport statement. It can bereplaced (by importing thebuiltins module and assigning tobuiltins.__import__) in order to change semantics of theimport statement, but doing so isstrongly discouraged as itis usually simpler to use import hooks (seePEP 302) to attain the samegoals and does not cause issues with code which assumes the default importimplementation is in use. Direct use of__import__() is alsodiscouraged in favor ofimportlib.import_module().

The function imports the modulename, potentially using the givenglobalsandlocals to determine how to interpret the name in a package context.Thefromlist gives the names of objects or submodules that should beimported from the module given byname. The standard implementation doesnot use itslocals argument at all and uses itsglobals only todetermine the package context of theimport statement.

level specifies whether to use absolute or relative imports.0 (thedefault) means only perform absolute imports. Positive values forlevel indicate the number of parent directories to search relative to thedirectory of the module calling__import__() (seePEP 328 for thedetails).

When thename variable is of the formpackage.module, normally, thetop-level package (the name up till the first dot) is returned,not themodule named byname. However, when a non-emptyfromlist argument isgiven, the module named byname is returned.

For example, the statementimportspam results in bytecode resembling thefollowing code:

spam=__import__('spam',globals(),locals(),[],0)

The statementimportspam.ham results in this call:

spam=__import__('spam.ham',globals(),locals(),[],0)

Note how__import__() returns the toplevel module here because this isthe object that is bound to a name by theimport statement.

On the other hand, the statementfromspam.hamimporteggs,sausageassaus results in

_temp=__import__('spam.ham',globals(),locals(),['eggs','sausage'],0)eggs=_temp.eggssaus=_temp.sausage

Here, thespam.ham module is returned from__import__(). From thisobject, the names to import are retrieved and assigned to their respectivenames.

If you simply want to import a module (potentially within a package) by name,useimportlib.import_module().

在 3.3 版的變更:Negative values forlevel are no longer supported (which also changesthe default value to 0).

在 3.9 版的變更:When the command line options-E or-I are being used,the environment variablePYTHONCASEOK is now ignored.

註解

[1]

剖析器只接受 Unix 風格的行結束符。如果你從檔案中讀取程式碼,請確保用換行符號轉換模式轉換 Windows 或 Mac 風格的換行符號。