Python Language
__name__ 특수 변수
수색…
소개
__name__
특수 변수는 파일을 모듈로 가져 왔는지 여부를 확인하고 __name__
속성을 사용하여 함수, 클래스, 모듈 객체를 식별하는 데 사용됩니다.
비고
Python 특수 변수 __name__
은 포함 모듈의 이름으로 설정됩니다. 최상위 레벨 (예 : 대화식 인터프리터 또는 기본 파일)에서 '__main__'
설정됩니다. 모듈을 임포트하지 않고 직접 실행중인 경우 명령문 블록을 실행하는 데 사용할 수 있습니다.
관련된 특수 속성 인 obj.__name__
은 클래스, 가져온 모듈 및 함수 (메소드 포함) 에서 발견되며 정의 될 때 객체의 이름을 제공합니다.
__name__ == '__main__'
특수 변수 __name__
은 사용자가 설정하지 않습니다. 이것은 주로 모듈이 자체적으로 실행되는지 또는 import
가 수행 되었기 때문에 실행되는지 여부를 확인하는 데 사용됩니다. 모듈을 가져올 때 코드의 특정 부분을 실행하지 않으려면 if __name__ == '__main__'
확인하십시오.
module_1.py를 한 줄만 사용하십시오.
import module2.py
그리고 module2.py에 따라 어떻게되는지 봅시다.
상황 1
module2.py
print('hello')
module1.py 를 실행하면 hello
가 인쇄됩니다.
module2.py 를 실행하면 hello
가 인쇄됩니다.
상황 2
module2.py
if __name__ == '__main__':
print('hello')
module1.py 를 실행하면 아무 것도 인쇄되지 않습니다.
module2.py 를 실행하면 hello
가 인쇄됩니다.
function_class_or_module .__ name__
함수, 클래스 또는 모듈의 특수 속성 __name__
은 이름을 포함하는 문자열입니다.
import os
class C:
pass
def f(x):
x += 2
return x
print(f)
# <function f at 0x029976B0>
print(f.__name__)
# f
print(C)
# <class '__main__.C'>
print(C.__name__)
# C
print(os)
# <module 'os' from '/spam/eggs/'>
print(os.__name__)
# os
그러나 __name__
속성은 클래스, 메소드 또는 함수를 참조하는 변수의 이름이 아니라 정의시 정의 된 이름입니다.
def f():
pass
print(f.__name__)
# f - as expected
g = f
print(g.__name__)
# f - even though the variable is named g, the function is still named f
이것은 디버깅을 위해 사용할 수 있습니다.
def enter_exit_info(func):
def wrapper(*arg, **kw):
print '-- entering', func.__name__
res = func(*arg, **kw)
print '-- exiting', func.__name__
return res
return wrapper
@enter_exit_info
def f(x):
print 'In:', x
res = x + 2
print 'Out:', res
return res
a = f(2)
# Outputs:
# -- entering f
# In: 2
# Out: 4
# -- exiting f
로깅에 사용
기본 logging
기능을 구성 할 때 일반적인 패턴은 현재 모듈의 __name__
을 사용하여 로거를 만드는 것입니다.
logger = logging.getLogger(__name__)
즉, 모듈의 완전한 이름이 로그에 표시되어 메시지가 어디에서 왔는지 쉽게 알 수 있습니다.