다운로드
작성자: admin 작성일시: 2016-04-08 14:45:04 조회수: 5658 다운로드: 283
카테고리: Python 태그목록: Python

Python 시작하기

이 노트북은 처음으로 Python을 시작하는 사람이 실제로 명령어를 실행시키면서 기본 개념을 익히기 위한 문서이다.

In:
print("Hello, world!")
Hello, world!
요약: Python 버전에 따른 print 문법 차이
  • python 2

    • print 1
  • python 3

    • print(1)
  • python 2에서 python 3 문법을 사용하려면

    • from __future__ import print_function
    • 본 강의에서는 python 3 문법 사용
In:
a = 3
b = 2 * a
In:
a
b
Out:
6
요약: Python 기본 자료형

Basic Types 기본 자료형

  • Boolean 부울리언
  • Integer 정수
  • Float 부동소수점
  • Complex 복소수
  • None

Boolean 부울리언

In:
True, False
Out:
(True, False)
In:
test = (3 > 4)
test
Out:
False
In:
type(test)   
Out:
bool

Integer 정수

In:
a = 4
In:
type(a) 
Out:
int

Float 부동소수점

In:
c = 2.1
In:
type(c) 
Out:
float

Complex 복소수

In:
a = 1.5 + 0.5j
a
Out:
(1.5+0.5j)
In:
a.real
Out:
1.5
In:
a.imag
Out:
0.5
In:
type(1. + 0j) 
Out:
complex

Casting 자료형 변환

In:
float(1)
Out:
1.0
In:
7 * 3.
Out:
21.0

Division

In:
from __future__ import division
In:
3 / 2
Out:
1.5
In:
# without from __future__ import division
# 3 / 2   =>  1
In:
3 // 2
Out:
1

Power

In:
2**10
Out:
1024

Modulo

In:
8 % 3
Out:
2

Assignment

In:
a = 1
a += 1
a
Out:
2
In:
a = 1
a -= 1
a
Out:
0
In:
a = 10
a *= 2
a
Out:
20
In:
a = 10
a /= 2
a
Out:
5.0

Comparison 비교

$$ 2 > 1, \;\;\; 2 \geq 1, \;\;\; 2 = 1 $$
In:
2 > 1, 2 >= 1, 2 == 1
Out:
(True, True, False)
요약: Python 고급 자료형

Containers 고급 자료형

  • list 리스트
  • dictionary 사전
  • tuple 튜플
  • string 문자열

List 리스트

In:
l = ['red', 'blue', 'green', 'black', 'white']
type(l)     
Out:
list
요약: Python 인덱싱

Indexing 인덱싱

  • container 유형의 자료에서 일부 자료만 뽑아내는 일
In:
l[0]
Out:
'red'
In:
l[1]
Out:
'blue'
In:
l[-1]
Out:
'white'
In:
l[-2]
Out:
'black'

Slicing 슬라이싱

In:
l[2:4]
Out:
['green', 'black']
요약: Python 슬라이싱
  • l[start:stop:step]
    • start<= < stop
    • i = i + step
  • All slicing parameters are optional:
In:
l[2:]
Out:
['green', 'black', 'white']
In:
l[:2]
Out:
['red', 'blue']
In:
l[::2]
Out:
['red', 'green', 'white']
  • Lists are mutable
  • can be modified
In:
l
Out:
['red', 'blue', 'green', 'black', 'white']
In:
l[0] = 'yellow'
l
Out:
['yellow', 'blue', 'green', 'black', 'white']
In:
l[2:4] = ['gray', 'purple']
l
Out:
['yellow', 'blue', 'gray', 'purple', 'white']
  • list may have different types
In:
l = [3.14, -200, 'hello']
In:
l[1], l[2]
Out:
(-200, 'hello')

Methods 메소드

  • Add, Remove
In:
L = ['red', 'blue', 'green', 'black', 'white']
In:
L.append('pink')
In:
L
Out:
['red', 'blue', 'green', 'black', 'white', 'pink']
In:
L.pop() # removes and returns the last item
Out:
'pink'
In:
L
Out:
['red', 'blue', 'green', 'black', 'white']
In:
L.extend(['pink', 'purple']) # extend L, in-place
In:
L
Out:
['red', 'blue', 'green', 'black', 'white', 'pink', 'purple']
In:
L = L[:-2]
L
Out:
['red', 'blue', 'green', 'black', 'white']
  • Reverse
In:
r = L[::-1]
r
Out:
['white', 'black', 'green', 'blue', 'red']
In:
r.reverse()
In:
r
Out:
['red', 'blue', 'green', 'black', 'white']
In:
r2 = list(L)
r2
Out:
['red', 'blue', 'green', 'black', 'white']
In:
r2.reverse() # in-place
r2
Out:
['white', 'black', 'green', 'blue', 'red']
  • Concatenate and repeat lists
In:
r + L
Out:
['red',
 'blue',
 'green',
 'black',
 'white',
 'red',
 'blue',
 'green',
 'black',
 'white']
In:
r
Out:
['red', 'blue', 'green', 'black', 'white']
In:
r * 2
Out:
['red',
 'blue',
 'green',
 'black',
 'white',
 'red',
 'blue',
 'green',
 'black',
 'white']
  • Sort
In:
sorted(r) # new object
Out:
['black', 'blue', 'green', 'red', 'white']
In:
r
Out:
['red', 'blue', 'green', 'black', 'white']
In:
r.sort()  # in-place
In:
r
Out:
['black', 'blue', 'green', 'red', 'white']
  • All methods
    • r. + press
In:
r.
  File "", line 1
    r.
      ^
SyntaxError: invalid syntax
In:
dir(r)
Out:
['__add__',
 '__class__',
 '__contains__',
 '__delattr__',
 '__delitem__',
 '__delslice__',
 '__doc__',
 '__eq__',
 '__format__',
 '__ge__',
 '__getattribute__',
 '__getitem__',
 '__getslice__',
 '__gt__',
 '__hash__',
 '__iadd__',
 '__imul__',
 '__init__',
 '__iter__',
 '__le__',
 '__len__',
 '__lt__',
 '__mul__',
 '__ne__',
 '__new__',
 '__reduce__',
 '__reduce_ex__',
 '__repr__',
 '__reversed__',
 '__rmul__',
 '__setattr__',
 '__setitem__',
 '__setslice__',
 '__sizeof__',
 '__str__',
 '__subclasshook__',
 'append',
 'count',
 'extend',
 'index',
 'insert',
 'pop',
 'remove',
 'reverse',
 'sort']

String 문자열

In:
s = 'Hello, how are you?'
s
Out:
'Hello, how are you?'
  • Multi-line string
In:
s = '''Hello,                 
       how are you'''
s
Out:
'Hello,                 \n       how are you'
In:
s = """Hi,
what's up?"""
s
Out:
"Hi,\nwhat's up?"
In:
s = 'Hi, what's up?'
  File "", line 1
    s = 'Hi, what's up?'
                  ^
SyntaxError: invalid syntax
  • nested
In:
s = "Hi, what's up?"
s
Out:
"Hi, what's up?"
  • string is a container
In:
a = "hello"
In:
a[0]
Out:
'h'
In:
a[1]
Out:
'e'
In:
a[-1]
Out:
'o'
In:
a = "hello, world!"
In:
a[3:6] 
Out:
'lo,'
In:
a[2:10:2]
Out:
'lo o'
In:
a[::3]
Out:
'hl r!'
  • immutable: cannot change
In:
a[2] = 'z'
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
 in ()
----> 1 a[2] = 'z'

TypeError: 'str' object does not support item assignment
In:
a.replace('l', 'z')
In:
a
Out:
'hello, world!'
  • format
    • string % argument
    • %d: integer
    • %f: float
    • %s: string
In:
"x=%d" % 1
Out:
'x=1'
In:
"%s=%f" % ("pi", 3.14)
Out:
'pi=3.140000'

Dictionary 사전

In:
tel = {'emmanuelle': 5752, 'sebastian': 5578}
tel
Out:
{'emmanuelle': 5752, 'sebastian': 5578}
In:
tel['sebastian']
Out:
5578
In:
tel['francis'] = 5915
tel
Out:
{'emmanuelle': 5752, 'francis': 5915, 'sebastian': 5578}
In:
tel.keys()   
Out:
['sebastian', 'francis', 'emmanuelle']
In:
tel.values()
Out:
[5578, 5915, 5752]
In:
'francis' in tel
Out:
True

Tuple 튜플

In:
u = (0, 2)
u
Out:
(0, 2)
In:
t = 12345, 54321, 'hello!'
t
Out:
(12345, 54321, 'hello!')
In:
t[0]
Out:
12345
In:
b[0] = 1
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
 in ()
----> 1 b[0] = 1

TypeError: 'int' object does not support item assignment

Reference, Mutable, Immutable

In:
a = [1, 2, 3]
b = a
In:
a
Out:
[1, 2, 3]
In:
b
Out:
[1, 2, 3]
In:
id(a), id(b)
Out:
(139806688343608, 139806688343608)
In:
a[0] = 11
In:
a
Out:
[11, 2, 3]
In:
b
Out:
[11, 2, 3]
In:
 
In:
b[1] = 'hi!'
In:
b
Out:
[11, 'hi!', 3]
In:
a
Out:
[11, 'hi!', 3]
In:
a = [1, 'hi!', 3]
In:
b = 1
In:
id(a), id(b)
Out:
(139806689796752, 9666936)

zip

In:
a = [1, 2, 3]
b = [10, 20, 30]
In:
c = zip(a, b)
c
Out:
[(1, 10), (2, 20), (3, 30)]
In:
d = dict(c)
d
Out:
{1: 10, 2: 20, 3: 30}
In:
zip(*c)
Out:
[(1, 2, 3), (10, 20, 30)]
In:
zip(*zip(*c))
Out:
[(1, 10), (2, 20), (3, 30)]
요약: 여러줄로 나누어 쓰기

Code Line-Break 여러 줄로 나누어 쓰기

  • 리스트나 딕셔너리 정의, 함수 호출/정의 등의 경우에는 문법적으로 완료되지 않으면 그냥 다음 줄 사용 가능
  • 그렇지 않은 경우 backslash사용
In:
a = [1, 2, 3,
     4, 5, 6]
a
Out:
[1, 2, 3, 4, 5, 6]
In:
a = 1 + 3 + 4 +
    5 + 6 + 7
  File "", line 1
    a = 1 + 3 + 4 +
                   ^
SyntaxError: invalid syntax
In:
a = 1 + 3 + 4 + \
    5 + 6 + 7
a
Out:
26
요약: Python 흐름 제어

Control Flow 흐름 제어

  • if/elif/else
  • for/range
  • while/break/continue
  • enumerate
  • dictionary loop
  • list comprehension

If/elif/else

In:
if 2**2 == 4:
    print('Obvious!')
Obvious!
요약: Python 들여쓰기
  • Python Indentation 들여쓰기
    • space or tab
    • number of spaces: block level
    • convention: 4 spaces
In:
a = 10
if a == 1:
    print(1)
elif a == 2:
    print(2)
else:
    print('A lot')
A lot

for/range

In:
range(10)   # :10
Out:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
In:
for i in range(4):
    print(i)
0
1
2
3
In:
i
Out:
3
In:
range(5, 10)  # 5:10
Out:
[5, 6, 7, 8, 9]
In:
x = ["a", "b", "c", "d", "e"]
for i in range(1, 4):
    print(x[i])    
b
c
d
In:
for word in ['cool', 'powerful', 'readable']:
    print('Python is %s' % word)
Python is cool
Python is powerful
Python is readable
In:
for xi in x[1:4]:
    print(xi)
b
c
d
In:
print(x[1:4])
['b', 'c', 'd']

while/break/continue

In:
z = 1 + 1j
while abs(z) < 100:
    z = z**2 + 1
    print(z, abs(z))
z
(1+2j) 2.2360679775
(-2+4j) 4.472135955
(-11-16j) 19.4164878389
(-134+352j) 376.643067107
Out:
(-134+352j)
In:
z = 1 + 1j
while abs(z) < 100:
    if z.imag < 0:
        print("break!")
        break
    z = z**2 + 1
    print(z)
z
(1+2j)
(-2+4j)
(-11-16j)
break!
Out:
(-11-16j)
In:
a = [1, 0, 2, 4]
for element in a:
    if element == 0:
        continue
    print(1. / element)
1.0
0.5
0.25

Enumerate

In:
words = ('cool', 'powerful', 'readable')
for i in range(len(words)):
    print((i, words[i]))
(0, 'cool')
(1, 'powerful')
(2, 'readable')
In:
for i, item in enumerate(words):
    print((i, item))
(0, 'cool')
(1, 'powerful')
(2, 'readable')

Dictionary Loop

In:
d = {'a': 1, 'b':1.2, 'c':1j}
d.items()
Out:
[('a', 1), ('c', 1j), ('b', 1.2)]
In:
for key, val in sorted(d.items()):
    print('Key: %s has value: %s' % (key, val))
Key: a has value: 1
Key: b has value: 1.2
Key: c has value: 1j
In:
for item in sorted(d.items()):
    print('item:', str(item))
item: ('a', 1)
item: ('b', 1.2)
item: ('c', 1j)

List Comprehensions

In:
%%timeit
x = range(10000)
y = []
for i in x:
    y.append(i * 2)
1000 loops, best of 3: 835 µs per loop
In:
%%timeit
y = [i*2 for i in range(10000)]
1000 loops, best of 3: 498 µs per loop
요약: Python 함수

Function 함수

  • definition 정의
  • parameter 인수
  • local, global 스코프
  • variable number of parameters
  • docstring

definition 함수의 정의

  • 콜론(:) 사용
  • 들여쓰기 (indentation)
In:
def test():
    print('in test function')
In:
test()
in test function
In:
test()
test()
test()
test()
in test function
in test function
in test function
in test function

parameter 인수

In:
def disk_area(radius):
    return 3.14 * radius * radius
In:
disk_area(1.5)
Out:
7.0649999999999995
In:
def double_it(x):
    return x * 2
In:
double_it(3)
Out:
6
In:
double_it()
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
 in ()
----> 1 double_it()

TypeError: double_it() takes exactly 1 argument (0 given)

default parameter

In:
def double_it(x=2):
    return x * 2
In:
double_it(3)
Out:
6
In:
double_it()
Out:
4
In:
def slicer(seq, start=None, stop=None, step=None):
    return seq[start:stop:step]
In:
rhyme = 'one fish, two fish, red fish, blue fish'.split()
rhyme
Out:
['one', 'fish,', 'two', 'fish,', 'red', 'fish,', 'blue', 'fish']
In:
slicer(rhyme)  # rhyme[::]
Out:
['one', 'fish,', 'two', 'fish,', 'red', 'fish,', 'blue', 'fish']
In:
slicer(rhyme, step=2) # rhyme[::2]
Out:
['one', 'two', 'red', 'blue']
In:
slicer(rhyme, 1, step=2) # rhyme[1::2]
Out:
['fish,', 'fish,', 'fish,', 'fish']
In:
slicer(rhyme, start=1, stop=4, step=2) # rhyme[1:4:2]
Out:
['fish,', 'fish,']

local variable

In:
def try_to_modify(x, y, z):
    x = 23
    y.append(42)
    z = [99] # new reference
    print(x)
    print(y)
    print(z)
In:
a = 77    # immutable variable
b = [99]  # mutable variable
c = [28]
In:
try_to_modify(a, b, c)
23
[99, 42]
[99]
In:
print(a)
print(b)
print(c)
77
[99, 42]
[28]
In:
x = 5
def addx(y):
    return x + y
In:
addx(10)
Out:
15
In:
def setx(y):
    x = y
    print('x is %d' % x)
In:
setx(10)
x is 10
In:
x
Out:
5

global variable

In:
def setx(y):
    global x
    x = y
    print('x is %d' % x)
In:
setx(10)
x is 10
In:
x
Out:
10
요약: Python 가변 인수

Variable number of parameters

  • *args: positional arguments (tuple)
  • **kwargs: keyword arguments (dictionary)
In:
def variable_args(*args, **kwargs):
    print('args is', args)
    print('kwargs is', kwargs)
In:
variable_args('one', 'two', x=1, y=2, z=3)
args is ('one', 'two')
kwargs is {'y': 2, 'x': 1, 'z': 3}

Docstrings

In:
def funcname(params):
    """Concise one-line sentence describing the function.
    Extended summary which can contain multiple paragraphs.
    """
    pass
In:
funcname??
In:
funcname.__doc__
Out:
'Concise one-line sentence describing the function.\n    Extended summary which can contain multiple paragraphs.\n    '
요약: Python None 자료형

None

  • 아무것도 출력하지 않거나
  • 아무것도 받지 않는 경우
In:
def f():
    a = 1
In:
x = f()
x
In:
print(x)
None

is 비교

  • 같은 메모리를 가리키고 있는지 비교
In:
a = 3.14 * 2
b = 6.28
In:
a == b
Out:
True
In:
print(id(a), id(b))
65719224 65719272
In:
a is b
Out:
False
In:
a = None
In:
# a == None <---  사용하지 말것! __eq__ overload 시 위험!
a is None, a is not None
Out:
(True, False)
In:
def f(x, y=None):
    if y is None:
        return x * x
    else:
        return x * y
In:
f(10)
Out:
100
In:
f(10, 20)
Out:
200

Package Import

In:
import scipy
In:
scipy.__file__
Out:
'/home/joel/anaconda2/lib/python2.7/site-packages/scipy/__init__.pyc'
요약: Python 패키지 alias
  • pakage alias
    • 패키지 이름이 길거나 다른 이름으로 사용하고 싶은 경우
    • import XXX as YY
In:
import numpy as np
import scipy as sp
import pandas as pd
import sklearn as sk
import matplotlib as mpl
import matplotlib.pylab as plt
import seaborn as sns
요약: Python 서브패키지 임포트
  • 서브패키지 임포트

    • 자동 임포트

      • 상위 패키지를 임포트 하면 상위 패키지의 __init__.py 내부에서 하위 패키지를 임포트
      • 사용자가 하위 패키지를 추가로 임포트할 필요 없음
    • 수동 임포트

      • 메모리 절약을 위해 하위 패키지를 자동으로 임포트 하지 않음
      • 사용자가 필요한 서브패키지를 수동으로 임포트
In:
sp.stats.norm.rvs(size=10)
Out:
array([ 0.15060943, -0.23652534, -0.51602361, -0.7335559 , -1.35747775,
        1.87101961,  0.12348571,  0.53643438,  1.70221398,  0.55901586])
In:
sp.constants.c
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
 in ()
----> 1 sp.constants.c

AttributeError: 'module' object has no attribute 'constants'
In:
import scipy.constants
sp.constants.c
Out:
299792458.0

질문/덧글

조건문 들여쓰기에 관해 than*** 2016년 6월 28일 8:53 오후

a = [1, 0, 2, 4]
for element in a:
if element == 0:
continue
print(1. / element)

이걸 작성하는데 마지막줄 (print문) 적을 때 continue와 같이 들여쓰기를 해놓은 상태에서는 실행이 안되고 if와 같은 수준으로 들여쓰기를 할때 실행이 되더라구요.
if 에 속하는건 if 보다 4칸 들여쓰기가 되고, for문에 속하는건 for문보다 4칸 들여쓰기 되고 그러는건가요?
별도로 조건에서 빠져나오는 명령이 없어서 그런건가 싶은데 확인하고자 질문드립니다.

현재 저는 anaconda 32bit 설치해서 jupyter 로 작성하고 있습니다

답변: 조건문 들여쓰기에 관해 관리자 2016년 6월 29일 12:27 오전

`continue` 명령은 루프 실행을 중지하고 다음 번 루프를 시작하라는 의미입니다. 따라서 `continue` 문장 바로 다음에 오는 문장은 실행되지 않습니다.

Tuple 에서 오타? wong*** 2016년 8월 24일 1:11 오전

안녕하세요.

Tuple 예제에서

b[0] = 1

==>

t[0] = 1로 변경되고

결과는 다음이 되어야 할 것 같습니다.

>>> t[0] = 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment

답변: Tuple 에서 오타? 관리자 2016년 8월 24일 7:07 오전

지적하신 내용이 맞습니다. 오차는 곧 수정하도록 하겠습니다. 감사합니다.

List comprehension 에서 %%timeit? wong*** 2016년 8월 24일 1:25 오전

%%timeit 를 입력하면 에러가 납니다.

>>> %%timeit
File "<stdin>", line 1
%%timeit
^

확인 바랍니다.

답변: List comprehension 에서 %%timeit? 관리자 2016년 8월 24일 7:09 오전

%%timeit 과 같이 %% 이 붙는 명령은 jupyter notebook에서만 쓸 수 있는 cell magic 명령입니다.
jupyter notebook 노트북에서 실행해 주세요.
감사합니다.

Docstrings 의 funcname?? 에서 에러 발생 wong*** 2016년 8월 24일 1:40 오전

아래와 같이 에러가 발생합니다.

>>> def funcname(params):
... """Concise one-line sentence describing the function.
... Extended summary which ca contain multiple parapraphs.
... """
... pass
...
>>> funcname??
File "<stdin>", line 1
funcname??
^
SyntaxError: invalid syntax

답변: Docstrings 의 funcname?? 에서 에러 발생 관리자 2016년 8월 24일 7:10 오전

?? 문법은 ipython shell이나 jupyter notebook에서만 쓸 수 있는 help 기능입니다.
ipython shell이나 jupyter notebook 노트북에서 실행해 주세요.
감사합니다