본문 바로가기

Programming/Python

Do it! 공부단 4일차 | ch04 프로그램의 입력과 출력_함수

ch04 프로그램의 입력과 출력

프로그래머는 프로그램을 만들기 전 어떤 식으로 동작할 것인지 설계를 하며, 이때 가장 중요한 것이 입출력의 설계이다.

  • 특정 프로그램에서만 사용하는 함수 만들기
  • 모든 프로그램이 공통으로 사용하는 함수 만들기
  • 오픈 API로 공개하여 외부 프로그램에도 사용 가능한 함수 만들기

이 모든 것이 입출력과 관련이 있다.

 

01 함수

함수는 프로그램 내 반복되는 부분이 있을 때 사용한다. 함수를 사용하면 프로그램의 흐름을 일목요연하게 알 수 있고 오류가 발생했을 때에도 바로 알아차릴 수 있다.

 

01-1 함수의 구조

파이썬 함수의 구조는 아래와 같다. 

def 함수이름(매개변수):

    수행할 문장 1

    수행할 문장 2

    수행할 문장 3

 

01-2 매개변수와 인수

매개변수(parameter)와 인수(arguments)는 혼용해서 사용되는 헷갈리는 용어이므로 잘 기억해둬야 한다. 매개변수는 함수에 입력으로 전달된 값을 받는 변수를 의미하고 인수는 함수를 호출할 때 전달하는 입력값을 의미한다.

 

예시를 보자.

def add(a, b):  #a,b는 매개변수
	return a + b
    
print(add(3,4)) #3,4는 인수

 

01-3 함수의 형태

함수는 입력값과 결괏값의 존재 유무에 따라 4가지 유형으로 나뉜다. 유형별로 형태와 예시를 보자.

 

일반적인 함수

형태

def 함수이름(매개변수):

    수행할 문장

    ....

    return 결괏값

 

예시

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

a = add(3,4) #결과값을 받을 변수 = 함수이름(입력인수1, 입력인수2, ···)
print(a)

 

입력값이 없는 함수

예시

def say():
    return 'Hi'

a = say() #결과값을 받을 변수 = 함수이름()
print(a)

 

 

결괏값이 없는 함수

예시

def add(a, b):
    print("%d, %d의 합은 %d입니다." %(a, b, a + b))

add(3, 4) #함수이름(입력인수1, 입력인수2, ···)

"3, 4의 합은 7입니다."는 함수에서 수행할 문장에 해당하는 부분일 뿐 결괏값은 아니다. 결괏값은 오직 return 명령어로만 돌려받는다. 

 

 

입력값도 없고 결괏값도 없는 함수

def say():
    print('Hi')

say() #함수이름()

 

01-4 매개변수 지정하기

함수를 호출할 때 매개변수를 지정할 수도 있다. 예시를 보자.

 

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

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

코드에서처럼 매개변수는 순서에 상관없이 지정할 수 있다.

 

01-5 여러 개의 입력값 받기

입력값이 여러 개인데 몇 개가 입력될지 모를 땐 아래와 같은 형태를 사용한다.

def 함수이름(*매개변수):

    수행할 문장

    ...

 

예시를 보자.

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

result = add_many(1, 2, 3, 4, 5)
print(result)

매개변수 *args처럼 매개변수 앞에 *을 붙이면 입력값을 전부 모아 튜플로 만들어준다. 위 예시에서는 args가 (1, 2, 3, 4, 5)가 된다.

*args는 매개변수를 뜻하는 영어 단어 arguments의 약자이며 관례적으로 자주 사용한다.

*함수 add_many의 안과 밖에서 모두 result라는 변수가 사용되었지만 이들은 서로 상관이 없다.

 

 

매개변수 *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

result_add = add_mul('add', 1,2,3,4,5)
result_mul = add_mul('mul', 1,2,3,4,5)

print(result_add)
print(result_mul)

choice라는 또 다른 매개변수를 추가해 덧셈과 곱셈 두 가지 기능을 수행하는 함수를 만들었다.

 

01-5 매개변수 초깃값 설정

함수의 인수를 전달하는 또 다른 방법은 매개변수의 초깃값을 미리 설정하는 것이다.

 

예시를 보자.

def say_myself(name, old, woman=True):
    print("나의 이름은 %s입니다." %name)
    print("나이는 %d살 입니다." %old)
    if woman:
        print("여자입니다")
    else:
        print("남자입니다")

say_myself("동해", 24)
say_myself("동해", 24, True)

say_myself함수를 보면 woman=True와 같이 매개변수의 초깃값을 미리 넣어주었다. 함수의 매개변수 값이 항상 변하는 경우가 아니라면 이런 설정이 유용하게 쓰일 수 있다.

*초기화시키고 싶은 매개변수는 항상 뒤쪽에 놓는다. 다른 변수 사이에 놓을 경우 파이썬 인터프리터는 인수를 어느 매개변수에 넣을지 알 수 없다. 

 

01-6 lambda

  • lambda는 함수를 생성할 때 사용하는 예약어로 def와 동일한 역할을 한다.
  • 이는 함수를 한 줄로 간결하게 만들 때 사용한다.
  • def를 사용해야 할 정도로 복잡하지 않거나 def를 사용할 수 없을 때 쓰인다.
  • 형태는 다음과 같다.

lambda 매개변수 1, 매개변수 2,... : 매개변수를 사용한 표현식

 

예시를 보자.

add = lambda a, b: a+b #return 명령어 없이도 결괏값을 돌려준다.
result = add(3,4)
print(result)

 

 

함수 쓸 때 ':'쓰는거 잊지 말자.


이 글은 책 『Do it! 점프 투 파이썬』을 읽은 후 작성한 글입니다.

 

Do it! 점프 투 파이썬

코딩을 처음 배우는 중·고등학생과 나만의 경쟁력을 갖추고 싶은 문과생, 소프트웨어 시대에 대비하여 새로운 스펙을 준비하려는 직장인까지! 모두 ‘점프 투 파이썬’으로 프로그래밍을 시작

www.easyspub.co.kr