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

2022-06-02 02:12:10 字數 2169 閱讀 3372

語法規則:

lambda 引數:表示式

filter(lambdax: x>10, li)

匿名函式:可以賦給乙個變數,重複使用。

fun1 = lambda x: x * 10

print(fun1(10))

列印結果: 100fun = (lambda x: x * 10)(5)

print

(fun)

列印結果: 50

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

def fun1():

x = 1

print(x)

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

x = 123

def fun2():

print(x)

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

x = 123

def fun3():

x = x + 1

print(x)

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

x = 123

print(x,id(x))

def fun1():

x = 456

return x,id(x)

a = fun1()

print(a)

函式內部:函式內部的變數,作用域只在函式內部,函式內部不可以直接更改函式外部的變數

global: 函式內部如果需要改變全域性變數,就需要使用global修飾變數

例項:

x = 123

deffun1():

global

x x +=1

return

xb =fun1()

print(b)

例項:

def

fun2():

x = 123

deffun3():

nonlocal x

x +=1

return

x

return

fun3()

a =fun2()

print(a)

內嵌函式:

def

fun1():

print('

fun1()在被呼叫')

deffun2():

print('

fun2()在被呼叫')

​ fun2()​​

fun1()

閉包:

def

func1():

print('

外層函式')

deffunc2():

print('

內層函式')

return 1 + 1​

return

func2()​​

result =func1()

print

(result)

​列印結果:

外層函式

內層函式

2

閉包是函式裡面巢狀函式,外層函式返回裡層函式,這種情況稱之為閉包

閉包是概念,不是某種函式型別,和遞迴的概念類似,就是種特殊的函式呼叫

閉包可以得到外層函式的區域性變數,是函式內部和函式外部溝通的橋梁

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

遞迴例項:

def

fun1():

print('

金錢 == 愛情')

return

fun1()

fun1()

階乘:

def

func(a):

if a == 1:

return

a

else

:

return func(a - 1) *a

#result func(a - 1) + a 實現累加

result = func(5)

print

(result)

列印結果:120

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

filter lambda x x 10,li 語法規則 lambda 引數 表示式 簡單的函式,可以不用使用def定義乙個函式,使用匿名函式即可 函式呼叫,類似於filter map等函式裡面,可以使用匿名函式來處理 提高開發效率,匿名函式的合理利用能夠讓那個 更加簡潔 print lambda ...

閉包 函式 作用域

指有權訪問另乙個函式作用域中的變數的函式 要理解閉包就必須要了解作用域鏈 後台的每個執行環境都有乙個表示變數的物件 變數物件。全部變數物件始終都存在 而像compare 函式這樣的區域性環境的變數物件,則只在函式執行的過程中存在 在建立compare 函式的時候,會建立乙個預先包括全域性變數物件的作...

Python函式的作用域 閉包函式

全域性作用域 全域性命名空間與內建命名空間的名字都屬於全域性範圍,在整個檔案的任意位置都能被引用,全域性有效 區域性作用域 區域性命名空間,只能在區域性範圍內生效 如果全域性有,用全域性的。如果全域性沒有,用內建的。globals方法 檢視全域性作用域的名字 print globals locals...