개선 전
f = open("my_config.ini")
for line in f:
line = line.strip()
if line.startswith('#'):
# A comment line, skip it
continue
if not line:
# A blank line, skip it
continue
do_something(line)
개선 후
f = open("my_config.ini")
def interesting_lines(f):
for line in f:
line = line.strip()
if line.startswith('#'):
continue
if not line:
continue
yield line
with open("my_config.ini") as f:
for line in interesting_lines(f):
do_something(line)
설명
- 개선전 코드는 한블럭에서 두가지 동작을 한다. (데이터 필터링 + do_something)
- 개선후 코드에서는
- 위의 두가지 동작을 분리한다.
- yield 로 lazy 하게 동작하도록 한다.
- python duck type 덕분에 파라미터로 꼭 파일이 아니라 string 을 넘겨 interesting_lines() 를 테스트 해 볼 수 있다.
참고: https://youtu.be/EnSu9hHGq5o?si=iYPFtfwnNl3JVc33