1. 예외 처리
1) try, except문
- try 블록 수행 중 오류가 발생하면 except 블록이 수행된다.
- except문에 발생 오류를 지정하지 않으면 오류 종류에 상관없이 오류가 발생하기만 하면 except 블록을 수행한다.
- 예를 들어, 수를 0으로 나눴을 때 발생하는 ZeroDivisionError 예외가 발생했을 때 오류 메시지를 출력하고 싶다면 다음과 같이 작성한다.
try:
4/0
except ZeroDivisionError as e:
print(e) # division by zero
- except 블록에 pass 키워드만 넣으면 오류를 그냥 회피한다.
2) else문
- 예외가 발생하지 않은 경우에 실행되며 반드시 except절 바로 다음에 위치해야 한다.
try:
4/0
except ZeroDivisionError as e:
print(e) # division by zero
else:
print("이상 없음") # 실행되지 않음
3) finally문
- 예외 발생 여부에 상관없이 항상 수행된다.
try:
4/0
except ZeroDivisionError as e:
print(e) # division by zero
else:
print("이상 없음") # 실행되지 않음
finally:
print("검사 끝") # 실행됨
- 사용한 리소스를 반환해야 할 경우에 많이 사용된다.
4) raise
- raise 명령어를 통해 오류를 강제로 발생시킬 수 있다.
raise 발생 오류
- 예를 들어, Bird 클래스를 상속받는 자식 클래스들은 반드시 fly() 함수를 구현하도록 하고자 한다.
class Bird:
def fly(self):
raise NotImplementedError # 꼭 재정의해야 하는 부분이 재정의되지 않았을 때 발생시키는 예외
자식 클래스가 fly() 함수를 재정의하지 않은 상태로 fly() 함수를 호출하면 Bird 클래스의 fly() 함수가 사용되기 때문에 NotImplementedError 예외가 발생한다.
2. lambda
- lambda는 함수를 한줄로 간결하게 생성할 때 사용하는 예약어다.
lambda 인수1, 인수2 ... : 반환값
sum=lambda a,b: a+b
print(sum(3, 5)) # 8
arr = [lambda a,b: a+b, lambda a,b:a-b] # 리스트에 함수를 저장
print(arr[0](3, 4)) # 7
print(arr[1](7, 2)) # 5
3. 내장 함수
- 파이썬의 내장 함수는 import를 필요로 하지 않는다.
- abs(x) : 숫자 x의 절대값을 반환
- all(x) : 반복 가능한 자료형 x의 요소가 모두 참이면 True를 반환하고, 그렇지 않으면 False를 반환
print(all([1,2,3])) # True
print(all([0,1,2])) # False
print(all([True, False, True])) # False
- any(x) : 반복 가능한 자료형 x의 요소가 하나라도 참이면 True를 반환하고, 그렇지 않으면 False를 반환
- chr(x) : 정수형 아스키 코드값 x에 대한 문자를 반환
- ord(x) : 문자 x에 대한 정수형 아스키 코드값을 반환
- dir(x) : 객체 x가 자체적으로 가지고 있는 변수나 함수를 반환
- divmod(x, y) : x를 y로 나눈 몫과 나머지를 튜플로 리턴
- enumerate(x) : 순서가 있는 자료형 x을 입력으로 받아 인덱스 값을 포함하는 enumerate 객체를 반환
for idx, str in enumerate(['apple', 'banana', 'lemon']):
print(idx, str)
- eval(x) : 실행 가능한 문자열을 입력으로 받아 문자열을 실행한 결과값을 반환
print(eval("1+2")) # 3
print(eval("divmod(4,3)")) # (1, 1)
- filter(x, y) : 함수 x와 반복 가능한 자료형 y를 받아서, y의 요소들이 x에 입력되었을 때 리턴값이 참인 것들만 걸러낸 결과인 filter 객체를 반환
def negative(x):
return x<0
print(list(filter(negative, [1, -2, 3, -4, 5, -6]))) # [-2, -4, -6]
- hex(x) : 정수값 x를 16진수로 문자열로 변환하여 반환
- oct(x) : 정수값 x를 8진수로 문자열로 변환하여 변환
- id(x) : 객체 x의 고유 주소값을 반환
- input(x) : x라는 프롬포트를 띄우고 사용자 입력을 받아서 반환 (x 생략 가능)
a=input("내용을 입력하세요: ")
print(a)
- int(x) : 문자열 형태의 숫자나 소수점이 있는 숫자 등을 정수 형태로 반환
※ int(x, radix) : radix 진수로 표현된 문자열 x를 10진수로 변환하여 반환
print(int('C4', 16)) # 196(=16*12+4)
- isinstance(object, class) : 인스턴스 object가 클래스 class의 인스턴스인지를 판단하여 참이면 True, 거짓이면 False를 반환
class A:
pass
a=A()
print(isinstance(a, A)) # True
- len(x) : 입력값 x의 길이(요소의 전체 개수)를 반환
- list(x) : 반복 가능한 자료형 x를 리스트로 변환하여 반환
- tuple(x) : 반복 가능한 자료형 x를 튜플로 변환하여 반환
- map(x, y) : 반복 가능한 자료형 y의 각 요소가 함수 x에 의해 수행된 결과인 map 객체를 반환
print(list(map(lambda x:2*x, [1,2,3,4,5]))) # [2, 4, 6, 8, 10]
- max(x) : 반복 가능한 자료형 x의 최대값을 반환
- min(x) : 반복 가능한 자료형 x의 최소값을 반환
- pow(x, y) : x의 y제곱을 반환
- range([start,] stop [,step]) : [Python 간단정리 2]의 [3-2) range() 함수] 참고
- sorted(x) : 반복 가능한 자료형 x의 요소들을 정렬해서 그 결과를 리스트로 반환
- str(x) : 객체 x를 문자열 형태로 변환하여 반환
- type(x) : 객체 x의 자료형을 반환
- zip(x) : 동일한 개수로 이루어진 자료형을 하나씩 묶어서 zip 객체로 반환
print(list(zip([1,2,3],['a','b','c'],[7,8,9]))) # [(1, 'a', 7), (2, 'b', 8), (3, 'c', 9)]
4. 유용한 외장 함수들
1) sys
- 파이썬 인터프리터가 제공하는 변수들과 함수들을 직접 제어할 수 있게 해주는 모듈
- sys.argv : 명령 행에서 입력한 인수 불러오기
- sys.exit() : 스크립트 종료
- sys.path : 파이썬 모듈들이 저장되어 있는 디렉토리 리스트를 반환
2) pickle
- 객체의 형태를 그대로 유지하면서 파일에 저장하고 불러올 수 있게 하는 모듈
- 어떠한 자료형이든 상관없이 저장하고 불러올 수 있다.
import pickle
class Hello:
def __init__(self):
self.a=3
self.b=4
self.c=5
def sum(self):
return self.a+self.b+self.c
hello = Hello()
f=open("test.txt", 'wb') # 바이너리 쓰기
pickle.dump(hello, f) # 객체를 파일에 저장
f.close()
f=open("test.txt", 'rb') # 바이너리 읽기
data=pickle.load(f) # 파일에 저장된 객체를 로드
print(data.sum()) # 12
3) os
- OS 자원을 제어할 수 있게 해주는 모듈
- os.environ : 현재 시스템의 환경 변수에 대한 정보를 딕셔너리 객체로 반환
- os.path.join(x, y) : 디렉터리명 x과 파일명 y를 이어준 문자열을 반환
- os.path.splitext(x) : 파일 경로 x를 확장자를 기준으로 두 부분으로 나누어 튜플로 반환
- os.path.isdir(x) : 파일 경로 x가 디렉토리면 True를 반환하고, 그렇지 않으면 False를 반환
- os.chdir(x) : 현재 디렉토리의 위치를 x로 변경
os.chdir("C:\WINDOWS")
- os.getcwd() : 현재 디렉토리의 위치를 반환
- os.system(x) : 시스템 명령어 x를 실행
- os.popen(x) : 시스템 명령어 x를 실행시킨 결과값을 읽기 모드 형태의 파일 객체로 반환 (x는 문자열)
- os.mkdir(x) : 새 디렉토리를 x라는 이름으로 생성
- os.rmdir(x) : x라는 이름의 디렉토리를 삭제
- os.unlink(x) : x라는 이름의 파일을 삭제
- os.rename(x, y) : 파일의 이름을 x에서 y로 변경
- os.listdir(x) : 디렉토리 경로 x에 있는 모든 파일의 이름을 리스트로 반환
- os.walk(x) : 시작 디렉토리 경로 x부터 시작하여 그 하위의 모든 디렉토리를 차례대로 탐색하고, 그 탐색 결과로 root, dirs, files 값을 묶은 튜플을 반환한다.
※ root는 탐색 경로, dirs는 root 아래에 있는 폴더 리스트, files는 root 아래에 있는 파일 리스트
4) shutil
- 파일을 복사해 주는 모듈
shutil.copy("src.txt", "dst.txt")
5) glob
- 특정 디렉토리에 있는 파일들의 리스트를 반환해주는 모듈
glob.glob("C:\Python\h*") # 'h'로 시작하는 파일들을 모두 검색
6) tempfile
- 임시 파일을 만들어서 사용하고 싶을 때 사용하는 모듈
- tempfile.mktemp() : 중복되지 않는 임시 파일의 이름을 무작위로 만들어서 반환
- tempfile.TemporaryFile() : 임시 파일 객체를 반환한다. 기본적으로 'wb' 모드를 가지며, 해당 파일 객체의 close() 함수가 호출되면 이 파일 객체는 자동으로 사라진다.
7) time
- 시간 관련 모듈
- time.time() : UTC를 이용하여 현재 시간을 실수 형태로 반환
- time.localtime() : time.time()에 의해서 반환된 실수값을 이용해서 연도, 월, 일, 시, 분, 초 등의 형태로 변환한 결과인 time.struct_time 객체를 반환
import time
result=time.localtime(time.time()) # time.struct_time(tm_year=2023, tm_mon=1, tm_mday=8, tm_hour=17, tm_min=16, tm_sec=5, tm_wday=6, tm_yday=8, tm_isdst=0)
print(result.tm_year) # 2023
print(result.tm_mon) # 1
print(result.tm_mday) # 8
- time.asctime() : time.struct_time 객체를 파라미터로 받아서 날짜와 시간을 보기 쉬운 형태의 문자열로 반환
print(time.asctime(time.localtime(time.time()))) # 'Sun Jan 8 17:31:08 2023'
- time.ctime() : time.asctime(time.localtime(time.time()))와 동일한 기능을 한다.
- time.strftime(x, y) : time.struct_time 객체 y를 포맷 코드 x에 따라 표현한 시간 정보를 반환
print(time.strftime('%x', time.localtime(time.time()))) # '01/08/23'
※ 포맷 코드 참고 : https://www.tutorialspoint.com/python/time_strftime.htm
- time.sleep(x) : x초 동안 코드 실행을 지연
8) calendar
- 달력을 볼 수 있게 해주는 모듈
- calendar.calendar(x) : x년도 달력을 문자열 형태로 반환
- calendar.prcal(x) : x년도 달력을 출력 (반환값 없음)
- calendar.prmonth(x, y) : x년도 y월 달력을 출력 (반환값 없음)
- calendar.weekday(x, y, z) : x년도 y월 z일에 해당하는 요일 정보(0(월)~6(일))를 반환
- calendar.monthrange(x, y) : x년도 y월의 1일이 무슨 요일인지와 해당 달이 며칠까지 있는지를 튜플 형태로 반환
print(calendar.monthrange(2023, 1)) # (6, 31)
9) random
- 난수를 발생시키는 모듈
- random.random() : 0과 1 사이의 실수 중에서 난수값을 반환
- random.randint(x, y) : x에서 y 사이의 정수 중에서 난수값을 반환
- random.choice(x) : 반복 가능한 자료형 x의 요소들 중에서 무작위로 하나를 리턴
- random.shuffle(x) : 리스트 x의 요소들을 무작위로 섞음
10) webbrowser
- 기본 웹 브라우저를 자동으로 실행되게 하는 모듈
- webbrowser.open(x) : 문자열 x로 표현된 url로 이동
- webbrowser.open_new(x) : 문자열 x로 표현된 url로 새 창을 띄워서 이동
11) threading
- 쓰레드를 다루는 모듈
- threading.Thread 클래스를 통해 쓰레드 객체를 생성할 수 있다.
예시
import threading
import time
def show(msg): # 0.5초마다 msg를 출력
while True:
time.sleep(0.5)
print(msg, end=' ')
for i in ['a', 'b', 'c']:
t = threading.Thread(target=show, args=(i, )) # show 메소드를 실행 대상으로 한 쓰레드를 생성
t.daemon=True # 주 프로그램이 종료되는 순간 데몬 스레드도 함께 종료되도록 설정
t.start() # 쓰레드 시작
for i in range(10): # 0.1초 간격으로 0부터 9까지 출력
time.sleep(0.1)
print(i, end=' ')
- 다음과 같이 쓰레드를 threading.Thread를 상속 받은 클래스로 정의할 수도 있다. 위의 코드와 동일한 역할을 수행한다.
import threading
import time
class MyThread(threading.Thread):
def __init__(self, msg):
threading.Thread.__init__(self) # 반드시 호출해야 한다.
self.daemon=True
self.msg=msg
def run(self): # 쓰레드가 할 작업
while True:
time.sleep(0.5)
print(self.msg, end=' ')
for i in ['a', 'b', 'c']:
t = MyThread(i)
t.daemon=True # 주 프로그램이 종료되는 순간 데몬 스레드도 함께 종료되도록 설정
t.start() # start() 실행 시 MyThread.run()이 자동으로 수행됨
for i in range(10): # 0.1초 간격으로 0부터 9까지 출력
time.sleep(0.1)
print(i, end=' ')
● 참고 자료 : Do it! 점프 투 파이썬
'Python' 카테고리의 다른 글
[Python] 파이썬 웹 표준 라이브러리 (0) | 2023.01.19 |
---|---|
[Python 간단정리 5] 정규 표현식 (0) | 2023.01.08 |
[Python 간단정리 3] 클래스 / 모듈 / 패키지 (0) | 2023.01.06 |
[Python 간단정리 2] 제어문 / 함수 / 사용자 입출력 (0) | 2023.01.05 |
[Python 간단정리 1] 파이썬 소개 및 설치 / 자료형 (0) | 2023.01.04 |
댓글