파이썬 문법 빠르게 훑어 보기

이 노트북은 제이크 반더플라스(Jake VanderPlas)의 A Whirlwind Tour of Python(OReilly Media, 2016)를 기반으로 만들어졌습니다. 이 내용은 CC0 라이센스를 따릅니다. 전체 노트북의 목록은 https://github.com/rickiepark/WhirlwindTourOfPython 에서 볼 수 있습니다.

< 파이썬 코드를 실행하는 법 | 목차 | 변수와 객체 >

 

파이썬은 원래 교육용 언어로 개발되었지만 편리함과 깔금한 문법때문에 초보자나 전문가 모두에게 환영받고 있습니다. 파이썬 문법의 간결함 때문에 어떤 사람들은 이를 실행 가능한 의사 코드라고 부르기도 합니다. 사실 저의 경험도 C 같은 언어로 쓰인 코드보다 파이썬 스크립트가 훨씬 읽기에 편하고 이해하기 쉬웠습니다. 여기에서 파이썬 문법의 주요한 기능을 이야기해 보겠습니다.

문법이란 언어의 구조를 의미합니다(즉, 올바른 형태의 프로그램을 구성하기 위한 것입니다). 당분간 코드의 역할에 대해서는 생각하지 않겠습니다(문법에 나오는 단어와 기호의 의미). 하지만 나중에 여기에 대해 살펴보겠습니다.

다음과 같은 코드를 생각해 보겠습니다:

# 중간 지점을 정합니다
midpoint = 5

# 두 개의 빈 리스트를 만듭니다
lower = []; upper = []

# 숫자를 큰 쪽과 작은 쪽으로 나눕니다
for i in range(10):
    if (i < midpoint):
        lower.append(i)
    else:
        upper.append(i)

print("작은 것:", lower)
print("큰 것:", upper)
작은 것: [0, 1, 2, 3, 4]
큰 것: [5, 6, 7, 8, 9]

이 코드는 조금 바보스러워 보이지만 몇가지 중요한 파이썬 문법을 간결하게 보여 주고 있습니다. 하나씩 짚어가면서 파이썬 문법의 특징을 설명하도록 하겠습니다.

주석은 #으로 구분합니다

위 스크립트의 맨 첫줄은 주석입니다:

# 중간 지점을 정합니다

파이썬에서 주석은 샵 기호(#)로 시작하며 인터프리터는 줄이 바뀌기 전까지 그 이후에 나오는 모든 것을 무시합니다. 예를 들어, 위와 같이 한 줄에 하나의 주석을 쓸 수 있고, 또 코드의 뒷부분에 쓸 수도 있습니다. 가령:

x += 2  # x = x + 2 의 약식 표기

파이썬에는 C나 C++에서 사용하는 /* ... */와 같이 여러 줄의 주석을 위한 문법이 없습니다. 하지만 여러 줄로 문자열을 쓰는 기능을 주석의 대안으로 자주 사용합니다(문자열 처리와 정규 표현식을 참고하세요).

라인의 끝이 문장의 끝입니다

코드에서 다음 줄은 아래와 같습니다

midpoint = 5

이는 할당 연산입니다. midpoint란 이름의 변수를 생성하고 값 5를 할당했습니다. 라인의 끝이 그냥 이 문장의 마지막으로 인식됩니다. 모든 문장을 세미콜론(;)으로 끝내야 하는 C나 C++같은 언어와 대조되는 점입니다.

파이썬에서는 문장을 다음 라인에 이어서 쓰고 싶다면 다음과 같이 문장의 끝에 “\” 기호를 써야 합니다:

x = 1 + 2 + 3 + 4 +\
    5 + 6 + 7 + 8

\” 기호를 쓰지 않아도 괄호 안의 표현식은 다음 라인에 이어서 쓸 수 있습니다:

x = (1 + 2 + 3 + 4 +
     5 + 6 + 7 + 8)

대부분의 파이썬 스타일 가이드는 첫 번째 방식(“\” 기호를 사용)보다 두 번째(괄호 사용)를 권장합니다.

세미콜론으로도 문장을 끝낼 수 있습니다

이따금 한 줄에 여러 문장을 쓸 때가 있습니다. 코드에서 그 다음 라인은 다음과 같습니다.

lower = []; upper = []

여기에서 C에서 친숙한 세미콜론(;)이 파이썬에서 한 라인에 두 개의 문장을 쓰기 위해 사용되는 것을 볼 수 있습니다. 이 코드는 기능상 완전히 다음과 동일합니다

lower = []
upper = []

세미콜론을 사용해 한 라인에 두 문장을 넣는 것은 대부분의 파이썬 스타일 가이드에서 권장하지 않습니다. 하지마 이따금 편리할 때가 있는 건 사실입니다.

들여쓰기: 공백으로!

그 다음은 메인 코드 블럭입니다:

for i in range(10):
    if i < midpoint:
        lower.append(i)
    else:
        upper.append(i)

이 코드는 루프와 조건문을 포함한 복합적인 제어 문장입니다(나중에 세가지 종류의 제어문을 살펴 보겠습니다). 지금은 파이썬에서 가장 논란이 되는 특징을 설명하는데 집중하겠습니다. 파이썬 문법에서는 공백이 중요합니다!

프로그래밍 언어에서 코드의 블럭은 하나의 단위로 취급되는 문장들입니다. 예를 들어, C에서 코드 블럭은 중괄호로 구분합니다:

// C 코드
for(int i=0; i<100; i++)
{
    // 중괄호가 코드 블럭을 지정합니다
    total += i;
}

파이썬에서 코드 블럭은 들여쓰기로 구분됩니다:

for i in range(100):
    # 들여쓰기가 코드 블럭을 지정합니다
    total += i

파이썬에스 들여쓰기된 코드 블럭은 항상 콜론(:)으로 끝나는 라인 뒤에 옵니다.

들여쓰기를 사용하면 파이썬 코드에서 권장하는 균일하고 가독성있는 스타일을 강제하는데 도움이 됩니다. 하지만 처음 접하는 사람들에게는 혼란을 줄 수 있습니다. 예를 들어, 다음 두 코드는 다른 결과를 만듭니다:

>>> if x < 4:         >>> if x < 4:
...     y = x * 2     ...     y = x * 2
...     print(x)      ... print(x)

왼쪽 코드에서 print(x)는 들여쓰기 블럭 안에 있으므로 x4보다 작을 때만 실행될 것입니다. 오른쪽 코드에서 print(x)는 블럭 밖에 있기 때문에 x의 값에 관계없이 항상 실행됩니다!

파이썬의 공백 개념은 다른 언어에 익숙한 프로그래머들을 종종 당황케하지만 사실 코드 블럭 들여쓰기를 강제하지 않는 언어들에 비해 훨씬 더 일관되고 가독성있는 코드를 만들어 줍니다. 파이썬의 공백 스타일이 맘에 들지 않더라도 한 번 시도해 보길 권합니다. 제가 그랬듯이 아마 이를 좋아하게 될 것입니다.

마지막으로, 들여쓰기 코드 블럭에 사용되는 공백의 은 코드 전체에 일관되는한 사용자에게 달려 있습니다. 관례적으로 대부분의 스타일 가이드는 네 개의 공백으로 코드 블럭을 들여쓰라고 권장합니다. 이 책에서도 이 스타일을 따릅니다. Emacs나 Vim 같은 많은 텍스트 에디터는 자동으로 네 개의 공백으로 들여쓰기를 하는 파이썬 모드를 지원합니다.

라인 의 공백은 무시합니다

라인의 시작 전에 있는 공백은 (코드 블럭을 지정하기 위해) 의미있는 공백이지만, 파이썬 코드의 라인 에 있는 공백은 무시됩니다. 예를 들어, 다음 세 개의 문장은 모두 동일합니다:

x=1+2
x = 1 + 2
x             =        1    +                2

빈 공백을 남발하면 읽기 힘든 코드를 만들게 됩니다. 사실 공백을 남용하는 것은 의도적으로 난해한 코드를 만드는 주요 방법입니다(어떤 사람들은 장난삼아 합니다). 공백을 효과적으로 사용하면 아주 읽기 좋은 코드를 만들 수 있습니다. 특히 연산자가 연달아 나오는 경우에 그렇습니다. 음수를 제곱하는 다음 두 식을 비교해 보세요:

x=10**-2

x = 10 ** -2

한 눈에 봐도 공백이 있는 두 번째가 아주 훨씬 읽기가 쉽습니다. 대부분의 파이썬 스타일 가이드는 이항 연산 앞뒤로 하나의 공백을 넣고, 단항 연산자에는 공백을 넣지 않도록 권장합니다. 파이썬 연산자에 대해서는 연산자에서 자세히 다루겠습니다.

괄호는 그룹핑과 호출에 사용됩니다

이전 코드에서 괄호가 두 번 사용되었습니다. 첫 번째는 전형적으로 문장이나 수학 계산을 묶을 때 사용됩니다:

2 * (3 + 4)
14

함수를 호출할 때도 사용됩니다. 다음 코드에서 변수 값을 출력하기 위해 print() 함수를 사용합니다(아래 사이드바 참조). 여는 괄호와 닫는 괄호의 쌍으로 함수 호출을 나타냅니다. 괄호 사이에 함수에 전달할 매개변수를 둘 수 있습니다:

print('first value:', 1)
first value: 1
print('second value:', 2)
second value: 2

어떤 함수는 아무런 매개변수 없이 호출될 수 있지만 함수 호출을 위해 여는 괄호와 닫는 괄호는 여전히 필요합니다. 리스트의 sort 메서드가 이런 경우입니다:

L = [4,2,3,1]
L.sort()
print(L)
[1, 2, 3, 4]

sort 뒤의 “()“는 함수가 실행된다는 것을 나타내고 필요한 매개변수가 없더라도 꼭 있어야 합니다.

사이드바: print() 함수

위에서 print() 함수를 사용했습니다. print() 함수가 파이썬 2.x과 파이썬 3.x 사이에 달라진 것 중 하나입니다. 파이썬 2에서는 print가 문장으로 취급됩니다. 즉 다음과 같이 쓸 수 있습니다.

# Python 2
>> print "first value:", 1
first value: 1

여러가지 이유로 파이썬 언어 관리자는 파이썬 3에서 print() 함수로 바꾸었습니다. 다음과 같이 씁니다

# Python 3
>>> print("first value:", 1)
first value: 1

이것이 파이썬 2와 3 사이에 호환되지 않는 것 중에 하나입니다. 이 책을 쓰는 시점에 양쪽 파이썬 버전으로 쓰여진 예제를 많이 볼 수 있습니다. 코드에 print() 대신 print 문장이 보인다면 파이썬 2로 쓰여진 코드를 보고 있다는 신호입니다.

마무리와 더 공부할 것

여기에서 파이썬 문법에서 아주 핵심적인 특징을 간단하게 살펴 보았습니다. 이 노트북의 목적은 다음 섹션에서 코드를 읽을 때 이해하기 쉽도록 만드는 것입니다. 앞서 여러번 언급한 “스타일 가이드”는 팀이 일관된 스타일로 코드를 작성하는데 도움을 줍니다. 파이썬에서 가장 널리 사용되는 스타일 가이드는 PEP8이고 https://www.python.org/dev/peps/pep-0008/ 에 있습니다. 본격적으로 파이썬 코드를 작성하기 시작할 때 이 문서를 자세히 읽어보는 것이 좋습니다! 이 스타일 가이드는 많은 파이썬 구루(guru)들의 지혜를 담고 있어서 코드에 감지하기 어려운 실수와 버그가 생기는 것을 피하도록 도와줄 수 있습니다.

 

< 파이썬 코드를 실행하는 법 | 목차 | 변수와 객체 >

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중

This site uses Akismet to reduce spam. Learn how your comment data is processed.