티스토리 뷰
멀티캠퍼스 AI과정/01 Python Basic
Python 07, 08, 09 - Decorator, Module, Exception
jhk828 2021. 1. 5. 14:26Python 07, 08, 09 - Decorator, Module, Exception
- Decorator, Module, 예외처리
<First - Calss Function (일급함수) 조건 세가지>
- 파이썬의 함수는 변수에 저장 가능하다.
- 함수의 인자로 함수를 이용할 수 있다. =>
Decorator
- 함수의 결과값 (리턴값)으로 함수를 이용할 수 있다. =>
Closure
< Decorator>
- 기존의 코드에 여러가지 기능을 추가하는 Python 구문
아래 두 코드는 실행 결과가 같다.
import time
def my_outer_func(func): # my_func()의 기능 확정
def my_inner_func():
print("{} 함수 수행 시간을 계산합니다.".format(func.__name__))
start = time.time() # 1970년 1월1일 0시0분0초 0
func()
end = time.time() # end - start = func() 함수 실행시간
print("함수 수행 시간은 {}입니다.".format(start - end))
return my_inner_func
def my_func():
print("my_func() 함수가 호출되었어요!!")
decorated_my_func = my_outer_func(my_func) # 함수의 주소값을 변수에 저장하여
decorated_my_func() # 변수를 통해 주소값이 저장된 함수를 실행시킨다.
### 실행결과
# my_func 함수 수행 시간을 계산합니다.
# my_func() 함수가 호출되었어요!!
# 함수 수행 시간은 0.0입니다.
## Decorator 이용
import time
def my_outer_func(func): # my_func()의 기능 확정
def my_inner_func():
print("{} 함수 수행 시간을 계산합니다.".format(func.__name__))
start = time.time() # 1970년 1월1일 0시0분0초 0
func()
end = time.time() # end - start = func() 함수 실행시간
print("함수 수행 시간은 {}입니다.".format(start - end))
return my_inner_func
@my_outer_func
def my_func():
print("my_func() 함수가 호출되었어요!!")
my_func()
## 실행결과
# my_func 함수 수행 시간을 계산합니다.
# my_func() 함수가 호출되었어요!!
# 함수 수행 시간은 0.0입니다.
-
Decorator 이용 시, 인자로 넘겨줄 인자의 종류나 갯수가 미지정된 경우
-
=>
args
,kwargs
이용
-
def my_outer(func):
def my_inner(*args, **kwargs):
print("데코레이터!! 시작")
func(*args, **kwargs)
print("데코레이터!! 끝!!\n")
return my_inner
@my_outer
def my_func():
print("이것은 소리없는 아우성!!")
@my_outer
def my_add(x, y):
print("두 수의 합은 : {}".format(X+y))
my_func() # 데코레이터!! 시작
# 이것은 소리없는 아우성!!
# 데코레이터!! 끝!!
my_add(10, 20) # 데코레이터!! 시작
# 두 수의 합은 : 30
# 데코레이터!! 끝!!
-
본래
args
,kwargs
이용-
1.)
args
는tuple
로 받는다. -
2. )
kwargs
는dict
로 받는다.
-
# 인자로 들어온 사람의 이름을 출력하는 코드
# 1. *args는 tuple로 받는다.
def print_user_name1(*args):
for name in args:
print(name)
print_user_name("홍길동", "신사임당") # 이렇게도 가능
print_user_name("홍길동", "신사임당", "유관순") # 이렇게도 가능
# 2. **kwargs는 dict로 받는다.
def print_user_name2(**kwargs):
for key in kwargs.keys():
print(kwargs.get(key))
print_user_name(name1="홍길동", name2="신사임당")
# 홍길동
# 신사임당
<Module>
-
python에서 Module은 함수나 변수 또는 클래스를 모아놓은 파일을 지칭
-
다른 python 파일에서 불러와서 사용할 수 있다.
-
module 사용 목적은 1) 코드 재사용성 2) 관리 목적
-
module의 종류는 크게 두가지가 있다.
- 1) C언어로 구성된 binary module
- 2) python언어로 구현된 일반 module
-
import
하여 사용한다. -
module도 파이썬 입장에서는 객체로 관리된다.
modele 파일 작성 후 경로 추가
import sys
print(sys.path) # python system library 폴더들 list
sys.path.append("c:/python_data") # module을 저장할 폴더를 지정
print(sys.path)
# # module1.py 파일을 "c:/python_data"에 저장한다.
작성한 모듈 사용하기
## 작성한 모듈 다시 사용하기
# import module1
# import module1 as m1
# from module1 (패키지명) import my_adder
# from module1 import *
### c:/python_data/test_module/module1.py 새 폴더 안에 모듈 파일 저장
# => import test_module.module1
####
import module1
print(module1.my_pi) # 3.1414926535
print(module1.my_adder(10, 20)) # 30
import module1 as m1
print(m1.my_pi) # 3.1414926535
print(m1.my_adder(10, 20)) # 30
from 패키지명
from module1 import my_adder
print(my_adder(10, 20)) # 30
from module1 import *
print(my_pi) # 3.1414926535
# c:/python_data 안에 module1.py를 저장해 놓았다.
# c:/python_data/test_module/module1.py로 다시 저장하자.
import test_module.module1
print(test_module.module1.my_pi) # 3.1414926535
import test_module.module1 as my_module
print(my_module.my_pi) # 3.1414926535j
<Exception>
- compile time error - 문법 오류
- run time error - 실행 시 발생하는 오류
- 어떤 runtime error들은 비정상 종료되지 않고 프로그램을 지속적으로 수행시킬 수 있는 방법이 있다.
- => 예외처리 (exception)
- 예외 처리 구문:
try/ exception/ else/ finally
def my_func(my_list):
total_sum = 0 # list 안의 숫자들을 누적한다.
try:
total_sum = my_list[0] + my_list[1] + my_list[2]
print("try가 수행되었어요!!")
except Exception:
print("오류가 존재합니다.") # 예외처리를 해야 한다!
else:
print("오류가 없어요!!")
finally:
print("무조건 수행되요!!")
my_func([1, 2, 3])
# try가 수행되었어요!!
# 오류가 없어요!!
# 무조건 수행되요!!
my_func([1, 2])
# 오류가 존재합니다.
# 무조건 수행되요!!
'멀티캠퍼스 AI과정 > 01 Python Basic' 카테고리의 다른 글
Python 05, 06 - Magic function, First Class, Closure (0) | 2021.01.05 |
---|---|
Python 04 - Python 객체지향 프로그래밍 1, 2, 3 (0) | 2021.01.05 |
Python 03 - Python 함수/ 내장/ 외장/ 람다 함수 (0) | 2021.01.05 |
Python 02 - 입출력, 제어문, List Comprehension (0) | 2021.01.05 |
Python - 01 DateTime (0) | 2021.01.05 |
댓글