파이썬 스타일의 코딩기법, 파이썬 특유의 문법을 활용하여 효율적으로 코드를 표현. 고급코드,머신러닝 등에서 많이 쓰인다
함수 이름 없이, 함수처럼 쓸 수 있는 익명함수
f = lambda x,y: x + y
print(f(1,4)) # 5출력
print((lambda x,y:x + y)(10,4))#14
함수와 시퀀스자료형을(리스트,튜플,문자열) 인자로 받아 리스트의 원소 각각 함수에 대입한뒤 값을 반환하는 함수
map(함수,시퀀스)
print(list(map(int,"1234"))) #[1,2,3,4]
print(map(int,"1234")) #<map object at 0x105295a50> -> iteration을 반환
print(list(map(lambda x: x**2,range(5)))) #[0,1,4,9,16]
def squares(arr):
n = []
for i in arr:
n.append(i**2)
return n
print(squares(range(5))) # [0,1,4,9,16]
아래의 그림과 같이 시퀀스 자료형의 값을 누적으로 함수에 적용한다
from functools import reduce
print(reduce(lambda x,y: x+y,[1,2,3,4,5])) # 15
print(reduce(lambda x,y: y + x,"abcde")) #edcba
lambda,map,reduce는 간단한 코드로 다양한 기능들을 제공한다. 코드의 직관성이 떨어져 python3에서는 권장하지않음.
그러나 legacy library나 다양한 머신러닝 코드에서 여전히 사용중이다.
파이썬에서 제너레이터는 여러 개의 데이터를 미리 만들어 놓지 않고 필요할 때마다 즉석해서 하나씩 만들어낼 수 있는 객체를 의미한다
- 개수가 정해지지 않은 변수를 함수의 parameter로 사용하는 법
- asterisk(*) 기호를 사용하여 prameter를 표시한다
- 입력된 값은 tuple 값이다
- 가변인자는 오직 한개만 맨 마지막 parameter 위치에 사용가능
def asterisk_test(a,b,*args):
return a + b + sum(args) # a = 1,b = 2, args = (3,4,5)
print(asterisk_test(1,2,3,4,5)
- parameter 이름을 따로 지정하지 않고 입력하는 방법
- asterisk(*) 두개를 사용
- 입력된 값은 딕셔너리 타입으로 사용된다
def kwargs(one,two,*args,**kwargs):
print(one,two,sum(args)) #3 4 35
print(kwargs) #{'first': 3, 'second': 4, 'third': 5}
kwargs(3,4,5,6,7,8,9,first = 3,second = 4,third = 5)