Уведомления

Группа в Telegram: @pythonsu

#1 Июль 24, 2008 11:35:51

balu
От:
Зарегистрирован: 2006-05-24
Сообщения: 521
Репутация: +  0  -
Профиль   Отправить e-mail  

Выполнение строки как кода

Ситуация такова. Хочется что-то типа этого

def foo():
x, y = 2, 1
#Хочу как-нибудь выполнить код в строке ниже
return somerun("x+y")
Должно возвратить 3.

Есть мысль залезть в AST, но, может, есть мысли получше?



Офлайн

#2 Июль 24, 2008 11:43:50

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

Выполнение строки как кода

def foo():
x, y = 2, 1
return eval("x+y")



Офлайн

#3 Июль 24, 2008 12:19:48

balu
От:
Зарегистрирован: 2006-05-24
Сообщения: 521
Репутация: +  0  -
Профиль   Отправить e-mail  

Выполнение строки как кода

А если строка многострочник?
eval(“x = x+y; x += 1”) уже не работает.



Офлайн

#4 Июль 24, 2008 12:32:17

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

Выполнение строки как кода

Можна еще так:
exec(“x = x+y; x+=1”) .
Тогда многострочник работает



Офлайн

#5 Июль 24, 2008 12:40:34

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

Выполнение строки как кода

Разница в том, что eval() выполняет только Expression, тогда как exec() выполняет Statement



Офлайн

#6 Июль 24, 2008 12:49:22

cybergrind
От:
Зарегистрирован: 2008-01-21
Сообщения: 201
Репутация: +  0  -
Профиль   Отправить e-mail  

Выполнение строки как кода

balu
Есть мысль залезть в AST, но, может, есть мысли получше?
разве там можно чтото редактировать?



Офлайн

#7 Июль 24, 2008 12:53:40

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

Выполнение строки как кода

balu
А если строка многострочник?
eval(“x = x+y; x += 1”) уже не работает.
тогда можно exec, но после return уже не напишешь:
def foo():
x, y = 2, 1
exec("x = x+y; x += 1")
return x



Офлайн

#8 Июль 24, 2008 12:54:05

balu
От:
Зарегистрирован: 2006-05-24
Сообщения: 521
Репутация: +  0  -
Профиль   Отправить e-mail  

Выполнение строки как кода

Спасибо, то, что надо



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version