2016-07-14 18 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。