Python函式的作用域 閉包函式

2022-05-26 04:54:10 字數 2671 閱讀 2658

全域性作用域:全域性命名空間與內建命名空間的名字都屬於全域性範圍,在整個檔案的任意位置都能被引用,全域性有效

區域性作用域:區域性命名空間,只能在區域性範圍內生效

如果全域性有,用全域性的。如果全域性沒有,用內建的。

globals方法:檢視全域性作用域的名字【

print

(globals())】

locals方法:檢視區域性作用域的名字【

print

(locals())】

global關鍵字:強制轉換為全域性變數

注意:這個方法盡量能少用就少用

x=1def

foo():

global x #

強制轉換x為全域性變數

x=10000000000

print

(x)foo()

print

(x)nonlocal讓內部函式中的變數在上一層函式中生效,外部必須有

x=1def

f1():

x=2def

f2():

#x=3

deff3():

#global x#修改全域性的

nonlocal x#

修改區域性的(當用nonlocal時,修改x=3為x=100000000,當x=3不存在時,修改x=2為100000000 )

#必須在函式內部

x=10000000000f3()

print('

f2內的列印

',x)

f2()

print('

f1內的列印

', x)

f1()

print

(x)def

func():

print('

func')

print

(func)

函式可以當作資料傳遞

deffoo():

print('

foo'

)def

bar():

print('

bar'

)dic=

while

true:

choice=input('

>>:

').strip()

if choice in

dic:

dic[choice]()

函式名可以用做函式的引數

deffunc():

print('

func')

deffunc2(f):

f()print('

func2')

func2(func)

函式名可以作為函式的返回值

return說明1

deffunc():

deffunc2():

print('

func2')

return

func2

f2=func()

f2()

2.def

f1(x):

print

(x)

return

'123

'def

f2():

ret = f1('

s') #

f2呼叫f1函式

print

(ret)

f2()

3.def

func():

deffunc2():

return'a

'return func2 #

函式名作為返回值

func2=func()

print

(func2())

閉包函式

1.閉 :內部的函式

2.包 :包含了對外部函式作用域中變數的引用

deffoo():

x=20

definner():

x=10 #

如果x定義了,他就用自己的了,就實現不了閉包

print

(x)

閉包的常用形式:

deffoo():

x=20

definner():

'''閉包函式

'''print

(x)

return

inner()

判斷閉包函式的方法:

__closure__

輸出的__closure__有cell元素 :是閉包函式

輸出的__closure__為none :不是閉包函式

deffunc():

name = '

eva'

definner():

print

(name)

print(inner.__closure__

)

return

inner

f =func()

f()閉包的應用案例

閉包 函式 作用域

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

python函式作用域與閉包

在一些語言中,在函式中可以 巢狀 定義另乙個函式時,如果內部的函式引用了外部的函式的變數,則可能產生閉包。閉包可以用來在乙個函式與一組 私有 變數之間建立關聯關係。在給定函式被多次呼叫的過程中,這些私有變數能夠保持其永續性。維基百科 簡而言之,閉包的特點就是內部函式引用了外部函式中的變數。在pyth...

作用域 閉包

1.js執行順序 語法分析 預編譯 先生成go物件 1.函式執行生成ao物件 2.形參和變數作為ao物件的鍵名,鍵值是undefined 3.實參賦值給形參 4.在函式中找到函式宣告,把函式作為ao物件的屬性名,屬性值為函式體 執行js 作用域 變數作用範圍 1.作用域 變數作用範圍 1 函式作用域...