2014-12-19 4 views
1

클래스에서 메서드를 만나겠습니다. ipython에서 메서드의 소스 코드를 찾으려고하면 다음과 같은 정보가 나타납니다.파이썬에서 "동적으로 생성 된 함수"는 무엇입니까

In [9]: model.elementary_rates?? 
Type:  function 
String form: <function elementary_rates at 0x06864170> 
File:  Dynamically generated function. No source code available. 
Definition: model.elementary_rates(rate_constants, theta, p, mpf, matrix) 
Docstring: <no docstring> 

"동적으로 생성되는 함수"란 무엇입니까? 몇 가지 정보 나 예를 들어 주시겠습니까?

+5

텍스트의 스크린 샷을 게시하지 마십시오. –

+0

감사합니다. 질문의 설명을 수정했습니다. – PytLab

답변

2

기능이 exec에 의해 생성 된 경우 당신은 "동적으로 생성 된 기능"을 얻을 수 :

In [34]: code = compile('def f():\n return 3', '<string>', 'exec') 

In [35]: exec code 

In [36]: f? 
Type:  function 
String Form:<function f at 0x7f6db467ac80> 
File:  Dynamically generated function. No source code available. 
Definition: f() 
Docstring: <no docstring> 
+0

감사합니다. 기능 템플릿을 발견했습니다. – PytLab

2

예를 들어, 즉시 기능이 파일에 정의되지 않은 그러나이 만들어진 :

>>> globals()['f'] = lambda: 3 
>>> 
>>> f 
<function <lambda> at 0x10f337cf8> 
>>> f() 
3 
>>> import inspect 
>>> inspect.getsource(f) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/inspect.py", line 701, in getsource 
    lines, lnum = getsourcelines(object) 
    File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/inspect.py", line 690, in getsourcelines 
    lines, lnum = findsource(object) 
    File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/inspect.py", line 538, in findsource 
    raise IOError('could not get source code') 
IOError: could not get source code 

함수를 작성하지만, 경우에 소스 코드를 검색 할 수없는 여러 가지 방법이 있습니다 (예 : 모듈, 파일 이름, 파일 위치 등) 함수는 동적으로 생성 된 함수로 간주 될 수 있습니다.

globals()['f'] = lambda: 3 

globals() 호출이 글로벌 네임 스페이스에 추가되는 의미는 인터프리터가 실행되는 경우에있어 어디 인 : 호출시

다음 줄은 값 3을 반환 f라는 함수를 만듭니다 .

관련 문제