函式物件與閉包

2022-07-24 09:21:09 字數 2196 閱讀 1017

函式物件指的是函式可以被當做""資料""來處理

1.函式可以被引用

>>> def add(x, y):

... return x+y

...>>> func = add

>>> func(1, 2)

3

2.函式可以當做引數傳遞

>>> def foo(x,y,func):

... return func(x,y)

...>>> foo(1,2,add)

3

3.函式可以當做返回值使用

(傳參的時候一定不能加括號,加括號當場就執行了)

def index():

print("from index")

def func(a):

return a

a = func(index)

a()

4.函式可以被當做容器型別的元素

def func():

print('from func')

l1 = [1, '2', func, func()]

f = l1[2]

print(f)

from func

函式的巢狀呼叫:在函式內呼叫函式

定義:​ 讓內層函式封閉起來,不讓外部直接呼叫

作用:將複雜並且小的功能,在函式內部呼叫,解決**結構清晰問題

def index():

def home():

print("from home")

home()

index()

from home

例子:

def func1(x, y):

if x > y:

return x

else:

return y

print(func1(1,2))

def func2(x, y, z, a):

result = func1(x, y)

result = func1(result, z)

result = func1(result, a)

return result

print(func2(1, 200000, 3, 1000

2200000

閉:代表函式內部

包:代表函式外「包裹」著對外層作用域的引用

是函式巢狀、函式物件、命名空間與作用域的結合體

1.閉包函式必須在函式內部定義

2.閉包函式可以引用外層函式的名字

閉包函式是為了裝飾器做準備

x = 1

def f1():

def f2():

print(x)

return f2

def f3():

x = 3

f2 = f1() #呼叫f1()返回函式f2

f2() #需要按照函式定義時的作用關係去執行,與呼叫位置無關

f3()

1

有兩種為函式體傳值的方式,一種是直接將值以引數的形式傳入,另外一種就是將值包給函式

import requests

def get(url): #第一種方式

return requests.get(url).text

print(len(get('')))

print(len(get('')))

2443

49559

import requests

def page(url): #第二種方式

def get():

return requests.get(url).text

return get

python = page('')

python()

方式二只需要傳入一次值,就會得到乙個包含指定url的閉包函式,以後呼叫該閉包函式無需再傳url

Python 函式物件與閉包

函式物件指的是函式可以被當做 資料 來處理,具體可以分為四個方面的使用。def index print from index a index a def foo x,y,func print x,y func def bar print from bar foo 1,2,bar 1 2 from b...

函式物件 閉包

python一切皆物件,函式也可以看成是乙個函式物件。函式將作為乙個返回物件在另乙個函式中返回。def calc a,b c a b return c res calc 10,20 print res 乙個內部的函式引用了外部函式的變數,這種語法結構就形成了閉包 def calc test args...

3 20 函式物件與閉包函式應用

def func1 print 功能1 def func2 print 功能2 def func3 print 功能3 def func4 print 功能4 dic func import time while true for key in dic func print key,dic func...