[Python] 문법 기초 - 함수와 람다 표현식

함수와 람다 표현식

global 키워드

변수에 global 키워드를 지정하면, 해당 함수에선 지역 변수를 만들지 않고 함수 바깥에 선언된 변수를 바로 참조하게 됨.

a = 0

def func():
    global a    # 바깥의 변수 a를 참조한다.
    a += 1
  • 참고: 전역변수로 선언된 리스트 객체의 내부 메서드를 수행하는 것은 오류없이 수행 가능하다.
array = [1, 2, 3, 4, 5]

def func():
    array.append(6)
    print(array)

func()

여러 개의 반환값

  • 파이썬에서의 함수는 여러개의 반환값을 가질 수 있다. (’패킹’이라고 함. 다시 담는 건 ‘언패킹’.)
def operator(a, b):
    add_var = a + b
    subtract_var = a - b
    multiply_var = a * b
    divide_var = a / b
    return add_var, subtract_var, multiply_var, divide_var

a, b, c, d = operator(7, 3)
print(a, b, c, d)

람다 표현식

  • 함수를 간단하게 작성할 수 있다. (이름없는 함수)
  • 함수 자체를 입력으로 받는 함수에서 유용하게 사용 / 함수가 간단하거나 한번 쓰고 말 때
def add(a, b):
    return a + b

#일반적인 add() 메서드 사용
print(add(3, 7))

# 람다 표현식으로 구현한 add() 메서드
print((lambda a, b: a + b)(3, 7))
# 예시1: sort() 함수를 사용해 정렬할 때 유용하게 사용할 수 있다.

array = [('홍길동', 50), ('이순신', 32), ('아무개', 74)]

# 람다 없이 함수 만들어 사용
def my_key(x):
    return x[1]

print(sorted(array, key=my_key))

# 람다 사용 시.
print(sorted(array, lambda x: x[1]))

예시2) 여러개의 리스트에 적용하기

# 각 list별 같은 인덱스끼리 더하고 싶다.

list1 = [1, 2, 3, 4, 5]
list2 = [6, 7, 8, 9, 10]

result = map(lambda a, b: a + b, list1, list2)
print(list(result))

# 결과
# [7, 9, 11, 13, 15]

 

실전에서 유용한 표준 라이브러리

자주 사용되는 내장 함수

  • sum(), min(), max(), eval()
  • sorted() : 각 원소를 정렬한 결과를 반환함.
# sorted()
result = sorted([9, 1, 8, 5, 4])     # 오름차순
reverse_result = sorted([9, 1, 8, 5, 4], reverse=True)     # 내림차순

# sorted() with key : 정렬 기준을 명시할 수 있다.
# 두번째 원소를 기준으로 내림차순 정렬하기
array = [('홍길동', 35), ('이순신', 75), ('아무개', 50)]
result = sorted(array, key=lambda x: x[1], reverse=True)