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

2022-02-17 05:36:21 字數 3295 閱讀 2640

(1)函式名可以被傳遞

(2)函式名可以被當做引數傳遞給其餘函式

(3)函式名可以當做函式的返回值

(4)函式名可以當做容器型別的引數

例如:

#

函式名可以被傳遞給變數

deffunc():

print('

test')

f = func #

變數名f指向函式的記憶體位址 通過該記憶體位址該變數可以找到函式對應的**塊

f() #

變數名f呼叫函式

print(f) #

#函式名可以當做引數傳遞給其餘函式

deffunc():

print('

test')

deffunc1(args):

print

(args)

func1(func)

#指向func的記憶體位址

func1(func()) #

test 沒有寫return 預設返回none

#函式名可以當做函式的返回值

deffunc():

print('

test')

defindex():

return

func

print(index) #

index() #

呼叫函式index

res = index() #

輸出index的返回值其指向func的記憶體位址 因為return指向的是func

res() #

呼叫函式func 輸出test 在上述中res已經找到啦func的記憶體位址 通過記憶體位址可以呼叫函式

#函式名可以當做容器型別裡的元素

defindex():

return'sr

'list = [index,index()] #

函式的記憶體位址 以及函式的值

print(list) #

[, 'sr']

函式物件

定義:函式內層在定義函式

作用:可以將複雜的問題進行簡單化

例如:

#

函式巢狀 比較大小

#a,b,c,d求出其中的最大值

#步驟一:兩兩比較 選出其中大的在與第三個值比較

defmy_max(x,y):

if x>y:

return

x

returny#

步驟二:呼叫步驟一中兩兩比較的函式 在與第三個比較

defindex(a,b,c,d):

res=my_max(a,b)

res1=my_max(res,c)

res2=my_max(res1,d)

return

res2

print(index(1,2,3,4)) #

4

函式的巢狀

(1)定義:存放變數名與變數值繫結關係的地方

例如:

x = 1

#ps:其中變數值存在記憶體中 那麼變數名則存在記憶體空間中

(2)命名空間的分類

(1)內建命名空間:用來存放python給我們定義的變數名

例如:

len

maxprint

(2)全域性命名空間:當執行python檔案的時候 以檔案為基礎載入進入全域性命名空間

例如:

x = 1

while

true:

y == 2

#ps 無論while 與 if裡面巢狀多少層子**都屬於全域性命名空間

(3)區域性命名空間:屬於函式子**塊裡的建立的名稱

例如:

def

index():

number = [1,2,3]

user_info =

#ps:其中裡面的number與user_info屬於區域性名稱

(3)命名空間的載入順序

(1)當啟動python直譯器的時候 載入內建空間

(2)當執行python檔案的時候 載入全域性命名空間

(3)當呼叫函式裡的子**塊的時候 載入的是區域性命名空間 

(4)命名空間的查詢順序

(1)如果處於全域性:全域性--->內建

例如:

#

處於全域性位置

len = '

處於全域性命名空間

'def

index():

len = '

處於區域性命名空間

'print(len) #

站在全部呼叫的是全域性命名空間 處於全域性命名空間

#全域性命名空間不存在

defindex():

len = '

處於區域性命名空間

'print(len) #

內建空間

(2)如果處於區域性:區域性--->全域性--->---內建

例如:

當區域性空間存在值的時候

max=1

deff1():

#max=2

deff2():

max=3

print(max) #

3 直接查詢查詢區域性空間位址

f2()

f1()

print(max) #

1 查詢的全域性空間位址

#當區域性空間不存在值的時候

max=1

deff1():

deff2():

print(max) #

1 查詢的全域性空間位址 區域性空間位址不存在值

f2()

f1()

print(max) #

1 查詢的全域性空間位址

作用域範圍:

(1)全域性作用域:內建命名空間 與全域性命名空間都屬於該範圍 全域性有效 全域性存活

(2)區域性作用域:區域性命名空間屬於該範圍 區域性存活 區域性有效

ps:函式作用域在定義階段就已經作用好了 與函式的呼叫位置無關

x = 1

defindex():

global

x x = 999

print

(x)index()

#999

print(x) #

999 global將全域性名稱給修改了

deffunc():

x = 1

defindex():

nonlocal x

x = 2index()

print

(x)func()

#2

作用域修改

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

命名空間的分類 全域性命名空間 在py檔案中頂格編寫的 執行之後都會存入全域性命名空間 區域性命名空間 函式體 執行之後產生的都是區域性命名空間 內建命名空間 input built in 內建 全域性命名空間 x 10 變數名x y 20 變數名y f 1 0 z 30 with open a.t...

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

函式物件 定義 函式是第一類物件 函式名指向的值可以被當做引數傳遞 1.函式名可以被傳遞 name jason x name print x print id x def func print from func print func print id func f func func print ...

函式物件,函式巢狀,命名空間與作用域 未補充完

一,函式物件 函式是第一類物件,即函式可以當做資料傳遞 1.可以被引用 2.可以當做引數傳遞 len x deffoo m print m m foo func 3.返回值可以是函式 def foo x x func return x return func res foo func print r...