Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 21, 2013 13:35:11

Massa1994
Зарегистрирован: 2013-08-10
Сообщения: 18
Репутация: +  1  -
Профиль   Отправить e-mail  

Рекурсия Переполнение стека.

Преет всем.

У меня есть какая функция:

def ontimer(fun, t):
# Завёт функцию fun через каждые t миллисекунд
time.sleep(t/1000.)
fun()

Как можно изменить эту функцию чтобы ошибка исчезла?
Мне нужно чтобы.
Её можно была использовать именно так.

def fun():
.......
ontimer(fun, 10)

Офлайн

#2 Авг. 21, 2013 14:45:24

kise97
Зарегистрирован: 2012-05-31
Сообщения: 83
Репутация: +  4  -
Профиль  

Рекурсия Переполнение стека.

А какая у вас выходит ошибка? (не уверен, но)

Офлайн

#3 Авг. 21, 2013 16:24:37

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Рекурсия Переполнение стека.

Massa1994
Как можно изменить эту функцию чтобы ошибка исчезла?

Где ошибка ?

придумайте какое-то условие, для остановки рекурсии, чтобы не было переполнения

непонятно, что вы вообще делаете :)



Офлайн

#4 Авг. 21, 2013 17:02:40

Massa1994
Зарегистрирован: 2013-08-10
Сообщения: 18
Репутация: +  1  -
Профиль   Отправить e-mail  

Рекурсия Переполнение стека.

Budulianin
В pythone есть модуль turtle. Там есть функция ontimer(fun, t) она делает то что и моя
но там никакой ошибки нету

import turtle
a = 0
def primer():
global a
a += 1
print a
turtle.ontimer(primer, 0)

primer()
turtle.mainloop()

Я пытаюсь написать такую же как эту.

Офлайн

#5 Авг. 21, 2013 19:25:56

kise97
Зарегистрирован: 2012-05-31
Сообщения: 83
Репутация: +  4  -
Профиль  

Рекурсия Переполнение стека.

Какие у вас выводятся ошибки?
Как вариант, посмотрите исходники http://pastebin.com/LirppRQg

Офлайн

#6 Авг. 21, 2013 20:06:45

dimy44
От: Евпатория
Зарегистрирован: 2012-04-21
Сообщения: 463
Репутация: +  42  -
Профиль  

Рекурсия Переполнение стека.

Massa1994
import turtle
a = 0
def primer():
global a
a += 1
print a
turtle.ontimer(primer, 0)
primer()
turtle.mainloop()
Я пытаюсь написать такую же как эту.
по всей видимости здесь имеет место асинхронный вызов turtle.ontimer(primer, 0), т.е. вы передали функцию primer методу ontimer, а (упрощённо) он уже асинхронно вызывает primer. Типа как after в ткинтер, или e32.ao_sleep(time_, func) в PyS60… Я так думаю. А у вас рекурсивный вызов, который конечно когда-то превысит лимит

Отредактировано dimy44 (Авг. 21, 2013 20:15:41)

Офлайн

#7 Авг. 22, 2013 01:32:32

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Рекурсия Переполнение стека.

Massa1994
В pythone есть модуль turtle.

Да, с функцией ontimer из turtle.py не переполняется стек

Надо исходник смотреть, если хочется понять, что и как :)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version