Форум сайта python.su
OlezhkaУ меня Linux. tkinter в Windows и Linux может работать по-разному.
А у меня нет. Как так? У меня Win 11. И еще заметил, что все скомпилированные в “PYINSTALLER” “EXE” создают у меня два процесса в “Диспетчере задач”. Почему?
Офлайн
py.user.nextСпасибо!
Вот пример тебе
Офлайн
OlezhkaПоле __name__ есть у каждого модуля, потому что каждый модуль - это объект со своими полями и методами. Ну, обычно там только поля у модулей. Если модуль вызывается сам по себе, в его поле __name__ ставится вот эта строка “__main__”, означающая, что он запускается как отдельный модуль, а не импортируется. Если же модуль импортируется, то в его поле __name__ ставится строка с его именем.
А вот это имя “__main__” модуль берет из основной программы? Оно для модуля и для основной программы общее?
Отредактировано py.user.next (Дек. 20, 2022 22:47:13)
Офлайн
Спасибо тебе за дельные советы!
py.user.nextNSIS-установщик или какой-то другой?
То есть делается установщик программы
py.user.nextА почему посередине нельзя? Ведь и в середине работает импорт. Потому что некрасиво? Не по-профессиональному?
Все модули должны импортироваться в самом верху скрипта. Нельзя делать import посередине скрипта.
import tkinter as tk tk.Tk().bell()
Офлайн
py.user.nextТак ведь, если я правильно понял, инструкция
Из-за этого как раз и нельзя импортировать модули через звёздочку типа
from tkinter import *
Офлайн
py.user.nextТут зацикливание какое-то! Функция вызывает сама себя. В стиле
import mod1
def main():
mod1.main()
while True:
Офлайн
Olezhkayandex. установщики
NSIS-установщик или какой-то другой?
OlezhkaПотому что принято это делать наверху в соответствии с PEP8
А почему посередине нельзя?
Imports are always put at the top of the file, just after any module comments and docstrings, and before module globals and constants.Если ты в середине симпортировал модуль, то потом ты можешь об этом забыть и где-то ниже опять начать его импортировать, и так ты будешь делать десять, пятьдесят, сто раз. Весь код будет заполнен этими лишними импортированиями. Если же ты вверху импортируешь все модули, то ты там повторно никогда не симпортируешь один и тот же модуль, потому что все импорты ты видишь в одном месте.
Imports should be grouped in the following order:
Standard library imports.
Related third party imports.
Local application/library specific imports.
You should put a blank line between each group of imports.
OlezhkaПотому что не принято это делать в соответствии с PEP8
Так ведь, если я правильно понял, инструкция
означает не импорт самого модуля, а импорт всех методов (функций, конструкторов) данного модуля.
Wildcard imports (from <module> import *) should be avoided, as they make it unclear which names are present in the namespace, confusing both readers and many automated tools.Модуль обычно не один импортируется и у разных модулей внутри могут быть одинаковые имена. Если в одном модуле есть класс под именем Button и в другом модуле есть класс под именем Button, как ты отличишь эти два разных класса? Как ты будешь обращаться к обоим классам, если они будут нужны оба каждый для своей ситуации?
OlezhkaОна не вызывает саму себя. Функция из одного модуля вызывает функцию из другого модуля. Просто это как раз тот случай, когда в разных модулях разные функции под одним и тем же именем. Это как в разных папках хранится файл file.txt, только в одном из них написано “привет”, а в другом на писано “пока”. Имена у них одинаковые, а содержимое разное.
Тут зацикливание какое-то! Функция вызывает сама себя.
Отредактировано py.user.next (Дек. 21, 2022 12:46:21)
Офлайн
py.user.nextНет, понятно, что я так делать не буду. Но я ради эксперимента пробовал повторно импортировать один и тот же модуль. Он импортируется с тем же ID. То есть просто перезаписывается. Так ведь? Или повторный импорт просто игнорируется интерпретатором?
Если ты в середине симпортировал модуль, то потом ты можешь об этом забыть и где-то ниже опять начать его импортировать, и так ты будешь делать десять, пятьдесят, сто раз. Весь код будет заполнен этими лишними импортированиями.
py.user.nextЭто потому что, когда импортируются все методы, код разрастается? Память забивается?
Потому что не принято это делать в соответствии с PEP8
py.user.nextА не хулиганят ли многие из этих установщиков, добавляя в код всяких яндекс-троянов или отправляя исходник твоей программы через “бэкдор”-порт своему создателю? Или я параною?
yandex. установщики
Отредактировано Olezhka (Дек. 21, 2022 14:44:54)
Офлайн
OlezhkaВсе модули грузятся только первый раз и всё. Дальше они добавляются в кэш и там все висят. Каждый новый импорт ссылается на кэш.
Он импортируется с тем же ID. То есть просто перезаписывается. Так ведь?
>>> import tkinter >>> >>> tkinter.Tk <class 'tkinter.Tk'> >>> >>> tkinter = 1 >>> >>> tkinter.Tk Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'int' object has no attribute 'Tk' >>> >>> tkinter + 2 3 >>>
OlezhkaПамять не забивается, забивается пространство имён. Это типа как взять все файлы со всех папок и положить в одну папку, а потом пытаться что-то найти в этой одной папке. При этом многие имена могут быть вообще одинаковыми. Начнут появляться там файлы file(1).txt, file(2).txt, file(3).txt и ты не будешь знать, что в каком файле, потому что эти цифры 1 2 3 ни о чём не говорят. Другое дело, если эти файлы все лежат в своих папках и из этого понятно, что file.txt в папке cat содержит какую-то информацию про кошку, а file.txt в папке ship содержит какую-то информацию про корабль. А если же они называются file(1).txt и file(2).txt в папке all, то там непонятно, что там в этих файлах и про что.
Это потому что, когда импортируются все методы, код разрастается? Память забивается?
OlezhkaЭто не яндексовские установщики, это Яндекс их просто нашёл. Продукцией Яндекса лучше не пользоваться, потому что у них она некачественная. Во-первых, в Яндексе работает много тупых людей, которые пишут полную лажу по меркам мирового уровня, но преподносится это всё как откровение века. Вот они так Яндекс-музыку сделали. Я включаю её на ночь, спать ложусь, просыпаюсь в три часа ночи - она не играет. Смотрю - что-то повисло у них там в сервисе. Потом снова и снова. Пиши им, не пиши им, - ничего не поможет. Там просто вот набирают тупых и отмазки какие-то лепят только постоянно. И критерии там у них “пишите так, чтобы было похоже на правду”. То есть они хотят казаться, а не быть. Так они ещё авторам наврали, что эту музыку нельзя будет скачивать, поэтому там можно все альбомы выкладывать. Как нельзя скачивать? Я даже без скачивания открываю просто кэш браузера и там вся эта музыка лежит в виде mp3-файлов, просто берёшь их, копируешь, и они у тебя будут лежать на диске без всякого сайта и играть. Мне даже не пришлось никак их качать специально. То есть авторы не шарят, они авторам врут спокойно и денежки просто делают на рекламе, а если ничего не работает, то просто отмазки лепят, пока человеку не надоест писать им.
А не хулиганят ли многие из этих установщиков, добавляя в код всяких яндекс-троянов или отправляя исходник твоей программы через “бэкдор”-порт своему создателю? Или я параною?
OlezhkaЭто и правда и не правда одновременно. Если тебе нужна программа, выясняй сначала, кто её сделал. Потом, зная кто её сделал, ищи его сайт, человека там или компании. И скачивай потом только с этого сайта эту программу. Не качай через посредников, даже самых хороших.
Или я параною?
Отредактировано py.user.next (Дек. 21, 2022 23:01:22)
Офлайн
py.user.nextКруто! Спасибо за подробное разъяснение!
Когда имена модулей все наверху, мы знаем, что мы не можем использовать эти имена для названий каких-то там переменных или функций.
py.user.nextЧем достала? Троянами? Или кривыми патчами и обновами, после установки которых система начинает тормозить?
По всему миру Microsoft всех достала
py.user.nextНаверное, на “Яндексе” админы эту твою деятельность посчитали подозрительной… может даже подготовкой DDOS атаки сочли Или “нейросеть” их тебя забанила. Помню, я еще в “Алгоритме 2” когда работал, написал прогу, которая по тегам и маркерам в HTML-коде страниц искала картинки и их скачивала ко мне. Парсингом картинок занимался!.. И помню, что мне пришлось вводить задержку времени секунды 2 между скачками. А иначе мне соединение сервак обрывал, видать, из-за слишком частых запросов
Полдня там этот WebDAV настраивал подключал его
py.user.nextА я пользуюсь “Mediafire”.
Яндекс-диск
py.user.nextА я обычно, если какую-то прогу в чем-то подозреваю, прогоняю ее через “Procmon”. И потом долго ломаю глаза, выискивая среди тысяч строк, какие там она делала файловые операции, какие процессы дочерние запускала, чего с реестром творила, лезла ли куда-то в сеть… “Procmon” крутой! Он ВСЕ показывает! Или ты знаешь какой-нибудь монитор или отладчик еще круче? Но, сколько ни пользуюсь “Procmon”ом, меня всегда посещает мысль “Так ведь недобросовестная программа, которая должна делать на моем ПК что-то криминальное, она же элементарно может проверять сперва, висит ли ”Procmon“ в процессах. И если висит, то она затаится, ничего хулиганить пока не будет, а будет дожидаться, когда ”Procmon“ уйдет из процессов! ”
Если тебе нужна программа, выясняй сначала, кто её сделал
py.user.nextПомню, давным давно читал статью про резидентные и нерезидентные вирусы… Интересная тема! Но, в чем там между ними разница, давно уже забыл! Или так и не понял…
а в ней прошивка, которая начнёт действовать
Отредактировано Olezhka (Дек. 22, 2022 02:19:27)
Офлайн