국민대, 파이썬, 데이터

w2 Python Primer


1. What is Python?

1.1 History

  1. 1991년 네덜랜드 국립 연구소의 Guido Van Rossum에 의해 발표
  2. “Python“이라는 이름은 코메디 프로그램 “Monty Python’s Flying Circus”에서 유래
    • Python의 원래 의미는 그리스 신화에 나오는 거대한 뱀
  3. 2000년 Python2.0
  4. 2008년 Python3.0

1.2 특징

1) 대화식 인터프리터

대화식 셀에서는 유효한 문장 또는 일련의 문장들을 입력하고 그 결과를 바로 확인할 수 있습니다. 파이썬을 대화식 모드로 사용하고 있을 때 특수한 변수인 _는 최종 연산 결과를 담습니다.

2) 동적 타입 언어

파이썬은 프로그램이 실행되는 도중 변수 이름에 묶여 있는 값 또는 타입이 변할 수 있는 동적 타입 언어입니다. 대입 연산자는 변수 이름과 값을 연결하기만 합니다.


In [10]:
price = 1000
rate = 0.05
num_years = 5

In [6]:
type(rate)


Out[6]:
float

In [7]:
type(price)


Out[7]:
int

In [8]:
price = price * (1+rate)
price


Out[8]:
1050.0

In [9]:
type(price)


Out[9]:
float

2. Basic

2.1 들여쓰기(Indentation)

들여쓰기는 함수 몸체, 조건문 루프, 클래스 등 다양한 코드 블록을 나타냅니다. 들여쓰기로 탭을 사용할 수 있지만 권장하지 않습니다. 스페이스를 사용하는 것이 파이썬 프로그램 커뮤니티에서 보편적으로 선호되는(그리고 권장되는) 방식입니다. 또한 보통 4칸을 권장합니다. 말 그대로 의무가 아니라 권장이기 때문에 일관성만 지키면 2칸이든 1칸이든 4칸이든 상관은 없습니다. 하지만 파이썬 개발자가 4칸을 안지킨다면 초보 취급 당한다지요..?!

이런 코딩 스타일을 파이썬은 문서화해 놓고 있습니다. Coding Convention이라고도 부르는 것을 파이썬에서는 Python Enhancement Proposals(PEP)라고 부릅니다. 들여쓰기에 대한 것은 https://www.python.org/dev/peps/pep-0008/#indentation 이것에 가시면 확인할 수 있습니다.


In [11]:
a = True
if a:
    print("True")
    print("asasdf")
else:
    print("False")


True

2.2 Code Block starts with 콜론(:)

코드 블록의 시작은 콜론(:)으로 합니다. 문맥 상 들여쓰기를 기준으로 들여쓰기가 없는 곳이 코드 블록의 끝이 됩니다.


In [12]:
a = True
if a:
    print("True")
else:
    print("False")


True

위의 코드를 다시 한 번 보도록 하겠습니다. 매우 간단하지요!? 그리고 코드 블록은 if에서 시작이 됩니다. 참일 경우에는 첫 번째 블록을 실행하고 거짓을 경우에는 else 다음 블록을 실행하게 됩니다. 다른 언어를 해보신 분들에겐 코드 블록이 없고 콜론으로 시작하는 이런 문법 형태를 매우 곤혹스러워 합니다. 하지만 계속 하시다보면 굉장히 매력 포인트로 느껴지실 겁니다.

// Javascript
var a=true;
if (a==true) {
    alert("True");
    ...
}

2.3 주석(Comment)

주석은 개발할 때 매우 중요합니다. 개발자의 의도를 도무지 모를 때 한 줄기 주석이 큰 힘이 되어줍니다.

  1. Single line: #
  2. Multiple line
    1. '''
    2. """

2.4 0부터 시작

파이썬은 순서를 가지는 개첵에서 처음을 0으로 시작합니다.


In [12]:
# List
lst = [1, 2, 3]
lst[0]


Out[12]:
1

2.5 패키지(디렉토리) > 모듈(파일) > 객체

  1. 패키지: 디렉토리
  2. 모듈: 파일
  3. 클래스 or 함수: 모듈 안의 객체

위와 같은 구조를 가지고 있습니다. IPython 이라는 패키지를 pip을 통해서 설치를 했다면 IPython 디렉토리 안에 있는 display라는 파일안의 Image라는 클래스를 사용하겠다고 선언하는 방법은 아래와 같습니다.

from IPython.display import Image

2.6 클래스의 이름은 CapWords로

파이썬에서는 클래스를 만들 때 통상 CapWords를 따릅니다. 즉 단어의 시작하는 첫 글자를 대문자로 해서 이름을 붙입니다. 그러나 의무가 아닙니다. 권장 사항이므로 소문자로 시작해도 실행은 아주 잘~ 됩니다. 다만 다른 개발자들이 볼 때 이 아이 초보자이네~ 싶은 생각이 듭니다. 그 보다 더 중요한 것은 이 객체가 클래스인지 아니면 함수인지 한 눈에 알아보기가 어렵다는 것입니다.


In [15]:
class FirstClass():
    def __init__(self):
        print("This is a class you made first.")

In [16]:
a = FirstClass()


This is a class you made first.

2.7 문서 내 한글 사용

문서의 맨 앞에 아래 내용을 삽입합니다.


In [25]:
# -*- coding: UTF-8 -*-

혹은 아래의 내용을 삽입하는데, 위의 것이나 아래 것 두 개 모두 차이점이 없습니다.


In [26]:
# coding: UTF-8

2.8 파이썬의 모든 것은 객체

파이썬 프로그램에서 모든 데이터는 객체(object)라는 개념을 사용하여 저장됩니다. 가장 기본이 되는 데이터 타입인 숫자, 문자열, 리스트, 사전 모두 다 객체입니다. 이 것은 다음 강의 때 더 자세히 살펴보도록 하겠습니다. 이번에는 딱 하나만 기억하시면 됩니다. 객체라는 것에는 행동과 속성이 있다는 것입니다. 마치 옆에 앉아 있는 친구가 인간이라는 것에서 만들어져 행동과 속성을 갖고 있는 것과 마찬가지입니다.

단순히 문자처럼 보이는 a라는 것도 파이썬에서는 객체입니다. 객체 타입이 str인 객체인 것이지요. 한 번 보겠습니다.


In [17]:
type("a")


Out[17]:
str

In [18]:
type(1)


Out[18]:
int

숫자 1도 마찬가지입니다. 단순히 숫자처럼 보이지만 이것 또한 행동을 가지고 있는 객체입니다.


In [19]:
dir(1)


Out[19]:
['__abs__',
 '__add__',
 '__and__',
 '__bool__',
 '__ceil__',
 '__class__',
 '__delattr__',
 '__dir__',
 '__divmod__',
 '__doc__',
 '__eq__',
 '__float__',
 '__floor__',
 '__floordiv__',
 '__format__',
 '__ge__',
 '__getattribute__',
 '__getnewargs__',
 '__gt__',
 '__hash__',
 '__index__',
 '__init__',
 '__int__',
 '__invert__',
 '__le__',
 '__lshift__',
 '__lt__',
 '__mod__',
 '__mul__',
 '__ne__',
 '__neg__',
 '__new__',
 '__or__',
 '__pos__',
 '__pow__',
 '__radd__',
 '__rand__',
 '__rdivmod__',
 '__reduce__',
 '__reduce_ex__',
 '__repr__',
 '__rfloordiv__',
 '__rlshift__',
 '__rmod__',
 '__rmul__',
 '__ror__',
 '__round__',
 '__rpow__',
 '__rrshift__',
 '__rshift__',
 '__rsub__',
 '__rtruediv__',
 '__rxor__',
 '__setattr__',
 '__sizeof__',
 '__str__',
 '__sub__',
 '__subclasshook__',
 '__truediv__',
 '__trunc__',
 '__xor__',
 'bit_length',
 'conjugate',
 'denominator',
 'from_bytes',
 'imag',
 'numerator',
 'real',
 'to_bytes']

숫자 1에는 여러 행동을 가지고 있습니다. 그 중에는 더하라는 연산 행동도 가지고 있다고 합니다. 한 번 해볼까요!?


In [20]:
1 + 1


Out[20]:
2

파이썬 내장 함수인 dir()을 통해서 숫자 1이 뒤에 +라는 연산자를 만나면 어떤 행동을 하는지 한 번 찾아보도록 하겠습니다.


In [9]:
dir(1)


Out[9]:
['__abs__',
 '__add__',
 '__and__',
 '__class__',
 '__cmp__',
 '__coerce__',
 '__delattr__',
 '__div__',
 '__divmod__',
 '__doc__',
 '__float__',
 '__floordiv__',
 '__format__',
 '__getattribute__',
 '__getnewargs__',
 '__hash__',
 '__hex__',
 '__index__',
 '__init__',
 '__int__',
 '__invert__',
 '__long__',
 '__lshift__',
 '__mod__',
 '__mul__',
 '__neg__',
 '__new__',
 '__nonzero__',
 '__oct__',
 '__or__',
 '__pos__',
 '__pow__',
 '__radd__',
 '__rand__',
 '__rdiv__',
 '__rdivmod__',
 '__reduce__',
 '__reduce_ex__',
 '__repr__',
 '__rfloordiv__',
 '__rlshift__',
 '__rmod__',
 '__rmul__',
 '__ror__',
 '__rpow__',
 '__rrshift__',
 '__rshift__',
 '__rsub__',
 '__rtruediv__',
 '__rxor__',
 '__setattr__',
 '__sizeof__',
 '__str__',
 '__sub__',
 '__subclasshook__',
 '__truediv__',
 '__trunc__',
 '__xor__',
 'bit_length',
 'conjugate',
 'denominator',
 'imag',
 'numerator',
 'real']

3. Practice Makes Perfect

우리는 아직 아무것도 공부한 적이 없습니다. 하지만 위에 조금씩 보였던 파이썬 소스와 아래의 문제를 스스로 탐색해보면서 파이썬이 어떻게 동작하는지 천천히 찾아보도록 합시다. 스스로 찾아봐야 기억에 많이 남습니다.

Problem 1: 100 더하기 100의 결과값을 숫자 3으로 나누고 이 결과값의 타입이 무엇인지 알아보자.


In [1]:
100 + 100


Out[1]:
200

In [3]:
_ / 3


Out[3]:
66.66666666666667

In [5]:
type(_)


Out[5]:
float

Problem 2: age라는 변수에 본인의 나이를 할당해보고, 만약 19 이상이면 '성인'이라는 글씨를 출력하고 아니면 '미성년'이라는 글씨를 출력해봅시다.


In [9]:
age = 19

In [10]:
if age >= 20:
    print("성인")
else:
    print("미성년")


미성년