Python函數(shù)本質(zhì)上是一段代碼的集合,擴(kuò)展對(duì)于函數(shù)的高級(jí)用法,有利于更好的認(rèn)識(shí)Python,函數(shù)是Python的核心。本篇擴(kuò)展了函數(shù)的2個(gè)應(yīng)用,一是把函數(shù)本身作為參數(shù),二是介紹了匿名函數(shù)的應(yīng)用。
1、以函數(shù)作為參數(shù):
1.1 概念
Python里可以把函數(shù)本身當(dāng)成是參數(shù),比如Python內(nèi)置函數(shù)map可以通過傳入的函數(shù)返回值來一一映射列表集合里的元素,我們也可以在定義函數(shù)時(shí),以調(diào)用函數(shù)的方式使用參數(shù)。
1.2 Map映射
假設(shè)有一個(gè)列表1至9共有9個(gè)元素,現(xiàn)在需要求其平方數(shù)列。
map(函數(shù)名,列表)
map函數(shù)的示例
1 >>> def square(x): 2 ... return x**2 3 ... 4 >>> s = map(square,[1,2,3,4,5,6,7,8,9]) 5 >>> list(s) 6 [1, 4, 9, 16, 25, 36, 49, 64
?
以上的代碼,主要完成了如下的動(dòng)作:
- 定義了square函數(shù),返回參數(shù)的平方
- 調(diào)用map函數(shù)生成平方數(shù)列
在包含map語句,我們使用了先前定義的函數(shù)名稱square,作為參數(shù)傳入另一個(gè)函數(shù),并且完成了映射的操作。
1.3 定義包含函數(shù)參數(shù)的函數(shù)
鄧布利多校長想比較霍格沃茨學(xué)校兩個(gè)班a,b的成績,有兩種比較方式,一種是比較最高分,另一種是比較平均分,我們用一個(gè)函數(shù)來搞定!
>>> def compare(way,a,b): ... if way(a)>way(b): ... print('a班贏了') ... elif way(a)==way(b): ... print('平了') ... else: ... print('b班贏了') >>> from statistics import mean >>> compare(mean,[90,80,90],[100,50,100]) a班贏了 >>> compare(max,[90,80,90],[100,50,100]) b班贏了
?
上面的代碼定義了函數(shù)compare,其中有三個(gè)參數(shù):
- way: 函數(shù)參數(shù),表示比較方式,是不是函數(shù)參數(shù)我們從代碼中發(fā)現(xiàn),在代碼中way后緊跟圓括號(hào),判斷這是分別對(duì)a、b進(jìn)行“某種”操作。
- a、b: 列表分別表示兩個(gè)班的成績。
在第1調(diào)用時(shí)是平均分比較,結(jié)果是a班贏了。
compare(mean,[90,80,90],[100,50,100])
平均分代碼引用了statistics模塊的mean,本函數(shù)用來計(jì)算列表的平均值。
2、匿名函數(shù):
2.1 概念
如果把每個(gè)函數(shù)形容成是固定下來的武術(shù)套路的話,有的時(shí)候簡單的一兩招,并不值得編成一個(gè)套路。我們定義函數(shù)也是這樣,匿名函數(shù)類似于簡單的兩招,它是一種簡化版的函數(shù),它沒有自己的名稱,也不能被重復(fù)使用,但是它必須返回值,使用匿名函數(shù)的目的就是快速計(jì)算。
在Python當(dāng)中匿名函數(shù)又叫:lambda表達(dá)式,其語法如下:
lambda [arg1[, arg2, ... argN]]: expression
- 以關(guān)鍵字lambda開頭
- 后緊跟參數(shù)列表,使用逗號(hào)分隔
- 冒號(hào)后跟計(jì)算式,函數(shù)返回值就是計(jì)算式的結(jié)果
表達(dá)式本身可以當(dāng)成一個(gè)函數(shù)來使用,常用的栗子如下。
2.2 排序
Python內(nèi)置排序sorted函數(shù),語法如下:
sorted(列表,key=排序關(guān)鍵字)
- 參數(shù)key:返回關(guān)鍵字的函數(shù)(一般使用匿名函數(shù))
- 返回值:排序好的列表結(jié)果
排序時(shí)程序會(huì)把列表中的單個(gè)元素放入?yún)?shù)key指定的函數(shù)當(dāng)中的參數(shù)里,根據(jù)返回的值進(jìn)行排序。
目前直男小牛叔在寫復(fù)旦大學(xué)的畢業(yè)論文,論文的標(biāo)題都是類似于1、1.1、2之類的文本,如果簡單按字符排序必然會(huì)出現(xiàn)1、10、1.10、1.2 ...... 不合理的奇怪序列(字符總是從前到后比較那么10會(huì)比2?。?,比如如下的列表['10','1.1','1','2','1.3','3','2.10','2.2'],我們可以使用如下的代碼:
1 >>> a = ['10','1.1','1','2','1.3','3','2.10','2.2'] 2 >>> sorted(a) 3 ['1', '1.1', '1.3', '10', '2', '2.10', '2.2', '3'] 4 >>> sorted(a,key = lambda x:int(x.split('.')[0]) + (int(x.split('.')[1])/10000 if '.' in x else 0)) 5 ['1', '1.1', '1.3', '2', '2.2', '2.10', '3', '10'] 6 >>>
?文章來源:http://www.zghlxwxcb.cn/news/detail-762348.html
我們先看看key參數(shù)當(dāng)中的匿名函數(shù)是什么:文章來源地址http://www.zghlxwxcb.cn/news/detail-762348.html
引申:Python語言把函數(shù)也當(dāng)成是類似于一種包含代碼的變量,函數(shù)本身可以類似于變量,作為傳遞的參數(shù),這本是Javascript等類似函數(shù)式編程的方式。其實(shí),函數(shù)也可以被當(dāng)成是返回值。
---小牛書0基礎(chǔ)Python系列教程---
【每天1篇1周入門,請(qǐng)點(diǎn)擊下方的喜歡和收藏,以備學(xué)習(xí)】
到了這里,關(guān)于Python趣味入門11:函數(shù)作為參數(shù)以及匿名函數(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!