2010-04-13 6 views

ответ

9

Это может повредить производительность вашей функции, а также ее ремонтопригодность, но если вы действительно хотите сделать свой собственный код намного хуже, Python дает вам «достаточно веревки, чтобы стрелять себе в ногу» (;-):

>>> def horror(): 
... exec "x=23" 
... return x 
... 
>>> print horror() 
23 

чуть менее ужасный, конечно, было бы exec в определенном Dict:

>>> def better(): 
... d = {} 
... exec "x=23" in d 
... return d['x'] 
... 
>>> print better() 
23 

Это, по крайней мере, избегает пространства имен загрязнения первого подхода.

+0

Запуск внутри словаря заставил его работать. Thans – 2010-04-13 03:45:46

0

Да.

class A: 
    def __init__(self): 
     self.a1 = '' 
     self.a2 = '' 

def populate(): 
    att1 = raw_input("enter a1: ") 
    att2 = raw_input("enter a2: ") 
    my_object = A() 
    eval("my_obj.a1 = att1") 
    eval("my_obj.a2 = att2") 
    if eval("my_obj.a2") == 2: 
    print "Hooray! the value of a2 in my_obj is 2" 

Надеется, что это помогает

+1

eval и exec, две разные вещи в Python. eval ("my_obj.a1 = att1") даст вам синтаксическую ошибку (поднятую eval) (вместо этого попробуйте exec). – Ponkadoodle

+0

'eval()' в Python принимает только выражения, а присваивание - это выражение, а не выражение. –

+0

Прошу прощения. Я явно сделал плохой пост. Теперь я вижу ошибку и понимаю, что я сделал идиотский ход. Я думаю, что стресс экзамена должен быть для меня. Извиняюсь. – inspectorG4dget

Смежные вопросы