日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python全栈开发总结_python全栈开发 * 12 知识点汇总 * 180530

發布時間:2025/3/20 python 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python全栈开发总结_python全栈开发 * 12 知识点汇总 * 180530 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?. 通?裝飾器的回顧

1.開閉原則: 對增加功能開放. 對修改代碼封閉

2.裝飾器的作?: 在不改變原有代碼的基礎上給?個函數增加功能

3.通?裝飾器的寫法:

def wrapper(fn):

def inner(*args,**kwargs):

print("目標函數前一行")

ret=fn(*args,**kwargs)

print("目標函數后一行")

return ret

return inner

@wrapper

def target_func(*args,**kwargs):

print("我是目標函數體")

target_func()

4.執?過程:

(1) 程序從上向下, 當執?到@wrapper的時候. 把函數作為參數傳遞給wrapper函數. 得到inner函數. 重新賦值給target_func

(2) 當執?到target_func的時候. 我們實際上執?的是inner函數. inner函數會先執??標函數之前的代碼. 然后再執?你的?標函數. 執?完?標函數最后執?的是?標函數

之后的代碼

?. 函數的有?信息

1. 如何給函數添加注釋 用三個引號來表示

def eat(food,drink):

""" eat:把傳遞進來的吃掉

:param food: 參數food是什么意思

:param drink: 參數drink是什么意思

:return: None 返回什么

"""

print(food,drink)

return "very good"

按住ctrl 點內置函數名,可以查看函數的注釋如int,str 等

2.如何獲取到函數的相關信息

def eat(food,drink):

"""

:param food: 參數food是什么意思

:param drink: 參數drink是什么意思

:return: None 返回什么

"""

print(food,drink)

# print(eat.__name__) 讀取不出來

# print(eat.__doc__) 讀取不出來

return "very good"

eat("水果","可樂")

print(eat.__name__) # 查詢函數名

print(eat.__doc__) #查詢函數文檔注釋

函數名.__name__可以查看函數的名字 (雙下劃線)

函數名.__doc__ 可以查看函數的?檔注釋

(1) 一個被裝飾器裝飾過的函數:查詢目標函數的函數名

def wrapper(fn):

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

print("目標函數前一行")

ret=fn(*args,**kwargs) # 打散 這?的作?. 其實就是為了保證我可以裝飾所有函數?準備的

print("目標函數后一行")

return ret

return inner

@wrapper

def target_func(*args,**kwargs):

print("我是目標函數體")

target_func()

print(target_func.__name__) # 被裝飾過的函數函數名是inner.

(2) 把上述查詢函數名修改為原函數名

from functools import wraps # 加 引入函數模塊

def wrapper(fn):

@wraps(fn) # 加 使用函數原來的名字

def inner(*args,**kwargs):

print("目標函數前一行")

ret=fn(*args,**kwargs)

print("目標函數后一行")

return ret

return inner

@wrapper

def target_func(*args,**kwargs):

print("我是目標函數體")

target_func()

print(target_func.__name__) # 查詢結果不再是inner 而是target_func

@wrapper

def new_target_func():

print("我是另?個?標函數")

new_target_func()

print(new_target_func.__name__)

三.裝飾器傳參

def wrapper_out(flag):

def wrapper(fn):

def inner(*args,**kwargs):

if flag==True: # 設定條件,滿足執行下一步

print("目標函數前一行")

ret=fn(*args,**kwargs)

print("目標函數后一行")

else: # 不滿足執行這一步

ret=fn(*args,**kwargs)

return ret

return inner

return wrapper

@wrapper_out(True)

def target_func():

print("我是目標函數體")

target_func() # 目標函數前一行,我是目標函數體,目標函數后一行

@wrapper_out(False)

def target_func():

print("我是目標函數體")

target_func() # 我是目標函數體

執行步驟: 先執?wrapper(True) 然后再@返回值. 返回值恰好是wrapper. 結果就是@wrapper

四.多個裝飾器裝飾一個函數

def wrapper(fn):

def inner(*args,**kwargs):

print("我是a")

ret=fn(*args,**kwargs)

print("我是b")

return ret

return inner

def wrapper1(fn):

def inner(*args,**kwargs):

print("我是c")

ret=fn(*args,**kwargs)

print("我是d")

return ret

return inner

def wrapper2(fn):

def inner(*args,**kwargs):

print("我是e")

ret=fn(*args,**kwargs)

print("我是f")

return ret

return inner

@wrapper2

@wrapper1

@wrapper

def eat(*args,**kwargs):

print("我是目標函數")

eat()

執行步驟:

執?順序:

?先@wrapper1裝飾起來. 然后獲取到?個新函數是wrapper1中的inner.

然后執?@wrapper2.這個時候. wrapper2裝飾的就是wrapper1中的inner.

第?層裝飾器前(第?層裝飾器前(?標)第?層裝飾器后)第?層裝飾器后. 程序從左到右執?

五.補充知識點

總結

以上是生活随笔為你收集整理的python全栈开发总结_python全栈开发 * 12 知识点汇总 * 180530的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。