如何讓Python中的自訂函數可以全域使用?

WBOY
發布: 2023-05-08 09:43:07
轉載
1354 人瀏覽過

我們在開發Python專案的時候,常常會寫一些工具函數。為了在專案裡面多個.py檔案中使用這個工具函數,就不得不在多個地方都導入它,非常麻煩。

例如下面這個範例:

如何讓Python中的自訂函數可以全域使用?

在A.py和C.py檔都要使用clean_msg這個工具函數,那麼他們就都要從util.py中導入clean_msg。這似乎理所當然。

但今天我在看icecream/builtins.py[1]原始碼的時候,突然發現了一個高級用法,可以讓我們使用工具函數的時候,就像使用Python的print函數一樣,不用導入,而是直接使用。

我們先來看看效果:

如何讓Python中的自訂函數可以全域使用?

大家注意A.py和C.py,我並沒有導入clean_msg而是直接使用了這個函數。並且運作完全正常。

關鍵原理就在入口檔案main.py,被我框住的3行:

import builtins

from util import clean_msg
setattr(builtins, 'clean_msg', clean_msg)
登入後複製

在Python裡面,所有內建的函數或類別都在builtins模組中,因此在程式碼裡面可以直接使用而不用導入。現在只需要把我們自訂的工具函數註冊到builtins模組中,就能讓它跟內建函數有相同的效果。

如果想把一個工具函數註冊成為內建函數,只需要在入口檔案中導入它,然後使用setattr把它設定成builtins模組的一個屬性。第二個參數是你想要全域呼叫的時候的名字,第三個參數就是你需要註冊的工具函數。名字可以跟工具函數的名字不相同,只要不跟現有的內建函數重複就好了。

註冊完成以後,在這個專案的整個運行時中,任何.py檔案裡面都可以直接透過註冊的名字呼叫這個工具函數,就跟呼叫內建函數一樣。

參考資料

[1] icecream/builtins.py: https://github.com/gruns/icecream/blob/master/icecream/builtins.py

以上是如何讓Python中的自訂函數可以全域使用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:51cto.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板