Pythonic初始化函数参数的方法

Wil*_*amp 0 python coding-style function

哪个更pythonic?

一个

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
Run Code Online (Sandbox Code Playgroud)

或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
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ers 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
Run Code Online (Sandbox Code Playgroud)

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