Python學習14:內置函數(二)

筆者原創,文章轉載需註明,如果喜歡請點贊+關注,感謝支持!本文爲Python函數學習系列第三篇,python的常用內置函數。

由於篇幅問題,目前官網基於python3.7.7一共包含69個內置函數,共分爲3個章節進行講解,每個章節包含23個內置函數,同時會重點講解常用的的內置函數。

python官網關於內置函數的說明:https://docs.python.org/zh-cn/3.7/library/functions.html
 

目錄

Python常用的內置函數

24.format()

25.frozenset()

26.getattr()

27.globals()

28.hasattr()

29.hash()

30.help()

31.hex()

32.id()

33.int()

34.isinstance()

35.issubclass()

36.iter()

37.len()

38.list()

39.locals()

40.map()

41.max()

42.memoryview()

43.min()

44.next()

45.object()


 

Python常用的內置函數

上一篇內置函數(一)->傳送門

這一篇內容主要是從24.format()內置函數到45.objcet()爲止。


24.format()

說明:字符串格式化函數, 該函數可以接受不限個參數,位置可以不按順序。也可以對數字進行格式化。

format(value[, format_spec])

將 value 轉換爲 format_spec 控制的“格式化”表示。format_spec 的解釋取決於 value 實參的類型,但是大多數內置類型使用標準格式化語法:格式規格迷你語言。

默認的 format_spec 是一個空字符串,它通常和調用 str(value) 的結果相同。

調用 format(value, format_spec) 會轉換成 type(value).__format__(value, format_spec) ,所以實例字典中的 __format__() 方法將不會調用。如果搜索到 object 有這個方法但 format_spec 不爲空,format_spec 或返回值不是字符串,會觸發 TypeError 異常。

在 3.4 版更改: 當 format_spec 不是空字符串時, object().__format__(format_spec) 會觸發 TypeError。

舉例:

list = ['Jack','Tom','Carter','James']
print('{}是當今世界上最優秀的籃球運動員。'.format(list[3]))
James是當今世界上最優秀的籃球運動員。
num = 123.1314 * 5.48
print(format(num,'.2f'))
674.76

備註:format()函數應用場景非常多,熟練使用該內置函數會對編碼帶來極大的便利。


25.frozenset()

說明:字面意思,凍結集合。frozenset() 返回一個凍結的集合,凍結後集合不能再添加或刪除任何元素。

class frozenset([iterable])

返回一個新的 frozenset 對象,它包含可選參數 iterable 中的元素。 frozenset 是一個內置的類。有關此類的文檔,請參閱 frozenset 和 集合類型 --- set, frozenset

請參閱內建的 setlisttuple 和 dict 類,以及 collections 模塊來了解其它的容器。

舉例:

set = (1,2,3,4,5,6,7)
a = frozenset(set)
print(a)
print(type(a))
frozenset({1, 2, 3, 4, 5, 6, 7})
<class 'frozenset'>

 


26.getattr()

說明:getattr() 函數用於返回一個對象屬性值。

getattr(objectname[, default])

返回對象命名屬性的值。name 必須是字符串。如果該字符串是對象的屬性之一,則返回該屬性的值。例如, getattr(x, 'foobar') 等同於 x.foobar。如果指定的屬性不存在,且提供了 default 值,則返回它,否則觸發 AttributeError

備註:類和對象相關的內置函數會在之後的學習中再詳細說明。


27.globals()

說明:

globals()

返回表示當前全局符號表的字典。這總是當前模塊的字典(在函數或方法中,不是調用它的模塊,而是定義它的模塊)。

舉例:

a = 'python'
print(globals())
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x000002991E50F588>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'E:/demo222.py', '__cached__': None, 'a': 'python'}


28.hasattr()

說明:hasattr() 函數用於判斷對象是否包含對應的屬性。

hasattr(objectname)

該實參是一個對象和一個字符串。如果字符串是對象的屬性之一的名稱,則返回 True,否則返回 False。(此功能是通過調用 getattr(object, name) 看是否有 AttributeError 異常來實現的。)

備註:類和對象相關的內置函數會在之後的學習中再詳細說明。


29.hash()

說明:哈希函數,用於獲取一個對象(字符串或者數值等)的哈希值。

Hash,一般翻譯做散列、雜湊,或音譯爲哈希,是把任意長度的輸入(又叫做預映射pre-image)通過散列算法變換成固定長度的輸出,該輸出就是散列值。這種轉換是一種壓縮映射,也就是,散列值的空間通常遠小於輸入的空間,不同的輸入可能會散列成相同的輸出,所以不可能從散列值來確定唯一的輸入值。簡單的說就是一種將任意長度的消息壓縮到某一固定長度的消息摘要的函數。

hash(object)

返回該對象的哈希值(如果它有的話)。哈希值是整數。它們在字典查找元素時用來快速比較字典的鍵。相同大小的數字變量有相同的哈希值(即使它們類型不同,如 1 和 1.0)。

註解

如果對象實現了自己的 __hash__() 方法,請注意,hash() 根據機器的字長來截斷返回值。另請參閱 __hash__()

舉例:

a = 'python'
print(hash(a))
b = 123
print(hash(b))
c = True
print(hash(c))
7725086107883448893
123
1

30.help()

說明:幫助函數,顧名思義。help函數雖然在實際中用不太多,但還是對新手有很大的幫助。

help([object])

啓動內置的幫助系統(此函數主要在交互式中使用)。如果沒有實參,解釋器控制檯裏會啓動交互式幫助系統。如果實參是一個字符串,則在模塊、函數、類、方法、關鍵字或文檔主題中搜索該字符串,並在控制檯上打印幫助信息。如果實參是其他任意對象,則會生成該對象的幫助頁。

請注意如果在函數的形參列表中出現了斜槓 (/),則它在發起調用 help() 的時候意味着斜槓之前的均爲僅限位置形參。 更多相關信息,請參閱 有關僅限位置形參的 FAQ 條目

該函數通過 site 模塊加入到內置命名空間。

在 3.4 版更改: pydoc 和 inspect 的變更使得可調用對象的簽名信息更加全面和一致。

舉例:

help(print())
Help on NoneType object:

class NoneType(object)
 |  Methods defined here:
 |  
 |  __bool__(self, /)
 |      self != 0
 |  
 |  __repr__(self, /)
 |      Return repr(self).
 |  
 |  ----------------------------------------------------------------------
 |  Static methods defined here:
 |  
 |  __new__(*args, **kwargs) from builtins.type
 |      Create and return a new object.  See help(type) for accurate signature.

31.hex()

說明:hex() 函數就是用於將10進制整數轉換成16進制,以字符串形式表示。需要注意傳入的必須是int類型。

hex(x)

將整數轉換爲以“0x”爲前綴的小寫十六進制字符串。如果 x 不是 Python int 對象,則必須定義返回整數的 __index__() 方法。一些例子:

>>> 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() 方法。

舉例:

num = 255
print(hex(num))
0xff

32.id()

說明:id() 函數用於獲取對象的內存地址。

id(object)

返回對象的“標識值”。該值是一個整數,在此對象的生命週期中保證是唯一且恆定的。兩個生命期不重疊的對象可能具有相同的 id() 值。

CPython implementation detail: This is the address of the object in memory.

input([prompt])

如果存在 prompt 實參,則將其寫入標準輸出,末尾不帶換行符。接下來,該函數從輸入中讀取一行,將其轉換爲字符串(除了末尾的換行符)並返回。當讀取到 EOF 時,則觸發 EOFError。例如:

>>>

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

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

舉例:

num = 255.1
print(id(num))
print(id(255))
3090369201296
140732034554880

33.int()

說明:該函數用於int數據類型轉換,python中最常用的內置函數之一。

class int([x])

class int(xbase=10)

返回一個使用數字或字符串 x 生成的整數對象,或者沒有實參的時候返回 0 。如果 x 定義了 __int__()int(x) 返回 x.__int__() 。如果 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__ 方法,則會調用該方法來獲取進制數。以前的版本使用 base.__int__ 而不是 base.__index__

在 3.6 版更改: 您可以使用下劃線將代碼文字中的數字進行分組。

在 3.7 版更改: x 現在只能作爲位置參數。

舉例:

num = 255.1
print(int(num))
255

34.isinstance()

說明:isinstance() 函數來判斷一個對象是否是一個已知的類型,類似 type()。

isinstance() 與 type() 區別:

  • type() 不會認爲子類是一種父類類型,不考慮繼承關係。

  • isinstance() 會認爲子類是一種父類類型,考慮繼承關係。

如果要判斷兩個類型是否相同推薦使用 isinstance()。

isinstance(objectclassinfo)

如果參數 object 是參數 classinfo 的實例或者是其 (直接、間接或 虛擬) 子類則返回 True。 如果 object 不是給定類型的對象,函數將總是返回 False。 如果 classinfo 是類型對象元組(或由其他此類元組遞歸組成的元組),那麼如果 object 是其中任何一個類型的實例就返回 True。 如果 classinfo 既不是類型,也不是類型元組或類型元組的元組,則將引發 TypeError 異常。

舉例:

num = 255.1
print(isinstance(num,str))
print(isinstance(num,int))
print(isinstance(num,float))
False
False
True

備註:isinstance() 函數主要是對傳入參數的值的數據類型和傳入的數據類型進行比對,如果一致,返回True,不一致,返回False。


35.issubclass()

說明:issubclass() 方法用於判斷參數 class 是否是類型參數 classinfo 的子類。

issubclass(classclassinfo)

如果 class 是 classinfo 的 (直接、間接或 虛擬) 子類則返回 True。 類會被視作其自身的子類。 classinfo 也以是類對象的元組,在此情況下 classinfo 中的每個條目都將被檢查。 在任何其他情況下,都將引發 TypeError 異常。

備註:類和對象相關的內置函數會在之後的學習中再詳細說明。


36.iter()

說明:iter() 函數用來生成迭代器。

iter(object[, sentinel])

返回一個 iterator 對象。根據是否存在第二個實參,第一個實參的解釋是非常不同的。如果沒有第二個實參,object 必須是支持迭代協議(有 __iter__() 方法)的集合對象,或必須支持序列協議(有 __getitem__() 方法,且數字參數從 0 開始)。如果它不支持這些協議,會觸發 TypeError。如果有第二個實參 sentinel,那麼 object 必須是可調用的對象。這種情況下生成的迭代器,每次迭代調用它的 __next__() 方法時都會不帶實參地調用 object;如果返回的結果是 sentinel 則觸發 StopIteration,否則返回調用結果。

另請參閱 迭代器類型

適合 iter() 的第二種形式的應用之一是構建塊讀取器。 例如,從二進制數據庫文件中讀取固定寬度的塊,直至到達文件的末尾:

from functools import partial
with open('mydata.db', 'rb') as f:
    for block in iter(partial(f.read, 64), b''):
        process_block(block)

舉例:

dict = {'helloWorld':'Jack'}
for i in iter(dict):
    print(i)

str = 'helloWorld'
for i in iter(str):
    print(i)
helloWorld
h
e
l
l
o
W
o
r
l
d

37.len()

說明:len()函數用於計算長度,比較好理解。

len(s)

返回對象的長度(元素個數)。實參可以是序列(如 string、bytes、tuple、list 或 range 等)或集合(如 dictionary、set 或 frozen set 等)。

舉例:

dict = {'helloWorld':'Jack'}
str = 'helloWorld'
print(len(dict))
print(len(str))
1
10

38.list()

說明:list()函數用於進行數據類型轉換爲列表。

class list([iterable])

雖然被稱爲函數,list 實際上是一種可變序列類型,詳情請參閱 列表 和 序列類型 --- list, tuple, range

舉例:

str = 'helloWorld'
print(list(str))
print(type(list(str)))
['h', 'e', 'l', 'l', 'o', 'W', 'o', 'r', 'l', 'd']
<class 'list'>

39.locals()

說明:locals() 函數會以字典類型返回當前位置的全部局部變量。

對於函數, 方法, lambda 函式, 類, 以及實現了 __call__ 方法的類實例, 它都返回 True。

locals()

更新並返回表示當前本地符號表的字典。 在函數代碼塊但不是類代碼塊中調用 locals() 時將返回自由變量。 請注意在模塊層級上,locals() 和 globals() 是同一個字典。

註解

不要更改此字典的內容;更改不會影響解釋器使用的局部變量或自由變量的值。

舉例:

map_demo = map(str,range(1,10))
print(locals())
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000019A33CAF588>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'E:/MyLife/網課學習/檸檬班/作業/博客/demo222.py', '__cached__': None, 'map_demo': <map object at 0x0000019A33D62EC8>}

40.map()

說明:map() 會根據提供的函數對指定序列做映射。第一個參數 function 以參數序列中的每一個元素調用 function 函數,返回包含每次 function 函數返回值的新列表。

map(functioniterable...)

返回一個將 function 應用於 iterable 中每一項並輸出其結果的迭代器。 如果傳入了額外的 iterable 參數,function 必須接受相同個數的實參並被應用於從所有可迭代對象中並行獲取的項。 當有多個可迭代對象時,最短的可迭代對象耗盡則整個迭代就將結束。 對於函數的輸入已經是參數元組的情況,請參閱 itertools.starmap()

舉例:

map_demo = map(str,range(1,10))
print(map_demo)
print(type(map_demo))
for i in map_demo:
    print(i)
<map object at 0x000002AC5F302EC8>
<class 'map'>
1
2
3
4
5
6
7
8
9

 


41.max()

說明:最大值函數。

max(iterable*[, keydefault])

max(arg1arg2*args[, key])

返回可迭代對象中最大的元素,或者返回兩個及以上實參中最大的。

如果只提供了一個位置參數,它必須是非空 iterable,返回可迭代對象中最大的元素;如果提供了兩個及以上的位置參數,則返回最大的位置參數。

有兩個可選只能用關鍵字的實參。key 實參指定排序函數用的參數,如傳給 list.sort() 的。default 實參是當可迭代對象爲空時返回的值。如果可迭代對象爲空,並且沒有給 default ,則會觸發 ValueError

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

3.4 新版功能: keyword-only 實參 default 。

舉例:

a = [1,3,4,23,12,32,14,15,29]
print(max(a))
32

 


42.memoryview()

說明:memoryview() 函數返回給定參數的內存查看對象(Momory view)。

class memoryview(obj)

返回由給定實參創建的“內存視圖”對象。有關詳細信息,請參閱 內存視圖

舉例:

v = memoryview(b'abcefg')
print(v)
print(v[1])
print(type(v))
<memory at 0x000001E0CB73C048>
98
<class 'memoryview'>

 


43.min()

說明:最小函數。

min(iterable*[, keydefault])

min(arg1arg2*args[, key])

返回可迭代對象中最小的元素,或者返回兩個及以上實參中最小的。

如果只提供了一個位置參數,它必須是 iterable,返回可迭代對象中最小的元素;如果提供了兩個及以上的位置參數,則返回最小的位置參數。

有兩個可選只能用關鍵字的實參。key 實參指定排序函數用的參數,如傳給 list.sort() 的。default 實參是當可迭代對象爲空時返回的值。如果可迭代對象爲空,並且沒有給 default ,則會觸發 ValueError

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

3.4 新版功能: keyword-only 實參 default 。

舉例:

list = [1,5,7,9,4,5,1,32,0,78]
print(min(list))
0

44.next()

說明:next() 返回迭代器的下一個項目。next() 函數要和生成迭代器的iter() 函數一起使用。

next(iterator[, default])

通過調用 iterator 的 __next__() 方法獲取下一個元素。如果迭代器耗盡,則返回給定的 default,如果沒有默認值則觸發 StopIteration

舉例:

num = iter([1, 2, 3, 4, 5, 6, 7])
while True:
    try:
        x = next(num)
        print(x)
    except StopIteration:
        break
1
2
3
4
5
6
7

45.object()

說明:Object類是Python中所有類的基類,如果定義一個類時沒有指定繼承哪個類,則默認繼承object類。

object沒有定義__dict__,所以不能對object類實例對象嘗試設置屬性。

class object

返回一個沒有特徵的新對象。object 是所有類的基類。它具有所有 Python 類實例的通用方法。這個函數不接受任何實參。

註解

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

備註:類和對象相關的內置函數會在之後的學習中再詳細說明。

 


以上便是《Python學習14:內置函數(二)》所有內容,下一篇爲內置函數(三)講解其餘所有的內置函數的定義和用法。

目前《Python學習》專題正在不斷更新,原創不易,如果喜歡請點贊和關注,謝謝大家的支持!

獲得更多免費的學習資料請添加微信公衆號——風起怨江南,有任何問題可以隨時和我交流溝通。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章