python

파이썬에서 Comma(,)를 활용할 수 있는 몇가지 팁을 정리해보고자 한다. 아마 많은 사람들이 이미 다 알고있을 내용이기 때문에, 이 또한 파이썬 초보자들을 대상으로 한다.

파이썬에서 Comma(,)는 다음과 같은 상황에서 사용되는데 크게 4가지의 경우가 있다.

  • 다중값을 사용할 때
  • 단일 튜플을 사용할 때
  • Trailing comma를 사용할 때
  • (Python 2) 한 줄 출력이 필요할 때


1. 다중값을 사용할 때

일반적인 문법으로 파이썬 개발자라면 이미 모두가 사용하고 있는 케이스이다. 동시에 다중값 할당을 하거나, 값을 여러개 반환할 때 사용된다.

# 동시 선언 및 초기화
a, b = 1, 2

# 값 교환 (Swap)
a, b = b, a

# 다중값 반환
def add_and_mul(a, b):
    add = a + b
    mul = a * b
    return add, mul


2. 단일 튜플을 사용할 때

파이썬엔 튜플(tuple)이라는 Immutable한 리스트형 타입이 있다. list 타입의 경우 [1]와 같이 하나의 원소를 가진 리스트를 선언하면 원소가 하나인 list타입의 값을 갖게 되지만, tuple의 경우에는 위와 동일하게 하나의 원소만 선언할 경우, 우리가 원하는 원소가 하나인 tuple타입의 값을 얻을 수 없다. 이 때, Comma를 사용하면 단일 튜플을 만들 수 있다.

>>> type((1))
<class 'int'>
>>> type((1,))
<class 'tuple'>

(1)과 같이 선언하면 튜플처럼 보이지만 이는 그냥 하나의 정수값을 나타내는 expression으로 처리되어 int형의 1의 값을 갖게된다. 따라서, 이 표현식을 tuple 타입의 값으로 사용하려면 (1,)와 같이 원소 뒤에 Comma를 붙여 실제 tuple 타입의 값을 갖게 해야한다.

여기서 한 가지 의문이 들 수도 있다. 원소가 하나인 튜플을 언제 사용하는가? 말 그대로 원소가 하나인 리스트를 사용하는것과 같이 원소가 하나인 튜플이 필요한 경우가 분명히 있을 것이다. 특히, 어떤 특정 함수가 튜플을 인자로 받는 경우에 튜플값을 하나만 전달하고자 할 때 단순히 (1)을 써서 타입 에러를 겪어본 적이 한번쯤은 있을 것이다. 이 때 바로 위와 같이 실제 튜플 타입의 데이터를 인자로 전달하면 해당 문제를 해결할 수 있다.

# 타입 에러 발생
execute_query('...', (1))

# 정상적으로 처리
execute_query('...', (1,))


3. Trailing comma를 사용할 때

사실 위에서 본 팁이라고 하는것들은 일종의 파이썬 문법 자체이므로 팁이라고는 하기 어려우며, 팁이라고하면 이 부분이 팁이 될 수 있겠다. Trailing comma란 리스트형 데이터를 다음과 같은 형태로 선언할 때 맨 뒤에 붙이는 Comma를 뜻한다.

scores = [
    100,
    93,
    82,
    97,
]

위에서 Trailing comma97,에서 보이는 Comma를 가리키는데, 얼핏보면 이걸 왜 쓰는지 의문이 들것이다. 결론부터 말하면, 목적은 실수 방지와 Git과 같은 VCS를 통한 소스코드 관리에서의 용이함이 있다.


실수 방지

이는 사람의 실수를 방지하기 위한 것이며, Trailing comma를 쓰는 주된 이유라기보단 부수적인 효과 및 목적이다.

scores = [
    100,
    93,
    82,
    97
    76
]

scores에 새로운 값을 추가하는 경우, 리스트 최하단에 데이터를 추가하게 되는데 간혹 실수로 윗 라인에 Comma를 빼먹고 바로 쓰는 경우가 있다. 이 경우, Trailing comma를 사용하면 Comma를 빼먹는 실수를 방지할 수 있게된다.


VCS를 통한 소스코드 관리에서의 용이함

Trailing comma를 쓰는 주된 목적이다. 우선 Trailing comma를 사용하지 않는 경우를 살펴보자.

names = [
    'James',
    'Smith',
    'Ming',
    'John'
]

이제 위 데이터에 새로운 이름을 하나 추가한다고 해보자.

names = [
    'James',
    'Smith',
    'Ming',
    'John',
    'Torvalds'
]

위와 같이 추가가 되었으며, 별 문제 없어보인다. 하지만, 이를 git diff로 살펴보면 다음과 같은 결과를 볼 수 있다.

@@ -2,5 +2,6 @@ names = [
     'James',
     'Smith',
     'Ming',
-    'John'
+    'John',
+    'Torvalds'
 ]

우리는 분명히 하나의 데이터만 추가를 했을뿐인데, 하나의 데이터가 삭제되고 두 개의 데이터가 추가된 것처럼 나온다. 코드상으로는 문제가 없지만, 이는 실제 커밋 히스토리 변경사항을 파악하는데에는 별로 좋지 않다. Trailing comma를 사용하면 위와 같은 문제를 해결할 수 있다.

names = [
    'James',
    'Smith',
    'Ming',
    'John',
]

처음부터 위와 같이 선언을 하고 추후에 데이터를 추가하는 경우 실제로 변경되는 코드도 한 줄로 표시되기 때문에 변경사항을 파악하기가 훨씬 수월해진다.

@@ -3,4 +3,5 @@ mes = [
     'Smith',
     'Ming',
     'John',
+    'Torvalds',
 ]

우리의 의도가 diff에도 그대로 반영 되었으며, 훨씬 보기가 수월해졌다. 이는 데이터 추가 뿐만 아니라 삭제를 하는 경우에도 동일하다.


4. 한 줄 출력이 필요할 때

이는 Python 2에서만 유효한 팁으로 데이터들을 한 줄로 출력하고 싶은 경우 사용할 수 있다.

#  print를 그대로 사용하는 경우
for i in range(5):
    print i
"""
0
1
2
3
4
"""

# print에 comma를 붙여 사용하는 경우
for i in range(5):
    print i,
"""
0 1 2 3 4
"""


이상 파이썬에서 Comma(,)를 사용하는 케이스와 팁을 살펴보았다. 특히, 3번의 Trailing comma는 자주 사용되는 팁이니 숙지해두면 도음이 많이 될 것이다.