#10 이름이 없는 함수
문장 하나로 이뤄진 짧고 간단한 함수는 이름도 붙여주지 않고 간결하게 사용할 수 있다. 이름이 없는 함수를 람다함수라고도 한다.
lambda x, y: x + y
람다함수는 lambda
키워드를 사용하여 만든다.
# 함수 객체처럼 변수를 통해서 사용
my_func = lambda x, y: x + y
my_func(1, 2)
람다함수를 다른 함수의 인수로 넣어서 사용할 수 있다.
# 다른 함수에 인수로 넣어서 사용할 수도 있습니다.
def do_something(my_func):
my_func()
do_something(lambda: print("Hello, World"))
람다는 map(), filter() 등의 내장함수와 함께 사용할 때 편리하다.
add_100 = lambda x: x + 100
# map의 첫 인수로 주어진 함수를
# 두 번째 인수로 주어진 이터러블의 각 아이템에
# 차례로 적용합니다.
# map()의 결과를 어떤 컨테이너에 담을지 지정해줘야 합니다.
list(map(add_100, [1, 2, 3, 4]))
아래처럼 더 간략하게 나타낼 수 있다.
# 간단한 함수를 사용할 때는
# 람다로 더 간결하게 사용합니다.
list(map(lambda x: x + 100, [1, 2, 3, 4]))
filter()는 주어진 조건에 따라 이터러블의 요소를 걸러낸다.
list(filter(lambda x: x % 2 == 0, [1, 2, 3, 4, 5]))
reduce
reduce()는 시퀀스에 반복적으로 작용하여 하나의 값으로 만들어 준다.
from functools import reduce
add = lambda x, y: x + y
reduce(add, [1, 2, 3, 4])
# [add(1, 2), 3, 4] -> [3, 3, 4]
# [add(3, 3), 4] -> [6, 4]
# [add(6, 4)] -> [10]
reduce는 2개의 매개변수를 받는다. 첫번째 매개변수는 함수 객체다. 람다식을 활용한다.
sorted()는 정렬 기준을 정할 때 람다함수를 사용한다.
my_dict = {"apple": 3, "Alpha": 100, "Drive": 10, "data": 33, "Billy": 50}
# 정렬 기준(key)을 아이템의 값(item[1])을 사용하도록 변경
# 용어 혼동 주의: 정렬 기준이란 의미의 key와 사전에서 키:값 쌍에서의 key
dict(sorted(my_dict.items(), key=lambda item: item[1]))
#11 독스트링
함수나 클래스의 기능을 docstring으로 기록하는 것을 문서화라고 한다. 제품이나 오픈 소스와 같이 여러사람이 보고 장기적으로 사용될 코드에는 필수이다. 초보때는 우선 구현하는 경험을 쌓는게 중요하다. 하지만 실무에서는
기록방식에 따라 구글 스타일, numpy/scipy 스타일이 있다.
구글스타일
def talk_to_ai(user_input:str) -> str:
"""사용자의 대사를 인공지능에게 전달하고 대답을 받는다.
Args:
user_input (str): 인공지능에게 하는 말
Returns:
str: 인공지능의 대답
"""
pass
numpy/scipy
def talk_to_ai(user_input: str) -> str:
"""사용자의 대사를 인공지능에게 전달하도 응답을 받는다.
Parameters:
-----------
user_input: str
인공지능에게 하는 말
Returns:
--------
str
인공지능의 대답
"""
pass
일단 구글 스타일 형식으로 독스트링을 써보자.
help()함수의 인수에 함수명을 넣고 실행하면 docstring을 반환한다.
def talk_to_ai(user_input: str) -> str:
"""사용자의 대사를 인공지능에게 전달해주고 대답을 받는다.
Args:
user_input (str): 인공지능에게 하는 말
Returns:
str: 인공지능의 대답
"""
pass
help(talk_to_ai)