[zero-base/] DS Part 1. Python 중급 - 6일차 스터디 노트

손윤재·2023년 12월 11일

제로베이스 DS 22기

목록 보기
7/55
post-thumbnail

1. 함수

함수는 곧 기능❗   함수 사용 목적은 기능 재사용

  • 수학의 함수와 동일한 역할을 한다.

❕ 내장함수(Builtins)

  • 파이썬을 설치하면 기본적으로 제공되는 함수들로 별도로 import가 필요없다.
  • print(), input(), divmod(), int(), float(), len(), ...



❗ 사용자 정의 함수

함수 선언과 호출

  • 함수는 def keyword, 함수명, : , 들여쓰기(코드 블록)를 이용해 정의한다.
  • 함수명과 ()를 이용해 함수를 호출한다.
    # 함수 선언(정의)
    def PrintUserName(name):
        print(f'{name}고객님, 안녕하세요.')

    # 함수 호출
    PrintUserName('홍길동')
  • 함수 내에서 다른 함수를 호출할 수 있다.
    def Func1():
        print('Func1 호출!')
        Func2()
        print('Func2 호출 후에 실행!')

    def Func2():
        print('Func2 호출!')
        Func3()
                                          # <실행결과>
    def Func3():                          # Func1 호출!
        print('Func3 호출!')               # Func2 호출!
                                          # Func3 호출!
	>>> Func1()                           # Func2 호출 후에 실행!

매개변수와 인수

인수(argument)와 매개변수(parameter)는 함수가 주고 받는 데이터(값)으로
서로 쌍을 이루어야 하므로 개수가 항상 일치해야 한다.

   ☪ 매개변수

         ━ 함수에 입력으로 전달된 값을 받는 변수

         ━ 매개변수는 일종의 지역변수로 함수 내에서만 사용 가능

         ✅ 매개변수의 개수가 정해지지 않은 경우 *을 사용한다.

          def PrintNumber(*numbers):
              print(type(numbers)) # <class 'tuple'>

              for num in numbers:
                  print(num, end=' ')
              print()

          >>> PrintNumber()                  #
          >>> PrintNumber(1)                 # 1
          >>> PrintNumber(1, 2)              # 1 2
          >>> PrintNumber(1, 2, 3)           # 1 2 3
          >>> PrintNumber(1, 2, 3, 4)        # 1 2 3 4
          >>> PrintNumber(1, 2, 3, 4, 5)     # 1 2 3 4 5

   ☪ 인수

         ━ 함수를 호출할 때 전달하는 입력값을 의미

        def add(a, b):  # a, b는 매개변수
            return a+b

        print(add(3, 4))  # 3, 4는 인수

함수 실행 결과 반환

  • return keyword를 사용해 함수 실행 결과를 함수 호출부로 반환한다.
    def AddCal(n1, n2):
        return n1 + n2

    # 결과를 바로 출력할 수도 있고,
    print(AddCal(3, 9))

    # 결과를 변수에 할당할 수도 있다.
    returnValue = AddCal(20, 10)
    print(f'returnValue: {returnValue}')
  • return이 실행되면 함수 실행문 어느 위치에서건 바로 종료된다.

전역변수 vs 지역변수

   ☪ 전역변수

         ━ 함수 밖에 선언된 변수

         ━ 선언된 파일 내에서 사용 가능

         ━ 함수 내에서는 값을 수정할 수 없다.

         ✅ 함수 내 값 수정을 위해 global keyword 사용

          num_out = 10

          def PrintGlobalNumber():

              global num_out
              print(f'num_global: {num_out}')  # num_global: 10

              num_out = 100
              print(f'num_global: {num_out}')  # num_global: 100

          PrintGlobalNumber()
          print(f'num_out: {num_out}')  # num_out: 100

   ☪ 지역변수

         ━ 함수 내에 선언된 변수

         ━ 선언된 함수 내에서만 사용 가능

          def PrintInNumber():
              num_in = 20
              print(f'num_in: {num_in}') ⭕

          PrintInNumber()
          print(f'num_in: {num_in}')#-> NameError 발생

❕ 중첩함수

함수 안에 또 다른 함수가 정의되어 있는 형태

  • 함수 내부에서 선언된 함수는 함수 밖에서는 호출할 수 없다.
    def OutFunc():
        print('Out Function Called!!')

        def InnerFunc():
            print('Inner Function Called~!')

        InnerFunc() ⭕

    OutFunc()
    InnerFunc()#-> NameError 발생
image

❗ 람다함수

lambda Keyword를 사용해 함수 선언을 보다 간단하게 할 수 있다.

✅   [형식1]     함수명 = lambda 매개변수: 실행문
       [형식2]     결과값 = (lambda 매개변수: 실행문)(인수)

	# 람다함수
    Calculator = lambda x, y: x + y
    returnVal = Calculator(3, 4)
    print(f'returnValue: {returnVal}')

	# 일반함수
    def AddCalculate(x, y): # 매개변수
        return  x + y

    returnVal = AddCalculate(3, 4) # 인수
    print(f'returnValue: {returnVal}')





2. 모듈

모듈이란, 함수나 변수 또는 클래스를 모아 놓은 파이썬 파일(*.py)이다.

  • import Keyword를 이용해 모듈을 사용할 파일로 가져온다.
    import module_calculator

    module_calculator.calculator.AddCal(12, 17)
    module_calculator.calculator.SubCal(12, 17)
    module_calculator.calculator.MulCal(12, 17)
    module_calculator.calculator.DivCal(12, 17)
  • as Keyword를 이용해 모듈 이름을 단축시킬 수 있다.
    import module_calculator as calculator

    calculator.AddCal(12, 17)
    calculator.SubCal(12, 17)
    calculator.MulCal(12, 17)
    calculator.DivCal(12, 17)
  • from Keyword를 사용하면 특정 기능(함수)만을 선택해서 가져 수 있다.
    from Keyword를 이용할 경우 함수를 호출할 때 모듈명을 적을 필요없다.
    콤마(,)를 사용해 함수들을 나열할 수 있다.
    from module_calculator import AddCal, SubCal

    AddCal(21, 46)
    SubCal(21, 46)
  • 파이썬 모듈은 내부 모듈, 외부 모듈, 사용자 모듈로 구분할 수 있다.

❕ 내부 모듈

  • 파이썬을 설치하면 기본적으로 사용할 수 있는 모듈
  • ex> random, time, math, operator, copy, ...

❕ 외부 모듈

  • 별도 설치 후 사용할 수 있는 모듈
  • ex> Pandas(데이터분석라이브러리), NumPy(수치해석용라이브러리), ...

❕ 사용자 모듈

사용자가 정의해서 만든 모듈

      # [계산기 모듈]

      def AddCal(n1, n2):
          print(f'덧셈: {n1} + {n2} = {round(n1 + n2, 2)}')

      def SubCal(n1, n2):
          print(f'뺄셈: {n1} - {n2} = {round(n1 - n2, 2)}')

      def MulCal(n1, n2):
          print(f'곱셈: {n1} * {n2} = {round(n1 * n2, 2)}')

      def DivCal(n1, n2):
          print(f'나눗셈: {n1} / {n2} = {round(n1 / n2, 2)}')
      import module_calculator

      module_calculator.AddCal(10, 20)
      module_calculator.SubCal(10, 20)
      module_calculator.MulCal(10, 20)
      module_calculator.DivCal(10, 20)

❗ 실행(main) 파일

📌 파이썬에서 기본적으로 제공하고 있는 전역변수 __name__ 을 이용해
     실행 파일, 즉 메인 파일을 지정할 수 있다.

  • 파이썬 파일마다 __name__ 변수에 특정 문자열 값이 자동으로 저장
    ❇ 해당 파일에서 실행이 이루어지면 ‘__main__’이라는 문자열이 할당
    ❇ 해당 파일이 다른 파일의 모듈로서 사용되어지면 ‘파일명’이 문자열로 할당

  • 만든 파일이 다른 파일에 import되어 모듈로 사용될 수도 있고, 실행 파일이 될 수도 있다. 이때 모듈로서 실행되면 안되는 코드를 __name__을 이용해 조건문으로 걸러낼 수 있다.

      print(f'unit_conversion.py __name__: {__name__}')

      # 이 파일이 실행파일이 되면 전체 코드가 모두 실행된다.

      def CmToMm(n):
          return round(n * 10, 3)

      def CmToM(n):
          return round(n * 0.01, 3)

      def CmToInch(n):
          return round(n * 0.393, 3)

      def CmToFeet(n):
          return round(n * 0.032, 3)

      # 이 파일이 모듈일 때는 실행되는 않는 부분 ---------------

      🚩 if __name__ == '__main__':
              print(f'10cm: {CmToMm(10)}mm')
              print(f'10cm: {CmToM(10)}m')
              print(f'10cm: {CmToInch(10)}inch')
              print(f'10cm: {CmToFeet(10)}ft')

              # 이 파일을 시작 파일로 실행한 결과
              # unit_conversion.py __name__: __main__
              # 10cm: 100mm
              # 10cm: 0.1m
              # 10cm: 3.93inch
              # 10cm: 0.32ft



3. 패키지

폴더처럼 관련 있는 모듈을 모아 그룹으로 관리할 수 있다.

  • 패키지 내 모듈을 사용하려면 실행 파일과 동일한 디렉토리 내에 패키지가 존재해야한다.
  • 모듈을 site-packages라는 폴더에 넣어두면 어디에서 사용할 수 있는 범용 모듈이 된다.


profile
ISTP(정신승리), To Be Data Scientist

0개의 댓글