Предполагая, что проблема в том, что вы не хотите, чтобы цикл, вам нужно иметь то, что называется 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
намного превосходит то, что вам нужно для подавляющего большинства случаев использования.
Прохладный. У вас есть вопрос? Также подумайте об исправлении вашего форматирования, чтобы мы могли его прочитать (выберите текст и нажмите ctrl-k) – DaveBensonPhillips
В чем вопрос? – MarkyPython