16 函式物件以及閉包函式

2022-09-06 13:06:23 字數 3311 閱讀 6645

一、函式物件

精髓:可以吧函式當做變數去用」

1.1、可以被賦值

def func():

print('from func')

f=func

print

(f,func)

f()

1.2、可以把函式當做引數傳給另乙個函式

def func():z

print('from func')

def foo(x): #

x = func的記憶體位址

#

print(x)

x()foo(func)

#foo(func的記憶體位址)

1.3、可以把函式當做引數傳給另乙個值函式

def

func():

print('

from func')

def foo(x): #

x=func的記憶體位址

return x #

return func的記憶體位址

res=foo(func) #

foo(func的記憶體位址)

print(res) #

res=func的記憶體位址

res()

1.4、可以當做容器型別的乙個元素

def

func():

print('

from func')

dic=

print

(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、函式的巢狀呼叫:

再呼叫函式的過程中又呼叫另乙個函式

def

max2(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、閉包函式:空間作用域+函式巢狀

def

f1():

x = 33333333333333333333

deff2():

print

(x) f2()

x=11111

defbar():

x=444444f1()

deffoo():

x=2222bar()

foo()

3.4、閉包函式:函式物件

def

f1():

x = 33333333333333333333

deff2():

print('

函式f2:

',x)

return

f2f=f1()

#print(f)

#x=4444

#f()

deffoo():

x=5555f()

foo()

3.5、閉包函式的應用

3.5.1、閉包函式的使用方法一:直接把函式體需要的引數定義成形參

def

f2(x):

print

(x)f2(1)

f2(2)

f2(3)

3.5.2、閉包函式的使用方法二:將值包給函式

def f1(x): #

x=3 x=3

deff2():

print

(x)

return

f2x=f1(3)

print

(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的值,這涉及到閉包是由兩...