我只是试着跑去玩一些def来训练自己,意外 当我在这里和那里调用这个功能时,它会一遍又一遍地循环直到达到3000次 为什么要数3000次,然后停下来。
def print_two(*args):
arg1, arg2 = args
print "arg1: %r, arg2: %r" %(arg1, arg2)
print_no_thing()
def print_no_thing():
print ("No thing ")
print_two_again("me and ", "you")
def print_two_again(arg1,arg2):
print "arg1:%r, arg: %r" %(arg1,arg2)
print_two("pack","packer")
print_two_again("cool", "cooler")
答案 0 :(得分:2)
假设问题是你不想循环,你需要拥有所谓的terminal condition
。目前:
print_two_again
来电print_two
print_two
来电print_no_thing
print_no_thing
来电print_two_again
没有conditional clauses
所以这些功能将继续相互呼叫,永不停止。你需要检测一些会导致它退出的东西。有两种方法可以做到这一点:
第一个:
def print_two(*args):
arg1, arg2 = args
print "arg1: %r, arg2: %r" %(arg1, arg2)
print_no_thing()
def print_no_thing():
print ("No thing ")
def print_two_again(arg1,arg2):
print "arg1:%r, arg: %r" %(arg1,arg2)
print_two("pack","packer")
print_two_again("cool", "cooler")
第二个:
# Note that you shouldn't actually use global variables, but this is clear for demonstration purposes
max_loops = 100
current_loops = 0
def print_two(*args):
arg1, arg2 = args
print "arg1: %r, arg2: %r" %(arg1, arg2)
print_no_thing()
def print_no_thing():
print ("No thing ")
if max_loops > current_loops:
current_loops += 1
print_two_again("me and ", "you")
def print_two_again(arg1,arg2):
print "arg1:%r, arg: %r" %(arg1,arg2)
print_two("pack","packer")
print_two_again("cool", "cooler")
它目前停在三千的原因是你正在达到Python的最大递归深度。每个函数都会创建一个新的堆栈框架,因为您永远不会从函数返回(只调用新函数),所以您只需要添加新的堆栈帧。最终你会用完(当你到达maximum recursion depth
时)。有关详情,请参阅this。
请注意,尽管可以使用最大递归深度,但不建议这样做。 3000
远远超出了绝大多数用例所需的范围。