2015-04-28 2 views
0

Может кто-нибудь объяснить мне, почему использование «печати» в следующем продолжит повторное выполнение кода, но с помощью «return» будет запускаться только один раз? И как бы у вас был код, который повторно запускал его, используя «возврат», а не «печатать»?Печать vs Возврат с time.sleep в python

Спасибо я "LL!

def stop(): 
    while True: 
     oanda = oandapy.API(environment="practice", access_token="xxxxxxxx") 
     response = oanda.get_prices(instruments="EUR_USD") 
     prices = response.get("prices") 
     asking_price = prices[0].get("ask") 
     s = asking_price - .001 
     print s 
    time.sleep(heartbeat) 


print stop() 

VS

def stop(): 
    while True: 
     oanda = oandapy.API(environment="practice", access_token="xxxxxxxxxx") 
     response = oanda.get_prices(instruments="EUR_USD") 
     prices = response.get("prices") 
     asking_price = prices[0].get("ask") 
     s = asking_price - .001 
     return s 
    time.sleep(heartbeat) 


print stop() 
+0

Если вы не используете 'return', вы фактически создавая бесконечное время цикла, если вы не используете' break' заявление – logic

ответ

3

Q.

Может кто-нибудь объяснить мне, почему использование «печать» в следующем будет продолжать повторно запустить код, но с помощью «возврата» будет работать только один раз?

А.

The return выходит из функции целиком, так что она не может быть перезапущен.

Q.

А как у вас есть код повторно запустить его самостоятельно, используя «возвращение» в отличие от «печати»?

Использование "yield" вместо «возврата», чтобы создать своего родом возобновляемой функции называется generator.

Например:

def stop(): 
    while True: 
     oanda = oandapy.API(environment="practice", access_token="xxxxxxxx") 
     response = oanda.get_prices(instruments="EUR_USD") 
     prices = response.get("prices") 
     asking_price = prices[0].get("ask") 
     s = asking_price - .001 
     yield s 

g = stop() 
print next(g) 
print next(g) 
print next(g) 
+0

Thats awesome @ Raymond Hettinger! Большое спасибо, я сейчас работаю с урожаем! – MacD

4
return s 

возвращается из stop(). Это делает неcontinuewhile цикл. Если вы хотите, чтобы оставаться в курсе, не возвращаются из функции.

+0

Таким образом, вы не можете использовать «возвращение» в петля? Спасибо за ответ. – MacD

+0

Конечно, вы можете. Но это зависит от того, что вы хотите сделать. Вы хотите бесконечный цикл? Тогда не возвращайся. Если вы хотите в какой-то момент выйти из цикла, проверьте условие и вернитесь. –

+1

Это потому, что вы используете 'return' в функции, это не имеет никакого отношения к циклу. 'return' всегда заканчивает функцию, в которой он находится, цикл или цикл нет. – SuperBiasedMan

Смежные вопросы