수색…


소개

__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__)

즉, 모듈의 완전한 이름이 로그에 표시되어 메시지가 어디에서 왔는지 쉽게 알 수 있습니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow