2010-04-13 3 views

Répondre

9

Cela va endommager les performances de votre fonction, ainsi que sa maintenabilité, mais si vous voulez vraiment améliorer votre propre code, Python vous donne "assez de corde pour vous tirer dans le pied" (;-):

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

un peu moins horrible, bien sûr, serait de exec dans un dict spécifique:

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

Ce évite au moins l'espace de nom-pollution de la première approche.

+0

En cours d'exécution dans un dictionnaire l'a fait fonctionner. Thans –

0

Oui.

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" 

Hope this helps

+1

eval et exec, deux choses différentes en Python. eval ("my_obj.a1 = att1") vous donnera une erreur de syntaxe (soulevée par eval) (essayez exec à la place). – Ponkadoodle

+0

'eval()' dans Python accepte uniquement les expressions, et l'affectation est une déclaration, pas une expression. –

+0

Je suis désolé. J'ai clairement fait un mauvais post. Je vois l'erreur maintenant et réalise que j'ai fait un mouvement idiot. Je suppose que le stress de l'examen doit être à moi. Excuses. – inspectorG4dget

Questions connexes