반응형

Python Math 모듈을 사용하면 다양한 수학 연산을 수행할 수 있습니다.

마찬가지로 DateTime 모듈은 날짜 및 시간과 관련된 다양한 작업을 수행하는 데 사용할 수 있는 함수 및 개체를 제공합니다.

 

Python 모듈

1. 디버거 모듈

2. 컬렉션 모듈

3. 날짜/시간 모듈

4. 수학 모듈

5. 랜덤 모듈

6. 시간 및 Timeit 모듈

 

디버거 모듈

디버거 모듈은 이름에서 알 수 있듯이 Python 애플리케이션을 디버그하는 데 사용됩니다. 런타임에 어떤 값이 변수에 할당되는지 알고 싶다면 콘솔에서 값을 간단히 출력할 수 있습니다. 그러나 런타임에 여러 변수의 값을 확인하려면 코드의 다른 위치에 여러 명령문을 출력해야 하므로 코드가 복잡해지고 애플리케이션 성능에도 영향을 미칠 수 있습니다.

Python 디버거 모듈을 사용하면 런타임에 다양한 변수의 값을 확인할 수 있습니다.

 

Python 디버거를 사용하는 방법의 예를 살펴보겠습니다.

항목 이름과 항목의 총 판매 가격이 포함된 딕셔너리를 정의하고 각 항목에 대한 수향을 정의하는 리스트를 정의합니다.

예를 들어 다음 스크립트에서 total_price 딕셔너리의 첫 번째 항목인 laptop의 총 가격은 100이고 수량은 quantities 리스트의 첫 번째 항목에서 볼 수 있듯이 5입니다.

다음으로 항목 이름과 모든 항목의 평균 가격을 표시하는 루프를 실행합니다.

total_price 딕셔너리에 있는 항목의 평균 가격은 해당 항목에 대한 딕셔너리 값을 수량 리스트의 해당 값으로 나누어 계산할 수 있습니다.

예를 들어, 첫 번째 품목인 노트북의 평균 가격은 100을 수량 리스트의 첫 번째 품목 5로 나누어 계산할 수 있습니다.

 

total_price = {'laptop':100, 'cell phone':75, 'keyboard':40, 'mouse':15}

quantities = [5, 5, 5, 5]

 

for (item, price), quantity in zip(total_price.items(), quantities):

  average_price = (price/quantity)

  print("The average price for a ", item, "is", str(average_price))

 

Output:

The average price for a  laptop is 20.0

The average price for a  cell phone is 15.0

The average price for a  keyboard is 8.0

The average price for a  mouse is 3.0

 

이제 항목 중 하나의 수량이 0이라고 가정합니다. 다음 스크립트를 실행하면 예외가 발생합니다. 아래 예외는 키보드의 수량에 해당하는 수량 리스트의 세 번째 항목의 값이 0이기 때문에 발생합니다. 따라서 모든 키보드의 총 가격인 40 0으로 나누면 예외가 발생합니다.

 

total_price = {'laptop':100, 'cell phone':75, 'keyboard':40, 'mouse':15}

quantities = [5, 5, 0, 5]

 

for (item, price), quantity in zip(total_price.items(), quantities):

  average_price = (price/quantity)

  print("The average price for a ", item, "is", str(average_price))

 

Output:

ZeroDivisionError: division by zero

 

수천 개의 레코드 목록에서 데이터를 읽는 경우 목록만 보면 수량이 0인 항목을 찾기가 어렵습니다.

다음 스크립트와 같이 평균 가격을 인쇄하기 전에 항목을 출력해서 위치를 오류 위치를 찾아볼 수 있습니다. 출력을 보면 키보드 항목의 평균 가격을 출력하는 중 에러가 발생하는 것을 볼 수 있습니다.

 

total_price = {'laptop':100, 'cell phone':75, 'keyboard':40, 'mouse':15}

quantities = [5, 5, 0, 5]

 

for (item, price), quantity in zip(total_price.items(), quantities):

  print(item)

  average_price = (price/quantity)

  print("The average price for a ", item, "is", str(average_price))

 

Output:

laptop

The average price for a  laptop is 20.0

cell phone

The average price for a  cell phone is 15.0

keyboard

ZeroDivisionError: division by zero

 

그러나 수천 개의 레코드가 있는 경우 하나의 변수에 대해 수천 개의 출럭문을 실행해야 합니다. 수량 변수의 값도 출력하려면 다른 출력 명령문을 작성하거나 값을 항목 값과 연결해야 합니다. 따라서 많은 계산이 수행되어야 합니다.

 

위와 같은 문제를 해결하기 위해서 Python 디버거를 사용하여 애플리케이션의 모든 변수를 추적할 수 있습니다.

Python 디버거로 애플리케이션을 디버그하려면 pdb 모듈을 가져와야 합니다.

다음으로 set_trace() 메서드로 정의된 변수 값을 확인하려는 코드의 해당 지점에서 set_trace() 메서드를 호출해야 합니다.

 

코드가 해당 지점에 도달하면 변수 이름을 입력하여 변수 값을 확인할 수 있는 텍스트 필드가 표시됩니다.

 

다음 스크립트에서는 try 블록에서 예외를 throw할 가능성이 있는 코드를 래핑합니다. 예외는 예외 블록에서 catch되므로 예외 블록에서 pdb.set_trace() 메서드를 호출합니다.

 

import pdb

 

total_price = {'laptop':100, 'cell phone':75, 'keyboard':40, 'mouse':15}

quantities = [5, 5, 0, 5]

 

for (item, price), quantity in zip(total_price.items(), quantities):

  try:

    average_price = (price/quantity)

    print("The average price for a ", item, "is", str(average_price))

  except:

    pdb.set_trace()

 

위의 코드는 예외 블록에서 catch될 예외를 throw하므로 set_trace() 메서드 호출이 실행되고 아래와 같이 출력에 텍스트 필드가 표시됩니다.

 

 

값을 보려면 텍스트 상자에 변수 이름을 입력합니다.

예를 들어 항목을 입력하면 아래와 같이 출력에 "keyboard"가 표시됩니다.

 

 

 

마찬가지로 텍스트 필드에 가격과 수량을 입력하여 해당 값을 볼 수 있습니다.

마지막으로 Python 디버거를 종료하려면 문자 q를 입력하고 Enter 키를 누르기만 하면 됩니다.

 

컬렉션 모듈

리스트, 튜플 및 딕셔너리와 같은 기본 컬렉션 외에도 Python은 컬렉션의 모듈에서 몇 가지 고급 컬렉션을 제공합니다. 이 컬렉션은 목록의 총 항목 수 계산 등과 같은 특수 기능을 수행하는 데 사용됩니다.

 

카운터

카운터는 목록에서 각 항목의 발생을 계산하는 데 사용할 수 있는 컬렉션 유형입니다.

다음 스크립트는 컬렉션의 모듈에서 Counter 클래스를 가져옵니다.

 

from collections import Counter

 

다음으로 다양한 자동차 제조업체 리스트를 만듭니다. Counter 클래스의 개체를 만들려면 리스트를 Counter에 전달할 수 있습니다.

다음 스크립트는 자동차 리스트를 사용하여 Counter 클래스를 생성합니다.

 

from collections import Counter

 

cars =["Honda","Honda","Honda","Honda","Ford","Ford","BMW"]

print(Counter(cars))

 

Output:

Counter({'Honda': 4, 'Ford': 2, 'BMW': 1})

 

Counter는 일종의 딕셔너리입니다. 개별 항목의 개수에 액세스하려면 항목 이름을 인덱스 값으로 카운터에 전달할 수 있습니다.

예를 들어 다음 스크립트는 Honda 항목의 개수를 인쇄합니다.

 

from collections import Counter

 

cars =["Honda","Honda","Honda","Honda","Ford","Ford","BMW"]

cars_counter = Counter(cars)

print(cars_counter["Honda"])

 

Output:

4

 

문자열은 기본적으로 문자 목록이므로 문자열을 사용하여 Counter 개체를 만들 수 있습니다. 이러한 카운터는 문자열의 각 문자에 대한 카운트를 포함합니다.

 

from collections import Counter

 

str_count = Counter("adskdhssalkfhss")

print(str_count)

 

Output:

Counter({'s': 5, 'a': 2, 'd': 2, 'k': 2, 'h': 2, 'l': 1, 'f': 1})

 

Default Dictionaries

Default dictionary는 일반 딕셔너리와 유사한 컬렉션 유형입니다. 그러나 Default dictionary에서는 사전에 존재하지 않는 키에 대한 기본값을 지정할 수 있습니다.

 

일반적인 딕셔너리와 Default dictionary의 차이점을 살펴보겠습니다.

다음 스크립트는 자동차 이름과 차량 수로 normal_dic 사전을 만듭니다. BMW 항목이 normal_dic에 있으므로 해당 값이 콘솔에 출력됩니다.

 

from collections import defaultdict

 

normal_dic={'BMW':7,'Honda':4,'Ford':2}

print(normal_dic["BMW"])

 

Output:

7

 

이제 존재하지 않는 키로 사전 항목에 액세스해 보면 오류가 발생합니다.

 

print(normal_dic["Toyota"])

 

Default dictionary를 사용하여 딕셔너리에 기본값을 할당할 수 있습니다. Default dictionary을 만들려면 키워드 defaultdic을 사용할 수 있습니다.

생성자에서 사전에 키가 없는 경우 반환하려는 값이 포함된 람다 식을 전달해야 합니다.

다음 스크립트에서 딕셔너리에 없는 키에 사용할 수 없는 문자열을 전달합니다.

다음으로, BMW Toyota 키를 def_dic이라는 Default dictionary에 전달합니다. BMW 키가 사전에 있으므로 해당 값 7이 표시됩니다. Toyota 키의 경우 Not Available 문자열이 인쇄되고 예외가 발생하지 않습니다.

 

from collections import defaultdict

 

def_dic = defaultdict(lambda:"Not Available")

def_dic["BMW"] = 7

 

print(def_dic["BMW"])

print(def_dic["Toyota"])

 

Output:

7

Not Available

 

Named Tuples

Named Tuples은 명시된 인덱스가 있는 튜플 유형입니다.

일반 튜플의 경우 0부터 시작하는 인덱스로 항목에 액세스할 수 있습니다. 예를 들어, 튜플의 첫 번째 항목에 액세스하려면 인덱스 값으로 0을 전달할 수 있습니다. Named Tuples의 경우 명시된 값, 즉 문자열 등을 튜플 인덱스로 전달하여 튜플 요소에 액세스할 수 있습니다.

 

Named Tuples과 일반 튜플의 차이점을 살펴보겠습니다.

다음 스크립트는 세 개의 요소가 있는 일반 튜플을 만듭니다. 세 번째 요소는 튜플의 인덱스 값으로 2를 전달하여 콘솔에 출력됩니다.

 

normal_tuple ("BMW", 10, "Black")

print(normal_tuple[2])

 

Output:

Black

 

이제 Named Tuples의 예를 살펴보겠습니다. Named Tuples을 생성하려면 컬렉션 모듈에서 Named Tuples 클래스를 사용할 수 있습니다.

명시된 튜플의 식별자를 전달하고 인덱스 이름 목록을 전달해야 합니다.

예를 들어 다음 스크립트에서는 식별자 이름이 CarNamed Tuple car_tuple 개체를 만듭니다. 다음으로 Name, Model Color의 세 가지 인덱스 이름으로 목록을 만듭니다.

이제 이 명시된 튜플의 개체를 생성하는 경우 다음 스크립트에서 볼 수 있듯이 Name, Model Color 인덱스에 대한 값을 전달해야 합니다.

 

from collections import namedtuple

 

car_tuple=namedtuple('Car',['Name','Model','Color'])

cars =car_tuple(Name ="BMW", Model=10, Color ="Black")

 

인덱스 이름을 사용하여 명시된 튜플 객체 자동차의 항목을 확인할 수 있습니다. 예를 들어, 세 번째 항목에 액세스하려면 다음 스크립트와 같이 정수 인덱스 2 또는 명시된 인덱스 Color를 사용할 수 있습니다.

 

print(cars[2])

print(cars.Color)

 

Output:

Black

Black

반응형

+ Recent posts