이번 주말 나는 시그니처 보존 데코레이터를 만드는 Michele Simionato의 decorator module 조각으로 찢어 버렸습니다. 모두의 마음에 나는이 코드로 장난, 발견사전 컴파일 여부와 상관없이 exec 문
src = """def function(a,b,c) :\n return _caller_(a,b,c)\n"""
evaldict = {'_caller_' : _caller_}
code = compile(src, '<string>', 'single')
exec code in evaldict
new_func = evaldict[function]
이 비슷한을 작동하는 동적으로 생성 기능은 ... 컴파일 단계는 완전히 피할 갈 수 있다는,이 하나 :
exec src in evaldict
지금, 나는 그 추가 단계에 대한 좋은 이유가 확실 해요,하지만 두 방법의 차이점이 무엇인지 찾을 수가있다. 공연?
내가 묻는 바로는 새로운 기능을 정의하고 그에 대한 핸들을 얻을 수있는 유사한 기능을 eval에서 얻을 수 있습니까? 나는 시도했지만, 일할 수 없었다. ...
성능은 어떻습니까? 어떤 이유로 컴파일 속도가 더 빨라지는 것 같습니까? – Radu
나는 정말로 모른다. 같은 소스에서'exec'를 여러 번 호출하면'compile '이 빠를 것이라고 생각합니다. 문자열로 호출 된'exec'는 문자열을 바이트 코드로 컴파일 한 다음 실행합니다. 컴파일은 각 호출에서 발생합니다. –