第11天內建函式詳解
參考部落格地址:https://www.cnblogs.com/sesshoumaru/p/6140987.html#p2
人生三問
什麼是內建函式 內建函式就是python直譯器給我們已經定義好的一系列函式,我們可以直接進行呼叫,而不必進行定義的。
為什麼要用內建函式 對於一些常用的功能,我們沒有必要重新去一個一個的實現,因為有人已經幫我們實現了,我們只需要進行呼叫就可以了。提高我們的開發效率
怎麼使用內建函式 就和我們自定義的函式使用方法是一樣的,通過函式名加括號就可以了。 例如:max()
未完待續:
5. 裝飾器(3個)待定 10. 反射操作(8個)(待定) super object(待定) memoryview
python的內建函式(總共68個)
1. 常用的 max, min, sorted,map, filter, reduce
參考部落格: https://www.cnblogs.com/huwentao/p/9766004.html
2. 檔案操作(1個)
open函式 常用的: f = open('a.txt', 'rt', encoding='utf-8') f.read()
3. 互動操作(2個)
input res = input('>>>')print print(res, end='=?')
4. 變數操作(2個)
globals 返回當前作用域內的全域性變數和其值組成的字典 locals 返回當前作用域內的區域性變數和其值組成的字典print(globals())print(locals())
5. 裝飾器(3個)待定
property() 標示屬性的裝飾器
staticmethod() 標示方法為靜態方法的裝飾器
classmethod() 標示方法為類方法的裝飾器
6. 編譯執行(4個)
compile 將字串編譯為程式碼,使得返回值能夠被exec來執行或者eval來求值 eval 執行動態表示式來求值 eval('1+2+3') exec 執行動態語句塊 exec('a = 1') a repr 返回一個物件的字串表示形式
# compile 需要三個引數 # source: 需要執行的程式碼段 # filename: 從檔案讀取需要編譯的程式碼, 如果有source,filename傳遞一個空字串即可complie,eval, exec使用方法# mode:執行模式,exec執行流程語句,eval簡單的求值表示式,single互動式語句 # 例一:exec執行流程語句,沒有返回值 source = ''' for i in range(10): print(i) ''' res = compile(source, '', mode='exec') print(exec(res)) # 例一:eval執行簡單的一些求值表示式,返回值 source = '''1+2+3+4''' res = compile(source, '', mode='eval') print(eval(res)) # 例三: exec執行互動式命令 source = ''' name = input('>>').strip() ''' res = compile(source, '', mode='single') exec(res)
repr: 返回一個物件的字串表現形式,大部分和str是類似的,只是當他轉化一個字串的時候會存在差異。如下:
7. 數學運算(7個)
abs 絕對值 abs(-1) ====》 1
max 最大值 max([1,2 ,3]) =====》 3
min 最小值 min([1,2,3 ]) =====》 1
sum 和 sum([1,2 ,3 ])======》 6divmod 返回兩個數值的商和餘數power 返回冪運算值或者與其指定的數值的模round 對浮點數進行四捨五入取值
print(max([1,2,3])) # 1 print(min([1,2,3])) # 2 print(sum([1,2,3])) # 6 print(divmod(5, 2)) # (2, 1) print(pow(2, 3, 5)) # =====》 2 ** 3 % 5 結果為3 print(round(1.5)) # ====> 2
8.物件操作(7個)
dir 返回物件或者當前作用域內的屬性列表
ascii 返回物件的可打印表字串表現方式
vars 返回當前作用域內的區域性變數和其值組成的字典,或者返回物件的屬性列表
format 格式化輸出字串
help 返回物件的幫助資訊
id 返回物件的唯一識別符號
type 返回物件的型別
hash 返回物件的hash值
len 返回物件的長度
dir
>>> dir() # 顯示當前作用域內的屬性列表 ['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'a'] >>> globals().keys() # 全域性作用域的屬性key dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'a']) >>> import math >>> dir(math) # 顯示的是當前物件math所具有的屬性,也就是它的方法 ['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc'] >>>
ascii和之前說的repr是一樣的只是在出現中文的時候表現形式不一樣的額
>>> >>> repr('中國') "'中國'" >>> ascii('中國') "'\\u4e2d\\u56fd'" >>> repr('hello') "'hello'" >>> ascii('hello') "'hello'" >>>
id, type, hash, len, help
>>> id('hello') # 返回當前物件的唯一標示符,也也就是它的地址 9883616 >>> type('hello') # 返回當前物件的型別 <class 'str'> >>> hash('hello') # 返回一個hash值 73169866 >>> len('hello') # 返回物件的長度 5 >>> help(str) # 返回當前物件的幫助資訊 Help on class str in module builtins: class str(object) | str(object='') -> str | str(bytes_or_buffer[, encoding[, errors]]) -> str | | Create a new string object from the given object. If encoding or | errors is specified, then the object must expose a data buffer | that will be decoded using the given encoding and error handler. | Otherwise, returns the result of object.__str__() (if defined) | or repr(object). | encoding defaults to sys.getdefaultencoding(). | errors defaults to 'strict'. | | Methods defined here: | | __add__(self, value, /) | Return self+value. | | __contains__(self, key, /) | Return key in self. | | __eq__(self, value, /) | Return self==value.
vars
(1) 當函式不接收引數時,其功能和locals函式一樣,返回當前作用域內的區域性變數。
>>> vars() {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, 'a': [1, 2, 3], 'math': <module 'math' (built-in)>} >>> locals() {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, 'a': [1, 2, 3], 'math': <module 'math' (built-in)>} >>>
(2)當函式接收一個引數時,引數可以是模組、類、類例項,或者定義了__dict__屬性的物件。返回的是當前的屬性和dir一樣,只是vars返回的是字典
>>> dir(dict) ['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values'] >>> vars(dict).keys() dict_keys(['__repr__', '__hash__', '__getattribute__', '__lt__', '__le__', '__eq__', '__ne__', '__gt__', '__ge__', '__iter__', '__init__', '__len__', '__getitem__', '__setitem__', '__delitem__', '__contains__', '__new__', '__sizeof__', 'get', 'setdefault', 'pop', 'popitem', 'keys', 'items', 'values', 'update', 'fromkeys', 'clear', 'copy', '__doc__']) >>>
format在字典階段已經介紹過了,這裡不再贅述
9. 序列操作(8個)
all 判斷可迭代物件每個元素是否都是True
any 判斷可迭代物件中是否又True的元素
zip 聚合傳入的每個迭代器中的相同位置的元素,返回一個新的元祖型別迭代器
reversed 反轉序列生成新的可迭代物件
next 返回迭代器物件中的下一個元素值filter 過濾
map 對映
sorted 排序
all
>>> all([]) # 首先空的可迭代物件返回的是True True >>> all([1,2 ,3]) # 判斷裡面的值是不是都是True True >>> all([1,2 ,0]) False >>> all([1,2 ,'']) False
any
>>> any([]) # 可迭代物件為空的時候any返回為False False >>> any([1,2,3]) # 可迭代物件中只要又True就返回True True >>> any(['', 0]) False >>> any(['', 1]) True >>>
zip
>>> zip([1,2 ,3], (4, 5,6)) # 組合兩個可迭代物件的值 <zip object at 0x009C2260> >>> a = zip([1,2 ,3], (4, 5,6)) >>> list(a) [(1, 4), (2, 5), (3, 6)] >>>
reversed
>>> list(reversed('hello world!')) ['!', 'd', 'l', 'r', 'o', 'w', ' ', ' ', 'o', 'l', 'l', 'e', 'h'] >>> reversed('hello world!') <reversed object at 0x00980D70> >>>
next返回迭代器下一個元素,就是呼叫__next__方法
>>> a = iter('abcd') >>> next(a) 'a' >>> next(a) 'b'
filter, map, reduce 在文章開頭已經給了地址
10. 反射操作(8個)(待定)
hasattr getattr setattr delattr callable isinstance issubclass __import__
11. 型別轉換(24個)
bytearray 根據傳入的引數建立一個新的位元組陣列bytes 根據傳入的引數建立一個新的不可變位元組陣列
memoryview 根據傳入的引數建立一個新的記憶體檢視物件
frozenset 根據傳入的引數建立一個新的不可變集合
enumerate 根據可迭代物件建立列舉物件
slice 根據傳入的引數建立一個切片物件
super 根據傳入的引數建立一個新的子類和父類的關係的代理物件
object 建立一個新的object物件
iter 根據傳入的引數建立一個新的可迭代物件
rangeord
chr
# 二進位制八進位制和十六進位制
bin 二進位制
hex 十六進位制
oct 八進位制
# 資料型別
bool
int
float
complax
str
tuple
list
dict
set
bytearray
>>> >>> len(bytearray()) # 如果不傳值,返回的是一個長度為0的位元組陣列 0 >>> b = bytearray('中國', encoding='utf-8') # 其實就是把傳遞進來的字串編碼成了utf-8的形式 >>> len(b) 6 >>> bytearray('中國', encoding='utf-8') bytearray(b'\xe4\xb8\xad\xe5\x9b\xbd') >>>
bytes 其實和bytearray是一樣的,只是在建立的過程中bytes是不可修改的
>>> b = bytes(10) >>> b b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> b[0] 0 >>> b[1] = 1 #不可修改 Traceback (most recent call last): File "<pyshell#6>", line 1, in <module> b[1] = 1 TypeError: 'bytes' object does not support item assignment >>> b = bytearray(10) >>> b bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') >>> b[1] = 1 #可修改 >>> b bytearray(b'\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00')
memoryview 返回一個記憶體檢視物件(沒搞懂)
>>> b = memoryview(b'abcd') # 獲得一個記憶體物件 >>> b <memory at 0x008568B8> >>> b[1] # 可以通過索引去檢視當前位置所對應的值 98 >>> b[-1] 100 >>> b[1:2] <memory at 0x008562A0> >>>
frozenset
>>> a = frozenset(range(10)) # 建立了一個不可變集合 >>> a frozenset({0, 1, 2, 3, 4, 5, 6, 7, 8, 9}) >>> a.add(2) # 建立的集合是不能夠改變的 Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'frozenset' object has no attribute 'add' >>>
enumerate
>>> seasons = ['spring', 'summer', 'Fall', 'Winter'] >>> b = enumerate(seasons) # 預設是從0開始一一對應列表中的值 >>> list(b) [(0, 'spring'), (1, 'summer'), (2, 'Fall'), (3, 'Winter')] >>> b = enumerate(seasons, start=1) # 可以通過start去指定開始的值 >>> list(b) [(1, 'spring'), (2, 'summer'), (3, 'Fall'), (4, 'Winter')] >>>
slice
>>> b = list(range(10)) >>> b [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> c = slice(5) # 定義一個切片的規則,然後通過下面去呼叫 >>> b[c] [0, 1, 2, 3, 4] >>> c = slice(1,5) >>> b[c] [1, 2, 3, 4] >>> c = slice(1,5, 2) >>> b[c] [1, 3] >>>
super object(待定)
iter
>>> a = iter([1,2,3]) # 建立一個可迭代物件 >>> next(a) 1 >>> next(a) 2 >>> next(a) 3 >>> next(a) Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration >>>
range
>>> list(range(0)) # 結束的值小於等於0的時候會返回一個空字串 [] >>> list(range(-1)) [] >>> list(range(1, 10, -2)) [] >>> list(range(1, 10, 2)) # 第三個數是步長,預設是一 [1, 3, 5, 7, 9] >>>
ord , chr
>>> ord('a') # unicode字元對應的整數 97 >>> chr(97) # 整數對應的unicode字元 'a' >>> ord('中') 20013 >>> ord('20013') Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: ord() expected a character, but string of length 5 found >>> chr(20013) '中' >>>