Делать вещи с переменной с тем же именем строки [дубликата]

1

скажем, у меня есть переменная с именем "x" и строка, которая имеет значение "x" (string1 = "x"). Как сделать материал переменной с помощью строки? Например, измените значение переменной или вызовите метод, если это объект? заранее спасибо

  • 0
    Я не уверен, что понимаю ваш вопрос, но «x» и «string1» - это разные ссылки, так что вы можете просто изменить «x», как хотите. Пока вы не измените «string1» снова, его значение не изменится. См. Эту ссылку для получения подробной информации о питонах "передача по объекту" (передача по значению, если она неизменна) python-course.eu/passing_arguments.php
  • 1
    «Как мне работать с переменной через строку?» Не надо. это плохой дизайн.
Показать ещё 4 комментария
Теги:

3 ответа

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

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

Свойство может быть установлено с помощью setattr:

>>> setattr(a, 'your_prop', 5)
>>> a.your_prop
5
  • 1
    Огромное спасибо!
  • 0
    @ Spiderboy отлично! Обновленный ответ с примером для того же по объектам.
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
0

Это зависит от того, что вы пытаетесь сделать, но вы можете зачерпнуть то, что x указывает на locals() или globals():

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

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

выходы 4 (он называется функцией x, используя string1).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню