240621 TIL #431 Pythonic Code 2

김춘복·2024년 6월 20일
0

TIL : Today I Learned

목록 보기
431/575

Today I Learned

오늘은 파이썬의 코딩스타일을 이어서 공부해봤다.


Pythonic Code

lambda

  • 파이썬의 람다는 3버전 이상부터는 PEP 8에서 사용을 권장하지 않는다.
    테스트, 문서화, 코드 해석이 힘들기 때문이다.
    (하지만 레거시나 머신러닝 코드 등 여전히 쓰이는 곳은 쓰인다고 한다.)

  • 사용 방법
    lambda 인자들: 표현식

add = lambda x, y: x + y
print(add(2, 3))  # 출력: 5

map 함수

  • 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]

reduce 함수

  • functools 모듈에 포함된 함수로 iterable 요소를 누적해서 단일 값을 계산할 때 사용한다.
from functools import reduce

numbers = [1, 2, 3, 4, 5]
product = reduce(lambda x, y: x * y, numbers)
print(product)  # 출력: 120

iterable

iter & next

  • iterable에서 각 요소를 다룰 때 사용하는 함수
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 예외 발생

generator

  • 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 예외 발생

asterisk (*)

위치 가변 인자 *args

  • 함수가 임의의 개수의 위치 인자를 받을 수 있게 한다.
    파라미터의 개수를 모를 때 사용한다.
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

키워드 가변인자 **kwargs

  • 파라미터의 이름(키워드)를 따로 지정하지 않고 입력하는 방법으로 **를 두개 쓴다.
    입력된 값은 dict type으로 사용할 수 있다.
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

언패킹

  • 그외에도 *는 리스트나 튜플을 언패킹할 때, **는 dict를 언패킹할 때 사용한다.
profile
Backend Dev / Data Engineer

0개의 댓글