Pythonic初始化函数参数的方法

时间:2014-07-24 14:09:49

标签: python function coding-style

哪个更pythonic?

A

def my_function(arg, p=0):
    while arg:
        # do something
         value = arg.pop()
        # save value with a name which uses p for indexing
    p+=1

或B

def my_function(arg):
    p = 0
    while arg:
        # do something
        value = arg.pop()
        # save value with a name which uses p for indexing
    p+=1

我的一部分认为将p作为函数的参数包含愚蠢,因为有人将其设置为奇怪的值。但与此同时,我不喜欢让p = 0混乱一个已经非常复杂的函数。

2 个答案:

答案 0 :(得分:5)

不要与本地人混淆功能参数。如果它不是调用者应该使用的参数,请不要将其添加到您的函数签名中。

换句话说,您不希望任何人使用help(my_function),并对p可能适用的内容感到惊讶。


当然,这不是一个严格的规则;使用本地人可以更快地完成一些关键路径功能,所以有时你会看到类似的东西:

some_global = expensive_function()

def foo(bar, baz, _some_local=some_global):
    # code using _some_local instead of some_global

使用更快的本地名称查找。参数开头的_告诉您该名称实际上是您不应该依赖的内部实现细节。

答案 1 :(得分:2)

这取决于p始终是否必须从0开始。如果确实如此,那么一定要选择B.如果没有必要,请不要让用户有机会弄乱你的代码。