引入函式相關的了解部分
命名關鍵字引數:
在函式定義階段 寫在*與**可變長引數之間的形參
在給命名關鍵字引數傳值的時候 只能用關鍵字為其傳值
在定義階段 給你感覺好像是z是預設值引數 放在了m這個位置引數的前面了 應該報錯
其實z和m都是命名關鍵字引數 不是預設值引數和位置引數
def func(x,y=1,*args,z=3,m,**kwargs):(x,y)
(args)
(z,m)
(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
(x)print
(id(x))
deffunc():
print('
from func')
#print(func)
(id(func))
f =func
func()
(f)f()
#其實指向的也是函式func指向函式體**的記憶體位址
2.函式名可以被當做引數傳遞給其他函式
deffunc():
print('
from func')
defindex(args):
(args)
args()
print('
from index')
#index(1)
index(func)
3.函式名可以被當做函式的返回值
defindex():
print('
index')
deffunc():
print('
func')
return
index
res =func()
(res)
res()
4.函式名可以被當做容器型別的引數
deffunc():
print('
func')
(func())
l = [1,2,func,func()] #
[1,2,,none]
相關小問題
迴圈列印專案功能提示資訊 供使用者選擇 使用者選擇誰就執行誰
msg = """1 註冊
2 登陸
3 轉賬
4 購物
5 支付
"""func_dict =
while
true:
(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('
你輸入的功能暫時沒有
')
函式的巢狀呼叫
在函式內部呼叫其他函式
可以將複雜的邏輯簡單化
defindex():
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 = 1if 1 ==1:
y = 2
#print(y)
#while true:
#z = 3
for i in [1,2,3]:
(i)print
(i)def
func():
username = '
jason
(x)func()
命名空間的分類
1.內建命名空間:python直譯器提前給你定義好的名字(已經存放到內建命名空間中了)
lenmax
min2.全域性命名空間:檔案級別的**
x = 1if 1 ==1:
y = 2
(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()
(x)print(username)
nonlocal 區域性修改區域性
deffunc():
x = 1
defindex():
nonlocal x
x = 2index()
(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 ...