Switch Case اینجاست!
پایتون یک زبان برنامه نویسی بسیار کاربرپسند است، اما اگر بگوییم که پایتون 3.10 کاربرپسندتر هم هست چه؟
بدون نیاز به ساختارهای if، elif و else یا دیکشنری توابع، اکنون میتوانیم از match به جای آن استفاده کنیم!
def http_error(status):
match status:
case 400:
return "Bad request"
case 401 | 403:
return "Not allowed"
case 404:
return "Not found"
case 418:
return "I'm a teapot"
case _:
return "Something's wrong with the Internet"
# point is an (x, y) tuple
def check_point(point):
x = 10
y = 26
match point:
case (0, 0):
print("Origin")
case (0, y):
print(f"Y={y}")
case (x, 0):
print(f"X={x}")
case (x, y):
print(f"X={x}, Y={y}")
case _:
raise ValueError("Not a point")
برای کسب اطلاعات بیشتر، PEP-636 – تطبیق الگوی ساختاری: آموزش را بخوانید.
چک Zip Length
zip() یک تابع داخلی در پایتون است که به تازگی، توسعهدهندگان پایتون توجه بیشتری به آن نشان دادهاند. این تابع اکنون میتواند چک کند که طول لیستهای zipped به همان اندازه است یا خیر.
x = [1, 2, 3, 4]
y = [5, 7, 8]
print(list(zip(x, y)))
# [(1, 5), (2, 7), (3, 8)]
print(list(zip(x, y, strict=True)))
# ValueError: zip() argument 2 is shorter than argument 1
آیا به آرگومان strict توجه کردید؟ این آرگومان به zip() میگوید که طول لیستها یکسان است یا خیر. در غیر این صورت، یک ValueError را throw میکند.
برای کسب اطلاعات بیشتر PEP-618 – افزودن Optional Length-Checking برای zip را بخوانید.
تایپ Hint آسانتر شده است
Union را به یاد بیاورید که به ما اجازه میدهد بررسی کنیم که آیا یک آرگومان معادل چندین نوع است یا خیر. بنابراین، اکنون فقط لازم است که یک | داشته باشیم.
# Instead of
# def f(list: List[Union[int, str]], param: Optional[int]) -> Union[float, str]
def f(list: List[int | str], param: int | None) -> float | str:
pass
# Instead of typing.List[typing.Union[str, int]]
list[str | int]
# Instead of typing.Dict[str, typing.Union[int, float]]
dict[str, int | float]
isinstance(5, int | str)
# True
isinstance("5", int | str)
# True
خیلی تمیزتر شد!
پیامهای Error بهتر
پایتون یک زبان برنامه نویسی بسیار کاربرپسند است، اما اگر باز هم بگوییم که این نسخه کاربرپسندتر است چه؟
پایتون اکنون Error Messageهای بسیار قابل فهمتری را برمیگرداند.
# Python 3.9
print("hello world"
# SyntaxError: unexpected EOF while parsing
# python 3.10
print("hello world"
# print("hello world"
# ^
# SyntaxError: '(' was never closed
# Python 3.9
foo(x, z for z in range(10), t, w)
# foo(x, z for z in range(10), t, w)
# ^
# SyntaxError: Generator expression must be parenthesized
# python 3.10
foo(x, z for z in range(10), t, w)
# foo(x, z for z in range(10), t, w)
# ^^^^^^^^^^^^^^^^^^^^
# SyntaxError: Generator expression must be parenthesized
برای مثالها و اطلاعات بیشتر، و اینکه در پایتون 3.10 چه اتفاقات جدیدی رخ داده است، Error Messageهای بهتر را بخوانید.
بدون نیاز به Backslash
این یکی شخصی است! وقتی این تغییر در لیست تغییرات پایتون منتشر شد، به شخصه خیلی خوشحال شدم!
Parenthesized context managerها اکنون به طور رسمی مجاز هستند، به این معنی که هنگام breaking عبارات با line جدید، نیازی به اضافه کردن backslash نداریم.
# Old
with (open('file1.txt') as foo \
open('file2.txt') as bar):
pass
# New (No backslash)
with (open('file1.txt') as foo
open('file2.txt') as bar):
pass
پایتون هوشمندتر میشود – توابع جدید در ماژول statistic معرفی شده در پایتون 3.10
correlation() – ضریب همبستگی پیرسون را برای دو inputبرمیگرداند.
covariance() – کوواریانس سمپل دو input x و y را برمیگرداند.
linear_regression() – slope و intercept پارامترهای رگرسیون خطی سادهی برآورد شده با استفاده از حداقل مربعات معمولی (OLS) را برمیگرداند.
منبع: medium نویسنده: عمری قیلار، مهندس سینیور پلتفرم
Leave feedback about this