이 글은 주로 Python에서의 with와 contextlib의 사용법을 소개합니다. with와 contextlib의 기능, 사용 방법, 관련 주의사항을 예제 형식으로 자세히 분석합니다. 도움이 필요한 친구들은 참고할 수 있습니다.
본 글의 예제 Python에서 with 및 contextlib의 사용법을 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 세부 사항은 다음과 같습니다.
일반적인 코딩 과정에서 자주 사용되는 with 시나리오는 파일 처리를 위해 파일을 연 다음 암시적으로 파일 핸들 닫기를 실행하는 것입니다. 이 클래스는 모두 with를 지원합니다.
with file('test.py','r') as f : print f.readline()
with의 역할은 with를 적용하는 try...finally...와 유사합니다. 문에서 클래스는 두 개의 내장 함수 __enter__ 및 __exit__를 제공해야 합니다. 전자는 메인 코드가 실행되기 전에 실행되고, 후자는 메인 코드가 실행된 후에 실행됩니다. as 뒤의 변수는 __enter__ 함수에 반환됩니다. 다음 코드 조각과 주석을 통해 __enter__ 및 __exit__의 사용법을 명확하게 이해할 수 있습니다.
#!encoding:utf-8 class echo : def output(self) : print 'hello world' def __enter__(self): print 'enter' return self #返回自身实例,当然也可以返回任何希望返回的东西 def __exit__(self, exception_type, exception_value, exception_traceback): #若发生异常,会在这里捕捉到,可以进行异常处理 print 'exit' #如果改__exit__可以处理改异常则通过返回True告知该异常不必传播,否则返回False if exception_type == ValueError : return True else: return False with echo() as e: e.output() print 'do something inside' print '-----------' with echo() as e: raise ValueError('value error') print '-----------' with echo() as e: raise Exception('can not detect')
실행 결과:
contextlib는 with 문을 강화하고 컨텍스트 메커니즘을 제공하는 모듈입니다. Generator를 통해 구현됩니다. 클래스를 정의하고 __enter__ 및 __exit__를 작성하여 컨텍스트를 관리하는 것은 어렵지 않지만 지루합니다. contextlib의 contextmanager는 기능 수준 컨텍스트 관리 메커니즘을 제공하는 데코레이터 역할을 합니다. 일반적으로 사용되는 프레임워크는 다음과 같습니다.
from contextlib import contextmanager @contextmanager def make_context() : print 'enter' try : yield {} except RuntimeError, err : print 'error' , err finally : print 'exit' with make_context() as value : print value
contextlib에는 두 가지 중요한 사항이 있습니다. 하나는 중첩되고 다른 하나는 닫히는 것입니다. 전자는 중첩된 컨텍스트를 만드는 데 사용되고 후자는 정의된 닫기를 실행하는 데 사용됩니다. 기능. 그러나 중첩은 더 이상 사용되지 않습니다. 왜냐하면 with는 이미 여러 컨텍스트를 통해 직접 중첩될 수 있기 때문입니다. 예는 다음과 같습니다.
from contextlib import contextmanager from contextlib import nested from contextlib import closing @contextmanager def make_context(name) : print 'enter', name yield name print 'exit', name with nested(make_context('A'), make_context('B')) as (a, b) : print a print b with make_context('A') as a, make_context('B') as b : print a print b class Door(object) : def open(self) : print 'Door is opened' def close(self) : print 'Door is closed' with closing(Door()) as door : door.open()
실행 결과:
요약: Python에는 일반적으로 C++ 또는 Java의 일부 프로그래밍 습관에 익숙하기 때문에 이러한 좋은 기능을 종종 무시합니다. 기구. 그러므로 우리는 우리가 작성하는 Python 프로그램을 Python과 더 유사하게 만들기 위해 이러한 Python 기능을 사용하는 방법을 배워야 합니다.
위 내용은 Python 기본 튜토리얼에서 with 및 contextlib의 사용 예에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!