🔥알림🔥
① 테디노트 유튜브 -
구경하러 가기!
② LangChain 한국어 튜토리얼
바로가기 👀
③ 랭체인 노트 무료 전자책(wikidocs)
바로가기 🙌
④ RAG 비법노트 LangChain 강의오픈
바로가기 🙌
⑤ 서울대 PyTorch 딥러닝 강의
바로가기 🙌
#09-파이썬(Python) 함수, lambda 함수, 인수(arguments), 매개변수(parameters)
본 포스팅은 파이썬(Python) 코딩 입문자를 위한 튜토리얼 시리즈 연재 중 일부입니다. 이번 튜토리얼에서는 파이썬의 함수(function), lambda 함수, 인수(arguments)와 매개변수(parameters)를 다룹니다.
코드
함수(function)
- 자주 사용되는 코드 및 반복되는 코드를 모아 하나의 기능으로 만들고 이름을 붙인 것입니다.
- 즉, 함수의 가장 중요한 기능은 바로 코드의 재사용성입니다.
함수의 기본 구조
def
키워드로 시작합니다.- 함수명을 기입합니다.
- () 안에 매개변수를 지정할 수 있고, 생략도 가능합니다.
- 끝에는
:
으로 끝납니다. - 함수의 범위 안에서는 들여쓰기를 합니다. 들여쓰기가 끝난 지점이 함수의 범위가 끝나는 지점입니다.
(예시)
def add_function(a, b):
result = a + b
return result
함수의 다양한 형태
일반 형태
- 입력 매개변수: O
- return: O
def sample_function(a, b):
result = a + b
return result
입력 매개변수가 없는 형태
def sample_function():
a = 1
b = 2
result = a + b
return result
return 이 없는 형태
def sample_function(a, b):
result = a + b
print(f'result: {result}')
입력 매개변수, return 모두 없는 형태
def sample_function():
print('Hello, World!')
함수의 이름 및 호출
- 함수의 이름은 알파벳이나
_
로 시작해야 합니다. - 함수의 지정된 이름과 () 로 호출 할 수 있습니다.
def sample_function():
print('함수가 호출 되었습니다!')
함수의 이름만 출력시
sample_function
<function __main__.sample_function()>
호출(call): 함수의 이름과 함께 ()
를 같이 실행
sample_function()
함수가 호출 되었습니다!
함수의 이름을 별도의 변수에 대입한 후 변수에 ()
를 같이 실행한 경우
a = sample_function
a()
함수가 호출 되었습니다!
# return 이 존재하는 경우
def sample_function():
print('함수가 호출 되었습니다!')
return 123
return 값이 존재하는 경우 함수는 결과 값을 반환 하며 반환된 결과를 변수에 대입할 수 있습니다.
result = sample_function()
함수가 호출 되었습니다!
result
123
하지만, 함수가 아무런 결과 값을 반환하지 않는다면 함수로부터 반환된 결과는 None
입니다.
# return 이 없는 경우
def sample_function():
print('함수가 호출 되었습니다!')
result = sample_function()
함수가 호출 되었습니다!
print(result)
None
docstring
- 함수에 대한 설명을 기록
def sample_function():
"""
함수에 대한 설명을 기록합니다.
sample_function은 함수를 설명하기 위한 예제 함수 입니다.
(예시)
호출의 예.
sample_function()
"""
print('함수가 호출 되었습니다.')
sample_function()
함수가 호출 되었습니다.
함수명.__doc__
로 docstring을 출력할 수 있습니다.
print(sample_function.__doc__)
함수에 대한 설명을 기록합니다. sample_function은 함수를 설명하기 위한 예제 함수 입니다. (예시) 호출의 예. sample_function()
함수의 인수(매개변수)
[참고]
- 인수(argument): 값, 변수, 참조 등 전달되는 값
- 매개변수(parameter): 함수 등에서 사용되는 전달된 값을 받는 변수
10
,20
이라는 값은 인수(argument)a
,b
는 매개변수(parameter)
def some_function(a, b):
result = a + b
return result
some_function(10, 20)
30
위치 인수(positional arguments)
- 가장 보편적인 인수입니다.
- 변수명을 인수로 지정합니다.
- 위치가 중요합니다.
a
, b
, c
를 위치인수로 지정한 경우
def add_function(a, b, c):
result = a + b + c
print(f'a: {a}, b: {b}, c: {c}')
print(f'sum: {result}')
return result
add_function(1, 3, 5)
a: 1, b: 3, c: 5 sum: 9
9
키워드 인수(keyword arguments)
- 위치 인수의 위치를 정확히 기억 하지 못하고 혼란을 야기할 수 있기 때문에 인수명에 값을 직접 지정합니다.
def add_function(a, b, c):
result = a + b + c
print(f'a: {a}, b: {b}, c: {c}')
print(f'sum: {result}')
return result
아래의 예제는 키워드로 매개변수에 대한 값을 지정하는 예시입니다.
add_function(b=3, c=1, a=5)
a: 5, b: 3, c: 1 sum: 9
9
기본 매개변수(default parameter)
- 매개변수에 기본 값을 지정할 수 있습니다.
- 기본 값을 지정시 인수에 값을 생략 가능합니다.
- 단, 기본 값이 지정된 인수는 위치 인수보다 다음에 위치해야 합니다.
def add_function(a, b=0, c=0):
result = a + b + c
print(f'a: {a}, b: {b}, c: {c}')
print(f'sum: {result}')
return result
add_function(1)
a: 1, b: 0, c: 0 sum: 1
1
add_function(1, 3)
a: 1, b: 3, c: 0 sum: 4
4
add_function(1, 3, 5)
a: 1, b: 3, c: 5 sum: 9
9
add_function(c=5, b=3, a=1)
a: 1, b: 3, c: 5 sum: 9
9
기본 매개변수가 위치 인수보다 앞 쪽에 위치한 경우 Error가 발생합니다.
def add_function(a=0, b, c):
result = a + b + c
print(f'a: {a}, b: {b}, c: {c}')
print(f'sum: {result}')
return result
File "<ipython-input-29-8487cf0d9f78>", line 1 def add_function(a=0, b, c): ^ SyntaxError: non-default argument follows default argument
*tuple 인수
- 여러 개의 인수를 전달 받을 수 있습니다.
- 여러 개의 인수를 전달 받은
*args
에는 튜플(tuple) 형식으로 데이터가 저장됩니다. *args
로 받은 인수는 반복문으로 처리하는 것이 일반 적입니다.- 대체적으로
*args
변수가 많이 사용됩니다.
def add_function(*args):
result = 0
print(f'args의 타입: {type(args)}')
for arg in args:
print(arg)
result += arg
print('==='* 5)
print(f'sum: {result}')
아무런 값을 전달하지 않은 경우(생략 가능)
add_function()
args의 타입: <class 'tuple'> =============== sum: 0
1개의 값을 전달한 경우
add_function(1)
args의 타입: <class 'tuple'> 1 =============== sum: 1
복수의 값을 전달한 경우
add_function(1, 2, 3, 4, 5)
args의 타입: <class 'tuple'> 1 2 3 4 5 =============== sum: 15
위치 매개변수와 *tuple 매개변수의 혼용
- *tuple 매개변수는 위치 매개변수의 뒤에 위치해야 합니다.
def add_function(a, *args):
print(f'a: {a}')
print('==='* 5)
result = 0
for arg in args:
print(arg)
result += arg
print('==='* 5)
print(f'sum: {result}')
아무런 값을 지정하지 않은 경우
- 위치 매개변수 미지정으로 인한 Error 발생
add_function()
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-35-1553848aed78> in <module> ----> 1 add_function() TypeError: add_function() missing 1 required positional argument: 'a'
단일 값을 지정한 경우
add_function(1)
a: 1 =============== =============== sum: 0
복수의 값을 지정한 경우
add_function(1, 2, 3, 4, 5)
a: 1 =============== 2 3 4 5 =============== sum: 14
**dict 인수
- 여러 개의 인수를 전달 받을 수 있습니다.
- 여러 개의 인수를 전달 받은
**kwargs
에는 딕셔너리(dict) 형식으로 데이터가 저장됩니다. **kwargs
로 받은 인수 역시 반복문으로 처리하는 것이 일반 적입니다.- 대체적으로
**kwargs
변수가 많이 사용됩니다.
def add_function(**kwargs):
total_age = 0
for name, age in kwargs.items():
print(f'이름: {name}, 나이: {age}')
total_age += age
print('==='* 5)
print(f'전체 나이의 합계: {total_age}')
아무런 값을 지정하지 않은 경우
add_function()
=============== 전체 나이의 합계: 0
단일 값을 지정한 경우
add_function(lee=5)
이름: lee, 나이: 5 =============== 전체 나이의 합계: 5
add_function(john=10, peter=12, lee=5)
이름: john, 나이: 10 이름: peter, 나이: 12 이름: lee, 나이: 5 =============== 전체 나이의 합계: 27
딕셔너리(dictionary)를 인수로 지정하는 경우 **
를 앞에 붙혀 줍니다.
person = {'john': 10, 'peter': 12, 'lee': 5}
person
{'john': 10, 'peter': 12, 'lee': 5}
add_function(**person)
이름: john, 나이: 10 이름: peter, 나이: 12 이름: lee, 나이: 5 =============== 전체 나이의 합계: 27
lambda : 익명 함수(annonymous function)
- 이름 없이 정의된 함수 입니다.
- 단일 문장(1줄)의 코드로 작성되어야 합니다.
- 함수 내부에서는 return문이 포함하지 않지만 값을 반환합니다.
단일 인수를 가지는 lambda 함수
a = lambda x: x * 2
a(4)
8
2개의 인수를 가지는 lambda 함수
a = lambda x, y: x * y
a(4, 8)
32
기본 값이 지정된 인수를 가지는 lambda 함수
a = lambda x, y=10: x * y
a(3)
30
키워드 인수를 지정하는 lambda 함수
a(y=5, x=3)
15
lambda 함수 내부에서 조건문 사용
a = lambda x, y: x * y if x > 0 else y
a(4, 8)
32
a(-1, 8)
8
다음과 같이 elif
구문을 억지로 생성할 수 있습니다.
하지만, 복잡한 조건문을 사용하기 위해서는 일반적인 함수 사용을 권장합니다. (코드의 가독성이 떨어집니다.)
a = lambda x: x * 10 if x < 2 else (x**2 if x < 4 else x + 10)
a(1)
10
a(3)
9
a(4)
14
댓글남기기