1. Module
모듈과 패키지, 라이브러리
- 모듈 : 클래스, 함수, 상수의 집합
- 패키지 : 하위 패키지 및 모듈의 집합
- 라이브러리 : 패키지 및 모듈의 집합
모듈
- 1개의 파이썬 파일 (패키지는 폴더)
- 함수, 상수, 클래스를 주제 지향적으로 모아놓은 집합체
➡ 클래스 : 다른 모듈의 확장, 함수 : 특정작업의 처리, 상수(변수) : 불변의 값
1) 모듈 사용
① 모듈 전체의 식별자를 가져오는 import
- 파이썬 모듈을 프로그램 내부에서 사용할수 있도록 namespace에 추가해 주는 명령어
- 구문형식 : import 모듈이름 [as 별칭]
- 모듈이름/별칭.함수(), 모듈이름/별칭.변수, 모듈이름/별칭.클래스
② 모듈 내의 특정한 메서드를 가져오는 from ~ import
- 구문형식 : from 모듈이름 import 메서드1,(메서드2/함수/클래스...)
from 모듈이름 import* (모듈안의 모든 메서드를 가져옴)
- 모듈 이름없이 변수, 함수, 클래스 사용
등록확인 : dir() namespace에 등록되어 있는 이름들을 리스트로 반환 (import 후에 사용가능)
예 ) dir(math)
함수기능확인 : help() 대화형 도움말 시스템 호출 또는 클래스나 메소드 사용방법 반환
예) help(math.abs), help("python".upper)
③ namespace
특정 객체를 이름에 따라 구분할수 있는 범위 ( namespace상의 객체명 중복시 오류발생 )
지역 NS : 함수 또는 메서드 내의 이름공간 (scope)
전역 NS : 모듈 전체에서 통용되는 이름공간
빌트인 NS : 모든 코드범위
④ 모듈의 제거
- namespace내 module의 멤버 식별자 제거
del 등록된 모듈이름
2) 유용한 모듈
① math 모듈
- 수학적 계산문제를 해결하기 위한 수학적 함수 및 상수의 집합
- C 표준에 정의된 수학적 계산함수 내장, 𝝅 와 𝑒등의 상수 제공
- pi,e(자연로그), fabs(), ceil(),floor(),exp(),log(),sqrt(),sin(),asin(),cos(),tan(),degrees(x)
** from math import sin, radians 형태로 namespace에 불러옴
② random 모듈
- 난수(random number): 특정한 배열 순서나 규칙적인 의미가 없는, 임의의 수를 의미
- 난수 관련된 생성 기능을 제공하는 모듈(특정 범위의 난수를 발생)
RNG(난수발생기 Random Number Generator) 번호 발생 경향이 비슷할수 있어,
시작점(seed)의 변형을 주어 패턴을 변형.
- random() 0~1사이의 난수,
random randint(a,b) : a,b사이의 숫자중 난수발생,
randrange(a,b,c) : a,b사이의 c간격으로 나열된 숫자중 난수발생
- list자료형에 사용하는 random모듈의 메서드 (반드시 sequence)로 들어가야 하며
choice(sequence) 주어진 항목 중 랜덤하게 반환, (1,9)이렇게 주어지면 1과 9중에서만 선택
sample(sequence) 리스트가 주어질때 그중에서 임의로 여러개를 선택
shuffle(sequence) 시퀀스를 랜덤하게 섞어줌
** 조건문 if 내부의 in은 비교연산자 (존재하는지 판단, for문의 in과 다른 의미)
** randint : 정수를 랜덤하게 발생시킴
③ time 모듈
에포크 시간을 얻어 다양한 형식으로 표시하는 기능 제공
유닉스 에포크 (1970-01-01 00:00:00 GMT)
- time(): 에포크이후 누적된 초(실수형태)반환 , gmtime(): struct_time형식으로 기준 시각변환,
localtime(time), strftime(str, time)지정된 형시으로 시각변환, ctime()현재시각,
sleep(n) 현재 동작중인 프로세스를 n초만큼 멈춤
4. 파일
- 컴퓨터에 의해 처리될 데이터와 이미 처리된 데이터나 정보가 임시적으로 저장된 상태
- 일련의 연속된 바이트, 프로그램(파이썬)에 읽혀져 가공.처리
1) 파일의 구성
- 연속된 바이트, 파일의 시작, 파일포인터, 파일의 끝(EoF)
① 파일의 종류
- 데이터가 저장방식에 따라 텍스트와 바이너리 파일로 구분, 바이너리 파일이 널리 사용
- 텍스트 파일 : 데이터를 구성하는 개별문자를 엔코딩 체계를 통해 바이트로 변경, 연속적으로 저장
- 텍스트 에디터(메모장 등)로 열어서 식별가능(텍스트), 식별불가(바이너리)
텍스트 파일 : 199를 문자로 저장(ASCII코드이면 각 문자에 상응하는 바이트로 저장, 코드 읽어 화면출력)
바이너리 파일 : 199를 실제 값으로 해석, 해당 값에 해당하는 1바이트로서 저장(적은 공간에 저장가능)
② 파일 함수
- 파일의 시작, 파일포인터, 파일의 끝을 활용한 데이터 읽기, 쓰기를 위한 함수와 메서드 내장
- open(): file obj 파일과 연결된 파일 객체생성
- read() 특정개수 문자반환
- readline() 한라인의 문자열반환
- readlines():list 전체라인의 문자열을 리스트로 반환
- write(s: str) 파일에 문자열 작성,
- close() 파일닫기
- 물리적인 파일과 연결된 파일객체를 생성하고 참조변수에 할당하여 활용
구문 형식 : 파일객체_참조변수 = open(파일이름, 모드)
- 모드 'r' : 읽기 용도, 'w' : 새로운 파일을 쓰기 용도, 'a': 파일끝에 새로운 데이터를 덧붙이는 용도
( 바이너리 사용을 위한 모드가 별도로 존재함 )
③ 파일 이름
- 파일에 접근하기 위한 모든 정보 (파일의 위치를 가리키는 경로정보 포함)
- 파이썬 사용 시 파이썬 프로그램이 텍스트 파일과 같은 폴더에 있다면 앞의 경로 생략가능
2) 파일 이용
① 파일 읽기 (read mode)
- 파일로부터 특정 범위의 데이터를 읽어 문자열로 반환(파일 포인터 이동을 동반)
**readline은 개행표인터('\n')표시까지 읽어들임
예) 파일을 읽고 출력
khan_fp.readlines() : 전체를 읽어들임 , khan_fp.close() : 파일 종료
readlines (khan_fp) (X, 이 부분에서 이러한 적용은 불가능)
** 매줄마다 "\n"(개행문자)이 있으므로 줄바뀜이 추가됨, strip으로 개행문자 삭제시 추가적인 줄바뀜 없음
② 파일 쓰기 (write mode)
- 이름을 생성하고 포인터를 파일의 맨처음에 위치 (문자열이 파일 포인터가 위치한 지점에 기록)
w모드로 존재하는 파일 오픈시 기존에 동일명 파일이 있다면 모든 데이터 삭제됨
- 데이터가 기록되면서 파일 포인터도 함께 이동 ('\n'을 추가해야 함)
예) 파일 생성 및 저장
p_fp = open("Python_guide.txt", "w")
p_fp.write("Python\n")
p_fp.write("1st grade class \n")
p_fp.close() : 닫지 않으면 파일이 생성되지 않을수 있음
→ 저장된 내용 : Python₩n1st grade class₩n
③ 데이터 추가 (append mode)
- 파일의 끝에 데이터를 덧붙이는 작업
- 파일 오픈 시 파일 포인터를 EoF로 이동 , 존재하지 않는 파일의 경우 write와 동일
예) 파일에 내용추가
3) 시퀀스
순서화된 값의 집합체를 저장할수 있는 데이터 타입
- 단일 식별자로 연속된 저장 공간 접근수단 제공
- 개별 원소의 값을 수정, 추가, 삭제가능
- 원소(element)의 나열을 저장할 수 있는 타입 : 리스트, 세트, 튜플, 딕셔너리
리스트, 세트, 튜플 : 저장된 번지수(인덱스)를 기준으로 값에 접근
딕셔너리 : 항목으로 구성 ( 키를 이용하여 값에 접근 , 항목 : 키+값)
** 모듈 제거 : 오류 발생시 해당 모듈을 namespace에서 제거해 볼수 있음
** namespace : 프로그램 내부에서 식별자들이 사용되는 공간 (모듈,변수,함수이름 : scope)
① Dictionary 활용
- 키와 값의 쌍(pair)를 저장하는 시퀀스, {키:값, ... 키:값} 형태로 표시
- 생성, 수정, 삭제의 lifecycle이 있음
- 구문 형식, (키의 값은 세트, 리스트, 딕셔너리 자료형 불가)
딕셔너리 생성
딕셔너리 생성과 동시에 값대입 : 딕셔너리_이름 = {키1:값1, 키2:값2, .. 키n:값n}
비어있는 딕셔너리 생성 : 딕셔너리_이름 = {}, 딕셔너리_이름=dict{ }
값가져오기 : 변수 = 딕셔너리_이름[key]
- 추가/삭제 구문 형식 : 딕셔너리_이름[키] = 값 , del 딕셔너리_이름[키]
- 딕셔너리의 멤버
keys(): tuple 포함된 모든 키 반환, values() : 포함된 모든 값을 tuple로 반환
items(): tuple (키,값)형태의 튜플로 모든 항목반환, clear():none 모든항목 삭제
get(key):value 해당하는 키가 있으면 값를 반환, pop(key):value 값 반환후 삭제,
popitem():tuple 무작위 1개 반환후 삭제
- 순회 (traversal) 각각의 항목을 순서대로 한번씩만 방문하는 과정
for keys in dictionary :
print(key+":"+str(dictionary[key]))
key를 사용하는 프로그램 블록
예) 딕셔너리를 이용한 프로그램 사례 (키에 단어를 넣고, value에 반복횟수를 넣음)
** 인용부호를 strip에 넣을때는 newline character(문자열 끝) 인식하지 않도록 \추가하여 "\"로 설정
dictionary의 단어를 가져오는 함수 .get()
word-dict의 항목을 키와 값을 바꾸어 출현횟수값이 키이고 단어가 값인 word_r_dict로 재구성
word_r_dict를 출현횟수별로 정렬(sorted(), 내림차순)한 후 키가 워드인 word_dict로 재구성
word_dict의 값(word_dict[key])이 특정 이상인 키를 출력
'스터디 > Python' 카테고리의 다른 글
6. 실습 - 게임구현 (0) | 2024.05.04 |
---|---|
4. 함수와 객체 (0) | 2024.05.02 |
3. 구조와 제어 (0) | 2024.04.21 |
2. 파이썬 Basic (0) | 2024.04.20 |
1. 정보 및 컴퓨터 구성 (0) | 2024.04.20 |