一、函式物件
精髓:可以吧函式當做變數去用」
1.1、可以被賦值
def func():print('from func')
f=func
(f,func)
f()
1.2、可以把函式當做引數傳給另乙個函式
def func():zprint('from func')
def foo(x): #
x = func的記憶體位址
#print(x)
x()foo(func)
#foo(func的記憶體位址)
1.3、可以把函式當做引數傳給另乙個值函式
deffunc():
print('
from func')
def foo(x): #
x=func的記憶體位址
return x #
return func的記憶體位址
res=foo(func) #
foo(func的記憶體位址)
print(res) #
res=func的記憶體位址
res()
1.4、可以當做容器型別的乙個元素
deffunc():
print('
from func')
dic=
(dic)
dic['k1
']()
1.5、示範:例題
def login():print('登入功能')
def transfer():
print('轉賬功能')
def check_banlance():
print('查詢餘額')
def withdraw():
print('提現')
def register():
print('註冊')
func_dic =
# func_dic['1']()
while true:
for k in func_dic:
print(k, func_dic[k][0])
choice = input('請輸入命令編號:').strip()
if not choice.isdigit():
print('必須輸入編號,傻叉')
continue
if choice == '0':
break
# choice='1'
if choice in func_dic:
func_dic[choice][1]()
else:
print('輸入的指令不存在')
二、函式巢狀
2.1、函式的巢狀呼叫:
再呼叫函式的過程中又呼叫另乙個函式
defmax2(x,y):
if x >y:
return
x
else
:
return
ydef
max4(a,b,c,d):
#第一步:比較a,b得到res1
res1=max2(a,b)
#第二步:比較res1,c得到res2
res2=max2(res1,c)
#第三步:比較res2,d得到res3
res3=max2(res2,d)
return
res3
res=max4(1,2,3,4)
print(res)
2.2、函式的巢狀定義:在函式內定義其他函式
def circle(radius,action=0):from math import
pi
defperimiter(radius):
return 2*pi*radius
#求圓形的求面積:pi*(radius**2)
defarea(radius):
return pi*(radius**2)
if action ==0:
return 2*pi*radius
elif action == 1:
return
area(radius)
circle(33,action=0)
三、閉包函式
3.1、大前提
閉包函式=空間作用域+函式巢狀+函式物件
核心點:名字的查詢關係是以函式定義階段為準
3.2、什麼是閉包函式
'閉'函式指的是內嵌函式
'包'函式指的是該函式包含外層函式作用域名字的引用(不是對全域性作用域)
3.3、閉包函式:空間作用域+函式巢狀
deff1():
x = 33333333333333333333
deff2():
(x) f2()
x=11111
defbar():
x=444444f1()
deffoo():
x=2222bar()
foo()
3.4、閉包函式:函式物件
deff1():
x = 33333333333333333333
deff2():
print('
函式f2:
',x)
return
f2f=f1()
#print(f)
#x=4444
#f()
deffoo():
x=5555f()
foo()
3.5、閉包函式的應用
3.5.1、閉包函式的使用方法一:直接把函式體需要的引數定義成形參
deff2(x):
(x)f2(1)
f2(2)
f2(3)
3.5.2、閉包函式的使用方法二:將值包給函式
def f1(x): #x=3 x=3
deff2():
(x)
return
f2x=f1(3)
(x)x()
函式物件 閉包
python一切皆物件,函式也可以看成是乙個函式物件。函式將作為乙個返回物件在另乙個函式中返回。def calc a,b c a b return c res calc 10,20 print res 乙個內部的函式引用了外部函式的變數,這種語法結構就形成了閉包 def calc test args...
day16 函式物件和閉包
二 閉包函式 函式物件指的是函式可以被當做 資料 來處理,具體可以分為四個方面的使用,我們如下 defadd x,y return x y.func add func 1,2 3 dic dic dic add 1,2 3 deffoo x,y,func return func x,y foo 1,...
函式 閉包以及實現
乙個匿名函式引用了它的上下文物件,我們把這種狀態稱之為閉包。func test x int func func main 和匿名函式關係最深的就是閉包,因為匿名函式可以當做返回值來傳。func test func func main 呼叫f test棧幀已經失效,但可以列印x的值,這涉及到閉包是由兩...