목차
모듈 가져 오기 및 최상위 코드 실행을 이해하십시오
해결책 : 인쇄 기능의 임시 리디렉션
예방 조치 및 한계
요약
백엔드 개발 파이썬 튜토리얼 Python 모듈을 가져올 때 최상위 코드 실행을 억제하는 전략 : 예제로 인쇄 리디렉션 복용

Python 모듈을 가져올 때 최상위 코드 실행을 억제하는 전략 : 예제로 인쇄 리디렉션 복용

Oct 07, 2025 pm 03:03 PM

Python 모듈을 가져올 때 최상위 코드 실행을 억제하는 전략 : 예제로 인쇄 리디렉션 복용

이 기사는 __name__ == '__main__'의 규칙을 따르지 않는 Python 모듈을 가져올 때 최상위 코드에서 불필요한 부작용을 피하는 방법을 살펴 봅니다. 내장 인쇄 기능을 일시적으로 리디렉션함으로써 가져 오기 프로세스 중에 생성 된 콘솔 출력은 소스 모듈을 수정하지 않고 효과적으로 억제 할 수 있으므로보다 정확한 모듈 기능 호출을 달성 할 수 있습니다.

모듈 가져 오기 및 최상위 코드 실행을 이해하십시오

Python에서 스크립트 파일이 모듈로 가져 오면 최상위 코드 (즉, 기능 또는 클래스 정의 내부에 있지 않음)가 즉시 실행됩니다. 이것은 Python의 모듈 식 설계의 기초이지만, 특히 모듈 디자이너가 __name__ == '__main__':의 일반적인 협약을 따르지 않을 때 예기치 않은 동작으로 이어질 수 있습니다.

file1.py라는 다음 모듈을 고려하십시오.

 # file1.py

def add (a, b) :
    인쇄 (AB)

# 최상위 코드, Add (1, 2)가 모듈 가져 오기에 실행됩니다.

다른 스크립트 My_code.py에서 file1.py에서 추가 함수를 가져오고 사용하는 경우 :

 # my_code.py

파일 가져 오기 1
# 또는 File1 가져 오기 추가

def main () :     
    file1.add (1, 3)

__name__ == '__main__':
    기본()

my_code.py를 실행하면 다음과 같은 출력을 얻을 수 있습니다.

 3
4

여기서 3은 Pile1.py가 가져올 때 발생하는 부작용입니다. 4는 my_code.py에서 기본 함수 호출 파일 1.add (1, 3)의 예상 결과입니다. 일부 시나리오에서는 파일 1.py의 최상위 코드가 가시 출력을 생성하는 것을 원하지 않을 수 있습니다. 특히 파일 1.py 소스 파일을 수정할 수없는 경우.

해결책 : 인쇄 기능의 임시 리디렉션

이 문제를 해결하기 위해 대상 모듈을 가져 오기 전에 내장 인쇄 기능을 일시적으로 교체하여 출력을 생성하지 않도록 Python의 동적 기능을 활용할 수 있습니다. 가져 오기가 완료된 후 인쇄 기능을 원래 상태로 복원하십시오.

핵심 아이디어는 다음과 같습니다.

  1. 원래 Buildins.print 기능을 저장하십시오.
  2. BuildIns.Print를 빈 작업 (NO-OP) 기능으로 교체하십시오.
  3. 대상 모듈을 가져옵니다 (예 : file1.py). 이 기간 동안 File1.py로 인쇄하는 전화는 조용히 처리됩니다.
  4. Buildins.print를 원래 함수로 복원하십시오.

특정 구현 코드는 다음과 같습니다.

 Import Buildins
OS # 가져 오기 핵심 솔루션 # 1과 관련이없는 이전 "Clear Screen"메소드를 표시하려면 원래 인쇄 기능 저장 old_print = buildins.print

# 2. 빈 작업 기능 정의 인쇄를 일시적으로 교체합니다.
def silent_print (*args, ** kwargs) :
    통과하다

# 3. 내장 인쇄 기능을 Silent_print로 바꾸십시오
buildins.print = silent_print

# 4. 대상 모듈 가져 오기# 이시기에 파일에서 (1, 2)를 추가하면 1.py가 실행되지만 Silent_Print import File1에 의해 인쇄 출력이 가로칩니다.

# 5. 내장 인쇄 기능을 원래 함수 BuildIns.print = Old_print로 복원하십시오.

# 이제 file1에서 함수를 정상적으로 사용할 수 있으며 후속 인쇄 동작은 일반적인 def main ()입니다.     
    my_code.py : "에서"Calling File1.add (1, 3) : ") 인쇄 (")
    file1.add (1, 3)

__name__ == '__main__':
    기본()

이 코드를 실행하면 출력이 다음과 같습니다.

 my_code.py에서 호출 파일 1.add (1, 3) :
4

보시다시피, file1.py에서 add (1, 2)에 의해 생성 된 3은 성공적으로 억제되었으며 my_code.py의 예상 출력 4 만 인쇄됩니다.

예방 조치 및 한계

  • 강력하게 타겟팅 : 이 방법은 모듈이 가져올 때 생성 된 인쇄 출력을 구체적으로 목표로합니다. 모듈의 부작용이 다른 작업 인 경우 (예 : 글로벌 변수 수정, 파일 쓰기, 네트워크 요청 시작, sys.exit () 등)이 메소드가 유효하지 않습니다. 보다 복잡한 부작용의 경우 샌드 박스 환경 사용, 프로세스 격리 또는 정적 코드 분석과 같은 고급 전략이 필요할 수 있습니다.
  • 해당 시나리오 : 이 기술은 주로 수정되지 않은 타사 모듈 또는 레거시 코드를 처리하는 데 사용됩니다. 이러한 모듈은 가져올 때 불필요한 콘솔 출력을 생성 할 때.
  • 모범 사례 : 모듈 정의 및 필요한 초기화 만 포함하여 모듈의 최상위 코드는 가능한 한 간소화되어야합니다. 특정 작업을 수행 해야하는 모든 코드는 함수에 캡슐화되고 if __name__ == '__main__': 블록으로 제어해야합니다.
  • OS.System과의 비교 ( 'CLS') : 사용자는 질문에 OS.System ( 'CLS')의 "Clear Screen"메소드를 언급했습니다. 이 방법은 또한 "보이지 않는"효과를 달성 할 수 있지만, 모든 출력을 제거 할뿐만 아니라 성능 오버 헤드 및 호환성 문제를 가져올 수있는 거칠고 플랫폼 의존적 접근 방식입니다. 대조적으로, 임시 리디렉션 인쇄 기능은 Python 프로그래밍 철학과 관련하여보다 정확하고 우아하며 더 많습니다.

요약

Python의 내장 인쇄 기능을 일시적으로 리디렉션하여 불규칙한 모듈을 가져올 때 콘솔 출력을 억제하는 효율적인 방법을 제공합니다. 이 기술은 수정되지 않은 외부 종속성 또는 레거시 코드를 처리 할 때 매우 유용하며 모듈의 동작을보다 정확하게 제어하고 불필요한 부작용을 피할 수 있습니다. 그러나 그 한계를 이해하고 모듈 설계에 대한 모범 사례를 항상 따릅니다 (예 : __name__ == '__main__'를 사용하는 것은 강력하고 유지 관리 가능한 파이썬 애플리케이션을 구축하는 데 열쇠입니다.

위 내용은 Python 모듈을 가져올 때 최상위 코드 실행을 억제하는 전략 : 예제로 인쇄 리디렉션 복용의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Stock Market GPT

Stock Market GPT

더 현명한 결정을 위한 AI 기반 투자 연구

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제

Python에서 요구 사항에서 패키지를 설치하는 방법 Python에서 요구 사항에서 패키지를 설치하는 방법 Sep 18, 2025 am 04:24 AM

종속성 패키지를 설치하려면 pipinstall-rrequirements.txt를 실행하십시오. 충돌을 피하고, 파일 경로가 올바른지 확인하고 PIP가 업데이트되었는지 확인하고 필요한 경우 설치 동작을 조정하기 위해-no-deps 또는 --user와 같은 옵션을 사용하는 것이 좋습니다.

PEFT LORA 어댑터 및 기본 모델의 효율적인 병합 전략 PEFT LORA 어댑터 및 기본 모델의 효율적인 병합 전략 Sep 19, 2025 pm 05:12 PM

이 튜토리얼은 PEFT LORA 어댑터를 기본 모델과 효율적으로 병합하여 완전히 독립적 인 모델을 생성하는 방법을 자세히 설명합니다. 이 기사는 변압기를 직접 사용하는 것이 잘못되었음을 지적합니다. Aumodel은 어댑터를로드하고 가중치를 수동으로 병합하고 PEFT 라이브러리에서 MERGE_AND_UNLOAD 방법을 사용하는 올바른 프로세스를 제공합니다. 또한 튜토리얼은 워드 세그먼트를 다루는 것의 중요성을 강조하고 PEFT 버전 호환성 문제 및 솔루션에 대해 설명합니다.

Pytest로 Python 코드를 테스트하는 방법 Pytest로 Python 코드를 테스트하는 방법 Sep 20, 2025 am 12:35 AM

Python은 Python의 간단하고 강력한 테스트 도구입니다. 설치 후 테스트 파일은 이름 지정 규칙에 따라 자동으로 발견됩니다. 어설 션 테스트를 위해 test_로 시작하여 기능을 작성하고 @pytest.fixture를 사용하여 재사용 가능한 테스트 데이터를 생성하고 pytest.raises를 통해 예외를 확인하고 지정된 테스트 실행 및 여러 명령 줄 옵션을 지원하며 테스트 효율성을 향상시킵니다.

파이썬에서 명령 줄 인수를 처리하는 방법 파이썬에서 명령 줄 인수를 처리하는 방법 Sep 21, 2025 am 03:49 AM

theargparsemoduleisecomedendedway handlecommand-lineargumentsinpython, robustparsing, typevalidation, helpmessages, anderrorhandling; audys.argvforsimplecaseSrequiringMinimalSetup을 제공합니다.

파이썬 및 고정밀 계산 체계의 부동 소수점 번호 정확도 문제 파이썬 및 고정밀 계산 체계의 부동 소수점 번호 정확도 문제 Sep 19, 2025 pm 05:57 PM

이 기사는 Python과 Numpy의 부동 소수점 수의 부동 소수 계산 정확도의 일반적인 문제를 탐색하는 것을 목표로하며, 근본 원인은 표준 64 비트 플로팅 포인트 수의 표현 제한에 있다고 설명합니다. 더 높은 정확도가 필요한 컴퓨팅 시나리오의 경우,이 기사는 독자가 복잡한 정확도 요구를 해결하기위한 올바른 도구를 선택할 수 있도록 MPMATH, Sympy 및 GMPY와 같은 고정밀 수학 라이브러리의 사용 방법, 기능 및 해당 시나리오를 소개하고 비교합니다.

Python에서 PDF 파일을 사용하는 방법 Python에서 PDF 파일을 사용하는 방법 Sep 20, 2025 am 04:44 AM

PYPDF2, PDFPLAMBER 및 FPDF는 Python이 PDF를 처리하기위한 핵심 라이브러리입니다. PYPDF2를 사용하여 PDFREADER를 통해 페이지를 읽고 extract_text ()를 호출하려면 텍스트 추출, 병합, 분할 및 암호화를 수행하십시오. PDFPlumber는 레이아웃 텍스트 추출 및 테이블 인식을 유지하는 데 더 적합하며 TABLE 데이터를 정확하게 캡처하기 위해 Extract_Tables ()를 지원합니다. FPDF (권장 FPDF2)는 PDF를 생성하는 데 사용되며 문서는 add_page (), set_font () 및 cell ()을 통해 구축 및 출력됩니다. pdfs를 병합 할 때 pdfwriter의 append () 메소드는 여러 파일을 통합 할 수 있습니다.

Python에서 @ContextManager 데코레이터를 사용하여 컨텍스트 관리자를 어떻게 만들 수 있습니까? Python에서 @ContextManager 데코레이터를 사용하여 컨텍스트 관리자를 어떻게 만들 수 있습니까? Sep 20, 2025 am 04:50 AM

import@contextManagerFromContextLibandDefineAgeneratorFunctionThatYieldSActlyOnce, whereCodeBeforeYieldActSasEnterAndErandCodeftertyield (바람직하게는) ACTSAS__EXIT __

파이썬은 현재 시간 예제를 얻습니다 파이썬은 현재 시간 예제를 얻습니다 Sep 15, 2025 am 02:32 AM

현재 시간을 얻는 것은 DateTime 모듈을 통해 Python에서 구현할 수 있습니다. 1. DateTime.now ()를 사용하여 로컬 현재 시간을 얻으십시오. utcnow () 및 일일 작업은 Datetime.now ()를 형식의 문자열과 결합하여 요구를 충족시킬 수 있습니다.

See all articles