12. 함수 (function) 만들기 > 파이썬 기초

본문 바로가기
사이트 내 전체검색

회원로그인

올서베이넷
무료 온라인 설문 사이트
OVITII
웹 프레젠테이션 도구

파이썬 기초

12. 함수 (function) 만들기

페이지정보

글쓴이 관리자 조회 35,766 조회 날짜 19-05-07 16:53 / Update:20-05-15 18:28
댓글 0 댓글

SNS 공유

  • 트위터로 보내기
  • 페이스북으로 보내기
  • 구글플러스로 보내기

내용

함수 만들기

 

프로그래밍을 하다 보면, 반복해서 사용하는 기능들이 생긴다.

그 기능들을 사용할때마다 코드를 복사해서 사용할 수도 있지만, 만약 코드를 수정할 일이 있으면 복사해서 사용한 그 모든 코드를 수정해야 한다. 

만약 같은 기능을 하는 코드들을 하나로 묶어서 사용한다면, 수정사항이 생길 때 하나만 수정해도 모두 적용되게 된다.

 

이렇게 반복해서 사용하는 같은 코드들이 있을 때, 이것을 하나의 기능으로 묶어서 사용하면 여러가지 이점을 가질 수 있다.

 

이렇게 입력값을 받아서 기능 수행 후, 결과 값을 내어주는 기능을 하는 코드들의 집합을 함수(function)라 한다. 

 

함수를 선언할 때, 대다수의 프로그램 언어는 function을 사용하지만 파이썬에서는 def를 사용한다.

 

 

파이썬 함수의 기본 구조

def 함수명(매개변수):

    문장1

    문장2

    ...

    [return 리턴값]

 

파이썬에서는 함수를 선언할 때, def라는 예약어를 사용한다. definition의 약자이며, 함수문 뒤에 콜론(:)을 붙인다.

매개변수는 생략할 수 있고, 함수의 결과를 반환 할 필요가 없으면 return도 생략가능하다.

 

1. 함수의 사용

def sum_total(a, b): # a, b는 매개변수(parameter)

    c = a + b + 10

    return c

 

A = sum_total(3, 4) # 함수 호출, 3, 4는 인수(argument)

print(A)

17

 

return은 함수 내부의 결과를 반환한다. return이 나오면 함수는 종료된다. 따라서 return은 함수의 가장 마지막에 사용한다.

 

매개변수(parameter)는 어떤 형태의 데이터 타입도 사용할 수 있다. 함수를 호출할 때는 함수를 선언할 때 사용한 매개변수에 맞추어서 인수를 넣어야 한다.

 

위의 예제에서 sum(3)으로 호출하면 매개변수와 다른 갯수의 인수를 입력했다는 에러가 난다.

Traceback (most recent call last):
 
File "C:\JBMPA\lecture\number.py", line 9, in <module>
    A = sum_total(a=3) # 함수 호출, 두번째 인수는 입력하지 않음
TypeError: sum() missing 1 required positional argument: 'b'

 

기본적으로 함수의 매개변수와, 인수는 갯수를 맞추어야 하지만, 함수 선언에서 매개 변수의 기본 값을 지정하면 함수 호출시 매개 변수의 갯수를 맞추지 않아도 된다.

 

2. 매개 변수 기본값 설정

def sum_total(a, b=4): # a, b는 매개변수 b는 기본값으로 4를 할당함

    c = a + b + 10

    return c

 

A = sum_total(3) # 함수 호출, 두번째 인수는 입력하지 않음

print(A)

B = sum_total(3, 8) # 함수 호출, 3, 4는 인수

print(B)

17

21

 

위의 sum_total 함수는 매개 변수를 두 개 가지고 있지만, 두 번째 매개변수는 기본값으로 4를 가지고 있다. 

따라서 sum_total 함수를 호출할 때, 두 번째 인수를 넣지 않으면 자동으로 두 번째 인수는 함수에서 선언된 기본값을 사용한다.

 

일반적으로 함수를 호출할때는 선언된 함수의 매개변수의 순서를 따르게 된다.

위의 예제에서 첫 번째 인수는 a, 두 번째 인수는 b라는 매개 변수에 전달된다.

하지만 매개변수의 이름을 직접 사용하면 순서에 관계없이 사용할 수 있다.

 

3. 매개 변수 지정하여 호출하기

def sum_total(a, b=4): # a, b는 매개변수

    c = a + b + 10

    return c

 

A = sum_total(a=3) # 함수 호출, 두번째 인수는 입력하지 않음

print(A)

B = sum_total(b=8, a=3) # 함수 호출, 매개변수 이름 지정, 순서 상관 없음

print(B)

17

21

 

 

함수를 사용하다보면, 함수에 전달할 인수의 수를 정확하게 알 수 없을 때나, 인수들의 수가 다양한 경우가 있다. 이럴때는 가변길이 파라미터를 사용할 수 있다.

 

4. 가변길이 매개변수 사용하여 함수 선언

 

매개변수 앞에 별표를 붙인다.

def 함수명(*매개변수):

    문장1

    문장2

    ...

    [return 리턴값]

 

사용 예

def sum_total(*args): # args는 가변 매개변수
    total = 0
    for n in args:
        total = total + n
    return total

 

A = sum_total(5, 6, 7)# 함수 호출, 인수 갯수는 변화 가능, 인수 3개
print(A)
B = sum_total(3, 4)# 함수 호출, 인수 2개
print(B)

18

7

매개변수가 *args 이고, 인수가 (5,6,7)이면  args = [5,6,7] 이 된다.

 

5. 리턴값의 형태

리턴값은 한 개 또는 여러 개가 될 수 있다. 여러 개의 값은 하나의 튜플로 리턴된다. 결과적으로는 여러 개의 값을 리턴하는 것처럼 보이지만 결국 하나의 튜플만 리턴한다 할 수 있다.

def sum_total(*args): # args는 가변 매개변수
    total = 0

    count = 0
    for n in args:

        count += 1
        total = total + n

    #여러개 값 리턴, 그러나 하나의 튜플로 전달됨
    return total, count 

 

# 함수 결과를 리턴 받을때, 튜플 변수 할당 방법으로 받음

total, count = sum_total(5, 6, 7)# 함수 호출, 인수 갯수는 변화 가능, 인수 3개
print(total, count)
total, count = sum_total(3, 4)# 함수 호출, 인수 2개
print(total, count)

18 3
7 2

 

※ count += 1, count = count + 1 은 같의 계산이다. 자기 자신에게 1을 더하여서 자기 자신에게 다시 할당하라는 의미이다.

 

 

변수의 적용 범위

 

프로그래밍을 할때는 변수가 필수적이다. 변수안에 데이터를 넣어두고, 가공을 하여 원하는 결과를 얻어낸다.

변수는 작성한 모든 코드에서 적용될 수 있지만, 함수를 사용하면 변수의 적용 범위가 달라진다.

즉, 같은 이름의 변수라도 함수 밖에서 사용되는 변수와 함수 안에서 사용되는 변수는 전혀 다른 변수로 인식된다.

 

모든 곳에 사용되는 변수를 전역변수, 함수 안에서만 사용되는 변수를 지역변수라고 부른다. 

 

변수의 적용 범위 구분

#함수 외부의 변수 total

total = 3

 

def sum_total(*args):

   #함수 내부의 변수 total - 지역변수
    total = 0

    count = 0
    for n in args:

        count += 1
        total = total + n
    return total, count

 

a, b = sum_total(5, 6, 7, 8)
print(a, b)
print(total)

26 4
3

 

위의 예제를 보면 total이라는 변수는 함수 안, 밖에서 두번 선언되었다. 변수 이름이 같으므로 같은 변수로 생각하기 쉽지만, 둘은 서로 다른 변수이다.

따라서 함수 외부의 변수 total = 3 이라는 값은 함수 내부에서 계산된 total 값에 영향을 받지 않는다.

결과로써 함수 내부의 total26, 함수 외부의 total3으로 서로 다른 것을 알 수 있다.

 

만약 함수 내부의 결과를 외부의 변수에 적용시키고 싶을 때는, 내부에서 계산된 결과를 외부 변수의 이름에 다시 저장하는 방법이 있다. 즉, return 결과를 total 이라는 변수로 받으면 된다.

 

1. 외부 변수 값을 return으로 할당받기

 

#함수 외부의 변수 total

total = 3

 

def sum_total(*args):

   #함수 내부의 변수 total
    total = 0

    count = 0
    for n in args:

        count += 1
        total = total + n
    return total, count

 

total, b = sum_total(5, 6, 7, 8)
print(total, b)
print(total)

26 4
26

 

 

함수 내부의 결과를 외부 변수에 입력시키는 방법 외에 함수 내부의 변수 자체를 전역변수로 선언하는 방법이 있다.

함수 내부에서 사용하는 변수를 전역변수로 선언하여 사용하면, 그 변수는 프로그램 전체의 코드에서 적용된다.

전역 변수로 선언하기 위해서는 global 를 사용한다.

 

2. global 선언

 

#함수 외부의 변수 total

total = 3

 

def sum_total(*args):

   global total # 전역변수 선언
    total = 0

    count = 0
    for n in args:

        count += 1
        total = total + n
    return total, count

 

a, b = sum_total(5, 6, 7, 8)
print(a, b)
print(total)

26 4
26

 

 

 

함수의 다양한 사용 예

 

import datetime

 

total = 3
def sum_total(*args): # args는 가변 매개변수
    global total
    count = 0
    
    for n in args:
        count += 1
        total = total + n
    return total, count

 

def Hello(name):
    #리턴없는 함수
    s = "안녕하세요. 제 이름은 %s 입니다." % name
    print(s)
    
def today():
    now = datetime.datetime.now()
    nowDatetime = now.strftime('%Y-%m-%d %H:%M:%S')
    print(nowDatetime) 
    
    
# sum 함수 사용    
a, b = sum_total(5, 6, 7, 8)# 함수 호출, 인수 갯수는 변화 가능
print(a, b)
print(total)

 

# hello 함수 사용
hi = Hello("마루")
# hello 함수는 리턴값이 없으므로, hi는 None을 받음
print(hi)

 

# today 함수 사용
nowtime = today()

29 4
29
안녕하세요. 제 이름은 마루 입니다.
None
2019-05-10 11:48:10

 

 

 

 

1269732368_1558246691.4797.png

댓글목록 sfs

총 30 건 , 1 페이지
게시물 검색
파이썬 기초 목록
번호 제목 글쓴이 조회 날짜
1 관리자 34602 05-02
2 관리자 41865 05-02
3 관리자 27581 05-02
4 관리자 42548 05-02
5 관리자 38174 05-02
6 관리자 32226 05-02
7 관리자 34046 05-02
8 관리자 32780 05-02
9 관리자 31649 05-02
10 관리자 34380 05-02
11 관리자 30145 05-02
12 관리자 52548 05-02
13 관리자 39099 05-02
14 관리자 35541 05-06
15 관리자 26597 05-06
16 관리자 25859 05-06
17 관리자 30225 05-06
18 관리자 26501 05-07
19 관리자 40767 05-07
20 관리자 46967 05-07
열람중 관리자 35767 05-07
22 관리자 36020 05-07
23 관리자 36540 05-28
24 관리자 46411 05-28
25 관리자 35524 05-28
26 관리자 38616 06-04
27 관리자 37862 06-11
28 관리자 37151 06-12
29 관리자 36016 12-21
30 관리자 27430 12-25
GNUBOARD_M
Copyright © JBMPA.com All rights reserved.