1. 程式人生 > 實用技巧 >【Python學習日記】B站小甲魚:內嵌函式 閉包 和 lambda表示式

【Python學習日記】B站小甲魚:內嵌函式 閉包 和 lambda表示式

global關鍵字

在函式內部使用 global關鍵字可以修改並使用區域性變數為全域性變數

內嵌函式(內部函式)  python是支援函式的巢狀的,下面的程式會執行fun1()和fun2()的功能

def fun1():
    print('fun1被呼叫')
    def fun2():
        print('fun2被呼叫')
    fun2()
fun1()

閉包  下面的程式列印FunX(8)(5)也是一樣的結果

def FunX(x):
    def FunY(y):
        return x*y
    return FunY
i = FunX(8)
print(i(5))

如果在巢狀函式裡要使用區域性變數可以使用關鍵字 nonlocal

def FunX(x):
    def FunY():
        nonlocal x
        x *= x
        return x
    return FunY()

print(FunX(5))

匿名函式 lambda 以下兩個程式是等價的

def ds(x):
    return 2*x +1
print(ds(5))

g = lambda x: 2 * x+1
print(g(5))

下面這兩個程式也是等價的

def add(x,y):
    return
x+y add(4,5) g =lambda x,y: x+y print(g(3,4))

兩個比較牛逼的BIF

過濾器filter()對映map()

filter(函式,序列) 把引數作為函式的實際引數,把返回true的函式列成新的列表 函式的功能是返回偶數

def odd(x):
    return x%2
temp = range(10)
show = filter(odd,temp)
print(list(show))

用lambda函式改寫上面那個程式就是

show = filter(lambda x:x%2,range(10))
print(list(show))

map(函式,序列) 將序列中的每一個元素作為函式的引數進行加工,直到全部加工完畢返回新的序列

print(list(map(lambda x:x*2,range(10))))

上面這個函式返回(0,2,4,6,8,10,12,14,16,18,20)