당신은 멋쟁이, 우리는 장고쟁이~

0%

PEP8 Whitespace in Expressions and Statements - PET PEEVES



수식과 구문안에서 빈공간



이번토픽은 PEP8에서 다루는 공백에 대한 포스트입니다.



포스팅을 시작하기 전에, 프로그래밍언어 안에서 쓰이는 expressions 이라는 단어와 Statements에 대한 뜻을 먼저 알고 시작하겠습니다.


Expressions 와 Statements


영어에서는 expressions은 표현, statements는 진술서 라는 의미로 쓰이는게 많은데.



프로그래밍 세계에서 의미하는 바는 조금 다른것 같아. 아래와 같이 요약합니다.



Expressions

수식, 연산식

예) 1 + 1 = 0 혹은 a = 3



Statements

실행 가능한 (executable) 코드 조각.

보통 여러개의 expressions 로 이루어져 있습니다.



1
2
3
4
5
6
7
# 함수안에 실행 가능한 구문이 Statements 입니다. 
# 여러개의 Expressions 로 이루어져 있는걸 확인 할수 있습니다.

def addition():
a = 1
b = 2
return a + b



PET PEEVES



PET PEEVES의 뜻도 짚어보고 넘어갑니다.

PET PEEVES 는 특별히 짜증나게 느끼는것들을 얘기하는데. 예를 들면 아래와 같습니다.



우리 어머니의 PET PEEVE 는 내가 방청소를 안하는겁니다..

여자친구의 PET PEEVE 는 내가 연락을 잘 안하는겁니다..

제 PET PEEVE 는 약속시간에 늦는겁니다.


어머니를 짜증나게 하는것은 내가 방청소를 안하는것이고, 여자친구가 짜증나 하는거는 내가 연락을 잘 안하는것이고. 저를 짜증나게 하는것은 약속시간을 지키지 않는것입니다.



PEP8 에서는 짜증나는것들은 피하면서 코드를 쓰라고, 이번 타이틀을 이렇게 적은것 같습니다 ㅎㅎ



과도하거나 적절하지 못한 공백은 피해야 합니다



PEP8 에서는 아래 상황들에 대해서 다룹니다. 예를들면서 넘어가겠습니다.



소괄호, 중괄호, 대괄호 바로 안쪽



1
2
3
4
5
6
7
8
9
10
# 좋은예 

spam(ham[1], {eggs: 2})

# 나쁜예
# 괄호가 시작하고 바로 띄어쓰기가 나오고,
# 괄호가 닫히기 전에 띄어쓰기가 한번 더 되었습니다
# 너무 과도한 공백 사용의 예

spam( ham [ 1 ], { eggs: 2 } )


뒤에 붙는 콤마와 괄호가 닫히는 사이 공간



1
2
3
4
5
6
7
8
# 좋은예 

foo = (0,)

# 나쁜예
# 0 과 닫히는 괄호 사이에 의미없는 띄어쓰기가 있습니다.

bar = (0, )


콤마, 세미콜론, 콜론 바로 전 공간



1
2
3
4
5
6
7
8
# 좋은예 

if x == 4: print x, y; x, y = y, x

# 나쁜예
# 콜론, 세미콜론, 콤마 전후에 너무 많은 공백이 있습니다.

if x == 4 : print x , y ; x , y = y , x


슬라이싱에 사용되는 콜론은 이항 연산자 역할을 합니다



논리적 연산자 역할을 하는 콜론이 사용될때 (슬라이싱)에 대한 공백 가이드 라인 입니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 좋은예 

ham[1:9], ham[1:9:3], ham[:9:3], ham[1::3], ham[1:9:]
ham[lower:upper], ham[lower:uper:], ham[lower::step]
ham[lower+offset : upper+offset]
ham[: upper_fn(x) : step_fn(x), ham[:: step_fn(x)]]
ham[lower + offset : upper + offset]

# 나쁜예

# 콜론을 사이에 두고 양쪽에 같은 공백이 적용 되어 있지 않습니다.

ham[lower + offset:upper + offset] # 수정 예시 ham[lower+offset : upper+offset]


# 슬리이싱이라 콜론 사이에 공백을 넣을 필요가 없는 경우

ham[1: 9], ham[1 :9], ham[1:9 :3]
# 수정 예시 ham[1:9], ham[1:9:3]


# extended slicing, :: 가 나오는 경우 공백 없이 써줘야 합니다.

ham[lower : : upper]
# 수정 예시 ham[lower::upper]


# 콜론이 이항 연산자와 같은 역할을 하므로, 공백이 없어야 합니다.

ham[ : upper]
# 수정 예시 ham[:upper]


함수를 호출할때 인자가 들어가는 바로 앞자리



1
2
3
4
5
6
7
# 좋은예 

spam(1)

# 나쁜예

spam (1)


인덱스와 슬라이싱을 하는 괄호 바로 앞자리



1
2
3
4
5
# 좋은예 
dct['key'] = 1st[index]

# 나쁜예
dct ['key'] = 1st [index]


변수 할당시 다른줄과 줄을 맞추기 위한 공백


변수를 할당하거나 선언할때, 연산자 주변에 다른 줄에 있는 연산기호와 줄을 맞추기 위해서

공백을 너무 많이 주면 안됩니다.


1
2
3
4
5
6
7
8
9
10
11
# 좋은예 

x = 1
y = 2
long_variable = 3

# 나쁜예

x = 1
y = 2
long_variable = 3


마치며..



너무 과도하거나 불필요하거나 적절하지 못한 공백의 사용은, 코드의 가독성을 떨어트리는것 같습니다.


적절한 곳에 공백을 두어서 코드의 가독성을 높이고.


논리적으로나 시각적으로나 더 간결한 코드를 작성하면 좋겠습니다.