在python中创建默认参数
Posted
技术标签:
【中文标题】在python中创建默认参数【英文标题】:creating default parameters in python 【发布时间】:2013-04-11 00:27:49 【问题描述】:我有一个带有三个参数的函数,参数二和三有默认值。参数三的默认值取决于参数一的属性。但是,我显然无法对“def”行中的参数一执行任何操作,因此我无法找到一种有效的方法来定义参数三的默认值。在 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
【问题讨论】:
【参考方案1】:请记住,默认参数仅在函数对象被创建时才被计算一次,所以没有办法在其中放置这样的表达式。这与人们对分配可变值的默认参数的行为感到惊讶的原因相同。
通常的方法是选择一个你知道b
永远不会的默认值。 None
通常是一个不错的选择。
def stooge_sort(data, a=0, b=None):
if b is None:
b = len(data) - 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
【讨论】:
使用if b is None
而不是==
。它不会受伤,而且速度更快。【参考方案3】:
我认为常见的解决方法是简单地为b
分配一些默认值,例如None
,然后在函数内根据data
进行调整:
def stooge_sort(data, a = 0, b = None):
if b is None:
b = len(data) - 1
# continue doing work
【讨论】:
以上是关于在python中创建默认参数的主要内容,如果未能解决你的问题,请参考以下文章