[英]Best practice for refactoring a python function to return a tuple, instead of a single variable?
我在大型代碼庫中重構python函數。 目前,它看起來像:
def GetEvents(file_path):
...
return events #a list of Event objects
一堆代碼依賴於此函數已經返回列表對象。 但是,我想重構它,所以它返回:
def GetEvents(file_path):
...
return (events, event_header)
event_header是對這組事件的一點描述。 但是,這將嚴重破壞當前需要列表的所有代碼,而不是返回元組。 在任何其他語言中,我都會通過引用傳遞event_header,但我不認為我可以在Python中執行此操作。 我還可以聲明另一個函數GetEventsAndHeader(),但是這個函數很難復制。
建議?
將函數重命名為GetEventsAndHeader()
,並添加一個新函數GetEvents()
:
def GetEvents(*args, **kw):
return GetEventsAndHeader(*args, **kw)[0]
或者只是咬緊牙關並更新調用GetEvents()
所有代碼並調整該代碼以使用索引為[0]
的returnvalue或者也使用標題。
如果您不是絕對需要返回元組,只需在返回的列表中添加一個屬性:
class EventList(list):
pass
def GetEvents(file_path):
...
events = EventList(events)
events.event_header = some_header
return events
好吧,如上所述,如果這不帶任何參數,那么它可能不應該是一個函數。 我補充一點,它可能是一個對象的一部分,如果沒有,它應該是。
這樣,你可以:
class EventGroup(object):
def GetEvents(): # note camelcase is not pep8 compliant
return dat_list
def EventGroupInfo():
return some_info
def fact_about_events1():
return fact1
def fact_about_events2():
return fact2
我使用無參數方法來並行代碼,但我不一定推薦它。
另一種設計選擇是返回一個尊重完整列表協議的對象,並攜帶有關該事件組的元數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.