Python 함수

프로그래밍 함수

함수는 단일 작업을 수행하기 위해 사용되는 구성된 코드 블록입니다. 함수는 애플리케이션에 더 나은 모듈성과 재사용성을 제공합니다.

함수 인수 (Function Arguments)

함수는 인수(arguments)를 받고 반환 값(return values)을 가질 수 있습니다.

다음 예제에서 say_hello 함수는 “name” 인수를 받아 인사말을 출력합니다.

# 하나의 인수를 받는 함수 정의
def say_hello(name):
   print(f'Hello {name}')

# 문자열 인수로 함수 호출
say_hello('Carlos')
Hello Carlos
say_hello('Wanda')
Hello Wanda
say_hello('Rose')
Hello Rose

키워드 인수 (Keyword Arguments)

코드 가독성을 높이기 위해 가능한 한 명시적이어야 합니다. 키워드 인수(Keyword Arguments)를 사용하여 함수에서 이를 달성할 수 있습니다.

# 여러 매개변수를 가진 함수
def say_hi(name, greeting):
   print(f"{greeting} {name}")

# 위치 인수: 순서가 중요함
say_hi('John', 'Hello')
Hello John
# 키워드 인수: 순서는 중요하지 않으며, 가독성이 높음
say_hi(name='Anna', greeting='Hi')
Hi Anna
퀴즈

로그인하여 이 퀴즈에 답하고 학습 진행 상황을 추적하세요

Python 함수에서 키워드 인수를 사용하는 주된 이점은 무엇입니까?
A. 더 빠르게 실행됩니다
B. 메모리를 덜 사용합니다
C. 코드 가독성을 높이고 순서가 중요하지 않습니다
D. 오류를 방지합니다

반환 값 (Return Values)

def 문을 사용하여 함수를 만들 때, return 문으로 반환 값이 무엇이 되어야 하는지 지정할 수 있습니다. 반환문은 다음으로 구성됩니다.

  • return 키워드.

  • 함수가 반환해야 하는 값 또는 표현식.

# return 문을 사용하여 값을 반환하는 함수
def sum_two_numbers(number_1, number_2):
   return number_1 + number_2

# 함수를 호출하고 반환된 값을 저장
result = sum_two_numbers(7, 8)
print(result)
15
퀴즈

로그인하여 이 퀴즈에 답하고 학습 진행 상황을 추적하세요

Python 에서 함수로부터 값을 반환하기 위해 사용되는 키워드는 무엇입니까?
A. return
B. output
C. yield
D. exit

지역 및 전역 범위 (Local and Global Scope)

  • 전역 범위의 코드는 지역 변수를 사용할 수 없습니다.

  • 그러나 지역 범위는 전역 변수에 접근할 수 있습니다.

  • 함수 지역 범위 내의 코드는 다른 지역 범위의 변수를 사용할 수 없습니다.

  • 서로 다른 범위에 있는 경우 동일한 이름을 가진 여러 변수를 사용할 수 있습니다. 즉, spam 이라는 지역 변수와 spam 이라는 전역 변수가 모두 존재할 수 있습니다.

# 전역 변수: 어디서든 접근 가능
global_variable = 'I am available everywhere'

def some_function():
    print(global_variable)  # 전역 변수에 접근 가능
    # 지역 변수: 이 함수 내에서만 존재함
    local_variable = "only available within this function"
    print(local_variable)

# NameError 발생: local_variable 는 전역 범위에 존재하지 않음
print(local_variable)
Traceback (most recent call last):
  File "<stdin>", line 10, in <module>
NameError: name 'local_variable' is not defined

global 문 (The global Statement)

함수 내에서 전역 변수를 수정해야 하는 경우, global 문을 사용합니다.

# 함수 내부에서 전역 변수를 수정하기 위해 'global' 키워드 사용
def spam():
    global eggs  # 전역 변수를 수정하고 있음을 선언
    eggs = 'spam'  # 이것은 전역 변수를 변경함

eggs = 'global'
spam()  # 함수가 전역 변수를 수정함
print(eggs)  # 'spam'을 출력함, 'global'이 아님
spam
퀴즈

로그인하여 이 퀴즈에 답하고 학습 진행 상황을 추적하세요

전역 변수를 수정하기 위해 함수 내에서 반드시 사용해야 하는 키워드는 무엇입니까?
A. nonlocal
B. global
C. extern
D. 키워드가 필요 없음

변수가 지역 범위에 있는지 전역 범위에 있는지 판단하는 네 가지 규칙이 있습니다.

  1. 변수가 전역 범위 (즉, 모든 함수 외부) 에서 사용되는 경우, 항상 전역 변수입니다.

  2. 함수 내에 해당 변수에 대한 전역 문이 있는 경우, 전역 변수입니다.

  3. 그렇지 않고, 함수 내에서 할당문에서 변수가 사용되는 경우, 지역 변수입니다.

  4. 하지만 변수가 할당문에서 사용되지 않는 경우, 전역 변수입니다.

람다 함수 (Lambda Functions)

Python 에서 람다 함수는 단일 표현식만 가질 수 있지만, 임의의 수의 인수를 가질 수 있는 한 줄짜리 익명 함수입니다.

Python 3 튜토리얼에서 발췌

lambda 는 표현식 내에서 사용될 수 있는 최소한의 함수 정의입니다. FunctionDef 와 달리 body 는 단일 노드를 포함합니다.

단일 라인 표현식

람다 함수는 단일 라인의 코드와 같은 표현식만 평가할 수 있습니다.

이 함수:

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

add(5, 3)
8

다음 람다 함수와 동등합니다.

# 람다 함수: 한 줄로 정의된 익명 함수
# 구문: lambda 인수: 표현식
add = lambda x, y: x + y
add(5, 3)
8
퀴즈

로그인하여 이 퀴즈에 답하고 학습 진행 상황을 추적하세요

Python 에서 람다 함수란 무엇입니까?
A. 한 번만 호출할 수 있는 함수
B. 인수를 받지 않는 함수
C. 여러 값을 반환하는 함수
D. 임의의 수의 인수를 가질 수 있지만 단 하나의 표현식만 가질 수 있는 단일 라인 익명 함수

일반 중첩 함수와 마찬가지로 람다도 렉시컬 클로저로 작동합니다.

# 람다 클로저: 외부 범위의 변수를 캡처하는 람다 함수
def make_adder(n):
    return lambda x: x + n  # 람다가 외부 함수로부터 'n'을 캡처함

# 다른 양을 더하는 함수 생성
plus_3 = make_adder(3)  # 3 을 더하는 람다를 반환
plus_5 = make_adder(5)  # 5 를 더하는 람다를 반환

plus_3(4)  # 4 + 3 = 7 반환
7
plus_5(4)
9
퀴즈

로그인하여 이 퀴즈에 답하고 학습 진행 상황을 추적하세요

람다 클로저는 무엇을 가능하게 합니까?
A. 외부 범위의 변수 캡처
B. global 키워드 없이 전역 변수 수정
C. 여러 값 반환
D. 코드를 비동기적으로 실행

관련 링크