2010-04-13 6 views

답변

9

기능의 성능과 유지 보수성이 손상 될 것입니다. 그러나 자신의 코드를 너무 많이 악화시키려는 경우 Python은 "충분한 밧줄로 발을 쏠 수 있습니다"(:-) :

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

는 조금 덜 끔찍한 물론, 특정 DICT에 exec하는 것입니다 :

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

이 적어도 첫 번째 방법의 네임 스페이스 오염을 방지 할 수 있습니다.

+0

사전을 실행하면 제대로 작동합니다. Thans –

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()'은 파이썬에서만 표현식을 허용하고 할당은 표현식이 아니라 명령문입니다. –

+0

죄송합니다. 나는 나쁜 소식을 분명히했다. 나는 지금 오류를보고 나는 바보 이동을했다는 것을 깨닫는다. 나는 시험 스트레스가 내게 다가 왔음에 틀림 없다. 사과. – inspectorG4dget

관련 문제