![](/img/trans.png)
[英]Printing a list of tuples in a formated form with f-strings by a list comprehension
[英]List comprehension using f-strings
我有三個變量
a = 1
b = 2
c = 3
我想要一個像'a=1, b=2, c=3'
這樣的字符串
所以,我使用 f-string,
x = ''
for i in [a, b, c]:
x += f"{i=}"
但它給了,
x
'i=1, i=2, i=3, '
如何使i
成為a
、 b
和c
?
列表[a, b, c]
與列表[1, 2, 3]
沒有區別——變量本身沒有放在列表中,它們的值是,所以沒有辦法從列表中獲取變量名創建后列出。
如果您想要字符串a
、 b
、 c
,則需要遍歷這些字符串,而不是評估這些變量的結果:
>>> ', '.join(f"i={i}" for i in "abc")
'i=a, i=b, i=c'
如果你想獲得具有這些名稱的變量所持有的值,你可以通過在globals()
字典中查找它們來實現:
>>> a, b, c = 1, 2, 3
>>> ', '.join(f"{var}={globals()[var]}" for var in "abc")
'a=1, b=2, c=3'
但是涉及在globals()
中查找內容的代碼在第一次出現問題時調試起來真的很煩人。 任何時候你有一組要迭代的命名值時,最好將這些值放在它們自己的字典中而不是使它們成為單獨的變量:
>>> d = dict(a=1, b=2, c=3)
>>> ', '.join(f"{var}={val}" for var, val in d.items())
'a=1, b=2, c=3'
列表不記得分配給它的變量的名稱。 為此,您需要一本字典。
x = ""
my_dict = {'a': a, 'b': b, 'c': c}
for k, v in my_dict.items():
x += f"{k}={v}, "
使用 gloabls 並不總是一個好主意,如果你想要一個避免使用它們的解決方案,你可以檢查使用 inspect 模塊聲明的變量, 這里有關於獲取變量名稱的線程,我從 function 中獲取。
import inspect
def retrieve_var(var):
callers_local_vars = inspect.currentframe().f_back.f_locals.items()
return [var_name for var_name, var_val in callers_local_vars if var_val is var]
現在您可以使用類似於您使用的循環
a, b, c = 1, 2, 3
x = ''
for i in [a, b, c]:
var = retrieve_var(i)
x += f"{var[0]}={i}, "
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.