簡體   English   中英

重構python函數以返回元組而不是單個變量的最佳實踐?

[英]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中執行此操作。 我還可以聲明另一個函數Ge​​tEventsAndHeader(),但是這個函數很難復制。

建議?

函數重命名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.

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