函式物件 函式的巢狀 命名空間及作用域

2022-07-28 06:00:25 字數 3616 閱讀 7680

函式物件

定義:

函式是第一類物件:函式名指向的值可以被當做引數傳遞

1.函式名可以被傳遞

name = '

jason

'x =name

print(x)

print(id(x))

def func():

print(

'from func')

print(func)

print(id(func))

f =func

func()

print(f)

f() # 其實指向的也是函式func指向函式體**的記憶體位址

2.函式名可以被當做引數傳遞給其他函式

def func():

print(

'from func')

def index(args):

print(args)

args()

print(

'from index')

index(1)

index(func)

3.函式名可以被當做函式的返回值

def index():

print(

'index')

def func():

print(

'func')

return

index

res =func()

print(res)

res()

4.函式名可以被當做容器型別的引數

def func():

print(

'func')

print(func())

l = [1,2,func,func()] # [1,2,0x000001f7d79899d8>,none]

print(l)

函式的巢狀

定義:在函式內部呼叫其他函式,可以將負責的邏輯簡單化

def

index():

func()

print('

index')

deffunc()

print('

func')

index()

列印結果

func

index

小示例

def

my_max(x,y):

if x >y:

return

x

return

ydef

my_max4(a,b,c,d):

res1 =my_max(a,b)

res2 =my_max(res1,c)

res3 =my_max(res2,d)

return

res3

print(my_max4(1,2,10,4))

函式的巢狀定義

def

outer():

x = 1

print('

outer')

definner():

print('

inner')

print

(inner)

return

inner #outer()之後的返回值使用res接收,返回值是inner,因為這個返回值是函式名,加括號則會呼叫

res =outer()

print

(res)

res()

執行結果

outer

.inner at 0x00000140410aa598>

.inner at 0x00000140410aa598>

inner

命名空間

定義:就是放名字的地方,存放的是變數名與變數值的記憶體位址的繫結關係的地方,要想訪問乙個變數的值,必須先去命名空間中拿到對應的名字,才能夠訪問變數的值

命名空間的分類:

1.內建命名空間:python直譯器提前給你定義好的名字(已經存放到內建命名空間中了)

lenmax

min2.全域性命名空間:檔案級別的**

x = 1

if 1 ==1:

y = 2

print

(y)

while

true:

z = 3

x,y,z都會放到全域性命名空間

if ,for ,while 無論巢狀多少層,他們內部所建立的名字都是全域性命名空間的

3.區域性命名空間:函式體內置立的名字都屬於區域性命名空間

username

生命週期:

內建命名空間:只要python直譯器已啟動立馬建立 關閉python直譯器的時候內建命名空間自動銷毀

全域性命名空間:只要你右鍵執行py檔案會自動建立 py檔案程式執行結束自動銷毀

區域性命名空間:函式被呼叫的時候自動建立 函式指向結束立即銷毀(動態建立動態銷毀)

查詢順序:

由內往外查詢(前提確定自己在的乙個位置)

1.站在區域性看:區域性→全域性→內建

2.站在全域性看:全域性→內建

函式在定義階段查詢名字的順序就已經固定了 不會因為函式的呼叫位置變化而改變

x=111

defouter():

definner():

print('

from inner

',x)

return

inner

f=outer()

x = 222f() # 呼叫return出來的函式名

列印結果

222

作用域

全域性作用域(global)  global在區域性修改全域性的不可變資料型別

全域性有效: 內建命名空間 全域性命名空間

x = 1  #

不可變型別

username = '

jason

'def

func():

global x,username #

修改全域性變數 而不是建立區域性命名空間

x = 999username = '

egon

'func()

print

(x)print(username)

區域性作用域(nonlocal)  nonlocal在區域性修改區域性

區域性有效:區域性作用域

def

func():

x = 1

defindex():

nonlocal x

x = 2index()

print

(x)func()

小結: 

global:區域性修改全域性 如果想修改多個 逗號隔開

nonlocal:區域性修區域性 如果想修改多個 逗號隔開

函式物件,巢狀,命名空間與作用域

1 函式名可以被傳遞 2 函式名可以被當做引數傳遞給其餘函式 3 函式名可以當做函式的返回值 4 函式名可以當做容器型別的引數 例如 函式名可以被傳遞給變數 deffunc print test f func 變數名f指向函式的記憶體位址 通過該記憶體位址該變數可以找到函式對應的 塊 f 變數名f呼...

函式的巢狀及命名空間 作用域

六.函式的巢狀 1.在函式內又呼叫了其他函式 def max2 x,y 兩個值比較 if x y return x else return yres max2 1,3 print res def max3 x,y,z 三個值比較 res1 max2 x,y res2 max2 res1,z retu...

函式物件,函式巢狀,命名空間,作用域,閉包函式

一 函式物件 函式是第一類物件 值的記憶體位址可以像變數一樣去使用 def foo foo 函式的記憶體位址,可以當做一種變數值去使用 1 函式可以被引用 def foo print hello f foo print f f 2 可以當作引數傳遞 def foo print hello def b...