淺談Python裝飾器原理與用法分析

前言

本文實例講述了Python裝飾器原理與用法。分享給大家供大家參考,具體如下:
在這里插入圖片描述


1、裝飾器的本質是函數,主要用來裝飾其他函數,也就是為其他函數添加附加功能

2、裝飾器的原則:

(1) 裝飾器不能修改被裝飾的函數的源代碼

(2) 裝飾器不能修改被裝飾的函數的調用方式

3、實現裝飾器的知識儲備

(1) Python中函數即‘變量’

a、變量在Python中的存儲

x='Tomwenxing'
y=x

[說明]:

當Python解釋器遇到語句x='Tomwenxing’時,它主要完成了兩樣工作:

1.在內存中開辟了一片空間用來存儲字符串‘Tomwenxing’

2.在內存從創建了一個名為x的變量,并用它指向字符串‘Tomwenxing’所占據的內存空間(可以理解為房間和房間號的關系)

而語句y=x意為將變量x對字符串的引用賦值給變量y,即在內存中創建一個變量y,并使其指向變量x所指向的內存空間

b、函數在Python中的存儲

def test():pass

[說明]:

在Python中,函數的存儲和變量相似,以上面的函數為例,Python解釋其主要做兩件事:

1.在內存中開辟一個內存空間,用來存儲函數代碼的字符串(本例中代碼只有一句:pass)

2.在內存中創建一個變量test,用來指向存儲函數代碼字符串的內存空間**(相當于test=‘函數體’)**

因此說在Python中函數即變量

(2) 高階函數(下面兩個條件滿足任何一個即為高階函數)

a、把一個函數名當做實參傳遞給另外一個函數

[對裝飾器的影響]:達到“在不修改被裝飾函數源代碼的情況下為其添加功能”的效果

import time
def bar():time.sleep(2)print('in the bar')
def test(func):start\_time=time.time()func()stop\_time=time.time()print('函數的運行時間為:',stop\_time-start\_time)
test(bar)

運行結果:

in the bar
函數的運行時間為: 2.0021145343780518

b、返回值中包含函數名

[對裝飾器的影響]:達到“不改變函數的調用方式“的效果

import time
def bar():time.sleep(3)print('in the bar')
def test2(func):print('新添加的功能')return func
bar=test2(bar)
bar()

運行結果:

新添加的功能
in the bar

(3) 嵌套函數:在一個函數體內用def去聲明一個新的函數(不是調用)

def foo():print('in the foo')def bar(): #聲明一個新的函數,而不是調用函數print('in the bar')bar()
foo()

運行結果:

in the foo
in the bar

4、裝飾器的語法:高階函數+嵌套函數=》裝飾器 (下面的例子可以用pycharm的調試器調試一下,看看代碼的運行順序)

import time
def timer(func):def deco(\*args,\*\*kwargs):#使用了不定參數start\_time=time.time()res=func(\*args,\*\*kwargs) #運行函數stop\_time=time.time()print('運行時間:',stop\_time-start\_time)return res # 若無返回值,則返回Nonereturn deco
@timer #等價于test1=timer(test1)=deco,即test1()=deco()
def test1():time.sleep(3)print('in the test1')
@timer #等價于test2=timer(test2)=deco,即test2(name)=deco(name)
def test2(name):time.sleep(3)print('in the test2',name)
test1()
print('-------------分界線------------------------')
test2('Tomwenxing')

運行結果:

in the test1
運行時間: 3.0001718997955322
-------------分界線------------------------
in the test2 Tomwenxing
運行時間: 3.000171422958374

5、帶參數的裝飾器

\# -\*- coding:utf-8 -\*-
user,passwd='Tomwenxing','123'
#如裝飾器帶參數,一般是三層嵌套
def auth(auth\_type): #第一層的參數是裝飾器的參數def outer\_wrapper(func):#第二層的參數是裝飾器要裝飾的目標函數def wrapper(\*args,\*\*kwargs):#第三次的參數是目標函數的參數if auth\_type=='local':username = input('Username:').strip()password = input('Password:').strip()if user == username and passwd == password:print('用戶Tomwenxing已經成功登錄!')res = func(\*args, \*\*kwargs) #運行目標函數return reselse:exit('用戶名或密碼有錯誤')elif auth\_type=='ldap':print('暫不支持這種登錄方式!')return wrapperreturn outer\_wrapper
def index():print('歡迎來到index頁面')
@auth(auth\_type='local') #home=wrapper()
def home(name):print('%s,歡迎來到home頁面' %name)return 'This is home page'
@auth(auth\_type='ldap')
def bbs():print('歡迎來到bbs頁面 ')
index()
print('----------------------分界線-------------------')
print('函數的返回值為:',home('wenxing'))
print('----------------------分界線-------------------')
bbs()

運行結果:

歡迎來到index頁面
----------------------分界線-------------------
Username:Tomwenxing
Password:123
用戶Tomwenxing已經成功登錄!
wenxing,歡迎來到home頁面
函數的返回值為: This is home page
----------------------分界線-------------------
暫不支持這種登錄方式!


關于Python技術儲備

學好 Python 不論是就業還是做副業賺錢都不錯,但要學會 Python 還是要有一個學習規劃。最后大家分享一份全套的 Python 學習資料,給那些想學習 Python 的小伙伴們一點幫助!

微信掃描下方CSDN官方認證二維碼免費領取【保證100%免費

一、Python所有方向的學習路線

Python所有方向的技術點做的整理,形成各個領域的知識點匯總,它的用處就在于,你可以按照上面的知識點去找對應的學習資源,保證自己學得較為全面。
在這里插入圖片描述

二、Python基礎學習視頻

② 路線對應學習視頻

還有很多適合0基礎入門的學習視頻,有了這些視頻,輕輕松松上手Python~在這里插入圖片描述
在這里插入圖片描述

③練習題

每節視頻課后,都有對應的練習題哦,可以檢驗學習成果哈哈!
在這里插入圖片描述
因篇幅有限,僅展示部分資料

三、精品Python學習書籍

當我學到一定基礎,有自己的理解能力的時候,會去閱讀一些前輩整理的書籍或者手寫的筆記資料,這些筆記詳細記載了他們對一些技術點的理解,這些理解是比較獨到,可以學到不一樣的思路。
在這里插入圖片描述

四、Python工具包+項目源碼合集
①Python工具包

學習Python常用的開發軟件都在這里了!每個都有詳細的安裝教程,保證你可以安裝成功哦!
在這里插入圖片描述

②Python實戰案例

光學理論是沒用的,要學會跟著一起敲代碼,動手實操,才能將自己的所學運用到實際當中去,這時候可以搞點實戰案例來學習。100+實戰案例源碼等你來拿!
在這里插入圖片描述

③Python小游戲源碼

如果覺得上面的實戰案例有點枯燥,可以試試自己用Python編寫小游戲,讓你的學習過程中增添一點趣味!
在這里插入圖片描述

五、面試資料

我們學習Python必然是為了找到高薪的工作,下面這些面試題是來自阿里、騰訊、字節等一線互聯網大廠最新的面試資料,并且有阿里大佬給出了權威的解答,刷完這一套面試資料相信大家都能找到滿意的工作。
在這里插入圖片描述
在這里插入圖片描述

六、Python兼職渠道

而且學會Python以后,還可以在各大兼職平臺接單賺錢,各種兼職渠道+兼職注意事項+如何和客戶溝通,我都整理成文檔了。
在這里插入圖片描述
在這里插入圖片描述
這份完整版的Python全套學習資料已經上傳CSDN,朋友們如果需要可以微信掃描下方CSDN官方認證二維碼免費領取【保證100%免費

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/161114.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/161114.shtml
英文地址,請注明出處:http://en.pswp.cn/news/161114.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

VScode調試沒有反應

點擊調試按鈕后沒反應 有可能是vscode中安裝的python插件版本問題 可以通過重新安裝比較舊一點的python嘗試解決此問題 步驟如下: 然后從中選擇比當前版本更低的版本即可 安裝完成后需重啟vscode

初識EasyAR

EasyAR 一、介紹(核心還是 目標圖像的屏占比) 支持 EasyAR-AR|AR技術|AR SDK|Unity AR|下載 1.表面、圖片(靜止/運動)跟蹤,支持多目標 2.3D物體(靜止/運動)跟蹤(注:物體旋轉、遠近移動也可以,本人試過,…

縱享雙創盛宴 “之江創客”再創電商新輝煌

消費日報網訊(記者 牛夏風)營造良好電商雙創生態,集聚電商發展新勢能。10月31日,以“開放、連接、協同、賦能”為主題的“之江創客”2023全球電子商務創業創新大賽總決賽暨頒獎典禮在湖州南潯圓滿落幕。 記者從現場獲悉&#xff…

SQL 中的 MIN 和 MAX 以及常見函數詳解及示例演示

SQL MIN() 和 MAX() 函數 SQL中的MIN()函數和MAX()函數用于查找所選列的最小值和最大值,分別。以下是它們的用法和示例: MIN() 函數 MIN()函數返回所選列的最小值。 示例: 查找Products表中的最低價格: SELECT MIN(Price) F…

js 獲取當前窗口顯示的放大比例

可以獲取當前窗口顯示的放大比例,也稱為設備像素比 (devicepixelratio) 。這通常用于處理高DPI (高分辨率)屏幕上的視圖縮放。您可以使用window.devicePixelRatio 屬性來獲得當前設備像素比。 以下是一個簡單的JavaScript示例,演示如何獲取設備像素比: j…

基于獼猴Spike運動解碼的不同解碼方法性能對比

公開數據集中文版詳細描述 參考前文:https://editor.csdn.net/md/?not_checkout1&spm1011.2124.3001.6192神經元Spike信號分析 參考前文:https://blog.csdn.net/qq_43811536/article/details/134359566?spm1001.2014.3001.5501神經元運動調制分析 …

2023 年戴森設計大獎得主是誰?給大樓降溫、爭取救援機會

2023 年戴森設計大獎得主是誰?給大樓降溫、爭取救援機會 ?編輯拉風的極客2023/11/22 摘要 當今社會除了持續不斷對科技創新保持注目,還有很多年輕發明家為了實際場景的難題提供解決方案。 11 月 15 日,2023 年戴森設計大獎國際大獎名單正…

Doris DDL和DML

1 創建用戶和數據庫 1)創建test用戶 mysql -h hadoop1 -P 9030 -uroot -p create user test identified by test; 2)創建數據庫 create database test_db; 3)用戶授權

2023年危險化學品生產單位安全生產管理人員證模擬考試題庫及危險化學品生產單位安全生產管理人員理論考試試題

題庫來源:安全生產模擬考試一點通公眾號小程序 2023年危險化學品生產單位安全生產管理人員證模擬考試題庫及危險化學品生產單位安全生產管理人員理論考試試題是由安全生產模擬考試一點通提供,危險化學品生產單位安全生產管理人員證模擬考試題庫是根據危…

文件的原理和應用

常識: 1 文件包括屬性和內容 2 文件有打開和未打開文件, 3 本文先討論誰打開的文件,以及如何管理已經打開的文件 一 回憶c接口 1 fopen 我們在test.c里面用一下fopen函數,不存在打開的文件會默認創建,那為什么默認新建在當前…

【Kettle實戰】字符串處理及網絡請求JSON格式處理

經過大量的kettle操作實踐,我們會漸漸掌握一些技巧,大大減輕清洗的工作量。比如在哪里 處理字符串更方便,在哪兒處理更合理都是一個取舍問題。 字符串拼接 MySQL中使用concat(字段1,字段2),但是如果“字段2”為NULL,結…

高速公路智能公專融合調度系統方案

在現代高速公路交通設施中,無線對講通信系統已經慢慢成為至關重要的環節。完善無線通信系統可以實現語音和數據的實時傳輸,確保調度中心和現場工作人員的及時溝通,快速響應和提供協調支持。隨著國內高速公路的發展,通信系統建設需…

11月22日,每日信息差

今天是2023年11月22日,以下是為您準備的15條信息差 第一、微軟將投資5億美元在魁北克擴大云計算和人工智能基礎設施 第二、奇安信預計與中國電子CEC業務量大幅增加 第三、極數云舟發布云舟數據編織系統“Ark Fabric” 第四、美國企業對特定電子眼鏡產品及其組件…

如何在windows使用別名遠程執行命令

需求背景 在開發中,需要在服務器執行腳本,需要如下幾步操作: 1.打開xshell 2.登錄服務器 3.進入命令腳本的路徑 4.執行腳本 但是,作為懶人來說,操作太繁瑣了,真麻煩,能不能一鍵就解決那么多操作?所以,開始研究windows有沒有這個東西,而且不需要額外的軟件就可以實現的.結…

ABeam Recruiting | ABeam旗下德碩管理咨詢(上海)最新招聘崗位

誠聘英才 市場部經理 招聘背景 作為起源于亞洲的全球化咨詢公司, ABeam立志成為中國、乃至全球的杰出品牌 本次招聘崗位 以加快ABeam中國本土各法人 在中國市場的品牌推廣、提高企業知名度 強化Marketing部門的體制為目標 工作職責 在現有的PR業務基礎上&#…

PyTorch離線安裝

文章目錄 python安裝1. Anaconda 下載2. Anaconda 安裝pytorch安裝3. 顯卡配置(無 Nvidia 顯卡的略過)4. 新建虛擬環境,用于存放pytorch5. 安裝 CUDA6 安裝pytorch(torch,torchvision,torchaudio)7. 驗證是否安裝成功python安裝 1. Anaconda 下載 在機器學習,深度學習中…

C++多線程學習(二):多線程通信和鎖

參考引用 C11 14 17 20 多線程從原理到線程池實戰代碼運行環境:Visual Studio 2019 1. 多線程狀態 1.1 線程狀態說明 初始化 (lnit):該線程正在被創建就緒 (Ready):該線程在就緒列表中,等待 CPU 調度運行 (Running):…

xss-labs靶場6-10關

文章目錄 前言一、靶場6-10關1、關卡62、關卡73、關卡84、關卡95、關卡10 總結 前言 此文章只用于學習和反思鞏固xss攻擊知識,禁止用于做非法攻擊。注意靶場是可以練習的平臺,不能隨意去尚未授權的網站做滲透測試!!! …

在win10上安裝pytorch-gpu版本2

安裝anaconda即下載了python,還可以創建虛擬環境。 目錄 1.1 anaconda安裝 1.2 pytorch-gpu安裝 1.1 Anaconda安裝 anaconda的安裝請看我之前發的tensoflow-gpu安裝,里面有詳細的安裝過程,這里不做重復描述,傳送門 1.2 pyt…

羊大師提示,羊奶都有哪些驚人功效?

羊奶不僅是一種美味的健康飲品,在近年來備受矚目的的健康圈子里,羊奶還被賦予了更多的功效,成為一種備受推崇的保健品。羊奶不但富含營養,而且還有著非常多的益處,它能夠用來美容、保健,甚至還可以治療某些…