TIL(24.12.19)

채채·2024년 12월 19일

Today I Learned

목록 보기
36/75

스타터반 문제 풀면서 배운 삼항연산자와 람다함수.
리스트 컴프리헨션과 비슷하면서도 다르고 재밌다.

삼항연산자

삼항 연산자(Ternary Operator)는 조건에 따라 다른 값을 반환하는 간단한 방법임.
<>가 3개라서 삼항!

<참일 때 값> if <조건> else <거짓일 때 값>

예시 1: 숫자가 양수인지 음수인지 확인

number = 5
result = "양수" if number > 0 else "음수"
print(result)  # 출력: 양수

예시 2: 최대값 찾기

a, b = 10, 20
max_value = a if a > b else b
print(max_value)  # 출력: 20

예시 3: 중첩 삼항 연산자

삼항 연산자는 중첩할 수도 있지만, 가독성이 떨어질 수 있으므로 권장하지 않는다고 함.

number = 0
result = "양수" if number > 0 else "음수" if number < 0 else "0"
print(result)  # 출력: 0

삼항연산자의 장점

  • 코드가 간결해짐.
  • 짧은 조건문을 작성할 때 유용.

삼항연산자의 단점

  • 너무 복잡하게 사용하면 가독성이 떨어짐.
  • 이럴 땐 if-else 문을 사용하는 것이 더 적합함.
  • 삼항 연산자는 간단한 조건 처리에 유용함.

lambda(람다)함수

익명 함수(이름이 없는 함수)를 정의할 때 사용하는 방법임.
주로 짧고 간단한 함수를 빠르게 정의하려고 할 때 사용됨.

기본 문법

lambda 매개변수: 표현식
  • lambda: 키워드로 람다 함수를 정의.
  • 매개변수: 함수에 전달되는 입력값(하나 이상 가능).
  • 표현식: 매개변수를 사용하여 처리 결과를 반환. (단, 단일 표현식만 가능)

예제 1: 두 수의 합을 계산

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

예제 2: 리스트에서 짝수 필터링

numbers = [1, 2, 3, 4, 5, 6]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers)  # 출력: [2, 4, 6]

예제 3: 리스트의 각 요소를 제곱

numbers = [1, 2, 3, 4]
squared = list(map(lambda x: x ** 2, numbers))
print(squared)  # 출력: [1, 4, 9, 16]

예제 4: 정렬 기준 변경

sorted() 함수에서 key 매개변수에 람다 함수를 사용해 정렬 기준을 지정할 수 있음.

pairs = [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')]
sorted_pairs = sorted(pairs, key=lambda x: x[1])
print(sorted_pairs)
# 출력: [(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]

람다 함수의 장점

  • 간결함: 한 줄로 간단히 함수를 정의할 수 있음.
  • 즉시 사용: 이름을 붙이지 않아도 사용이 가능하므로, 짧게 쓰고 버릴 함수에 적합함
  • 고차 함수와 결합: map(), filter(), sorted()와 함께 자주 사용됨.

람다 함수의 단점

  • 제한된 기능: 단일 표현식만 작성할 수 있어 복잡한 로직에는 적합하지 않음.
  • 가독성 저하: 코드가 복잡해지면 읽기 어려워질 수 있음. 이 경우 일반 함수로 변환하는 것이 좋다고 함.

일반 함수와의 비교

# 일반 함수
def add(x, y):
    return x + y

# 람다 함수
add_lambda = lambda x, y: x + y

print(add(3, 5))         # 출력: 8
print(add_lambda(3, 5))  # 출력: 8
  • 람다 함수는 한 번 사용하고 버릴 단순한 작업에 적합하며, 복잡한 로직이 필요하면 일반 함수를 사용하는 것이 좋음.
profile
화이팅

0개의 댓글