Notice
Recent Posts
Recent Comments
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
10-11 00:15
Archives
Today
Total
관리 메뉴

Developer_Neo

[python] 모듈, random모듈, itertools모듈 본문

프로그래밍/Python

[python] 모듈, random모듈, itertools모듈

_Neo_ 2022. 1. 17. 10:48
반응형

모듈

- 파이썬 코드를 논리적으로 묶어서 관리하고 사용할 수 있도록 하는 것

- 비슷한 종류의 일을 하는 함수들 끼리 따로 묶어놓은 것

- 내장 함수들을 그냥 사용할 수 있지만 모듈안에 있는 함수들은 사용하기전 import를 해줘야한다.

 

모듈의 종류

  1.  표준 모듈                         : 파이썬 패키지에 기본적으로 포함된 모듈  (math, datetime)
  2.  사용자 정의 모듈                : 사용자가 직접 만들어서 사용하는 모듈
  3.  써드파티(third party) 모듈    : 제 3자가 만들어서 제공하는 모듈 (ex 회사)

 

모듈 사용하기

  1. import 모듈
  2. from 모듈 import 함수or클래스명
  3. 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 
'''

 

 

반응형
Comments