개발자 하고 싶다!!!

12. 함수

1_Python2019. 1. 6. 17:17

1. 공부한 내용

 1) 함수의 개념 (내장 함수/외장 함수) 확인

 2) 함수를 직접 만들고 정의하는 방법 및 return 값에 대한 의미 숙지

 3) 직접 만든 함수(외장 함수)에 입력값을 지정하는 방법 숙지

 4) 직접 함수를 만들어서 로그인 어플리케이션 작성


2. 실습 내용 

 No

 입력 코드

결과 

 설명

 1

def a3():

    print('aaa')


a3()

aaa

1. 함수를 지정하는 함수 정의


함수 지정을 위한 함수는 def 임

<def a3():>로 작성하면 a3라는 이름의 함수가 정의됨

def a3():

    return 'aaa'

print(a3())

aaa

2. 함수를 지정할 때 return 값의 존재 유무에 따른 차이


①return 값이 존재 하지 않으면

 - def에 지정된 내장 함수의 값만 출력 (print, len 등)

 - 내장 함수도 없는 경우, None를 출력함

 - 즉, 함수가 호출되도 아무런 값도 반환되지 않음


②return 값이 존재하면

 - def에서 최종 계산/연산된 값이 함수가 호출된 지점에 반환함

 - 내장 함수(print, len 등)이 없는 경우 프로그램 상에서는 아무런 값도 표시

   되지 않으나 해당 함수의 값은 존재함

 - 함수를 정의함으로서 해당 반환된 값을 언제든 호출하여 활용할 수 있음

 - return 이후 해당 함수 연산이 끝나기 때문에 def 안에 존재하는, return 이후의 코드는 실행 안 됨

 3

num = input("a를 몇 번 반복하시겠습니까? \n")


def a(num):

    return 'a' * int(num)


print(a(num))


* 실습 코드에서 <input>를 추가해봄!

(입력) 5

(출력) aaaaa

3. 지정 함수에 입력값을 부여하는 방법


def로 정의한 함수 안(괄호 안)에 변수를 지정하여 값을 입력할 수 있음

즉, 함수 안에 num라는 변수를 지정 후 5라는 입력값을 받아 

print로 해당 함수를 호출하면,

정의한 함수 안의 계산식 ('a' * num)을 return 해서 출력됨


기존 실습 예제에 input를 활용하여,

실제 사용자의 입력값을 받아서 계산하는 코드로 바꿔봄 ㅎㅎ

(int는 입력값을 정수로 인식하기 위한 코드)

 4

def make_string(str, num):

    return str * num


print(make_string('abc\n', 2))


abc

abc

4. 외장 함수에 여러 개의 입력 값을 넣기


def로 정의한 함수 안(괄호 안)에 여러 개의 변수를 지정하여,

1개가 아닌 여러 개의 입력 값을 받아 함수 값을 호출 할 수 있음


왼쪽 예제의 경우, 먼저 make_string 라는 함수 안에

str, num 라는 변수를 지정 후

그 아래에 <str * num> 값이 <return> 되는 함수를 정의함


이후 make_string 함수를 print할 때, 

각각 str과 num에 해당하는 변수 값을 지정(abc, 2)하면 

함수에 입력된 <str * num> 라는 코드에 따라 계산된 값이 <return> 됨


... 하 적어놓고 보니 엄청 장황하다 ㅠㅠ  일단 이해했음!

def login(_id):

        members = ['har', 'space', 'SDM']

        for member in members:

                if member == _id:

                        return True

        return False


input_id=input("아이디를 입력해주세요. \n")


if login(input_id):

        print('hello!, ' + input_id)

else:

        print('Who are you?')

아이디를 입력해주세요

(입력) har

(출력) Hello!, har


(입력) space

(출력) Hello!, space


(입력) SDM

(출력) Hello!, SDM


(입력) adsahkdasjdlk

(출력) who are you?

5. 로그인 어플리케이션의 코드를 함수로 지정하기


1) <def login(_id):>라는 함수에 로그인 어플리케이션 코드 입력

2) 해당 함수에 기존에 존재했던 list(members), for문을 그대로 입력

3) 만약(if) 함수의 변수(_id)가 for문의 member(members list)와 같으면, 

   함수값으로 <True>를 return함 (이후 함수 연산 종료)

4) 함수의 변수(_id)가 같지 않으면, for문(반복문)의 if가 종료 되지 않으므로,

   for문의 아래에 <False>를 return함 (이후 함수 연산 종료)

5) 변수 값의 연결 고리

 - input_id -> login(input_id) -> 외장 함수 login(_id) -> for, if문 _id

 - har 입력 -> login(har) -> 외장 함수 login(har) -> for, if문 _id = har


* 함수의 변수값(_id)을 지정할 때는 내장 함수와 겹치지 않도록 설정

* for문 안에는 <return>이든 기존에 배운 <import sys, sys.exit>로 맺어야

  함수 연산이 정상적으로 종료됨


3. 응용 내용

 만들고자 하는 코드

만들어본 코드 

 결과

 설명

원가와 마진을 입력하면,

단가가 산출되는 코드

(관세는 8%로 고정) 

def margin(_mg):

        return 1 - float(_mg)


def price(_tp):

        duty = 1.08

        return int(_tp) * duty


input_tp=input("TP를 입력해주세요. \n")

input_margin=input("마진을 입력해주세요. \n (관세는 8% 고정. 마진 5%인 경우, 0.05 입력) \n")


import math

print(math.ceil(price(input_tp)/margin(input_margin)))

TP를 입력해주세요.

(입력) 200

마진을 입력해주세요.

(관세는 8% 고정. 마진 5%인 경우, 0.05 입력)

(입력) 0.05


(결과) 228

... 만들어 놓고 보니 뭔가 삽질한 느낌이

물신 나지만...


어쨌든 def를 이용하여 각각,

원가에 관세 8%를 계산한 값을 리턴,

마진을 계산한 값을 리턴하여

관세 8%에 마진이 계산된 단가를 산출


이렇게 안 해도 되는 건데...;;

어쨌든 응용해봄!


4. 의미/중요한 부분

 1) 함수를 정의하여 작성하는 코드는, 해당 file 안에 대량의 코드를 입력하거나, 해당 함수가 반복적으로 이루어지거나, 동시에 여럿이서 수정을 할 때 유용함

 2) 단 한 번의 연산을 하는 내용은, 굳이 함수 정의를 할 필요는 없음

 3) return 값의 유무에 따라 정의한 함수의 값이 달라지니 주의!


5. 궁금점/감상

 1) 함수가 값을 입력 받아 값을 반환하는 과정을 여러 번 복습할 필요가 있어 보임... (헷깔려 ㅠㅠ)

'1_Python' 카테고리의 다른 글

14. 객체 (Class) / 객체 지향 프로그래밍  (0) 2019.01.13
13. 모듈 (Module)  (0) 2019.01.12
11. 컨테이너와 반복문  (0) 2019.01.03
10. 반복문  (0) 2018.12.15
9. 컨테이너 (Container)  (0) 2018.12.15