2016-07-14 17 views
0

我最近在Python(numpy)中編寫了一個方法,可以在單個元素上執行操作,也可以在數組上執行元素操作。Python中重載參數的命名約定

例如:

i這裏可以是一個單一的指數,或它們的陣列,這使得描述性命名它困難。

而且,在更一般的情況下,一個名稱應該如何重載可以有很大不同含義的參數?這裏有一個(虛構的)例子:

def doTheThing(flag, item): 
    if(flag == 0): 
     useOneWay(item) 
    else: 
     useTotallyOtherWay(item) 

如果item代表在這裏兩個完全不同的事情,這取決於flag,究竟應該如何命名?

有兩個帶默認值的命名參數會更好嗎?例如

def doTheThing(flag, item1=None, item2=None): 

也許這樣的情景即將到來本身就是不好的編程實踐的指示,和最好的解決辦法是重新分解成不同的方法來處理各種情況。

基本上,是否有一個Python命名約定在這裏給出了方向?在PEP8中我找不到任何特別引用參數過載的東西。

爲了儘量保持這個主題並且不加評論,請在您的答案中引用一些有信譽的源代碼(PEP8或Python中的其他大名)。然而,我很樂意在評論中聽到個人意見。

+1

如果它只有兩個變體,我將它命名爲例如'carOrCarList'我不喜歡打電話給'item',除非它真的是通用的。始終在儘可能最小的範圍內命名變量。 如果它會超過兩個(或三個)變體,請使用通用名稱(如項目),並在註釋中描述它可能是什麼。 –

回答

1

你可以做幾件事情。的第一件事就是因此命名您的變量:

def addOne(self, i_or_is): 
    if not isinstance(i_or_is, list): 
     i_or_is = [i_or_is] 
    ... 

但在這種情況下,更好的解決方案很可能會採取*args

def addOne(self, *list_of_is): 
    ... 

可稱爲像add(1)add(1, 2, 3)甚至add(*list_)(最後一個示例將現有列表解包爲*args)。

如果你有一個參數可能意味着不同的事情,你確實可以將它們分成2個參數,只接受一個參數。標準庫做到這一點的logging module

stream - 使用指定的流初始化StreamHandler中。請注意,此參數與'文件名'不兼容 - 如果兩者都存在,則會引發ValueError。