파이썬에서의 함수 작성은 간단하기도 여러가지 방법이 있다.
매번 쓰면서 헷갈리는 부분들이 있어서 이번 기회에 총정리 하고자 한다.
# 1. 함수의 필요성
- 특정 작업을 수행하는 명령문의 그룹
- 프로그램의 기능 단위로 모듈을 구성하는데 사용
- 프로그램이 복잡해지고 커질 때 함수를 사용하면 관리하기 쉬워지고 클래스 작성시에 필수적인 방법이다.
- 코드의 재사용이 가능하다.
# 2. 용어 정리
- argument (인수) : 함수에 전달하는 객체 (instance, object)
- parameter (매개변수) : 인수를 가리키는 이름 (인수를 저장할 변수)
- return (리턴값) : 함수의 결과를 출력하는 것 (반환)
def add(a, b): # a, b가 parameter 즉, 매개변수이다.
return a + b
result = add(10, 20) # a, b에 전달되는 객체로 인수이다. 즉 객체 (instance, object)
print(result)
# 3. 함수의 형태
(1) Parameter X, return X (Parameter, return 모두 없는 형태)
(2) Parameter X, return O (Parameter만 없고 return이 있는 경우)
(3) Parameter O, return O (Parameter, return 모두 있는 형태)
(4) Parameter O, return X (Parameter는 있고 return이 없는 경우)
다음과 같이 4가지 형식이 있다. 기본적으로 4가지 형태에서 쭉 뻗어서 파생이 되는 경우
def func(): # (1) paramter, return 모두 없는 형태
print('func')
x = func()
print(x)
def func(): # (2) parameter 없고 return만 있는 형태
return 'run func!'
x = func()
print(x)
def func1(a,b): # (3) parameter, return 모두 있는 형태
return a + b
x = func1(1, 2)
print(x)
def func2(a, b): # (4) parameter 있고, return 없는 형태
print(a+b)
x = func2(1, 2)
print(x)
# 4. argument의 종류
(1) 함수의 호출시 사용되는 argument
- positional argument : 위치에 따라 값이 전달되는 방식
- keyword argument : = 를 사용하여 특정 parameter에 값을 제공함, 순서에 상관없음
(2) 함수 정의시 사용되는 argument
- default argument : 새로운 arguemnt가 전달되지 않을 경우 사용되는 기본 값
(3) Python의 argument rule
- 함수 정의시 : non-default argument가 앞, default argument가 뒤에 위치
- 함수 호출시 : positional argument가 앞, keyword arguemnt가 뒤에 위치
def function(a, b):
return [a, b]
x = function(10, 20) # positional argument - 순서에 의해서 paramter에 argument를 전달
y = function(b=10, a=20) # keyword argument - parameter를 지정하여 argument를 전달
print(x, y)
def mySum(a, b=0): # default argument가 뒤쪽에 와야 한다.
return a + b
mySum(10), mySum(10, 5)
def func(a, b, c):
return a + b + c
func(10, c=20, b=30) # keyword argument가 뒤쪽에 위치해야 한다.
def func(a, b=1, c=2): # 디폴트가 뒤쪽에 와야 한다.
return a + b + c
func(10)
# 4. Parameter의 종류 (5가지)
(1) positional or keyword parameter (a, b, c)
가장 많이 사용하는 방식
(2) positional only parameter (a, b, /) # ver 3.8 이후 제공
특정 파라미터가 반드시 위치 인자로 전달되도록 강제하는 기능
(3) keyword only parameter (*, a, b)
키워드 파라미터만 사용가능
(4) var-positional parameter (*a)
def func(*args) : 값들이 튜플로 묶여서 args에 전달
(5) var-keyword parameter (**a)
def func(**args): 전달되는 내용이 딕셔너리로 묶여서 args에 전달
# (1) positional or keyword parameter
def func(a):
print(a)
func(10) # positional argument
func(a=20) # keyword argument
# (2) positional only parameter
# python v3.8 이상에서 사용 가능
def func(a, b, /): # 슬래시를 사용함으로써 특정 파라미터가 반드시 위치 인자로 전달되도록 강제할 수 있으며 , 함수 호출 방식을 제한하고자 할때 사용
p print(a)
func(10, 20)
# (3) keyword only parameter
def func(*, a, b):
print(a)
func(b=20, a=10) # keyword argument
func(10, 20) # 이 경우에는 positional로 전달하려고 해서 Error가 발생
# 내용 체크
def func(a, *, b, c): # a : positional or keyword parameter
return a + b + c # b, c : keyword only parameter
func(10, b=20, c=30)
func(a=10, b=20, c=30)
func(c=30, b=20, a=10) # keyword argument일때는 순서가 중요하지 않다.
# (4) var positional parameter
# a의 type은 튜플로 나온다.
def func(*a):
print(type(a), a)
func(1, 2, 3, 4, 5, 6, 7)
func()
def func(*a, b):
print(type(a), a)
print(b)
func(1, 2, 3, 4, 5, 6, 7, b=10)
func(b=20) # 이런식으로도 전달이 가능하다 (빈 튜플이 생성되고, b=20 만 전달)
# (5) var-keyword parameter : 맨 마지막 parameter로만 사용가능
#
def func(**a):
print(type(a), a)
func(A=10, B=20, C=30, D=40)
func() # 빈 딕셔너리 생성함
다음과 같이 사용을 할 수 있으며, 몇가지 요소들은 필수적인 암기가 필요하다.
'Python > Basic' 카테고리의 다른 글
[Python] lambda 함수 사용 (0) | 2022.11.08 |
---|---|
[Python] glob함수 사용 (0) | 2022.11.07 |
[Python] 설치된 모든 패키지 버전 확인 (0) | 2022.10.25 |
[파이썬]포매팅(formatting) 총정리 - 1 (0) | 2022.09.08 |
[Python] 파일 읽고 쓰기 (0) | 2022.04.17 |