오늘은 파이썬의 코딩스타일을 이어서 공부해봤다.
파이썬의 람다는 3버전 이상부터는 PEP 8에서 사용을 권장하지 않는다.
테스트, 문서화, 코드 해석이 힘들기 때문이다.
(하지만 레거시나 머신러닝 코드 등 여전히 쓰이는 곳은 쓰인다고 한다.)
사용 방법
lambda 인자들: 표현식
add = lambda x, y: x + y
print(add(2, 3)) # 출력: 5
iterable의 각 요소에 특정 함수를 적용해 다시 iterable로 반환하는 함수
함수 자리에는 함수 뿐만아니라 람다도 사용 가능하다.
numbers1 = [1, 2, 3]
numbers2 = [4, 5, 6]
summed = map(lambda x, y: x + y, numbers1, numbers2)
print(list(summed)) # 출력: [5, 7, 9]
from functools import reduce
numbers = [1, 2, 3, 4, 5]
product = reduce(lambda x, y: x * y, numbers)
print(product) # 출력: 120
numbers = [1, 2, 3, 4, 5]
iterator = iter(numbers)
print(next(iterator)) # 출력: 1
print(next(iterator)) # 출력: 2
print(next(iterator)) # 출력: 3
print(next(iterator)) # 출력: 4
print(next(iterator)) # 출력: 5
# print(next(iterator)) # StopIteration 예외 발생
return대신 yield
를 사용해서 iterator를 하나씩 반환하는 함수
메모리 효율이 높아 대용량 데이터를 처리할 때 유용하다.
리스트 컴프리헨션과 형태는 유사하지만 [ ]대신 ( )를 사용한다.
squares_gen = (x**2 for x in range(5))
print(next(squares_gen)) # 출력: 0
print(next(squares_gen)) # 출력: 1
print(next(squares_gen)) # 출력: 4
print(next(squares_gen)) # 출력: 9
print(next(squares_gen)) # 출력: 16
# print(next(squares_gen)) # StopIteration 예외 발생
def sum_numbers(*args):
total = sum(args)
print(f"The sum is {total}")
sum_numbers(1, 2, 3)
# 출력: The sum is 6
sum_numbers(4, 5, 6, 7)
# 출력: The sum is 22
def print_info(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
print_info(name="Alice", age=30, city="New York")
# 출력:
# name: Alice
# age: 30
# city: New York