python閉包函式

2022-09-10 10:09:24 字數 3583 閱讀 5676

作用域

命名空間所能夠作用的範圍

內建命名空間

程式任何階段任何位置均可使用(全域性有效)

全域性命名空間

程式任何階段任何位置均可使用(全域性有效)

區域性命名空間

一般情況下只在各自區域性命名空間中有效

'''

如果想在區域性修改全域性資料

如果資料為不可變型別則需要關鍵字global宣告

如果資料為可變型別則不需要global宣告

'''# 無global

x = 10

def index():

x = 20

index()

print(x) # 10

# 新增global

x = 10

def index():

global x

x = 20

index()

print(x) # 20

y = [11, 22]

def func():

print(y) # [11, 22]

'''如果想要在內部的區域性修改外部區域性的不可變型別

需要關鍵字nonlocal宣告

'''def index():

x = 111

def func():

x = 222

func()

print(x)

index() # 111

def index():

x = 111

def func():

nonlocal x

x = 222

func()

print(x)

index() # 222

# 1、函式可以被當作變數值賦值

def func():

pass

res = func

res() # 本質就是在呼叫func()函式

# 2、函式可以成為函式的實參

def func1():

pass

def index(fun):

pass

index(func1)

# 3、函式可以被當作返回值返回

def outer():

pass

res = outer()

'''函式不加括號被當作返回值,是返回乙個函式的記憶體位址

'''# 4、函式可以是列表、元組等容器型別的元素

def index():

pass

res = [11, 33, index]

print(res) # [11, 33, ]

# 巢狀呼叫:函式內部呼叫其他函式

def index():

print('函式index')

def func():

index()

print('函式func')

func()

# 函式體內部定義其他函式

# 將複雜的功能全部隱藏起來,暴露乙個簡單的介面

def all_func(type):

def register():

print('註冊功能')

def login():

print('登入功能')

def transfer():

print('轉賬功能')

def shopping():

print('購物功能')

# 這裡僅僅是延時巢狀定義的現象 暫不考慮優化

if type == '1':

register()

elif type == '2':

login()

elif type == '3':

transfer()

elif type == '4':

shopping()

else:

print('不知道啥功能')

all_func('3')

閉:定義在函式中的函式

包:內層函式能呼叫外層函式區域性命名空間的變數名

'''閉包函式:其實是給函式傳參的第二種方式'''

# 方式1:函式體**需要用到資料 直接在括號內定義形參即可

def index(username):

print(username)

def my_max(a, b):

if a > b:

return a

return b

# 方式2:利用閉包函式

def outer(x,y):

# x = 2

# y = 40

def my_max():

if x > y:

return x

return y

return my_max

res = outer(2,40)

print(res())

print(res())

def outer(x, y):

print(x)

print(y)

res = outer(2, 3)

res()

# 爬蟲測試

import requests

url = input('輸入要爬取的**:')

'''裝飾器是由 命名空間、函式物件、閉包函式的知識點組合而來的'''

器:工具

裝飾:給被裝飾物件新增額外的功能

裝飾期的原則

開放封閉原則

開放:對擴充套件開放

封閉:對修改封閉

裝飾器核心思想:

在不改變"被裝飾物件的原**"和"原有呼叫方式"的前提下,給被裝飾物件新增新功能

import time

def index():

time.sleep(3)

print('from index')

start_time = time.time()

index()

end_time = time.time()

# time.time(): 時間戳,統計2023年1月1日所過的秒數

use_time = end_time - start_time

print(use_time) # 3.003939390182495

python閉包函式

python函式閉包 closure 比較抽象,在函式式程式設計中運用地比較多,通俗點就是子函式 內嵌函式 呼叫上層函式 閉包函式 的變數,且上層函式 閉包函式 接收的變數會儲存在子函式 內嵌函式 的變數中可以供子函式 內嵌函式 呼叫 概念很抽象,但是實現的例子還是比較容易理解的,這裡記住實現函式閉...

python閉包函式

python是一種物件導向的程式語言,在python中一切皆物件,這樣就使得變數所擁有的屬性,函式也同樣擁有。這樣我們就可以理解在函式內建立乙個函式的行為是完全合法的。這種函式被叫做內嵌函式,這種函式只可以在外部函式的作用域內被正常呼叫,在外部函式的作用域之外呼叫會報錯。而如果內部函式裡引用了外部函...

python閉包函式

在一些語言中,在函式中可以 巢狀 定義另乙個函式時,如果內部的函式引用了外部的函式的變數,則可能產生閉包。閉包可以用來在乙個函式與一組 私有 變數之間建立關聯關係。在給定函式被多次呼叫的過程中,這些私有變數能夠保持其永續性。維基百科。即在內部函式中引用了外部函式的變數,就是閉包函式。def mult...