大家好,我是小張
在 3.8 版本中,Python 解釋器有近 69 個內置函數可供使用,有了它們能極大地提高編碼效率,
數量雖然不少,但在日常搬磚中只用到其中一部分,根據使用頻率和用法,這裡列出來幾個本人認為不錯的內置函數,結合一些例子介紹給大家
complex()返回一個形如 a+bj 的複數,傳入參數分為三種情況:
參數為字符串時,將字符串表達式解釋為複數形式並返回參數只有一個整數 a 時,虛部 b 默認為0,函數返回 a+0j>>> complex('1+2j')
(1+2j)
>>> complex()
0j
>>> complex(1,2)
(1+2j)
>>> complex(2)
(2+0j)
dir()>>> class Test:
def first(self):
return 1
def second(self):
return 2
>>> dir(Test)# 提供參數時
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'first', 'second']
>>> dir()# 未提供參數時
['Test', '__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__']
divmod(a,b)根據 除法運算 計算 a,b 之間的商和餘數,函數返回一個元組(p,q) ,p 代表商 a//b ,q 代表餘數 a%b
>>> divmod(21,4)
(5, 1)
>>> divmod(20.1,3)
(6.0, 2.1000000000000014)
enumerate(iterable,start=0)iterable -- 一個可迭代對象,列表、元組序列等該函數返回枚舉對象是個迭代器,利用 next() 方法依次返回元素值,每個元素以元組形式存在,包含一個計數元素(起始為 start )和 iterable 中對應的元素值;
>>> stu = ['xiao','zhang','li','qian']
>>> enumerate(stu)
<enumerate object at 0x0000025331773F48>
>>> list(enumerate(stu))# 默認start = 0
[(0, 'xiao'), (1, 'zhang'), (2, 'li'), (3, 'qian')]
>>> list(enumerate(stu,start = 1))# 默認start = 1
[(1, 'xiao'), (2, 'zhang'), (3, 'li'), (4, 'qian')]
eval(expression,globals,locals)globals -- 變量作用,全局命名空間,如果提供必須為字典形式;可選參數locals -- 變量作用域,局部命名空間,如果提須可為任何可映射對象;可選參數將字符串表達式解析,返回執行結果
>>> eval("2+2")
4
>>> eval("2==2")
True
filter(function,iterable)function -- 提供篩選函數名,返回 true 或 false
函數返回 iterable 中滿足 function 為 True 的元素;假設有一個列表,我們只需要其中的一部分元素,這時就可以提前寫一個函數再藉助 filter 來進行過濾
>>> num_list = list(range(20))
>>> num_list
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
>>> def mod_three(num):
if(num%3==0):
return True
else:
return False
>>> filter(mod_three,num_list)
<filter object at 0x00000253315A6608>
>>> list(filter(mod_three,num_list))
[0, 3, 6, 9, 12, 15, 18]
isinstance(object,classinfo)object --表示一個類型的對象,若不是此類型, 函數恆返回 False;calssinfo -- 為一個類型元組或單個類型;判斷對象 object 的類型是否為 classinfo 或 classinfo 中其中一個類型,返回 True 或 False;
調試Python程序時,障礙之一就是初始變量沒有定義類型,所以在代碼編寫或者調試時,isinstance() 函數常被用來判斷變量類型,幫助我們了解程序整個邏輯防止出錯
>>> isinstance(num,str)
False
>>> isinstance(num,int)
True
map(function,iterable,...)將 iterable 中的每一個元素放入函數 function 中依次執行,得到與 iteable 元素數量相同的迭代器;
map() 中可迭代對象可以為多個,其中函數 function 中的參數為所有可迭代對象中並行元素,最終得到的迭代器的數量是以提供元素數量最少可迭代對象為基準,當數量最少的可迭代對象所有元素輸入完畢後即執行停止
>>> def fun_a(a,b):
return a+2*b
>>> num_list1 = [1,2,3,4]
>>> num_list2 = [2,3,4,5]
>>> list(map(fun_a,num_list1,num_list2))
[5, 8, 11, 14]
input()函數用於人機互動,讀取從輸入端輸入的一行內容,轉化為字符串
>>> s = input('input:')
input:小張Pyhon
>>> s
'小張Pyhon'
zip(*iteables)*iterables -- 兩個或兩個以上可迭代對象將所有 iterable 對象中元素按參數順序以元素並行方式聚合在一起,得到一個迭代器,迭代器中每個元素是個n元素元組,n 表示函數中輸入 iterable 參數數量
>>> num_list1 = [1,2,3,4]
>>> num_list2 = [2,3,1,2]
>>> list(zip(num_list1,num_list2))
[(1, 2), (2, 3), (3, 1), (4, 2)]zip() 函數功能等價於
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)除了上面列舉的 10 個之外,還有其它 59 個內置函數,想了解的小夥伴可點擊下方原文閱讀,對於Python開發者來說掌握這些內置函數非常有用,一方面能提高編碼效率,另一方面也能提高代碼簡潔性;在某一方面功能雖然沒有第三方庫函數強大,但也不能被小覷。
好了以上就是本篇文章的全部內容了,最後感謝大家閱讀,我們下期見~
參考:https://docs.python.org/3.8/library/functions.html#zip