哪个更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混乱一个已经非常复杂的函数。
答案 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.如果没有必要,请不要让用户有机会弄乱你的代码。