Python的內嵌函式和閉介紹

2021-10-03 22:33:47 字數 2530 閱讀 8492

python的內嵌函式和閉介紹

# **段1

def fun1():

print('外層函式正在被呼叫')

def fun2():

print('內層函式正在被呼叫')

fun1()

'''輸出如下:

外層函式正在被呼叫

'''

# **段2

def fun1():

print('外層函式正在被呼叫')

def fun2():

print('內層函式正在被呼叫')

fun2()

fun1()

'''輸出:

外層函式正在被呼叫

內層函式正在被呼叫

''''''

fun2() # 內嵌函式不能直接被呼叫,否則會報如下錯誤

nameerror: name 'fun2' is not defined

'''

注:①內嵌函式不能再外層函式被呼叫的過程中自動被呼叫

②內部函式不能被外部直接使用,需要通過其外層函式的呼叫發揮作用

# **段3

def funx(x):

def funy(y):

return x * y

return funy # 返回內層函式

print funx(2)(5) # 對閉包的呼叫

'''輸出:

10'''

m = funx(2) # 只對外層函式進行了呼叫

print type(m) # 所以函式的返回型別及m的型別為function

'''輸出:

'''print m(3) # 繼續對內層函式進行呼叫

'''輸出:

6'''

注:能不直接訪問全域性變數盡量不要訪問,如需使用全域性變數可以使用函式進行傳參。
num = 3

def count():

global num

num = 5

print(num)

count()

'''輸出:

5'''

print num

'''輸出:

5'''

因為nonlocal是在python3.x中新增的關鍵字,python2.x不提供支援,

文中提出在python2.x解決巢狀函式引用外部變數的方法只有使用global 關鍵字定義全域性變數,

另一種可行的解決方案是使用列表或字典代替要操作的關鍵字。

1).python3.x 使用nonlocal關鍵字

2).python2.x 借助list或dict實現

# 1).python3.x 使用nonlocal關鍵字

def outer():

x = 1

def inner():

nonlocal x

x = 2

print("inner:", x)

inner()

print("outer:", x)

outer()

'''inner: 2

outer: 2

'''

# 2).python2.x 借助list或dict實現

def outer():

x = [1]

def inner():

x[0] += 1 # 修改x[0]儲存的值

print "inner:", x[0]

inner()

print "outer:", x[0]

outer()

'''inner: 2

outer: 2

'''

# 例子1:

def funx():

x = 5

def funy():

nonlocal x

x += 1

return x

return funy

a = funx()

print(a())

print(a())

print(a())

'''#例子1結果:67

8'''

# 例子2:

def funx():

x = 5

def funy():

nonlocal x

x += 1

return x

return funy

a = funx()

print(a())

a = funx()

print(a())

a = funx()

print(a())

'''#例子2結果:66

6'''

參考:

python 內嵌函式和閉包

在函式體內定義函式 定義a 函式 defa print a 函式 定義b 函式 defb print b 函式 呼叫b 函式 b 呼叫a 函式 a 輸出 a 函式 b 函式 定義閉包函式 defa num1 def b num2 return num1 num2 return b 檢視a 函式的返回...

內嵌函式和閉包

1 python裡面定義函式和c裡面一樣,也存在函式的巢狀定義,eg def fun1 x def fun2 y z x y return z return fun2則在函式呼叫的時候需要傳遞2個實參,分別給x,y 且形式為 result fun1 a b 2 由於在python函式定義的時候,出現...

課時20 內嵌函式和閉包

目錄 一 global關鍵字 二 內嵌函式 三 閉包 四 課時20課後習題及答案 一 global關鍵字 全域性變數的作用域是整個模組 整個 段 也就是 段內所有的函式內部都可以訪問到全域性變數。但是要注意一點,在函式內部僅僅去訪問全域性變數就好,不要試圖去修改它。因為那樣的話,python會使用遮...