定義函式的三種方式
1.空函式:可以快速構建專案框架,使專案架構清晰明了
def func():pass
2.無參函式
def func():print(
'from func
')
3.有參函式
def func(x,y,*args,**kwargs):pass
命名關鍵字引數:在函式定義階段 寫在*與**可變長引數之間的形參, 在給命名關鍵字傳值的時候,只能用關鍵字為其傳值
def func(x,y = 1,*args,z = 3,m,**kwargs):(x,y,args,z,m,kwargs) # 1 2 (3, 4) 5 6
func(1,2,3,4,z = 5,m = 6,n = 7,l = 9)
函式是第一類物件:函式名指向的值可以被當作引數傳遞
函式名可以被當作引數傳遞給其他函式deffunc():
print('
from func
') #
from func
defindex(args):
args()
print('
from index
') #
from index
index(func)
函式名可以被當作被當作函式的返回值defindex():
print('
index
') # index
deffunc():
print('
func
') # func
return
index
res =func()
res()
函式名可以被當作容器型別的引數deffunc():
print('
func
') #
func func
print(func()) #
none
l = [1,2,func,func()]
print(l) #[1, 2, , none]
在函式內部呼叫其他函式,可以將複雜的邏輯簡單化defindex():
func()
print('
index
') #
index
deffunc():
print('
func
') #
func
index()
defouter():
print('
outer')
definner():
print('
inner')
return
inner
res =outer()
res()
函式內定義的應用場景
'''寫乙個函式
該函式使用者可以通過傳參的不同控制函式執行不同的功能
'''
函式的巢狀呼叫
函式內部呼叫其他自己定義好的函式,函式通過引數不同返回不同的內容。
命名空間的分類
1.內建命名空間:python直譯器已經定義好的名字 len,max
2.全域性命名空間:檔案級別** if,for,while無論巢狀多少層,它們內部所建立的名字都是全域性命名空間
3.區域性命名空間:函式體內置立的名字都屬於區域性命名空間
生命週期:
內建命名空間:只要python直譯器啟動就會建立,關閉python直譯器的時候內建名稱就會自動銷毀
全域性命名空間:只要執行py檔案就會自動建立,py檔案程式執行結束自動銷毀
區域性命名空間:函式呼叫的時候自動建立,函式呼叫結束立刻銷毀
名字的查詢
1.需要先確定你當前在哪
站在全域性:全域性 >>> 內建
站在區域性:區域性 >>> 全域性 >>> 內建
deffunc():
x = 1
defindex():
print(x) #
1return
index
res =func()
x = 999res()
函式在定義階段查詢名字的順序就已經固定了,不會因為函式的呼叫位置變化而變化
作用域全域性作用域 全域性有效:內建命名空間 全域性命名空間
區域性作用域 區域性有效:區域性命名空間
global nonlocal 在區域性修改全域性的變數
global 在區域性修改全域性的不可變資料型別x = 1 #
不可變型別
username = '
jason
'def
func():
global x,username #
修改全域性變數 而不是建立區域性命名空間
x = 999username = '
egon
'func()
print(x,username) # 999 egon
區域性修改區域性deffunc():
x = 1
defindex():
nonlocal x
x = 2index()
print(x) #
2func()
global:區域性修改全域性,如果想修改多個,逗號隔開
nonlocal:區域性修改區域性,如果修改多個,逗號隔開
命名空間作用域
作用域 命名空間所能夠作用的範圍 內建命名空間 程式在任何階段任何位置均可以使用 全域性有效 全域性命名空間 程式在任何階段任何位置均可以使用 全域性有效 區域性命名空間 一般情況下只在各自的區域性命名空間有效 global 在區域性命名空間內更改全域性命名空間變數,使用關鍵字生命。在變數是不可變型...
函式物件,函式巢狀,命名空間,作用域,閉包函式
一 函式物件 函式是第一類物件 值的記憶體位址可以像變數一樣去使用 def foo foo 函式的記憶體位址,可以當做一種變數值去使用 1 函式可以被引用 def foo print hello f foo print f f 2 可以當作引數傳遞 def foo print hello def b...
作業,3 19命名空間作用域
1 如下全域性變數記錄了當前登入使用者,編寫登入功能,一旦使用者登入成功,則將全域性變數賦值為當前登入的使用者名稱 login user none login user none def users file,user into,pas with open file,mode rt encoding...