Development/Python

[python] python3.8 새롭게 추가된 기능 몇 가지

juniz 2020. 9. 24. 23:07
반응형

파이썬 3.8 이후 새로운 기능 설명입니다.

더 자세한 사항은 공식 문서 참고해주세요. [link]

 

Walrus Operator

:= 이게 바다코끼리처럼 보인다고 해서 지어진 이름이긴한데,

크게 와닿지는 않습니다. 

# Walrus operator
req = {'form': {'username': 'j', 'password': ''}}


def walrus_example(req):
    if len(password := req['form'].get('password')) > 5:
        return 'Good Password'
    else:
        return 'Too short'
        
def without_walrus_example(req):

    password = req['form'].get('password')
    if len(password) > 5:
        return 'Good Password'
    else:
        return 'Too short'

단순하게 한 줄을 줄여주는 느낌인 walrus 를 실제 사용을 얼마나 할지는 모르겠습니다. 

실제 사용을 할땐 () 를 써서 명확하게 구분 하는 편이 좋을 것 같습니다. 

 

Positional-only Parameter

백스페이스 / 를 사용해서 parameter의 위치를 지정해주는 역할을 합니다. 

keyword와는 다르게 위치만을 지정해놓은 상태라 keyword로 변경이 불가능합니다. 

# Positional-only arguments (/)

def positional_args(text, /, border='=', width=50):
    return f'{text}'.center(width, border)

>>> positional_args('Python3.8')
'====================Python3.8====================='

>>> positional_args(text = 'Python3.8')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: positional_args() got some positional-only arguments passed as keyword arguments: 'text'

>>> positional_args('Python3.8', border='*')
'********************Python3.8*********************'

 

Precise Type

파이썬은 동적언어로 실행 시 자동으로 변수의 타입을 확인해서 저장을 해주지만,

정적언어 처럼 자료형을 지정해 줄수 있습니다. 

아래 예시는 float형인 number라는 변수를 받아 float를 리턴해주는 function 입니다. 

# Precise Type
def precise_type(number: float) -> float:
    return 2 * number

F string =

f string으로 print 할시에 =를 같이 받아서 

출력을 해주기 때문에, 디버깅하거나 테스트 할 때 편리할 듯 합니다. 

# f string
name = 'j'
print(f'{name=}')

name='j'

 

Unpacking

return, yield 값에 *를 같이 사용하면 오류가 나던 것이 해결됬습니다. 

# Unpacking
def unpacking():
    test = (4, 5, 6)
    return 1, 2, 3, *test

def before_py38():
    rest = (4, 5, 6)
    t = 1, 2, 3, *rest
    return t


>>> unpacking()
(1, 2, 3, 4, 5, 6)

 

이 외에도 속도도 향상됬다고 하고 좋다고 하지만

여전히 텐서플로우는 3.7까지만 지원을 하고 있기에

저는 별로 쓸 일이 없을 것 같습니다...

반응형