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
잠시만