Python return 无限循环中从一个函数到另一个函数的值
Python return values from one function to another in infinite loop
问题:
def tradingview(): 是无限循环,应该 return 两个数字
def tradingview():
while True:
with open(filepath, 'r') as f:
count_var_short = f.read().count('Exit Short Open')
print('Current shorts open:',count_var_short)
with open(filepath, 'r') as f:
count_var_long = f.read().count('Exit Long Open')
print('Current longs open:',count_var_long)
return (count_var_short,count_var_long)
def target_balance(count_var_short,count_var_long):
current_target = cur_price_VWAP['vwap'] * freebalance['BTC']['free']
print ('current_target long',current_target * count_var_short)
print ('current_target short',current_target * count_var_long)
if __name__ == '__main__':
Thread(target = tradingview).start()
Thread(target = target_balance(count_var_short,count_var_long)).start()
此代码给出错误
Thread(target = target_balance(count_var_short,count_var_long)).start()
NameError: name 'count_var_short' is not defined
============================================= ==
我要def tradingview():
return两个号码
count_var_short
和 count_var_long
并在函数中使用它们
def target_balance(count_var_short,count_var_long):
我知道我应该阅读 return 的工作原理,但如果有人帮助我编写我自己的代码,我将非常感激,因为它对我来说更容易理解。
您想要创建一个生成器,而不是具有单个 return 值的函数,它是一个表达式,然后恢复执行。
您可以将 tradingview
重写为无限生成器:
def tradingview():
while True:
with open(filepath, 'r') as f:
count_var_short = f.read().count('Exit Short Open')
print('Current shorts open:',count_var_short)
with open(filepath, 'r') as f:
count_var_long = f.read().count('Exit Long Open')
print('Current longs open:',count_var_long)
yield count_var_short, count_var_long
yield
表达式 在 循环内 "return" 恢复执行前你想要的值。它还会将 tradingview
从常规函数转换为生成器函数,在调用时 return 生成器。
现在您可以重写调用 target_balance
的代码以使用生成器:
if __name__ == '__main__':
for count_var_short, count_var_long in tradingview():
target_balance(count_var_short,count_var_long)
不需要奇怪的线程行为:Python 已经提供了您需要的生成器行为。我建议您仔细阅读它们(以及一般的 yield
关键字)。
问题:
def tradingview(): 是无限循环,应该 return 两个数字
def tradingview():
while True:
with open(filepath, 'r') as f:
count_var_short = f.read().count('Exit Short Open')
print('Current shorts open:',count_var_short)
with open(filepath, 'r') as f:
count_var_long = f.read().count('Exit Long Open')
print('Current longs open:',count_var_long)
return (count_var_short,count_var_long)
def target_balance(count_var_short,count_var_long):
current_target = cur_price_VWAP['vwap'] * freebalance['BTC']['free']
print ('current_target long',current_target * count_var_short)
print ('current_target short',current_target * count_var_long)
if __name__ == '__main__':
Thread(target = tradingview).start()
Thread(target = target_balance(count_var_short,count_var_long)).start()
此代码给出错误
Thread(target = target_balance(count_var_short,count_var_long)).start()
NameError: name 'count_var_short' is not defined
============================================= ==
我要def tradingview():
return两个号码
count_var_short
和 count_var_long
并在函数中使用它们
def target_balance(count_var_short,count_var_long):
我知道我应该阅读 return 的工作原理,但如果有人帮助我编写我自己的代码,我将非常感激,因为它对我来说更容易理解。
您想要创建一个生成器,而不是具有单个 return 值的函数,它是一个表达式,然后恢复执行。
您可以将 tradingview
重写为无限生成器:
def tradingview():
while True:
with open(filepath, 'r') as f:
count_var_short = f.read().count('Exit Short Open')
print('Current shorts open:',count_var_short)
with open(filepath, 'r') as f:
count_var_long = f.read().count('Exit Long Open')
print('Current longs open:',count_var_long)
yield count_var_short, count_var_long
yield
表达式 在 循环内 "return" 恢复执行前你想要的值。它还会将 tradingview
从常规函数转换为生成器函数,在调用时 return 生成器。
现在您可以重写调用 target_balance
的代码以使用生成器:
if __name__ == '__main__':
for count_var_short, count_var_long in tradingview():
target_balance(count_var_short,count_var_long)
不需要奇怪的线程行为:Python 已经提供了您需要的生成器行为。我建议您仔细阅读它们(以及一般的 yield
关键字)。