์ฝ๋ฉ์ ํ๋ค ๋ณด๋ฉด ๋ค๋ฅธ ์ฌ๋์ ์ฝ๋๋ฅผ ์ฐธ๊ณ ํ๋ ๊ฒฝ์ฐ๋ ๋ง๊ณ , ๋ค๋ฅธ ์ฌ๋์ด ์์ ํ๋ ์ฝ๋๋ฅผ ์ธ์์ธ๊ณ๋ฐ์์ ๊ด๋ฆฌํด์ผ ํ๋ ์ผ๋ ์๊น๋๋ค. ๋ํ ์ค๋์ ์ ์์ฑํ ์ฝ๋๋ฅผ ๋ค์ ๋ฏ์ด๋ด์ผ ํ๋ ์ผ๋ ์ข ์ข ์๊น๋๋ค. ์ฝ๋ ์ค ์์๋ ๋ฌด๊ดํ๊ฒ ์ฝ๊ธฐ ์ฌ์ด ์ฝ๋๊ฐ ์๋ ๋ฐ๋ฉด, ์ง์ ํ๋์ฉ ๋๋ ค๋ด์ผ ์ดํด๊ฐ ๊ฐ๋ ์ฝ๋๋ ์์ต๋๋ค. ์ฝ๊ธฐ ์ฝ๊ณ ์ดํด๊ฐ ์๋๋ ์ฝ๋๋ ๋๋ถ๋ถ ์ฃผ์์ ์ธ๋ฐํ๊ฒ ์ ์์ฑํ ๊ฒฝ์ฐ์ด๋ฉฐ, ์ฃผ์์ด ์์ด๋ ์ฝ๋ ์์ฒด๊ฐ ๊น๋ํ๊ณ ์ฝ๊ธฐ ํธํ ์คํ์ผ์ด ์์ต๋๋ค. ํ์ฌ์์ ์ฝ๋ฉ์ ํ๋ ๋ถ์ด๋ผ๋ฉด ์ด๋ฌํ ๊ฒฝํ๋ค์ ๋ง์ด ํด๋ณด์ จ์ ๊ฒ ๊ฐ์ต๋๋ค. ์ฝ๋๊ฐ ์ผ๋ง๋ ์ดํดํ๊ธฐ ์ฝ๊ณ ํจ์จ์ ์ผ๋ก ์ง์๋์ง์ ๋ฐ๋ผ ๊ทธ๋ ์ ์ผ๊ทผ ์ฌ๋ถ๊ฐ ๊ฒฐ์ ๋๊ธฐ๋ ํฉ๋๋ค ใ ใ
๊ทธ๋์ ์ค๋์ ๊ฐ๋ ์ฑ์ด ์ข๊ณ ํจ์จ์ ์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ํด ํฌ์คํ ์ ํ๊ธฐ๋ก ํ์ต๋๋ค.
PEP 8
์ฌ๋ฌ ๊ตญ๊ฐ์ ์ธ์ด ๊ฐ์ ๊ด๊ณ์ ์ ์ฌ์ฑ์ด ์๋ ๊ฒ์ฒ๋ผ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ค์ ์๋ก ๊ณตํต๋ ํน์ง์ ๋ง์ด ๊ฐ์ง๊ณ ์์ต๋๋ค. ์๋ฃํ, ๋ณ์ ์ค์ , ์ฐ์ฐ ๋ฐฉ์, ์ ์ด๋ฌธ ๋ฑ ๋ง์ ๋ถ๋ถ์ด Universal ํ๊ฒ ๊ณต์ ๋๊ณ ์์ต๋๋ค. ๊ณตํต๋ ํน์ง๋ ์๋ ๋งํผ, ๊ฐ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ ๊ฐ์ง๋ ๊ณ ์ ์ ํน์ง๋ค๋ ์์ต๋๋ค. Python ๋ํ Python์์๋ง ๊ฐ๋ฅํ ์ฝ๋ ์์ฑ๋ฒ์ด ์์ต๋๋ค.
์ฝ๋๋ฅผ ์์ฑํ๊ณ ๊ณต์ ํ๋ ๋ฐ ์์ด์ ๊ฐ๋ ์ฑ๊ณผ ํจ์จ์ฑ์ ๋์ด๊ธฐ ์ํด Python ์ปค๋ฎค๋ํฐ์์ ์ ์ํ๊ณ ๋ฐ์ ์ํจ PEP 8์ด๋ผ๋ ๊ฐ์ด๋๊ฐ ์์ต๋๋ค. PEP 8 ๊ฐ์ด๋์ ๋ง์ถฐ ์์ฑํ ์ฝ๋๋ฅผ Pythonic Code๋ผ๊ณ ํฉ๋๋ค. ๋ณ์ ์ด๋ฆ์ ์ด๋ป๊ฒ ์ ํด์ผ ํ๋์ง๋ถํฐ ์์ํด์ ๋์ด์ฐ๊ธฐ ๊ฐ์, ํจ์๋ฅผ ์์ฑํ ๋ ์ง์ผ์ผ ํ ๋ฒ์น, ์ฃผ์์ ์ด๋ป๊ฒ ๋ฌ์์ผ ํ ์ง ๋ฑ ๋ค์ํ ๊ท์น์ด ์์ต๋๋ค. ์๋๋ PEP 8 ๊ณต์ ๋ฌธ์์์ ์ ๊ณตํ ๋ค์ฌ ์ฐ๊ธฐ(Indentation)์ ๋ํ ๊ท์น ์์์ ๋๋ค.
# Function์์ ๋ค์ด๊ฐ๋ Argument๋ผ๋ฆฌ๋ ์ค๋ฐ๊ฟ ์ ๋ง์ถค ์ ๋ ฌ์ ํด์ค์ผ ํ๋ค
# ํ๋ฆฐ ๋ฐฉ์
foo = long_function_name(var_one, var_two,
var_three, var_four)
# ์ฌ๋ฐ๋ฅธ ๋ฐฉ์
foo = long_function_name(var_one, var_two,
var_three, var_four)
# ํจ์๋ฅผ ์ ์ํ ๋๋ Argument์ธ ๋ถ๋ถ์ ๊ตฌ๋ถ์ด ๊ฐ๋ฅํ๊ฒ ๋ค์ฌ์ฐ๊ธฐ๋ฅผ ํด์ค์ผ ํ๋ค(์คํ์ด์ค 4๋ฒ)
# ํ๋ฆฐ ๋ฐฉ์
def long_function_name(
var_one, var_two, var_three,
var_four):
print(var_one)
# ์ฌ๋ฐ๋ฅธ ๋ฐฉ์
def long_function_name(
var_one, var_two, var_three,
var_four):
print(var_one)
์ด ์ธ์๋ ๋ง์ ๊ท์น์ด ์์ง๋ง, PEP 8 ๊ฐ์ด๋๋๋ก ์๋ฒฝํ๊ฒ ์ฝ๋๋ฅผ ์ง๋ ๊ฒ์ ์ฌ์ค์ ์ด๋ ค์ด ์ผ์ ๋๋ค. ๋ฐ๋ผ์ ์ค์ฒํ๊ธฐ ์ฝ๊ณ ๊ฐ๋จํ ๋ช ๊ฐ์ง ๋ฐฉ๋ฒ๋ง ์๊ฐ๋ฅผ ํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
1. ๋ค์ฌ ์ฐ๊ธฐ
์์ ์์์์๋ ๊ฐ๋จํ๊ฒ ๋ค๋ฃจ์์ง๋ง, Python์์๋ ๋ค์ฌ ์ฐ๊ธฐ๋ฅผ ํ ๋ ๊ณต๋ฐฑ 4๊ฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค. Tab์ ๊ฒฝ์ฐ์๋ editor๊ณผ ํ๊ฒฝ์ ๋ฐ๋ผ์ ๋์ด๊ฐ ๋ฌ๋ผ์ง๋ ์ด์ ๊ฐ ํฝ๋๋ค. ๋ํ ์ฝ๋ฉ์ ํ ๋ ๊ณต๋ฐฑ์ ํ์์ ์ผ๋ก ๋ค์ด๊ฐ์ง๋ง, Tab์ ๋ค์ฌ ์ฐ๊ธฐ๋ฅผ ํ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ๋ฐ๋ผ์ ์ฝ๋ ์์ ์๋ Whitespace๋ฅผ ๊ณต๋ฐฑ์ผ๋ก ํต์ผํ๋ ๊ฒ์ด ๋ค๋ฅธ ์ฅ์น๋ ํ๊ฒฝ์์ ํด๋น ์ฝ๋๋ฅผ ์ฌ์ฉํ ๋๋ ํธ๋ฆฌํฉ๋๋ค. ๋ง์ ๋ถ๋ค์ด ๊ท์ฐฎ์์ Tab๋ฅผ ์ฌ์ฉํ์ง๋ง ๊ฐ๊ธ์ ์ผ๋ก ์คํ์ด์ค ๋ฐ๋ฅผ ๋๋ฅด๋ ์ต๊ด์ ๋ค์ด๋ ๊ฒ์ด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค. (๊ณต๋ฐฑ์ ์ฌ์ฉํ๋ ํ๋ก๊ทธ๋๋จธ๊ฐ Tab์ ์ฌ์ฉํ๋ ํ๋ก๊ทธ๋๋จธ ๋ณด๋ค ๋์ ๋ ๋ง์ด ๋ฒ๋ค๋? ์ฐ๋ ์์ต๋๋ค ใ ใ )
2. ๋ณ์/ํจ์/์์ ์ด๋ฆ ์ง๊ธฐ
๋ณ์์ ํจ์๋ช ์ ์๋ฌธ์, ์์๋ ๋๋ฌธ์๋ก ์์ฑํ๊ณ , ๋จ์ด์ ๋จ์ด ์ฌ์ด์๋ ์ธ๋์ค์ฝ์ด ( _ )๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ํ ํจ์ ๋ช ์ ๋์ฌ๋ก ์์ํ๊ฒ ์์ฑํ์ฌ ์ด๋ค ๊ธฐ๋ฅ์ ํ๋์ง ๋ช ์ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
# ๋ณ์๋ช
x = ['a', 'b', 'c']
y = ['d', 'e']
z = ['f']
# ํจ์๋ช
def calculate_total_length(x,y,z):
return len(x) + len(y) + len(z)
# ์์
MAX_LENGTH = 1000
3. ๋์ด์ฐ๊ธฐ
๊ดํธ, ์ผํ, ์ฝ๋ก ๋ฑ ์ฃผ์ ๊ตฌ๋ถ์ ์ฃผ๋ณ์๋ ๊ณต๋ฐฑ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ํจ์ ์ ์๋ ํด๋์ค ์ ์๋ฅผ ํ ๋ ํจ์ ์์๋๋ก ๋น ์ค์ ํ๋์ฉ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
my_list = [1, 2, 3] # ์ผํ ์ฃผ๋ณ์ ๊ณต๋ฐฑ ์ฌ์ฉ
if x == 0: # ์ฝ๋ก ์ฃผ๋ณ์ ๊ณต๋ฐฑ ์ฌ์ฉ
print("x is zero.")
# ํจ์๋ ํด๋์ค ์ ์ํ ๋๋ ์ ์๋๋ก ๋น์ค ํ๋์ฉ ์ถ๊ฐ
class MyClass:
def __init__(self):
pass
def my_method(self, arg):
pass
def my_function(arg1, arg2):
pass
4. ์ฃผ์
์ฌ์ค ๊ฐ์ฅ ์ค์ํ ๋ถ๋ถ์ ๊ฐ์ธ์ ์ผ๋ก ์ฃผ์์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋๋ฌด ๋ง์๋ ๋์์ด ์ ๋๊ณ , ๋๋ฌด ์ ์ด๋ ์ค๋ช ์ ์์ฑ๋๊ฐ ๋จ์ด์ง๋ ๊ฒ ์ฃผ์์ ๋๋ค. ์ ์ฌ์ ์์ ์ ๋นํ๊ฒ ์์ฑํ๋ ๊ฒ์ด ๋งค์ฐ ์ด๋ ค์ด๋ฐ, ๋ค์๊ณผ ๊ฐ์ ์์น์ ์ธ์ฐ๋ฉด ์ฃผ์์ ์ ์ธ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค:
1. ์ฝ๋์ ๊ธฐ๋ฅ์ ์ค๋ช ํ ๋
์ฝ๋์ ๊ธฐ๋ฅ์ ์ค๋ช ํ๋ ์ฃผ์์ ์ฝ๋ ์์ชฝ์ ์์ฑํ๊ณ , ํจ์๋ ๋ฉ์๋, ๋ฆฌํด ๊ฐ, ์์ธ ์ฒ๋ฆฌ ๋ฑ์ ์ค๋ช ํ๋ docstring์ผ๋ก ์์ฑํ๋ ๊ฒ์ด ์ข์ต๋๋ค. docstring์ ์์๋ฐ์ดํ ํน์ ํฐ๋ฐ์ดํ ์ธ ๊ฐ๋ก ๊ฐ์ธ์ง ๋ฌธ์์ด๋ก ์๋์ ๊ฐ์ด ์์ฑํ๋ฉด ๋ฉ๋๋ค:
def calculate_area(base, height):
"""Calculate the area of a triangle.
Args:
base (float): The base length of the triangle.
height (float): The height of the triangle.
Returns:
float: The area of the triangle.
"""
area = 0.5 * base * height
return area
2. ์ฝ๋์ ๋ณต์ก๋ ์ค์ด๊ธฐ
์ฝ๋ ๋ธ๋ก์ ๋์๊ณผ ํ์์ฑ์ ๋ํ ์ค๋ช ์ด ํ์ํ๊ฑฐ๋ ์ฝ๋์์ ์ฃผ์ํด์ผ ํ ์ฌํญ์ ๋ํด ์๋ฆด ๋ ์ฌ์ฉํฉ๋๋ค. ์ฝ๋ ์์ฒด๋ก์ ์ค๋ช ์ด ๋๋ ๊ฒฝ์ฐ์๋ ๊ณผ๊ฐํ๊ฒ ์๋ตํด๋ ๋ฉ๋๋ค.
name = name.upper() # ์ด๋ ๊ฒ ๋ฉ์๋ ์์ฒด๋ก ์ค๋ช
์ด ๋๋ฉด ์ฃผ์์ ์๋ตํด๋ ๋ฉ๋๋ค.
# list์์ ์ค๋ณต element ์ ๊ฑฐ
unique_list = list(set(my_list))
# condition์ด True์ผ ๋๋ง ์คํ
while condition:
do_something()
3. To Do ๋ฑ ํน์ Action์ด ํ์ํ ๋
์ฝ๋ ์์ ์ด ํ์ํ๊ฑฐ๋ ์ฃผ์์ฌํญ์ด ํ์ํ ๋ ์์ฑํฉ๋๋ค.
# TODO: ๋คํธ์ํฌ ์์ฒญ์ ๋ณด๋ผ ๋ ์๋ฌ๊ฐ ๋๋ ๊ฒฝ์ฐ์ ๋ํด์ ํด๊ฒฐ ํ์
response = requests.get(url)
5. Import ๋ฌธ ์ ๋ฆฌํ๊ธฐ
import๋ฅผ ํ๋ ๋ชจ๋, ํจํค์ง, ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํ์ผ์ ๋งจ ์์์ ์์ฑํ๊ณ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ์๋ํํฐ, ๋ก์ปฌ ๋ชจ๋ ์์ผ๋ก ๊ทธ๋ฃน์ ๋๋ ์ ์์๋๋ก ์ ๋ฆฌํฉ๋๋ค.
# built-in function๋ถํฐ ์์ฑ
import os
import sys
# ์จ๋ํํฐ ๋ชจ๋ ๋ถ๋ฌ์ค๊ธฐ
import requests
import numpy
import pandas as pd
# ๋ก์ปฌ ๋ชจ๋ ๋ถ๋ฌ์ค๊ธฐ
from my_module import my_function
์ ๋ฆฌํ๊ธฐ
์ค๋ ๋ค๋ฃฌ ๋ค์ฏ๊ฐ์ง ํต์ฌ์ ์ธ ๋ด์ฉ ์ธ์๋ PEP8 ๊ฐ์ด๋๋ ๊ตฌ์ฒด์ ์ธ ์ํฉ์์ ์ด๋ค ์ฝ๋๋ฅผ ์์ฑํด์ผ ํ๋์ง์ ๋ํด ์์ธํ๊ฒ ์๋ ค์ค๋๋ค. ์ค ๋ฐ๊ฟ์ด ํ์ํ ๋ ์ผํ๋ ์ฐ์ฐ์๋ฅผ ์ด๋ป๊ฒ ๋ฃ์์ง, = ์ฃผ๋ณ์ ๊ณต๋ฐฑ์ ์ด๋จ ๋ ๋ฃ์ด์ผ ํ๋์ง ๋ฑ ๋ค์ํ ๋ด์ฉ์ ๋ค๋ฃจ๊ณ ์์ต๋๋ค. ํด๋น ๊ฐ์ด๋ ์์ ์๋ ๋ด์ฉ์ 100% ์ค์ฒํ ์๋ ์์ง๋ง, ์์ ์ธ๊ธํ 5๊ฐ์ง ๋ด์ฉ๋ง ์ง์ผ๋ ์ฝ๋๋ฅผ ์ฝ์ ๋ ํฐ ๋์์ด ๋ ๊ฒ ๊ฐ์ต๋๋ค.
'๐ป ITยท๊ธฐ์ ยทํต๊ณ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] ์ ์ฌ ๋ฉ๋ด ์ถ์ฒํด์ฃผ๋ ์น์ฌ์ดํธ ๋ง๋ค๊ธฐ (ft. Flask) (1) | 2023.03.20 |
---|---|
Python์ผ๋ก ๊ฐ์ธ์ ๋ณด ๊ฐ๋ช ์ฒ๋ฆฌํ๊ธฐ (SHA-256) (0) | 2023.03.16 |
[Snippet] ์ํฉ๋ณ Tuple, List ๋ณํ ๋ฐฉ๋ฒ (0) | 2023.03.10 |
[API] ChatGPT Python์ผ๋ก ์ฌ์ฉํด๋ณด๊ธฐ - Part.2 (0) | 2023.03.08 |
[NLP] lexrankr๋ก 3์ค ์์ฝํด๋ณด๊ธฐ (0) | 2023.02.15 |
๋๊ธ