함수(Funtion)
하나의 특정한 목적의 작업을 수행하기 위해 독립적으로 구성된 프로그램 코드의 집합을 말한다.
1 내장함수
파이썬에서 기본적으로 제공하는 함수로 print() input() randint() 등이 있다.
2 사용자 정의 함수
사용자가 원하는 함수를 직접 정의해서 만든 함수이다.
# 함수 정의 : 파이썬에게 미리 알려주는 것.
# 함수 호출 : 만들어진 함수를 불러낸다. (실행)
사용 방법은 다음과 같다.
def 함수명(매개변수):
실행명령문1
실행명령문2
...
return 출력
함수를 정의해놓았을 때의 장점은 다음과 같다.
1. 재사용이 가능하다.
2. 따라서 코드의 중복을 제거한다.
3. 코드의 분리화(구조화)에 의해 가독성이 높아진다.
추가로 기본적으로 프로그램을 실행할 때 제일 먼저 실행되는 함수 main()이 있다.
다른 언어의 경우 main()이 시각적으로 나타나있지만 파이썬은 숨어있다. 코드를 작성하는 부분 전체가 main에 해당된다.
함수의 4가지 종류
# 입력값(Factor) 존재, 반환값(Return) 존재
# 입력값(Factor) 존재, 반환값(Return) 없음
# 입력값(Factor) 없음, 반환값(Return) 존재
# 입력값(Factor) 없음, 반환값(Return) 없음
그 다음 예제를 통해 사용자 정의 함수를 구성해보자.
# 쥬씨라는 함수가 있고 그 구성을 만들어보자.
1
2
3
4
5
6
7
8
|
def 쥬씨(fruit): # fruit == 매개변수
print("과일주스만드는중...")
print("주스가 나왔습니다.")
print(fruit,"주스")
쥬씨("사과") # "사과" == 인수 : 함수를 호출할 때 매개변수로 전달되는 입력값을 의미한다.
쥬씨("딸기바나나")
쥬씨("파인애플")
쥬씨("멜론")
|
cs |
과일주스만드는중...
주스가 나왔습니다.
사과 주스
과일주스만드는중...
주스가 나왔습니다.
딸기바나나 주스
과일주스만드는중...
주스가 나왔습니다.
파인애플 주스
과일주스만드는중...
주스가 나왔습니다.
멜론 주스
>>>
쥬씨() 함수의 경우 입력값이 존재, 반환값이 없는 형태이다.
# 두개의 정수를 받아서 더하는 함수
1
2
3
|
def add(a,b):
print(a+b)
print("내가 만든 함수")
|
cs |
>>> add(1000,42342) # 정수(int)
43342
내가 만든 함수
>>> add(1.245,456.234) # 실수(flaot)
457.479
내가 만든 함수
>>> add("닐리리","맘보") # 문자열(str)
닐리리맘보
내가 만든 함수
>>>
입력값이 존재, 반환값이 없는 형태이다.
# 세 정수를 받아서 가장 큰 값을 비교하는 함수를 작성
1
2
3
4
5
6
7
|
def max1(a,b,c):
if a>b and a>c:
print(a,"가 가장 크다.")
elif b>a and b>c:
print(b,"가 가장 크다.")
else:
print(c,"가 가장 크다.")
|
cs |
>>> max1(10,5,70)
70 가 가장 크다.
입력값이 존재, 반환값이 없는 형태이다.
# 두개의 수를 받아서 곱하고 그 값을 반환하는 함수
1
2
3
|
def getM(a,b):
return a*b
getM(10,20)
|
cs |
입력값이 존재, 반환값(return)이 존재하는 형태이다.
결과는 X, 출력함수 없음.
⊙ return
함수가 종료된다는 의미를 갖고 있으며 결과값을 main으로 반환한다. return은 하나만 존재할 수 있지만 데이터는 여러개 반환가능하다.
return 해주지 않을 경우 함수는 호출이 끝나면 함수 내부에 있는 변수와 변수 값 자체를 데이터상에서 삭제하기 때문에 결과값이 사라진다.
따라서 return을 사용해주거나 print()를 통해 출력해주거나 함수 밖에서 변수를 만들고 결과값을 변수에 저장해줘야한다.
# 세개의 수를 받아서 가장 큰 수를 main에서 출력 결과값을 돌려주는 함수
1
2
3
4
5
6
7
8
9
|
def funt1(a,b,c):
if a>b and a>c:
return a
elif b>a and b>c:
return b
else:
return c
res = funt1(10,30,25)
print("가장 큰 값 :",res)
|
cs |
가장 큰 값 : 30
>>>
# 다른 함수를 호출하는 함수 ★꼭 이해하기!
1
2
3
4
5
6
7
8
9
|
def a():
c = b()
return c
def b():
e = d()
return e
def d():
return "다다"
a()
|
cs |
실행결과 아무것도 나타나지 않는다.
위 코드의 구동을 자세히 설명하자면 a()를 호출했을 경우 b()를 호출하게 되고 b내부에서는 d()를 호출하게 되어 d가 리턴한 값 '다다'를 자신을 호출한 b한테 전달하여 e에 저장된다. 그리고 b는 e값을 자신을 호출한 a에게 값을 전달하고 c에 저장한다.
a는 결과적으로 main으로 값을 전달하지만 main에 저장 및 출력할 수 있는 요소가 없으므로 호출이 끝난 이후 값은 지워진다.
따라서 실행결과 아무것도 나타나지 않는 것이다.
main()상에 함수는 존재하기 때문에 프롬프트에서 a()를 입력해주면 다음과 같이 '다다'가 출력된다.
# main에서 정수 하나를 입력받아서 showNum()입력받은 정수를 넘겨준다.
showNum : 전달받은 수부터 100까지 출력
1
2
3
4
5
6
|
def showNum(f):
for a in range(f,101):
print(a)
# main
number = int(input("정수>"))
showNum(number)
|
cs |
정수>96
96
97
98
99
100
>>>
# 예금계좌 : 1. 입금, 2. 출금, 3. 잔액조회, 4. 종료를 입력하는 프로그램
# 초기 잔액 : 10000 , 출금 금액 : 20000
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
def deposit(a): # 입금
print(a,"입급했습니다.")
# 기계입장에서 돈을 입금하고 나면 나한테 돈을 돌려주지 않는다.
def withdraw(b): # 출금
money = 10000
if money < b: # 잔액이 없을 경우가 있기 때문에 if문 사용
return "잔액이 부족합니다."
else:
return b
# 출금액 입력 -> 출금확인 -> 돈을 돌려준다.
def account_Check():
print("잔액조회창 입니다.")
# main
print("*"*15)
print("ATM 기계입니다.")
print("1. 입금")
print("2. 출금")
print("3. 잔액조회")
print("4. 종료")
print("*"*15)
sel = int(input(">"))
if sel == 1:
deposit(10000)
elif sel == 2:
res = withdraw(20000) # 돌려주는 값이 있기때문에 변수에 담아서
print("출금액:",res) # 출력해줘야 한다.
elif sel == 3:
account_Check()
elif sel == 4:
print("ATM기 종료")
else:
print("선택오류")
|
cs |
***************
ATM 기계입니다.
1. 입금
2. 출금
3. 잔액조회
4. 종료
***************
>2 # (2 입력)
출금액: 잔액이 부족합니다.
>>>
# 입력값 없음, 반환값 없음
1
2
3
4
|
def menu():
print("도움말")
print("메뉴, 표시")
menu()
|
cs |
도움말
메뉴, 표시
>>>
메뉴나 도움말을 이용할 때 주로 사용.
'Python' 카테고리의 다른 글
[Python 기초] 파이썬 클래스(class)와 인스턴스(instance) (0) | 2021.04.02 |
---|---|
[Python 기초] 파이썬 함수(Funtion) - 사용자 정의 함수 - 2 (0) | 2021.04.02 |
[Python 기초] 파이썬 제어문 총 정리 - 연습문제 (0) | 2021.04.01 |
[Python 기초] 파이썬 제어문 - 반복문 (for문) , range() 함수 (0) | 2021.04.01 |
[Python 기초] 파이썬 제어문 - 반복문 (while, break) (0) | 2021.04.01 |
댓글