Archive

파이썬 기초 본문

공부/Python

파이썬 기초

mariabeetle 2020. 7. 29. 19:50

제네릭 프로그래밍

  • 제네릭(generic) : 파라미터의 타입이 나중에 지정되게 해서 재활용성을 높일 수 있는 프로그래밍 스타일.

  • 파이썬은 원래 동적 타이핑(Dynamic Typing)언어이기 때문에 제네릭이 필요 없음.

  • 타입이 표기되지 않기 때문에 특정 변수의 타입을 바로 알기 어려워 가동성이 낮음. 후에 PEP 484에 추가된 타입 힌트(Type Hints)를 통해 제네릭을 사용.

    • PEP 484는 파이썬 3.5부터 사용 가능.
  • 타입 힌트를 통해 함수의 파라미터가 어떤 자료형이 들어가고, 리턴 값이 무엇인지 명시해줌으로써 가독성을 향상시킴.

      
    def are_equal(a : int, b : int) -> bool:
        return a==b
    

네이밍 컨벤션

  • Snake case : 각 단어를 '_'로 구별. PEP8
    • snake_case (파이썬)
  • Carmel case : 단어별로 대소문자를 구별하여 표기
    • carmelCase (자바)

제너레이터(Generator)

  • 루프의 반복 동작을 제어할 수 있는 루틴 형태

    • 숫자 1억개를 만들어내는 프로그램
    • 만약 제너레이터가 없으면 숫자 1억개를 메모리에 저장하고있음.
    • 제너레이터를 이용하면, 1억개의 숫자를 만드는 제너레이터만 생성하고 나중에 필요할 때 숫자를 만들어낼 수 있음.
  • yield 구문을 통해 제너레이터를 리턴할 수 있음.

    • 기존 함수에서는 return 이후 함수가 종료되지만, yield를 사용하면 중간 값을 리턴한 이후 함수는 종료되지 않고 맨 끝에 도달할 때까지 실행됨.

      def get_number():
          n = 0
          while True:
              n += 1
              yield n
      
      # generator 생성
      g = get_number()
      
      for _ in range(0, 100):
          # 1부터 100까지 출력함.
          print(next(g))

range

  • generator 방식을 활용하는 대표적인 함수로 range를 예로 들 수 있음.

  • 숫자 100만개를 생성하는 상황

  • 
      a = [i for i in range(1000000)]
      b = range(1000000)
      print(b[999]) #999
      
  • 메모리 점유율은 b가 훨씬 낮고, index로 접근 시에 바로 생성하도록 구현되어 있기 때문에 리스트처럼 사용할 수 있음.

print

    
      print('aa', end=' ')
      print('bb')
      # aa bb
      
      a = ['A', 'B']
      print(' '.join(a))
      # A B
      
      idx = 1
      fruite = 'Apple'
      print('{}: {}'.format(idx+1, fruit))
      # 2: Apple
      
      # f-string(formated string literal) 사용하면 변수를 인라인으로 삽입할 수 있음.
      # python 3.6+에서만 지원
      print(f'{idx+1}: {fruit})
      # 2: Apple
      
Comments