亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

高階函數(shù)、閉包、匿名函數(shù)

Original 2016-11-21 09:19:53 750
abstract:高階函數(shù)、匿名函數(shù)、閉包高階函數(shù)函數(shù)可以賦給變量可以被其他函數(shù)調(diào)用可以從其他函數(shù)中返回一個函數(shù)#定義函數(shù)sum_1def sum_1(a, b):    return a + b賦值給變量#賦值給變量testtest = sum_1#調(diào)用test(7, 8)15被其他函數(shù)調(diào)用#定

高階函數(shù)、匿名函數(shù)、閉包

高階函數(shù)

函數(shù)可以賦給變量

可以被其他函數(shù)調(diào)用

可以從其他函數(shù)中返回一個函數(shù)

#定義函數(shù)
sum_1def sum_1(a, b):
    return a + b

賦值給變量

#賦值給變量
testtest = sum_1#調(diào)用test(7, 8)
15

被其他函數(shù)調(diào)用

#定義函數(shù)test2def 
test2(func, arg1, arg2):
    ret = func(arg1, arg2)
    print(ret)
#函數(shù)test2調(diào)用函數(shù)
sum_1test2(sum_1, 7, 8)
15

返回一個函數(shù)

#定義可變參數(shù)求和函數(shù)
sum_2def sum_2(*args):
    s = 0
    for i in args:
        s += i
    return s
#定義一個返回求和函數(shù)的函數(shù)
sum_3def sum_3(*args):
    def sum_2():
        s = 0
        for i in args:
            s += i
        return s
    return sum_2
#調(diào)用sum_3,返回的是求和函數(shù)
sum_2f = sum_3()type(f)
function
f(1, 4, 5)
10

閉包

內(nèi)部函數(shù)可以引用外部函數(shù)的參數(shù)和局部變量,當(dāng)內(nèi)部函數(shù)被返回時,相關(guān)參數(shù)和變量都保存在返回的函數(shù)中

外部函數(shù)第一次調(diào)用傳遞的局部變量,能被返回的新函數(shù)所引用

外部函數(shù)的主要作用是給內(nèi)部函數(shù)提供運(yùn)行環(huán)境

#定義函數(shù)test_3返回新函數(shù)y的x次方
def test_3(x):
    def power(y):
        return y ** x
    return power
#調(diào)用test3生成新函數(shù)y ** 2
new_fun = test_3(2)type(new_fun)
function

新函數(shù)不斷的引用第一次傳遞給外層函數(shù)的變量

#調(diào)用新函數(shù)
new_fun(3)
4
new_fun(5)
25

匿名函數(shù)lambda

本身沒有名稱調(diào)用時賦予一個變量名

是一個表達(dá)式非語句、非代碼塊

不能出現(xiàn)非表達(dá)式語句

用途指定短小的回調(diào)函數(shù)

f = lambda x,y: x + yf(3, 4)
7
#定義列表list1元素為2個函數(shù)
list1 = [(lambda x:x*3), (lambda y:y*9)]
#遍歷列表給函數(shù)賦值
for i in list1:
    print(i(5))
15
45

過濾器filter

為已知的序列,每個元素調(diào)用給定的布爾函數(shù)

返回值為真的元素將會被添加到一個列表中

#定義列表
list2 = [1, 33, 45, 13, 22]
#定義布爾函數(shù)
def test4(x):
    if x > 20:
        return True
    else:
        return False
    list(filter(test4, list2))
[33, 45, 22]

映射器map

map()將函數(shù)調(diào)用映射到每個序列對應(yīng)位置的元素上并返回一個含有所有返回值的列表

#把兩個列表不做處理構(gòu)建成元組列表
def f1(x,y):
    return (x,y)list3 = [1, 2, 3, 4, 5]list4 = ['a', 'b', 'c', 'd', 'e']list(map(f1, list3, list4))
[(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd'), (5, 'e')]
#處理
def f1(x,y):
    return (x*2,y)list3 = [1, 2, 3, 4, 5]list4 = ['a', 'b', 'c', 'd', 'e']list(map(f1, list3, list4))
[(2, 'a'), (4, 'b'), (6, 'c'), (8, 'd'), (10, 'e')]

reduce 折疊

把一個函數(shù)作用在一個序列上,這個函數(shù)必須接收兩個參數(shù),reduce把結(jié)果繼續(xù)和序列的下一個元素做累積計算

#字符串轉(zhuǎn)換成數(shù)字
from functools import reducedef str2int1(s):
    def fn(x, y):
        return x * 10 + y
    def char2num(s):
        return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[s]
    return reduce(fn, map(char2num, s))str2int1('999')
999

#字符串轉(zhuǎn)換成數(shù)字,匿名函數(shù)實現(xiàn)
from functools import reducedef char2num(s):
    return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[s]def str2int(s):
    return reduce(lambda x, y: x * 10 + y, map(char2num, s))str2int('234')

234

Release Notes

Popular Entries