본문 바로가기

Programming/Python

4. Python _ 내장함수, 외장함수 정리, 스레드 Thread

이 포스팅은 '점프 투 파이썬'을 다시 정독하면서 파이썬의 기초적이지만 매번 찾아보거나 몰랐던 부분을 정리하기 위한 목적으로 작성되었습니다.

내장함수 정리 - print, del, type 처럼 import하지 않고 쓸 수 있는 내장함수들

abs() - 절댓값

all(iterable data) iterable data: 반복가능한 자료형으로, 리스트 튜플 문자열 딕셔너리 집합 등.. - 자료 모두 참이면 True 하나라도 거짓 False

any(iterable data) - 하나라도 참이면 True, 모두 거짓이면 False

chr() - ASCII 코드값을 문자열로 출력 ex) chr(97) = 'a'
ord() - 문자의 ASCII 코드값 반환

dir() - 객체가 가지고 있는 변수나 함수를 보여줌 
ex) dir([1.2]) >>> ['append', 'count', 'extend', 'index' ....]

divmod(a,b) - a를 b로 나눈 몫과 나머지를 튜플로 반환.

enumerate() - 객체의 index도 같이 반환함 
ex) for i, name in enumerate(['jiwan','daeseong'])
        print(i, name)
index와 객체를 순서대로 출력해줌.

eval() - 실행가능한 문자열을 입력으로 받아 결과값 리턴
ex) eval('3+4') >>> 3  /  eval('divmod(4,3)') >>> (1,1) 

filter(함수, iterable data) - 함수값이 리턴이 참인 데이터들만 반환.

hex() - 16진수

id(object) - 객체 고유 주소값 리턴

int(x, radix) - radix 진수로 표현된 문자열 x를 10진수로 변환.

isinstance(object class)

lambda - 간결한 함수 생성 시 사용.
lambda 인수1, 인수2, ...
ex) sum = lambda a, b: a+b
sum(3,4) >>> 7

pow(x,y) - x의 y제곱
 
len() , list() , map(), max(), min(), open(), ragne(), sorted(iterable data), str(), type(), zip(), tuple()


외장함수 정리 - 파이썬 라이브러리

sys 모듈
파이썬 인터프리터가 제공하는 변수들과 함수들을 직접 제어.

sys.argv를 활용하여 명령행에서 인수 전달하기.
ex) python test.py jiwan play basketball과 같이 test.py뒤에 다를 값들을 넣어주면 sys.argv라는 리스트에 추가됨.
sys.exit() 스크립트 종료.
sys.path() 현재 파이썬 모듈 저장 위치 반환.

pickle 모듈
객체의 형태를 그대로 유지하면서 파일에 저장/ 불러오기 가능
pickle.dump(data,f) #data 저장
data = pickle.load(f) #data 호출

os모듈
os.environ 내 시스템 환경변수
os.chdir("location") 현재 디렉토리 위치 변경
os.getcwd() 현재 디렉토리 위치 반환
os.unlink() 파일 지우기
os.rename(a,b) a를 b로 이름을 바꿈.

shutil
파일을 복사해주는 모듈
import shutil
shutil.copy('a.txt', 'b.txt') a를 b라는 이름의 텍스트 파일로 복사.

glob(pathname) 디렉토리 내 파일들 읽어서 리턴

tempfile: 파일을 임시로 만들어서 사용할 때 씀.
tempfile.mktemp() #임시 파일의 이름을 무작위로 만들어 리턴
tempfile.TemporaryFile() # 임시 저장공간으로 사용될 파일 객체 리턴, 기본-wb모드

time 모듈
시간과 관련된 매우 유용한 모듈이다.

time.time() - 1970년 1월 1일 0시 0분 0초를 기준으로 지난 시간을 초단위로 리턴.
time.localtime(time.time()) - 위의 값을 y/m/d/h/m/s 의 형태로 반환해줌.
time.asctime(time.localtime(@@@)) - 위의 값을 알아보기 쉬운 형태로 리턴해줌.
time.ctime() - 위와 비슷한 거.
time.strftime('format code', time.localtime(@@@)) - 시간을 여러가지 포맷 코드를 통해 표현.

유용한 포맷코드
%a: 요일 줄임말
%b: 달 줄이말
%c: 날짜 시간
%p: AM PM
%x: 설정된 로케일 기반 날짜 출력
%X: 설정된 로케일 기반 시간 출력
%Y: 연도 출력

time.sleep(sec) - 시간 간격 주기

calendar - 달력 볼 수 있는 모듈

random - 난수 발생 모듈
random.random() - 0-1 사이 난수 리턴.
random.randint(x,y) - x 에서 y 사이 난수 정수 리턴.
random.choice(iterable data) - iterable data에서 랜덤 선택.
random.shuffle(iterable data) - 무작위 섞기


Thread 모듈
프로세스: 컴퓨터에서 동작하고 있는 프로그램.
보통 1개의 프로세스는 1가지 일만 하지만 스레드를 사용하면 1개의 프로세스에서 여러개의 일을 동시에 수행할 수 있다!
이번에 랩에서 진행했던 프로젝트에서 여러가지 센서모듈과 동시에 통신할 때 사용했었다.
스레드는 메인프로그램과 별도로 실행된다.
이를 가능하게 해주는 것이 바로 threading.Thread 클래스이다.

threading.Thread(함수 이름, 입력 변수)
t = threading.Thread(print, args)로 선언을 했다면,
t.daemon = True 통해서 메인 프로그램이 종료될 때 데몬 스레드도 함께 종료되도록 설정할 수 있다.
만약 데몬스레드로 설정하지 않을 시 이 서브 스레드는 메인 스레드가 종료되어도 본인의 일을 마치고 종료한다.

주로 thread 는 클래스로 정의하여 사용한다.

import threading으로 import한다.

예시

import threading
import time

class MyThread(thread.Thread):
	def __init__(self, msg):
		threading.Thread.__init__(self) #반드시 호출해야 함
		self.msg = msg
		self.daemon = True
        
	def run(self): #객체의 start메서드 실행시 run메서드 자동으로 수행됨.
		while True:
			time.sleep(1)
			print(self.msg)
            
for msg in ['jiwan', 'is', 'good']: #총 세개의 스레드가 돌아가겠네?
	t = MyThread(msg)
	t.start() #thread는 이렇게 작동시킴

for i in range(100): #메인 프로그램으로 10초 동안 돌아갈 것이다. 그 동안 위에 스레드가 계속 뭘 출력하게 생겼다.
	time.sleep(0.1)
	print(i)