Python 모르고 놓치고 있는 유용한 기능

    목차
반응형

나는 몇 가지를 제외하고 매우 유용하게 사용하고 있다.

 

 

연쇄 함수 호출

list comprehension처럼 사용 가능

def foo(x:bool):
    print(x)

def foo2(x:bool):
    print(not x)
    
x = True
(foo if x else foo2)(x)
# True

x = False
(foo if x else foo2)(x)
# True

 

 

 

for - else 문

for문이 break를 타지 않고 끝나면 (전체 루프를 다 돌면) else문 실행

for i in range(5):
    if i > 5:
        break
else:
    print('?')
# ?

for i in range(5):
    if i < 5:
        break
else:
    print('?')
#

 

 

 

함수 주석 (1)

파라미터 `:`, return값 `->`

def foo(x:int, y:str) -> dict(str=int):
    return {y:x}

정말 주석 역할만 할 뿐 `x`에 float, string을 넣어도 상관 없다.

 

 

함수 주석 (2)

docstring

def foo(x:int, y:str) -> {str:int}:
    """
    Parameter
    ---------
    x: int
    y: str
    
    Return
    ---------
    dict(y=x)
    """
    
    if not isinstance(x, int):
        raise Exception('x must be integer')
        
    if not isinstance(y, str):
        raise Exception('y must be string')
    
    return {y:x}

 

 

 

오류 내기

`raise Exception`과 `assert`

# 방법 1
if not isinstance(x, int):
    raise Exception('x must be integer')
    
# 방법 2
assert isinstance(x, int), 'x must be integer'

방법 1은 Exception Traceback, 방법 2는 Assertion Error Traceback

둘 다 동일하게 `x`가 `int`형이 아니면 에러를 발생시킨다.

 

 

사용자 정의 오류

class MyOwnError(Exception):
    def __init__(self, msg):
        self.msg = msg

    def __str__(self):
        return self.msg
        
raise MyOwnError('?')

 

 

 

무한대

import math
import numpy

float('inf') == math.inf == np.inf # True
np.isinf(float('inf')) # True

 

 

 

if문에서 대입하기

if (a:=3) < 4:
    print(a, 'is great')
    
# 3 is great

`:=` 연산자를 통해 변수에 바로 대입하면서 if문을 돌릴 수 있어 코드를 줄일 수 있다.

728x90
반응형