본문 바로가기

Python

[Python3] 함수 관련 정리

반응형

파이썬 함수 기본 구조

def 함수명(매개변수):
    <수행할 코드1>
    <수행할 코드2>
    ...

def는 함수를 만들 때 사용하는 예약어이다. 함수 이름 뒤 괄호 안의 매개변수는 이 함수에 입력으로 전달되는 값을 받는 변수다.

def add(a, b):
    return a+b

a = 3
b = 4
print(add(3,4))

############# RESULT ##############
7

 

매개변수 지정하여 호출하기

def add(a, b):
    return a-b

print(add(a=3, b=5))
print(add(b=5, a=3))

print(add(a=5, b=3))
print(add(b=3, a=5))

############# RESULT ##############
-2
-2
2
2

 

입력값의 개수를 모를 때

def add(*args):
    result = 0
    for i in args:
        result = result + i
    return result

print(add(1,2,3))
print(add(1,2,3,4,5,6))
print(add(1,2,3,4,5,6,7,8,9,10))

############# RESULT ##############
6
21
55

위 예시처럼 인자의 개수가 정해지지 않았을 때는 함수 선언부에서 *args 처럼 별을 붙여서 만들면, 입력값을 전부 모아서 튜플로 만들어주기 때문에 별을 붙여 사용하면 편리하다. 이를 활용한 다음과 같은 예시도 있다.

def add_mul(choice, *args):
    if choice == "add" :
        result = 0
        for i in args:
            result = result + i

    elif choice == "mul" :
        result = 1
        for i in args:
            result = result * i
    return result

print(add_mul('add', 1,2,3,4,5))
print(add_mul('mul', 1,2,3,4,5))

############# RESULT ##############
15
120

직접 네이밍과 로직을 구성하여 딕셔너리 형태로 만들어주는 매개변수 작성법도 있다.

def print_kwargs(**kwargs):
    print(kwargs)

print_kwargs(a=1)
print_kwargs(name='foo', age=3)

위 print_kwargs라는 함수를 통해 입력값 a=1 또는 name='foo', age=3이 모두 딕셔너리로 출력할 수 있다. 즉, **를 매개변수 이름 앞에 붙이면 매개변수 kwargs는 딕셔너리가 되고 모든 key=value 형태의 결과값이 그 딕셔너리에 저장된다.

 

함수 결과(return) 관련

def add_and_mul(a,b):
    return a+b, a*b

result = add_and_mul(3,4)
print(result)

result1, result2 = add_and_mul(3,4)
print(result1)
print(result2)

########## RESULT ###########
(7, 12)
7
12

만약, 함수내에 리턴을 위와 같이 a+b, a*b 두 개로 작성하였을 경우에는 튜플 값으로 리턴을 한다. 만약 이 두가지의 리턴 값을 하나의 튜플로 리턴을 받는 방식이 아닌, 각각의 값으로 구분되어 리턴을 받고 싶다면, 변수 두 개에 위와 같이 리턴을 받으면 된다. 개인적으로 경험했던 이전의 언어들과는 또 다른 느낌이어서 확실히 신기하다.

 

매개변수에 초기값 설정

def info(name, old, man=True):
    print("Name : %s" % name)
    print("Age : %d" % old)
    if man:
        print("Man")
    else:
        print("Woman")

info('sssukho', 29)
print('\n')
info('sssuksoon', 29, False)

위 예시 코드에서의 info 함수에서 세 번째 매개변수처럼, 매개변수에 미리 값을 넣어줌으로써 매개변수에 초기값을 미리 설정하는 것이 가능하다. 함수의 매개 변수에 들어갈 값이 항상 변하는 것이 아닐 경우에는 이렇게 함수의 초기값을 미리 설정해두면 유용하다.

 

lambda

람다는 함수를 생성할 때 사용하는 예약어로 def와 동일한 역할을 한다. 보통 함수를 한줄로 간결하게 만들 때 사용한다. 보통 def를 사용해야 할 정도로 복잡하지 않거나 def를 사용할 수 없는 곳에 주로 쓰인다. 다음은 완전히 같은 역할을 하는 람다와 함수의 예시다. 특히 lambda는 return 명령어가 없어도 결과값을 돌려준다.

# 두 변수의 값을 더하는 lambda
add = lambda a, b: a+b
result = add(3,4)
print(result)

# 두 변수의 값을 더하는 함수
def add(a, b):
    return a+b

print(add(3,4))

 


반응형

'Python' 카테고리의 다른 글

[Python3] 내장 함수 관련 정리  (0) 2020.03.19
[Python3] Collection 모듈 내 Counter 관련  (0) 2020.03.17
[Python3] 제어문 관련 정리  (0) 2020.03.13
[Python3] 집합 관련 정리  (0) 2020.03.12
[Python3] 제어문 관련 정리  (0) 2020.03.12