2010-03-10

Python Tip, Tricks and Hacks

python tip, tricks and hacks from https://www.siafoo.net/article/52

부분 문자열 포함 테스트는 in 연산자를 사용할 것

if 'aaa' in 'aaabbb':

리스트를 , 로 합칠 경우 seperator . join ( list ) 형식을 사용할 것

','.join(['aaa','bbb','ccc']

람다 함수는 anonymous function 으로 이해하면 된다. C 의 a? b: c 대용으로는 사용할 수 없을 듯.

map( lambda x : x*x, [1,2,3,4,5] ) # 리스트를 순회하면서 제곱을 한 걸 리턴한다.

map 함수는 리스트 comprehension 으로 대체할 수 있다. 위의 예제는 아래처럼 고칠 수 있다.

[ x*x for x in [1,2,3,4,5] ]

filter 함수는 for .. in if 으로 대체할 수 있다.

filter( lambda x: x<4, [1,2,3,4,5] )  == [ x for x in [1,2,3,4,5] if x < 4 ]

generator 는 [] 대신 () 로 감싸서 for 에 넘길 수 있다.

for x in ( y*y for y in [1,2,3,4,5] if y*y < 10 ):
  print x

nested for + if + single statement 는 한줄로 표현할 수 있다.

for x in (0,1,2,3):

  for y in (0,1,2,3):

    if x < y:

      print (x,y,x*y)

print [(x,y,x*y) for x in (0,1,2,3) for y in (0,1,2,3) if x < y] # 다만 리스트다.

reduce 를 이용하면 리스트를 순회하면서 각 값들을 특정 값에 누적 연산시킬 수 있다.

result = 1

for i in [1,2,3,4,5]:

  result *= i

reduce( lambda a,b: a*b, [1,2,3,4,5] )

dictionary 생성시 { 'a': 1, 'b': 2 } 대신 dict( a=1, b=2 ) 로 만들 수 있다.

C 의 a ? b : c 는 다음과 같이 할 수 있다.

b if a else c

C 의 switch 문은 딕셔너리.get( key, default ) 로 대체할 수 있다.

if key == a: return 1  elif key == b: return 2  else return 3  ==> dict( a=1, b=2 ).get( key, 3 )

@staticmethod 데코레이터는 클래스 스태틱 함수를 의미한다.


comments powered by Disqus