日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

通過 Atexit 模塊讓 Python 實現 Golang 的 defer 功能,你學會了嗎?

來源: 責編: 時間:2024-04-11 08:57:46 223觀看
導讀在 Go 里面可以通過 defer 語句讓函數在結束時執行預定義好的一些操作,舉個例子。package mainimport "fmt"func main() { defer fmt.Println("高老師總能分享出好東西") fmt.Println("執行結束") /* 執行

在 Go 里面可以通過 defer 語句讓函數在結束時執行預定義好的一些操作,舉個例子。pvr28資訊網——每日最新資訊28at.com

package mainimport "fmt"func main() {    defer fmt.Println("高老師總能分享出好東西")    fmt.Println("執行結束")    /*    執行結束    高老師總能分享出好東西    */}

這個功能非常方便,比如打開文件之后可以執行 defer fp.Close(),這樣函數結束時會自動關閉文件句柄。那么在 Python 里面可不可以實現類似的功能呢?本次來聊一聊 atexit 模塊,它能幫我們實現類似的效果。pvr28資訊網——每日最新資訊28at.com

import atexitdef exit_func(words):    print(words)# 將函數注冊進去atexit.register(exit_func, "高老師總能分享出好東西")print("Hello")print("World")"""HelloWorld高老師總能分享出好東西"""

通過 atexit.register 將函數注冊進去之后,會在程序結束之前執行,當然也可以同時注冊多個。pvr28資訊網——每日最新資訊28at.com

import atexitdef exit_func(words):    print(words)# 將函數注冊進去atexit.register(exit_func, "高老師總能分享出好東西")atexit.register(exit_func, "S 老師今年 18,單身帶倆娃")atexit.register(exit_func, "只因^(* ̄(oo) ̄)^只因大(出海版)")print("Hello")print("World")"""HelloWorld只因^(* ̄(oo) ̄)^只因大(出海版)S 老師今年 18,單身帶倆娃高老師總能分享出好東西"""

如果同時注冊了多個函數,那么會按照先入后出的順序執行。非常簡單,其實 atexit 模塊就是將我們注冊的函數保存在了一個數組中,程序結束的時候,從后往前依次執行。pvr28資訊網——每日最新資訊28at.com

圖片圖片pvr28資訊網——每日最新資訊28at.com

既然可以注冊函數,那么也可以取消注冊。pvr28資訊網——每日最新資訊28at.com

import atexitdef exit_func1(words):    print(words)def exit_func2(words):    print(words)atexit.register(exit_func1, "高老師總能分享出好東西")atexit.register(exit_func1, "S 老師今年 18,單身帶倆娃")atexit.register(exit_func2, "只因^(* ̄(oo) ̄)^只因大(出海版)")# 取消注冊,所有注冊的 exit_func1 函數都會被刪除atexit.unregister(exit_func1)"""只因^(* ̄(oo) ̄)^只因大(出海版)"""

而它的邏輯也很簡單,就是遍歷數組,如果和指定的函數相等,那么就刪掉。我們看一下源代碼。pvr28資訊網——每日最新資訊28at.com

圖片圖片pvr28資訊網——每日最新資訊28at.com

如果你想將注冊的函數全部取消掉,那么也可以調用 _clear() 函數。pvr28資訊網——每日最新資訊28at.com

import atexitdef exit_func1(words):    print(words)def exit_func2(words):    print(words)atexit.register(exit_func1, "高老師總能分享出好東西")atexit.register(exit_func1, "S 老師今年 18,單身帶倆娃")atexit.register(exit_func2, "只因^(* ̄(oo) ̄)^只因大(出海版)")atexit._clear()

此時程序不會有任何輸出,因為注冊的函數全部被清空了,同樣可以看一下它的源代碼。pvr28資訊網——每日最新資訊28at.com

圖片圖片pvr28資訊網——每日最新資訊28at.com

最后就是函數的調用時機,我們注冊的函數在程序結束時才會調用,可不可以讓它們在任意時刻調用呢?pvr28資訊網——每日最新資訊28at.com

import atexitdef exit_func1(words):    print(words)def exit_func2(words):    print(words)atexit.register(exit_func1, "AAA")atexit.register(exit_func1, "BBB")# 調用注冊的函數,調用之后函數會被刪除atexit._run_exitfuncs()print("++++++++++++++++")atexit.register(exit_func2, "CCC")atexit._run_exitfuncs()print("----------------")"""BBBAAA++++++++++++++++CCC----------------"""

輸出結果表明,一旦調用了 _run_exitfuncs,所有注冊的函數會立即被調用。我們看一下源代碼。pvr28資訊網——每日最新資訊28at.com

圖片圖片pvr28資訊網——每日最新資訊28at.com

以上就是 atexit 模塊的用法,那我們如何基于它實現 Golang 的 defer 呢?pvr28資訊網——每日最新資訊28at.com

from typing import Callableimport atexitdef defer(func: Callable, *args, **kwargs):    atexit.register(func, *args, **kwargs)def get_file_content(file_path):    fp = open(file_path, encoding="utf-8")    defer(fp.close)  # 注冊函數    content = fp.read()    # do something    ...    atexit._run_exitfuncs()  # 觸發注冊函數執行get_file_content("config.py")

不過這個例子明顯有點刻意了,因為必須要在函數的結尾調用 atexit._run_exitfuncs,而之所以要實現 Go 的 defer,就是為了避免遺忘某些邏輯。pvr28資訊網——每日最新資訊28at.com

如果每次都要在函數結尾調用 atexit._run_exitfuncs,那還不如不用,于是我們可以考慮使用裝飾器。pvr28資訊網——每日最新資訊28at.com

from typing import Callablefrom functools import wrapsimport atexitdef defer(func: Callable, *args, **kwargs):    atexit.register(func, *args, **kwargs)# 給函數賦予 defer 功能def enable_defer(func):    @wraps(func)    def inner(*args, **kwargs):        ret = func(*args, **kwargs)        atexit._run_exitfuncs()        return ret    return inner@enable_defer  # 通過裝飾器,讓函數支持 defer 功能def get_file_content(file_path):    fp = open(file_path, encoding="utf-8")    # 注冊函數    defer(fp.close)    defer(print, "get_file_content 函數實現了 defer 功能")    content = fp.read()    print("函數執行結束")get_file_content("config.py")print("程序結束")"""函數執行結束get_file_content 函數實現了 defer 功能程序結束"""

輸出結果表明,在函數結束后,通過 defer 注冊的函數執行了。pvr28資訊網——每日最新資訊28at.com

以上就是用 Python 實現 Go 的 defer,不過在工作中還是不建議這么做,沒啥必要,這里只是想分享一下 atexit 模塊。pvr28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-82736-0.html通過 Atexit 模塊讓 Python 實現 Golang 的 defer 功能,你學會了嗎?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 不只是搜索 細看三星 Galaxy S24 系列即圈即搜功能

下一篇: 如何在JavaScript中復制一個對象?

標簽:
  • 熱門焦點
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
国产欧美日韩另类视频免费观看| 亚洲欧美成人一区二区在线电影| 国内外成人免费激情在线视频| 国产日韩精品入口| 国产亚洲精久久久久久| 在线观看亚洲视频| 99国产精品久久久久久久成人热| 亚洲自拍偷拍色片视频| 久久久久久久性| 欧美精品一区二区三区久久久竹菊| 欧美日韩三级| 国产中文一区二区三区| 亚洲人成艺术| 亚洲四色影视在线观看| 久久久不卡网国产精品一区| 欧美激情中文字幕在线| 国产女主播一区二区三区| 在线免费观看一区二区三区| 一本色道久久综合狠狠躁的推荐| 欧美一区二区三区免费观看| 欧美成人精品一区二区三区| 欧美色精品天天在线观看视频| 韩日精品在线| 在线综合亚洲| 老牛影视一区二区三区| 国产精品女同互慰在线看| 亚洲国产精品传媒在线观看 | 国产免费成人在线视频| 亚洲第一成人在线| 欧美一区二区三区播放老司机| 欧美成人有码| 国产午夜精品一区二区三区欧美 | 亚洲人在线视频| 欧美在线视频一区| 欧美日韩免费看| 在线看片一区| 欧美亚洲综合另类| 欧美日韩国内| 亚洲国产精品一区二区第一页| 欧美一区二区视频免费观看| 欧美日韩亚洲一区二区三区在线 | 韩日精品中文字幕| 亚洲伊人观看| 欧美全黄视频| 1769国产精品| 亚洲国产精品久久久久| 亚洲经典自拍| 午夜精品婷婷| 欧美日韩精品一区| 在线免费日韩片| 欧美一区日本一区韩国一区| 欧美人体xx| 韩日精品视频一区| 欧美一区二区精品久久911| 欧美精品一区二区三区蜜臀| 尤妮丝一区二区裸体视频| 欧美中文字幕在线| 国产精品久久久久一区二区三区| 亚洲精品久久久久久久久久久久 | 欧美性生交xxxxx久久久| 亚洲日本欧美在线| 麻豆九一精品爱看视频在线观看免费| 国产亚洲欧美日韩日本| 亚洲欧美日韩精品在线| 欧美日精品一区视频| 亚洲狼人精品一区二区三区| 免费在线看成人av| 亚洲国产日韩在线| 最新国产精品拍自在线播放| 欧美高清视频一二三区| 国产精品日韩欧美一区二区三区| 91久久夜色精品国产九色| 久久久99精品免费观看不卡| 国产免费亚洲高清| 亚洲在线视频网站| 国产精品国码视频| 亚洲午夜电影网| 欧美日韩综合视频| 一本色道久久综合亚洲精品不| 欧美激情一区二区久久久| 亚洲激情视频在线| 欧美国产一区二区三区激情无套| 亚洲成色777777女色窝| 麻豆九一精品爱看视频在线观看免费 | 亚洲日本一区二区三区| 欧美风情在线| 亚洲日韩成人| 欧美成人中文| 日韩午夜电影av| 欧美日韩色一区| 亚洲私拍自拍| 国产精品一区二区男女羞羞无遮挡 | 一本色道88久久加勒比精品| 免费亚洲网站| 在线欧美福利| 欧美激情 亚洲a∨综合| av成人国产| 国产精品v日韩精品| 亚洲一区二区三区四区五区黄| 国产精品美女主播| 欧美一区二区在线| 激情五月综合色婷婷一区二区| 麻豆av一区二区三区久久| 亚洲精品国产视频| 国产精品成人免费| 欧美在线视频网站| 亚洲高清不卡在线观看| 欧美日本视频在线| 亚洲视频欧洲视频| 国产日韩一区欧美| 噜噜噜噜噜久久久久久91| 亚洲国产午夜| 国内精品久久久久影院薰衣草| 亚洲欧美成人在线| 国产欧美va欧美不卡在线| 久久久999精品视频| 亚洲国产精品一区| 欧美三级欧美一级| 欧美一区二区女人| 亚洲高清免费在线| 欧美日韩国产免费观看| 午夜精品福利视频| 尤物视频一区二区| 欧美日韩国产美女| 午夜一区二区三区在线观看| …久久精品99久久香蕉国产| 欧美日韩综合不卡| 久久激情婷婷| 99av国产精品欲麻豆| 国产欧美日韩视频| 美女视频黄a大片欧美| 亚洲神马久久| 永久免费视频成人| 国产精品成人观看视频免费 | 一区二区三区波多野结衣在线观看| 国产精品外国| 美女网站在线免费欧美精品| 亚洲人成亚洲人成在线观看图片 | 久久免费视频一区| 一区二区三区免费网站| 国产专区综合网| 欧美日韩亚洲一区三区| 久久久夜夜夜| 亚洲男人的天堂在线aⅴ视频| 亚洲国产精品久久久久婷婷老年| 国产精品一区二区在线观看| 欧美成人一区二区在线| 欧美在线一二三| 99视频+国产日韩欧美| 韩日成人av| 国产精品爽黄69| 欧美精品久久99久久在免费线| 久久xxxx| 亚洲欧美激情在线视频| 亚洲精品国产精品久久清纯直播 | 欧美精选一区| 可以免费看不卡的av网站| 亚洲欧美综合国产精品一区| 亚洲六月丁香色婷婷综合久久| 国产亚洲一区二区三区在线观看| 欧美日韩免费在线| 免费一区二区三区| 久久精品中文| 午夜一区不卡| 亚洲一区日韩在线| 日韩视频亚洲视频| 亚洲国产日韩欧美在线图片| 国产亚洲人成网站在线观看| 国产精品毛片在线| 欧美三区在线视频| 欧美精品国产| 麻豆乱码国产一区二区三区| 欧美一级在线视频| 亚洲视频欧洲视频| 一本色道**综合亚洲精品蜜桃冫| 亚洲区欧美区| 亚洲国产精品久久久久婷婷884| 国内精品久久久| 国产色综合久久| 国产精品午夜电影| 国产精品免费在线| 欧美午夜不卡视频| 欧美日韩视频第一区| 欧美精品日本| 欧美劲爆第一页| 欧美激情在线有限公司| 欧美高清视频www夜色资源网| 欧美a级一区| 免费在线看一区| 免费日韩视频| 欧美国产亚洲视频| 欧美成人亚洲成人| 欧美freesex8一10精品| 久久网站免费| 久久嫩草精品久久久久| 久久精品国产91精品亚洲| 欧美综合激情网| 久久国产一区二区三区| 久久国内精品视频| 久久久国产精品一区二区中文| 久久国产精品一区二区三区| 久久精品一区二区国产| 久久精品三级| 久久婷婷国产麻豆91天堂|