我正在尝试通过return函数获取文本,以连接成多行字符串,如下所示。
btc_positions=[{
'symbol: BTC',
'margin_balance: 0.15',
'margin_position: 0.05',
'margin_frozen: 0.01'}]
for pos in btc_positions:
for attributes in pos:
text = f"{attributes}: {pos[attributes]}"
return text
文本采用这种格式(符号:BTC),但在函数外引发错误“ return”。
控制台错误:python shitcoin_alerts.py 文件“ shitcoin_alerts.py”,第34行 返回文字 ^语法错误:在函数外部“返回”。固定! (必须在函数内部使用return)
我的意图是返回文本以在下面创建多行字符串。但是似乎找不到我能做到的任何方式。
multiline_text = f'''
symbol={symbol},
margin_balance: {margin_balance},
margin_position:{margin_position},
margin_frozen: {margin_frozen}
'''
此多行字符串的预期输出将是:
-----------------------
symbol=BTC,
margin_balance=0.15,
margin_position=0.05,
margin_available=0.01
----------------------
您有一个for
循环,但是循环不需要return语句。您可以break
提早退出,continue
提早返回循环顶部,或者只是让循环结束。循环中使用的所有变量都可用于循环外部的代码。将其与一个函数进行比较,该函数中的变量对于调用该函数的事物不可用。就您而言,您可以使用外部列表来保存在循环中创建的每个格式化字符串。
set
中的字符串很容易分成名称/值对。它们可用于创建dict
,然后可将其用于以所需方式格式化输出字符串。
btc_positions=[{
'symbol: BTC',
'margin_balance: 0.15',
'margin_position: 0.05',
'margin_frozen: 0.01'}]
# turn btc_positions set into dict for print parameters
btc_position_params = [
dict(value.split(": ") for value in position)
for position in btc_positions]
# create new list of formatted output
multiline_text_list = []
for pos in btc_position_params:
multiline_text_list.append('''symbol={symbol},
margin_balance={margin_balance},
margin_position={margin_position},
margin_frozen={margin_frozen}'''.format(**pos))
# show result
for pos_text in multiline_text_list:
print("--------------------")
print(pos_text)
print("--------------------")
btc_positions=[{ 'symbol: BTC', 'margin_balance: 0.15', 'margin_position: 0.05', 'margin_frozen: 0.01'},
{ 'symbol: BTC2', 'margin_balance: 0.15', 'margin_position: 0.05', 'margin_frozen: 0.01'}]
def test(value):
"""
value: list of sets of strings
"""
for p in value: # iterate list
d = dict(s.split(': ') for s in p) # turn set of strings to dict
d = sorted(d.items(), key=lambda x: x[1], reverse=True) # reverse sort into list of tuples
l = '-' * 15 # dashed line
fin = f'{l}\n' # create string to print
for v in d:
fin += '='.join(v)
fin += '\n'
fin += l
print(fin)
test(btc_positions)
---------------
symbol=BTC
margin_balance=0.15
margin_position=0.05
margin_frozen=0.01
---------------
---------------
symbol=BTC2
margin_balance=0.15
margin_position=0.05
margin_frozen=0.01
---------------