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

2017. 8. 2. 13:56·빅데이터 프로그래밍/Python
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
반응형

'빅데이터 프로그래밍 > 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
'빅데이터 프로그래밍/Python' 카테고리의 다른 글
  • [Python] 10. Class 선언, 클래스 멤버, 메소드, 인스턴스 멤버, 메소드의 실습, 생성자, 소멸자, 모듈 분리
  • [Python] 09. 모듈과 패키지의 사용, import의 사용, Template
  • [Python] 07. 제어문 - 반복문(while, for문), for 문 실습
  • [Python] 06. 제어문 - 분기문(if) - 다양한 if문, if문 실습, Template
밍글링글링
밍글링글링
mingling - 밍글링, 밍글밍글링. 코드와 어우러지다. IT/ 프로그래밍/소스
    반응형
    250x250
  • 밍글링글링
    mingling
    밍글링글링
  • 전체
    오늘
    어제
    • 밍글링글링 (407) N
      • Flutter (2)
      • 일상생활 (8)
        • 리뷰 (1)
        • 생활정보 (4)
        • 맛집 (0)
        • 여행 (0)
        • 모든정보 (3)
      • JAVA (126)
        • 개념 (6)
        • 예제 (115)
        • Exception (2)
      • C (1)
        • C (1)
        • C++ (0)
        • C# (0)
      • JS (29)
        • JavaScript (18)
        • JQuery (5)
        • AJax (0)
        • NODE.JS (6)
        • Angular.JS 2.0 (0)
      • WEB (87)
        • HTML (6)
        • CSS (61)
        • JSP (20)
        • JSTL (0)
      • FrameWork (8)
        • Spring (8)
        • BootStrap (0)
        • MyBATIS (0)
        • JUnit (0)
      • 외부 라이브러리 (5)
      • 공유 소스 관리 (5)
        • Git (5)
        • SVN (0)
      • 빅데이터 프로그래밍 (37)
        • Python (37)
        • R Programming (0)
      • DB (7)
        • ORACLE (0)
        • MySql (6)
      • Development Tools (7)
        • StarUML (0)
        • eXERD (0)
        • Eclipse (4)
      • SKILL (6)
        • Migration (0)
        • Security (6)
      • MicroSoft (0)
        • Excel (0)
        • Word (0)
      • Android (0)
      • Server (21)
        • Ubuntu (5)
        • Linux (15)
      • IOS (0)
      • XML (0)
      • 미디어 (0)
      • 공지사항 (3)
      • NETWORK (1)
      • 게임 (4)
        • 피파 (1)
        • 리니지M (0)
        • 배틀그라운드 (1)
        • 듀랑고 (2)
      • 세상 이슈 (6)
      • 일렉트론 (0)
      • 대회 소식 (4)
      • 업무 (2)
      • Express, Vue (6)
      • docker (11)
      • svelte (3)
      • 블록체인 (1)
      • IT (10) N
      • Rust (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 미디어로그
    • 위치로그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    css float
    vue 설치
    css transition
    에디터 팁
    spring java
    SSL 인증서
    자바 생성자
    ubuntu
    API 설계
    rust linux
    jsp include
    nginx ssl 적용
    React Compiler
    프런트엔드
    자바 for문
    Rust lang
    자바 배열
    css block
    jsp parameter
    lang rust
    자바 객체 지향
    티스토리 자동화
    svelte
    vue cli
    nginx
    servlet class
    리눅스 설치
    Extension Bisect
    Java Array
    mysql db
    nginx ssl 설정
    vscode
    ssl 인증서 발급
    클론코딩
    docker
    gitlab 설치
    자바 exception
    자바 클래스
    css list
    css tb
    java casting
    proxy pass
    css perspective
    AI 코딩 에이전트
    VS Code 팁
    Node
    브라우저 자동화
    css table
    오류
    러스트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
밍글링글링
[Python] 08. 함수 다루기, 함수의 인자, 지역 변수와 전역 변수, 리턴값, 디버깅
상단으로

티스토리툴바