[python] 고급 함수 - 일급 함수, 익명 함수, 람다 함수

혜진·2024년 8월 8일

Python

목록 보기
7/16
post-thumbnail

Python의 고급 함수 - 일급 함수, 익명 함수, 람다 함수

함수의 일급 객체로서의 활용

Python의 함수는 일급 객체로 취급되며, 이는 함수를 변수에 저장하거나 다른 함수로 전달할 수 있음을 의미한다.

📑 함수의 일급 객체로서의 활용 예제

def DoFunc1():
    print('DoFunc1 호출')

# 함수를 변수에 할당
otherFunc = DoFunc1
otherFunc()  # 출력: DoFunc1 호출

전역 변수, 지역 변수

Python에서는 전역 변수와 지역 변수를 사용할 수 있다.
함수 내에서 전역 변수에 접근하거나 수정할 때 주의해야 한다.

📑 전역 변수, 지역 변수 예제

player = '전국대표'  # 전역 변수

def FuncSoccer():
    name = '홍길동'  # 지역 변수
    print(name, player)

FuncSoccer()  # 출력: 홍길동 전국대표
print('player=', player)  # 출력: player= 전국대표

📑 변수 인식 순서, 영역 예제

Python의 변수는 Local, Enclosing Function, Global 순서로 인식된다.

a = 10; b = 20; c = 5  # 전역 변수

def Foo():
    a = 100  # 지역 변수
    def Bar():
        global a  # 전역 변수 사용
        print('a:', a, 'b:', b, 'c:', c)
        a = 300  # 전역 변수 수정
    Bar()
    print('a=', a)  # 출력: a= 100

Foo()
print('전역 변수 a=', a)  # 출력: 전역 변수 a= 300

고급 함수

익명 함수, 람다 함수
람다 함수는 익명 함수로, 간단한 연산을 한 줄로 작성할 수 있다.

📑 람다 함수 예제

# 람다 함수 정의
add = lambda x, y: x + y
print(add(3, 5))  # 출력: 8

# 리스트 정렬에서 람다 함수 사용
points = [(1, 2), (3, 1), (5, 4)]
points.sort(key=lambda point: point[1])
print(points)  # 출력: [(3, 1), (1, 2), (5, 4)]

함수의 매개변수 전달

가변 인수, 키워드 인수
Python 함수는 가변 인수와 키워드 인수를 사용할 수 있다.

📑 가변 인수, 키워드 인수 예제

def Func4(a, b, *v1, **v2):
    print(a)
    print(b)
    print(v1)  # 출력: 튜플
    print(v2)  # 출력: 딕셔너리

Func4(1, 2)
Func4(1, 2, 3, 4, 5)
Func4(1, 2, 3, 4, 5, m=6, n=7)

# 출력:
# 1
# 2
# (3, 4, 5)
# {'m': 6, 'n': 7}

디폴트 매개변수

함수의 매개변수에 기본값을 설정하여 인수를 전달하지 않아도 기본값을 사용할 수 있다.

📑 디폴트 매개변수 예제

def ShowGugudan(start, end=5):
    for dan in range(start, end+1):
        print(str(dan)+'단 출력')
        for i in range(1, 10):
            print(f"{dan}*{i}={dan*i}", end=' ')
        print()

ShowGugudan(2, 3)  # 2단과 3단 출력
ShowGugudan(3)  # 3단부터 5단까지 출력

📑 가변 인수 예제

가변 인수를 사용하여 매개변수의 개수가 유동적인 함수를 정의할 수 있다.

def SelProcess(choice, *ar):
    if choice == 'sum':
        re = sum(ar)
    elif choice == 'mul':
        re = 1
        for i in ar:
            re *= i
    return re

print(SelProcess('sum', 100, 90, 70))  # 출력: 260
print(SelProcess('mul', 100, 90, 78))  # 출력: 702000

0개의 댓글