Добре. Отже, моє запитання просте: як я можу призначити значення змінної за допомогою eval у Python? Я намагався, eval('x = 1')але це не спрацює. Він повертає SyntaxError. Чому це не спрацює?
Добре. Отже, моє запитання просте: як я можу призначити значення змінної за допомогою eval у Python? Я намагався, eval('x = 1')але це не спрацює. Він повертає SyntaxError. Чому це не спрацює?
Відповіді:
Тому що x=1це твердження, а не вираз. Використовуйте execдля запуску операторів.
>>> exec('x=1')
>>> x
1
До речі, існує безліч способів уникнути використання exec/ evalякщо все, що вам потрібно, це динамічне ім'я для присвоєння, наприклад, ви можете використовувати словник, setattrфункцію ,або :locals()словник
>>> locals()['y'] = 1
>>> y
1
Оновлення : Хоча наведений вище код працює в REPL, він не буде працювати всередині функції. Дивіться Модифікація місцевих жителів у Python, щоб execдізнатися про інші варіанти, якщо мова не йде про це.
locals(). ( docs.python.org/2/library/functions.html#locals ) Чи існує інший спосіб просто використовувати призначення без повного зла eval()?
Ви не можете, оскільки присвоєння змінної - це вираз, а не вираз, і evalможе лише evalвирази. Використовуйте execзамість цього.
А ще краще, не використовуйте ні те, ні інше, і повідомте нам, що ви насправді намагаєтесь зробити, щоб ми могли знайти безпечне та здорове рішення.
x = 0
def assignNewValueToX (v):
глобальний х
x = v
eval ('assignNewValueToX (1)')
друк (x)
Це працює ... тому що python насправді буде запускати assignNewValueToX, щоб мати можливість оцінити вираз. Його можна розвивати і надалі, але я впевнений, що є кращий варіант для будь-яких потреб.