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 데코레이터는 클래스 스태틱 함수를 의미한다.