內建函式— Python 3.10.6 說明文件
文章推薦指數: 80 %
內建函式¶. Python 直譯器有內建多個可隨時使用的函式和型別。
... 如果x 不是Python 的 int 物件,那它需要定義 __index__() method 回傳一個整數。
舉例來說:.
瀏覽
索引
模組|
下一頁|
上一頁|
Python»
3.10.6Documentation»
Python標準函式庫(StandardLibrary)»
內建函式
|
內建函式¶
Python直譯器有內建多個可隨時使用的函式和型別。
以下按照英文字母排序列出。
A
abs()
aiter()
all()
any()
anext()
ascii()
B
bin()
bool()
breakpoint()
bytearray()
bytes()
C
callable()
chr()
classmethod()
compile()
complex()
D
delattr()
dict()
dir()
divmod()
E
enumerate()
eval()
exec()
F
filter()
float()
format()
frozenset()
G
getattr()
globals()
H
hasattr()
hash()
help()
hex()
I
id()
input()
int()
isinstance()
issubclass()
iter()
L
len()
list()
locals()
M
map()
max()
memoryview()
min()
N
next()
O
object()
oct()
open()
ord()
P
pow()
print()
property()
R
range()
repr()
reversed()
round()
S
set()
setattr()
slice()
sorted()
staticmethod()
str()
sum()
super()
T
tuple()
type()
V
vars()
Z
zip()
_
__import__()
abs(x)¶
回傳一個數的絕對值,引數可以是整數、浮點數或有實現__abs__()的物件。
如果引數是一個複數,回傳它的純量(大小)。
aiter(async_iterable)¶
返回asynchronousiterable的asynchronousiterator。
相当于调用x.__aiter__()。
注意:与iter()不同,aiter()没有两个参数的版本。
3.10版新加入.
all(iterable)¶
如果iterable的所有元素皆為真(或iterable為空)則回傳True。
等價於:
defall(iterable):
forelementiniterable:
ifnotelement:
returnFalse
returnTrue
awaitableanext(async_iterator[,default])¶
当进入await状态时,从给定asynchronousiterator返回下一数据项,迭代完毕则返回default。
这是内置函数next()的异步版本,类似于:
调用async_iterator的__anext__()方法,返回一个awaitable。
等待返回迭代器的下一个值。
若有给出default,则在迭代完毕后会返回给出的值,否则会触发StopAsyncIteration。
3.10版新加入.
any(iterable)¶
如果iterable的任一元素為真,回傳True。
如果iterable是空的,則回傳False。
等價於:
defany(iterable):
forelementiniterable:
ifelement:
returnTrue
returnFalse
ascii(object)¶
就像函式repr(),回傳一個表示物件的字串,但是repr()回傳的字串中非ASCII編碼的字元會被跳脫(escape),像是\x、\u和\U。
這個函式生成的字串和Python2的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([x])¶
回傳一個布林值,即True或者False。
x使用標準的真值測試程序來轉換。
如果x為假或者被省略,則回傳False;其他情況回傳True。
boolclass(類別)是int的subclass(子類別)(參見数字类型---int,float,complex),其他class不能繼承自它。
它只有False和True兩個實例(參見布尔值)。
3.7版更變:x现在只能作为位置参数。
breakpoint(*args,**kws)¶
Thisfunctiondropsyouintothedebuggeratthecallsite.Specifically,
itcallssys.breakpointhook(),passingargsandkwsstraight
through.Bydefault,sys.breakpointhook()calls
pdb.set_trace()expectingnoarguments.Inthiscase,itis
purelyaconveniencefunctionsoyoudon'thavetoexplicitlyimport
pdbortypeasmuchcodetoenterthedebugger.However,
sys.breakpointhook()canbesettosomeotherfunctionand
breakpoint()willautomaticallycallthat,allowingyoutodropinto
thedebuggerofchoice.
Ifsys.breakpointhook()isnotaccessible,thisfunctionwill
raiseRuntimeError.
引发一个审计事件builtins.breakpoint并附带参数breakpointhook。
3.7版新加入.
classbytearray([source[,encoding[,errors]]])
回傳一個新的bytes陣列。
bytearrayclass是一個可變的整數序列,包含範圍為0<=x<256的整數。
它有可變序列大部分常見的method(如在可变序列类型中所述),同時也有bytes型別大部分的method,參見bytes和bytearray操作。
選擇性參數source可以被用來以不同的方式初始化陣列:
如果是一個string,你必須提供encoding參數(以及選擇性地提供errors);bytearray()會使用str.encode()method來將string轉變成bytes。
如果是一個integer,陣列則會有該數值的長度,並以nullbytes來當作初始值。
如果是一個符合buffer介面的物件,該物件的唯讀buffer會被用來初始化bytes陣列。
如果是一個iterable,它的元素必須是範圍為0<=x<256的整數,並且會被用作陣列的初始值。
如果沒有引數,則建立長度為0的陣列。
可參考二进制序列类型---bytes,bytearray,memoryview和bytearray对象。
classbytes([source[,encoding[,errors]]])
回傳一個新的"bytes"物件,會是一個元素是範圍為0<=x<256整數的不可變序列。
bytes是bytearray的不可變版本—它的同樣具備不改變物件的method,也有相同的索引和切片操作。
因此,建構函式的引數和bytearray()相同。
Bytes物件還可以用文字建立,參見字符串与字节串字面值。
可參考二进制序列类型---bytes,bytearray,memoryview、bytes对象和bytes和bytearray操作。
callable(object)¶
如果引數object是可呼叫的,回傳True,否則回傳False。
如果回傳True,呼叫仍可能會失敗;但如果回傳False,則呼叫object肯定會失敗。
注意class是可呼叫的(呼叫class會回傳一個新的實例);如果實例的class有定義__call__()method,則它是可呼叫的。
3.2版新加入:這個函式一開始在Python3.0被移除,但在Python3.2又被重新加入。
chr(i)¶
回傳代表字元之Unicode編碼位置為整數i的字串。
例如,chr(97)回傳字串'a',而chr(8364)回傳字串'€'。
這是ord()的逆函式。
引數的有效範圍是0到1,114,111(16進制表示為0x10FFFF)。
如果i超過這個範圍,會觸發ValueError。
@classmethod¶
把一個method封裝成classmethod(類別方法)。
一個classmethod把自己的class作為第一個引數,就像一個實例method把實例自己作為第一個引數。
請用以下慣例來宣告classmethod:
classC:
@classmethod
deff(cls,arg1,arg2):...
@classmethod語法是一個函式decorator—參見函式定義中關於函式定義的詳細介紹。
一個classmethod可以在class(如C.f())或實例(如C().f())上呼叫。
實例除了它的class資訊,其他都會被忽略。
如果一個classmethod在subclass上呼叫,subclass會作為第一個引數傳入。
Classmethod和C++與Java的staticmethod是有區別的。
如果你想瞭解staticmethod,請看本節的staticmethod()。
關於classmethod的更多資訊,請參考标准类型层级结构。
3.9版更變:类方法现在可以包装其他描述器例如property()。
3.10版更變:类方法现在继承了方法的属性(__module__、__name__、__qualname__、__doc__和__annotations__),并拥有一个新的``__wrapped__``属性。
compile(source,filename,mode,flags=0,dont_inherit=False,optimize=-1)¶
將source編譯成程式碼或AST物件。
程式碼物件可以被exec()或eval()執行。
source可以是一般的字串、bytes字串、或者AST物件。
參見astmodule(模組)的文件瞭解如何使用AST物件。
filename引數必須是程式碼的檔名;如果程式碼不是從檔案中讀取,可以傳入一些可辨識的值(經常會使用'
mode引數指定了編譯程式碼時必須用的模式。
如果source是一系列的陳述式,可以是'exec';如果是單一運算式,可以是'eval';如果是單個互動式陳述式,可以是'single'``(在最後一種情況下,如果運算式執行結果不是``None則會被印出來)。
可选参数flags和dont_inherit控制应当激活哪个编译器选项以及应当允许哪个future特性。
如果两者都未提供(或都为零)则代码会应用与调用compile()的代码相同的旗标来编译。
如果给出了flags参数而未给出dont_inherit(或者为零)则会在无论如何都将被使用的旗标之外还会额外使用flags参数所指定的编译器选项和future语句。
如果dont_inherit为非零整数,则只使用flags参数--外围代码中的旗标(future特性和编译器选项)会被忽略。
編譯器選項和future陳述式使用bits來表示,可以一起被位元操作OR來表示複數個選項。
需要被具體定義特徵的位元域可以透過__future__module中_Feature實例中的compiler_flag屬性來獲得。
編譯器旗標可以在astmodule中搜尋有PyCF_前綴的名稱。
引數optimize用來指定編譯器的最佳化級別;預設值-1選擇與直譯器的-O選項相同的最佳化級別。
其他級別為0(沒有最佳化;__debug__為真值)、1(assert被刪除,__debug__為假值)或2(文件字串也被刪除)。
如果編譯的原始碼無效,此函式會觸發SyntaxError,如果原始碼包含nullbytes,則會觸發ValueError。
如果您想解析Python程式碼為AST運算式,請參閱ast.parse()。
引发一个审计事件compile附带参数source,filename。
備註
在'single'或'eval'模式編譯多行程式碼時,輸入必須以至少一個換行符結尾。
這使codemodule更容易檢測陳述式的完整性。
警告
如果編譯足夠大或者足夠複雜的字串成AST物件時,Python直譯器會因為PythonAST編譯器的stack深度限制而崩潰。
3.2版更變:允許使用Windows和Mac的換行符號。
在'exec'模式不需要以換行符號結尾。
增加了optimize參數。
3.5版更變:在之前的版本,source中包含nullbytes會觸發TypeError異常。
3.8版新加入:ast.PyCF_ALLOW_TOP_LEVEL_AWAIT现在可在旗标中传入以启用对最高层级await,asyncfor和asyncwith的支持。
classcomplex([real[,imag]])¶
回傳值為real+imag*1j的複數,或將字串、數字轉換為複數。
如果第一個引數是字串,則它被視為一個複數,並且函式呼叫時不得有第二個引數。
第二個引數絕對不能是字串。
每個引數都可以是任意的數值型別(包括複數)。
如果省略了imag,則預設值為零,建構函式會像int和float一樣進行數值轉換。
如果兩個引數都省略,則回傳0j。
对于一个普通Python对象x,complex(x)会委托给x.__complex__()。
如果__complex__()未定义则将回退至__float__()。
如果__float__()未定义则将回退至__index__()。
備註
當轉換自一字串時,字串在+或-運算子的周圍必須不能有空格。
例如complex('1+2j')是有效的,但complex('1+2j')會觸發ValueError。
複數型別在数字类型---int,float,complex中有相關描述。
3.6版更變:可以使用底線將程式碼文字中的數字進行分組。
3.8版更變:如果__complex__()和__float__()未定义则回退至__index__()。
delattr(object,name)¶
這是setattr()相關的函式。
引數是一個物件和一個字串,該字串必須是物件中某個屬性名稱。
如果物件允許,該函式將刪除指定的屬性。
例如delattr(x,'foobar')等價於delx.foobar。
classdict(**kwarg)
classdict(mapping,**kwarg)
classdict(iterable,**kwarg)
建立一個新的dictionary(字典)。
dict物件是一個dictionaryclass。
參見dict和映射类型---dict來瞭解這個class。
其他容器型別,請參見內建的list、set和tupleclass,以及collectionsmodule。
dir([object])¶
如果沒有引數,則回傳當前本地作用域中的名稱列表。
如果有引數,它會嘗試回傳該物件的有效屬性列表。
如果物件有一個名為__dir__()的method,那麼該method將被呼叫,並且必須回傳一個屬性列表。
這允許實現自定義__getattr__()或__getattribute__()函式的物件能夠自定義dir()來報告它們的屬性。
如果物件不提供__dir__(),這個函式會嘗試從物件已定義的__dict__屬性和型別物件收集資訊。
結果列表並不總是完整的,如果物件有自定義__getattr__(),那結果可能不準確。
預設的dir()機制對不同型別的物件有不同行為,它會試圖回傳最相關而非最完整的資訊:
如果物件是module物件,則列表包含module的屬性名稱。
如果物件是型別或class物件,則列表包含它們的屬性名稱,並且遞迴查詢其基礎的所有屬性。
否則,包含物件的屬性名稱列表、它的class屬性名稱,並且遞迴查詢它的class的所有基礎class的屬性。
回傳的列表按字母表排序,例如:
>>>importstruct
>>>dir()#showthenamesinthemodulenamespace
['__builtins__','__name__','struct']
>>>dir(struct)#showthenamesinthestructmodule
['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%b和a基本相等,如果a%b非零,則它的符號和b一樣,且0<=abs(a%b)
如果有提供選擇性引數,globals必須是一個dictionary。
locals可以是任何映射(mapping)物件。
expression引數被剖析並執行成Python運算式(技術上而言,是條件列表),globals和localsdictionaries分別用作全域性和本地命名空間。
如果globalsdictionary存在但缺少__builtins__的鍵值,那expression被剖析之前,將為該鍵插入對內建builtinsmoduledictionary的引用。
這麼一來,在將__builtins__`傳入eval()之前,你可以透過將它插入globals來控制你需要哪些內建函數。
如果locals被省略,那它的預設值是globalsdictionary。
如果兩個dictionary變數都被省略,則在eval()被呼叫的環境中執行運算式。
請注意,eval()在封閉環境中無法存取巢狀域(non-locals)。
返回值就是表达式的求值结果。
语法错误将作为异常被报告。
例如:
>>>x=1
>>>eval('x+1')
2
這個函式也可以用來執行任意程式碼物件(如被compile()建立的那些)。
這種情況下,傳入的引數是程式碼物件而不是字串。
如果編譯該物件時的mode引數是'exec',那麼eval()回傳值為None。
提示:exec()函式支援動態執行陳述式。
globals()和locals()函式分別回傳當前的全域性和局部性dictionary,它們對於將引數傳遞給eval()或exec()可能會方便許多。
如果给出的源数据是个字符串,那么其前后的空格和制表符将被剔除。
另外可以參閱ast.literal_eval(),該函式可以安全執行僅包含文字的運算式字串。
引发一个审计事件exec附带参数code_object。
exec(object[,globals[,locals]])¶
這個函式支援動態執行Python程式碼。
object必須是字串或者程式碼物件。
如果是字串,那麼該字串將被剖析為一系列Python陳述式並執行(除非發生語法錯誤)。
1如果是程式碼物件,它將被直接執行。
無論哪種情況,被執行的程式碼都需要和檔案輸入一樣是有效的(可參考手冊中關於文件输入的章節)。
請注意,即使在傳遞給exec()函式的程式碼的上下文中,nonlocal、yield和return陳述式也不能在函式之外使用。
該函式回傳值是None。
無論哪種情況,如果省略了選擇性引數,程式碼將在當前作用域內執行。
如果只提供了globals引數,就必須是dictionary型別,而且會被用作全域性和本地變數。
如果同時提供了globals和locals引數,它們分別被用作全域性和本地變數。
如果提供了locals引數,則它可以是任何映射物件。
請記住在module層級中全域性和本地變數是相同的dictionary。
如果exec有兩個不同的globals和locals物件,程式碼就像嵌入在class定義中一樣執行。
如果globalsdictionary不包含__builtins__鍵值,則將為該鍵插入對內建builtinsmoduledictionary的引用。
因此,在將執行的程式碼傳遞給exec()之前,可以通過將自己的__builtins__dictionary插入到globals中來控制可以使用哪些內建程式碼。
引发一个审计事件exec附带参数code_object。
備註
內建globals()和locals()函式各自回傳當前的全域性和本地dictionary,因此可以將它們傳遞給exec()的第二個和第三個引數。
備註
預設情況下,locals的行為如下面locals()函式描述的一樣:不要試圖改變預設的localsdictionary。
如果您想在exec()函式回傳時知道程式碼對locals的變動,請明確地傳遞localsdictionary。
filter(function,iterable)¶
用iterable中函式function回傳True的那些元素,構建一個新的iterator。
iterable可以是一個序列、一個支援疊代的容器、或一個iterator。
如果function是None,則會假設它是一個恆等函數,即iterable中所有假值元素會被移除。
請注意,filter(function,iterable)相當於一個生成器運算式,當function不是None的時候為(itemforiteminiterableiffunction(item));function是None的時候為(itemforiteminiterableifitem)。
請參閱itertools.filterfalse(),只有function回傳false時才選取iterable中元素的互補函數。
classfloat([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__()。
如果未定義__float__()則使用__index__()。
如果沒有引數,則回傳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现在只能作为位置参数。
3.8版更變:如果__float__()未定义则回退至__index__()。
format(value[,format_spec])¶
將value轉換為format_spec控制的"格式化"表示。
format_spec的解釋取決於value引數的型別,但是大多數內建型別使用標準格式化語法:格式规格迷你语言。
預設的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])
回傳一個新的frozenset物件,它包含選擇性引數iterable中的元素。
frozenset是一個內建的class。
有關此class的文件,請參閱frozenset和集合类型---set,frozenset。
請參閱內建的set、list、tuple和dictclass,以及collectionsmodule來了解其它的容器。
getattr(object,name[,default])¶
回傳object之具名屬性的值。
name必須是字串。
如果該字串是物件屬性之一的名稱,則回傳該屬性的值。
例如,getattr(x,'foobar')等同於x.foobar。
如果指定的屬性不存在,且提供了default值,則回傳其值,否則觸發AttributeError。
備註
由于私有名称混合发生在编译时,因此必须手动混合私有属性(以两个下划线打头的属性)名称以使使用getattr()来提取它。
globals()¶
回傳代表當前module命名空間的dictionary。
對於在函式中的程式碼來說,這在定義函式時設定且不論該函式是在何處呼叫都會保持相同。
hasattr(object,name)¶
該引數是一個物件和一個字串。
如果字串是物件屬性之一的名稱,則回傳True,否則回傳False。
(此功能是通過呼叫getattr(object,name)看是否有AttributeError來實現的。
)
hash(object)¶
回傳該物件的雜湊值(如果它有的話)。
雜湊值是整數。
它們在dictionary查詢元素時用來快速比較dictionary的鍵。
相同大小的數字數值有相同的雜湊值(即使它們型別不同,如1和1.0)。
備註
請注意,如果物件實現了自己的__hash__()method,hash()根據執行機器的位元長度來擷取回傳值。
另請參閱__hash__()。
help([object])¶
啟動內建的幫助系統(此函式主要以互動式使用)。
如果沒有引數,直譯器控制臺裡會啟動互動式幫助系統。
如果引數是一個字串,則在module、函式、class、method、關鍵字或文件主題中搜索該字串,並在控制台上列印幫助資訊。
如果引數是其他任意物件,則會生成該物件的幫助頁。
请注意,如果在调用help()时,目标函数的形参列表中存在斜杠(/),则意味着斜杠之前的参数只能是位置参数。
详情请参阅有关仅限位置形参的FAQ条目。
該函式透過sitemodule加入到內建命名空間。
3.4版更變:變更至pydoc和inspect使得可呼叫物件的簽名信息(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()值。
CPythonimplementationdetail:Thisistheaddressoftheobjectinmemory.
引发一个审计事件builtins.id,附带参数id。
input([prompt])¶
如果有提供prompt引數,則將其寫入標準輸出,末尾不帶換行符。
接下來,該函式從輸入中讀取一行,將其轉換為字串(去除末尾的換行符)並回傳。
當讀取到EOF時,則觸發EOFError。
例如:
>>>s=input('-->')
-->MontyPython'sFlyingCircus
>>>s
"MontyPython'sFlyingCircus"
如果載入了readlinemodule,input()將使用它來提供複雜的行編輯和歷史記錄功能。
引发一个审计事件builtins.input附带参数prompt。
在成功读取输入之后引发一个审计事件builtins.input/result附带结果。
classint([x])¶
classint(x,base=10)
回傳一個使用數字或字串x建構的整數物件,或者在沒有引數時回傳0。
如果x定義了__int__(),int(x)回傳x.__int__()。
如果x定義了__index__()則回傳x.__index__()。
如果x定義了__trunc__()則回傳x.__trunc__()。
對於浮點數則向零舍入。
如果x不是數字,或者有base引數,x必須是字串、bytes、或進位制為base的整數文字的bytearray實例。
該文字前可以有+或-(中間不能有空格),前後可以有空格。
一個進製為n的文字包含0到n-1,其中a到z(或A到Z)表示10到35。
預設的base為10。
允許的進位制有0、2–36。
2、8、16進位制的文字可以在程式碼中用0b/0B、0o/0O、0x/0X前綴來表示,如同程式碼中的整數文字。
進位制為0將按照程式碼的字面進位制來直譯,最後的結果會是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版更變:x现在只能作为位置参数。
3.8版更變:如果__int__()未定义则回退至__index__()。
isinstance(object,classinfo)¶
如果object引數是classinfo引數的實例,或者是(直接、間接或virtual)subclass的實例,則回傳True。
如果object不是給定型別的物件,函式始終回傳False。
如果classinfo是包含物件型別的tuple(或多個遞迴tuple)或一個包含多種型別的union类型,若object是其中的任何一個物件的實例則回傳True。
如果classinfo既不是型別,也不是型別tuple或型別的遞迴tuple,那麼會觸發TypeError異常。
3.10版更變:classinfo可以是一个union类型。
issubclass(class,classinfo)¶
如果class是classinfo的subclass(直接、間接或virtual),則回傳True。
classinfo可以是class物件的tuple(或遞迴地其他類似tuple)或是一個union类型,此時若class是classinfo中任一元素的subclass時則回傳True。
其他情況,會觸發TypeError。
3.10版更變:classinfo可以是一个union类型。
iter(object[,sentinel])¶
回傳一個iterator物件。
根據是否存在第二個引數,第一個引數的意義是非常不同的。
如果沒有第二個引數,object必須是支援iterable協定(有__iter__()method)的集合物件,或必須支援序列協定(有__getitem__()方法,且數字引數從0開始)。
如果它不支援這些協定,會觸發TypeError。
如果有第二個引數sentinel,那麼object必須是可呼叫的物件,這種情況下生成的iterator,每次疊代呼叫__next__()時會不帶引數地呼叫object;如果回傳的結果是sentinel則觸發StopIteration,否則回傳呼叫結果。
另請參閱迭代器类型。
适合iter()的第二种形式的应用之一是构建块读取器。
例如,从二进制数据库文件中读取固定宽度的块,直至到达文件的末尾:
fromfunctoolsimportpartial
withopen('mydata.db','rb')asf:
forblockiniter(partial(f.read,64),b''):
process_block(block)
len(s)¶
回傳物件的長度(元素個數)。
引數可以是序列(如string、bytes、tuple、list或range)或集合(如dictionary、set或frozenset)。
CPythonimplementationdetail:len对于大于sys.maxsize的长度如range(2**100)会引发OverflowError。
classlist([iterable])
除了是函式,list也是可變序列型別,詳情請參閱List(串列)和序列类型---list,tuple,range。
locals()¶
更新並回傳表示當前本地符號表的dictionary。
在函式區塊而不是class區塊中呼叫locals()時會回傳自由變數。
請注意,在module階層中,locals()和globals()是相同的dictionary。
備註
此dictionary的內容不應該被更動;更改可能不會影響直譯器使用的本地變數或自由變數的值。
map(function,iterable,...)¶
產生一個將function應用於iterable中所有元素,並收集回傳結果的iterator。
如果傳遞了額外的iterable引數,function必須接受相同個數的引數,並應用於所有iterables中同時獲取的元素。
當有多個iterables時,最短的iteratable耗盡時iterator也會結束。
如果函式的輸入已經是tuple的引數,請參閱itertools.starmap()。
max(iterable,*[,key,default])¶
max(arg1,arg2,*args[,key])
回傳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)
回傳由給定的引數建立之"memoryview"物件。
有關詳細資訊,請參閱内存视图。
min(iterable,*[,key,default])¶
min(arg1,arg2,*args[,key])
回傳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[,default])¶
通過呼叫iterator的__next__()method獲取下一個元素。
如果iterator耗盡,則回傳給定的預設值default,如果沒有預設值則觸發StopIteration。
classobject¶
回傳一個沒有特徵的新物件。
object是所有class的基礎,它具有所有Pythonclass實例的通用method。
這個函式不接受任何引數。
備註
由於object沒有__dict__,因此無法將任意屬性賦給objectclass的實例。
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並回傳對應的fileobject。
如果該檔案不能開啟,則觸發OSError。
關於使用此函式的更多方法請參閱讀寫檔案。
file是一個path-likeobject,是將被開啟之檔案的路徑(絕對路徑或者當前工作目錄的相當路徑),或是被封裝的整數檔案描述器(filedescriptor)。
(如果有提供檔案描述器,它會隨著回傳的I/O物件關閉而關閉,除非closefd被設為False。
)
mode是一個選擇性字串,用於指定開啟檔案的模式。
預設值是'r',這意味著它以文字模式開啟並讀取。
其他常見模式有:寫入'w'(會捨去已經存在的檔案)、唯一性創建'x'、追加寫入'a'(在一些Unix系統上,無論當前的檔案指標在什麼位置,所有寫入都會追加到檔案末尾)。
在文字模式,如果沒有指定encoding,則根據電腦平臺來決定使用的編碼:呼叫locale.getpreferredencoding(False)來獲取當前的本地編碼。
(要讀取和寫入原始bytes,請使用二進位制模式且不要指定encoding。
)可用的模式有:
'r'
讀取(預設)
'w'
写入,并先截断文件
'x'
唯一性創建,如果文件已存在則會失敗
'a'
寫入,如果文件存在則在末尾追加寫入內容
'b'
二進制模式
't'
文字模式(預設)
'+'
更新(讀取並寫入)
預設的模式是'r'(開啟並讀取文字,同'rt')。
對於二進位制寫入,'w+b'模式開啟並把檔案內容變成0bytes,'r+b'則不會捨棄原始內容。
正如在總覽中提到的,Python区分二进制和文本I/O。
以二进制模式打开的文件(包括mode参数中的'b')返回的内容为bytes对象,不进行任何解码。
在文本模式下(默认情况下,或者在mode参数中包含't')时,文件内容返回为str,首先使用指定的encoding(如果给定)或者使用平台默认的的字节编码解码。
另外还有一种模式字符'U'可用,不过它已失效,并视作弃用。
以前它会在文本模式中启用universalnewlines,这在Python3.0已成为默认行为。
详情请参阅newline形参的文档。
備註
Python不依赖于底层操作系统的文本文件概念;所有处理都由Python本身完成,因此与平台无关。
buffering是一个可选的整数,用于设置缓冲策略。
传入0来关闭缓冲(只允许在二进制模式下),传入1来选择行缓冲(只在文本模式下可用),传入一个整数>1来表示固定大小的块缓冲区的字节大小。
注意,这样指定缓冲区的大小适用于二进制缓冲的I/O,但TextIOWrapper(即用mode='r+'打开的文件)会有另一种缓冲。
要禁用在TextIOWrapper缓冲,考虑使用io.TextIOWrapper.reconfigure()的write_through标志来。
当没有给出buffering参数时,默认的缓冲策略工作如下。
二进制文件以固定大小的块进行缓冲;使用启发式方法选择缓冲区的大小,尝试确定底层设备的“块大小”或使用io.DEFAULT_BUFFER_SIZE。
在许多系统上,缓冲区的长度通常为4096或8192字节。
“交互式”文本文件(isatty()返回True的文件)使用行缓冲。
其他文本文件使用上述策略用于二进制文件。
encoding是用于解码或编码文件的编码的名称。
这应该只在文本模式下使用。
默认编码是依赖于平台的(不管locale.getpreferredencoding()返回何值),但可以使用任何Python支持的textencoding。
有关支持的编码列表,请参阅codecs模块。
errors是一个可选的字符串参数,用于指定如何处理编码和解码错误-这不能在二进制模式下使用。
可以使用各种标准错误处理程序(列在错误处理方案),但是使用codecs.register_error()注册的任何错误处理名称也是有效的。
标准名称包括:
如果存在编码错误,'strict'会引发ValueError异常。
默认值None具有相同的效果。
'ignore'忽略错误。
请注意,忽略编码错误可能会导致数据丢失。
'replace'会将替换标记(例如'?')插入有错误数据的地方。
'surrogateescape'将把任何不正确的字节表示为U+DC80至U+DCFF范围内的下方替代码位。
当在写入数据时使用surrogateescape错误处理句柄时这些替代码位会被转回到相同的字节。
这适用于处理具有未知编码格式的文件。
只有在写入文件时才支持'xmlcharrefreplace'。
编码不支持的字符将替换为相应的XML字符引用nnn;。
'backslashreplace'用Python的反向转义序列替换格式错误的数据。
'namereplace'(也只在编写时支持)用\N{...}转义序列替换不支持的字符。
newline控制universalnewlines模式如何生效(它仅适用于文本模式)。
它可以是None,'','\n','\r'和'\r\n'。
它的工作原理:
从流中读取输入时,如果newline为None,则启用通用换行模式。
输入中的行可以以'\n','\r'或'\r\n'结尾,这些行被翻译成'\n'在返回呼叫者之前。
如果它是'',则启用通用换行模式,但行结尾将返回给调用者未翻译。
如果它具有任何其他合法值,则输入行仅由给定字符串终止,并且行结尾将返回给未调用的调用者。
将输出写入流时,如果newline为None,则写入的任何'\n'字符都将转换为系统默认行分隔符os.linesep。
如果newline是''或'\n',则不进行翻译。
如果newline是任何其他合法值,则写入的任何'\n'字符将被转换为给定的字符串。
如果closefd为False且给出的不是文件名而是文件描述符,那么当文件关闭时,底层文件描述符将保持打开状态。
如果给出的是文件名,则closefd必须为True(默认值),否则将触发错误。
可以通过传递可调用的opener来使用自定义开启器。
然后通过使用参数(file,flags)调用opener获得文件对象的基础文件描述符。
opener必须返回一个打开的文件描述符(使用os.openasopener时与传递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('Thiswillbewrittentosomedir/spamspam.txt',file=f)
...
>>>os.close(dir_fd)#don'tleakafiledescriptor
open()函数所返回的fileobject类型取决于所用模式。
当使用open()以文本模式('w','r','wt','rt'等)打开文件时,它将返回io.TextIOBase(具体为io.TextIOWrapper)的一个子类。
当使用缓冲以二进制模式打开文件时,返回的类是io.BufferedIOBase的一个子类。
具体的类会有多种:在只读的二进制模式下,它将返回io.BufferedReader;在写入二进制和追加二进制模式下,它将返回io.BufferedWriter,而在读/写模式下,它将返回io.BufferedRandom。
当禁用缓冲时,则会返回原始流,即io.RawIOBase的一个子类io.FileIO。
另請參閱檔案操作模組,例如fileinput、io(定義了open()的module)、os、os.path、tempfile以及shutil。
引发一个审计事件open附带参数file,mode,flags。
mode与flags参数可以在原始调用的基础上被修改或传递。
3.3版更變:
增加了opener參數。
增加了'x'模式。
過去觸發的IOError,現在是OSError的別名。
如果檔案已存在但使用了唯一性建立模式('x'),現在會觸發FileExistsError。
3.4版更變:
檔案在當前版本開始禁止繼承。
Deprecatedsinceversion3.4,removedinversion3.10:'U'模式。
3.5版更變:
如果系統呼叫被中斷,但訊號處理程序沒有觸發例外,此函式現在會重試系統呼叫,而不是觸發InterruptedError(原因詳見PEP475)。
增加了'namereplace'錯誤處理程式。
3.6版更變:
增加對實現了os.PathLike物件的支援。
在Windows上,開啟一個控制臺緩衝區可能會回傳io.RawIOBase的subclass,而不是io.FileIO。
ord(c)¶
對於代表單個Unicode字元的字串,回傳代表它Unicode編碼位置的整數。
例如ord('a')回傳整數97、ord('€')(歐元符號)回傳8364。
這是chr()的逆函式。
pow(base,exp[,mod])¶
回傳base的exp次方;如果mod存在,則回傳base的exp次方對mod取餘數(比直接呼叫pow(base,exp)%mod計算更高效)。
兩個引數形式的pow(exp,exp)等價於次方運算子:base**exp。
参数必须为数值类型。
对于混用的操作数类型,则适用二元算术运算符的类型强制转换规则。
对于int操作数,结果具有与操作数相同的类型(转换后),除非第二个参数为负值;在这种情况下,所有参数将被转换为浮点数并输出浮点数结果。
例如,pow(10,2)返回100,但pow(10,-2)返回0.01。
对于int或float类型的负基和一个非整数的指数,会产生一个复杂的结果。
例如,pow(-9,0.5)返回一个接近于3j的值。
对于int操作数base和exp,如果给出mod,则mod必须为整数类型并且mod必须不为零。
如果给出mod并且exp为负值,则base必须相对于mod不可整除。
在这种情况下,将会返回pow(inv_base,-exp,mod),其中inv_base为base的倒数对mod取余。
下面的例子是38的倒数对97取余:
>>>pow(38,-1,mod=97)
23
>>>23*38%97==1
True
3.8版更變:对于int操作数,三参数形式的pow现在允许第二个参数为负值,即可以计算倒数的余数。
3.8版更變:允许关键字参数。
之前只支持位置参数。
print(*objects,sep='',end='\n',file=sys.stdout,flush=False)¶
将objects打印输出至file指定的文本流,以sep分隔并在末尾加上end。
sep、end、file和flush必须以关键字参数的形式给出。
所有非关键字参数都会被转换为字符串,就像是执行了str()一样,并会被写入到流,以sep且在末尾加上end。
sep和end都必须为字符串;它们也可以为None,这意味着使用默认值。
如果没有给出objects,则print()将只写入end。
file参数必须是一个具有write(string)方法的对象;如果参数不存在或为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=None
defgetx(self):
returnself._x
defsetx(self,value):
self._x=value
defdelx(self):
delself._x
x=property(getx,setx,delx,"I'mthe'x'property.")
如果c为C的实例,c.x将调用getter,c.x=value将调用setter,delc.x将调用deleter。
如果给出,doc将成为该property属性的文档字符串。
否则该property将拷贝fget的文档字符串(如果存在)。
这令使用property()作为decorator来创建只读的特征属性可以很容易地实现:
classParrot:
def__init__(self):
self._voltage=100000
@property
defvoltage(self):
"""Getthecurrentvoltage."""
returnself._voltage
以上@property装饰器会将voltage()方法转化为一个具有相同名称的只读属性的"getter",并将voltage的文档字符串设置为"Getthecurrentvoltage."
特征属性对象具有getter,setter以及deleter方法,它们可用作装饰器来创建该特征属性的副本,并将相应的访问函数设为所装饰的函数。
这最好是用一个例子来解释:
classC:
def__init__(self):
self._x=None
@property
defx(self):
"""I'mthe'x'property."""
returnself._x
@x.setter
defx(self,value):
self._x=value
@x.deleter
defx(self):
delself._x
上述代码与第一个例子完全等价。
注意一定要给附加函数与原始的特征属性相同的名称(在本例中为x。
)
返回的特征属性对象同样具有与构造器参数相对应的属性fget,fset和fdel。
3.5版更變:特征属性对象的文档字符串现在是可写的。
classrange(stop)
classrange(start,stop[,step])
虽然被称为函数,但range实际上是一个不可变的序列类型,参见在range对象与序列类型---list,tuple,range中的文档说明。
repr(object)¶
Returnastringcontainingaprintablerepresentationofanobject.Formany
types,thisfunctionmakesanattempttoreturnastringthatwouldyieldan
objectwiththesamevaluewhenpassedtoeval();otherwise,the
representationisastringenclosedinanglebracketsthatcontainsthename
ofthetypeoftheobjecttogetherwithadditionalinformationoften
includingthenameandaddressoftheobject.Aclasscancontrolwhatthis
functionreturnsforitsinstancesbydefininga__repr__()method.
Ifsys.displayhook()isnotaccessible,thisfunctionwillraise
RuntimeError.
reversed(seq)¶
返回一个反向的iterator。
seq必须是一个具有__reversed__()方法的对象或者是支持该序列协议(具有从0开始的整数类型参数的__len__()方法和__getitem__()方法)。
round(number[,ndigits])¶
返回number舍入到小数点后ndigits位精度的值。
如果ndigits被省略或为None,则返回最接近输入值的整数。
对于支持round()方法的内置类型,结果值会舍入至最接近的10的负ndigits次幂的倍数;如果与两个倍数同样接近,则选用偶数。
因此,round(0.5)和round(-0.5)均得出0而round(1.5)则为2。
ndigits可为任意整数值(正数、零或负数)。
如果省略了ndigits或为None,则返回值将为整数。
否则返回值与number的类型相同。
对于一般的Python对象number,round将委托给number.__round__。
備註
对浮点数执行round()的行为可能会令人惊讶:例如,round(2.675,2)将给出2.67而不是期望的2.68。
这不算是程序错误:这一结果是由于大多数十进制小数实际上都不能以浮点数精确地表示。
请参阅浮點數運算:問題與限制了解更多信息。
classset([iterable])
返回一个新的set对象,可以选择带有从iterable获取的元素。
set是一个内置类型。
请查看set和集合类型---set,frozenset获取关于这个类的文档。
有关其他容器请参看内置的frozenset,list,tuple和dict类,以及collections模块。
setattr(object,name,value)¶
本函数与getattr()相对应。
其参数为一个对象、一个字符串和一个任意值。
字符串可以为某现有属性的名称,或为新属性。
只要对象允许,函数会将值赋给属性。
如setattr(x,'foobar',123)等价于x.foobar=123。
備註
由于私有名称混合发生在编译时,因此必须手动混合私有属性(以两个下划线打头的属性)名称以便使用setattr()来设置它。
classslice(stop)¶
classslice(start,stop[,step])
返回一个slice对象,代表由range(start,stop,step)指定索引集的切片。
其中参数start和step的默认值为None。
切片对象具有只读数据属性start、stop和step,只是返回对应的参数值(或默认值)。
这几个属性没有其他明确的功能;不过NumPy和其他第三方扩展会用到。
在使用扩展索引语法时,也会生成切片对象。
例如:a[start:stop:step]或a[start:stop,i]。
另一种方案是返回迭代器对象,可参阅itertools.islice()。
sorted(iterable,/,*,key=None,reverse=False)¶
根据iterable中的项返回一个新的已排序列表。
有兩個選擇性引數,只能使用關鍵字引數來指定。
key指定带有单个参数的函数,用于从iterable的每个元素中提取用于比较的键(例如key=str.lower)。
默认值为None(直接比较元素)。
reverse为一个布尔值。
如果设为True,则每个列表元素将按反向顺序比较进行排序。
使用functools.cmp_to_key()可将老式的cmp函数转换为key函数。
内置的sorted()确保是稳定的。
如果一个排序确保不会改变比较结果相等的元素的相对顺序就称其为稳定的---这有利于进行多重排序(例如先按部门、再按薪级排序)。
排序算法只使用B->C->A->object并且type的值为B,则super()将会搜索C->A->object。
object-or-type的__mro__属性列出了getattr()和super()所共同使用的方法解析搜索顺序。
该属性是动态的,可以在任何继承层级结构发生更新的时候被改变。
如果省略第二个参数,则返回的超类对象是未绑定的。
如果第二个参数为一个对象,则isinstance(obj,type)必须为真值。
如果第二个参数为一个类型,则issubclass(type2,type)必须为真值(这适用于类方法)。
super有两个典型用例。
在具有单继承的类层级结构中,super可用来引用父类而不必显式地指定它们的名称,从而令代码更易维护。
这种用法与其他编程语言中super的用法非常相似。
第二个用例是在动态执行环境中支持协作多重继承。
此用例为Python所独有而不存在于静态编码语言或仅支持单继承的语言当中。
这使用实现“菱形图”成为可能,即有多个基类实现相同的方法。
好的设计强制要求这样的方法在每个情况下都具有相同的调用签名(因为调用顺序是在运行时确定的,也因为这个顺序要适应类层级结构的更改,还因为这个顺序可能包括在运行时之前未知的兄弟类)。
对于以上两个用例,典型的超类调用看起来是这样的:
classC(B):
defmethod(self,arg):
super().method(arg)#Thisdoesthesamethingas:
#super(C,self).method(arg)
除了方法查找之外,super()也可用于属性查找。
一个可能的应用场合是在上级或同级类中调用描述器。
请注意super()是作为显式加点属性查找的绑定过程的一部分来实现的,例如super().__getitem__(name)。
它做到这一点是通过实现自己的__getattribute__()方法,这样就能以可预测的顺序搜索类,并且支持协作多重继承。
对应地,super()在像super()[name]这样使用语句或操作符进行隐式查找时则未被定义。
还要注意的是,除了零个参数的形式以外,super()并不限于在方法内部使用。
两个参数的形式明确指定参数并进行相应的引用。
零个参数的形式仅适用于类定义内部,因为编译器需要填入必要的细节以正确地检索到被定义的类,还需要让普通方法访问当前实例。
对于有关如何使用super()来如何设计协作类的实用建议,请参阅使用super()的指南。
classtuple([iterable])
虽然被称为函数,但tuple实际上是一个不可变的序列类型,参见在元组与序列类型---list,tuple,range中的文档说明。
classtype(object)¶
classtype(name,bases,dict,**kwds)
传入一个参数时,返回object的类型。
返回值是一个type对象,通常与object.__class__所返回的对象相同。
推荐使用isinstance()内置函数来检测对象的类型,因为它会考虑子类的情况。
传入三个参数时,返回一个新的type对象。
这在本质上是class语句的一种动态形式,name字符串即类名并会成为__name__属性;bases元组包含基类并会成为__bases__属性;如果为空则会添加所有类的终极基类object。
dict字典包含类主体的属性和方法定义;它在成为__dict__属性之前可能会被拷贝或包装。
下面两条语句会创建相同的type对象:
>>>classX:
...a=1
...
>>>X=type('X',(),dict(a=1))
另請參閱类型对象。
提供给三参数形式的关键字参数会被传递给适当的元类机制(通常为__init_subclass__()),相当于类定义中关键字(除了metaclass)的行为方式。
另請參閱自定义类创建。
3.6版更變:type的子类如果未重载type.__new__,将不再能使用一个参数的形式来获取对象的类型。
vars([object])¶
返回模块、类、实例或任何其它具有__dict__属性的对象的__dict__属性。
模块和实例这样的对象具有可更新的__dict__属性;但是,其它对象的__dict__属性可能会设为限制写入(例如,类会使用types.MappingProxyType来防止直接更新字典)。
不带参数时,vars()的行为类似locals()。
请注意,locals字典仅对于读取起作用,因为对locals字典的更新会被忽略。
如果指定了一个对象但它没有__dict__属性(例如,当它所属的类定义了__slots__属性时)则会引发TypeError异常。
zip(*iterables,strict=False)¶
在多个迭代器上并行迭代,从每个迭代器返回一个数据项组成元组。
例如:
>>>foriteminzip([1,2,3],['sugar','spice','everythingnice']):
...print(item)
...
(1,'sugar')
(2,'spice')
(3,'everythingnice')
更正式的说法:zip()返回元组的迭代器,其中第i个元组包含的是每个参数迭代器的第i个元素。
不妨换一种方式认识zip():它会把行变成列,把列变成行。
这类似于矩阵转置。
zip()是延迟执行的:直至迭代时才会对元素进行处理,比如for循环或放入list中。
值得考虑的是,传给zip()的可迭代对象可能长度不同;有时是有意为之,有时是因为准备这些对象的代码存在错误。
Python提供了三种不同的处理方案:
默认情况下,zip()在最短的迭代完成后停止。
较长可迭代对象中的剩余项将被忽略,结果会裁切至最短可迭代对象的长度:
>>>list(zip(range(3),['fee','fi','fo','fum']))
[(0,'fee'),(1,'fi'),(2,'fo')]
通常zip()用于可迭代对象等长的情况下。
这时建议用strict=True的选项。
输出与普通的zip()相同:。
>>>list(zip(('a','b','c'),(1,2,3),strict=True))
[('a',1),('b',2),('c',3)]
与默认行为不同的是,它会检查可迭代对象的长度是否相同,如果不相同则触发ValueError。
>>>list(zip(range(3),['fee','fi','fo','fum'],strict=True))
Traceback(mostrecentcalllast):
...
ValueError:zip()argument2islongerthanargument1
如果未指定strict=True参数,所有导致可迭代对象长度不同的错误都会被抑制,这可能会在程序的其他地方表现为难以发现的错误。
为了让所有的可迭代对象具有相同的长度,长度较短的可用常量进行填充。
这可由itertools.zip_longest()来完成。
极端例子是只有一个可迭代对象参数,zip()会返回一个一元组的迭代器。
如果未给出参数,则返回一个空的迭代器。
小技巧:
可确保迭代器的求值顺序是从左到右的。
这样就能用zip(*[iter(s)]*n,strict=True)将数据列表按长度n进行分组。
这将重复相同的迭代器n次,输出的每个元组都包含n次调用迭代器的结果。
这样做的效果是把输入拆分为长度为n的块。
zip()与*运算符相结合可以用来拆解一个列表:
>>>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)¶
備註
与importlib.import_module()不同,这是一个日常Python编程中不需要用到的高级函数。
此函数会由import语句发起调用。
它可以被替换(通过导入builtins模块并赋值给builtins.__import__)以便修改import语句的语义,但是强烈不建议这样做,因为使用导入钩子(参见PEP302)通常更容易实现同样的目标,并且不会导致代码问题,因为许多代码都会假定所用的是默认实现。
同样也不建议直接使用__import__()而应该用importlib.import_module()。
本函数会导入模块name,利用globals和locals来决定如何在包的上下文中解释该名称。
fromlist给出了应从name模块中导入的对象或子模块的名称。
标准的实现代码完全不会用到locals参数,只用到了globals用于确定import语句所在的包上下文。
level指定是使用绝对还是相对导入。
0(默认值)意味着仅执行绝对导入。
level为正数值表示相对于模块调用__import__()的目录,将要搜索的父目录层数(详情参见PEP328)。
当name变量的形式为package.module时,通常将会返回最高层级的包(第一个点号之前的名称),而不是以name命名的模块。
但是,当给出了非空的fromlist参数时,则将返回以name命名的模块。
例如,语句importspam的结果将为与以下代码作用相同的字节码:
spam=__import__('spam',globals(),locals(),[],0)
语句importspam.ham的结果将为以下调用:
spam=__import__('spam.ham',globals(),locals(),[],0)
请注意在这里__import__()是如何返回顶层模块的,因为这是通过import语句被绑定到特定名称的对象。
另一方面,语句fromspam.hamimporteggs,sausageassaus的结果将为
_temp=__import__('spam.ham',globals(),locals(),['eggs','sausage'],0)
eggs=_temp.eggs
saus=_temp.sausage
在这里,spam.ham模块会由__import__()返回。
要导入的对象将从此对象中提取并赋值给它们对应的名称。
如果您只想按名称导入模块(可能在包中),请使用importlib.import_module()
3.3版更變:level的值不再支持负数(默认值也修改为0)。
3.9版更變:当使用了命令行参数-E或-I时,环境变量PYTHONCASEOK现在将被忽略。
註解
1
剖析器只接受Unix風格的行結束符。
如果您從檔案中讀取程式碼,請確保用換行符轉換模式轉換Windows或Mac風格的換行符。
上個主題
簡介
下個主題
內建常數
此頁面
回報錯誤
顯示原始碼
瀏覽
索引
模組|
下一頁|
上一頁|
Python»
3.10.6Documentation»
Python標準函式庫(StandardLibrary)»
內建函式
|
延伸文章資訊
- 1內建字串函式· Introducing python - iampennywu
現在要開始使用Python 的內建函式:一段可執行一些工作,且擁有名稱的程式。 ... 字串.split('分隔符號')字串函式→ 將「一個字串」分解成「一個短字串的串列」.
- 2Python內建函數大全 - 程式前沿
- 3函式· Introducing python - iampennywu
Python 所有東西都是物件,包括函式、數字、字串、tuple、串列、字典 ... sum(),是內建的Python 函式,可計算它的可迭代數值(整數或浮點數)引數的總和值 ...
- 4內建函式— Python 3.10.6 說明文件
內建函式¶. Python 直譯器有內建多個可隨時使用的函式和型別。 ... 如果x 不是Python 的 int 物件,那它需要定義 __index__() method 回傳一個整數。舉例來說:.
- 5第12 章函式 - Python
def:函式定義(define),是複合指令,因此需以冒號結尾,且其本體指令群需縮排一層 ... Python 提供一個名為__name__ 的內建變數,如果一個程式檔案被執行了, ...