python高级函数,将函数作为变量、返回函数
python中使用函數作為參數
在python中,我們可以用一個變量來存放函數。示例:
a = len length = a([1,2,3,4,5]) print(length)在上面我將len()函數賦值給了變量a。那么我們以后我們使用len()函數的的時候就完全可以使用a這個變量來代替了。
既然我們可以用一個變量來存放函數,那么函數一可以當作一個函數的參數使用。
示例代碼:
def add(x,y,f):return f(x)+f(y)result = add(1,-2,abs) print(result)在上面的函數中,擁有3個變量,x,y表示傳入的值,f表示傳入的函數
我們在調用此函數的時候就傳入了1,-2兩個值,然后將abs函數傳入了進去,(abs()就是獲取值的絕對值)
這樣,我們就實現了將函數作為參數傳入參數中去。
再例如,我們需要求
這個表達式的值,那么我們可以這樣做:
這樣,我們就可以求出上面表達式的值了。
python中的map()函數
map()是 Python 內置的高階函數,它接收一個函數 f 和一個 list,并通過把函數 f依次作用在list 的每個元素上,得到一個新的 list 并返回。
例如,將一個列表中的所有值都變為原來的平方
def func(x):return x*xnew_list = map(func,[1,2,3,4,5,6,7,8,9])for list in new_list:print(list)需求:假設用戶輸入的英文名字不規范,沒有按照首字母大寫,后續字母小寫的規則,請利用map()函數,把一個list(包含若干不規范的英文名字)變成一個包含規范英文名字的list:
輸入:['adam', 'LISA', 'barT'] 輸出:['Adam', 'Lisa', 'Bart']代碼:
def format_name(s):return s[0].upper() + s[1:].lower()new_list = map(format_name,['adam', 'LISA', 'barT']) for list in new_list:print(list)python中的reduce()函數
reduce()函數也是Python內置的一個高階函數。reduce()函數接收的參數和 map()類似,一個函數 f,一個list,但行為和 map()不同,reduce()傳入的函數 f 必須接收兩個參數,reduce()對list的每個元素反復調用函數f,并返回最終結果值。
在python3中,reduce()函數已經從全局函數中移除了,放在fucntools,所以我們首先得導入從fucntools中導入reduce()函數
from functools import reducedef add1(x,y):return x+ysum = reduce(add1,[1,3,5,7,9]) print(sum)執行上面的代碼的時候,reduce()函數會做一下計算:
上述計算實際上是對 list 的所有元素求和。雖然Python內置了求和函數sum(),但是,利用reduce()求和也很簡單。
reduce()還可以接收第3個可選參數,作為計算的初始值。如果把初始值設為100,計算:
sum = reduce(add1,[1,3,5,7,9],100)那么結果將會變成125,因為第一輪計算是:計算初始值和第一個元素:f(100, 1),結果為101。
Python內置了求和函數sum(),但沒有求積的函數,我么來嘗試一下用reduce()函數求積:
例如:
代碼:
def prod(x,y):return x*ysum = reduce(prod,[2,4,5,7,12]) print(sum)這樣就能達到我們想要的效果了。
python中filter()函數
filter()函數是 Python 內置的另一個有用的高階函數,filter()函數接收一個函數 f 和一個list,這個函數 f 的作用是對每個元素進行判斷,返回 True或 False,filter()根據判斷結果自動過濾掉不符合條件的元素,返回由符合條件元素組成的新list。
例如,要從一個list [1, 4, 6, 7, 9, 12, 17]中刪除偶數,保留奇數,首先,要編寫一個判斷奇數的函數:是奇數返回True,否則返回False
def is_odd(x):return x%2 == 1然后使用filter()過濾偶數:
new_list2 = filter(is_odd,[1,2,3,4,5,6,7,8,9]) for list in new_list2:print(list)這樣就能將偶數過濾掉了。
利用filter(),可以完成很多有用的功能,例如,刪除 None 或者空字符串:
def is_not_empty(s):return s and len(s.strip()) > 0new_list4 = filter(is_not_empty, ['test', None, '', 'str', ' ', 'END']) for list in new_list4:print(list)需求:請利用filter()過濾出1~100中平方根是整數的數,即結果應該是:
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
python中返回函數
Python的函數不但可以返回int、str、list、dict等數據類型,還可以返回函數!
示例:
def f():print('我是外層函數')def g():print('我是內層函數,被返回的函數')return gf() print('*'*10) test = f() print('*'*10) test()然后我們可以查看運行結果
可以看到,當我們執行函數f的時候,并不會執行里面的函數。當我們用一個變量test接收f函數的返回值時,然后再調用test()才執行了g函數里面的代碼
需求:請編寫一個函數calc_prod(lst),它接收一個list,返回一個函數,返回函數可以計算參數的乘積。
from functools import reducedef calc_prod(lst):def lazy_prod():def f(x, y):return x * yreturn reduce(f, lst, 2)return lazy_prod f = calc_prod([1, 2, 3, 4]) result = f() print(result)這樣就實現了我們的需求了。
python閉包
閉包本身是一個晦澀難懂的概念,在這里我們以簡單粗暴地理解為閉包就是一個定義在函數內部的函數,閉包使得變量即使脫離了該函數的作用域范圍也依然能被訪問到。
例如:
def func(x):def func1(y):return x + yreturn func1test = func(4) print(test) tes1 = test(5) print(tes1)在上面的func函數中擁有x變量,但是在func1函數中并沒有x變量,但是因為python中函數支持閉包操作,也就是在函數中定義一個函數可以訪問函數范圍之外的變量。
python中lambda表達式
簡單來說,編程中提到的 lambda 表達式,通常是在需要一個函數,但是又不想費神去命名一個函數的場合下使用,也就是指匿名函數。其一般有如下幾種使用方式:
f= lambda x: x*x print(f(3))上面的代碼相當于
def test(x):return x*x print(test(3))參考連接:https://www.imooc.com/video/6064
總結
以上是生活随笔為你收集整理的python高级函数,将函数作为变量、返回函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python 爬取百度图片的高清原图
- 下一篇: 网络流量分析软件 mysql_网络流量监