빅데이터 프로그래밍/Python

[Python] 08. 함수 다루기, 함수의 인자, 지역 변수와 전역 변수, 리턴값, 디버깅

밍글링글링 2017. 8. 2.
728x90

01. 함수 다루기, 함수의 인자, 지역 변수와 전역 변수, 리턴값

- 함수는 1개이상의 명령어를 그룹으로 묶어 반복 처리가 가능합니다.

- 데이터(변수)를 사칙연산(+, -, *, /, %)을 이용하여 처리하는 역할을 합니다.

- 데이터를 입출력하는 경우 사용합니다.

- 한번 만든 함수는 계속적으로 호출(재사용) 할 수 있습니다.

- SW 컴포넌트의 가장 작은 단위라고 할 수 있습니다.

- 함수는 소괄호 '()'를 선언해야합니다.

- 함수로 전달하는 데이터를 Parameter, 전달받는 쪽을 Argument라고 부릅니다.

- 파이썬은 Method Overroding을 지원하지 않습니다. 

하지만 가변 인수로 어느정도 비슷한 기능을 구현 할 수 있습니다.

- 형식: def 함수이름(인자1, 이자2...);

코드들

return 결과값

 

1. 함수로 데이터 전달

[실행 화면]

영화명: 검은 사제들
----------------------------
영화명: 더 라이트
장   르: 퇴마
----------------------------
영화명: 엑소시스트
장   르: 퇴마
시   간: 120
----------------------------
영화명: 컨저링 1
장   르: 퇴마
시   간: 120
평   가: 5.0
----------------------------
영화명: 컨저링 2
장   르: 퇴마
시   간: 130
평   가: 10.0
----------------------------
영화명: 로스트
장   르: 퇴마
시   간: 2000
----------------------------
('안성기', '김수미')
----------------------------
('아만다 사이프리드', '앤 헤서웨이', '휴잭맨')
----------------------------
러브액츄얼리
{'actor1': '휴 그랜트', 'actor2': '리암 니슨', 'actor3': '콜린 퍼스'}
▷ 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. 지역 변수와 전역변수

[실행 화면]

 
지역 변수
전역 변수
10
func2 param: 10
10
50
100
▷ 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. 처리 결과의 리턴

[실행 화면]

MAX: 2000
3월: March
(30, 20, 10)
CBA

 

▷ 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
[실행 화면]


성명: 아로미
총점: 260
평균: 86.66666666666667
▷ 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
37539
6747
▷ 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)
     

-------------------------------------------------------------------------------------

 

 

 

[과제 3] 하나의 수를 전달하여 짝수인지 홀수인지 판별하는 프로그램을 제작하세요.

[실행 화면]

수: 12
판정: 짝수
수: 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))    
     
     
    
     
-------------------------------------------------------------------------------------
 
 
[과제 5] 하나의 수를 전달하여 1부터 전달된 수까지의 합을 구하는 프로그램을 제작하세요
 

[실행 화면]

수: 10
1부터 10까지의 합: 55

수: 13
1부터 13까지의 합: 91
▷ 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))
    


-------------------------------------------------------------------------------------
 

 

[과제 6] 하나의 수를 전달하여 1부터 전달수까지 2, 3, 4의 배수의 갯수를 구하는 프로그램을 제작하세요.

[실행 화면]

수: 2016
1부터 2016까지 2, 3, 4의 배수의 갯수: 169
▷ DefExam6.py
-------------------------------------------------------------------------------------


-------------------------------------------------------------------------------------
 

 

[과제 7] 월을 전달하면 영어로 변환된 단어를 리턴하는 프로그램을 제작하세요. 

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.)

  

[실행 화면]
1월: January     
2월: February 
3월: March
▷ 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키): 현재 함수 끝까지 바로 가서 리턴한 후 함수 호출부로 되돌아 간다.

 

 

728x90

댓글