我有一个带三个参数的函数,参数二和三个都有默认值。参数3的默认值取决于参数1的属性。但是,我显然无法对'def'行中的参数1执行任何操作,因此我无法找到定义参数3的默认值的有效方法。在python中执行此操作的标准方法是什么?
以下代码是我正在使用的代码。第一行引发错误,因为我还没有真正定义'数据'。什么是最好的解决方法?
def stooge_sort(data, a = 0, b = len(data) - 1):
if data[a] > data[b]:
data[a], data[b] = data[b], data[a]
if b + 1 - a >= 3:
thirds = (b + 1 - a) / 3
stooge_sort(data, a, b - thirds)
stooge_sort(data, a + thirds, b)
stooge_sort(data, a, b - thirds)
return data
答案 0 :(得分:3)
请记住,当函数对象创建时,默认参数仅一次评估,因此无法在其中放置类似的表达式。这与人们对分配了可变值的默认参数的行为感到惊讶的原因相同。
通常的方法是选择一个您知道b
永远不会的默认值。 None
通常是一个不错的选择。
def stooge_sort(data, a=0, b=None):
if b is None:
b = len(data) - 1
答案 1 :(得分:2)
将变量默认设置为None,然后检查变量是否为None,如果是这种情况,请将其更改为您想要的值。
def stooge_sort(data, a = 0, b = None):
if b is None:
b = len(data) - 1
if data[a] > data[b]:
data[a], data[b] = data[b], data[a]
if b + 1 - a >= 3:
thirds = (b + 1 - a) / 3
stooge_sort(data, a, b - thirds)
stooge_sort(data, a + thirds, b)
stooge_sort(data, a, b - thirds)
return data
答案 2 :(得分:1)
我认为常见的解决方法是简单地为b
分配一些默认值,例如None
,然后根据函数中的data
进行调整:
def stooge_sort(data, a = 0, b = None):
if b is None:
b = len(data) - 1
# continue doing work