1. 程式人生 > >第11天內建函式詳解

第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傳遞一個空字串即可
# 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)
complie,eval, exec使用方法

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)
''
>>>