day11 閉包函式和裝飾器

2022-09-11 16:21:24 字數 3129 閱讀 1596

目錄:

閉包函式

裝飾器什麼是閉包函式?

閉,封閉,把乙個函式封閉在另乙個函式裡面起來,就是定義在函式內部的函式

包,將它整體打包,同時引用外部函式作用域的名字,方便接下裡使用

x = 56

defouter():

y = 78

definner():

print

(x, y)

return

inner

#只要是呼叫了外部函式y的命名空間就被稱之為閉包函式,如果他同時還呼叫了全域性x命名空間,不受影響,但如果只是呼叫全域性x,就不能稱之為閉包

def outter():

x=2345

def inner():

print(x)

return

inner

res = outter() # res 就是inner函式的位址

函式在定義階段名字的查詢順序就已經固定死了,不會因為函式呼叫位置的變化而改變!!!給函式體傳值有兩種方式(******):

1. 直接傳參

def

f(password)

print(password)

import

requests

#第乙個直接給函式傳參

url1 = '

'def

my_get(url):

response =requests.get(url)

if response.status_code == 200:

print

(len(response.text))

my_get(url1)

my_get('')

二、閉包

裝飾器函式,閉包

def

outter(name):

name = '

ryan

'def

inner():

print

(name)

return inner

def outer(func):  #

定義乙個外部函式

def inner(*args, **kwargs): #

定義乙個內部函式(裝飾好的函式)

print('

執行被裝飾函式之前 你可以做的操作

') #

裝飾 res = func(*args, **kwargs) #

需要被裝飾的函式(需要傳參)

print('

執行被裝飾函式之後 你可以做的操作

') #

裝飾return res #

返回原函式的位址,方便以後呼叫

return inner #

返回被裝飾好的函式的位址,方便以後呼叫

小爬蟲

#

爬蟲的本質就是爬取頁面的html**,從中獲取到你想要的資料(url鏈結位址),有了鏈結之後,

你就可以順著這個鏈結將所有的頁面資源全部爬取下來,requests模組

裝飾器:

什麼裝飾器?

#

就像我們裝修房子一樣,我們不會去改變房子內部結構,而是在房子表面進行乙個修飾美化,讓我們住的更舒服

#裝飾器的作用就是幫助我們在不改變原函式的源**和呼叫方式的基礎上,引入新的功能。

#可呼叫:callable,可以加括號執行的

#開放封閉原則:對擴充套件開放 對修改封閉

#必須滿足的兩個條件:

1.不改變源**

2.不改變原來的使用方式

為什麼要用?

正常it公司會有大量的被定義的函式,如果我們要改動函式的源**,可能會導致函式的連鎖出錯,最終使得整個程式崩潰,同時就算有的源**能改動,但是大量的工作量以及功能需求的不確定,使得工作效率異常低下。

怎麼使用?

先看乙個標準的無引數的裝飾器模版

def outer(func):  #

定義乙個外部函式

def inner(*args, **kwargs): #

定義乙個內部函式(裝飾好的函式)

print('

執行被裝飾函式之前 你可以做的操作

') #

裝飾 res = func(*args, **kwargs) #

需要被裝飾的函式(需要傳參)

print('

執行被裝飾函式之後 你可以做的操作

') #

裝飾return res #

返回原函式的位址,方便以後呼叫

return inner #

返回被裝飾好的函式的位址,方便以後呼叫

1.無參裝飾器

最中間的func()就是原函式的乙個主體,我們ba而不帶()

三個難點:

#

1.關於函式「變數」(或「變數」函式)的理解

#2.關於高階函式的理解

#3.關於巢狀函式的理解

重要作用:

#

1.不能修改被裝飾的函式的源**

#2.不能修改被裝飾的函式的呼叫方式

#3.滿足1、2的情況下給程式增添功能

Day 11 閉包函式 裝飾器

def outer x,y defmy max if x y 引用了outer 的引數,相當與引用了 outer的變數 為閉包函式 return x return y return my max res outer 80,90 print res 裝飾器必須要遵守兩個原則 1 不改變被裝飾物件的源 ...

day 11 迭代器 閉包

1.第一類物件,函式名的使用,函式名就是變數名,函式名儲存的是函式的記憶體位址 溫習前面學過的變數 1 由數字,字母,下劃線組成 2 不能是數字開頭,更不能是純數字 3 不能用關鍵字 4 不要太長 5 要有意義 6 不要用中文 7 區分大小寫 8 駝峰線或者下劃線 2.閉包 在內層函式中引入外層函式...

Day 11 函式名,閉包,裝飾器 作業

1 整理裝飾器的形成過程,背誦裝飾器的固定格式 2 編寫裝飾器,為多個函式加上認證的功能 使用者的賬號密碼 於檔案 要求登入成功一次,後續的函式都無需再輸入使用者名稱和密碼 3.1.為題目3編寫裝飾器,實現快取網頁內容的功能 公升級題 4.寫函式,返回乙個撲克牌列表,裡面有52項,每一項是乙個元組 ...