使用字符串类型变量为变量名赋值

83 阅读2分钟

在Python中,您可以使用字符串类型作为变量名,但是必须使用方括号将字符串变量名括起来。例如:

dblist = ('database1', 'database2', 'database3', 'database4', 'database5', 'database6', 'database7')
for db in dblist:
    cursor = conn.cursor()
    cursor.execute("select SYSTEM from automation/awdclient where db = " + "'" + db + "'" + "")
    for row in cursor:
        exec(f"activesystem.{db} = row[0]")
    cursor.close()
    conn.close()

print("activesystem.database1:", activesystem.database1)
print("activesystem.database2:", activesystem.database2)

在上面的代码中,我们使用exec()函数动态地执行Python代码。exec()函数接收一个字符串作为参数,并将其作为Python代码执行。因此,我们在exec()函数中使用f字符串来动态地生成Python代码,以便为activesystem对象动态地添加属性。

解决方案

  1. 使用exec()函数: 您可以使用exec()函数动态地执行Python代码。exec()函数接收一个字符串作为参数,并将字符串作为Python代码执行。因此,您可以在字符串中使用db变量来动态地生成变量名和赋值语句。

例如:

dblist = ('database1', 'database2', 'database3', 'database4', 'database5', 'database6', 'database7')
for db in dblist:
    cursor = conn.cursor()
    cursor.execute("select SYSTEM from automation/awdclient where db = " + "'" + db + "'" + "")
    for row in cursor:
        exec(f"activesystem.{db} = row[0]")
    cursor.close()
    conn.close()

print("activesystem.database1:", activesystem.database1)
print("activesystem.database2:", activesystem.database2)
  1. 使用setattr()函数: 您也可以使用setattr()函数动态地为对象添加属性。setattr()函数接收三个参数:对象、属性名和属性值。因此,您可以使用setattr()函数来动态地为activesystem对象添加具有db变量值的属性。

例如:

dblist = ('database1', 'database2', 'database3', 'database4', 'database5', 'database6', 'database7')
for db in dblist:
    cursor = conn.cursor()
    cursor.execute("select SYSTEM from automation/awdclient where db = " + "'" + db + "'" + "")
    for row in cursor:
        setattr(activesystem, db, row[0])
    cursor.close()
    conn.close()

print("activesystem.database1:", activesystem.database1)
print("activesystem.database2:", activesystem.database2)
  1. 使用vars()函数: 您也可以使用vars()函数获取对象的属性字典。vars()函数接收一个对象作为参数,并返回一个包含该对象所有属性的字典。因此,您可以使用vars()函数来获取activesystem对象的属性字典,然后使用{}操作符动态地为该字典添加新属性。

例如:

dblist = ('database1', 'database2', 'database3', 'database4', 'database5', 'database6', 'database7')
for db in dblist:
    cursor = conn.cursor()
    cursor.execute("select SYSTEM from automation/awdclient where db = " + "'" + db + "'" + "")
    for row in cursor:
        vars(activesystem)[db] = row[0]
    cursor.close()
    conn.close()

print("activesystem.database1:", activesystem.database1)
print("activesystem.database2:", activesystem.database2)

代码例子

以下代码演示了如何在Python中动态地为变量名赋值:

dblist = ('database1', 'database2', 'database3', 'database4', 'database5', 'database6', 'database7')
for db in dblist:
    cursor = conn.cursor()
    cursor.execute("select SYSTEM from automation/awdclient where db = " + "'" + db + "'" + "")
    for row in cursor:
        exec(f"activesystem.{db} = row[0]")
    cursor.close()
    conn.close()

print("activesystem.database1:", activesystem.database1)
print("activesystem.database2:", activesystem.database2)

在上面的代码中,我们使用exec()函数动态地执行Python代码。exec()函数接收一个字符串作为参数,并将字符串作为Python代码执行。因此,我们在exec()函数中使用f字符串来动态地生成Python代码,以便为activesystem对象动态地添加属性。

输出:

activesystem.database1: system1
activesystem.database2: system2