01. 함수 다루기, 함수의 인자, 지역 변수와 전역 변수, 리턴값
- 함수는 1개이상의 명령어를 그룹으로 묶어 반복 처리가 가능합니다.
- 데이터(변수)를 사칙연산(+, -, *, /, %)을 이용하여 처리하는 역할을 합니다.
- 데이터를 입출력하는 경우 사용합니다.
- 한번 만든 함수는 계속적으로 호출(재사용) 할 수 있습니다.
- SW 컴포넌트의 가장 작은 단위라고 할 수 있습니다.
- 함수는 소괄호 '()'를 선언해야합니다.
- 함수로 전달하는 데이터를 Parameter, 전달받는 쪽을 Argument라고 부릅니다.
- 파이썬은 Method Overroding을 지원하지 않습니다.
하지만 가변 인수로 어느정도 비슷한 기능을 구현 할 수 있습니다.
- 형식: def 함수이름(인자1, 이자2...);
코드들
return 결과값
1. 함수로 데이터 전달
[실행 화면]
▷ Def1.py
-------------------------------------------------------------------------------------
# -*- coding: utf-8 -*-
def movie1(name):
print('영화명: ' + name)
print('----------------------------')
def movie2(name, genre):
print('영화명: ' + name)
print('장 르: ' + genre)
print('----------------------------')
def movie3(name, genre, time):
print('영화명: ' + name)
print('장 르: ' + genre)
print('시 간: ' + str(time))
print('----------------------------')
# 함수에 기본값을 갖는 인수의 선언, 맨 마지막에 선언
# good 인수는 생략 가능
def movie4(name, genre, time, good = 5.0):
print('영화명: ' + name)
print('장 르: ' + genre)
print('시 간: ' + str(time))
print('평 가: ' + str(good))
print('----------------------------')
def movie5(time, name, genre = '퇴마'):
print('영화명: ' + name)
print('장 르: ' + genre)
print('시 간: ' + str(time))
print('----------------------------')
def movie6(*actors): # 가변인자의 처리
print(actors) # tuple
print('----------------------------')
def movie7(movie, **actors): # 고정과 가변인자 병합 처리
print(movie) # Dictionary
print(actors)
# 함수 호출
movie1('검은 사제들')
movie2('더 라이트', '퇴마')
movie3('엑소시스트', '퇴마', 120)
movie4('컨저링 1', '퇴마', 120)
movie4('컨저링 2', '퇴마', 130, 10.0)
movie5(name='로스트', time=2000) # 파라미터의 순서 변경
movie6('안성기', '김수미')
movie6('아만다 사이프리드', '앤 헤서웨이', '휴잭맨')
movie7('러브액츄얼리', actor1='휴 그랜트', actor2='리암 니슨', actor3='콜린 퍼스')
-------------------------------------------------------------------------------------
2. 지역 변수와 전역변수
[실행 화면]
▷ Def2.py
-------------------------------------------------------------------------------------
# -*- coding: utf-8 -*-
param = 10
strdata = '전역 변수'
def func1():
strdata = '지역 변수'
print(strdata)
def func2(param):
print('func2 param: ' + str(param))
param = 1
def func3():
global param # 전역 변수 사용 선언
param = 50
def func4(localParam):
global param
param = localParam
func1() # 지역 변수
print(strdata) # 전역 변수
print(param) # 10
# 파이썬은 내부적으로 모두 객체 처리, 하지만 변수의 영역 엄격히 구분
func2(param)
print(param) # 10
func3()
print(param)
func4(100)
print(param)
-------------------------------------------------------------------------------------
3. 처리 결과의 리턴
[실행 화면]
▷ Def3.py
-------------------------------------------------------------------------------------
# -*- coding: utf-8 -*-
def maxno(x, y):
if x > y:
return x
else:
return y
def season(month):
season=''
if month == 1:
season = 'January'
elif month == 2:
season = 'February'
elif month == 3:
season = 'March'
return season
def reverse(x, y, z):
return z, y, x; # 1개이상의 값 리턴
if __name__ == '__main__':
no = maxno(1000, 2000)
print('MAX: ' + str(no))
seasonStr = season(3)
print('3월: ' + seasonStr)
ret = reverse(10, 20, 30)
print(ret) # (3, 2, 1) Tuple, 값 변경 불가능
r1, r2, r3 = reverse('A', 'B', 'C')
print(r1, end=''); print(r2, end=''); print(r3, end='') # CBA
-------------------------------------------------------------------------------------
[과제 1] 성적 데이터를 이용하여 저장과 출력하는 기능을 구현하세요.
- 점수: 전산: 85, 수학: 75, 영어: 100
[실행 화면]
▷ DefExam1.py
-------------------------------------------------------------------------------------
# -*- coding: utf-8 -*-
def total(com, mat, eng):
tot = com + mat + eng
return tot
def mean(total, count):
return total / count
'''
성명: 아로미
전산: 85
수학: 75
영어: 100
총점: 260
평균: 86
'''
if __name__ == '__main__':
name = '아로미'
com = 85
mat = 75
eng = 100
tot = total(com, mat, eng)
avg = mean(tot, 3)
print('성명: ' + name)
print('총점: ' + str(tot))
print('평균: ' + str(avg))
-------------------------------------------------------------------------------------
[과제 2] KOR: 한국, JAP: 일본, CHA: 중국 KOR: 28738, JAP: 37539, CHA: 6747 을
참조하여 아래처럼 출력하는 기능을 구현하세요.
[실행 화면]
28738
▷ DefExam2.py
-------------------------------------------------------------------------------------
# -*- coding: utf-8 -*-
def getNation(nation):
nationName=''
if nation == 'KOR':
nationName = '한국'
elif nation == 'JAP':
nationName = "일본"
elif nation == 'CHA':
nationName = '중국'
return nationName
def getGDP(nation):
gdp = 0
if nation == 'KOR':
gdp = 28738
elif nation == 'JAP':
gdp = 37539
elif nation == 'CHA':
gdp = 6747
return gdp
if __name__ == '__main__':
nationName = getNation('KOR')
print(nationName)
nationName = getNation('JAP')
print(nationName)
nationName = getNation('CHA')
print(nationName)
print()
gdp = getGDP('KOR')
print(gdp)
gdp = getGDP('JAP')
print(gdp)
gdp = getGDP('CHA')
print(gdp)
-------------------------------------------------------------------------------------
[실행 화면]
판정: 짝수
수: 11
판정: 홀수
▷ DefExam3.py
-------------------------------------------------------------------------------------
# -*- coding: utf-8 -*-
def even(su):
if su % 2 == 0:
return '짝수'
else:
return '홀수'
if __name__ == '__main__':
su = 11
print("수: " + str(su))
print("판정: " + even(su))
print()
su = 12
print("수: " + str(su))
print("판정: " + even(su))
-------------------------------------------------------------------------------------
[실행 화면]
수: 10
1부터 10까지의 합: 55
▷ DefExam5.py
-------------------------------------------------------------------------------------
# -*- coding: utf-8 -*-
def total(su):
tot = 0
for i in range(1, su+1): # 1 ~ 최대값(n)-1
tot = tot + i
return tot
if __name__ == '__main__':
su = 10
tot = total(su)
print("수: " + str(su))
print("1부터 " + str(su) + "까지의 합: " + str(tot))
print()
su = 13
tot = total(su)
print("수: " + str(su))
print("1부터 " + str(su) + "까지의 합: " + str(tot))
-------------------------------------------------------------------------------------
[실행 화면]
▷ DefExam6.py
-------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------
1) translation 메소드
입력 값(Parameter): 숫자 월
메소드 처리: 숫자를 영어로 변역
return: 영어로 번역된 문자열 리턴
1월 - January (Jan.)
2월 - February (Feb.)
3월 - March (Mar.)
4월 - April (Apr.)
5월 - May
6월 - June (Jun.)
7월 - July (Jul.)
8월 - August (Aug.)
9월 - September (Sept.)
10월 - October (Oct.)
11월 - November (Nov.)
12월 - December (Dec.)
[실행 화면]
▷ DefExam7.py
-------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------
03. 디버깅
1. 'Debug As -> Python Run' 디버그 모드로 실행
2. Break point의 지정과 해제
- 편집 소스의 시작 부분에서 double click
3. Debug Perspective의 사용
(1) Skip All Breakpoints: 모든 브레이크 포인트 건너뛰기
(2) Resume(F8키): 멈추어 있던 쓰레드를 다시 진행시키고 다음 브레이크포인트까지 실행
(3) Suspend: 쓰레드를 일시 정지한다. 강제로 breakpoint를 현재 수행문에 지정한 것과 같다.
(4) Terminate: 종료
(5) Step Into(F5키): 프로그램을 한 스텝진행, 다음 실행 문이 함수 안이면 함수 안으로 들어감.
(6) Step Over(F6키): 함수 호출을 지나치고 현재 위치에서 한 스텝씩 진행
(7) Step Return(F7키): 현재 함수 끝까지 바로 가서 리턴한 후 함수 호출부로 되돌아 간다.
'빅데이터 프로그래밍 > Python' 카테고리의 다른 글
[Python] 10. Class 선언, 클래스 멤버, 메소드, 인스턴스 멤버, 메소드의 실습, 생성자, 소멸자, 모듈 분리 (0) | 2017.08.02 |
---|---|
[Python] 09. 모듈과 패키지의 사용, import의 사용, Template (0) | 2017.08.02 |
[Python] 07. 제어문 - 반복문(while, for문), for 문 실습 (0) | 2017.08.02 |
[Python] 06. 제어문 - 분기문(if) - 다양한 if문, if문 실습, Template (2) | 2017.08.02 |
[Python] 05. 시퀀스 자료형 리스트의 실습, 리스트 선언, 리스트 연결, 리스트 크기, 멤버 체크, 문자열 포맷팅, Tuple, Dictionary의 선언 (0) | 2017.08.02 |
댓글