停止不断迭代的迭代函数python
Stop iterative function python that keeps iterating
我在下面有一个函数,它将一个值作为输入,并确定一个 new_value(new_value 将始终小于 original_value)。如果 new_value 和 original_value 之间的差异小于指定的公差,则返回 new_value。如果公差更大,则以 new_value 作为参数再次调用该函数,以计算新的_new_value。
根据输入的 original_value,有时永远不会满足容差条件。
如何让函数在一定次数的迭代后停止迭代?我试图在 else 之后放入 count=0,count+=0,但这不起作用,因为每次再次调用该函数时它 returns 归零。谢谢
def calc_value(original_value):
# equations to calculate new_value
if original_value - new_value < tolerance:
return new_value
else calc_value(new_value)
你不应该为此使用递归。使用 for
循环迭代固定次数,使用公差测试在适当的时候提前中断。
def calc_value(original_value):
old_value = original_value
for _ in range(10):
new_value = ...
if abs(old_value - new_value) < tolerance:
break
old_value = new_value
return new_value
如果您想在达到某个迭代深度后停止迭代,您需要将一个计数器传递给函数。这可以通过函数中的 default
参数来完成:
def calc_value(original_value, count = 0):
# equations to calculate new_value
if original_value - new_value < tolerance:
return new_value
else:
if count > 100:
return new_value # Handle reaching limit
calc_value(new_value, count + 1)
每次递归调用该函数时,将计数加1并检查是否已达到限制。
通过使用 default
参数,您无需在调用函数时设置它:
calc_value(42)
您甚至可以更进一步,添加一个 limit 参数来指定迭代限制:
def calc_value(original_value, count = 0, limit = 100):
# ...
if count > limit:
return new_value
calc_value(new_value, count, limit)
然后您可以按顺序或指定参数来定义参数:
# Default values: count = 0, limit = 100
calc_value(42)
# Will set count to default 0, and limit to 150
calc_value(42, limit=150)
# Will set count to 5, and limit to 200
calc_value(42, 5, 200)
# Will set count to 5, and limit to 150
calc_value(42, limit=150, count=5)
您可以使用 function attributes
。像这样。
def fun(x):
if fun.counter<=max_value:
fun.counter+=1
else:
return
print x
if x:
fun(x-1)
fun.counter = 0
max_value = 3
fun(5)
我在下面有一个函数,它将一个值作为输入,并确定一个 new_value(new_value 将始终小于 original_value)。如果 new_value 和 original_value 之间的差异小于指定的公差,则返回 new_value。如果公差更大,则以 new_value 作为参数再次调用该函数,以计算新的_new_value。 根据输入的 original_value,有时永远不会满足容差条件。 如何让函数在一定次数的迭代后停止迭代?我试图在 else 之后放入 count=0,count+=0,但这不起作用,因为每次再次调用该函数时它 returns 归零。谢谢
def calc_value(original_value):
# equations to calculate new_value
if original_value - new_value < tolerance:
return new_value
else calc_value(new_value)
你不应该为此使用递归。使用 for
循环迭代固定次数,使用公差测试在适当的时候提前中断。
def calc_value(original_value):
old_value = original_value
for _ in range(10):
new_value = ...
if abs(old_value - new_value) < tolerance:
break
old_value = new_value
return new_value
如果您想在达到某个迭代深度后停止迭代,您需要将一个计数器传递给函数。这可以通过函数中的 default
参数来完成:
def calc_value(original_value, count = 0):
# equations to calculate new_value
if original_value - new_value < tolerance:
return new_value
else:
if count > 100:
return new_value # Handle reaching limit
calc_value(new_value, count + 1)
每次递归调用该函数时,将计数加1并检查是否已达到限制。
通过使用 default
参数,您无需在调用函数时设置它:
calc_value(42)
您甚至可以更进一步,添加一个 limit 参数来指定迭代限制:
def calc_value(original_value, count = 0, limit = 100):
# ...
if count > limit:
return new_value
calc_value(new_value, count, limit)
然后您可以按顺序或指定参数来定义参数:
# Default values: count = 0, limit = 100
calc_value(42)
# Will set count to default 0, and limit to 150
calc_value(42, limit=150)
# Will set count to 5, and limit to 200
calc_value(42, 5, 200)
# Will set count to 5, and limit to 150
calc_value(42, limit=150, count=5)
您可以使用 function attributes
。像这样。
def fun(x):
if fun.counter<=max_value:
fun.counter+=1
else:
return
print x
if x:
fun(x-1)
fun.counter = 0
max_value = 3
fun(5)