我最近纔開始學習Python。讓我解釋我想要完成的事情。我有這個.py腳本,基本上有幾個功能(硬編碼到腳本中),都需要添加到單個列表中,以便我可以通過簡單地使用索引運算符來獲得我需要的功能,如下所示:Pythonic,動態定義靜態定義函數列表的優雅方法?
needed_function = function_list [needed_function_index]
我在實施第一次嘗試,這導致在下面的代碼結構:
(imports)
function_list = []
(other global variables)
def function_0 = (...)
function_list.append(function_0)
def function_1 = (...)
function_list.append(function_1)
def function_2 = (...)
function_list.append(function_2)
(rest of code)
但我不喜歡這樣的解決方案,因爲它是不是很優雅。我的目標是能夠簡單地將函數定義添加到腳本中(不帶追加調用),腳本將自動將其添加到函數列表中。
我想過在另一個函數中定義所有的函數,但我不認爲我會得到任何與這些。我想也許用裝飾器「標記」每個函數,但是我意識到裝飾器(如果我正確地理解它們)在每次調用函數時調用,而不是一次。
一段時間後,我想出了這個解決方案:
(imports)
(global variables)
def function_0 = (...)
def function_1 = (...)
def function_2 = (...)
function_list= [globals()[x] for x in globals() if re.match('^function_[0-9]+$', x)]
(rest of code)
我喜歡它多一點作爲一個解決方案,但我與它唯一的疑慮是,我寧願,用於清潔的目的,完全定義腳本頂部的function_list。不過,我不能這樣做,因爲腳本頂部的globals()調用將不包含函數,因爲它們還沒有被定義。
也許我應該簡單地解決一個不太優雅的解決方案,或者我不是以一種慣用的方式寫我的腳本。無論如何,任何意見和建議表示讚賞。
我的建議是用裝飾來做到這一點 - 我認爲這是最優雅的。他們只運行一次。 –