본문 바로가기

Programming Language/Python

파이썬_기초단계 알아보기_ep.5 역시 수학은 어려워

320x100

 

파이썬의 꽃, 함수에 대해서
함수가 무엇인지,
왜 쓰여야 하는지 알아봅니다

서론

 

 

Ⅰ 함수란 무엇일까요?

 

수학의 역사에 의하면 인류가 함수를 정의하고 이를 다루기 까지는 정말

오랜 시간이 걸렸다고 합니다. 라이프니츠가 Function(함수)라는 개념을 

가져오면서 시작했다고 하는데요.

 

 

변량 X의 함수란
X에 관한 식이다

EBS 참조

 

 

 

쉽게 보자면 변화하는 어떤 수에 대해서, 결과값과 관계되는 어떠한

식을 말하는 것이었죠.

 

일종의 숫자를 변하게 하는 장치, 기계로 이해하면 좋을 것 같습니다.

본격적으로 함수가 꼭 필요하다는 사실은 19세기에 들어와서야

밝혀졌다고 합니다. 

 

필자가 코인세탁소에 갔다고 생각해 봅시다.

 

 


 

 

우리 모두가  원하는 결과값은 무엇일까요?

바로 깨끗해진 빨래 입니다.

혹은 잘 포개진 이불이 될수도 있겠죠.

 

이렇게 깨끗해진 빨래가 나올 것이라고 예상하고

더러운 빨래를 세탁기에 집어 넣습니다.

 

빨래물에 때가 잘 빠졌을까요?

 


cf1) 이럴수가, 세탁기안의 옷이 사라졌습니다.

 

세탁기가 먹어버렸을까요? 혹은 누군가 훔쳐갔을까요.

 

상상할 수 없는 경우죠?

빨래감을 넣었는데, 다시 와보니 내용물이 보이지 않습니다.

 

아무튼 이러한 경우, 이 세탁기는 함수는 아닙니다. 

'예상되는 결과값', '세탁하는 과정', '반환되는 모습'이 

사라졌기 때문이죠.

 


 

cf2) 세탁기에서 깨끗한 빨래가 나왔습니다.

 

좋습니다. 이제 세탁기는 함수라고 부를만한 자격을 갖췄습니다.

 

세제로 문지르기도 하고, 빙빙 돌아가기도 하며, 옷감을 짜서

탈수시키기도 합니다. 그리고 끝나면 종료음이 울리는 것이죠

 

빨래가 잘 될것이라고 예상하고, 미리 생각한 결과값이 반환되었습니다.

 


 

즉, 함수는 코인세탁기처럼 일련의 과정을 통해서 조립되고, 

의도한 것을 배출시키는 장치 인 것이죠.

 

이 장치는 아주 복잡할 때도 있지만 매우매우 쉬울 때도 있습니다.

 

이제 다양한 세탁기의 종류들 즉, 함수의 여러가지 종류를 파이썬에서

알아보겠습니다.

함수

7.1 함수의 정의와 호출

 

기본적인 구조를 알아보겠습니다.

 

def 함수명 ([인자1, 인자2, ....인자n]):

 <코드 블록>

 [return <반환 값>]

 

함수명은 사용자가 자유롭게 선택할 수 있습니다.

 

1. 인자도 없고, 반환값도 없는 함수

 

간단한 문자열을 출력하는 함수를 만들어 보겠습니다.

 

def 함수():
    print("My First function")
    print("This is function dammmmmn cool")

 

입력한 것을 그대로 반환하는 함수죠?

다만 이를 세탁기로 표현한다면 거의 사용할 필요가 없는

고물 세탁기입니다. 있는 그대로 배출밖에 못하거든요

 

이를 출력해보겠습니다.

 

함수()
My First function
This is function dammmmmn cool

 

그대로 출력되었습니다.

 

2. 인자는 있으나, 반환값은 없는 함수

 

아주 약간 진보된 세탁기를 소개합니다. 

변화되는 부분이 보이시나요?

 

def 내_친구(friendName):
    print("{}는 나의 친구입니다.".format(friendName))

 

이 경우, 인자를 우리가 따로 입력해주어야 합니다.

 

내_친구("python")

 

슬프게도 우리의 친구는 파이썬밖에 없다고 합니다.

 

python는 나의 친구입니다.

 

좋습니다. 이제 인수가 몇개 더 추가된 함수를 만들고,

반환해 보겠습니다.

 

def 내_친구_정보(name, scool_ID, phoneNumber):
    print("-----------------------")
    print("- 학생이름 : ", name)
    print("- 학급번호 : ", scool_ID)
    print("- 전화번호 : ", phoneNumber)

 

교실의 학생을 보여주는 내용입니다.

 

내_친구_정보("현아","01","01-234-5678")
내_친구_정보("진수","02",'21-435-3465')

 

-----------------------
- 학생이름 :  현아
- 학급번호 :  01
- 전화번호 :  01-234-5678
-----------------------
- 학생이름 :  진수
- 학급번호 :  02
- 전화번호 :  21-435-3465

 

미리 생각한대로 예상값과 결과값이 잘 맞았나요?

 

이제부턴 응용문입니다.

 

def 회원_정보를_입력해주세요(name):
    print("▼▼▼▼▼ 회원님의 새로운 계정을 생성합니다 ▼▼▼▼▼")
    name = input("이름을 입력해주세요 ")
    print("이제 당신의 이름은 {} 입니다.".format(name))
    ID = input("아이디를 입력해주세요 ")
    print("이제 여러분의 아이디는 ' {} ' 입니다.".format(ID))
    Password = input("비밀번호를 입력해주세요 ")
    print("이제 여러분의 비밀번호는 ' {} ' 입니다.".format(Password))
    print("\n     ◈◈ 저희 게임에 가입하신것을 환영합니다! ◈◈\n    \n    ▶▶▶▶▶▶이용해주셔서 감사합니다!◀◀◀◀◀◀    ")

 

실행하기

 

회원_정보를_입력해주세요("x")

 

입력자체는 아무거나 입력해도 됩니다.

저는 모두 파이썬/python 초보만/python123

으로 입력해보겠습니다.

 

 

입력 후 엔터

 

▼▼▼▼▼ 회원님의 새로운 계정을 생성합니다 ▼▼▼▼▼
이름을 입력해주세요 파이썬
이제 당신의 이름은 파이썬 입니다.
아이디를 입력해주세요 python 초보만
이제 여러분의 아이디는 ' python 초보만 ' 입니다.
비밀번호를 입력해주세요 python123
이제 여러분의 비밀번호는 ' python123 ' 입니다.

     ◈◈ 저희 게임에 가입하신것을 환영합니다! ◈◈
    
    ▶▶▶▶▶▶이용해주셔서 감사합니다!◀◀◀◀◀◀

 

이렇게 입력한 내용이 좌르륵 반환됩니다.

 

다시 응용문입니다.

 

def 회원_정보를_입력해주세요(name, ID, phoneNumber):
    print("****************")
    print("* name : ",name)
    print("* ID : ",ID)
    print("* phoneNumber : ",phoneNumber)

 

자 위에서 같은 이름으로 함수를 만들었죠?

똑같은 이름으로 다시 만들면 어떻게 될까요?

 

회원_정보를_입력해주세요("파이썬","python 초보만","python123")

 

****************
* name :  파이썬
* ID :  python 초보만
* phoneNumber :  python123

 

코드가 덮어씌어지게 되서, 과거의 함수는

없어지게 됩니다.

 

물론 복구도 가능합니다.

 

def 회원_정보를_입력해주세요(name):
    print("▼▼▼▼▼ 회원님의 새로운 계정을 생성합니다 ▼▼▼▼▼")
    name = input("이름을 입력해주세요 ")
    print("이제 당신의 이름은 {} 입니다.".format(name))
    ID = input("아이디를 입력해주세요 ")
    print("이제 여러분의 아이디는 ' {} ' 입니다.".format(ID))
    Password = input("비밀번호를 입력해주세요 ")
    print("이제 여러분의 비밀번호는 ' {} ' 입니다.".format(Password))
    print("\n     ◈◈ 저희 게임에 가입하신것을 환영합니다! ◈◈\n    \n    ▶▶▶▶▶▶이용해주셔서 감사합니다!◀◀◀◀◀◀    ")

 

3) 인자도 있고 반환 값도 있는 함수

 

자 마지막으로, 인자도 있고 반환값도 있는 대다수의 함수를

알아보겠습니다.

 

x와 y 변수에 입력하면, 계산을 진행하도록 합니다.

 

def my_calc(x,y):
    p = x*y+x*y
    return p

 

2와 3 입력

my_calc(2,3)
12

 

더 복잡한 세탁기를 가져와보겠습니다.

리스트를 인자로 갖는 함수입니다.

 

def my_student_info_list(info):
    print("♠♠♠♠♠♠♠♠♠♠♠♠")
    print("* 학생이름 : ",info[0])
    print("* 학급번호 : ",info[1])
    print("* 전화번호 : ",info[2])
    print("★★★★★★★★★★★★★")

 

우리반에 미국에서 유학 온 헐크가 왔다고 가정하고

브루스 배너 군을 입력해보겠습니다.

 

학생1_info = ["브루스배너","11","010-2121-1111"]
my_student_info_list(학생1_info)
♠♠♠♠♠♠♠♠♠♠♠♠
* 학생이름 :  브루스배너
* 학급번호 :  11
* 전화번호 :  010-2121-1111
★★★★★★★★★★★★★

 

우리가 예상한 것처럼 잘 반환한 모습입니다.

 

입력한 인수가 반환값보다 더 많이 존재하면 어떻게 될까요?

3개 리스트를 만들어보겠습니다.

 

def 내_학생_정보목록(정보, 정보1, 정보2, 정보3):
    print("**************************")
    print("♬ 학생이름 : ",정보[0])
    print("♩ 학년 : ",정보[1])
    print("♪ 전화번호 : ",정보[2])
    print("**************************")
    print("♬ 학생이름 : ",정보1[0])
    print("♩ 학년 : ",정보1[1])
    print("♪ 전화번호 : ",정보1[2])
    print("**************************")
    print("♬ 학생이름 : ",정보2[0])
    print("♩ 학년 : ",정보2[1])
    print("♪ 전화번호 : ",정보2[2])    
    print("**************************")

 

이번에는 제가 개인적으로 팬인, 외모지상주의의 여러 등장인물들이

운좋게도 한 반에 있다고 생각하고, 학생 리스트를 입력해보겠습니다.

(반 이름 : Big deal)

 

이때의 인수는 함수 반환값보다 많습니다.

 

학생1 = ["권지태","1","010-3333-4444"]
학생2 = ["김기명","3","010-3333-5555"]
학생3 = ["서성은","3","010-2222-5555"]
학생4 = ["이건우","2","010-3332-5555"]
내_학생_정보목록(학생1,학생2,학생3,학생4)

 

결과값

 

**************************
♬ 학생이름 :  권지태
♩ 학년 :  1
♪ 전화번호 :  010-3333-4444
**************************
♬ 학생이름 :  김기명
♩ 학년 :  3
♪ 전화번호 :  010-3333-5555
**************************
♬ 학생이름 :  서성은
♩ 학년 :  3
♪ 전화번호 :  010-2222-5555
**************************

 

좋습니다.

마지막에 있었던 이건우 학생은 입력할 공간이 없기때문에,

정상적으로 반환하지 않고 지나치게 되었습니다.

따로 오류는 생기지 않습니다.

 

 

다음 시간에는 함수에서 정의한 변수 라는 것의

두가지 형태 (전역 변수, 지역 변수)와 더 머리아파지는 함수의

종류에 대해서 분석해보겠습니다.

 

다음단계 배우기 : https://astart.tistory.com/13
728x90