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

2022-08-18 03:12:10 字數 4250 閱讀 2091

引入函式相關的了解部分

命名關鍵字引數:

在函式定義階段 寫在*與**可變長引數之間的形參

在給命名關鍵字引數傳值的時候 只能用關鍵字為其傳值

在定義階段 給你感覺好像是z是預設值引數 放在了m這個位置引數的前面了 應該報錯

其實z和m都是命名關鍵字引數 不是預設值引數和位置引數

def func(x,y=1,*args,z=3,m,**kwargs):

print

(x,y)

print

(args)

print

(z,m)

print

(kwargs)

func(1,2,1,2,3,4,5,6,7,78,8,9,0,z=69,m=999,o=666999,l = 999666)

函式物件:

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

1.函式名可以被傳遞

name = '

jason

'x =name

print

(x)print

(id(x))

deffunc():

print('

from func')

#print(func)

print

(id(func))

f =func

func()

print

(f)f()

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

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

def

func():

print('

from func')

defindex(args):

print

(args)

args()

print('

from index')

#index(1)

index(func)

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

def

index():

print('

index')

deffunc():

print('

func')

return

index

res =func()

print

(res)

res()

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

def

func():

print('

func')

print

(func())

l = [1,2,func,func()] #

[1,2,,none]

相關小問題

迴圈列印專案功能提示資訊 供使用者選擇 使用者選擇誰就執行誰

msg = """

1 註冊

2 登陸

3 轉賬

4 購物

5 支付

"""func_dict =

while

true:

print

(msg)

choice = input('

請現在你想要執行的功能》:

').strip()

if choice in

func_dict:

func_dict.get(choice)()

#函式名()

#if choice == '1':

#register()

#elif choice == '2':

#login()

#elif choice == '3':

#transfer()

#elif choice == '4':

#shopping()

#elif choice == '5':

#pay()

else

:

print('

你輸入的功能暫時沒有

')

函式的巢狀呼叫

在函式內部呼叫其他函式

可以將複雜的邏輯簡單化

def

index():

func()

print('

index')

deffunc():

#index()

print('

func')

index()

defmy_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))

命名空間

就是放名字的地方

詳細解釋:存放的是變數名與變數值的記憶體位址得繫結關係的地方

要想訪問乙個變數的值 必須先去命名空間中拿到對應的名字 才能夠訪問變數的值

x = 1

if 1 ==1:

y = 2

#print(y)

#while true:

#z = 3

for i in [1,2,3]:

print

(i)print

(i)def

func():

username = '

jason

'print

(x)func()

命名空間的分類

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.需要先確定你當前在哪(大前提)

1.站在全域性: 全域性 >>> 內建

2.站在區域性: 區域性 >>> 全域性 >>> 內建

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

作用域全域性作用域

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

區域性作用域

區域性有效 區域性作用域

global nonlocal

在區域性修改全域性的變數

#

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

x = #

因為列表是可變型別

x = 1 #

不可變型別

username = '

jason

'def

func():

'嘿嘿嘿')

global x,username #

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

x = 999username = '

egon

'func()

print

(x)print(username)

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...

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

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