이미지: Johnstocker Freepik
얼마전에 튜토리얼을 쓴 적이 있는데 효율적인 Python 코드 작성. 여기에서는 리소스를 효율적으로 관리하기 위해 컨텍스트 관리자와 with 문을 사용하는 방법에 대해 이야기했습니다.
예외가 발생하더라도 실행이 with 블록을 종료할 때 파일이 자동으로 닫히는 방법을 보여주기 위해 간단한 파일 처리 예제를 사용했습니다.
파일 처리는 좋은 첫 번째 예이지만 금방 지루해질 수 있습니다. 이것이 바로 이 튜토리얼에서 파일 처리를 넘어서 컨텍스트 관리자의 다른 흥미로운 사용법을 살펴보고 싶은 이유입니다. 우리는 데이터베이스 연결 처리, 하위 프로세스 관리 및 고정밀 부동 소수점 연산에 중점을 둘 것입니다.
Python의 컨텍스트 관리자를 사용하면 리소스 작업 시 더 깔끔한 코드를 작성할 수 있습니다. 다음을 통해 리소스를 설정하고 해제하는 간결한 구문을 제공합니다.
- An 입력 실행이 컨텍스트에 들어갈 때 호출되는 논리
- An 출구 실행이 컨텍스트를 종료할 때 호출되는 논리
이에 대한 가장 간단한 예는 파일 처리입니다. 여기서 우리는 open()
기능의 with
파일 핸들러를 가져오는 명령문:
with open('filename.txt', 'w') as file:
file.write('Something random')
이는 코드 블록 내에서 사용되는(파일에 쓰는) 리소스(파일 객체)를 획득합니다. 실행이 컨텍스트를 종료하면 파일이 닫힙니다. 따라서 리소스 누출이 없습니다.
다음과 같이 일반 버전을 작성할 수 있습니다.
with some_context() as ctx:
# do something useful on the resource!
# resource cleanup is automatic
이제 구체적인 사례를 살펴보겠습니다.
Python 애플리케이션을 구축할 때 데이터베이스에 연결하고 데이터베이스에 포함된 테이블을 쿼리하는 것은 매우 일반적입니다. 이를 수행하는 워크플로는 다음과 같습니다.
- 데이터베이스 작업을 위해 데이터베이스 커넥터를 설치합니다(예: Postgres용 psycopg2 및 MySQL 데이터베이스용 mysql-connector-python).
- 구성 파일을 구문 분석하여 연결 매개변수를 검색합니다.
- 사용
connect()
데이터베이스에 대한 연결을 설정하는 기능입니다.
DB에 연결 | 작성자별 이미지
데이터베이스에 연결한 후에는 데이터베이스를 생성하여 데이터베이스를 쿼리할 수 있습니다. 실행 및 가져오기 커서 메서드를 사용하여 쿼리를 실행하고 쿼리 결과를 가져옵니다.
DB 쿼리 | 작성자별 이미지
이를 통해 데이터베이스 연결 및 데이터베이스 커서와 같은 리소스를 생성합니다. 이제 연결 및 커서 개체를 컨텍스트 관리자로 사용하는 방법을 알아보기 위해 간단한 일반 예제를 코딩해 보겠습니다.
Python에서 TOML 파일 구문 분석
데이터베이스에 연결하는 데 필요한 정보가 포함된 샘플 TOML 파일(예: db_config.toml)을 고려해 보세요.
# db_config.toml
[database]
host = "localhost"
port = 5432
database_name = "your_database_name"
user = "your_username"
password = "your_password"
주의 사항: 사용하려면 Python 3.11 이상의 버전이 필요합니다. tomllib.
파이썬에는 내장된 tomllib TOML 파일을 구문 분석할 수 있는 모듈(Python 3.11에 도입됨)입니다. 따라서 db_config.toml 파일을 열고 다음과 같이 내용을 구문 분석할 수 있습니다.
import tomllib
with open('db_config.toml','rb') as file:
credentials = tomllib.load(file)['database']
db_config.toml 파일의 'database' 섹션을 탭합니다. 그만큼 load()
함수는 Python 사전을 반환합니다. 내용을 인쇄하여 확인할 수 있습니다. credentials
:
print(credentials)
Output >>>
{'host': 'localhost', 'port': 5432, 'database_name': 'your_database_name', 'user': 'your_username', 'password': 'your_password'}
데이터베이스에 연결
Postgres 데이터베이스에 연결하고 싶다고 가정해 보겠습니다. 당신은 설치할 수 있습니다 psycopg2 커넥터 핍 사용:
pip install psycopg2
다음과 같이 with 문에서 연결과 커서 개체를 모두 사용할 수 있습니다.
import psycopg2
# Connect to the database
with psycopg2.connect(**credentials) as conn:
# Inside this context, the connection is open and managed
with conn.cursor() as cur:
# Inside this context, the cursor is open and managed
cur.execute('SELECT * FROM my_table')
result = cur.fetchall()
print(result)
이 코드에서 :
- 우리는을 사용하여
with
데이터베이스 연결을 관리하기 위한 컨텍스트를 생성하는 명령문입니다. - 이 컨텍스트 내에서 데이터베이스 커서를 관리하기 위한 또 다른 컨텍스트를 만듭니다. 이 내부 컨텍스트를 종료하면 커서가 자동으로 닫힙니다.
- 외부 컨텍스트를 종료할 때 연결도 닫히기 때문에 이 구성은 연결과 커서가 모두 적절하게 관리되도록 보장하여 리소스 누출 가능성을 줄입니다.
SQLite 및 MySQL 데이터베이스로 작업할 때도 비슷한 구성을 사용할 수 있습니다.
Python의 하위 프로세스 모듈은 Python 스크립트 내에서 외부 명령을 실행하는 기능을 제공합니다. 그만큼 subprocess.Popen()
생성자는 새로운 하위 프로세스를 생성합니다. 다음에서 사용할 수 있습니다. with
다음과 같은 진술:
import subprocess
# Run an external command and capture its output
with subprocess.Popen(['ls', '-l'], stdout=subprocess.PIPE, text=True) as process:
output, _ = process.communicate()
print(output)
여기서는 Bash 명령을 실행합니다. ls -l
현재 디렉토리의 파일을 길게 나열하는 명령:
Output >>>
total 4
-rw-rw-r-- 1 balapriya balapriya 0 Jan 5 18:31 db_info.toml
-rw-rw-r-- 1 balapriya balapriya 267 Jan 5 18:32 main.py
실행이 컨텍스트를 종료하면 하위 프로세스와 관련된 리소스가 해제됩니다. with
성명서.
Python에 내장된 부동 소수점 데이터 유형은 고정밀 부동 소수점 연산에 적합하지 않습니다. 그러나 금융 데이터, 센서 판독값 등을 다룰 때는 높은 정밀도가 필요합니다. 이러한 애플리케이션의 경우 다음을 사용할 수 있습니다. 소수 대신 모듈.
XNUMXD덴탈의 localcontext()
기능 컨텍스트 관리자를 반환합니다.. 그래서 당신은 localcontext()
기능의 with
명령문을 작성하고 다음과 같이 현재 컨텍스트의 정밀도를 설정하십시오.
from decimal import Decimal, localcontext
with localcontext() as cur_context:
cur_context.prec = 40
a = Decimal(2)
b = Decimal(3)
print(a/b)
출력은 다음과 같습니다.
Output >>>
0.6666666666666666666666666666666666666667
여기서 정밀도는 소수점 이하 40자리로 설정되어 있습니다. with
차단하다. 실행이 현재 컨텍스트를 종료하면 정밀도가 기본 정밀도(소수점 28자리)로 복원됩니다.
이 튜토리얼에서는 컨텍스트 관리자를 사용하여 데이터베이스 연결을 처리하고 고정밀 부동 소수점 연산에서 하위 프로세스 및 컨텍스트를 관리하는 방법을 배웠습니다.
다음 튜토리얼에서는 Python에서 사용자 정의 컨텍스트 관리자를 만드는 방법을 살펴보겠습니다. 그때까지 즐거운 코딩하세요!
발라 프리야 C 인도 출신의 개발자이자 테크니컬 라이터입니다. 그녀는 수학, 프로그래밍, 데이터 과학 및 콘텐츠 제작의 교차점에서 일하는 것을 좋아합니다. 그녀의 관심 분야와 전문 분야는 DevOps, 데이터 과학 및 자연어 처리입니다. 그녀는 읽기, 쓰기, 코딩, 커피를 즐깁니다! 현재 그녀는 자습서, 사용 방법 가이드, 의견 등을 작성하여 개발자 커뮤니티와 지식을 배우고 공유하는 작업을 하고 있습니다.
- SEO 기반 콘텐츠 및 PR 배포. 오늘 증폭하십시오.
- PlatoData.Network 수직 생성 Ai. 자신에게 권한을 부여하십시오. 여기에서 액세스하십시오.
- PlatoAiStream. 웹3 인텔리전스. 지식 증폭. 여기에서 액세스하십시오.
- 플라톤ESG. 탄소, 클린테크, 에너지, 환경, 태양광, 폐기물 관리. 여기에서 액세스하십시오.
- PlatoHealth. 생명 공학 및 임상 시험 인텔리전스. 여기에서 액세스하십시오.
- 출처: https://www.kdnuggets.com/3-interesting-uses-of-python-context-managers?utm_source=rss&utm_medium=rss&utm_campaign=3-interesting-uses-of-pythons-context-managers
- :있다
- :이다
- :아니
- $UP
- 1
- 11
- 12
- 28
- 31
- 32
- 40
- 7
- 8
- 9
- a
- 소개
- 인수
- ...전에
- 수
- 또한
- an
- 및
- 다른
- 어플리케이션
- 있군요
- 지역
- AS
- 관련
- At
- 저작
- Automatic
- 자동적으로
- b
- 세게 때리다
- BE
- 블록
- 지루한
- 두
- 건물
- 내장
- 비자 면제 프로그램에 해당하는 국가의 시민권을 가지고 있지만
- by
- 라는
- CAN
- 포착
- 기회
- 청소기
- 닫은
- 암호
- 코딩
- 공통의
- 커뮤니티
- 간결한
- 연결하기
- 연결
- 연결
- 연결
- 구축
- 포함하는
- 함유량
- 콘텐츠 제작
- 내용
- 문맥
- 문맥
- 만들
- 생성
- 창조
- 신임장
- Current
- 현재
- 관습
- 데이터
- 데이터 과학
- 데이터베이스
- 데이터베이스
- 태만
- 개발자
- 개발자
- do
- 하기
- 아래 (down)
- 효율적인
- 효율적으로
- 보장
- 들어갑니다
- 세우다
- 예
- 예
- 예외
- 실행
- 종료
- 이탈
- 전문적 지식
- 외부
- 입양 부모로서의 귀하의 적합성을 결정하기 위해 미국 이민국에
- 파일
- 금융
- 재무 데이터
- 먼저,
- 흙손
- 떠 있는
- 초점
- 수행원
- 럭셔리
- 에
- 기능
- 기능
- 얻을
- Go
- 좋은
- 안내서
- 처리
- 행복한
- 그녀의
- 여기에서 지금 확인해 보세요.
- 높은
- 주인
- 방법
- HTML
- HTTPS
- i
- if
- 영상
- import
- in
- 포함
- 인도
- 정보
- 안의
- 내부
- 설치
- 를 받아야 하는 미국 여행자
- 관심
- 흥미있는
- 교차
- 으로
- 소개
- IT
- 그
- 월
- JPG
- 너 겟츠
- 지식
- 언어
- 후에
- 누수
- 배운
- 배우기
- 수
- 처럼
- 좋아하는
- 명부
- 논리
- 긴
- 보기
- 같이
- 본관
- 관리
- 관리
- 관리자
- 관리
- math
- 방법
- 모듈
- 배우기
- MySQL의
- 자연의
- 자연어
- 자연 언어 처리
- 필요
- 신제품
- 다음 것
- 아니
- 지금
- 사물
- of
- on
- 일단
- 만
- 열 수
- 의견
- or
- 기타
- 아웃
- 출력
- 위에
- 매개 변수
- 비밀번호
- 개
- 파이프
- 장소
- 플라톤
- 플라톤 데이터 인텔리전스
- 플라토데이터
- 포인트 적립
- Precision
- 인쇄
- 진행
- 방법
- 처리
- 프로그램 작성
- 정확히
- 제공
- 제공
- Python
- 쿼리
- 빨리
- 아주
- 닥치는대로의
- RE
- 읽기
- 필수
- 의지
- 제품 자료
- 복원
- 결과
- 결과
- 반품
- 달리기
- s
- 라고
- 과학
- 스크립트
- 섹션
- 참조
- 고르다
- 감지기
- 세트
- 공유
- 그녀
- 표시
- 표시
- 비슷한
- 단순, 간단, 편리
- So
- 무언가
- 구체적인
- 성명서
- 문
- 이러한
- 적당한
- 구문
- 가볍게 두드리다
- 테크니컬
- 그
- XNUMXD덴탈의
- 그때
- 그곳에.
- 그들
- 이
- 을 통하여
- 에
- 너무
- 금액
- 지도 시간
- 자습서
- 유형
- 까지
- 사용
- 익숙한
- 유용
- 사용자
- 사용
- 사용
- 확인
- 버전
- W
- 필요
- we
- 언제
- 어느
- 동안
- why
- 의지
- 과
- 이내
- 작업
- 워크플로우
- 일하는
- 쓰다
- 작가
- 쓰기
- 쓴
- 당신
- 제퍼 넷