파이썬 함수의 구조
def 함수명(인자…):
…
Return
특정 함수의 실행되는 부분은 들여쓰기부터 들여쓰기가 끝나는 지점까지이다. 그리고 함수에 입력되는 값을 인자로 부른다. 입력 값을 처리하는 부분은 연산자 또는 제어문으로 구성된다.
입력 값으로 계산한 결과에 대해 return을 수행하는데 1개 이상의 값이 될 수 있다. 다른 언어에서는 return은 하나인 반면 파이썬에서는 여러 개일 수 있다.
def hello():
print("hello world")
print('fn')
hello()
예제 코드는 함수를 선언하고 호출하는 내용이다. 위와 같이 함수는 반드시 호출 부분이 있어야 작성한 함수가 실행이 된다. 예제 코드의 경우 인자가 없으므로 인자 부분을 비워준 후 양식에 맞춰 작성하면 된다.
def sum(a, b):
return a + b
ret = sum(10, 20)
print(ret)
위는 덧셈 함수의 예제 코드이다. return 값이 있는 함수는 반드시 return값을 받아올 수 있는 참조 변수를 선언해준다. 최종 결과값으로는 10 + 20 = 30의 값이 ret로 return되어 출력된다.
def fn1():
return 10, 20, 30
ret = fn1()
print(ret)
예제 코드처럼 함수는 다양한 응용이 가능하다. return 값이 여러 개일 경우 콤마 연산자를 통해 나열해준다. ret값을 print를 사용하여 확인해보면 packing이 적용되어 자동으로 튜플로 변환된다. 반면에 a, b, c 값을 확인해보면 각각 return값을 받아오기 때문에 각 변수들이 순서대로 return 값들을 참조하게 된다.
즉, return이 여러 개인 경우 변수 하나로 받을 수 있거나 return의 개수 만큼 참조 변수를 선언해주게 되면 각각의 개별 개별 데이터가 return 값 순서대로 받게 된다.
함수의 특징
- 두 개 이상의 값을 리턴 가능하다.
- 명시적 인자
def fn2(a, b):
print(a, b)
# 명시적 인자 호출
fn2(b = 100, a = 200)
명시적 인자 호출이란 위의 예시처럼 각 함수 인자를 명시적으로 표기하여 호출할 수 있는 방법이다. 인자를 명시하지 않으면 순서대로 전달인자의 값이 들어가지만 명시하면 명시한 대로 들어간다.
n = 10
m = 20
print(n, m)
위의 print문에서 출력 결과는 10, 20으로 나타나며 예제 코드에서 space를 주는 이유는 seperator의 인자의 default값이 space로 되어 있기 때문이다. (sep = ‘ ‘)
n = 10
m = 20
print(n, m, sep='-')
그렇기 때문에 default 값을 ‘-‘로 수정하게 되면 앞선 예제 코드와는 다르게 10-20으로 출력되는 결과를 확인할 수 있다.
print('hello')
print('hi')
마찬가지로, 위의 예제 코드 역시 print문을 사용할 때 hello 출력 후 개행을 거쳐 hi가 출력되는데 그 이유는 end의 인자가 default 값으로 \n로 되어 있기 때문이다. (end=’\n’)
print('hello', end=' ')
print('hi')
그렇기 때문에 print 함수에서 end인자의 default 값을 수정해보면 한 줄로 출력되는 것을 확인할 수 있다. 이와 같이 상당히 많은 파이썬의 라이브러리가 명시적 인자 호출을 통해서 값을 줄 수 있다.
- 디폴트 인자
def fn3(a = 10, b = 20, c = 30):
print(a, b, c)
fn3()
fn3(100)
fn3(100, 200)
fn3(100, 200, 300)
예제 코드의 출력 결과를 보면 다음과 같이 해석된다. fn3() 함수는 총 3개의 인자를 요구하며 인자를 전달하지 않고 함수를 호출하게 되면 함수에 설정된 default 값으로 전달되며 이를 default 인자라고 부른다.
- 가변 인자
def fn4(*args):
print(args)
for n in args:
print(n)
fn4(10, 20)
fn4(10, 20, 30)
fn4('aa', 'bb', 'cc', 'dd')
인자의 개수가 정해져 있지 않는 것이 가변 인자다(args). 파이썬의 경우 넘어오는 값에 의해 type이 결정되기 때문에 예제 코드 처럼 정수나 문자열 아무거나 써도 무방하다. 심지어 실수를 써도 괜찮다.
또한 파이썬에서는 args를 사용하면 가변인자기 때문에 인자의 개수를 여러 개 써도 상관없으며 넘어온 값들은 튜플로 처리되며 인자의 값을 for문을 사용하여 출력 가능하다.
def fn5(*args):
for n in args:
print(n, "원의 면적:", n ** 2 * 3.14)
fn5(3, 4, 5)
가변 인자를 사용하여 위의 예제 코드처럼 원의 면적을 출력할 수도 있다. 튜플 형태로 인자가 들어오기 때문에 for문을 사용하여 각 인자들을 계산한다.
- 정의되지 않은 인자
def fn6(**args):
print(args)
fn6(name='홍길동', age=20)
fn6(aa=100, bb=200, cc=300)
정의되지 않은 인자는 **args이다. 정의되지 않은 인자도 가변 인자처럼 인자의 개수가 정해지지 않는다. 하지만 인자를 호출할 때 (변수명 = 값) 형식으로 사용해야 한다. 명시적 인자와 유사하지만 인자가 명시되어 있지 않다는 차이점이 존재한다. 넘어온 값들은 사전 타입으로 처리된다.
'언어 > Python' 카테고리의 다른 글
[Python] Python(파이썬) 함수 (3) - 일급 함수(first class function) (0) | 2020.04.06 |
---|---|
[Python] Python(파이썬) 함수 (2) - 메모리 구조와 LGB 규칙 (0) | 2020.04.05 |
[Python] Python(파이썬) 반복문(for, while)/range/축약형 문법 (0) | 2020.04.01 |
[Python] Python(파이썬) shallow copy(얕은 복사) 그리고 deep copy(깊은 복사) (0) | 2020.03.31 |
[Python] Python(파이썬) 구성원/식별 연산자 (0) | 2020.03.31 |