函數【七】高階函數/內置函數

python函數式編程

 

高階函數:就是把函數當成參數傳遞的一種函數

一、函數名能夠進行賦值;html

二、函數名能夠做爲函數參數,還能夠做爲函數的返回值;python

a、函數是第一類對象編程

b、函數能夠被賦值app

c、能夠被當作參數函數式編程

d、能夠當作返回值函數

e、能夠做爲容器類型的元素post

def f(n):
    return n*n
def foo(a,b,func):
    ret = func(a) + func(b)
    return ret
foo(1,2,f)
print(foo(1,2,f))
#傳入參數a=1,b=2,func=f;
#ret = f(1) + f(2);
#f(1)=1,f(2)=4此時調用f函數;
#ret=5;

map函數:

描述url

map() 會根據提供的函數對指定序列作映射。spa

第一個參數 function 以參數序列中的每個元素調用 function 函數,返回包含每次 function 函數返回值的新列表。code

語法

map() 函數語法:

1
map (function, iterable, ...)

參數

  • function -- 函數
  • iterable -- 一個或多個序列

返回值

Python 2.x 返回列表。

Python 3.x 返回迭代器。

實例

1
2
3
4
5
6
7
8
9
10
11
>>> def  square(x) :             # 計算平方數
...      return  * *  2
...
>>>  map (square, [ 1 , 2 , 3 , 4 , 5 ])    # 計算列表各個元素的平方
[ 1 4 9 16 25 ]
>>>  map ( lambda  x: x  * *  2 , [ 1 2 3 4 5 ])   # 使用 lambda 匿名函數
[ 1 4 9 16 25 ]
  
# 提供了兩個列表,對相同位置的列表數據進行相加
>>>  map ( lambda  x, y: x  +  y, [ 1 3 5 7 9 ], [ 2 4 6 8 10 ])
[ 3 7 11 15 19 ]
msg = [1,12,33,42,15,16]
#需求自增1
def add_one(x):
    return x+1
#需求自減1
def reduce(x):
    return x-1
#需求平方
def pf(x):
    return x**2
#實現邏輯
def fangfa(func,red):
    ret = []
    for i in red:
        res = func(i)
        ret.append(res)
    return ret
print(fangfa(add_one,msg))
print(fangfa(reduce,msg))
print(fangfa(pf,msg))

print(fangfa(lambda x:x+1,msg)) #用lambda函數替換add_one函數
print(fangfa(lambda x:x-1,msg)) #用lambda函數替換requce函數
print(fangfa(lambda x:x**2,msg))#用lambda函數替換pf函數

print(list(map(lambda x:x+1,msg))) #map處理的結果是一個可迭代對象,python3中需用list轉換;
print(list(map(lambda x:x-1,msg))) #map的第一個參數是邏輯,第二個參數是可迭代對象;
print(list(map(lambda x:x**2,msg)))

 filter函數:

描述

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

該接收兩個參數,第一個爲函數,第二個爲序列,序列的每一個元素做爲參數傳遞給函數進行判,而後返回 True 或 False,最後將返回 True 的元素放到新列表中。

語法

如下是 filter() 方法的語法:

1
filter (function, iterable)

參數

  • function -- 判斷函數。
  • iterable -- 可迭代對象。

返回值

返回列表

實例

如下展現了使用 filter 函數的實例:

1
2
3
4
5
6
7
def  is_odd(n):
     return  %  2  = =  1
  
newlist  =  filter (is_odd, [ 1 2 3 4 5 6 7 8 9 10 ])
print (newlist)
 
[ 1 3 5 7 9 ]
lise_l = ["sb_asd","sb_we","sb_ig","rng"]
#需求去掉開頭是sb的
def sh_show(n):
    return n.startswith("sb")
#實現邏輯
def filter_test(func,array):
    red = []
    for i in array:
        if not sh_show(i):
            red.append(i)
    return red
print(filter_test(sh_show,lise_l))

print(filter_test(lambda n:n.startswith("sb"),lise_l))#lambda

print(list(filter(lambda n:not n.startswith("sb"),lise_l)))#filter

 reduce函數

描述

reduce() 函數會對參數序列中元素進行累積。

函數將一個數據集合(鏈表,元組等)中的全部數據進行下列操做:用傳給 reduce 中的函數 function(有兩個參數)先對集合中的第 一、2 個元素進行操做,獲得的結果再與第三個數據用 function 函數運算,最後獲得一個結果。

在 Python3 中,reduce() 函數已經被從全局名字空間裏移除了,它如今被放置在 fucntools 模塊裏,若是想要使用它,則須要經過引入 functools 模塊來調用 reduce() 函數:

1
from  functools  import  reduce
1
2
3
4
5
6
7
from  functools  import  reduce
 
def  add(x,y):
     return  +  y
 
print  ( reduce (add,  range ( 1 101 )))
  

語法

reduce() 函數語法:

1
2
reduce (function, iterable[, initializer])
  

參數

  • function -- 函數,有兩個參數
  • iterable -- 可迭代對象
  • initializer -- 可選,初始參數

返回值

返回函數計算結果。

實例

如下實例展現了 reduce() 的使用方法:

1
2
3
4
5
6
7
>>> def  add(x, y) :             # 兩數相加
...      return  +  y
...
>>>  reduce (add, [ 1 , 2 , 3 , 4 , 5 ])    # 計算列表和:1+2+3+4+5
15
>>>  reduce ( lambda  x, y: x + y, [ 1 , 2 , 3 , 4 , 5 ])   # 使用 lambda 匿名函數
15

 python的內置函數

    內置函數    
abs() divmod() input() open() staticmethod()
all() enumerate() int() ord() str()
any() eval() isinstance() pow() sum()
basestring() execfile() issubclass() print() super()
bin() file() iter() property() tuple()
bool() filter() len() range() type()
bytearray() float() list() raw_input() unichr()
callable() format() locals() reduce() unicode()
chr() frozenset() long() reload() vars()
classmethod() getattr() map() repr() xrange()
cmp() globals() max() reverse() zip()
compile() hasattr() memoryview() round() __import__()
complex() hash() min() set()  
delattr() help() next() setattr()  
dict() hex() object() slice()  
dir() id() oct() sorted() exec 內置表達式
 

 

  內置函數用法

 

max和min高級用法:

用法

一、max進行比較時傳入的數據類型必須是可迭代對象(基本原理就是一個for循環依次取出可迭代對象中的每個元素進行比較);

二、比較時從第一個元素進行比較(按ascii碼進行排序),若是第一個元素分出大小則後面就不進行比較了;

1
2
3
ll  =  [ "10a" , "A20" , "A10" ]
print ( max (ll))
A20

 

1
2
3
msg  =  { "age1" : 18 , "age2" : 20 }
print ( max ( zip (msg.values(),msg.keys())))
( 20 'age2' )

 

1
2
3
4
5
6
7
people  =  [
     { "name" : "alex" , "age" : 70 },
     { "name" : "wpq" , "age" : 100 },
     { "name" : "lhf" , "age" : 30 },
     { "name" : "lw" , "age" : 50 }
]
print ( max (people,key = lambda  dic:dic[ "age" ]))  #傳入key參數
相關文章
相關標籤/搜索