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

0%

PEP8 Whitespace in Expressions and Statements - 2편

수식과 구문안에서 빈공간 - 기타 권장 사항들



수식과 구문 안에 공백들에 대한 기타 권장 사항들입니다.



뒤에오는 빈공간은 언제나 피해야 합니다



공백들은 보이지 않기 때문에 혼란 스러울수 있습니다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 빈공간 후에 \ 를 사용 

print("I'm the best" \)
print("I'm the best
\")

# 빈공간이 계속되는 줄로 세어지지 않을때,
# 아래 print 문에서 두번째줄은 계속되는 줄로 세어지지 않습니다.
# 이어지는 줄이 아닌데도 괜히 사용하면, 시각적으로나 논리적으로 혼란만 초래합니다.

print("I'm the best"


)


Binary Operator 양쪽 사이드



이항 연산자 양쪽 사이드에는 항상 하나의 공백을 넣어줍니다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 연산자 앞뒤로 빈공간이 있는걸 확인 할수 있습니다. 

if a = b:
if a == b:
if a > b:
if a < b:
if a != b:
if a <= b:
if a >= b:
if a in b:
if a not b:
if a is b:
if a is not b:
if a and b:
if a or b:
a += b
a -= b


우선순위가 다른 연산이 사용되는 경우



우선순위가 낮은 연산에 공백을 추가해 줍니다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 좋은예 
i = i + 1
submitted += 1
x = x*2 - 1

# x*2 가 우선순위가 더 높은 연산이므로 공백을 추가해주지 않습니다.
# 하지만 - 연산에는 앞뒤로 공백을 추가해 줍니다.


hypot2 = x*x + y*y
c = (a+b) * (a-b)

# 곱하기와 더하기가 같이 존재할때 곱셈이 덧셈보다 우선순위가 높습니다. 따라서, *에는 공백을 안줍니다.
# () 안에 있는 연산이 우선순위가 더 높습니다. 따라서 괄호안에 있는 + - 에는 공백을 안줍니다.


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

# 연산자 뒤에 공백이 하나도 없습니다.
i=i+1

# 연산자 주변에 공백이 양쪽에 적용되지 않았습니다.
submitted +=1

# 우선순위가 높은 연산에 공백을 잘못 적용했습니다.

x = x * 2 - 1

hypot2 = x * x + y * y
c = ( a + b ) * ( a - b )


함수의 annotation



함수의 annotation 에서는 콜론에 대한 보통 방식을 따르고

-> 주위에 빈공간을 넣어줍니다.



1
2
3
4
5
6
7
# 좋은예 
def munge(input: AnyStr):
def munge() -> PosInt:

# 나쁜예
def munge(input:AnyStr):
def munge()->PosInt:


키워드 인자 주위의 공백



키워드 인자를 표시할때 사용되는 = 주위에 공백을 넣지 않습니다.



1
2
3
4
5
6
7
# 좋은예 
def complex(real, imag=0.0):
return magic(r=real, i=imag)

# 나쁜예
def complex(real, imag = 0.0):
return magic(r = real, i = imag)

그렇지만, 기본값을 가지는 인자 annotation 을 합칠때에는

=주위에 공백을 넣어줍니다.


1
2
3
4
5
6
7
# 좋은예 
def munge(sep: AnyStr = None): ...
def munge(input: AnyStr, sep: AnyStr = None, limit=1000): ...

# 나쁜예
def munge(input: AnyStr=None): ...
def munge(input: AnyStr, limit = 1000): ...


같은줄에 여러개의 statement



같은줄에 여러개의 statement 를 가지는것은 권장 되지 않습니다.



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

if foo == 'blah':
do_blah_thing()
do_one()
do_two()
do_three()

# 나쁜예

if foo == 'blah':do_blah_thing()
do_one(); do_two(); do_three()


조건이 많은 구문에서 if/for/while



이따금씩, if/for/while 을 같은줄에 넣는것은 괜찮습니다. 하지만, 절대로 조항이 많은 구문에서는 그렇게 쓰면 안됩니다.


또한, 긴줄을 지나치게 접는것도 피해야합니다.



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

if foo == 'blah': do_blah_thing()
for x in 1st: total += x
while t< 10: t = delay()

# 위 나쁜예를 고치면, 아래와 같이 고쳐집니다.

if foo == 'blah':
do_blah_thing()
for x in 1st:
total += x
while t < 10:
t = delay()


PEP에서 권장하지 않는 코드



1
2
3
4
5
6
7
8
9
10
11
# 틀린예 

if foo == 'blah': do_blah_thing()
else: do_non_blah_thing()

try: something()
finally: cleanup()

do_one(); do_two(); do_three(long, argument, list, like, this)

if foo == 'blah': one(); two(); three()


마치며..


공백에 대한 기타 권장사항들을 알아보았습니다.

공백을 권장사항에 따라 적절하게 적용해서, 더 깔끔하게 코드를 써봅시다~