Различия в эффективности и скорости при сопоставлении с образцом в Python 3.10
PEP 634 вводит в Python сопоставление структурных шаблонов. Мне интересно, есть ли какие-либо заметные улучшения скорости или эффективности, связанные с этим синтаксисом, или это исключительно семантическое.
Синтаксис довольно симпатичный:
# function written with new pattern matching
def match_command(command):
match command.split():
case ["quit"]:
quit()
case ["add", a, b]:
if all([a.isdigit(), b.isdigit()]):
print(int(a) + int(b))
else: raise ValueError("add expects 2 integers.")
case ["say", *args]:
print(" ".join(args))
case _: raise SyntaxError("Invalid command.")
# function written with original conditional syntax
def conditional_command(command):
command, *args = command.split()
if command == "quit": quit()
elif command == "add":
if not all([arg.isdigit() for arg in args]):
raise ValueError("add expects 2 integers.")
if len(args) == 2:
print(sum([int(arg) for arg in args]))
elif command == "say":
print(" ".join(args))
else: raise SyntaxError("Invalid Command")
example_command = input("Enter a command: ")
match_command(example_command)
conditional_command(example_command)
Работает ли внутренняя логика более эффективно, чем обработка этой логики с помощью хорошо написанных условных выражений, одинакова ли она или этот синтаксис жертвует эффективностью ради удобочитаемости?
Похоже, что это помогает вам выполнить некоторую проверку ошибок, поскольку ввод, который вы не учитываете, просто передается в случай по умолчанию. Имея свои ограниченные знания, я полагаю, что это больше для удобочитаемости, чем для эффективности или безопасности (учитывая, что условное выражение может быть написано разными способами). Мне любопытно, как это изменится при увеличении размера функции.