ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [python] 함수
    python/python 공부 2020. 7. 26. 17:20

     함수를 사용하는 이유 : 반복되는 부분이 있을 경우 '반복적으로 사용되는 가치 있는 부분'을 한 뭉치로 묶어서 '어떤 입력값을 주었을 때 어떤 결과값을 돌려준다' 라는 식의 함수로 작성한다.

     

     함수 구조 : def 예약어를 사용해서 함수를 만든다.

     def 함수명(입력 인수):

         수행할 문장1

         수행할 문장2

         ...

     

    ex) def sum(a, b):

              return a + b

     

    >>> a = 3

    >>> b = 4

    >>> c = sum(a, b)

    >>> print(c)

    결과 : 7

     

     함수의 형태는 입력값과 결과값이 있는 형태, 입력값이 없는 형태, 결과값이 없는 형태, 입력값도 결과값도 없는 형태가 있다.

     

    입력값과 결과값이 있는 형태 : 

    >>> def sum(a, b):

                return a + b

     

    입력값이 없는 형태 : 

    >>> def say():

                return 'hello'

     

    결과값이 없는 형태 : 

    >>> def sum(a, b):

                print("%d, %d 의 합은 %d 이다." % (a, b, a+b))

     

    입력값도 결과값도 없는 형태 : 

    >>> def say():

                print('hello')

     

     입력값이 여러개일 경우의 함수 작성 : 인자값이 들어가는곳에 * 을 붙여준다.

    >>> def manyArgs(*numbers):

                sum = 0

                for i range numbers:

                    sum = sum + i

                return sum

     

    만약 manyArgs(1, 2, 3, 4, 5) 이렇게 호출했다면 결과값으로 15가 출력 된다.

    입력 변수명 앞에 * 을 붙이면 입력값들을 전부 모아서 튜플로 만들어 주기 때문이다.

     

    함수의 결과값은 언제나 하나이다.

    return문은 한 번만 사용할 수 있다.

     

    >>> def sum_and_mul(a, b):

               return a+b, a*b

    sum_and_mul(3, 4)

    결과 : (7, 12) <-- return 에 두 가지가 사용된 것 같지만 실제로는 튜플로 묶여서 하나로 처리 되기 때문에 이렇게 출력된다.

     

    >>> def sum_and_mul(a, b):

                return a+b

                return a*b

    sum_and_mul(3,4)

    결과 : 7 <-- return 문을 만나는 순간 결과값을 돌려준 다음 함수를 빠져나가게 된다.

     

    ◎ 입력 인수에 초기값 미리 설정하기

    def say_myname(name, age, man=True):

        print("나의 이름은 %s입니다." % name)

        print("나이는 %d 살입니다." % age)

        if man:

            prin("남자입니다.")

        else:

            print("여자입니다.")

     

    함수의 입력 인수에 들어갈 값이 항상 변하는 것이 아닐 경우에는 이렇게 함수의 초깃값을 미리 설정해 두면 유용하다.

     

    사용 방법

    say_myname('cis', 99) 또는 say_myname(cis, 99, True)

    결과 : 나의 이름은 cis입니다.

             나이는 99살 입니다.

             남자입니다.

     

    say_myname('cis', 99, False)

    결과 : 나의 이름은 cis입니다.

             나이는 99살 입니다.

             여자입니다.

     

    이렇게 초기값을 미리 정해두게 되면 인자값의 위치가 중요해진다.

    def say_myname(name, man=True, age):

        ...

     

    이런식으로 인자값을 지정하고 say_myname('cis', 99) 라고 하면 제대로 실행되지 않고 에러가 출력된다.

    99가 man에 해당하는건지 age에 해당하는 건지 알 수가 없기 때문이다.

    초기화 시키고 싶은 변수들을 항상 뒤쪽에 위치시키도록 해야한다.

     

     함수 안에서 선언된 변수의 효력 범위

    a = 1

    def vartest(a):

        a = a + 1

     

    vartest(a)

    print(a)

     

    결과 : 1

     

    함수 안의 a는 함수 밖의 a와 다르다. 이름은 같지만 다른 것이라고 본다.

    함수 안에서 만들어진 변수는 함수 안에서만 사용되는 함수만의 변수이기 때문이다.

     

    함수 안에서 함수 밖의 변수를 변경하는 방법

    1. return 이용하기

    a = 1

    def vartest(a):

        a = a + 1

        return a

    a = vartest(a)

    print(a)

     

    2. global 이용하기

    a = 1

    def vartest():

        global a

        a = a + 1

    vartest()

    print(a)

     

    global 명령어는 함수 밖의 변수를 함수 안에서 직접 사용하겠다는 의미이다. 하지만 global 명령어는 사용하지 않는것이 좋다.

    함수는 독립적으로 존재하는 것이 좋기 때문이다. 외부 변수에 종속적인 함수는 그다지 좋은 함수가 아니다.

    외부 변수를 사용하고싶다면 되도록 return으로 돌려주도록 한다. 

     

     

     

    내용 출처 : Do it! 점프 투 파이썬

    'python > python 공부' 카테고리의 다른 글

    [python] 입력 출력, 파일 읽고 쓰기  (0) 2020.08.15
    [python] 제어문 - 반복문  (0) 2020.07.18
    [python] 제어문 - if문  (0) 2020.07.12
    [python] 파이썬 자료형 4  (0) 2020.07.05
    [python] 파이썬 자료형 3  (0) 2020.07.01

    댓글

Designed by Tistory.