27
파이선썬인가? 뭐 어쨌든 문법 조금만더

파이선 문법 조금만더

Embed Size (px)

Citation preview

Page 1: 파이선 문법 조금만더

파이선… 썬인가? 뭐 어쨌든

문법 조금만더

Page 2: 파이선 문법 조금만더

개발의 기초

Page 3: 파이선 문법 조금만더

내가 개발 좀 해봐서 아는데….

Page 4: 파이선 문법 조금만더

For 와 if

• 두 개만 있으면 다 된다…

라고 좀 해본분이 말씀하셨음

Page 5: 파이선 문법 조금만더

근데 지금은 뭐가 많다

Page 6: 파이선 문법 조금만더

파이써닉 ??

Page 7: 파이선 문법 조금만더

• 최대한 효율적인 소규모 코딩패턴

• 별거 아닌거 길게 쓰지 말자

• 짧은코드가 더 빠를수도 있다.

Page 8: 파이선 문법 조금만더

List Comprehension

Page 9: 파이선 문법 조금만더

학교에서 배운거

for(i=0 ; i < 10 ; i++)

{

arr[i]=doSomthing(i);

}

Page 10: 파이선 문법 조금만더

배운대로 한거

for i in range(10):

lst.append(doSomthing(i))

Page 11: 파이선 문법 조금만더

Pythonic

[doSomthing(i) for i in range(10)]

Page 12: 파이선 문법 조금만더

dJango

user_obj._group_perm_cache =

set(["%s.%s"% (ct, name)

for ct, name in perms])

Page 13: 파이선 문법 조금만더

왜?• 파이썬에서 루프 돌려서 리스트 만드는

건 비효율적

• 인터프리터가 매 루프마다 리스트의 변

화를 처리

• 어떤 요소를 다룰지 추적하기위한 카운

터를 유지해야함

Page 14: 파이선 문법 조금만더

이터레이터와 제너레이터

Page 15: 파이선 문법 조금만더

이터레이터는

두가지만 기억하세요

next, __iter__

Page 16: 파이선 문법 조금만더

class MyIterator(object):

def __init__(self, step):

self.step = step

def next(self):

"""Returns the next element."""

if self.step == 0:

raise StopIteration

self.step -= 1

return self.step

def __iter__(self):

"""Returns the iterator itself."""

return self

for el in MyIterator(4):print el

Page 17: 파이선 문법 조금만더

제너레이터

Range() VS xRange()그냥 함수

호출될때

리스트를 다 만듦

그때그때

필요한 만큼만

생성

Page 18: 파이선 문법 조금만더

리스트가 필요할때

• 파이스닉하게

• 찔끔찔끔

Page 19: 파이선 문법 조금만더

yield

def fibonacci():a, b = 0, 1while True:

yield ba, b = b, a + b

fib = fibonacci()

[fib.next() for i in range(10)]

Page 20: 파이선 문법 조금만더

def psychologist():

print 'Please tell me your problems'

while True:

answer = (yield)

if answer is not None:

if answer.endswith('?'):

print ("Don't ask yourself too much

questions")

elif 'good' in answer:

print "A that's good, go on"

elif 'bad' in answer:

print "Don't be so negative"

Page 21: 파이선 문법 조금만더

>>> free = psychologist()

>>> free.next()

Please tell me your problems

>>> free.send('I feel bad')

Don't be so negative

>>> free.send("Why I shouldn't ?")

Don't ask yourself too much questions

>>> free.send("ok then i should find what is good for me")

A that's good, go on

Page 22: 파이선 문법 조금만더

Coroutines

Native Support Language

Io (http://iolanguage.com)

Or

Lua (http://www.lua.org)

Page 23: 파이선 문법 조금만더

Coroutines in Python

• 원래는 없음

• Stackless Python 의 Continuation

• 근데 yield 가 거의 비슷함

• Multitask 모듈로 구현

Page 24: 파이선 문법 조금만더

import multitask

import time

def coroutine_1():

for i in range(3):

print 'c1'

yield i

def coroutine_2():

for i in range(3):

print 'c2'

yield i

>>> multitask.add(coroutine_1())

>>> multitask.add(coroutine_2())

Page 25: 파이선 문법 조금만더

>>> multitask.run()

c1

c2

c1

c2

c1

c2

Page 26: 파이선 문법 조금만더

아 진짜 근데 못 쓰겠어

파이스닉

Page 27: 파이선 문법 조금만더

감사합니다