天天看點

Python3标準庫(一) 内置函數

Python中内置了很多的函數,而學習标準庫我們需要事先熟悉這些内置函數,是以在這裡一個個進行介紹。有些函數比較簡單,隻給予文字描述,而有些函數會給出示例代碼幫助了解。

1、

abs(x)

:傳回一個整數或浮點數的絕對值,如果是複數,傳回它的模。

2、

all(iterable)

:當 iterable 中所有元素都為 True 時(或者 iterable 為空),傳回 True 。

3、

any(iterable)

:當 iterable 中有元素為 True 時,則傳回 True 。如果 iterable 為空,傳回 False 。

4、

ascii(object)

:類似于repr(),傳回一個輸入對象的可列印的字元串。

5、

bin(x)

:将整數 x 轉化為一個二進制字元串。當 x 不是 int 對象時,x 必須實作__index__()方法來傳回一個整型數值。

>>> bin(9)
'0b1001'
           

6、

bool(x)

:将一個值轉換成一個boolean類型的值,省略 x 将傳回 False。

>>> bool()
False
>>> bool('fedora')
True
           

7、

bytearray()

: bytearray的構造函數。bytearray類型是一個可變的整數序列(0 <= 整數 < 256),即位元組數組,例如:

>>> a = bytearray(b'after')
>>> list(a)   # convert a bytearray object into a list of integers
[97, 102, 116, 101, 114]
           

8、

bytes()

: 位元組對象(bytes object)的構造函數。bytes是bytearray的 不可變版本:

>>> a = bytes('after', 'UTF-8')
>>> list(a)   # convert a bytes object into a list of integers
[97, 102, 116, 101, 114]
           

9、

callable(object)

:判斷一個對象是否可調用,如果一個執行個體的類實作了 call()方法,則它是可以調用的。

>>> f = lambda x,y : x+y
>>> callable(f)   # f是函數對象,可調用
True
>>> a = 10   # a 不可調用
>>> callable(a)
False
           

10、

chr(i)

:傳回編碼值 i 對應的字元(str類型),i 的有效值為 0 到 1114111。與

ord()

正好相反。

>>> chr(97)
'a'
           

11、

classmethod(function)

:傳回一個類方法。

12、

compile()

:編譯一個源,傳回一個代碼對象,該代碼對象可以用來作為exec()或者eval()的參數。

13、

complex(re, im)

:複數的構造函數,re 為傳回複數對象的實數部分,im 為虛數部分。

14、

delattr(object, name)

:删除一個對象的屬性,相當于

del object.name

15、

dict()

:字典類型的構造函數。

16、

dir()

:傳回一個包含了 object 所有屬性的清單對象,如果沒有參數,則包含目前作用域的所用屬性。

17、

divmod(a, b)

:傳回一個元組

(a//b, a%b)

18、

enumerate(iterable, start=0)

:傳回一個可疊代的 enumerate object,對其使用 next() 得到的是包含索引和元素的tuple,通常用于同時周遊索引和元素:

>>> seasons = ['Spring', 'Summer', 'Fall', 'Winter']
>>> list(enumerate(seasons))
[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]

>>> for x in enumerate(seasons):   # 周遊
...     print(x, end=' ')
... 
(0, 'Spring') (1, 'Summer') (2, 'Fall') (3, 'Winter')
           

相當于:

def enumerate(sequence, start=0):
    n = start
    for elem in sequence:
        yield n, elem
        n += 1
           

19、

eval()

:執行一段代碼,傳回執行的結果。

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

20、

exec()

:也是執行一段代碼,傳回None。

>>> x = 1
>>> exec('x += 10')
>>> x
11
           

21、

filter(function, iterable)

:過濾器,傳回由使函數 function 傳回True的 iterable 元素組成的疊代器。

>>> lst = [1, 2, 3, 4, 5, 6, 7, 8]
>>> f = lambda x: x%2==0
>>> list(filter(f, lst))
[2, 4, 6, 8]
           

22、

float(x)

:傳回一個浮點型的對象,無參時傳回0.0

23、

format(value[, spec])

:格式化一個值,當參數是一個自定義對象的時候,該對象需要實作__format__()方法。

>>> format(3.1415926, '7.3g')
'   3.14'
           

24、

frozenset()

: frozenset 的構造函數。顧名思義,frozenset是一種 set 類型,且不可改變(沒有add、remove等方法)。

25、

getattr(object, name)

:獲得對象的name屬性,當該屬性不存在的時候可以使用一個預設值作為傳回值。

26、

globals()

:傳回一個包含目前所有全局符号和對應值的字典。

27、

hasattr(object, name)

:判斷對象是否有name屬性。

28、

hash(object)

:傳回對象的 hash 值,object 必須是可哈希的。注意:所有不可變的内置類型都是 hashable 的,比如 string,tuple;所有可變的内置類型都是 unhashable 的,比如 list,dict(即沒有__hash__()方法)。

29、

help()

:檢視一個對象的幫助文檔。

30、

hex(x)

:将一個整數轉為小寫的十六進制字元串(以’0x’開頭),如果不是int對象,需要定義 __index__()方法。

31、

id()

:傳回一個對象的 id 身份,可以看作該對象的記憶體位址。

32、

input()

:讀取一行輸入并傳回一個字元串。

33、

int(x, base=10)

:傳回相應進制的 int 值。

34、

isinstance(object, class)

:判斷對象 object 是不是類 class 或其派生類的執行個體。

35、

issubclass(class,baseclass)

:判斷一個類是否是另一個類的子類。

36、

iter()

:傳回一個可疊代的對象。

37、

len()

:傳回一個長度值,與 object 中的__len__()有關。

38、

list()

: list 的構造函數。

39、

locals()

:傳回一個包含目前局部符号和對應值的字典,與

globals()

對應。

40、

map(function, iterable)

:映射函數,将 iterable 中的每個元素應用到 function 函數,傳回由所有結果組成的疊代器。

>>> it = map(lambda x: x*2, [1,2,3,4])
>>> list(it)
[2, 4, 6, 8]
           

41、

max()

:最大值。

42、

min()

:最小值。

43、

memoryview(obj)

:傳回一個 memory view 對象。

44、

next(iterator)

:産生下一個生成值,與__next__()有關。

45、

object()

:略。

46、

oct(x)

:将一個整數轉為一個八進制字元串。如果不是 int 對象,需要定義__index__()方法。

47、

open()

:打開一個檔案,傳回對應的檔案對象。

48、

ord(c)

:傳回字元 c 的編碼值,與

chr(i)

相反。

>>> ord('a')
97
           

49、

pow(x, y[, z])

pow(x, y)

相當于

x**y

pow(x, y, z)

相當于

pow(x, y) % z

50、

print()

:列印輸出。

51、

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

:函數 property() 的作用就是把類中的方法當作屬性來通路。看下面的例子:

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.")
           

為了操作資料成員 __x,我們需要使用 getx、setx、delx 方法,很麻煩。但是如果通過 property 函數将方法綁定到成員x,那麼當擷取成員x的值時,就會調用getx函數;當給成員x指派時,就會調用setx函數;當删除x時,就會調用delx函數:

c = C()
print(c.x)    # 相當于c.getx()
c.x = 20      # 相當于c.setx(20)
del c.x       # 相當于c.delx()
           

這樣通過 x 間接調用方法操作 __x 就友善多了。

52、

range(start, stop[, step])

:傳回一個序列。

53、

repr(object)

:将對象轉化為可列印的字元串。

54、

reversed()

:倒序序列,對象需要實作__reversed__()方法。

55、

round(number[, ndigits])

:把浮點數轉變成指定小數位數的數,ndigits預設為0。

>>> round(1.75368, 3)
1.754
           

56、

set()

: set 的構造函數。

57、

setattr(object, name, value)

:為一個對象的name屬性設定一個value值。

58、

slice(start,stop[,step])

:切片函數,分割一個可分割的對象,傳回其中的一部分。

59、

sorted()

:排序。

60、

staticmethod(function)

:傳回一個靜态的方法。要知道,一個類的靜态方法沒有隐式的第一個 self 參數,因為靜态方法是獨立于執行個體對象的:

class C:
    @staticmethod
    def f(arg1, arg2, ...): ...
           

61、

str()

:字元串的構造函數。

62、

sum()

:求和。

63、

super()

: super() 常用于繼承中調用父類的方法。例如,類的繼承中,通常需要調用父類的構造方法,以初始化父類部分,有兩種方法能達到這個目的。

方法一:調用未綁定的父類構造方法

class A:
    def __init__(self):
        self.a = 'A_method'

class B:
    def __init__(self):
        self.b = 'B_method'

class C(A, B):
    def __init__(self):
        A.__init__(self)
        B.__init__(self)
        # ...其他超類
        self.c = 'C_method'
           

方法二:使用super函數

class A:
    def __init__(self):
        super().__init__()
        self.a = 'A_method'

class B:
    def __init__(self):
        super().__init__()
        self.b = 'B_method'

class C(A, B):
    def __init__(self):
        super().__init__()    # 等價于super(C,self).__init__()
        self.c = 'C_method'
           

可以看出,方法一更直覺,但是方法二使用 super 函數可以一次初始化所有超類(但要確定所有的超類的構造方法都使用了super函數)。當繼承結構很複雜時,方法二明顯更适用,當然 super 不僅可以用于構造方法還可以用于其他方法。

使用 super 還有一個好處,就是當改變父類名時,不需要再去修改其他地方,便于代碼的維護。

64、

tuple()

:元組的構造函數。

65、

type()

:傳回一個對象的類型,傳回值與

object.__class__

一樣。

66、

vars(object)

:傳回 object 中所有屬性與對應值的字典。沒有參數時作用和

locals()

一樣。

67、

zip()

: zip 函數接受一系列可疊代的對象作為參數,将對象中對應的元素打包成一個個tuple(元組)。

68、

__import__()

:通過import語句調用。

附:reduce函數

在Python 3裡,

reduce()

函數已經被從全局名字空間裡移除了,它現在被放置在

functools

子產品裡。函數原型如下:

reduce(function, iterable[, initializer])
           

function 必須是二進制函數, 在省略第三個參數的情況下,函數先對 iterable 中的第1,2個資料進行操作,得到的結果再與第三個資料用 function() 函數運算……依次類推,最後得到一個結果。 如果初始值 initializer 給定,第一次調用會是 initializer 和第一個元素而不是序列的頭兩個元素。

>>> from functools import reduce
>>> reduce(lambda x,y: x+y, [1,2,3,4,5])
15
>>> reduce(lambda x,y: x+y, [1,2,3,4,5], 10)
25
           

map用于映射,reduce用于歸并。

(全文完)

個人站點:http://songlee24.github.com