amarao (amarao_san) wrote,
amarao
amarao_san

начал писать singlemv

Оставляя в стороне всякие сервисные оболочки (типа командной строки и обработки ошибок), реальный код выглядит так:
from_list=frozenset(sys.argv[2:-1])
history=cPickle.load(file(argv[1]))
to_move=from_list-history
[sys.rename(f, argv[-1]) for f in to_move]
cPickle.dump(history | to_move,file(argv[1],"w"))


Главное в этом коде (что заставляет меня хихикать от восторга - это операция to_move = from_list-history.

Это такая миленькая операция из теории множеств, которая возвращает список элементов, отсутствующий в "вычитаемом" списке. Сам вычитаемый список может быть сколь угодно большим, это не важно.

Ну и вдогонку операция history|to_move, возвращающая результат пересечения множеств. С сохранением уникальности элементов.

Заметим, это МНОГО эффективнее, чем "ручной" код вида:

[sys.rename(f, argv[-1]) for f in to_move if f not in from_list]

Причём эффективнее не потому, что большая часть кода выносится из интерпретируемого режима, а именно алгоритмической оптимизацией - если history будет исчисляться миллионами строк, то каждое 'in' бо-бо, что на Си, что на питоне.

Не, множества меня реально прут:

Список для сохранения в файл выглядит так:

return memory | (to_move - errors)

errors - set(), в который в случае ошибки делается errors.add(f)
Subscribe

  • systemd-networkd, netlink и arp флуд

    Нереально странный баг пофикшен с помощью eBPF затычки. Для меня большой неожиданностью является реакция на него.…

  • Rust soundness

    Каждый раз, когда я сталкиваюсь с маленькими "но" в Rust'е, это ощущение тщательной продуманности. Например, простейшие fold-функции для итераторов:…

  • still_ntp

    В ходе локального мозгового штурма у меня родилась суперидея. Надо написать ntp сервер, который может отдавать указанную дату. Т.е. сказали при…

  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 2 comments