All streams
Search
Write a publication
Pull to refresh

Comments 6

Дежавю. Вроде как пару дней назад видел эту статью.

В последнее сравнение я бы в функцию test_if() в каждую ветку добавил бы пару сравнений

isinstance(element, dict) and len(element) == 2 and ...

А иначе, если element, это не словарь, то в этой функции вылетит ошибка AttributeError, а вторая отработает без ошибок. Ну и вторая функция проверяет, что в словаре 2 элемента, а данная - нет. А тогда разница будет - тройка. Уже лучше, и, да, за читабельность кода надо платить.

Наверное стоило сделать ещё тест, который продемонстрировал бы сложность О. Может при сотне кейсов время выполнения и сравняется.

Предположу, что при ровных руках разработчиков сложность match/case можно довести до O(1), ну или хотя бы O(log n), в зависимости от мапы под капотом. А вот if/else всегда будет O(n).

Рано делать выводы, проверим работу с еще более сложными структурами

Попробуйте наоборот энум на 50 вариантов. Скорее всего, чем проще проверка, тем эффективнее match/case.

Ну проверки у вас не верные, поэтому и время не верное, если написать более правильно то и результат другой

def test_match(data):
    for word in data:
        match word:
            case 'дом' | 'думать' | 'что-то' | 'просто':
                pass
            case int():
                print(word)
            case str() if len(word) > 3:
                pass
            case str() if word.startswith("д"):
                pass
            case _:
                pass
              
>>> РЕЗУЛЬТАТ MATCH/CASE: 0.21404509879399847

да это по прежнему дольше чем классический if else, но разница в скорости совсем другая

Sign up to leave a comment.

Articles