파이썬의 함수

파이썬의 함수

이 글은 파이썬의 함수에 대해 설명합니다.

YouTube Video

파이썬의 함수

파이썬의 함수는 재사용 가능한 코드 블록을 정의하기 위해 필수적인 기능으로, 필요할 때 호출하여 프로그램을 조직적이고 단순화할 수 있도록 도와줍니다. 함수를 사용하면 코드의 가독성을 높이고 DRY 원칙(자신을 반복하지 말라, 같은 코드를 여러 번 작성하지 않기)을 따를 수 있습니다.

함수 정의하기

함수는 def 키워드를 사용하여 정의됩니다. 기본 문법은 다음과 같습니다:.

1def function_name(arg1, arg2, ..., argN):
2    """docstring (A brief description of the function)"""
3    processing
4    return return_value

예를 들어, 두 숫자를 더하는 함수를 정의하려면 다음과 같이 작성합니다:.

1def add(x, y):
2    """A function that adds two numbers and returns the result"""
3    return x + y

함수 호출하기

정의된 함수는 다음과 같이 호출 및 사용될 수 있습니다:.

1result = add(3, 4)
2print(result)  # Output: 7

함수의 구성 요소

  1. 함수 이름: 함수를 호출할 때 사용되는 이름.

  2. 인자(매개변수): 호출 시 전달된 데이터를 받는 변수 이름. 여러분은 0개 이상의 인자를 정의할 수 있습니다.

  3. 문서화 문자열 (Docstring): 함수의 목적과 사용법을 설명하는 데 사용되는 문자열. 선택 사항.

  4. 함수 본문: 함수가 실행할 지시문들이 작성된 들여쓰기된 블록.

  5. 반환값: return 문을 사용하여 호출자에게 반환되는 값. return이 생략되면 기본적으로 None이 반환됩니다.

인자의 종류

파이썬에는 여러 종류의 인자가 있습니다.

  1. 위치 인자: 함수를 호출할 때 인자를 전달하는 표준적인 방법.
  2. 기본값 인자: 호출 시 생략할 수 있는 기본값이 있는 인자.
1def greet(name, message="Hello"):
2    print(f"{message}, {name}")
3
4greet("Alice")  # "Hello, Alice"
5greet("Bob", "Good morning")  # "Good morning, Bob"
  1. 가변 길이 인수: *args는 여러 위치 인수를 튜플로 받고, **kwargs는 이를 딕셔너리로 받아들입니다.
1def func(*args, **kwargs):
2    print("args:", args)
3    print("kwargs:", kwargs)
4
5func(1, 2, 3, a=4, b=5)
6# Output:
7# args: (1, 2, 3)
8# kwargs: {'a': 4, 'b': 5}

함수를 올바르게 사용하면 Python 프로그램을 보다 효과적이고 효율적으로 작성할 수 있습니다.

Python에서의 람다 함수

Python에서는 lambda 함수를 사용하여 익명이고 간결한 함수를 정의합니다. 일반적인 def 키워드로 정의된 함수와 달리, lambda는 짧고 한 줄로 된 함수를 생성할 수 있게 합니다. 여기에서는 Python의 lambda 함수에 대해 자세히 설명하겠습니다.

lambda 함수의 기본

lambda 함수는 이름에서 알 수 있듯이 이름이 없는 임시 함수를 정의하는 데 사용되며, 익명 함수라고도 불립니다. 기본 문법은 다음과 같습니다:.

1lambda arguments: expression
  • arguments: 함수의 인수를 지정합니다. 여러 개의 인수는 쉼표로 구분하여 지정할 수 있습니다.
  • expression: 인수에 따라 계산되는 표현식입니다. 표현식의 결과는 함수의 반환값이 됩니다.

예를 들어, 아래의 코드는 두 숫자를 더하는 lambda 함수를 정의하고 실행합니다.

1add = lambda x, y: x + y
2print(add(5, 3))  # Output: 8

이 예제에서 lambda x, y: x + y는 두 개의 인수 xy를 받아 합계를 반환하는 lambda 함수입니다.

lambda 함수의 사용 사례

lambda 함수는 간단한 함수를 즉석에서 정의해야 할 때 유용합니다. 특히 다음과 같은 경우에 자주 사용됩니다:.

  1. 함수에 인수로 전달될 때

    • 짧고 임시적인 함수를 전달할 때 고차 함수(다른 함수를 인수로 받는 함수)에서 유용합니다.
  2. 리스트 정렬의 키를 지정할 때

    • sort() 또는 sorted()와 같은 함수에서 정렬 기준(키)을 지정할 때 유용합니다.

고차 함수에서의 예제 사용법

고차 함수의 대표적인 예로는 map(), filter(), reduce()가 있습니다. 이 함수들은 다른 함수를 인수로 받아 리스트와 같은 시퀀스에 적용합니다.

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

이 예제에서는 리스트의 각 숫자를 제곱하기 위해 lambda 함수가 map() 함수에 전달됩니다.

목록 정렬 사용 예

lambda 함수는 때로는 목록을 정렬할 때 사용자 정의 키를 지정하는 데 사용할 수 있습니다. 예를 들어, 다음 코드는 튜플의 두 번째 요소를 기준으로 목록을 정렬합니다.

1pairs = [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')]
2pairs.sort(key=lambda pair: pair[1])
3print(pairs)
4# Output: [(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]

이 예에서는 lambda 함수를 사용하여 튜플을 그들의 두 번째 요소(문자열)를 기준으로 정렬합니다.

filter()lambda

filter() 함수는 주어진 조건에 따라 목록(또는 다른 반복 가능한 객체)에서 요소를 필터링하는 데 사용됩니다.

1numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
2even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
3print(even_numbers)  # Output: [2, 4, 6, 8]

이 예제에서는 목록에서 짝수를 필터링하여 새 목록을 생성합니다.

lambdareduce()

reduce() 함수는 목록을 단일 값으로 축소하는 데 사용됩니다. lambda 함수를 사용하여 쉽게 구현할 수 있습니다.

1from functools import reduce
2
3numbers = [1, 2, 3, 4, 5]
4product = reduce(lambda x, y: x * y, numbers)
5print(product)  # Output: 120

이 예제에서는 목록의 모든 요소를 곱하여 결과를 생성합니다.

복잡한 lambda 함수 사용을 피하세요

lambda 함수는 간결하다는 장점이 있지만, 복잡한 로직을 구현하는 데 사용하면 읽기가 어려워집니다. 따라서 한 줄로 표현할 수 있는 간단한 작업에 사용하는 것이 적절합니다. 복잡한 작업의 경우 def를 사용하여 함수를 정의하는 것이 더 읽기 쉽고 관리하기 쉽습니다.

예를 들어, 아래와 같은 복잡한 lambda 함수 사용은 피해야 합니다.

1# Complex and hard-to-read lambda function
2complex_func = lambda x, y: (x * 2 + y) if x > y else (x + y * 2)

이 경우, 아래와 같이 def로 정의된 함수를 사용하는 것이 더 낫습니다.

1def complex_func(x, y):
2    if x > y:
3        return x * 2 + y
4    else:
5        return x + y * 2

결론

Python의 lambda 함수는 임시로 짧은 함수를 정의하는 데 편리한 도구입니다. 주로 고차 함수나 목록 작업에서 특정 조건을 간결하게 정의하는 데 사용됩니다. 그러나 lambda 함수는 간단한 작업에만 제한되어야 하며, 복잡한 로직의 경우 def 함수가 선호됩니다.

위의 기사를 보면서 Visual Studio Code를 사용해 우리 유튜브 채널에서 함께 따라할 수 있습니다. 유튜브 채널도 확인해 주세요.

YouTube Video