본문 바로가기

카테고리 없음

python lambda 스코프 탐구

Q. `f = lambda main : globals().__setitem__('main', (main()if(__name__=="__main__")else main))`인 모듈 리소스를 로드했을때 __name__은 실행스코프에, globals()는 모듈 스코프에서 작동했다.
globals는 builtin스코프에 존재함으로, globals를 실행했를때 동적으로 해당 모듈의 global스코프를 가져오는것이 아닐까?
A. shell에서 `from dis import dis as _d;print(_d(f))`로 테스트해본 결과를 보자.

# 1.1 결과.

  1           0 RESUME                   0
              2 LOAD_GLOBAL              1 (NULL + globals)
             12 CALL                     0
             20 LOAD_ATTR                3 (NULL|self + __setitem__)
             40 LOAD_CONST               1 ('main')
             42 LOAD_GLOBAL              4 (__name__)
             52 LOAD_CONST               2 ('__main__')
             54 COMPARE_OP              40 (==)
             58 POP_JUMP_IF_FALSE       11 (to 82)
             60 PUSH_NULL
             62 LOAD_FAST                0 (main)
             64 CALL                     0
             72 CALL                     2
             80 RETURN_VALUE
        >>   82 LOAD_FAST                0 (main)
             84 CALL                     2
             92 RETURN_VALUE
None

잠시만