python with statement 진급 이해
인터넷 에서 글 한 편 을 보 았 다.http://effbot.org/zone/python-with-statement.htmwith 를 소개 하 는 것 으로 예 를 참고 하여 이 해 했 습 니 다.
만약 에 이런 코드 세그먼트 가 자주 있다 면 몇 가지 방법 으로 개선 할 수 있 습 니 다.
코드 세그먼트:
set thing up
try:
do something
except :
handle exception
finally:
tear thing down
사례 1:
지금 이 기능 을 실현 하려 면 파일 을 열 고 파일 에서 데 이 터 를 읽 은 다음 터미널 로 인쇄 한 다음 파일 을 닫 는 것 입 니 다.
그러면 논리 적 으로 '터미널 로 인쇄' 를 데이터 처리 부분 으로 추출 할 수 있 고 함수 로 독립 할 수 있 을 것 이다.다른 파일 을 열 고 닫 는 것 과 같은 것 은 함께 해 야 합 니 다.
파일 이름: fortest.txt
방법 1:
함수 로 공공 부분 을 추출 하 다.
#!/usr/bin/env python
from __future__ import with_statement
filename = 'for_test.txt'
def output(content):
print content
#functio solution
def controlled_execution(func):
#prepare thing
f = None
try:
#set thing up
f = open(filename, 'r')
content = f.read()
if not callable(func):
return
#deal with thing
func(content)
except IOError, e:
print 'Error %s' % str(e)
finally:
if f:
#tear thing down
f.close()
def test():
controlled_execution(output)
test()
방법 2:
yield 로 하나만 생 성 하 는 generator 를 실현 합 니 다.for - in 을 통 해 순환 합 니 다.
코드 세 션 은 다음 과 같 습 니 다:
#yield solution
def controlled_execution():
f = None
try:
f = open(filename, 'r')
thing = f.read()
#for thing in f:
yield thing
except IOError,e:
print 'Error %s' % str(e)
finally:
if f:
f.close()
def test2():
for content in controlled_execution():
output(content)
방법 3:
클래스 방식 에 with 실현.
코드 세 션 은 다음 과 같 습 니 다:
#class solution
class controlled_execution(object):
def __init__(self):
self.f = None
def __enter__(self):
try:
f = open(filename, 'r')
content = f.read()
return content
except IOError ,e:
print 'Error %s' % str(e)
#return None
def __exit__(self, type, value, traceback):
if self.f:
print 'type:%s, value:%s, traceback:%s' % \
(str(type), str(value), str(traceback))
self.f.close()
def test3():
with controlled_execution() as thing:
if thing:
output(thing)
방법 4:
with 로 실현 하 다.exception handle 기능 은 없습니다.
def test4():
with open(filename, 'r') as f:
output(f.read())
print f.read()
마지막 print 는 f 가 닫 혔 는 지 테스트 하 는 데 사 용 됩 니 다.
마지막 으로 요약 하면 이 글 을 쓰 는 목적 은 주로 한 마디 의 자극 을 받 은 것 이다. "언어의 좋 은 특성 을 사용 하고 나 쁜 특성 을 사용 하지 마 세 요!"python 은 정말 우아 하고 좋 은 특성 이 많 습 니 다. 길이 멀 고 멀 어서 저 는 위아래 로 찾 아 보 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.