파이썬 기초 문법 소개
[파이썬 배우는 최고의 방법](http://nolboo.github.io/blog/2014/08/10/the-best-way-to- learn-python/)
Python Tips, Tricks, and Hacks
ipython 사용법 관련 바이오스핀 과거 발표자료
http://nbviewer.ipython.org/gist/irobii/014b8aa3574090a0d04a
이 자료는 비개발자가 짧은 시간에 겁나 빠르게(?) 파이썬 문법 기초를 소개하는 내용입니다.
내공이 부족하고, 발표력이 좋지못한(;;) 제가 파이썬의 기초를 압축 설명하는 것은 거의 불가능하기에;
이미 있는 많은 사이트를 최대한 활용하기로 하였습니다.
그리고 다루지 못한, 잘 모르는 파이썬 문법이 나오면 애프터서비스로 설명드리겠습니다.
스터디를 진행하면서 사소한 것이라도 상관없이 물어봐주세요.
제가 모르는 것을 물어봐도 저또한 공부가 되기에 환영합니다. :)
여기서 아주 짧게 문법 기초 개념을 설명하고,
learn x in y minute | python 사이트에서 이어서 보면서 문법을 설명하고,
바이오스핀 ipython 사용법 소개 자료 사이트를 통해 ipython 사용법에 대해 설명하겠습니다.
그리고 스터디 레파지토리로 사용 중인 Git 에 대해 learn x in y minute | git 을 통해 소개하겠습니다.
모든 값은 그 값을 담기 위한 '용기'가 있다.
프로그래밍 언어에서 이 용기를 '타입' 이라고 한다. 즉, 타입이 해당 값이 들어있는 용기이다.
'변수'는 일종의 '값이 담긴 용기'을 지칭하는 '태그'라고 볼 수 있다.
# 숫자나 문자열 값에다가 a, b 라는 이름의 변수로 할당했다.
a = 1
b = "python is great"
print a
print b
1 python is great
'용기'를 중첩시켜, 여러개를 담은 용기도 만들 수 있다.
아래처럼 나열된 형태를 타입으로는 '리스트' 와 '튜플' 이 있다.
# list type
lst = [1, 2, 3]
# tuple type
tup = (1, 2, 3)
# 특정 위치의 값을 찾아올때는 '인덱스'라는 숫자로 찾는다. 대부분의 프로그래밍 언어에서 0부터 시작한다.
print "lst[0] = " , lst[0]
# 둘 다 나열된 형태로써 인덱스로 원하는 값들만을 찾아오는 것이 가능하지만,
# 차이점은 tuple 은 재할당이 안된다. 값이 고정적인 '상수'랑 비슷하다.
lst[1] = 100
print "lst = ", lst
tup[1] = 100
lst[0] = 1 lst = [1, 100, 3]
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-2-fefe5c17d35f> in <module>() 13 print "lst = ", lst 14 ---> 15 tup[1] = 100 TypeError: 'tuple' object does not support item assignment
값이 나열된 리스트의 경우, 값을 찾기 위해 '인덱스' 숫자로 찾아야만 했다.
하지만, 인덱스라는 숫자 말고 좀 더 기억하기 쉬운 '키'로 찾을 수 있는 타입이 있다.
이런 형태의 용기(=타입)을 딕셔너리라고 한다.
# dictionary type
dic = {"one": 1, "two": 2, "three": 3}
dic
#=> {'three': 3, 'two': 2, 'one': 1}
dic["two"]
#=> 2
2
지금까지 숫자 하나, 문자열 같은 용기(타입)과,
나열된 형태의 리스트와 튜플 같은 용기(타입)과
좀 더 쉽게 찾을 수 있는 딕셔너리 같은 용기(타입) 말고도,
이보다 더 크고 복잡한 '용기'로써 '클래스' 라는 것이 있다.
그런데, 클래스를 소개하기 전에 함수에 대해서 먼저 알아볼 필요가 있다.
변수 가 어떤 '용기'을 지칭하기 위한 것이라면,
함수 는 어떤 '행동'을 지칭하기 위한 것입니다.
def add(a, b):
return a + b
add(1, 2)
#=> 3
3
다시 클래스로 돌아오면,
클래스라는 것은 '용기' + '행동'을 합쳐놓은 좀 더 크고 복잡한 '용기'라고 볼 수 있습니다.
보통 합치는 기준은 데이터 - 함수간에 밀접한 관련이 있어 하나의 덩어리로 다루기 위함입니다.
(단, 클래스 내부에 있는 함수를 메서드 라고 하며, 함수와 약간 다릅니다.)
복잡한 만큼, 반드시 사용하기 전에 설계(디자인)를 해야 합니다.
# Duck 클래스 설계하기
class Duck(object):
energy = 0
def eat(self, e):
self.energy += e
def poop(self):
self.energy -= 10
if self.energy < 0:
self.energy = 0
def speak(self):
return 'squawk!'
def is_hungry(self):
if self.energy < 50:
return 'squawk(yes)... squawk(hungry)...'
else:
return 'squawk!(no) squawk!(not hungry)'
# 이제 Duck 클래스 타입 사용가능
duck = Duck()
duck.eat(100)
print duck.speak()
print duck.is_hungry()
for i in range(6):
duck.poop()
print 'after poop...'
print duck.is_hungry()
squawk! squawk!(no) squawk!(not hungry) after poop... squawk(yes)... squawk(hungry)...
모듈 임포트 하기
임포트를 통해서 이미 만들어진 변수, 함수, 클래스를 가져다 쓸 수 있습니다.
import math
math.ceil(1.5)
2.0
math.pi
3.141592653589793
지금까지 값을 담는 '용기' 라는 개념으로 타입, 리스트, 딕셔너리, 클래스를 설명하였고,
이번엔 제어 흐름에 대해 소개하겠습니다.
단순히 명령어 실행 순서가 윗줄부터 차례로 실행하는 것 외에,
다른 방식으로 분기하여 실행하게 하는 방법이 있습니다.
# if else
v = -10
# 결과를 보면, if 조건식에 따라 실행되는 라인이 달라진다.
if v > 0:
print 'v is positive integer'
elif v == 0:
print 'v is zero'
else:
print 'v is negative integer'
v is negative integer
# for ~ in
lst = range(5)
lst
#=> [0, 1, 2, 3, 4]
# 순차적으로 요소를 순회할때 사용한다.
for i in lst:
print i
# 0
# 1
# 2
# 3
# 4
dic = {"one": 1, "two": 2, "three": 3}
# 딕셔너리는 순서를 보장하지 않는다.
for k, v in dic.iteritems():
print k, v
# three 3
# two 2
# one 1
# break 를 사용하면 중간에 멈출 수 있다.
for i in lst:
if i == 3:
break
else:
print i
# 0
# 1
# 2
0 1 2 3 4 three 3 two 2 one 1 0 1 2
# while : 조건이 참이면 계속 돈다.
x = 0
while x < 4:
print x
x += 1 # x = x + 1의 축약형
# 0
# 1
# 2
# 3
0 1 2 3