이번 포스팅에선 Python의 함수에서 여러 개의 매개변수를 받기 위해 사용할 수 있는 *args, **kwargs, 변수 선언 위치에 따라 활동범위가 달라지는 지역변수와 전역변수, 람다 표현식(Lambda Expression)에 대해 알아보도록 하겠습니다.
1. *args, **kwargs
1-1. *args
- *args는 사용자 정의 함수를 호출할 때 인자로 여러 개의 매개변수를 넘겨주기 위해 사용합니다.
- args는 인자 : arguments에서 따온 것이며 다른 키워드로 작성해도 무방하나 관례적으로 args를 많이 사용합니다.
- 일반 매개변수도 함께 주고자 하는 경우, Python은 일반 매개변수와 *args의 순서를 인식하지 못하므로 *args를 일반 매개변수보다 뒤에 위치시켜야 합니다.
- 아래 코드를 보며 *args가 사용되는 예시를 보겠습니다.
# *args
# 매개변수로 넘겨받은 정수를 모두 더하는 함수
def args_test(*args):
# 매개변수로 받은 수들을 저장할 result 변수
result = 0
for count in args:
result += count
return result
print(args_test(1000, 20000, 30020)) #51020
- 위에서 언급된 것처럼 *args의 위치는 일반 매개변수 뒤에 위치시킵니다.
# *args는 일반 매개변수 뒤에 위치시킨다.
def args_test2(string, *args):
print(string, args)
print(args_test2("사용자가 입력한 수 : ", 1000, 20000, 30020)) # 사용자가 입력한 수 : (1000, 20000, 300020)
- 만약 순서를 지키지 않고 매개변수를 주게 된다면 의도하지 않은 결과가 출력되기에 반드시 매개변수로 넘겨줄 값들이 함께 존재할 경우 일반 매개변수의 뒤에 위치시켜야 합니다.
# 앞서 언급된 것처럼 순서를 지켜야 한다.
def args_test2(string, *args):
print(string, args)
print(args_test2(1000, 20000, 30020, "사용자가 입력한 수 : ")) # 1000 (20000, 30020, '사용자가 입력한 수 : ')
1-2. **kwargs
- **kwargs는 *args와 역할은 비슷하나 함수에게 전달할 인자의 형태를 key : value 형태의 Dictionary 형태로 전달할 수 있습니다.
- kwargs는 keyword arguments에서 따온 키워드이며 *args와 마찬가지로 다른 키워드를 사용할 수도 있습니다.
- **kwargs, *args를 함께 사용하고자 하는 경우 **kwargs의 위치를 *args보다 뒤에 위치시킵니다.
- **kwargs 매개변수가 담긴 함수를 호출할 땐 전달 인자의 형태를 key = value 형태로 전달합니다.
- 아래 코드를 함께 확인해 보겠습니다.
# **kwargs
def input_string(**kwargs):
print(kwargs)
input_string(name = 'wonjun1', age = 25) # {'name': 'wonjun1', 'age': 25}
2. 지역변수(Local variable), 전역변수(Global variable)
2-1. 지역변수(Local variable)
- Local scope, 즉, 지역 범위 내에서만 영향을 주고 받을 수 있는 변수가 지역변수입니다.
- 함수의 내부 scope에서 선언된 변수로, 사용범위는 함수의 블록 내에서만 가능합니다.
- 함수가 호출되어 실행되고 난 뒤 지역변수는 소실됩니다.
- global, nonlocal
- global : 해당 키워드를 통해 함수 내부에서도 전역변수에 접근이 가능합니다.
- nonlocal : 해당 키워드로 지역변수가 포함되지 않은 다른 함수에서도 지역변수에 접근할 수 있습니다.
# 예시 코드
a = 1 # 전역변수 선언
def var_test():
result = a + 1 # 해당 변수는 지역변수, 함수 내부에서만 사용 가능
return result
print(var_test()) # 4
print(a) # 1
2-2. 전역변수(Global variable)
- Global scope, 즉, 특정 범위가 아닌 코드의 전체 범위에서 사용될 수 있는 변수를 의미합니다.
- 코드 전체의 모든 요소가 해당 전역변수에 접근할 수 있습니다.
# 전역변수
a = 10
def var_test2():
global a # 함수 내에서도 전역변수인 a에게 접근하겠다는 의미
a = a + 1
return a
print(var_test2()) # 11
print(a) # 11
3. Lambda Expression (람다 표현식)
- Lambda expression이란, 간단한 형태의 함수를 좀 더 직관적으로 표현식의 형태로 작성할 수 있는 방법입니다.
- 람다 표현식을 통해 함수명이 존재하지 않는 익명함수의 형태로 함수를 정의할 수 있습니다.
- 여기서 익명함수(Anonymous function)란, 함수명이 존재하지 않는 함수를 말하며, 함수명이 존재하지 않기에 특정한 변수에 함수를 저장합니다. 이렇게 만들어진 익명함수는 해당 변수를 통해 익명함수를 호출할 수 있습니다
- 간단한 로직을 가지고 있는 함수는 위와 같이 Lambda expression으로 정의하여 사용할 수 있지만 권장되지 않는 방법 중 하나입니다. 람다 표현식을 이용하여 함수를 정의할 수 있다라는 내용 정도만 알아두시고 def 키워드를 통해 사용자 정의 함수를 정의해 주시는 것이 좋습니다.
- def 키워드를 사용하지 않고 표현식의 경우는 lambda 키워드를 사용하여 함수를 정의합니다.
- 문법 :
변수명 = lambda 매개변수: 수행 식
# Lambda expression
# 기존 def로 함수 선언
def number_add(a, b):
result = a * b
return result
# Lambda expression을 이용한 간단한 함수 작성
result_sum = lambda a, b: a + b
print(result_sum(10, 20))
리스트(List) 자료형에 람다 표현식을 사용하여 함수를 저장하고 인덱싱을 통해 함수를 호출할 수 있습니다.
# 리스트에 lambda expression 사용
numberList = [lambda num1, num2: num1 + num2, lambda num1, num2: num1 * num2]
print(numberList[0](10, 20) + numberList[1](30, 20)) # 630
이번 포스팅에선 Python의 함수의 여러 가지 매개변수를 다양하게 넘겨받는 *args, **kwargs와 함수를 정의하는 방법인 Lambda expression에 대해 알아보았습니다. 다음 포스팅에선 사용자 입출력(Input / Output)에 대해 알아보겠습니다.
======================================================================
해당 포스팅에 대해 내용 추가가 필요하다고 생각되면 기존 포스팅 내용에 다른 내용이 추가될 수 있습니다.
개인적으로 공부하며 정리한 내용이기에 오타나 틀린 부분이 있을 수 있습니다.
이에 대해 지적해 주시면 감사하겠습니다.
'백엔드(Back-End) > Python' 카테고리의 다른 글
[Python] - 함수(Function), 함수의 return (2) | 2022.08.19 |
---|---|
[Python] - 제어문 - 반복문(while, for문), List comprehension (0) | 2022.08.19 |
[Python] - 제어문 - 조건문(if, elif) 여러 가지 연산자 (0) | 2022.08.17 |
[Python] - 자료형 - 집합(Set), Boolean (0) | 2022.08.15 |
[Python] - 자료형 - 딕셔너리(Dictionary) (0) | 2022.08.15 |
댓글