Python #15 l 파이썬 프로그램의 입력과 출력_함수

신승호·2021년 3월 3일
0

Python

목록 보기
16/35
post-thumbnail
post-custom-banner

List

  • 파이썬 프로그램의 입력과 출력
    • 함수
    • 사용자 입력과 출력
    • 파일 읽고 쓰기
    • 연습문제

파이썬 프로그램의 입력과 출력_함수


함수란 무엇인가?

입력과 출력

  • 입력 : 믹서에 넣는 사과
  • 출력(결과값) : 믹서에서 나오는 쥬스
  • **이때 믹서는 일을 입력받아 주스를 출력하는 함수와 같다.

함수를 사용하는 이유는 무엇일까?

  • 프로그래밍 중 반복적으로 사용되는 가치있는 내용을 묶어서-> 어떤 입력값을 주었을 때 어떤 결괏값을 돌려준다라 식의 함수로 작성
  • 자신이 만든 프로그램을 함수화하면 프로그램 흐름을 일목요연하게 볼 수 있기 때문

파이썬 함수의 구조

기본구조

def 함수이름(매개변수):
    <수행할 문장1>
    <수행할 문장2>
    ...
  • def : 함수를 만들 때 사용하는 예약어
  • 함수이름 : 함수를 만드는 사람이 임의로 만들면 된다.
  • (매개변수) : 함수에 입력으로 전달되는 값을 받는 변수
  • 수행할 문장 : 함수 정의 후 함수에서 수행할 문장을 쓰면 된다.

함수의 사용

def add(a, b):			# 함수이름은 add이고 입력으로 2개의 값을 받으며 결괏값은 2개의 입력값을 더한 값이다.
    return a + b		#이때 return은 함수의 결과값을 돌려주는 명령어다.
>>> a = 3
>>> b = 4
>>> c = add(a, b)
>>> print(c)
7

매개변수와 인수

  • 매개변수(parameter) : 입력으로 전달된 값을 받는 변수
  • 인수(arguments) : 인수는 함수를 호출할 때 전달하는 입력값
def add(a, b):  
    return a+b

print(add(3, 4))  		# 3, 4는 인수 

입력값과 결괏값에 따른

  • 입력값 ---> 함수 ---> 결과값

함수의 형태는 입력값과 결과값의 존재유무에 따라 4가지 유형으로 나뉜다

  • 입력값결과값있는 함수 (일반적인 함수)
    • 결괏값을 받을 변수 = 함수이름(입력인수1, 입력인수2, ...)
def 함수이름(매개변수):
    <수행할 문장>
    ...
    return 결과값
def add(a, b): 
    result = a + b 
    return result
    
>>> a = add(3, 4) 		# 입력값은 3, 4 이며 '인수'임
>>> print(a) 			# a 는 `매개변수`
7 
  • 입력값이 없는 함수
    • 결괏값을 받을 변수 = 함수이름()
    • 입력 인수가 없다
>>> def say():		 # 매개변수 부분인 괄호가 비어있다.
...     return 'Hi' 
... 
>>>
>>> a = say()
>>> print(a)
Hi
  • 결괏값이 없는 함수
    • 함수이름(입력인수1, 입력인수2, ...)
    • 결과값을 받을 매개 변수가 없다.
>>> def add(a, b): 
     print("%d, %d의 합은 %d입니다." % (a, b, a+b)) 	# 수행 문장일 뿐 결과값이 아니다.
>>> a = add(3, 4)
3, 4의 합은 7입니다.
>>> print(a) 
None 			# 결과값에 변수 대입했을 때 결과가 없는 것을 알 수 있다.
  • 입력값도 결괏값도 없는 함수
    • 함수이름()
    • 매개변수와 입력 인수도 둘다 없다.
>>> def say():
	print('Hi')		# 인수를 받는 변수도 없고, 결과값을 받는 return문도 없다
>>> print(say())
Hi
>>> a = say()
Hi
>>> print(a)
None

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

매개 변수 지정하기

>>> def add(a, b):
...     return a+b
... 
  • 매개변수를 숫자로 지정 할수도 있다.
>>> result = add(a=3, b=7)  # a에 3, b에 7을 전달
>>> print(result)
10 
>>> result = add(b=5, a=3)  # b에 5, a에 3을 전달
>>> print(result)
8

입력값이 몇 개가 될지 모를 때는 어떻게 해야 할까?

여러개의 입력값을 받는 함수

  • 함수이름(*매개변수) : 여러개의 숫자를 입력 할 수 있는 (*매개변수)이며, (매개변수)와는 다르다
def 함수이름(*매개변수): 
    <수행할 문장>
    ...
*** 여러개의 입력값을 모두 더하는 함수

>>> def add_many(*args): # 여기서 *args는 임의로 쓴거고 다른것으로 바꾸어도 된다.
       result = 0 
        for i in args: 
            result = result + i 
        return result 

>>> result = add_many(1,2,3) 
>>> print(result)
6
>>> result = add_many(1,2,3,4,5,6,7,8,9,10)
>>> print(result)
55
  • 함수(매개변수1, *매개변수2) : 매개변수1choice로 주고 실행할 문장에 if문elif문으로 구성한다. 매개변수2입력인수를 가지고 출력값을 낸다.
>>> 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_mul('add', 1,2,3,4,5)
>>> print(result)
15
>>> result = add_mul('mul', 1,2,3,4,5)
>>> print(result)
120
  • 함수이름(**매개변수) : **매개변수딕셔너리로 로 만들어져서 출력된다.
>>> def print_kwargs(**kwargs):
...     print(kwargs)
...
>>> print_kwargs(a=1) 		# 이떄 입력값은 "x=y"형태로 이루어 져야한다
{'a': 1}
>>> print_kwargs(name='foo', age=3)
{'age': 3, 'name': 'foo'}

함수의 결괏값은 언제나 하나이다

  • 2개의 입력 인수를 받아 더한 값과 곱한 값을 돌려주는 함수
>>> def add_and_mul(a,b):
	return a+b, a*b

*** add_and_mul 함수의 결괏값 a+b와 a*b는 튜플값 하나인 (a+b, a*b)로 돌려준다.

>>> result = add_and_mul(3,4)
>>> print(result)
(7, 12)
  • 두개의 결과값으로 받고싶은 경우
>>> result1, result2 = add_and_mul(3, 4)
>>> print(result1)
7
>>> print(result2)
12
  • return문이 2개인 경우엔 맨 처음꺼만 진행된다.
>>> def add_and_mul(a,b): 
...     return a+b 
...     return a*b 
... 

>>> result = add_and_mul(2, 3)
>>> print(result)
5
  • return문을 통해서 함수 빠져나가기
    • break와 비슷한 활용
>>> def say_nick(nick): 
        if nick == "바보": 
            return 
        print("나의 별명은 %s 입니다." % nick)

>>> say_nick('야호') # 입력인수가 바보가 아니기 때문에 출력 / 결과값은 아님
나의 별명은 야호입니다.
>>> say_nick('바보') # 입력인수가 바보 이기때문에 나감
>>>

매개변수에 초깃값 미리 설정하기

3개의 매개변수를 받는 함수

  • 아래의 say_myself(매개변수1, 매개변수2, 매개변수3) 은 3개의 매개변수를 받는다.
    • 이때 매개변수3man = True처럼 매개변수에 미리 값을 넣어 준 것임
    • 이처럼 매개변수에 초깃값을 미리 설정할 때는 마지막 매개변수의 마지막에 위치해야한다
>>> def say_myself(name, old, man=True):
	print("나의 이름은 %s 입니다." % name)
	print("나이는 %d살입니다." % old)
	if man:
		print("남자입니다.")
	else:
		print("여자입니다.")

		
>>> say_myself('seungho shin', 31, True)
나의 이름은 seungho shin 입니다.
나이는 31살입니다.
남자입니다.
>>> say_myself('seungho shin', 31, False)
나의 이름은 seungho shin 입니다.
나이는 31살입니다.
여자입니다.
*** 매개변수 초깃값을 설정하려고 할 때 매개변수 마지막에 위치시키지 않으면 아예 오류가 난다.
>>> def say_myself(name, man=True, old): 
	print("나의 이름은 %s 입니다." % name)
	print("나이는 %d살입니다." % old)
	if man:
		print("남자입니다.")
	else:
		print("여자입니다.")
		
SyntaxError: non-default argument follows default argument
>>> 

함수 안에서 선언한 변수의 효력 범위

a = 1
def vartest(a):
    a = a + 1

vartest(3)
print(a)

1
  • 이때 1이 나오는 이유는 def vartest(a)에서 입력값을 전달받는 매개변수 a는 함수 안에서만 사용하는 변수이지 함수 밖의 변수 a가 아니라는 뜻
def vartest(a):
    a = a + 1

vartest(3)
print(a)

Traceback (most recent call last):
  File "/Users/SEUNGHOSHIN/Documents/1.py", line 5, in <module>
    print(a)
NameError: name 'a' is not defined

이때 오류가 나는 이유는 print(a)에서 a는 어디에도 정의 되어있지 않기 때문이다.

함수 안에서 함수 밖의 변수를 변경하는 방법

return을 사용 한다

  • return문 을 넣지 않았을 경우
a = 1
def vartest(a):
    a = a + 1

a = vartest(a)
print(a)

none # 이때 값이 `none`이 나오는 이유는 `return` 값을 설정해 두지 않았기 때문
  • return문을 설정해 두었을 경우
a = 1
def vartest(a):
    a = a + 1
    return a

a = vartest(a)
print(a)

2 # return문 을 설정해 두니 `2`가 출력 된다

lambda

기본구조

lambda 매개변수1, 매개변수2, ... : 매개변수를 이용한 표현식
  • lambda : 함수를 만들 때 사용하는 예약어
>>> add = lambda a, b: a+b
>>> result = add(3, 4)
>>> print(result)
7
***위의 함수와 동일하다

>>> def add(a, b):
...     return a+b
...
>>> result = add(3, 4)
>>> print(result)
7

lambda 예약어로 만든 함수는 return 명령어가 없어도 결괏값을 돌려준다.

profile
신승홉니다
post-custom-banner

0개의 댓글