скажем, у меня есть переменная с именем "x" и строка, которая имеет значение "x" (string1 = "x"). Как сделать материал переменной с помощью строки? Например, измените значение переменной или вызовите метод, если это объект? заранее спасибо
Переменные доступны через словари 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
>>> getattr(a, 'your_prop')
2
Свойство может быть установлено с помощью setattr
:
>>> setattr(a, 'your_prop', 5)
>>> a.your_prop
5
Хорошо, предположим, что у вас много разных функций: 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
Это зависит от того, что вы пытаетесь сделать, но вы можете зачерпнуть то, что x
указывает на locals()
или globals()
:
def x(k):
return k + 1
string1 = "x"
the_function_x = locals()[string1]
print(the_function_x(3))
выходы 4
(он называется функцией x
, используя string1
).