如何将字符串形式的变量名转为可用变量并输出对应值?
动态获取变量值的解决方案
原始代码
import numpy import importlib urls_1 =["a"] urls_2 =["b"] urls_3 =["c"] urls_4 =["d"] urls_5 =["e"] urls_6 =["a"] urls_7 =["b"] urls_8 =["c"] urls_9 =["d"] urls_10 =["e"] for i in range(1, 10): urls_1 = "a" urls_2 = "b" urls_3 = "c" urls_4 = "d" urls_5 = "e" n = 0+i urls_1 = ("urls_%s "%(n)) print(urls_1)
问题说明
当前代码里,urls_1 = ("urls_%s "%(n))只是把变量名以字符串形式赋值,输出的是urls_1 、urls_2 这类文本,无法拿到对应变量中的实际值。期望输出为:
a b c d e a b c d e
解决方法
方法1:通过globals()动态获取变量
利用globals()字典获取全局作用域中的变量,根据字符串形式的变量名拿到对应值:
import numpy urls_1 =["a"] urls_2 =["b"] urls_3 =["c"] urls_4 =["d"] urls_5 =["e"] urls_6 =["a"] urls_7 =["b"] urls_8 =["c"] urls_9 =["d"] urls_10 =["e"] for i in range(1, 10): var_name = f"urls_{i}" # 获取对应变量的列表,并取出第一个元素 target_value = globals()[var_name][0] print(target_value)
注:globals()[var_name]会根据字符串找到对应的全局变量,比如i=1时拿到urls_1列表,取索引0的元素就是"a"。
方法2:改用列表存储(推荐)
直接将所有目标值存入列表,避免动态变量名的繁琐,代码更易读维护:
# 直接定义包含所有目标值的列表 url_items = ["a", "b", "c", "d", "e", "a", "b", "c", "d", "e"] # 遍历前9个元素(对应原循环的1-9次) for item in url_items[:9]: print(item)
如果需要复用基础序列,也可以这样写:
base_urls = ["a", "b", "c", "d", "e"] # 重复两次基础序列,取前9个元素 for item in (base_urls * 2)[:9]: print(item)
内容的提问来源于stack exchange,提问作者Mahan Tehrani
相关产品推荐
相关产品推荐

