-
[파이썬] 7. 파이썬 함수 정의와 호출 - 함수의 parameter, return (함수 파라미터와 리턴)파이썬 Python 2019. 12. 4. 13:28
함수란?
모든 컴퓨터 언어에서 함수는 무수히 많이 존재 한다.
지금까지 사용 했던 sum, mean, len, range 등도 모두 하나의 함수이다.
즉, 함수의 역할은 어떤 "입력 (input)"이 주어지면 그것에 대한
의도된 "출력 (output)"을 전달 하는 역할을 한다.
예를 들어 다음 함수의 역할을 살펴보자.
- range 함수: 정수를 입력으로 전달하면 [0, 정수)로 이루어진 리스트를 생성
- sum 함수: 리스트, 튜플 등을 입력으로 전달하면 전체 아이템의 합을 출력
- len 함수: 리스트, 튜플 등을 입력으로 전달하면 아이템의 개수를 출력
a = [1,2,3,4] length = len(a) print(length) summation = sum(a) print(summation)
위의 함수들은 모두 Python 내부에 정의되어 있다.
이렇게 이미 정의되어 있는 함수들을 내장함수 (built-in function) 이라고 한다.
파이썬에는 수많은 내장함수들이 존재하지만, 사용자가 직접 함수를 정의하여 만들 수도 있다.
코딩을 하는 이유 중 하나는 반복작업과 복잡한 계산을 컴퓨터에게 맡기게 하기 위해서 라고 생각한다.
그런 의미에서 코딩에서 함수의 정의는 매우 강력하다.
우리가 어떤 연산을 반복적으로 실행해야 할 때함수를 통해 생성하면,
앞으로 그 함수만을 사용해서 원하는 출력 결과를 바로바로 생성할 수 있기 때문이다.
# 함수의 정의
- def 키워드를 사용하여 함수를 정의
- argument (parameter) 정의 : 함수에 입력으로 전달하는 값
- 콜론(:) : 함수 역시 코드블록이므로 콜론이 필요
- body : 함수의 구현 부분. 들여쓰기 된 부분까지 함수의 코드블록으로 인지함
- 함수를 호출한 코드(caller)로 함수가 해당 기능을 수행하고,
- 완료된 값(output)을 전달하기 위해 return 키워드를 사용
- 즉, return 이후에 오는 값을 caller로 전달
- 함수의 네이밍의 중요성 : 어떤 기능을 하는 함수인지 최대한 명확하게 나타내야 함
- 이름으로부터 기능이 명시
- 의미와 반대되거나 맞지 않는 이름은 사용 금지!
- ex) get_a < get_student_name
def add(x, y): n = x+y return n l = len([1,2,4,5,2]) c = add(30, 300) print(l, c) #5 330
# parameter (argument, 인자)
- 함수에 전달되는 입력 (input)
- 없을 수도 있고, 한개 혹은 여러개로 존재할 수도 있음
- 파라미터로는 int, string, float, bool, list, dict 등 파이썬의 어떤 객체도 가능
- 함수도 함수의 파라미터로 전달 가능
- 파이썬의 경우 타입에 대한 명시가 없기 때문에,
- 생성시에 의도된 파라미터의 타입에 맞게 입력을 전달하는 것이 중요
- 파라미터를 전달할 때 정의된 순서에 따라 값을 전달해야 함
def test (): print('haha') print('good') return 100 a = test() print(a) ''' haha good 100 ''' def test2(x,y): print(x,y) n = x+y return n b = test2(13, 4) print(b) ''' 13 4 17 '''
# Default parameter (기본인자)
- 함수의 파라미터에 기본 값 지정 가능
- 파라미터를 지정하지 않을 경우 지정된 기본값으로 대체
def substracter(x,y): sub = x - y return sub a = substracter(190, 23) print(a) #167 def add (x, y, z=5): a = x+y+z return a add(10, 20) #35
- 기본파라미터의 예 : print 함수 (sep, end, file 등 여러 기본 파라미터를 가짐)
print(1, 2, 3, sep='!', end='%%%') print(3, 4, 5, sep = 'p') # 1!2!3%%%3p4p5
- 주의사항 : 디폴트 파라미터 뒤에 일반 파라미터 위치할 수 없음
''' 올바른 예 > def test(a, b, c = 1) > def test(a, b = 1, c = 2) > def test(a = 1, b = 1, c = 3) ''' ''' 올바르지 않은 예 > def test(a, b = 1, c) > def test(a = 1, b, c) > def test(a = 1, b = 1, c) '''
- 파라미터에 값을 전달할 때 파라미터의 이름을 명시하여 전달 가능
- 파라미터 이름을 사용하지 않을 경우 기본적으로 순서에 맞게 전달
def test(x,y,z): a = x+y+z return a print(test(x=10, y=20, z=30)) print(test(x=10, z =30, y=20))
# return
함수의 종료를 명시
- return 옆에 값이나 수식이 있따면 해당 값을 호출자에게 반환
- return 만 존재한다면 None을 반환
- return 이 없는 경우 기본적으로 함수 코드블록이 종료되면 종료로 간주하고 None을 반환
def weird_multiply(x,y): if x > 10: return x*y print(x+y) return (x+2)*y print(x+y) #수행 안됨 weird_multiply(1,5) #6 weird_multiply(11, 23) #253
def weird_multiply(x,y): if x > 10: return print(x+y) return (x+2)*y c = weird_multiply(12, 5) print(c) #None
def weird_multiply(x,y): if x > 10: return x*y c = weird_multiply(2, 5) print(c) #None
# multiple return (복수 값 반환)
tuple을 사용하여 여러개의 값 리턴 가능
def add_mul (x,y): s = x+y m = x*y return s,m c = add_mul(20,3) print(type(c)) print(c) a, b = add_mul(20, 3) print(type(a), type(b)) print(a, b) ''' <class 'tuple'> (23, 60) <class 'int'> <class 'int'> 23 60 '''
반응형'파이썬 Python' 카테고리의 다른 글
[파이썬] 9. Lamda 함수란? filter, map, reduce (0) 2019.12.05 [파이썬] 8. 파이썬 함수 정의와 호출 - 변수의 범위 (지역변수와 전역변수), 가변길이 인자 (*args, **kwargs), format 함수 (0) 2019.12.04 [파이썬] 6. 반복문 while / for 의 이해 (feat. break와 continue) (1) 2019.11.25 [파이썬] 5. 조건문 if / elif/ else (0) 2019.11.25 [파이썬] 4. 컬렉션 타입의 이해 - 파이썬 dictionary 와 set (0) 2019.11.18