Глобальная переменная задаётся за пределами функции (см. spisok = [])
А вот то, что ты хочешь использовать её в функции, ты помечаешь директивой.
Только функция которая взяла явно взяла глобальную переменную может её менять, а остальные работают с локальными переменными, даже если имена переменных совпали.
Оптимальностью здесь и не пахнет. В третьей строке создаётся копия массива, большого массива. Учитывая как часто это происходит, это вообще не хорошо.
Правильно чистить массив от лишних данных через arr_day.pop(), тогда изменения в оперативной памяти будут минимальными.
{f'{key}'__icontains': keyword} формирует словарь вида {'text__icontains': keyword} при key='text'
Две звёздочки превращают любой словарь в именованные аргументы, т.е. Q(**{'text__icontains': keyword}) тоже самое, что Q(text__icontains=keyword)
Такой приём используется тогда, когда имя аргумента должно задаваться с помощью переменной.
McThinker, Не решается. По тексту вопроса "открытие дублирующих вкладок".
Да, js может открывать окна (в современных браузерах - вкладки) и закрывать их. В этом есть смысл: сам открыл - сам закрыл. В контексте текущей задачи совет простой, скрипт не должен открывать окон, которые не нужны. Но это никак не поможет, если пользователь САМ открывает этот же url.
Я не очень понял, как открытие файла сделанное заранее может может помешать последовательности?
В твоём коде открытие и закрытие делается для каждой строчки. А это в тысячи раз более медленные операции чем все остальные. Если файл открыть заранее и записать все эти строчки, то последовательность не изменится, но операция открытия и закрытия будет выполнена лишь один раз для каждого файла.
Чтобы полностью исключить службу, рекомендую посмотреть как делает обновления хром. Правда нужно отметить, что он делает обновления сразу тремя способами, в том числе и службой.
Один из способов - регулярный запуск процесса обновления через планировщик задач.
Вы не google и не можете гарантировать, что ваша служба не натворит бед работая с максимальными правами, скачивая и устанавливая из сети хер знает что, потому что нет простого способа проверить, что ваш somedomain.com есть то, что вы ожидаете.
Поэтому пусть скачивание будет по расписанию без лишних прав. А обновление оставьте человеку.
И ещё. Не нужно сравнивать файлы (пункт 1). Нужно знать, какая версия стоит сейчас, и какая доступна на сервере. Если версия не совпадает, то запросить у сервера, всё что есть. Если обновление инкрементное, то придётся ставить все промежуточные обновления пока версии не совпадут.
> Rambox - самый обычный браузер (вроде электрон)
Так и есть, главное отличие от браузера заключается в том, вместо закрытия выполняется сворачивание в трей, которое и должно было помочь как-то решить проблему с ненужными значками.
Сам я не пользуюсь ни какими чатами в Rambox. Использую его как контейнер для trello, laverna, google keep и т.д.
Во-первых всегда под рукой, а во-вторых одна кнопка в панели задач, вместо десятка.
Но есть 2 огромных недостатка.
Ctrl+F - не работает.
Копировать/вставить через контекстное меню - не работает.
Interface: Мне как-то не пришлось создавать форму с помощью ActiveX, но использовать всякие ActiveX штучки на формах в Delphi приходилось (но мне не понравилось). Самое известное из них - Equation (редактор формул из MS Office), но оно не работало без установленного офиса. Правда была особенность, на основе idl (вернее tbl) встроенного в ActiveX компонент Delphi генерировал обёртку на паскале. Для интерпретируемых языков (js, c#, java) обёртка не нужна.
А вот в VB6 можно создавать целые приложения из ActiveX. Но эту возможность я не пробовал. Все нативные элементы хранились в библиотеке (кажется comctl32.dll) после выполнения regsrv32.exe comctl32.dll элементы становятся доступны для использования из скриптов wscript.exe. Примеры использования ActiveX без IE можно найти на сером форуме по теме вызова диалога открытия файлов.
Ссылки:
* docwiki.embarcadero.com/RADStudio/Berlin/en/RIDL_File
* forum.script-coding.com