Effective Python
-- It's for Koreans. For non-koreans, please see other posts.
-
ใํ์ด์ฌ ์ฝ๋ฉ์ ๊ธฐ์ ใ์ 59์ฅ์ ๋ด์ฉ์ ํ ์ฅ์ฉ ์ ๋ฆฌ.
-
์ฑ ์ ๋์ ํด์ ๋ณผ ์ ์์ ์ ๋๋ก ๊ตฌ์ฒด์ ์ผ๋ก ์ฎ๊น.
-
์ฑ ๋ฒ์ ์ ์ดํ 2์(2016-06-20).
-
V1 ์๋ฃ ๋ ์ง: 2019-07-06
-
40, 41 ์ฑํฐ๋ ๋ณธ์ธ์ ๋น๋๊ธฐ์ ๋ํ ์ดํด ๋ถ์กฑ์ผ๋ก ์์ง ๊ณต๋ถ ๋ชป ํ์. ํฅํ ์ ๋ฐ์ดํธ ํ๊ฒ ์ต๋๋ค.
๋ชฉ์ฐจ
1์ฅ. ํ์ด์ฌ๋ค์ด ์๊ฐ
- Better way 01. ์ฌ์ฉ ์ค์ธ ํ์ด์ฌ์ ๋ฒ์ ์ ์์
- Better way 02. PEP 8 ์คํ์ผ ๊ฐ์ด๋๋ฅผ ๋ฐ๋ฅด์
- Better way 03. bytes, str, unicode์ ์ฐจ์ด์ ์ ์์
- Better way 04. ๋ณต์กํ ํํ์ ๋์ ํฌํผ ํจ์๋ฅผ ์ฌ์ฉํ์
- Better way 05. ์ํ์ค๋ฅผ ์ฌ๋ผ์ด์คํ๋ ๋ฐฉ๋ฒ์ ์์
- Better way 06. ํ ์ฌ๋ผ์ด์ค์ start, end, stride๋ฅผ ํจ๊ป ์ฐ์ง ๋ง์
- Better way 07. map๊ณผ filter ๋์ ์ ๋ฆฌ์คํธ ์ปดํ๋ฆฌํจ์ ์ ์ฌ์ฉํ์
- Better way 08. ๋ฆฌ์คํธ ์ปดํ๋ฆฌํจ์ ์์ ํํ์์ ๋ ๊ฐ ๋๊ฒ ์ฐ์ง ๋ง์
- Better way 09. ์ปดํ๋ฆฌํจ์ ์ด ํด ๋๋ ์ ๋๋ ์ดํฐ ํํ์์ ๊ณ ๋ คํ์
- Better way 10. range๋ณด๋ค๋ enumerate๋ฅผ ์ฌ์ฉํ์
- Better way 11. ์ดํฐ๋ ์ดํฐ๋ฅผ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ๋ ค๋ฉด zip์ ์ฌ์ฉํ์
- Better way 12. for์ while ๋ฃจํ ๋ค์๋ else ๋ธ๋ก์ ์ฐ์ง ๋ง์
- Better way 13. try/except/ese/finally์์ ๊ฐ ๋ธ๋ก์ ์ฅ์ ์ ์ด์ฉํ์
2์ฅ. ํจ์
- Better way 14. None์ ๋ฐํํ๊ธฐ ๋ณด๋ค ์์ธ๋ฅผ ์ผ์ผํค์
- Better way 15. ํด๋ก์ ๊ฐ ๋ณ์ ์ค์ฝํ์ ์ํธ ์์ฉํ๋ ๋ฐฉ๋ฒ์ ์์
- Better way 16. ๋ฆฌ์คํธ๋ฅผ ๋ฐํํ๋ ๋์ ์ ๋๋ ์ดํฐ๋ฅผ ๊ณ ๋ คํ์
- Better way 17. ์ธ์๋ฅผ ์ํํ ๋๋ ๋ฐฉ์ด์ ์ผ๋ก ํ์
- Better way 18. ๊ฐ๋ณ ์์น ์ธ์๋ก ๊น๋ํ๊ฒ ๋ณด์ด๊ฒ ํ์
- Better way 19. ํค์๋ ์ธ์๋ก ์ ํ์ ์ธ ๋์์ ์ ๊ณตํ์
- Better way 20. ๋์ ๊ธฐ๋ณธ ์ธ์๋ฅผ ์ง์ ํ๋ ค๋ฉด None๊ณผ docstring์ ์ฌ์ฉํ์
- Better way 21. ํค์๋ ์ ์ฉ ์ธ์๋ก ๋ช ๋ฃ์ฑ์ ๊ฐ์ํ์
3์ฅ. ํด๋์ค์ ์์
- Better way 22. ๋์ ๋๋ฆฌ์ ํํ๋ณด๋ค๋ ํฌํผ ํด๋์ค๋ก ๊ด๋ฆฌํ์
- Better way 23. ์ธํฐํ์ด์ค๊ฐ ๊ฐ๋จํ๋ฉด ํด๋์ค ๋์ ํจ์๋ก ๋ฐ์
- Better way 24. ๊ฐ์ฒด๋ฅผ ๋ฒ์ฉ์ผ๋ก ์์ฑํ๋ ค๋ฉด @classmethod ๋คํ์ฑ์ ์ด์ฉํ์
- Better way 25. super๋ก ๋ถ๋ชจ ํด๋์ค๋ฅผ ์ด๊ธฐํํ์
- Better way 26. ๋ฏน์ค์ธ ์ ํธ๋ฆฌํฐ ํด๋์ค์๋ง ๋ค์ค ์์์ ์ฌ์ฉํ์
- Better way 27. ๊ณต๊ฐ ์์ฑ๋ณด๋ค๋ ๋น๊ณต๊ฐ ์์ฑ์ ์ฌ์ฉํ์
- Better way 28. ์ปค์คํ ์ปจํ ์ด๋ ํ์ ์ collection.abc์ ํด๋์ค๋ฅผ ์์๋ฐ๊ฒ ๋ง๋ค์.
4์ฅ. ๋ฉํํด๋์ค์ ์์ฑ
- Better way 29. ๊ฒํฐ์ ์ธํฐ ๋ฉ์๋ ๋์ ์ ์ผ๋ฐ ์์ฑ์ ์ฌ์ฉํ์
- Better way 30. ์์ฑ์ ๋ฆฌํฉํ ๋งํ๋ ๋์ @property๋ฅผ ๊ณ ๋ คํ์
- Better way 31. ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ @property ๋ฉ์๋์๋ ๋์คํฌ๋ฝํฐ๋ฅผ ์ฌ์ฉํ์
- Better way 32. ์ง์ฐ ์์ฑ์๋ __getattr__, __getattribute__, __setattr__์ ์ฌ์ฉํ์
- Better way 33. ๋ฉํํด๋์ค๋ก ์๋ธํด๋์ค๋ฅผ ๊ฒ์ฆํ์
- Better way 34. ๋ฉํํด๋์ค๋ก ํด๋์ค์ ์กด์ฌ๋ฅผ ๋ฑ๋กํ์
- Better way 35. ๋ฉํํด๋์ค๋ก ํด๋์ค ์์ฑ์ ์ฃผ์์ ๋ฌ์
5์ฅ. ๋ณํ์ฑ๊ณผ ๋ณ๋ ฌ์ฑ
- Better way 36. ์์ ํ๋ก์ธ์ค๋ฅผ ๊ด๋ฆฌํ๋ ค๋ฉด subprocess๋ฅผ ์ฌ์ฉํ์
- Better way 37. ์ค๋ ๋๋ฅผ ๋ธ๋กํน I/O์ฉ์ผ๋ก ์ฌ์ฉํ๊ณ ๋ณ๋ ฌํ์ฉ์ผ๋ก๋ ์ฌ์ฉํ์ง ๋ง์
- Better way 38. ์ค๋ ๋์์ ๋ฐ์ดํฐ ๊ฒฝ์์ ๋ง์ผ๋ ค๋ฉด Lock์ ์ฌ์ฉํ์
- Better way 39. ์ค๋ ๋ ๊ฐ์ ์์ ์ ์กฐ์จํ๋ ค๋ฉด Queue๋ฅผ ์ฌ์ฉํ์
- [Better way 40. ๋ง์ ํจ์๋ฅผ ๋์์ ์คํํ๋ ค๋ฉด ์ฝ๋ฃจํด์ ๊ณ ๋ คํ์][way40]
- [Better way 41. ์ง์ ํ ๋ณ๋ ฌ์ฑ์ ์คํํ๋ ค๋ฉด concurrent.futures๋ฅผ ๊ณ ๋ คํ์][way41]
6์ฅ. ๋ด์ฅ ๋ชจ๋
- Better way 42. functions.wrap๋ก ํจ์ ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ ์ํ์
- Better way 43. ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ try/finally ๋์์ ๋ง๋ค๋ ค๋ฉด contextlib์ with๋ฌธ์ ๊ณ ๋ คํ์
- Better way 44. copyreg์ผ๋ก pickle์ ์ ๋ขฐํ ์ ์๊ฒ ๋ง๋ค์
- Better way 45. ์ง์ญ ์๊ฐ์ time์ด ์๋ datetime์ผ๋ก ํํํ์
- Better way 46. ย ๋ด์ฅ ์๊ณ ๋ฆฌ์ฆ๊ณผ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ์
- Better way 47. ์ ๋ฐ๋๊ฐ ์ค์ํ ๋๋ decimal์ ์ฌ์ฉํ์
- Better way 48. ์ปค๋ฎค๋ํฐ์์ ๋ง๋ ๋ชจ๋์ ์ด๋์ ์ฐพ์์ผ ํ๋์ง ์์๋์
7์ฅ. ํ๋ ฅ
- Better way 49. ๋ชจ๋ ํจ์, ํด๋์ค, ๋ชจ๋์ docstring์ ์์ฑํ์
- Better way 50. ๋ชจ๋์ ๊ตฌ์ฑํ๊ณ ์์ ์ ์ธ API๋ฅผ ์ ๊ณตํ๋ ค๋ฉด ํจํค์ง๋ฅผ ์ฌ์ฉํ์
- Better way 51. ๋ฃจํธ Exception์ ์ ์ํด์ API๋ก๋ถํฐ ํธ์ถ์๋ฅผ ๋ณดํธํ์
- Better way 52. ์ํ ์์กด์ฑ์ ์์ ๋ ๋ฐฉ๋ฒ์ ์์
- Better way 53. ์์กด์ฑ์ ๋ถ๋ฆฌํ๊ณ ์ฌํํ๋ ค๋ฉด ๊ฐ์ ํ๊ฒฝ์ ์ฌ์ฉํ์
8์ฅ. ์ ํํ
- Better way 54. ๋ฐฐํฌ ํ๊ฒฝ์ ๊ตฌ์ฑํ๋ ๋ฐ๋ ๋ชจ๋ ์ค์ฝํ ์ฝ๋๋ฅผ ๊ณ ๋ คํ์
- Better way 55. ๋๋ฒ๊น ์ถ๋ ฅ์ฉ์ผ๋ก๋ repr ๋ฌธ์์ด์ ์ฌ์ฉํ์
- Better way 56. unittest๋ก ๋ชจ๋ ๊ฒ์ ํ ์คํธํ์
- Better way 57. pdb๋ฅผ ์ด์ฉํ ๋ํ์ ๋๋ฒ๊น ์ ๊ณ ๋ คํ์
- Better way 58. ์ต์ ํํ๊ธฐ ์ ์ ํ๋กํ์ผํ์
- Better way 59. tracemalloc์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ํํฉ๊ณผ ๋์๋ฅผ ํ์ ํ์
์ ํ๋ ์ฝ๊ณ ๊ฐ์ธ์.
์ฌ๋ํ๋ ๋์ ๋ง์ ์์ ์์ ๊ฟ ํ๋๋ง์ ๋จ๊ฒจ๋๊ณ ๋๋ฌด ์ฝ๊ฒ ๋ ๋๋ฒ๋ฆฐ ๋๋ฅผ ์ด์ ๋ ์ดํดํ๋ ค ํด. -- ๋ฌ๋ง๋์ฌ ๊นํ๊ตญ