Python中的函式作用域

2022-10-04 10:18:10 字數 1929 閱讀 8586

在python中,乙個函式就是乙個作用域

name = 'xiaoyafei'

def change_name():

name = '肖亞飛'

print('在change_name裡的name:',name)

change_name() # 呼叫函式

print("在外面的name:",name)

執行結果如下:

在change_name裡的name: 肖亞飛

在外面的name: xiaoyafei

我們再試一下在巢狀函式中是如何的尋找的?

age = 15

def func():

print('第一層age:',age) # 第一層age: 15

def func2():

age = 73

print("func2中的age:",age) # func2中的age: 73

def func3():

age = 84

print("func3中的age:",age) # func3中的age: 84

func3() # 呼叫func3函式

func2() # 呼叫func2函式

func()

在以上巢狀函式中,就能夠很好的說明乙個函式就是乙個作用域,那麼我們現在稍微改一下**看看情況?

age = 15

def func():

print('第一層age:',age) # 第一層age: 15

def func2():

print("func2中的age:",age) # func2中的age: 15 # 看到沒有,如果當前作用域裡沒有age變數,那麼它就會往上找

def func3():

age = 84

print("func3中的age:",age) # func3中的age: 84

func3() # 呼叫func3函式

func2() # 呼叫func2函式

func()

那麼,這時候有人就說了,屁話一大堆講的原來是區域性變數和全域性變數,那麼我想問:在上面這個巢狀函式中,func2中並沒有age變數,那麼它是如何找到全域性變數age程式設計客棧 = 15的?

此時我們就需要來看一下作用域的查詢順序了:

變數作用域legb

咳咳,還是先了解下什麼是命名空間把?

命名空間,又名 name space ,顧名思義就是存放名字的地方,存什麼名字呢?舉例說明,x = 1 ,1存放在記憶體當中,那麼變數名x存放在**呢? 命名空間就是存放名字x與1繫結關係的地方

>>> x = 1

>>> id(1)

1576430608

命名空間分為以下3種:

程式設計客棧

不同變數的作用域不同就是有這個變數所在的命名空間決定的.

作用域即範圍

讓我們來舉例看一下

level = 'l0'

n = 22

def func():

level = 'l1'

n = 33

print(locals()) # 在之前說過在python中,乙個函式就是乙個作用域,這就很完美的體現了

def outer():

n = 44

level = 'l2'

print(locals(),n) # 44

def inner():

level = 'l3'

print(locals(),n) # 44

inner()

outer()

func()

以 l --> e --> g -->b 的規則查詢,即:在區域性找不到,便會去局程式設計客棧部外的區域性找(例如閉包),再找不到就會去全域性找,再者去內建函式中找。

總結本文標題: python中的函式作用域

本文位址: /jiaoben/python/227288.html

python中函式作用域

在python中,乙個函式就是乙個作用域 name xiaoming defchange name name sthu print 在change name裡的name name change name 呼叫函式 print 在外面的name name 執行結果如下 在change name裡的na...

python中函式作用域 python中函式作用域

1 作用域 如果乙個變數在def內賦值,他被定位在這個函式內 如果乙個變數在乙個巢狀的def中賦值,對於巢狀的函式來說,它非本地的 如果在def之外賦值,他就是整個檔案 2 在互動式模式下,其實是在乙個名為 main 的模板內。3 乙個函式的內部的任何型別的賦值都會把乙個名稱劃定為本地的。這包括 語...

Python 函式作用域

python中變數作用域分4種情況 x max 1,6 max為系統變數,它的作用域為python的所有模組 y 1 y為全域性變數,它的作用域為當前模組 defouter i 3 i的作用域為當前函式,包括巢狀函式 definner count 2 count為區域性變數,作用域只在當前函式有效函...