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! 점프 투 파이썬』을 읽은 후 작성한 글입니다.
'Programming > Python' 카테고리의 다른 글
Do it! 공부단 5일차 | ch05 파이썬 날개달기_클래스 (0) | 2021.03.18 |
---|---|
Do it! 공부단 4일차 | ch04 프로그램의 입력과 출력_사용자 입출력과 파일 (0) | 2021.03.10 |
Do it! 공부단 3일차 | ch03 제어문_while문과 for문 (2) | 2021.03.05 |
Do it! 공부단 3일차 | ch03 제어문_if 문 (0) | 2021.03.04 |
Do it! 공부단 2일차 | ch02 자료형_딕셔너리, 집합, 불 (0) | 2021.03.04 |