์ฌํด ์๋ฐ๊ธฐ์ ์ด์ด ์ข๊ฒ๋ IT ๋๊ธฐ์ ์ ๋ฉด์ ์ ๋ณผ ๊ธฐํ๊ฐ ์์๋ค.
๊ทธ๋ ๋ฐ์๋ ๋ฉด์ ์ง๋ฌธ ์ค์ "python์ with ๋ฌธ๋ฒ ์ฌ์ฉํด๋ดค์ด์?"๊ฐ ์์๋ค.
์ฌ์ค ํ์ด์ฌ์ ์ฝ๋ฉํ ์คํธ ์ค๋น๋ฅผ ์ํด ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๋ฅผ ํ ๋๋ Django๋ก API๋ฅผ ๊ฐ๋ฐํ ๋, ์ธ๊ณต์ง๋ฅ ๋ชจ๋ธ์ ๊ฐ๋ฐํ ๋ ๋ฑ ํ์์ ๋ฐ๋ผ
๊ทธ๋ ๊ทธ๋ ํ์ํ ๋ฌธ๋ฒ์ ์ฐพ์ผ๋ฉฐ ์ฌ์ฉํ์๊ณ , ํ์ด์ฌ์ด๋ผ๋ ์ธ์ด ์์ฒด์ ๋ํ ํ์ต์ ํ์ง ์์๊ธฐ ๋๋ฌธ์ with ๋ฌธ๋ฒ์ ๋ด๊ฐ ์ฌ์ฉํด๋ณผ ๊ธฐํ๊ฐ ์์๋ ์ฒ์ ๋ฃ๋ ๋ฌธ๋ฒ์ด๋ผ ๋นํฉํ๋ ๊ธฐ์ต์ด ์๋ค.
๋น์ฐํ "์ฌ์ฉํด๋ณธ ์ ์์ต๋๋ค. ์ ๋ชจ๋ฆ ๋๋ค.."๋ผ๊ณ ๋ต๋ณํ ์ ๋ฐ์ ์์๋คใ ใ
๊ทธ๋์ ์์๋ณด๊ธฐ๋ก ํ๋ค!
with
์์์ ํ๋ํ๊ณ , ์ฌ์ฉํ๊ณ , ๋ฐ๋ฉํ ๋ ์ ์ฉํ๊ฒ ์ฐ์ด๋ ๊ตฌ๋ฌธ์ด๋ค.
์๋ฅผ ๋ค์ด, ํ์ผ์ ์ด๊ณ (ํ๋), ํ์ผ์ ์ฝ๊ณ (์ฌ์ฉ), ํ์ผ์ ๋ซ๋(๋ฐ๋ฉ) ๊ฒฝ์ฐ๊ฐ ์๋ค.
์ ์์๋ฅผ with ๊ตฌ๋ฌธ์ ์ฌ์ฉํ์ง ์๋ ๊ฒฝ์ฐ์ with ๊ตฌ๋ฌธ์ ์ฌ์ฉํ ๊ฒฝ์ฐ๋ฅผ ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
with ๊ตฌ๋ฌธ์ ์ฌ์ฉํ์ง ์๋ ๊ฒฝ์ฐ
# ์์์ ํ๋
f = open("my_text_file.txt", "r")
# ์์์ ์ฌ์ฉ
text = f.read()
print(text)
# ์์์ ๋ฐ๋ฉ
f.close()
with ๊ตฌ๋ฌธ์ ์ฌ์ฉํ ๊ฒฝ์ฐ
with open("my_text_file.txt", "r") as f:
text = f.read()
print(text)
์ด๋ ๊ฒ with ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ฉด, open()์ ํตํด์ ์ด์ด๋ ํ์ผ ์คํธ๋ฆผ์ ํตํด์ read() ํจ์๋ก ํ์ผ์ ์ฝ๊ณ , ์ถ๋ ฅํ๋ with ๊ตฌ๋ฌธ์ด ๋๋๋ฉด close()๋ฅผ ๋ฐ๋ก ํด์ฃผ์ง ์์๋ ์์์ ํ์ผ ์คํธ๋ฆผ์ ๋ซ์์ค๋ค.
context manager
์ปจํ ์คํธ ๋งค๋์ ๋ with ๊ตฌ๋ฌธ์ ์ฐ์ผ ์ ์๋ ๊ฐ์ฒด์ ํ์ ์ด๋ฉฐ, ์ปจํ ์คํธ ๋งค๋์ ๋ ๋ค์ ๋ ๊ฐ์ ๋ฉ์๋๋ฅผ ์ง์ํ๋ค.
- __enter__(self) : with ๋ฌธ์ ์ง์ ํ๋ ์์ ์ ์๋์ผ๋ก ํธ์ถ
- __exit__(self, type, value, traceback) : with ๋ฌธ์ด ๋๋๊ธฐ ์ง์ ์ ์๋์ผ๋ก ํธ์ถ
__exit__() ๋ฉ์๋๊ฐ ๋ฐ๋ ์ธ ๊ฐ์ ์ธ์๋ ํด๋น ๊ฐ์ฒด์ ์ฐ๊ด๋ ์ปจํ ์คํธ ๋ด์์ ์์ธ๊ฐ ๋ฐ์๋์์๋, ํด๋น ์์ธ์ ๊ดํ ์ ๋ณด์ด๋ค. ์์ธ์์ด with ๊ตฌ๋ฌธ์ด ์ข ๋ฃ๋์๋ค๋ฉด ์ด ์ธ ์ธ์๋ ๋ชจ๋ None์ด ๋ ๊ฒ์ด๋ค.
์ด๋ฌํ ์ปจํ ์คํธ ๋งค๋์ ์ with ๊ตฌ๋ฌธ์ ์ด์ฉํด์ ๊ฐ์ฒด์ ๋ผ์ดํ ์ฌ์ดํด์ ์ค๊ณํ ์ ์๋ค.
class PrintNumber:
# ์ฌ์ฉํ ์์ ์์ฑ ๋ฐ ํ๋.
def __enter__(self):
print("start.")
return self
# ์์ ์ฌ์ฉ.
def print_number(self, num):
print(f"Number: {num}")
# ์์ ๋ฐ๋ฉ ๋ฐ ํ์ฒ๋ฆฌ.
def __exit__(self, exc_type, exc_val, exc_tb):
print("end.")
with PrintNumber() as pn:
pn.print_number(42)
pn.print_number(10)
# start.
# 42
# 10
# end.
์ ์์์ ๊ฐ์ด with๊ตฌ๋ฌธ์ด ์์๋ ๋ __enter__()๋ฅผ ๊ฑฐ์น ํ์, ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ print_number()๋ฅผ ๊ฑฐ์น๊ณ , with ๊ตฌ๋ฌธ์ด ๋๋๊ธฐ ์ง์ ์ __exit__()๋ฅผ ์คํํ๊ณ with ๊ตฌ๋ฌธ์ด ์ข ๋ฃ๋๋ค.
'๊ณต๋ถํ๋ค ๋ณด๋ ๊ถ๊ธํด์ง ๊ฒ๋ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[python] pass ๋ฌธ๋ฒ (0) | 2023.08.20 |
---|---|
[python] itertools์์ด ์์ด, ์กฐํฉ ๊ตฌํํ๊ธฐ (0) | 2023.08.20 |