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까지만 지원을 하고 있기에
저는 별로 쓸 일이 없을 것 같습니다...
반응형