본문 바로가기

컴퓨터 관련/파이썬

[파이썬] 10. 고급기능

728x90
반응형

1. 예외처리

  • 에러를 처리하는 구문
  • try에서 에러가 발생하면, except에서 발생한 에러를 처리하는 코드를 실행

1.1. 기본형

try:
  # 실행할 코드
except:
  # 예외 발생 시 처리할 코드
else:
  # 예외 미 발생 시 처리할 코드
finally:
  # 항상 처리할 코드

1.2. 예시

  • try-except로 구성된 예외처리문
try:
  a = [1,2,3,4]
  print(a[5]) #index error
except:
  print("잘못된 인덱스 접근")
  • 특정 에러에 대한 예외처리문
try:
  a = [1,2,3,4]
  print(a[5]) #index error
except IndexError:
  print("잘못된 인덱스 접근")
  • try-except-else-finally로 구성된 예외처리문
a = [1,2,3,4]
for i in a:
  try:
    print(a[i])
  except IndexError:
    print("잘못된 인덱스 접근")
  else:
    print("예외가 발생하지 않았습니다.")
  finally:
    print("예외처리문 실행완료:)")

1.3. 예외 일으키기

  • 기본형
raise Exception
# Exception : 일으킬 예외명을 명시
  • 예시
raise NameError('HelloWorld')

raise IndexError

2. 데코레이터

  • 클로저를 활용하여, 호출하는 함수
  • 함수를 수정하지 않고, 추가 기능을 구현할 때 사용함.
  • 다른 함수를 미리 호출하는 용도로도 사용함.

5.1. 기본형

```함수의 몸체```
def decorater(func):   
    def inner_function():      
        func()
        statement            
    return inner_function  

@decorater         
def function():
  statement

# decorater: 데코레이터의 이름을 의미함
# inner_function: function을 실행하기 위해 존재하는 함수
# func: 다른 함수를 호출하기 위한 함수/키워드 (클로저 참고)
# function: 

```함수의 호출```
function()

2.2. 데코레이터의 실행 순서

  1. function()을 호출하면
  2. @decorater를 통해, decorater()가 호출됨
  3. decorater()안에 있는 inner_function()이 호출되며,
    function()이 호출됨

2.3. 예시

  • 인자를 주지 않는 형태
def hello(func):
    print("Hello")
    def inner():
        func()
    return inner

@hello
def world():
    print("world")

world()
  • 인자를 주는 형태
def func_print(func):
  def inner(*args):
    print(*args)
    func()
  return inner

@func_print
def dummy():
  pass

dummy(123)
  • 가변인자를 주는 형태
def func_print(func):
  def inner(*args, **kwargs):
    func(*args, **kwargs)
  return inner

@func_print
def calculate(num):
  print("함수를 시작합니다.")
  print("계산결과: ", num*2)

calculate(10)
  • 알고리즘 시간 측정 예시

import time

def time_checker(func): # 알고리즘의 시잔을 재기위한 코드
    def function(*args, **kwargs):
        start_time = time.perf_counter()
        result = func(*args, **kwargs)
        end_time = time.perf_counter()
        print("실행시간: ", (end_time-start_time))
        return result
    return function

@time_checker
def test(n): #실제 알고리즘이 존재하는 코드
    for i in range(0,n+1):
        pass

test(100000)

3. 코루틴

  • 두 개의 함수가 동등한 상태에서 실행되는 상태
  • 프로그램을 종료하기 전까지, 코루틴과 메인루틴은 동등하게 존재함.
  • send()를 통해, 값을 보내며 실행하고
  • yield를 통해 값을 가져올 수 있음

3.1. 기본형

  • 클래스 만들기
def coroutine():
  yield

variable = corutione()
variable.next()
variable.send(value)

# coroutine: 코루틴 함수의 이름
# yield: send()로 보내진 값을 받는 역할
# variable: 코루틴 객체의 변수
# next(): 코루틴을 최초로 작동시키는 함수
# send(): 코루틴을 실행하며, 값을 보내는 함수

3.2. 예시

  • 일반적인 형태
def test():
  while True: # 코루틴 종료 방지
    num = yield
    print(num)

var = test()
next(var)

for i in range(0,12):
    var.send(i)
  • 데코레이터를 사용했을 때
def coroutine(func):               
    def start():
        next_statement = func()
        next(next_statement)
        return next_statement # 제너레이터 종료 방지
    return start

@coroutine
def receiver():                   
    while True: # 코루틴 종료 방지
        num = (yield)             
        print(num)

c = receiver()
c.send(1)                
반응형

'컴퓨터 관련 > 파이썬' 카테고리의 다른 글

[파이썬] 9. 객체지향  (0) 2024.01.07
[파이썬] 8. 함수  (1) 2024.01.06
[파이썬] 7. 파일 입출력  (1) 2024.01.06
[파이썬] 6. 조건문과 반복문  (0) 2024.01.06
[파이썬] 5. 딕셔너리  (0) 2024.01.06