函數的參數
參數類型:
關于函數的參數,我們經常在一些代碼中會發現 def(*args,**kwargs)的表現形式,其中定義的分别是元組和字典:
*args —— tuple(1,)
**kwargs —— dict(“k”:“v”)
例如:
fun(*args,**kwargs )
fun(1,2,3,4,5,a=10,b=40 )
我們也可以簡單的定義一個函數的參數:
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'>
清單生成式直接傳回了表達式的結果清單,
而生成器是一個對象,該對象包含了對表達式結果的計算引用,通過循環可以直接輸出
生成器不會一次性列出所有的資料,當你用到的時候再列出來,這樣降低了記憶體使用率
裝飾器的作用
裝飾器本質上是一個Python的函數,
它可以讓其他函數在不需要做任何代碼變動的前提下增加額外功能,
裝飾器的傳回值也是一個函數對象。
它經常用于在且慢需求的場景,比如:插入日志、性能測試、事務處理、緩存、權限校驗等場景。
裝飾器是解決這類問題的絕佳設計,
有了裝飾器,我們就可以抽離出大量與函數功能本身無關的雷同代碼并繼續重用
簡單來說,就是在不改變函數本身的情況下,在函數的前面或者後面增加一些額外功能
# 原函數
def hello():
print("hello world")
hello()
# 目的函數
def hello():
print("###########start###########")
print("hello world")
print("############end############")
hello()