日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

廖雪峰讲python高阶函数求导公式_一文读懂Python 高阶函数

發(fā)布時(shí)間:2023/12/2 python 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 廖雪峰讲python高阶函数求导公式_一文读懂Python 高阶函数 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

高階函數(shù)

將函數(shù)作為參數(shù)傳入,這樣的函數(shù)稱為高階函數(shù)。函數(shù)式編程就是指這種高度抽象的編程范式。

變量可以指向函數(shù),函數(shù)的參數(shù)能接收變量,那么一個(gè)函數(shù)就可以接收另一個(gè)函數(shù)作為參數(shù),這種函數(shù)就稱之為高階函數(shù)。如下所示:

1 deffun0(x,y,fun):2 return fun(x)*fun(y)3 print(fun0(-9,-10,abs))

1. 高階函數(shù)之map

map(fun, lst),將傳入的函數(shù)變量func作用到lst變量的每個(gè)元素中,并將結(jié)果組成新的列表返回。

1 list1=[0,1,2,3,4,5,6,7,8,9]2

3 list_result=[]4 for i inlist1:5 list_result.append(i*i*i)6 print(list_result)7

8 def cube(x):#求立方

9 return x*x*x10 print(list(map(cube,list1)))11

12

13 list2=[10,11,12,13,14,15,16,17,18,19]14 defmulti(x,y):15 return x*y16

17 #map接收兩個(gè)list,可用于兩個(gè)列表的對(duì)應(yīng)索引數(shù)據(jù)進(jìn)行操作

18 print(list(map(multi,list1,list2)))

2. 高階函數(shù)之匿名函數(shù)

定義一個(gè)匿名函數(shù)并調(diào)用,定義格式如-->lambda arg1,arg2…:表達(dá)式

1 f=lambda x,y:x+y2 print(f(10,20))3

4 #不需要顯式地定義函數(shù),直接傳入匿名函數(shù)更方便

5 print(list(map(lambda x:x*x*x,list1)))

3. 高階函數(shù)之reduce

reduce把一個(gè)函數(shù)作用在一個(gè)序列[x1, x2, x3, …]上,這個(gè)函數(shù)必須接收兩個(gè)參數(shù),reduce把結(jié)果繼續(xù)和序列的下一個(gè)元素做累積計(jì)算。

1 from functools importreduce2 list1=[1,3,5,7,9] #如何讓列表里面的值變成一個(gè)數(shù)字13579輸出

3 deffun(x,y):4 return x*10+y5 print(reduce(fun,list1))6 print(reduce(lambda x,y:x*10+y,list1))#利用lambda來(lái)實(shí)現(xiàn)

7

8 print(reduce(lambda x,y:x+y,range(1,101)))#從1+2+...+99+100的總和

4. 高階函數(shù)之filter

filter() 函數(shù)用于過(guò)濾序列,過(guò)濾掉不符合條件的元素,返回由符合條件元素組成的新列表。

1 deffun2(x):2 return x%2==03 list2=[1,2,3,4,5,6,7,8,9]4 print(list(filter(fun2,list2)))5

6 print(list(filter(fun2, range(1, 101))))#輸出1到100的偶數(shù)

7 print(list(filter(lambda x:x%2==0,list2)))#利用lambda來(lái)實(shí)現(xiàn)

8

9 #獲取非空字符串函數(shù)

10 deffun3():11 list1 = ["tony", "is", "good", "man", " ", "hello", " "]12 for el inlist1:13 if(el andel.strip()):14 print(el)15fun3()16

17 #使用filter實(shí)現(xiàn)fun3的功能

18 defis_not_null(str1):19 return str1 andstr1.strip()20 list3=["tony","is","good","man"," ","hello"," "]21 print(list(filter(is_not_null,list3)))

5. 高階函數(shù)之裝飾器

1 importtime2 def waste_time(func): #用于計(jì)算函數(shù)執(zhí)行的耗時(shí)

3 def function(*args,**kwargs):4 start_time=time.time()5 result=func(*args,**kwargs)6 end_time=time.time()7 spend=end_time-start_time8 print("函數(shù)%s 總共耗時(shí)%.3f秒:"%(func.__name__,spend))9 returnresult10 returnfunction11

12@waste_time13 defabc():14 print("aaa")15abc()16

17 def get_log(func): #能裝飾的方法添加日志輸出

18 importtime19 def wrapper(*args, **kw):20 print(str(time.asctime())+'call %s():' % func.__name__)21 return func(*args, **kw)22 returnwrapper23

24@get_log25 defabd():26 print("bbb")27 abd()

6. 高階函數(shù)之 retrun function(返回函數(shù))

1@waste_time2 def get_dict(**kwargs):3 defgetjson():4 jsons=""

5 for key,value inkwargs.items():6 jsons+=key+"="+str(value)+"&"

7 returnjsons8 returngetjson9

10

11 print(get_dict(name='tony',age=33))12 f=get_dict(name='tony',age=33)13 print(f())14 print(get_dict(name='tony',age=33)())

7. 高階函數(shù)之sorted排序函數(shù)

1 num_list=[34,55,2,3,444,500]2 print(sorted(num_list)) #默認(rèn)升序

3 print(sorted(num_list,reverse=True)) #reverse=True表示降序

4

5 #對(duì)字符串ASCII A=65 a=97進(jìn)行排序

6 str_list=['ac','aa','AB','d','c']7 print(sorted(str_list))8 print(sorted(str_list,reverse=True))9

10 #用key來(lái)接收指定函數(shù)來(lái)進(jìn)行自定義排序

11 str_list=['ac','aa','AB','d','c']12 print(sorted(str_list,key=str.lower)) #不考慮大小寫

13

14 num_list=[34,55,2,3,444,500,-599,-222]15 print(sorted(num_list,key=abs)) #用絕對(duì)值進(jìn)行排序

16

17 classTester:18 def __init__(self,age,name):19 self.age=age20 self.name=name21

22 t1=Tester(10,'tony')23 t2=Tester(20,'jack')24 t3=Tester(30,'tom')25

26 result=list(sorted([t1,t2,t3],key=lambda x:x.age)) #針對(duì)對(duì)象實(shí)例進(jìn)行排序,指定了年齡

27 for test inresult:28 print(test.name,test.age)

8. 高階函數(shù)之閉包

閉包的定義?閉包本質(zhì)上就是一個(gè)函數(shù)

如何創(chuàng)建閉包?

函數(shù)要嵌套(有內(nèi)外部函數(shù))

內(nèi)部函數(shù)使用外部函數(shù)的變量

外部函數(shù)返回內(nèi)部函數(shù)的名稱

如何使用閉包?典型的使用場(chǎng)景是裝飾器的使用。

global與nonlocal的區(qū)別:

global可以改變?nèi)肿兞?#xff0c;同時(shí)可以定義新的全局變量;

nonlocal只能改變外層函數(shù)變量,不能定義新的外層函數(shù)變量,并且nonlocal也不能改變?nèi)肿兞俊?/p>

global關(guān)鍵字可以用在任何地方,包括最上層函數(shù)中和嵌套函數(shù)中;

nonlocal關(guān)鍵字只能用于嵌套函數(shù)中,并且外層函數(shù)中必須定義了相應(yīng)的局部變量,否則會(huì)發(fā)生錯(cuò)誤。

簡(jiǎn)單的使用如下:

1 defoutFun(arg1):2 definFun(arg2):3 nonlocal arg1#nonlocal關(guān)鍵字用來(lái)在函數(shù)或其他作用域中使用外層(非全局)變量。

4 arg1+=200

5 return arg1*arg26 returninFun7 infun=outFun(100)#調(diào)用外部函數(shù),傳入?yún)?shù),返回是內(nèi)部函數(shù)

8 result=infun(300)#調(diào)用內(nèi)部函數(shù),傳入?yún)?shù)

9 print("the result is:",result)10

11 #使用閉包求給function計(jì)算耗時(shí)(上面的內(nèi)容已經(jīng)提到)代碼如下:

12 importtime13 def waste_time(func): #用于計(jì)算函數(shù)執(zhí)行的耗時(shí)

14 def function(*args,**kwargs):15 start_time=time.time()16 result=func(*args,**kwargs)17 end_time=time.time()18 spend=end_time-start_time19 print("函數(shù)%s 總共耗時(shí)%.3f秒:"%(func.__name__,spend))20 returnresult21 return function

9. 高階函數(shù)之偏函數(shù)

偏函數(shù)主要輔助原函數(shù),作用其實(shí)和原函數(shù)差不多,不同的是,我們要多次調(diào)用原函數(shù)的時(shí)候,有些參數(shù),我們需要多次手動(dòng)的去提供值。

而偏函數(shù)便可簡(jiǎn)化這些操作,減少函數(shù)調(diào)用,主要是將一個(gè)或多個(gè)參數(shù)預(yù)先賦值,以便函數(shù)能用更少的參數(shù)進(jìn)行調(diào)用。

我們?cè)賮?lái)看一下偏函數(shù)的定義:

類func = functools.partial(func, *args, **keywords)

我們可以看到,partial 一定接受三個(gè)參數(shù),從之前的例子,我們也能大概知道這三個(gè)參數(shù)的作用。簡(jiǎn)單介紹下:

func: 需要被擴(kuò)展的函數(shù),返回的函數(shù)其實(shí)是一個(gè)類 func 的函數(shù)

*args: 需要被固定的位置參數(shù)

**kwargs: 需要被固定的關(guān)鍵字參數(shù)

1 def add(*args, **kwargs):2 for n in args:#打印位置參數(shù)

3 print(n)4 print("-"*20)5 for k, v in kwargs.items():#打印關(guān)鍵字參數(shù)

6 print('%s:%s' %(k, v))7

8 #普通調(diào)用

9 add(1, 2, 3, v1=10, v2=20)10

11 #偏函數(shù)調(diào)用

12 from functools importpartial13 add_fun=partial(add,100,k1=200,k2=300)14 add_fun(1, 2, 3, v1=10, v2=20)

總結(jié)

本文是對(duì)Python 高階函數(shù)相關(guān)知識(shí)的分享,主題內(nèi)容總結(jié)如下:

初識(shí)高階函數(shù)

高階函數(shù)之map

高階函數(shù)之匿名函數(shù)

高階函數(shù)之reduce

高階函數(shù)之filter

高階函數(shù)之裝飾器

高階函數(shù)之 retrun function(返回函數(shù))

高階函數(shù)之sorted排序函數(shù)

高階函數(shù)之閉包

高階函數(shù)之偏函數(shù)

歡迎關(guān)注【無(wú)量測(cè)試之道】公眾號(hào),回復(fù)【領(lǐng)取資源】,

Python編程學(xué)習(xí)資源干貨、

Python+Appium框架APP的UI自動(dòng)化、

Python+Selenium框架Web的UI自動(dòng)化、

Python+Unittest框架API自動(dòng)化、

資源和代碼 免費(fèi)送啦~

文章下方有公眾號(hào)二維碼,可直接微信掃一掃關(guān)注即可。

備注:我的個(gè)人公眾號(hào)已正式開(kāi)通,致力于測(cè)試技術(shù)的分享,包含:大數(shù)據(jù)測(cè)試、功能測(cè)試,測(cè)試開(kāi)發(fā),API接口自動(dòng)化、測(cè)試運(yùn)維、UI自動(dòng)化測(cè)試等,微信搜索公眾號(hào):“無(wú)量測(cè)試之道”,或掃描下方二維碼:

添加關(guān)注,讓我們一起共同成長(zhǎng)!

總結(jié)

以上是生活随笔為你收集整理的廖雪峰讲python高阶函数求导公式_一文读懂Python 高阶函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。