1. 程式人生 > >我的第九篇博客---python的高階函數

我的第九篇博客---python的高階函數

時也 叠代器 缺省 所有 function iterable 例如 ict true

python的高階函數

map():

map()函數用法:
map(function,iterable,...)
功能:將第一個參數function依次作用在參數可叠代對象中的每一個元素上,返回包含每次function函數返回值的新叠代器
參數:
function--函數,有幾個參數,下面傳幾個可叠代對象
iterable--一個或多個可叠代對象(如,序列)
返回值:
python 3.x

實例:
def add(n,q,e):
return n+q+e
f=map(add,[1,2],{1,2},(1,2))
for x in f:
print(x)
結果是:
3
6

輸出時也可以print(list(f))

結果是:
[3,6]
是將結果以一個列表的形式輸出


def add(n):
return n*n
f=map(add,[1,2,3])
for x in f:
print(x)
結果是:
1
4
9

————————————————————————————————————————————————

reduce:

reduce()函數:
reduce(function,iterable[,initializer])
功能:
函數將一個數據集合(鏈表、元祖等)中的所有數據進行下列操作:
用傳給reduce中的函數function(有兩個參數)先對集合中的第1、2個元素進行操作,得到的結果再與第三個數據用function函數運算,最後得到一個結果
其效果類似:ruduce(f,[x1,x2,x3])=f(f(x1,x2),x3)
參數:
function--函數,有兩個參數
iterable--可叠代對象
initializer--可選,初始參數

例如:
from functools import reduce

def add(x,y):
return x+y
q=[1,2,3,4]
f=reduce(add,q[2::])
print(f)
結果為7
列表也可以切片 要記住切片的範圍是左閉右開

reduce裏傳的函數裏只能有兩個參數
map裏可傳一個、兩個、三個。。。

————————————————————————————————————————————————

filter:

filter()函數
filter(function,iterable)
功能:
該接受兩個函數,第一個為函數,第二個為序列,序列的每個元素作為參數傳遞給函數進行判斷,然後返回True或False,最後將返回True的元素放到新的叠代器對象中
參數
function--判斷函數
iterable--可叠代對象(如 序列)
返回值:
返回一個叠代器對象

實例:
def add(n):
return n%2==1
f=filter(add,[1,2,3,4])
for x in f:
print(x)
結果為:
1
3

dict2=[{‘name‘:‘小明‘,‘age‘:10},{‘name‘:‘小紅‘,‘age‘:20},{‘name‘:‘校長‘,‘age‘:15}]
print(sorted(dict2,key=lambda x:x[‘age‘]))

————————————————————————————————————————————————————

sorted:

sorted()函數
sorted(iterable,key=abs,reverse=False)
功能:對所有可叠代對象進行排序操作
參數
iterable--可叠代對象
key--key指定的哈桑農戶將作用於可叠代對象上的每一個元素,並根據key函數返回的結果進行排序
reverse--排序規則,reverse=True降序,reverse=False升序(默認)
返回值:
返回重新排序的列表

例如:
list=[‘I‘,‘am‘,‘and‘,‘student‘]
按照單詞長度進行降序排序:
print(sorted(list,key=lambda x:len(x),reverse=True))
結果為:
[‘student‘, ‘and‘, ‘am‘, ‘I‘]

stus=[
{"name":"zhangsan","age":18},
{"name":"zhangsan","age":17},
{"name":"zhangsan","age":19}
]
按照年齡升序排序
print(sorted(stus,key=lambda x : x[‘age‘]))
結果為:
[{‘name‘: ‘zhangsan‘, ‘age‘: 17}, {‘name‘: ‘zhangsan‘, ‘age‘: 18}, {‘name‘: ‘zhangsan‘, ‘age‘: 19}]

結論:sorted()函數裏第一個參數是可叠代對象
第二個參數是key=lambda x: x(可叠代對象中的元素)

————————————————————————————————————————————————

匿名函數:

f=lambda x : x
print(f(2))
結果為2


相當於
def f(n):
return n
print(f(2))

——————————————————————————————————————————————

偏函數:

偏函數由function.partial創建,它的作用是,把一個函數的某些參數給固定住(也就是設置默認值),返回一個新的函數,調用這個新函數會更簡單

實例:
import functools
def add(a,b):
return a+b
add2=functools.partial(add,b=10)
r=add2(5) #相當於 r=add(5,10)
print(r)
結果為:15

跟缺省函數差不多
def add(a,b=10):
return a+b
print(add(5))

——————————————————————————————————————

裝飾器:

def w1(func):
def inner():
print(‘---1---‘)
print(‘123‘)
return inner
@w1 #相當於f=w1(f)
def fi():
print(‘555‘)
結果為:
123

def w1(func):
def inner():
print(‘---1---‘)
print(‘123‘)
return inner
@w1 #相當於f=w1(f)
def fi():
print(‘555‘)
f1()
結果為:
123
---1---

def w1(func):
def inner():
print(‘---1---‘)
func() #這裏執行的是f1()函數
print(‘123‘)
return inner
@w1 #相當於f=w1(f)
def fi():
print(‘555‘)
f1()
結果為:
123
---1---
555

我的第九篇博客---python的高階函數