파이썬 TIL 2020_10_20

김현진·2020년 10월 20일
0

파이썬TIL

목록 보기
3/4

type hinting

  • 타입에 대한 파이썬의 유연함은일회성 스크립트나 소규모의 애플리케이션을 빠르게 개발 할때는 큰 장점으로 작용 하지만 애플리케이션이 규모가 커지게 되면 이러한 파이썬의 다이나믹함이 치명적인 버그로 이어질 확률이 높아지게 되며 애플리케이션 안정에 위험 요소가 되기도 합니다.

  • 따라서 중규모 이상의 파이썬 프로젝트에서는 소위 타입힌팅이라는 개발 프로세스를 도입하여 사용하는 경우가 많습니다.

  • 타입힌팅은 말 그대로 파이썬 코드를 작성할때 타입에 대한 메타 정보를 제공하는 것입닌다. 파이썬에 타입 힌팅이 추가되기 전에는 타입을 표시할려면 주석을 이용했어야 했습니다. 이 방법은 코드를 읽는 개발자에게는 약간의 도움이 될지 모르겠으나 정해진 표준이 없었고 일반 주석과 구분이 어려웠습니다.

  • 타입 힌팅은 우리가 작성한 코드를 다른 개발자가 읽기 수월하게 해주고, 우리가 사용하는 개발 도구가 활용할 수 있도록 도와줄 수 있습니다.

타입스크립트 와 비슷


num: int = 1

def repeat(message: str, times: int = 2) -> list:
  return [message] * times
  
name: str = "김현진"

age: int = 10

emails: list = ["짱"]

adress: dict = {
  "city" : "인천"
}

그러나 다른 형(type)을 넣었다고 하여도 에러는 발생하지 않음(패키지를 사용해서 에러를 발생시킬 수 있음)

참고로 콜론(:)뒤에 한칸 -> 앞뒤 한칸씩 띄어주는게 관행

from typing import List, Set, Dict, Tuple # 파이썬 내장모듈을 이용해 상세히 표기

nums: List[int] = [1]

unique_nums: Set[int] = {6,7}

vision: Dict[str, float] = {'left': 1.2}

john: Tuple[int, str, List[float]] = (25, "Jo", [1.0, 0.9])

문서화(Docstring)

  • docstring 이란: 모듈, 함수, 클래스 또는 메소드 정의의 첫 번째 명령문으로 발생하는 문자열로써 설명문으로 사용됩니다.

  • docstring은 해당 객체의 __doc__ 특수속성으로 변환됩니다.


def even_or_odd(n: int) -> None:

  """[짝수인지 홀수인지 구분하는 함수]
  Args:
	n (int): [짝수 홀수 구분 변수]]
  """
  if n % 2 == 0:
    print('even')
    return
  print('odd')

even_or_odd(3)

# 해당함수의 설명이 나옴

help(even_or_odd)
print(even_or_odd.__doc__)

--- 출력 ---

"""
------- help function -------------
Help on function even_or_odd in module __main__:

 even_or_odd(n: int) -> None
    [짝수인지 홀수인지 구분하는 함수]
    Args:
          n (int): [짝수 홀수 구분 변수]]
-----------__doc__--------------------
[짝수인지 홀수인지 구분하는 함수]
  Args:
    n (int): [짝수 홀수 구분 변수]]
"""

__name__

  • 파이썬 실행환경에서는 더블 언더스코어로 구분되어지는 특별한 속성이나 메소드가 존재합니다.

  • __name__: 콘솔창에서 script로 실행되는 것인지 아니면 다른패키지에서 import되는것인지 구분이 가능하게 해줍니다.

  • 이를 이용하여 script로써 실행할 때는 함수를 실행하는 코드작성을 추가할 수 있습니다.

제너레이터(Generator)

  • 제네레이터는 함수는 파이썬의 시퀀스 데이터를 생성하는데 사용됩니다.

  • 실제 시퀀스 데이터와 다른 점은, 시퀀스 전체를 가지고 있는 것이 아니라 시퀀스 데이터를 생성하기 위한 어떠한 루틴만을 가지고 있다는 것입니다.

  • 제네레이터는 함수를 통해서 만들어지며, 함수 내부의 반복문에서 yield키워드를 사용하면 제네레이터가 된다.

  • 함수 내부에 yield키워드가 사용되어 제네레이터 함수가 되었으며, 함수를 실행하면 제네레이터 객체를 반환한다.


def range_gen(num):
  i = 0
  while i < num:
    yield i # yield를 만나는 순간 멈춘다.
    i += 1

gen = range_gen(10)

print(gen.__next__()) # i값을 반환 0
print(gen.__next__()) # 1
  • yield부분에서 멈춘 제네레이터 객체를 순회하기 위해서는 __next__() 함수를 사용한다.

  • 뭔가 연결된 데이터를 잘라서 사용한다.

profile
기록의 중요성

0개의 댓글