본문 바로가기

공부 | Study/Python

#4 [Seoul OSD] 함수 이용하기

반응형

Python 파이썬 연재 시리즈

2020/03/11 - [공부/Python] - #1 Mac에서 파이썬 설치하기

2020/03/12 - [공부/Python] - #2 print() 함수 이용하기

2020/03/13 - [공부/Python] - #3 자료형과 문자열 기초

 

본 게시물은 서울 오픈스퀘어 D (Seoul OSD) 강좌를 바탕으로 작성되었습니다. Seoul OSD 강좌에서는 아나콘다(Anaconda) 주피터노트북(jupyter notebook)으로 실습을 진행했으며 이에 따라 일부 코드가 일반적인 파이썬 환경과 다르게 동작할 수 있습니다.

 

 

 


함수를 만들어보자


def plus(a, b):
    result =  a + b
    return result

r = plus(4, 5)
print(r)

위 코드는 기존 파이썬에는 없는 plus라는 함수를 만드는 과정이다. 

def 임의의 함수이름(변수1, 변수2): 를 써주고 이후에 원하는 과정을 작성하면 된다.

그럼 return은 어떤 역할을 하는 것일까?

 

def plus_(a, b):
    result =  a + b

r = plus_(4, 5)
print(r)

이렇게 return을 뺀 함수를 만들고 출력을 비교해보자.

9 none

왼쪽은 return이 있을 때 이고 오른쪽은 return이 없을 때이다. 계산만 수행하고 return을 통해 다시 result안에 넣어주지 않았기 때문에 none으로 출력되는 것이다. 따라서 함수를 작성할 때는 return을 통해 수행한 값을 다음에 사용할 수 있도록 넣어주도록 하자.

 


매개변수 활용하기


만약 위의 plus 함수를 사용할 때 사용자가 변수를 지정하지 않으면 함수 제작자가 원하는 변수가 들어가 계산되도록 하고 싶다면 어떻게 해야 할까? 기본 매개변수를 지정하면 되는데 그 방법은 상당히 간단하다.

def plus_1(a = 5, b = 5):
    result = a + b
    return result

r = plus_1() 
print(r)

r2 = plus_1(1, 10)
print(r2)
10
11

위에서 코드를 보면 알 수 있듯이 r은 변수를 아무것도 지정하지 않았기 때문에 기본 매개변수로 지정된 a=5와 b=5가 적용되어 연산되었다. 반면 r2와 같이 사용자가 변수를 지정하게 되면 자동으로 기본 매개변수가 아니라 사용자가 지정한 변수를 사용하여 연산이 진행된다.

 

조금 더 복잡한 함수를 작성해보자.

def person(name, age, address, phone):
    r = '''이 사람의 이름은 {name_defult}, 
    이 사람의 나이는 {age_defult}, 
    이 사람의 주소는 {address_defult}, 
    이 사람의 전화번호는 {phone_defult}'''
    result = r.format(name_defult = name, age_defult = age, address_defult = address, phone_defult = phone)
    return result
r = person('minsu', 20, 'seoul', '010-1234-5678')
print(r)

이렇게 매개변수를 작성해준 후 { } 중괄호를 이용해 문장 내에 변수가 들어갈 위치를 지정해준다. 그리고 변수.format 을 이용해 이 둘을 연결해주면 입력한 변수의 순서대로 문장이 작성된다. 결과는 아래와 같다.

이 사람의 이름은 minsu, 
    이 사람의 나이는 20, 
    이 사람의 주소는 seoul, 
    이 사람의 전화번호는 010-1234-5678

이와 같은 경우는 반드시 순서대로 작성해야하기 때문에 이 불편함을 없애려면 키워드 매개변수를 이용하면 된다.

def person(name, age, address, phone):
    r = '''이 사람의 이름은 {name_defult}, 
    이 사람의 나이는 {age_defult}, 
    이 사람의 주소는 {address_defult}, 
    이 사람의 전화번호는 {phone_defult}'''
    result = r.format(name_defult = name, age_defult = age, address_defult = address, phone_defult = phone)
    return result
r = person(name = 'minsu', address = 'seoul', 
           age = 20, phone = '010-1234-5678') 
print(r)

키워드 매개변수는 함수를 사용할 때 변수 입력을 단순히 나열하는 것이 아니라 name = 'minsu'처럼 이 변수가 어떤 매개변수와 짝을 이루는지 까지 적어주는 것이다. 그러면 변수입력을 이름, 주소, 나이, 휴대폰 순으로 적었지만 결과는 아래와 같이 함수에서 작성된 대로 출력되었다.

이 사람의 이름은 minsu, 
    이 사람의 나이는 20, 
    이 사람의 주소는 seoul, 
    이 사람의 전화번호는 010-1234-5678

 

def sum_all(numbers):
    print(numbers)
    
sum_all(1,2,3,4,5)

이렇게 모든 것을 더하는 함수를 작성하고 출력시키면 어떻게 될까?

TypeError: sum_all() takes 1 positional argument but 5 were given

우리의 바램과는 다르게 애러가 발생한다. 메시지를 읽어보면 대출 1개만 들어갈 수 있는 자리에 5개가 들어가서 애러가 발생했다는 것 같다. 이 경우 숫자를 튜플 형태로 들어가게 하면 될 것이다. 변수가 numbers에 들어갈 때 튜플 형태로 들어가게 하는 방법은 간단하다.

def sum_all(*numbers):
    total = 0
    for number in numbers:
        total = total + number
    print(total)
    
sum_all(1,2,3,4,5)

numbers 앞에 *별을 붙여주면 해결된다. 아래와 같이 잘 더해진 것을 알 수 있다.

15
반응형

'공부 | Study > Python' 카테고리의 다른 글

[Python GUI] #1 QT Designer 실행하기  (0) 2021.03.08
#5 [Seoul OSD] Docstring  (0) 2020.08.03
#3 자료형과 문자열 기초  (0) 2020.03.13
#2 print() 함수 이용하기  (0) 2020.03.12
#1 Mac에서 파이썬 설치하기  (0) 2020.03.11