通过字符串自动化python脚本?

2024-04-27 19:41:09 发布

您现在位置:Python中文网/ 问答频道 /正文

假设下面的python对象是锁定的我们只是不能更改代码,我们所能做的就是在代码之后立即编写。我知道这很可怕。但我们不得不这么做。你知道吗

Name01 = "Dorian"
Name02 = "Tom"
Name04 = "Jerry"
Name03 = "Jessica"
#let say that there's 99 of them

如何打印每个人的名字(99)而不重复?

从我的角度来看。解决这种情况而不重复的理想方法是使用与字符串相同的逻辑。你知道吗

因为name=>;name+index 所以用它们进行迭代非常容易。你知道吗

在某种程度上,这是一个与下面完全虚构的逻辑相同的代码:

for i in range (1,100):
    print(Name+f"{i:02d}")
for i in range (1,100):
     string_v_of_obj = "Name" + str(f"{i:02d}")
     print(func_transform_string_to_code(string_v_of_obj))

也许这样的事情是可能的。你知道吗

for python_object in script_objects:
    if Name in python_object:
       print(python_object)

Tags: of对象代码nameinobjforstring
3条回答

使用eval()

>>> Name01 = "Dorian"
>>> Name02 = "Tom"
>>> Name04 = "Jerry"
>>> Name03 = "Jessica"
>>> for i in range(1, 100):
...   print(eval('Name%02d'%i))
... 
Dorian
Tom
Jessica
Jerry

如果您使用的是3.7+,则可以使用f string

f"Name{i:02d}"

您可以通过globals()访问全局变量,或者如果您想使用locals()访问局部变量。它们存储在dict中。所以呢

for i in range (1,100):
    print(locals()[f"Name{i:02d}"])

你应该做你想做的。你知道吗

这可以做到:

Name01 = "Dorian"
Name02 = "Tom"
Name04 = "Jerry"
Name03 = "Jessica"

vars = locals().copy()
for i in vars:
    if 'Name' in i:
        print((i, eval(i)))

一行备选方案:

Name01 = "Dorian"
Name02 = "Tom"
Name04 = "Jerry"
Name03 = "Jessica"

print([(i, eval(i)) for i in locals().copy() if "Name" in i])

相关问题 更多 >