參數類型:
關於函數的參數,咱們常常在一些代碼中會發現 def(*args,**kwargs)的表現形式,其中定義的分別是元組和字典:緩存
*args —— tuple(1,) **kwargs —— dict(「k」:「v」)
例如:app
fun(*args,**kwargs ) fun(1,2,3,4,5,a=10,b=40 )
咱們也能夠簡單的定義一個函數的參數:ide
def add(*args): total = 0 for i in args: total += i print("total = {}".format(total)) if __name__ == '__main__': add(1,2,3,4,5)
Python中有一類排序sort排序函數:函數
def add(*args): total = 0 for i in args: total += i print("total = {}".format(total)) def sorDictValue(dict1): print(sorted(dict1.items(),key=lambda item:item[0],reverse=False)) '''sorted後面接dict1表示把 key 值做爲迭代對象, 若是加入dict1.items() 函數表示將字典的 keys 和 value 值都進行迭代''' if __name__ == '__main__': add(1,2,3,4,5) s1 = lambda x,y:x+y print(s1(10,20)) aaa = dict(a=100,b=10,c=50) l = list() sorDictValue(aaa)
匿名函數,就是沒有名字的函數,可是爲何又須要匿名函數呢,它的做用又是什麼
lambda函數是一種快速定義單行的最小函數,能夠用在任何須要函數的地方性能
def fun(x,y): return x*y
lambda 版本測試
r = lambda x,y:x*y print(r(10,20))
列表生成式格式:[exp for val in collection if condition]
例如[x*x for x in range(10) if x*x%2==0]
設計
生成器(generator):
方法一;(exp for val in collection if condition)
例如:(x*x for x in range(1,30) if x%2 ==0)
方法二:
使用yield關鍵字,包含yield語句的函數會被特意編譯成生成器。
yield能夠理解成return,可是並不退出,只是掛起,恢復的時候從yield下面開始執行。日誌
# 列表生成式 a = [x*x for x in range(1,30) if x%2 ==0] print(a) print(type(a)) # <class 'list'> y=list() x=[1,2,3,4,5] y+=x y.append(100) print(y) print(x) # 列表生成器 generator b = (x*x for x in range(1,30) if x%2 ==0) print(b) print(type(b)) # <class 'generator'> def test(l): for i in l: yield i # yield 至關於return print("i = {}".format(i)) m = test([1,2,3,4,5,6,7,8,9]) print(type(m)) # <class 'generator'>
列表生成式直接返回了表達式的結果列表,
而生成器是一個對象,該對象包含了對錶達式結果的計算引用,經過循環能夠直接輸出
生成器不會一次性列出全部的數據,當你用到的時候再列出來,這樣下降了內存使用率code
裝飾器本質上是一個Python的函數,
它可讓其餘函數在不須要作任何代碼變更的前提下增長額外功能,
裝飾器的返回值也是一個函數對象。
它常常用於在且慢需求的場景,好比:插入日誌、性能測試、事務處理、緩存、權限校驗等場景。
裝飾器是解決這類問題的絕佳設計,
有了裝飾器,咱們就能夠抽離出大量與函數功能自己無關的雷同代碼並繼續重用
簡單來講,就是在不改變函數自己的狀況下,在函數的前面或者後面增長一些額外功能orm
# 原函數 def hello(): print("hello world") hello() # 目的函數 def hello(): print("###########start###########") print("hello world") print("############end############") hello()