簡體   English   中英

將功能參數設置為全局變量

[英]Setting function parameter as global variable

我試圖使一個函數接收的參數可用於文件中的所有其他函數,或者將其設置為全局變量,而不必將其作為所有其他函數的參數傳遞。 到目前為止,我已經嘗試將其設置為全局變量,但是顯然不能將參數也設置為全局變量。

這是我想要的一個簡單示例:

def add(a,b, verbose):
    global verbose
    return a + b

result = add(2,3, False)
print(verbose)

在我的情況下,被調用函數在另一個文件上,因此無法預先將詳細設置為全局。 任何幫助,將不勝感激!

如果要分配給函數內部的全局verbose變量,可以執行以下操作:

def add(a,b, verbose_value):
    global verbose
    verbose = verbose_value
    return a + b

result = add(2,3, False)
print(verbose)

首先,作為一般規則,全局變量是邪惡的-更確切地說,應盡可能避免從函數內部對全局變量進行變異或更壞的重新綁定。

第二點:在Python中,“全局”實際上意味着“模塊級”-沒有“進程級”全局(請注意,這是設計的選擇,基於上面的第一點)

第三點:對於您的一般用例(應用程序設置),“減少危害”的方法是使所有模塊都使用設置系統,而不是“將參數傳遞給將其設置為全局功能的函數,這樣您就不必需要傳遞”,您的模塊只需導入設置並從那里讀取參數值(例如django設置)。

缺點是1 /只有您自己的代碼才能使用這些設置,而2 /使您的代碼依賴於這些設置(有時可能是PITA)。

最后,給定“冗長”的名稱,我假設您要配置程序調試/錯誤輸出的詳細級別。 以標准的,可移植的和良好分離的方式(這樣做將解決上述兩個缺陷,解決此功能)的正確方法是使用stdlib的日志記錄包 該軟件包旨在將記錄器的使用(在“庫”代碼中,使用logger.log(level, msg, ...)或其快捷方式之一)與記錄配置(特定於應用程序/安裝) logger.log(level, msg, ...) 首先需要進行一些學習,但是根據經驗,它要花費很多時間,實際上非常迅速地節省了時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM