Developer_Neo
[python] 모듈, random모듈, itertools모듈 본문
모듈
- 파이썬 코드를 논리적으로 묶어서 관리하고 사용할 수 있도록 하는 것
- 비슷한 종류의 일을 하는 함수들 끼리 따로 묶어놓은 것
- 내장 함수들을 그냥 사용할 수 있지만 모듈안에 있는 함수들은 사용하기전 import를 해줘야한다.
모듈의 종류
- 표준 모듈 : 파이썬 패키지에 기본적으로 포함된 모듈 (math, datetime)
- 사용자 정의 모듈 : 사용자가 직접 만들어서 사용하는 모듈
- 써드파티(third party) 모듈 : 제 3자가 만들어서 제공하는 모듈 (ex 회사)
모듈 사용하기
- import 모듈
- from 모듈 import 함수or클래스명
- import 모듈 as 별명
'''
모듈에 대해 import를 하게 되면 모듈이름과 함께 사용해야한다.
ex) math.pi
'''
>>> import math
>>> math.pi # 원주율 파이값
3.141592653589793
>>> math.factorial(5) # 팩토리얼 값
120
'''
from 모듈 import 함수or클래스명
과 같은 형식으로 하면 모듈이름사용할 필요가 없다.
ex) pi
'''
>>> from math import pi
>>> pi
3.141592653589793
'''
from형식을 쓸경우 import뒤에 여러개의 함수가 올 수 있고
import 뒤에 *를 쓰게 되면 모듈 멤버들을 모두 이름만으로 사용가능해진다.
'''
>>> from math import sqrt, factorial, pow
>>> sqrt(100)
10.0
>>> factorial(3)
6
>>> pow(2,3)
8.0
>>> from math import *
>>> sqrt(100)
10.0
>>> gcd(20, 32) # 최대공약수
4
'''
import 모듈 as 별명
모듈명에 별명을 붙이기
'''
>>> import math as mt # math -> mt로 사용
>>> mt.sqrt(100)
10.0
>>> math.sqrt(100) #>>>에러발생
사용자가 모듈 만들기
- 모듈에는 상수, 함수, 클래스 등을 저장함.
- 파일명에서 확장자 py를 떼면 모듈명이 됨
'''
three_calculator.py (파일명)
모듈명 : three_calculator
add_three(a,b,c) : a,b,c 세 수의 합을 반환
multiply_three(a,b,c) : a,b,c 세 수의 곱을 반환
count : 상수
'''
count = 3 # 데이터 상수 넣기
def add_three(a,b,c): # 사용자 정의 함수 넣기
total = a + b + c
return total
def multiply_three(a,b,c):
result = a * b * c
return result
from three_calculator import add_three, multiply_three, count
x = int(input('Enter integer 1 : '))
y = int(input('Enter integer 2 : '))
z = int(input('Enter integer 3 : '))
answer1 = add_three(x, y, z)
answer2 = multiply_three(x, y, z)
print('add : {}'.format(answer1))
print('multiply : {}'.format(answer2))
print('calculate for {} numbers'.format(count))
random모듈
임의의 정수 선택 | randint(a,b) | a<=N<=b사이 정수 선택 (a,b는 정수 여야 한다.) |
randrange( , , ) | range()함수 결과 중에서 임의 값(정수) 선택 | |
임의의 실수 선택 | random() | 0<=F<1 사이의 임의의 실수 선택 |
uniform(a,b) | a<=F<b사이 실수 선택 (a,b는 정수 or 실수.) | |
컨테이너 자료형(문자열, 리스트, 튜플, 사전, 집합) X에서 선택 | choice(X) | 문자열, 리스트, 튜플인 시퀀스 자료형만 가능 X에서 임의 원소 선택 |
sample(X,k) | 문자열, 리스트, 튜플 ,집합 가능 만약 사전을 사용하려면 list()로 변환해야함. X에서 k개의 원소 임의로 중복 없이 선택 |
|
shuffle(X) | 리스트만 가능 X의 데이터들을 섞어서 리스트로 반환 |
>>> d = {1:'one', 2:'two', 3:'three', 4:'four'}
>>> random.sample(d, 2)
TypeError: Population must be a sequence or set. For dicts, use list(d).
>>> random.sample(list(d), 2)
[1, 3]
itertools 모듈
- iterable 객체에 대해서 어떤 반복적인 일을 처리하는 데 도움을 주는 함수들로 구성
- chain(), count(), dropwhile(), takewhile(), groupby()
1. chain(?, ?, ...)
- iterable 객체에서 원소를 하나씩 넘겨줌
- 두 리스트를 연속해서 출력할때 사용하면 효율적임.
from itertools import chain
L1 = [1,3,5]
L2 = [2,4,6,8]
for x in chain(L1, L2):
print(x, end=' ')
'''
결과
1 3 5 2 4 6 8
'''
L1 = [1, 3, 5]
L2 = [2, 4, 6, 8]
for x in L1 + L2:
print(x, end=’ ‘)
# 이것도 똑같은 결과
import itertools
L = [1, 3, 5]
T = (10, 20)
S = 'python'
for x in itertools.chain(L, T, S):
print(x, end=' ')
'''
결과
1 3 5 10 20 p y t h o n
'''
import itertools
S = {'red', 'blue', 'yellow'}
D = {100:'hundred', 1000:'thousand'}
for x in itertools.chain(S, D, range(5)):
print(x, end=' ')
'''
결과
red yellow blue 100 1000 0 1 2 3 4
'''
+ 로 연결하여 처리하면, 두 리스트를 합한 새로운 리스트가 중간에 생기게 됨. 따라서 itertools.chain()이 효율적
2. count(?)
- 인수로 넣는 정수로부터 수열을 무한히 만들어 나갈 수 있다.
from itertools import count
for x in count(100):
print(x, end=' ')
'''
결과
100 101 102 103 104 105 ... ...
'''
'''
zip() 내장 함수와 같이 사용하면 효율적
(튜플로 합침)
'''
from itertools import count
A = ['one', 'two', 'three']
B = zip(count(1), A)
print(list(B))
'''
결과
[(1, 'one'), (2, 'two'), (3, 'three')]
'''
3. dropwhile(f, I)
- f – 참 ,거짓을 반환하는 함수, I– iterable 객체
- I에 저장된 각 데이터에 대해서 함수 f를 적용하여 결과가 True인 데이터는 버리고
처음으로 False가 되는 데이터를 찾아서 그 데이터 이후의 모든 데이터를 반환한다.
from itertools import dropwhile
def find_even(x):
if x%2 == 0:
return True
return False
L = [4, 8, 10, 3, 6, 7, 1]
for x in dropwhile(find_even, L):
print(x, end=' ')
'''
결과
3 6 7 1
'''
4. takewhile(f, I)
- f – 참 ,거짓을 반환하는 함수, I– iterable 객체
- 결과가 True인 동안의 데이터를 모두 반환
from itertools import takewhile
def find_even(x):
if x%2 == 0:
return True
return False
L = [4, 8, 10, 3, 6, 7, 1]
for x in takewhile(find_even, L):
print(x, end=' ')
'''
결과
4 8 10
'''
5. groupby(I, f)
- I– iterable 객체인데 f는 그냥 함수로 있을수도 없을 수도 있다.
- f가 없다면, X에 있는 데이터 자체가 키가 되어 그룹으로 묶음.
- f가 있다면, 함수 f의 반환값 기준으로 X를 그룹으로 묶음
- 반환 값은 2개로 나온다 키 와 데이터로..
>>> from itertools import groupby
>>> L = [1, 1, 2, 2, 2, 2, 3, 3, 3]
>>> x = groupby(L) # 두 번째 인수가 없어서 L에 있는 데이터 자체가 키
>>> for k, v in x:
print(k, ':', list(v))
1 : [1, 1]
2 : [2, 2, 2, 2]
3 : [3, 3, 3]
from itertools import groupby
L = [3, 4, 7, 1, 2, 3, 1, 2, 2, 7, 5]
for k, v in groupby(sorted(L)):
print('{} : {}개'.format(k, len(list(v))))
'''
결과
1 : 2개
2 : 3개
3 : 2개
4 : 1개
5 : 1개
7 : 2개
'''
sys 모듈
- sys.stdin.readline()
- input함수를 대체 한다.
import sys
print('Enter your name : ', end='')
name = sys.stdin.readline( )
first_name, last_name = name.split( )
print('You are ' + first_name + ' ' + last_name + '.')
'''
결과
Enter your name : Alice Lee
You are Alice Lee.
'''
print('Enter integers : ', end='')
numbers = sys.stdin.readline( )
num = numbers.split( ) #리스트 반환
total = 0
for n in num:
total += int(n)
print('total :', total)
'''
결과
Enter integers : 3 9 10 12 5 1
total : 40
'''
'프로그래밍 > Python' 카테고리의 다른 글
[python] __메소드__ 정리 (0) | 2022.01.17 |
---|---|
[python] 클래스 및 예외처리 (0) | 2022.01.17 |
[python] 파일 입출력 (0) | 2022.01.16 |
[python] 람다함수 및 파이썬 내장함수 (0) | 2022.01.16 |
[python] 함수 정의, main문 , 지역변수와 전역변수(global키워드) (0) | 2022.01.16 |