사용자 함수 정의
함수를 정의할 수 있는 방법들을 알아보겠습니다.
🧩1. 함수 구문 기초
def 이름(매개변수)
- 함수는 보통 ‘def’라는 정의어, 함수의 이름, (존재하는 경우) 함수의 매개변수, 그리고 코드 몸체로 이루어집니다.
- ‘def’ 는 정의하다 define의 줄임말 입니다.
def times2(n):
return n * 2
times2(4)
#출력된 값 8
- python 함수는 조건문 내에서 정의할 수도 있습니다. 코드의 지점에서든 가능합니다.
if variant:
def f():
print "이렇게"
else:
def f():
print "혹은 저렇게"
- python 함수의 매개변수는 형(type)을 정하지 않습니다. 따라서 어떤 유형의 개체든 참조할 수 있습니다.
- times2 함수에 문자를 넣은 경우와 리스트를 넣은 경우 다음과 같이 반환됩니다.
times2('abc')
#출력된 값 'abcabc'
times2([1,2,3])
#출력된 값[1, 2, 3, 1, 2, 3]
- 함수에 문자를 매개변수로 넣은 경우 내부적으로 문자의 복사본이 만들어지며 변경사항은 사본에 적용됩니다. 원래 문자는 변경되지 않습니다.
def changestr(mystr):
mystr = mystr + '_changed'
print 'The string inside the function: ', mystr
return
mystr = 'hello'
changestr(mystr)
#출력된 값 The string inside the function: hello_changed
mystr
#출력된 값'hello'
- 매개변수에 함수가 포함할 수도 있습니다.
def perform_calc(value1, value2, func):
return func(value1, value2)
🧩2. 정해지지 않은 매개변수
변수를 매개변수로 받는 경우입니다.
- 숫자들로 이루어진 순서형 변수를 받는 경우입니다.
def sum_args(*nums):
return sum(nums)
- 리스트 등 목록을 받는 경우입니다.
def sum_args(*nums):
return sum(nums)
- 즉, 정해지지 않은 인자 개수를 전달하기 위해 인자 앞에 * 기호를 붙입니다.
def temp(*args):
print(args)
temp(1,2,3)
temp("hello", 5, 7, ["Good", "Morning"])
#출력된 값
(1, 2, 3)
('hello', 5, 7, ['Good', 'Morning'])
- ** 기호를 사용하면 인자를 key:value 형태인 딕셔너리로 전달 할 수 있습니다.
def temp2(**kwargs):
print(kwargs)
temp2(a=3, b=4, c="hello")
#결과
{'a': 3, 'b': 4, 'c': 'hello'}
🧩3. 재귀 함수 호출
함수 내부에서 함수 자신을 호출하는 경우입니다.
- 1~n 까지의 모든 자연수를 곱한 하는 경우(3! = 1*2*3) 다음과 같이 사용할 수 있습니다.
def fact(n):
if n in (0, 1):
return 1
else:
return n * fact(n - 1)
🧩4. 함수 문서화
docstring
- 함수에 대한 문서화 문자열은 """ 세계의 큰따옴표로 감싸서 본문 가장 위에 넣습니다.
def fact(n):
"""n의 계승을 반환.
n의 계승을 재귀적으로 계산.
음수인지, 스택오버플로우가 일어나는지 검사하지 않음.
조심해서 사용할것!
"""
if n in (0, 1):
return 1
else:
return n * fact(n - 1)
🧩5. 반환 값
튜플 또는 다른 구조를 반환하여 한 번에 여러 값을 반환할 수 있습니다.
- 한 개의 매개변수에 대해 2가지 값을 반환하는 경우입니다.
def calc_tips(amount):
return (amount * .18), (amount * .20)
calc_tips(25.25)
#출력된 값(4.545, 5.050000000000001)
- 함수는 어떠한 개체든지 반환값으로 할 수 있습니다. 반환 값이 함수, 문자열인 경우 입니다.
def check_pos_perform_calc(num1, num2, func):
if num1 > 0 and num2 > 0:
return func(num1, num2)
else:
return 'Only positive numbers can be used with this function!'
def mult_values(value1, value2):
return value1 * value2
check_pos_perform_calc(3, 4,mult_values)
#출력된 값 12
check_pos_perform_calc(3, -44, mult_values)
#출력된 값 'Only positive numbers can be used with this function!'
참고 자료
https://jythonbook-ko.readthedocs.io/en/latest/DefiningFunctionsandUsingBuilt-Ins.html
0 댓글