1. PEP8์ด๋
ํ์ด์ฌ ๊ณต์ ํํ์ด์ง์์ PEP8๋ฅผ ์๋์ ๊ฐ์ด ์๊ฐํ๊ณ ์๋ค.
This document gives coding conventions for the Python code comprising the standard library in the main Python distribution. Please see the companion informational PEP describing style guidelines for the C code in the C implementation of Python. - python PEP8 Introduction
PEP8์ "python ์ฝ๋์ ๋ํ ์ฝ๋ฉ ๊ท์น"์ ์ ๊ณตํ๋ค.
๊ณต์ ๋ฌธ์ ๋ด์ฉ์ ํ์ธํด ๋ณด๋ฉด, python์ ๋ง๋ Guido van Rossum(๊ท๋ ๋ฐ ๋ก์ฌ) ์ ์๋์ ํฌํจํ ์ธ ๋ถ์ด ์์ฑํ์ "ํ์ด์จ๋(pythonic)ํ ์ฝ๋"๋ฅผ ์ํ ๊ฐ์ด๋์ด๋ค.
๊ฐ๋ฐ์ ํผ์ ํ๋ ๊ฒ์ด ์๋๊ธฐ ๋๋ฌธ์, ๊ฐ๋ ์ฑ ์๊ณ ์ผ๊ด์ฑ ์๋ ์ฝ๋๋ ํตํด ํ์ ๊ฐ ๋งค์ฐ ์ค์ํ ์์์ด๋ค.
2. ์ฃผ์ ๊ฐ์ด๋
1. ์ด๋ฆ ๊ท์น
1) ๋ชจ๋ ๋ณ์์ ํจ์ ์ด๋ฆ์ ์๋ฌธ์ 1๋ก ์ฐ๊ณ , ์ฌ๋ฌ ๋จ์ด์ผ ๊ฒฝ์ฐ _
๋ก ๋๋๋ค.
# bad
someVariableName = 1
SomeVariableName = 1
def someFunctionName():
print("Hello")
# good : ์ถ์ํ๋ฅผ ์ํ ์๋ ์๋๋ค. ์ฌ๋ฌ ๋จ์ด์ ๊ตฌ๋ถ์ _๋ก ์ํ ์
some_variable_name = 1
def some_function_name():
print("Hello")
2) ๋ชจ๋ ์์ 2์ด๋ฆ์ ๋๋ฌธ์๋ก ์ฐ๊ณ , ์ฌ๋ฌ ๋จ์ด์ผ ๊ฒฝ์ฐ _
๋ก ๋๋๋ค.
# bad
someConstant = 3.14
SomeConstant = 3.14
some_constant = 3.14
# good : ์ถ์ํ๋ฅผ ์ํ ์๋ ์๋๋ค. ์ฌ๋ฌ ๋จ์ด์ ๊ตฌ๋ถ์ _๋ก ์ํ ์
SOME_CONSTANT = 3.14
# excellent : ์ถ์ํ๊น์ง ์ํ ์
PI = 3.14
2. ์๋ฏธ ์๋ ์ด๋ฆ : ์ถ์ํ
์ถ์ํ๋ ๋ณต์กํ ๋ด์ฉ์ ์จ๊ธฐ๊ณ , ํ์ ์ฃผ์ ๊ธฐ๋ฅ์๋ง ์ ๊ฒฝ์ฐ๋ ๊ฒ - ์ฐธ๊ณ : [OOP] (4) ์ถ์ํ(Abstraction)
- ํด๋์ค, ๋ณ์, ๋ฉ์๋์ ์ด๋ฆ์ ์ด๋์ ์ธ ์ ์๊ณ , ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง ์ง๊ด์ ์ผ๋ก ์ ์ถ๋๋ ์ด๋ฆ์ ์ฌ์ฉํ์
- ํ์๊ฐ ์ฝ์ธ๋ผ์์ ํ์ด์ฌ ๊ฐ์์์ ๋ฐฐ์ด ๋ณ์ ์ด๋ฆ์ ๋๋ชจ๋(mnemonic)ํ๊ฒ ์ง๋ ๊ฒ๋ ์ฌ๊ธฐ์ ํด๋น๋๋ค.
- ๐ฅ๋๋ชจ๋ ๋ณ์ ์ด๋ฆ(mnemonic varaiable name) : ๋ณด๋ ์ฌ๋์ ์ํด ์ ์ ํ ์ ํ๋ ๋ณ์ ์ด๋ฆ, ๊ธฐ์ตํ๊ธฐ ์ฌ์ด
## --- ์์, ๋ณ์ ---
# bad (์๋ฏธ ์๋ ์ด๋ฆ)
a = 2
b = 3.14
print(b * a * a)
# good (์๋ฏธ ์๋ ์ด๋ฆ)
radius = 2 # ๋ณ์
PI = 3.14 # ์์๋ ๋๋ฌธ์๋ก
print(PI * radius * radius)
## --- ํจ์ ---
# bad (์๋ฏธ ์๋ ์ด๋ฆ)
def do_something():
print("Hello, world!")
# good (์๋ฏธ ์๋ ์ด๋ฆ)
def say_hello():
print("Hello, world!")
3. ํ์ดํธ ์คํ์ด์ค(white space) ์ฌ์ฉ
1) ๋ค์ฌ์ฐ๊ธฐ : ๋ค์ฌ์ฐ๊ธฐ๋ ๋ฌด์กฐ๊ฑด ์คํ์ด์ค 4๊ฐ๋ฅผ ์ฌ์ฉ
# Wrong(์คํ์ด์ค 2๊ฐ):
def do_something():
print("Hello, world!")
# Correct(์คํ์ด์ค 4๊ฐ):
def say_hello():
print("Hello, world!")โ
2) ํจ์ ์ ์ : ํจ์ ์ ์ ์์๋๋ก ๋น ์ค์ด ๋ ๊ฐ ์ฉ ์์ด์ผ ํจ.
# Wrong:
def add(x, y):
return x + y
def subtract(x, y):
return x - y
def multiply(x, y):
return x * y
# Correct:
def add(x, y):
return x + y
def subtract(x, y):
return x - y
def multiply(x, y):
return x * y
3) ๊ดํธ ์ : ๊ดํธ ๋ฐ๋ก ์์๋ ๋์ด์ฐ๊ธฐ๋ฅผ ํ์ง ์์
# Wrong:
spam( ham[ 1 ], { eggs: 2 } )
# Correct:
spam(ham[1], {eggs: 2})
4) ํจ์ ๊ดํธ : ํจ์๋ฅผ ์ ์ํ๊ฑฐ๋ ํธ์ถํ ๋, ํจ์ ์ด๋ฆ๊ณผ ๊ดํธ ์ฌ์ด์ ๋์ด์ฐ๊ธฐํ์ง ์์
# Wrong:
def spam (x):
print(x + 2)
spam (1)
# Correct:
def spam(x):
print(x + 2)
spam(1)
5) ์ผํ : ์ผํ ์์๋ ๋์ด์ฐ๊ธฐ๋ฅผ ํ์ง ์์
# Wrong:
print(x , y)
# Correct:
print(x, y)
6) ์ง์ ์ฐ์ฐ์(=
) : ์ง์ ์ฐ์ฐ์ ์๋ค๋ก ๋์ด์ฐ๊ธฐ๋ฅผ ํ๋์ฉ๋ง ํด์ค๋ค.
# Wrong:
x=1
x = 1
# Correct:
x = 1
7) ์ฐ์ฐ์ : ๊ธฐ๋ณธ์ ์ผ๋ก ์ฐ์ฐ์ 3์๋ค๋ก ๋์ด์ฐ๊ธฐ๋ฅผ ํ๋์ฉ๋ง ํด์ค๋ค.
(์ฐ์ฐ์ "์ฐ์ ์์"๋ฅผ ๊ฐ์กฐํ๊ธฐ ์ํด์๋, ์ฐ์ฐ์ ์๋ค๋ก ๋์ด์ฐ๊ธฐ ๋ถ์ด๋ ๊ฒ ๊ถ์ฅ)
# Wrong:
i=i+1
submitted +=1
x = x * 2 - 1
hypot2 = x * x + y * y
c = (a + b) * (a - b)
# Correct:
i = i + 1
submitted += 1
x = x*2 - 1
hypot2 = x*x + y*y
c = (a+b) * (a-b)
8) ์ฝ๋ฉํธ : ์ผ๋ฐ ์ฝ๋์ ๊ฐ์ ์ค์ ์ฝ๋ฉํธ๋ฅผ ์ธ ๊ฒฝ์ฐ, ์ฝ๋ฉํธ ์์ ๋์ด์ฐ๊ธฐ ์ต์ ๋ ๊ฐ
# Wrong:
x = x + 1# ์ฝ๋ฉํธ
# Correct:
x = x + 1 # ์ฝ๋ฉํธ
๐ Variable in python : ์ถ๊ฐ ํ์ต
variable : ๋ณ์(่ฎๆธ)๋ ๋ณํ๋ ๊ฐ์ ๋ํ๋ด๋ ๋ฌธ์๋ค. ๋ค์ํ ๊ฐ์ด๋ ์์ ๋ฃ์ ์ ์๋ ๋น ์๋ฆฌ๋ฅผ ๋ํ๋ด๋ ๊ธฐํธ๋ก ์ข ์ข ์ฃผ์ด์ง ์งํฉ์ ์๋ ์์์ ์์๋ฅผ ๋ํ๋ผ ๋ ์ด๋ค. ๋ณ์๋ ์๋ฟ๋ง ์๋๋ผ ๋ฒกํฐ, ํ๋ ฌ๊ณผ ํจ์๋ฅผ ๋ํ๋ผ ๋๋ ์ด๋ค. - ์ํค๋ฐฑ๊ณผ
๊ฐ์ฃผ์์๋ ์ธ๊ธํ๋ฏ์ด, ๊ฐ์ ์ ์ฅํ๋ ๊ณณ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ์ฝ๋ค. ํ์ด์ฌ์์ =
๋ ๊ฐ์ "ํ ๋นํ๋ค", "์ ์ฅํ๋ค"์ ์๋ฏธ๋ก ์๊ฐํ๋ฉด ๋๋ค.
ํ์ด์ฌ์๋ ๋ณ์๋ช ์ ๋ํ ๊ท์น์ด ์๋ค.
- ์๋ฌธ์, ์ซ์,
_
(์ธ์ ๊ธฐํธ๋ ๋ถ๊ฐ)์ ์กฐํฉ์ผ๋ก๋ง ๊ตฌ์ฑ ๊ฐ๋ฅ - ์ฒซ๊ธ์๋ ์ซ์ ๋ถ๊ฐ, ๋์์ฐ๊ธฐ ๋ถ๊ฐ
- ์์ด ๋๋ฌธ์์ ์๋ถ์๋ฅผ ๊ตฌ๋ถํจ โก๏ธ ๊ฐ๋ฅํ ์๋ฌธ์ ์ฌ์ฉ ๊ถ์ฅ
- ๋๋ชจ๋ํ ์ด๋ฆ์ ์ฌ์ฉํ์(mnemonic varaiable name)
- ์์ฝ์ด(reserved words)๋ ๋ณ์์ด๋ฆ์ผ๋ก ์ฌ์ฉํ ์ ์์ผ๋ ์ฃผ์(35๊ฐ) : ๋ง์ฐฌ๊ฐ์ง๋ก ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํจ
and del global not with as elif if or yield assert else import pass break except in raise class finally is return continue for lambda try def from nonlocal while True False None continue
๐ฅ TIP
- ๋๋ชจ๋ํ ๋ณ์ ์ด๋ฆ์ ์ง๋ ๊ฒ์ด ์ด๋ ค์ธ ๋๋ ์์ด์ฌ์ , ์์ด ์ ์์ด ์ฌ์ ์ ์ด์ฉํ์
- ๋ณ์๋ฅผ ์ ์ํ ๋, 2๊ฐ ์ด์๋ ๊ฐ๋ฅํ๋ค
# 1๊ฐ ๋ณ์ ์ ์ num = 1 # 2๊ฐ ์ด์ ๋ณ์ ์ ์ num1, num2 = 1, 2โ
๐ Scope(๋ฒ์) : ๋ณ์์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฒ์
- ๋ก์ปฌ ๋ณ์(local vatiable)
- ๋ณ์๋ฅผ ์ ์ํ ํจ์ ๋ด์์๋ง ์ฌ์ฉ ๊ฐ๋ฅ
- ํจ์์ ํ๋ผ๋ฏธํฐ(parameter)๋ ๋ก์ปฌ ๋ณ์
- ๋ก์ปฌ ๋ณ์์ scope๋ ํด๋น ํจ์ ๋ด๋ก ๊ตญํ๋จ
- ์ ์ญ ๋ณ์, ๊ธ๋ก๋ฒ ๋ณ์(global vatiable)
- ๋ชจ๋ ๊ณณ์์ ์ฌ์ฉ ๊ฐ๋ฅ
- ๊ธ๋ก๋ฒ ๋ณ์์ scope๋ ์ฝ๋ ์ ์ฒด
# example
x = 2 # ๊ธ๋ก๋ฒ ๋ณ์
def my_function():
x = 3 # ๋ก์ปฌ ๋ณ์
print(x)
my_function() # out: 3
print(x) # out: 2
์กฐ๊ธ ๋ ์ ๋ฌธ์ ์ธ, ํ์ด์จ๋ํ ๊ฐ๋ฐ์๊ฐ ๋๊ธฐ ์ํด ๊ผญ ์ง๋ ์ผ ํ ๋๋ชฉ์ธ PEP8 ๊ทธ๋ฆฌ๊ณ ์ถ๊ฐ๋ก ํ์ด์ฌ์์์ ๋ณ์์ ๋ํด ์ ๋ฆฌํด ๋ณด์๋ค.
๋ค๋ฅธ ๊ฐ๋ฐ์์ ํ์ ํ๋ก์ ํธ ์งํ ๊ฐ์ ๊ผญ ์ฐธ๊ณ ํด์ผํ ์ข์ ์ฐธ๊ณ ์์ด๋ค. :)
๐ Reference
- ๊ฐ์ข ์ํค๋ฐฑ๊ณผ : ํด๋น ๋จ์ด ํด๋ฆญ ์, ํ์ดํผ๋งํฌ๋ฅผ ํตํด ์ฌ์ดํธ๋ก ์ด๋
- ํ์ด์ฌ ๊ณต์ ํํ์ด์ง
- ์ถ์ํ์ ๋ํด ๊ถ๊ธํ๋ค๋ฉด, ํด๋น ๋ธ๋ก๊ทธ์ OOP series ์ค [OOP] (4) ์ถ์ํ(Abstraction) : docstring, type hinting, ์ ์ ๋์ ํ์ ์ธ์ด๋ฅผ ์ถ์ฒํ๋ค.
- ํ์ด์ฌ ๊ธฐ์ด ๊ฐ์ข ์ถ์ฒ
๐ ๊ฐ์ฃผ
- variable : ๋ณ์(่ฎๆธ)๋ ๋ณํ๋ ๊ฐ์ ๋ํ๋ด๋ ๋ฌธ์๋ค. - ์ํค๋ฐฑ๊ณผ โก๏ธ ๐ฅ ๊ฐ์ ์ ์ฅํ๋ ๊ณณ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ์ฝ๋ค. [๋ณธ๋ฌธ์ผ๋ก]
- constant : ์์๋ ์์์์ ๋ณํ์ง ์๋ ๊ฐ์ ๋ปํ๋ค. ์ด๊ฒ์ ๋ณํ๋ ๊ฐ ๋ณ์์ ๋ฐ๋์ด๋ค - ์ํค๋ฐฑ๊ณผ [๋ณธ๋ฌธ์ผ๋ก]
- ํ ๋น ์ฐ์ฐ์, ์ฐ์ ์ฐ์ฐ์, ๋ฌธ์์ด ์ฐ์ฐ์, ๋น๊ต ์ฐ์ฐ์ ๋ฑ ๋ค์ํ ์ฐ์ฐ์๊ฐ ์๋ค. ์ ๋ชจ๋ฅธ๋ค๋ฉด ์ฌ๊ธฐ์๋ ์ฐ์ + - * / ๋ฑ์ ์ฐ์ ์ฐ์ฐ์๋ก ์๊ฐํ์. [๋ณธ๋ฌธ์ผ๋ก]