파 이 썬 컨 텍스트 관리자 Content Manager
Python 의 컨 텍스트 관리자 에서 with 를 사용 하여 파일 을 여 는 것 이 가장 많 습 니 다.그 중에서 with 에 포 함 된 문 구 를 떠 난 후에 파일 을 닫 고 연결 대상 을 닫 는 등 청소 와 유사 한 작업 을 수행 합 니 다.
실천 하 다.
우 리 는 코드 를 실천 할 때 같은 코드 세 션 에서 먼저 파일 을 열 고 직접 파일 을 다른 처리 하 는 것 을 무시 했다.왜냐하면 이것 은 아무런 의미 가 없고 자원 이 점용 되 는 상황 이기 때문이다.
먼저 아래 검 측 코드 를 보십시오.
#!/usr/bin/env python
# _*_ coding: UTF-8 _*_
# MedusaSorcerer Script
import os
class OpenFile:
def __init__(self):
self.file = None
def open(self, path):
self.file = open(path, 'w')
if __name__ == '__main__':
file_path = 'medusa.md'
file = OpenFile()
file.open(file_path)
os.remove(file_path)
코드 에서 저 희 는 파일 대상 을 인 스 턴 스 속성 으로 참조 하 였 습 니 다.그 후에 저 희 는 os 모듈 을 사용 하여 기 록 된 파일 을 삭제 합 니 다.코드 변경 세 션 을 실행 하면 다음 과 같은 내용 이 나타 납 니 다.Traceback (most recent call last):
File "medusa/main.py", line 19, in
os.remove(file_path)
Permission Error:[WinError 32]다른 프로그램 이 이 파일 을 사용 하고 있 습 니 다.프로 세 스 에 접근 할 수 없습니다.:medusa.md'
Process finished with exit code 1
그것 은 삭 제 된 파일 이 자원 방출 을 받 지 못 했 기 때문이다.우 리 는 위의 기초 위 에서 함 수 를 사용 하 는 방식 을 진행한다.
#!/usr/bin/env python
# _*_ coding: UTF-8 _*_
# MedusaSorcerer Script
import os
class OpenFile:
def __init__(self):
self.file = None
def open(self, path):
self.file = open(path, 'w')
def open_file(path):
file = OpenFile()
file.open(path)
if __name__ == '__main__':
file_path = 'medusa.md'
open_file(file_path)
os.remove(file_path)
이 코드 는 성공 적 으로 실 행 될 것 입 니 다.함 수 를 실행 할 때 함수 안의 임시 변 수 는 회수 되 어 방출 되 기 때문에 OpenFile 의 인 스 턴 스 대상 이 방출 되 고 인 스 턴 스 속성 도 존재 하지 않 아 방출 되 기 때문에 실 행 될 것 입 니 다.그럼 우리 의 조작 은 모두 함수 패키지 방식 으로 실행 해 야 합 니까?with 의 등장 으로 이 문 제 를 완벽 하 게 해결 했다.
#!/usr/bin/env python
# _*_ coding: UTF-8 _*_
# MedusaSorcerer Script
import os
if __name__ == '__main__':
file_path = 'medusa.md'
with open(file_path, 'w') as f:
print(f)
os.remove(file_path)
with 문법 에서 뒤에 있 는 파일 을 열 고 되 돌아 오 는 파일 대상 을 f 변수 에 할당 하고 구조 체 에서 f 변수의 내용 을 출력 하 며 구조 체 외 에서 이 파일 을 삭 제 했 습 니 다.medusa\python.exe medusa/main.py
<_io.TextIOWrapper name='medusa.md' mode='w' encoding='cp936'>
Process finished with exit code 0
close()를 사용 하지 않 은 상태 에서 도 파일 을 삭제 할 수 있 습 니 다.이것 이 바로 문맥 관리의 아름다움 입 니 다.
이루어지다
상하 문 관 리 는 사실상 를 실현 하 였 다enter__ 와exit__ 방법:
#!/usr/bin/env python
# _*_ coding: UTF-8 _*_
# MedusaSorcerer Script
class Medusa:
def __init__(self):
print('__init__')
def __enter__(self):
print('__enter__')
def __exit__(self, exc_type, exc_val, exc_tb):
print('__exit__')
if __name__ == '__main__':
medusa = Medusa()
with medusa:
print('with object')
print('finish')
다음은 출력 결과:__init__
__enter__
with object
__exit__
finish
우 리 는 마법 방법 이 어떤 문법 을 결합 한 후에 자동 으로 스케줄 링 이 발생 하 는 것 을 발 견 했 기 때문에 상하 문 관리 에서 자동 스케줄 링 에서 일부 대상 을 닫 았 다.
장점.
상하 문 관 리 를 실현 하면 우리 의 코드 를 간소화 하고 코드 를 더욱 쉽게 읽 을 수 있 으 며 최소한 의 코드 를 사용 하면 모든 작업 을 완성 할 수 있다.
파 이 썬 컨 텍스트 관리자 Content Manager 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 파 이 썬 컨 텍스트 관리자 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.