- 한 번만 사용하는 함수를 '간결하게' 사용할 수 있도록 만든다.
[예시]
def squre(x):
return x ** 2
square = lambda x: x ** 2
[다른 예시]
def get_eng_title(row):
split = row.split(',')
return split[1]
get_eng_title = lambda row: row.split(',')[1]
sorted(movies, key=get_eng_title)
# 아래와 같이 짧게 줄일 수도 있다.
sorted(movies, key=lambda row: row.split(',')[1])
⚡ assert()
>>> from operator import itemgetter
>>> get_zeroth = itemgetter(0)
>>> numbers = [1, 2, 3]
>>> print(get_zeroth(numbers))
1
def adder(n):
def helper(x):
return x + n
return helper
add_three = adder(3)
print(add_three(6)) # 9
👉 "Validator"를 만들 때 유용하다.
def min_validator(minimum):
def helper(n):
if type(n) is not int:
return False
return minimum <= n
return helper
def validate(n, validators):
# validator 중 하나라도 통과하지 못하면 False를 리턴
for validator in validators:
if not validator(n):
return False
return True
age_validators = [min_validator(0), min_validator(120)]
ages = [9, -3, 7, 33, 18, 1999, 287, 0, 13]
for age in ages:
result = "유효함" if validate(age, age_validators) else "유효하지 않음"
- 각 원소를 특정 조건을 적용하여 '추려낸' 값을 map type object로 저장해 반환하는 함수
def get_eng_title(row):
split = row.split(',')
return split[1]
eng_titles = map(get_eng_title, movies)
eng_titles = map(
lambda row: row.split(',')[1],
movies
)
rader = csv.reader(books, delimiter=',')
get_title = lambda row: row[0]
titles = map(get_title, reader) # reader의 0번째 인덱스 값만 가져온다.
print(list(titles)) # map 객체를 list로 출력한다.
- 특정 조건을 만족하는 원소만 골라내 filter type object로 저장해 반환한다.
- map과 유사하지만, 조건이 '참'인지 '거짓'인지에 따라 반환 여부가 결정된다는 점이 다르다.
def starts_with_r(word):
return word.startswith('r')
words = ['real', 'man', 'rythm']
r_words = filter(starts_with_r, words)
# list로 형 변환을 해야 리스트 형태로 출력이 가능하다.
[연습하기]
reader = csv.reader(books, delimiter=',')
is_long = lambda row: int(row[3]) > 150
get_title = lambda row: row[0]
long_books = filter(is_long, reader)
# long_books가 filter object인데 list로 변환하지 않아도 map 함수의 두 번째 인자로 들어가는 것이 가능하다.
long_book_titles = map(get_title, long_books)
print(list(long_book_titles))
🐧 이 글은 엘리스 AI 트랙 과정 중 '실전 데이터 분석' 강의 내용을 바탕으로 작성 되었습니다.