翻譯總結自官方文件:原文地址
Python 直譯器內建了許多函式和型別,列表如下(按字母排序)(省略了幾個我沒用過或者不常用的)。
- | - | 內建函式表 | - | - |
---|---|---|---|---|
abs() | delattr() | hash() | memoryview() | set() |
all() | dict() | help() | min() | setattr() |
any() | dir() | hex() | next() | slice() |
ascii() | divmod() | id() | object() | sorted() |
bin() | enumerate() | input() | oct() | staticmethod() |
bool() | eval() | int() | open() | str() |
breakpoint() | exec() | isinstance() | ord() | sum() |
bytearray() | filter() | issubclass() | pow() | super() |
bytes() | float() | iter() | print() | tuple() |
callable() | format() | len() | property() | type() |
chr() | frozenset() | list() | range() | vars() |
classmethod() | getattr() | locals() | repr() | zip() |
compile() | globals() | map() | reversed() | __import__() |
complex() | hasattr() | max() | round() |
abs(x)
返回一個數字的絕對值。引數可以是整數或浮點數。如果引數是一個複數,則返回它的模。
all(iterable)
如果 iterable
的所有元素均為 True(或 iterable
為空),則返回 True
。相當於:
def all(iterable):
for element in iterable:
if not element:
return False
return True
複製程式碼
any(iterable)
如果 iterable
中有任何一個元素為 true,則返回 True
。如果 iterable
為空,則返回 False
。相當於:
def any(iterable):
for element in iterable:
if element:
return True
return False
複製程式碼
ascii(object)
類似 repr()
,返回一個包含物件的可列印表示的字串,但使用 \x
,\u
或 \U
轉義符轉義由 repr()
返回的字串中的非 ASCII 字元。這會生成一個類似於 Python 2 中 repr()
返回的字串。
In [1]: s = 'python \n 中文'
In [2]: ascii(s)
Out[2]: "'python \\n \\u4e2d\\u6587'"
In [3]: repr(s)
Out[3]: "'python \\n 中文'"
複製程式碼
bin(x)
將整數轉換為以 “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')
複製程式碼
有關更多資訊,另請參閱 format()
。
當 x
不是 int
型別時
In [1]: class Test:
...: def __init__(self, n):
...: self.n = n
...:
...: def __index__(self):
...: return self.n
...:
In [2]: t = Test(10)
In [3]: bin(t)
Out[3]: '0b1010'
複製程式碼
class bool([x])
返回一個布林值,即 True
或 False
中的一個。 x 使用標準真值測試方式進行轉換。如果 x 為 false 或省略,則返回 False
; 否則返回 True
。 bool 類是 int
的子類。它不能進一步子類化。它唯一的例項是 False
和 True
。
class bytearray([source[, encoding[, errors]]])
返回一個新的位元組陣列。 bytearray 類是一個在 0 <= x < 256
範圍內的可變整數序列。
可選的 source
引數可以用幾種不同的方式初始化陣列:
- 如果它是一個字串,則還必須給出 encoding(以及可選的 errors)引數; 然後
bytearray()
使用str.encode()
將字串轉換為位元組。 - 如果它是一個整數,則將其作為陣列的長度,並將用空位元組進行初始化。
- 如果它是符合緩衝區介面的物件,則將使用該物件的只讀緩衝區來初始化位元組陣列。
- 如果它是一個 iterable,必須是
0 <= x <256
範圍內的可迭代物件,它們將被用作陣列的初始內容。
沒有引數,就會建立一個大小為 0 的陣列。
In [11]: bytearray(5)
Out[11]: bytearray(b'\x00\x00\x00\x00\x00')
In [12]: bytearray([23, 32, 4, 67, 9, 96, 123])
Out[12]: bytearray(b'\x17 \x04C\t`{')
In [13]: bytearray()
Out[13]: bytearray(b'')
複製程式碼
class bytes([source[, encoding[, errors]]])
返回一個新的 “bytes” 物件,它是一個在 0 <= x <256
範圍內的不可變整數序列。bytes
是 bytearray
的不可變版本 - 它具有相同的非變異方法和相同的索引和切片行為。
因此,建構函式引數解釋請參考 bytearray()
。
位元組物件也可以使用文字建立。請參閱字串和位元組文字。
callable(object)
如果 object 引數可呼叫,則返回 True
,否則返回 False
。如果返回 true,呼叫失敗仍然是可能的,但如果是 false,呼叫 object 將永遠不會成功。請注意,類是可呼叫的(呼叫一個類返回一個新的例項); 如果類有一個 __call __()
方法,則例項可以被呼叫。
3.2版本中的新功能:此功能在 Python 3.0 中首先被刪除,然後在 Python 3.2 中恢復。
In [19]: a = 1
In [20]: callable(a)
Out[20]: False
In [21]: def func():
...: pass
...:
In [22]: callable(func)
Out[22]: True
In [23]: class A:
...: pass
...:
In [24]: a = A()
In [25]: callable(a)
Out[25]: False
In [26]: class A:
...: def __call__(self, *args, **kwargs):
...: pass
...:
In [27]: a = A()
In [28]: callable(a)
Out[28]: True
複製程式碼
chr(i)
返回表示 Unicode 程式碼點為整數 i 的字元的字串。例如,chr(97)
返回字串 'a'
,而 chr(8364)
返回字串 '€'
。這是 ord()
的逆過程。
引數的有效範圍是從 0 到 1,114,111(基於 16 的 0x10FFFF)。如果超出這個範圍,將會丟擲 ValueError。
@classmethod
將方法轉換為類方法。
類方法將類作為第一個引數接收(隱式的),就像例項方法接收例項一樣。為了宣告一個類方法,習慣用法如下:
class C:
@classmethod
def f(cls, arg1, arg2, ...): ...
複製程式碼
!> 注意:類方法和靜態方法不是一個概念
class complex([real[, imag]])
返回值為 real + imag*1j 的複數或者將字串或數字轉換為複數。如果第一個引數是一個字串,它將被解釋為一個複數,並且該函式必須在沒有第二個引數的情況下被呼叫。第二個引數不能是一個字串。每個引數可以是任何數字型別(包括複數)。如果省略了 imag,它將預設為零,並且建構函式用作像 int 和 float 這樣的數字轉換。如果兩個引數均被省略,則返回 0j。
!> 從字串轉換時,該字串不得在 +
或 -
運算子周圍包含空格。例如,complex('1+2j')
很好,但 complex('1 + 2j')
會引發 ValueError
。
delattr(object, name)
引數是一個物件和一個字串。該字串必須是物件屬性之一的名稱。該函式刪除指定的屬性(只要該物件允許)。例如, delattr(x, 'foobar')
等價於 del x.foobar
。
dict
class dict(**kwarg
)
class dict(mapping
, **kwarg
)
class dict(iterable
, **kwarg
)
建立一個新的字典
In [38]: dict(name='jack',age=18)
Out[38]: {'name': 'jack', 'age': 18}
In [39]: dict({'name': 'jack'}, age=18)
Out[39]: {'name': 'jack', 'age': 18}
In [40]: dict([('name', 'jack'),('age', 18)])
Out[40]: {'name': 'jack', 'age': 18}
複製程式碼
dir([object])
嘗試返回 object 的有效屬性列表。如果沒有引數,則返回當前本地作用域中的名稱列表。
如果物件具有名為 __dir__()
的方法,則將呼叫此方法,並且必須返回屬性列表。這允許實現自定義 __getattr__()
或 __getattribute__()
函式的物件自定義 dir()
報告其屬性。
預設的 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']
複製程式碼
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)
。
In [53]: divmod(10, 3)
Out[53]: (3, 1)
In [54]: divmod(10.1, 3)
Out[54]: (3.0, 1.0999999999999996)
複製程式碼
enumerate( iterable, start=0)
返回一個列舉物件。 iterable 必須是一個序列,一個迭代器或其他支援迭代的物件。由 enumerate()
返回的迭代器的 __next__()
方法返回一個元組,該元組包含一個計數(從 start 開始,預設值為 0)以及遍歷迭代獲得的值。
>>> 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
複製程式碼
filter(function, iterable)
用那些 function 返回 true 的 iterable 元素構造一個迭代器。iterable 可以是序列,支援迭代的容器或迭代器。如果 function 為 None
,則假定標識函式為 false,即為 false 的所有元素都被刪除。
!> 請注意,如果 function 不是 None
,filter(function, iterable)
等價於生成器表示式 (item for item in iterable if function(item))
。如果 function 是 None
,等價於生成器表示式 (item for item in iterable if item)
。
In [8]: list(filter(None, [False, True, 0, 'test']))
Out[8]: [True, 'test']
複製程式碼
class float([x])
返回一個由數字或字串 x 構造的浮點數。
在刪除前後空白字元後,輸入必須符合以下語法:
sign ::= "+" | "-"
infinity ::= "Infinity" | "inf"
nan ::= "nan"
numeric_value ::= floatnumber | infinity | nan
numeric_string ::= [sign] numeric_value
複製程式碼
對於一般的 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
複製程式碼
format(value[, format_spec])
將值轉換為 “格式化” 表示,由 format_spec 控制。 format_spec 的解釋將取決於 value 引數的型別,不過,大多數內建型別都使用標準格式化語法:格式化規範迷你語言。
預設 format_spec 是一個空字串,通常與呼叫 str(value) 的效果相同。
對 format(value, format_spec)
的呼叫被轉換為 type(value).__format__(value, format_spec)
,它在搜尋 value 的 __format__()
方法時繞過例項字典。如果方法搜尋到達 object 並且 format_spec 非空,或者 format_spec 或返回值不是字串,則會引發 TypeError 異常。
在 version 3.4 中:如果 format_spec 不是空字串,則 object().__format__(format_spec)
會引發 TypeError
。
class frozenset([iterable])
返回一個新的 frozenset 物件,可選地使用來自 iterable 的元素。 frozenset
是一個內建的類。
frozenset
是不可變的,存在雜湊值,它可以作為字典的 key,也可以作為其它集合的元素。一旦建立便不能更改,沒有 add,remove 方法。
getattr(object, name[, default])
返回 object 的指定屬性的值。name 必須是字串。如果字串是 object 屬性之一的名稱,則結果是該屬性的值。例如,getattr(x, 'foobar')
等同於 x.foobar
。如果指定的屬性不存在,則返回預設值(如果提供),否則引發 AttributeError
。
globals()
返回表示當前全域性符號表的字典。它總是當前模組的字典(在函式或方法內部,它是定義它的模組,而不是從中呼叫它的模組)。
hasattr(object, name)
引數是一個物件和一個字串。如果字串是 object 屬性之一的名稱,則結果為 True
,否則為 False
。(這是通過呼叫 getattr(object, name)
並檢視它是否引發 AttributeError
實現的。)
hash(object)
返回物件的雜湊值(如果有)。雜湊值是整數。它們用於在字典查詢期間快速比較字典鍵。比較相等的數值具有相同的雜湊值(即使它們具有不同的型別,就像 1 和 1.0 一樣)。
!> 對於具有自定義 __hash__()
方法的物件,請注意,hash()
會根據主機的位寬截斷返回值。
In [1]: class A:
...: def __hash__(self):
...: return 111111111111111111111111111111111111111
...:
In [2]: a = A()
In [3]: hash(a)
Out[3]: 1552656422630569496
In [4]: class A:
...: def __hash__(self):
...: return 11111111111
...:
...:
In [5]: a = A()
In [6]: hash(a)
Out[6]: 11111111111
複製程式碼
help([object])
呼叫內建的幫助系統。 (此功能用於互動式使用。)如果未提供引數,則互動式幫助系統將在直譯器控制檯上啟動。如果引數是一個字串,那麼該字串將被查詢為模組,函式,類,方法,關鍵字或文件主題的名稱,並在控制檯上列印幫助頁面。如果引數是任何其他型別的物件,則會生成物件上的幫助頁面。
hex(x)
將整數轉換為以 “0x” 為字首的小寫十六進位制字串。如果 x 不是 Python int 物件,則必須定義返回整數的 __index __()
方法。一些例子:
>>> hex(255)
'0xff'
>>> hex(-42)
'-0x2a'
複製程式碼
如果要將整數轉換為帶有字首或不帶字首的大寫或小寫十六進位制字串,可以使用以下任一方式:
>>> '%#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')
複製程式碼
!> 要獲取浮點數的十六進位制字串表示形式,請使用 float.hex()
方法。
id(object)
返回一個物件的 “identity”。它是一個整數,它在其生命週期中保證對這個物件唯一且恆定。具有非重疊生命週期的兩個物件可能具有相同的 id() 值。
CPython 實現細節:這是記憶體中物件的地址。
input([prompt])
如果 prompt 引數存在,則將其寫入標準輸出而沒有尾隨換行符。然後該函式從輸入中讀取一行,將其轉換為一個字串(剝離尾隨的換行符),然後返回該行。讀取 EOF 時,引發 EOFError。例:
>>> s = input('--> ')
--> Monty Python's Flying Circus
>>> s
"Monty Python's Flying Circus"
複製程式碼
int
class int(x=0)
class int(x, base=10)
返回一個由數字或字串 x 構造的整數物件,如果沒有給出引數,則返回 0。如果 x 不是數字,則返回 x.__int__()
。
In [22]: class A:
...: def __int__(self):
...: return 10
...:
In [23]: a = A()
In [24]: int(a)
Out[24]: 10
複製程式碼
如果 x 不是數字或給定了 base,那麼 x 必須是一個 string, bytes 或 bytearray 例項,它表示以 base 為基數的整數文字。或者,文字可以在前面加上 +
或 -
(兩者之間沒有空格)。
In [25]: int('-10')
Out[25]: -10
In [26]: int('+10')
Out[26]: 10
In [27]: int('- 10')
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-27-a62cc7794a18> in <module>()
----> 1 int('- 10')
ValueError: invalid literal for int() with base 10: '- 10'
In [28]: int('1000',2)
Out[28]: 8
In [29]: int('ff',16)
Out[29]: 255
複製程式碼
isinstance(object, classinfo)
如果 object 引數是 classinfo 引數的例項或其(直接,間接或虛擬)子類的例項,則返回 true。如果 object 不是給定型別的物件,則該函式總是返回 false。如果 classinfo 是型別物件的元組, object 是其中任何一個型別的例項,則返回 true。如果 classinfo 不是型別或一組型別的元組,則會引發 TypeError
異常。
In [30]: isinstance(10, int)
Out[30]: True
In [31]: isinstance("str", (int, str))
Out[31]: True
In [32]: isinstance(max, int)
Out[32]: False
複製程式碼
issubclass(class, classinfo)
如果 class 是 classinfo 的子類(直接,間接或虛擬),則返回 true。一個類被認為是它自己的一個子類。 classinfo 可以是類物件的元組,在這種情況下,將檢查 classinfo 中的每個條目。在任何其他情況下,都會引發 TypeError
異常。
In [34]: issubclass(int, int)
Out[34]: True
In [35]: issubclass(10, int)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-35-37910f193c07> in <module>()
----> 1 issubclass(10, int)
TypeError: issubclass() arg 1 must be a class
In [36]: issubclass(int, str)
Out[36]: False
複製程式碼
iter(object[, sentinel])
返回一個迭代器物件。根據第二個引數是否存在,第一個引數的解釋有所不同。如果沒有第二個引數,object 必須是支援迭代協議(__iter__()
方法)的集合物件,或者它必須支援序列協議(整數引數從 0 開始的 __getitem__()
方法)。如果它不支援這兩種協議,則會引發 TypeError
。如果給出了第二個引數 sentinel,那麼 object 必須是可呼叫的物件。在這種情況下建立的迭代器將呼叫沒有引數的 object,以便對其 __next__()
方法進行呼叫;如果返回的值等於 sentinel,則會觸發StopIteration
,否則將返回該值。
第二種形式的 iter()
的一個例子是按行讀取檔案,直到到達某一行。以下示例讀取檔案,直到 readline()
方法返回空字串:
with open('mydata.txt') as fp:
for line in iter(fp.readline, ''):
process_line(line)
複製程式碼
len(s)
返回物件的長度(條目數量)。引數可以是一個序列(如 string,bytes,tuple,list 或 range)或集合(如字典,set 或 frozenset)。
也可用於實現了 __len__()
方法的任意物件
In [40]: class A:
...: def __len__(self):
...: return 10
In [41]: a = A()
In [42]: len(a)
Out[42]: 10
複製程式碼
class list([iterable])
list 不是一個函式,它實際上是一個可變的序列型別。
locals()
更新並返回表示當前本地符號表的字典。在函式塊中呼叫時,locals() 返回自由變數,但不能在類塊中呼叫。
!> 不應該修改其中的內容;更改可能不會影響直譯器使用的本地變數和自由變數的值。
map(function, iterable, ...)
返回一個將 function 應用於每個 iterable item 的迭代器,從而產生結果。如果傳遞額外的 iterable 引數,function 必須採用多個引數並應用於並行所有迭代中的專案。使用多個迭代器時,當最短迭代器耗盡時,迭代器停止。
In [54]: list1 = [1, 2, 3, 4, 5, 6]
...: list2 = [4, 3, 7, 1, 9]
...:
In [55]: list(map(lambda x, y: x+y, list1, list2))
Out[55]: [5, 5, 10, 5, 14]
複製程式碼
max
max(iterable, *[, key, default])
max(arg1, arg2, *args[, key])
返回 iterable 中的最大項或兩個或更多個引數中最大的項。
如果提供了一個位置引數,它應該是一個 iterable。iterable 中最大的 item 被返回。如果提供了兩個或多個位置引數,則返回最大的位置引數。
有兩個可選的關鍵字引數。 key 引數指定一個像 list.sort()
那樣的單引數排序函式。如果提供的迭代器為空,則 default 引數指定要返回的物件。如果迭代器為空且未提供預設值,則會引發 ValueError
。
如果最大值包含多個 item,則該函式返回遇到的第一個 item。這與 sorted(iterable, key=keyfunc, reverse=True)[0]
和 heapq.nlargest(1, iterable, key=keyfunc)
等其他排序工具穩定性保持一致。
In [60]: list1 = [4, 3, 7, 1, 9]
In [61]: max(list1, key=lambda x: -x)
Out[61]: 1
In [62]: max([])
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-62-a48d8f8c12de> in <module>()
----> 1 max([])
ValueError: max() arg is an empty sequence
In [63]: max([], default=1)
Out[63]: 1
複製程式碼
min
min(iterable, *[, key, default])
min(arg1, arg2, *args[, key])
返回 iterable 中的最小項或兩個或更多個引數中的最小項。
如果提供了一個位置引數,它應該是一個 iterable。iterable 中的最小項被返回。如果提供兩個或多個位置引數,則返回最小的位置引數。
有兩個可選的關鍵字引數。 key 引數指定一個像 list.sort()
那樣的單引數排序函式。如果提供的迭代器為空,則 default 引數指定要返回的物件。如果迭代器為空且未提供預設值,則會引發 ValueError
。
如果最小值包含多個 item,則該函式返回遇到的第一個 item。這與 sorted(iterable, key=keyfunc, reverse=True)[0]
和 heapq.nlargest(1, iterable, key=keyfunc)
等其他排序工具穩定性保持一致。
next(iterator[, default])
通過呼叫 __next__()
方法從 iterator 中檢索下一個 item。如果給出了 default,則在迭代器耗盡時返回它,否則引發 StopIteration
。
class object
返回一個新的無特徵的物件。object 是所有類的基類。它具有所有 Python 類例項通用的方法。這個函式不接受任何引數。
!> object 沒有 __dict__
,所以不能為 object 類的例項指定任意屬性。
oct(x)
將整數轉換為以 “0o” 為字首的八進位制字串。結果是一個有效的 Python 表示式。如果 x 不是 Python int 物件,則必須定義返回整數的 __index__()
方法。例如:
>>> 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')
複製程式碼
open
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
開啟 file 並返回相應的檔案物件。如果檔案無法開啟,則會引發 OSError
。
file 是一個類似路徑的物件,它提供要開啟的檔案的路徑名(絕對或相對於當前工作目錄)或要包裝的檔案的整數檔案描述符。 (如果給出檔案描述符,則在返回的 I/O 物件關閉時關閉,除非 closefd 設定為 False
。)
mode 是一個可選字串,用於指定開啟檔案的模式。它預設為 'r'
,表示使用文字的方式開啟檔案來讀取。其他常見的值是 'w'
用於寫入(如果檔案已經存在,則覆蓋該檔案),'x'
用於獨佔建立,'a'
用於附加(在某些 Unix 系統上,這意味著無論當前的搜尋位置如何,所有寫操作都會附加到檔案末尾)。在文字模式下,如果未指定編碼,則使用的編碼與平臺相關:呼叫 locale.getpreferredencoding(False)
以獲取當前語言環境編碼。(為了讀取和寫入原始位元組,使用二進位制模式並且不用指定編碼)可用的模式有:
字元 | 含義 |
---|---|
'r' |
用於讀取(預設) |
'w' |
用於寫入,首先覆蓋檔案 |
'x' |
用於獨佔建立,如果檔案已經存在則失敗 |
'a' |
用於寫入,追加到檔案末尾(如果存在) |
'b' |
二進位制模式 |
't' |
文字模式(預設) |
'+' |
開啟磁碟檔案進行更新(讀取和寫入) |
'U' |
通用換行符模式(已棄用) |
預設模式是 'r'
(用於讀取文字,'rt'
的同義詞)。對於二進位制讀寫訪問,模式 'w+b'
開啟並將檔案刪減為 0 位元組。 'r+b'
開啟檔案而不刪減。
如概述中所述,Python 區分二進位制和文字 I/O。以二進位制模式開啟的檔案(mode引數中包括 'b'
)將內容作為位元組物件返回,而不進行任何解碼。在文字模式下(預設情況下,或當 't'
包含在 mode 引數中時),檔案內容以 str 形式返回,位元組首先使用平臺相關編碼進行解碼,或者使用指定的編碼(如果給出)。
!> Python 不依賴於底層作業系統的文字檔案概念;所有的處理都由 Python 自己完成,因此是平臺無關的。
ord(c)
給定一個代表一個Unicode字元的字串,返回一個表示該字元的 Unicode code 點的整數。例如,ord('a')
返回整數 97,ord('€')
(歐元符號)返回 8364。這是 chr()
的逆過程
pow(x, y[, z])
返回 x 的 y 次方;返回 x 的 y 次方再除以 z 的餘數(計算效率比 pow(x, y) % z
更高)。雙引數形式 pow(x, y)
等價於使用冪運算子:x**y
。
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
將 objects 列印到文字流 file 中,以 sep 分隔,然後以 end 結尾。必須將 sep,end,file 和 flush(如果存在)作為關鍵字引數給出。
所有非關鍵字引數都會轉換為像 str()
那樣的字串並寫入流中,由 sep 隔開,然後結束。sep 和 end 都必須是字串;它們也可以是 None,這意味著使用預設值。如果沒有給出物件,print()
將只寫入 end。
檔案引數必須是帶有 write(string)
方法的物件;如果它不存在或是 None,則將使用 sys.stdout
。由於列印的引數會轉換為文字字串,print()
不能用於二進位制模式檔案物件。對於這些,請改用 file.write(...)
。
輸出是否緩衝通常由 file 決定,但如果 flush 關鍵字引數為 true,則強制重新整理流。
property
class property(fget=None, fset=None, fdel=None, doc=None)
返回一個 property 屬性。
fget 是獲取屬性值的函式。fset 是用於設定屬性值的函式。fdel 是刪除屬性值時會呼叫的函式。doc 為該屬性建立一個文件字串。
典型的用法是定義一個託管屬性 x:
class C:
def __init__(self):
self._x = None
def getx(self):
return self._x
def setx(self, value):
self._x = value
def delx(self):
del self._x
x = property(getx, setx, delx, "I'm the 'x' property.")
複製程式碼
如果 c 是 C 的一個例項,c.x
將呼叫 getx,c.x = value
將呼叫 setx ,del c.x
將呼叫 delx。
如果給定,doc 將是 property 屬性的文件字串。否則,該屬性將複製 fget 的文件字串(如果存在)。這使得使用 property()
作為裝飾器可以輕鬆建立只讀屬性:
class Parrot:
def __init__(self):
self._voltage = 100000
@property
def voltage(self):
"""Get the current voltage."""
return self._voltage
複製程式碼
@property
修飾器將 voltage()
方法轉換為具有相同名稱的只讀屬性的 “getter”,並將 voltage 的文件字串設定為 “Get the current voltage.”
。
property 物件具有可用作裝飾器的 getter,setter 和 deleter 方法,這些方法建立屬性的副本並將相應的存取器函式設定為裝飾函式。這可以用一個例子來解釋:
class C:
def __init__(self):
self._x = None
@property
def x(self):
"""I'm the 'x' property."""
return self._x
@x.setter
def x(self, value):
self._x = value
@x.deleter
def x(self):
del self._x
複製程式碼
此程式碼與第一個示例完全等效。請務必為附加函式提供與原始 property 相同的名稱(當前為 x)。
返回的 property 物件也具有與建構函式引數相對應的屬性 fget,fset 和 fdel。
range
range(stop)
range(start, stop[, step])
range 不是一個函式,它實際上是一個不可變的序列型別
In [8]: list(range(10))
Out[8]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
In [9]: list(range(0, 10, 2))
Out[9]: [0, 2, 4, 6, 8]
複製程式碼
repr(object)
返回一個包含物件可列印表示的字串。對於許多型別,此函式嘗試返回一個字串,該字串在傳遞給 eval()
時會產生一個具有相同值的物件,否則該表示是一個用尖括號括起來的字串,其中包含物件型別的名稱以及其他資訊包括物件的名稱和地址。一個類可以通過定義 __repr__()
方法來控制此函式為其例項返回的內容。
reversed(seq)
返回一個反向迭代器。seq 必須是具有 __reversed__()
方法或支援序列協議( __len__()
方法和整數引數從 0 開始的 __getitem__()
方法)的物件。
round(number[, ndigits])
返回在小數點後舍入到精度 ndigits 的 number 。如果 ndigits 被省略或者是 None
,它將返回最接近的整數表示。
對於支援 round()
的內建型別,值舍入到 10 的最接近的負 ndigits 次冪的倍數;如果離兩個倍數的距離相等,則舍入選擇偶數(因此,round(0.5)
和 round(-0.5)
都是 0,而 round(1.5)
是 2 )。ndigits 可以是任何整數值(正數,零或負數)。如果使用一個引數呼叫則返回值是一個 integer,否則與 number 的型別相同。
In [10]: type(round(10.9))
Out[10]: int
In [11]: type(round(10.9, 2))
Out[11]: float
複製程式碼
對於一般的 Python 物件 xxx,round(xxx, ndigits)
委託給 xxx.__round__(ndigits)
。
!> round()
對於浮點數的行為可能會令人驚訝:例如,round(2.675, 2)
給出 2.67,而不是預期的 2.68。這不是一個 bug:這是由於大多數小數不能完全表示為浮點數的結果。
class set([iterable])
返回一個新的集合物件,可選地使用來自 iterable 的元素。 set 是一個內建的類。
setattr(object, name, value)
它和 getattr()
是一對。引數是一個物件,一個字串和一個任意值。該字串可以是現有的屬性名或新的屬性名。如果該物件允許,該函式將 value 分配給該屬性。例如,setattr(x, 'foobar', 123)
等同於 x.foobar = 123
。
slice
class slice(stop)
class slice(start, stop[, step])
返回表示由 range(start, stop, step)
指定的一組索引的切片物件。start 和 step 引數預設為 None
。切片物件具有隻讀資料屬性 start、stop 和 step,它們只返回引數值(或它們的預設值)。他們沒有其他明確的功能;然而,它們被 Numerical Python 和其他第三方擴充套件使用。當使用擴充套件索引語法時,也會生成切片物件。例如:a[start:stop:step]
或 a[start:stop, i]
。
In [5]: a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
In [6]: s = slice(1, 8, 2)
In [7]: a[s]
Out[7]: [1, 3, 5, 7]
複製程式碼
sorted
sorted(iterable, *, key=None, reverse=False)
從 iterable 中的 item 中返回一個新的排序列表。
有兩個可選引數,必須將其指定為關鍵字引數。
key 指定一個帶有一個引數的函式,用於從每個列表元素中提取比較鍵:key=str.lower
。預設值是 None
(直接比較元素)。
reverse 是一個布林值。如果設定為 True
,那麼列表元素按照每個比較被顛倒的順序進行排序。
內建的 sorted()
函式排序是穩定的。如果確保不會更改比較相等的元素的相對順序,則排序是穩定的 。
@staticmethod
將方法轉換為靜態方法。
靜態方法不會收到隱式的第一個引數。要宣告一個靜態方法,習慣用法如下:
class C:
@staticmethod
def f(arg1, arg2, ...): ...
複製程式碼
它可以在類(如 C.f()
)或例項(如 C().f()
)上呼叫。
Python 中的靜態方法類似於 Java 或 C++ 中的。
str
class str(object='')
class str(object=b'', encoding='utf-8', errors='strict')
返回一個字串物件
sum(iterable[, start])
從 start 開始,從左到右對 iterable 中的元素求和。 start 預設是 0,迭代的 item 通常是數字,並且不允許 start 的值為字串。
對於有些情況,有比 sum()
更好的選擇, 比如:連線字串應該用 ''.join(sequence)
。浮點數求和用 math.fsum()
。要連線一系列 iterable,請考慮使用 itertools.chain()
。
super([type[, object-or-type]])
返回一個代理物件,它委託方法給父類或者 type 的同級類。這對於訪問類中被覆蓋的繼承方法很有用。搜尋順序與 getattr()
使用的順序相同,只不過 type 本身被跳過。
type 的 __mro__
屬性列出 getattr()
和 super()
使用的方法解析順序。該屬性是動態的,並且可以在繼承層次結構更新時更改。
如果省略第二個引數,則返回的 super 物件是未繫結的。如果第二個引數是一個物件,則 isinstance(obj, type)
必須為 true。如果第二個引數是型別,則 issubclass(type2, type)
必須為 true(這對類方法很有用)。
super 有兩種典型的使用情況。在具有單繼承的類層次結構中,可以使用 super 來引用父類,而不必明確命名它們,從而使程式碼更易於維護。這種使用非常類似於在其他程式語言中 super 的使用。
第二種使用情況是在動態執行環境中支援協同多繼承。這種使用情況是 Python 獨有的,在靜態編譯語言或僅支援單繼承的語言中找不到。這使得可以實現 “菱形圖”,其中多個基類實現相同的方法。良好的設計指出此方法在每種情況下具有相同的呼叫順序(因為呼叫的順序在執行時確定,因為該順序適應類層次結構中的更改,並且因為該順序可以包括在執行時之前未知的兄弟類)。
對於這兩種用例,典型的超類呼叫如下所示:
class C(B):
def method(self, arg):
super().method(arg) # This does the same thing as:
# super(C, self).method(arg)
複製程式碼
!> 注意,super()
只實現顯式點分屬性查詢的繫結過程,例如 super().__getitem__(name)
。它通過實現自己的 __getattribute__()
方法來實現這一點,以便以支援協同多繼承需要的以可預測的順序搜尋類。因此,super()
沒有定義隱式的查詢語句或操作,例如 super()[name]
。
!> 另請注意,除了零引數形式外,super()
不限於在方法內部使用。如果兩個引數的形式指定了準確的引數,就能進行正確的引用。零引數形式只能在類定義中使用,因為編譯器會填充必要的細節以正確檢索正在定義的類,以及訪問普通方法的當前例項。
tuple([iterable])
tuple 不是一個函式,它實際上是一個不可變的序列型別
type
class type(object)
class type(name, bases, dict)
有一個引數時,返回 object 的型別。返回值是一個型別物件,通常與 object.__class__
返回的物件相同。
建議使用 isinstance()
內建函式來測試物件的型別,因為它會考慮子類。
有三個引數時,返回一個新的型別物件。這實質上是類宣告的一種動態形式。name 字串是類名,併成為 __name__
屬性;bases 元組逐項列出基類,併成為 __bases__
屬性;dict 是包含類體的定義的名稱空間,並被複制到標準字典中以變為 __dict__
屬性。例如,以下兩條語句會建立相同的型別物件:
>>> class X:
... a = 1
...
>>> X = type('X', (object,), dict(a=1))
複製程式碼
vars([object])
返回一個模組、字典、類、例項或者其它任何一個具有 __dict__
屬性的物件的 __dict__
屬性。
模組和例項這樣的物件的 __dict__
屬性可以更新;但是其它物件可能對它們的 __dict__
屬性的寫操作有限制(例如,類使用 types.MappingProxyType
來阻止對字典直接更新)。
如果不帶引數,vars()
的行為就像 locals()
。注意,locals 字典只用於讀取,因為對 locals 字典的更新會被忽略。
zip(*iterables)
製作一個迭代器,用於聚合來自每個迭代器的元素。
返回元組的迭代器,其中第 i 個元組包含來自每個引數序列或迭代的第 i 個元素。當最短的輸入迭代耗盡時,迭代器停止。使用單個迭代引數,它將返回 1 元組的迭代器。沒有引數,它返回一個空的迭代器。相當於:
def zip(*iterables):
# zip('ABCD', 'xy') --> Ax By
sentinel = object()
iterators = [iter(it) for it in iterables]
while iterators:
result = []
for it in iterators:
elem = next(it, sentinel)
if elem is sentinel:
return
result.append(elem)
yield tuple(result)
複製程式碼
只有當您不關心後續的,來自較長迭代器的未尾匹配值時,才應該用 zip()
。如果這些值很重要,請改用 itertools.zip_longest()
。
與 *
操作符一起使用 zip()
可用於解壓縮列表:
>>> x = [1, 2, 3]
>>> y = [4, 5, 6]
>>> zipped = zip(x, y)
>>> list(zipped)
[(1, 4), (2, 5), (3, 6)]
>>> x2, y2 = zip(*zip(x, y))
>>> x == list(x2) and y == list(y2)
True
複製程式碼