7 匿名函式 函式作用域 遞迴函式 閉包

2022-08-13 05:48:20 字數 3610 閱讀 3096

filter(lambda x: x>10, li)

語法規則: lambda 引數 : 表示式

簡單的函式,可以不用使用def定義乙個函式,使用匿名函式即可

函式呼叫,類似於filter、map等函式裡面,可以使用匿名函式來處理

提高開發效率,匿名函式的合理利用能夠讓那個**更加簡潔

print((lambda x,y:x+y)(11,22))

33

f = lambda x,y:x+y

print(f(11,22))

33

li = [1,3,34,2,4,6,86,4,4]

#def func(n):

#if n>4:

#return n

aa = filter(lambda n:n>4,li)

print

(list(aa))

[34, 6, 86]

外部不能訪問函式內部變數:

def

func():

a = 222 #

區域性變數

print('

函式裡邊:

',a)

return

afunc()

print('

函式外面:

',a)

函式裡邊: 222traceback (most recent call last):

file

"/home/pyvip/projects/home/pyvip/projects/基礎班/複習.py

", line 7, in

print('

函式外面:

',a)

nameerror: name 'a

'isnot defined

函式裡面不能修改函式外部變數:

a = 11        #

全域性變數

deffunc():

#global a

a += 1 #

區域性變數

print('

函式裡邊:

',a)

return

afunc()

print('

函式外面:

',a)

file

"/home/pyvip/projects/home/pyvip/projects/基礎班/複習.py

", line 7, in

func()

file

"/home/pyvip/projects/home/pyvip/projects/基礎班/複習.py

", line 4, in

func

a += 1 #

區域性變數

unboundlocalerror: local variable '

a' referenced before assignment

函式內部能夠訪問函式外部變數:

a = 11        #

全域性變數

deffunc():

#a = 222 #區域性變數

print('

函式裡邊:

',a)

return

afunc()

print('

函式外面:

',a)

函式裡面和函式外部變數名相同:

a = 11        #

全域性變數

deffunc():

a = 222 #

區域性變數

print('

函式裡邊:

',a)

return

afunc()

print('

函式外面:

',a)

函式裡邊: 222函式外面: 11

a = 11        #

全域性變數

deffunc():

global a #

宣告a是個全域性變數

a += 1 #

區域性變數

print('

函式裡邊:

',a)

return

afunc()

print('

函式外面:

',a)

函式裡邊: 12函式外面: 12

a = 11        #

全域性變數

deffunc():

#global a #宣告a是個全域性變數

a = 666 #

區域性變數

print('

外層函式func:

',a)

deffun1():

nonlocal a

#宣告a的修改對外層函式有效

a = 999

print('

內層函式fun1:

,a) fun1()

func()

print('

函式外面:

',a)

外層函式func: 666內層函式fun1: 999函式外面: 11

遞迴中可以函式自身呼叫自身,但是使用時類似於條 件迴圈一樣,要有遞迴的終止條件

使用遞迴時,常常可以讓**更加簡潔 遞迴會占用比較多的記憶體,當遞迴次數比較多時,效能就會降低, 因此不建議多使用遞迴

def

fun(n):

if n==1:

return

n

else

:

return n*fun(n-1)

a = fun(6)

print

(a)720

閉包是函式裡面巢狀函式,外層函式返回裡層函式,這種情況稱之為閉包 閉包是概念,不是某種函式型別,和遞迴的概念類似,就是種特殊的函式呼叫 閉包可以得到外層函式的區域性變數,是函式內部和函式外部溝通的橋梁,大多數時候和和裝飾器一起使用

def

fun():

deffun1():

print('

巢狀的內層函式')

print('

-----呼叫了fun-----')

return

fun1

result =fun()

print(result)

def

fun1():

a = 1

def fun2(): #

1.函式裡邊巢狀乙個函式

print('

*****fun2*****==

',a) #

2.外層函式返回的是內層函式的函式名

return fun2 #

3.內層函式有引用外層函式的變數

a =fun1()

a()*****fun2*****== 1

09 匿名函式 函式作用域 閉包 遞迴

語法規則 lambda 引數 表示式 filter lambdax x 10,li 匿名函式 可以賦給乙個變數,重複使用。fun1 lambda x x 10 print fun1 10 列印結果 100fun lambda x x 10 5 print fun 列印結果 50 01外部不能訪問函式...

Golang遞迴函式 函式型別 匿名函式和閉包

遞迴指函式可以直接或間接的呼叫自身。遞迴函式通常有相同的結構 乙個跳出條件和乙個遞迴體。所謂跳出條件就是根據傳入的引數判斷是否需要停止遞迴,而遞迴體則是函式自身所做的一些處理。通過迴圈實現1 2 3 100 func test01 int return sum 通過遞迴實現1 2 3 100 fun...

Python函式作用域和匿名函式

匿名函式的定義 全域性變數和區域性變數的概念 global 全域性變數 和 nonlocal 區域性變數 閉包 遞迴 匿名函式 匿名函式 lambda 語法規則 lambda 引數 表示式 lambda匿名函式的格式 冒號前是引數,可以有多個,用逗號隔開,冒號右邊的為表示式 lambda返回值是乙個...