0. 개요


이전까지 아나콘다, 쥬피터 상에서 파이썬 3.5 버전을 다룰 수 있도록 환경을 세팅했다. 오늘 포스팅은 파이썬 문법 중 기억할만한 것들에 대해서 간략하게 정리해볼까 한다. 세팅했던 환경을 이용하기 위해서 쥬피터 노트북을 실행해보자. 이전 포스팅에서 다뤘던 것처럼 윈도우 환경에서는 파워쉘을 실행시켜 jupyter notebook 명령어를 입력하거나, 탐색기에서 Jupyter Notebook을 검색하여 실행하면 된다. 그러면 아래처럼 웹 브라우저가 시행될 것인데 여기서 몇 가지 파이썬 문법을 직접 수행하면서 알아볼 참이다. 상당히 기본적으로 치부되는 문법들은 과감하게 생략하고, 정리가 필요한 내용만 포스팅할 예정이므로 기본적인 문법을 위해서는 다음을 참조하는 편이 유익할 것이다.


열린 브라우저 창에서 우측 상단에 있는 [New] 버튼을 클릭하여 연습할 파이썬 파일을 생성해주자. 필자는 파일명을 Memorable로 정했다. 지난 시간에 개발 환경이 적절하게 설치되었는지 확인해보기 위해 다시 한 번 Hello World를 출력해봤다. 정상적으로 동작하는 것을 확인했으며, 이제부터 정리가 필요한 내용들을 하나씩 알아보자.


1. 리스트(List)


파이썬에서 유용하게 쓰이는 자료구조 중에 리스트가 있는데, 특징이 남달라서 정리 해볼만하다. 필자가 처음 파이썬을 접했을 때에는 리스트 = 배열인줄 알았다. 그러나 유사한 면이 있는 것은 맞지만 엄밀히 말하면 둘은 다르다. Java 혹은 C언어에서 다루는 배열은 동일한 타입만 요소로 다뤄질 수 있었는데 리스트는 서로 다른 타입의 데이터도 다룰 수 있다는 점이 가장 큰 차이다. 


1.1 리스트의 환형구조


리스트를 배열처럼 선언하여 사용하다보면 재미난 점이 있는데, 음수 인덱스를 이용한 접근이 가능하다는 점이다. 예시를 보면 금방 이해가 될 내용이다.




화면을 확인하면 알 수 있듯이 리스트는 [A, B, C, D, E]로 구성되어있는데 items[-1]로 접근하면 E를 출력하고, items[-2]로 접근하면 D를 출력하는 것을 확인할 수 있다. 0 번째 아이템이 A임을 감안하면 -1 번째 E, -2 번째 D가 나오는 것을 이해할 수 있는데 이는 곧 리스트의 구조가 환형(Circular)임을 파악할 수 있다. 이 부분을 잘 기억한다면 번잡한 함수-콜 없이 접근을 자유롭게 할 수 있을 것 같다.


1.2 slice


리스트를 일정 범위만큼 자르기 위해서 사용하는 방법이다. 대부분 언어에서는 이 기능을 함수나 메소드로 구현하고 있지만 파이썬에서는 인덱스에 특별한 입력을 통해 잘린 리스트를 반환할 수 있다.



items[1:3]으로 배열을 접근하여, 출력된 결과를 보면 B와 C가 출력된 것을 알 수 있다. 언뜻보면 '인덱스 1을 포함하고, 인덱스 3을 포함하지 않는 범위까지'라고 애매하게 이해될 수 있다. 필자도 이 부분이 항상 체계적이지 못하다고 생각했지만 수강했던 강의에서 확실하게 이해할 수 있었다. 위 인덱스의 내용 [1:3]이 의미하는 바를 다음처럼 기억하자. 

"리스트 요소(element) 사이사이를 지칭하는 인덱스 "


위 리스트의 요소 사이사이는 다음처럼 표현할 수 있다. [ ^ A ^ B ^ C ^ D ^ E ^ ]. 바로 ^로 표현한 사이사이를 지칭하는 것이 바로 [1:3]인 것이다. 1이 의미하는 것은 [A 뒤, B 앞]의 ^이고(왜냐하면 인덱스는 0부터 시작하니까), 3이 의미하는 것은 [C 뒤, D 앞]의 ^이다. 이 두 인덱스 사이를 출력해보면 결과적으로 B, C가 출력되는 것을 파악할 수 있다. 어려운 내용은 아니지만 기억하기에는 헷갈릴만한 내용이므로 정리해봤다.


1.3 List Comprehension


가장 기억 해야할만한 내용으로 리스트 전체에 대해 일괄적으로 동일한 작업을 반복하는 명령어다. 웹 프로그래밍할 때 자바스크립트 언어에서 동일한 기능이 있었지만 파이썬과는 문법이 사뭇 달랐다. 아래의 화면을 통해 이해해보자.



List Comprehension 확인을 위해서 이전에 선언했던 리스트를 [A. B, C ,D ,E] → [1, 2, 3, 4, 5]로 변경했다. 그리고 그 다음 라인을 통해 리스트 내에 모든 요소들에게 동일한 명령어를 수행하고 있다.

[temp * temp for temp in items]

 

위 명령어를 풀어서 설명하자면 items 리스트 안에 있는 모든 요소를 제곱하라는 의미다. 출력된 결과를 보면 [1, 4, 9, 16, 25]로 모든 요소가 제곱된 것을 확인할 수 있다. 강사님의 말로는 해당 명령어를 통해 구현한 반복문이 다른 언어에서 쓰이는 전형적인 for문, while문보다 빠른 속도를 제공한다고 한다. 내부적으로 어떤 원리인지는 모르겠지만 파이썬을 배우는 과정에서 기억할만한 내용이다.


2. 함수


이전까지 기본 문법은 생략하고, 그나마 리스트가 가진 특징에 대해서만 언급했는데 함수에 대해서도 정리하고 넘어가야할 내용이 있어 정리해본다. 파이썬의 함수는 임의의 갯수의 인수를 수용할 수 있다. 이를 Positional Arguments라 칭하고, 또한 이미 정의된 인수도 수용할 수 있는데 이를 Keyword Arguments라 한다. 이들에 대해서만 간단히 정리해보자.


2.1 Positional & Keyword Arguments


위에서 Positional Arguments와 Keyword Arguments에 대한 설명을 했으니 화면을 통해 실제적으로 어떻게 사용되는지 확인해보자.



첫 번째로 remainder 함수를 선언했다. remainder 함수는 숫자를 하나 입력받으면 미리 설정된 인수(Keyword Arguments)로 나누는 간단한 함수다. remainder(5)의 결과가 1 임을 확인할 수 있고, 그 바로 아랫 라인에서는 (5, 3)을 인수로 전달하여 number = 5, divisor = 3으로 대입된 것을 확인할 수 있다. 실제로 remainder(5, 3)과 remainder(5, divisor = 3)은 정확하게 일치하지만 코드 분석이나 가독성을 위해서 후자를 이용하는 것이 바람직하다. remainder 함수를 통해 Keyword Arguments에 대해서 알아봤다면 f 함수를 통해 둘 다 명확하게 알아보자. f 함수는 인수로 Positional Arguments와 Keyword Arguments를 받고 있다. 따라서 f(1, 2, c = 3, d = 4)를 출력해보면  Positional Arguments로 입력된 1, 2가 튜플의 자료구조 형태로 출력되는 것을 알 수 있고, Keyword Arguments로 입력된 c, d가 딕셔너리의 자료구조 형태로 출력되는 것을 확인할 수 있다.



오늘 알아본 것을 사람들이 이해하기 쉽게, 그리고 훗날 내용을 까먹을 내가 더 잘 리마인드 할 수 있도록 포스팅을 했지만 실제로 다룬 내용을 보면 참 부실하다. 강의를 진행하면 할수록 더 다룰 내용이 풍성해 지겠지만, 기본 문법을 생략에 생략을 거듭하다보니 정작 다룬 것은 아래 내용이 전부다.




3. 마치며...


개요에서 언급한 것처럼 언어를 시작할 때는 가장 기본적인 문법부터 익히는 것이 바람직할 것이다. 그러나 필자는 다양한 언어를 경험해봤기 때문에 기초적이고 다른 언어와 공통점이 많은 문법들은 따로 정리할 필요가 없다. 때문에 기본적인 문법을 익히기 위해서는 다음을 참조하길 추천한다. 필자가 학습한 내용 중에 기억할 필요한 내용을 추려서 정리하기 때문에 좋은 참고자료가 되긴 어렵겠지만, 나와 비슷한 수준을 지닌 사람들에게 도움이 되길 기대해본다.