【问题标题】:How to use a variable dynamically from an imported module in python 3.8如何从 python 3.8 中的导入模块动态使用变量
【发布时间】:2023-02-04 04:39:10
【问题描述】:

我目前有以下文件 load.py 其中包含:

readText1 = "test1"
name1 = "test1"

readText1 = "test2"
name1 = "test2"

请注意,该号码会经常更改。有时可能有 2 个,有时有 20 个等等。

我需要对这些数据做些什么,然后单独保存。

在我的文件中,我像这样导入负载:

from do.load import *
#where do is a directory

然后我创建一个变量来知道文件中有多少项目(我知道)

values = range(2)

然后我尝试循环并使用每个“按名称命名的变量”,如下所示:

for x in values:
    x = x + 1
    textData = readText + x
    nameSave = name + x

请注意,我尝试使用 readText 创建一个 textData 变量,但这不会起作用,因为 readText 实际上不是一个变量。它出错了。这是我的尝试,但显然行不通。我需要做的是遍历该文件中的每个项目,然后使用它的单个变量数据。我怎样才能做到这一点?

【问题讨论】:

  • 为什么不使用列表或字典而不是编号的变量名?
  • 你认为分配不同的值是什么对同一个变量load.py 会完成吗?
  • 请注意,通配符导入有很多问题——最好只显式引用模块的命名空间。

标签: python


【解决方案1】:

这是您正在进入的常见反模式。每次你想到“我会动态引用一个变量来解决这个问题”或者“变量个数可变!”想想“字典”。

load.py 可以改为包含字典:

 load_dict = {'readText1':'test1','name1':'test1','readText2':'test2','name2':'test2'}

你可以随心所欲地让它变大或变小。

然后在你的其他脚本中

from do.load import *

#print out everything in the dictionary
for k,v in load_dict:
    print(k,v)

#create a variable and assign a value from the dictionary, dynamically even
for x in range(2):    
    text_data = load_dict['readText' + x]
    print(text_data)
    x+=1

这应该能让你解决任何你想解决的问题,并且不会给你带来痛苦,如果你继续沿着你目前的道路前进,你会发现。

【讨论】:

    【解决方案2】:

    文件 load.py 将只加载最后一个变量“readText1”和“name1”。

    要执行您要求的操作,您必须将 load.py 文件作为文本文件打开,然后遍历每一行,在每次迭代中获取 2 个变量(“readText1”和“name1”)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-15
      • 1970-01-01
      • 2019-02-27
      • 1970-01-01
      • 1970-01-01
      • 2011-04-17
      • 2019-06-05
      • 1970-01-01
      相关资源
      最近更新 更多