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

0%

PEP8 Code Layout - Indentation

PEP8 Code Layout - Indentation (들여쓰기)


Indentation


파이썬에서, 들여쓰기는 문법으로 의무화 되어 있습니다.

PEP8에서는 들여쓰기에 대한 코딩 스타일을 다루고 있습니다.



들여쓰기는 4칸을 사용합니다.


Continuation lines, 즉 이어지는 줄들은 세로로 정렬이 되어야 하는데.

1) 파이썬에서 암시적으로 이어지는 줄들을 소괄호, 중괄호, 대괄호 안에 묶거나,

2) hanging indent 를 사용하여 정렬합니다.


hanging indent 를 직역하면, 매달려 있는 들여쓰기로.

문단의 첫번째 줄을 제외한 모든 라인이 들여쓰기가 되어 있는 스타일 입니다.


hanging indent 의 예를 들어봅니다



1
2
3
4
5
djangojenge = djangojenge(django, python,
pep8, programming)

# 첫번째줄은 들여쓰기가 되어 있지 않은데
# 두번째줄은 들여쓰기가 되어 있습니다. 이것을 매달려있는 들여쓰기. 즉 hanging indent 라고 합니다.


hanging indent를 사용할때는, 아래 두가지 사항을 골려하면서 사용합니다.


  1. 첫번째 줄에는 arguments (전달인자) 가 없어야 합니다.
  2. 이어지는 줄이라는것을 표시하기 위해 추가적인 들여쓰기가 사용되어야합니다


좋은예



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 좋은예: 

# 열리는 구분자와 정렬

foo = long_function_name(var_one, var_two,
var_three, var_four)


# 4칸을 추가로 주어 전달인자들을 다른 로직과 구분
# 추가 들여쓰기로 arguments 부분과, print 부분이 구분됩니다.

def long_function_name(
var_one, var_two, var_three,
var_four):
print(var_one)


# Hanging indents 한칸을 더 추가 합니다
# 첫번째 예랑 같은데, hanging indent 로 한칸씩 추가 되어. 좀더 깔끔해 보입니다.

foo = long_function_name(
var_one, var_two,
var_three, var_four)


나쁜예



1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 나쁜예: 

# 첫번째 전달인자들이 세로로 정렬이 되지 않은 경우

foo = long_function_name(var_one, var_two,
var_three, var_four)

# 추가적인 들여쓰기가 필요한 경우
# 추가적인 들여쓰기가 없을경우, 전달인자들과 print() 와 구분이 안갑니다.

def long_function_name(
var_one, var_two, var_three,
var_four):
print(var_one)


선택 사항



이어지는 줄에서의 4-칸 스페이스 룰은 선택 사항입니다. 4칸 보다 더 쓸수도, 덜 쓸수도 있습니다.


1
2
3
4
5
# hanging indents 는 4칸 외에 공간으로 들여쓰기가 가능합니다 

foo = long_function_name(
var_one, var_two,
var_three, var_four)

조건문이 너무 길어질때


if구문의 조건 부분이 너무 길어져서 다수의 줄이 된다면,


if 다음에 한칸을 띄고 괄호를 열어줍니다.

if ():

이렇게 쓰면, 자연스럽게 다음줄부터 4칸 들여쓰기가 됩니다



조건부분이 너무 길고, 밑에 실행 가능한 함수등과 구분짓고 싶을때 아래와 같이 써줍니다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 추가 들여쓰기가 없음
# do_something() 부분이 자연스럽게 들여쓰기가 됩니다.

if (this_is_one_thing and
that_is_another_thing):
do_something()

# 주석을 달아줘서 조건 부분과 함수 부분을 구분합니다
# 주석과 코드의 색깔을 표시해주는 에디터가 많기 때문에 구분이 가능합니다.

if (this_is_one_thing and
that_is_another_thing):
# Since both conditions are true, we can frobncate.
do_something()


# 조건문이 이어지는 줄에 추가로 들여쓰기를 넣어줍니다

if (this_is_one_thing
and that_is_another_thing):
do_something()


여러 줄에서 닫히는 소괄호/중괄호/대괄호


맨마지막 줄 다음줄에 닫는 괄호를 넣어줍니다. 괄호를 따로 들여쓰기를 해주어야 되겠죠? ㅎㅎ


코드를 보면서 이해합니다.



1
2
3
4
5
6
7
8
9
10
11
12
13
# 마지막 줄의 ] 는 추가로 들여쓰기가 되었습니다.

my_list = [
1, 2, 3,
4, 5, 6,
]

# 마지막 줄의 ) 는 추가로 들여쓰기가 되었습니다.

result = some_function_that_takes_arguments(
'a', 'b', 'c',
'd', 'e', 'f',
)

혹은, 닫히는 소괄호/중괄호/대괄호 들은 첫번째 줄의 시작점에 두어도 괜찮습니다. (밑에 코드 참조)



1
2
3
4
5
6
7
8
9
10
11
12
13
# 마지막 줄의 ] 는 추가로 들여쓰기가 되었습니다.

my_list = [
1, 2, 3,
4, 5, 6,
]

# 마지막 줄의 ) 는 추가로 들여쓰기가 되었습니다.

result = some_function_that_takes_arguments(
'a', 'b', 'c',
'd', 'e', 'f',
)



마치며..


PEP에서 들여쓰기 부분이 가장 초입인데. 뭔가 가장 헷갈렸습니다.

표현들이 좀 이상해서 더 애먹은것 같습니다. 세번째 쯤 보니까 이제 좀 이해가 가는듯 합니다.