[python] 사용자 함수 정의

사용자 함수 정의

함수를 정의할 수 있는 방법들을 알아보겠습니다.

🧩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://wikidocs.net/21127

https://jythonbook-ko.readthedocs.io/en/latest/DefiningFunctionsandUsingBuilt-Ins.html

댓글 쓰기

0 댓글