用具有与字符串相同名称的变量进行处理

时间:2018-09-21 19:19:14

标签: python

假设我有一个名为“ x”的变量和一个值为“ x”的字符串(string1 =“ x”)。如何通过字符串处理变量? 例如更改变量的值或如果它是对象则调用方法? 预先感谢

3 个答案:

答案 0 :(得分:1)

变量可通过字典locals()globals()获得。如果您想通过弹簧名称访问特定变量,可以执行例如

>>> my_var = 'hello'
>>> x = 'my_var'
>>> locals()[x]
'hello'

您还可以使用这种方法将其分配回变量,例如

>>> my_var = 'hello'
>>> x = 'my_var'
>>> locals()[x] = 'something else'
>>> my_var
'something else'

由于函数是Python中的对象,因此您可以以相同的方式访问任何本地可用的函数来调用它们。

>>> def my_test_function(n):
>>>     return n*8

访问该方法并调用它。

>>> locals()['my_test_function'](4)
32

要通过对象名称访问对象的属性,可以使用getattr()setattr()进行设置。例如,创建一个具有单个属性your_prop的对象。

class Example:
    your_prop = 2

a = Example()

可通过your_prop获得该值。

>>> a.your_prop
2

可以使用getattr通过名称访问属性

>>> getattr(a, 'your_prop')
2

可以使用setattr设置属性:

>>> setattr(a, 'your_prop', 5)
>>> a.your_prop
5

答案 1 :(得分:0)

好吧,假设您有许多不同的功能:Aoo()Boo()Coo() ...,并假设您要指定要通过命令调用的函数行参数。

现在,该参数将是一个字符串,因此您需要通过函数名称来调用它,但是您事先并不知道函数的名称。

一种可能的解决方案是使用exec()

def boo():
   print("boo function")

def coo():
   print("coo function")

现在:

argument = "boo"
exec(argument + "()")
>>> boo function

argument = "coo"
exec(argument + "()")
>>> coo function

答案 2 :(得分:0)

这取决于您要执行的操作,但是您可以使用xlocals()来获取globals()指向的内容:

def x(k):
    return k + 1
string1 = "x"

the_function_x = locals()[string1]
print(the_function_x(3))

输出4(通过使用x称为string1函数)。