Форум сайта python.su
RodegastТам initUI(), а что такое UI? Это всё, что относится к внешнему виду. Но бывает и инициализация внутренних, приватных вещей. Те же таймеры (не касающиеся интерфейса) должны быть отдельно сделаны.
А __init__ “для прикола” существует.
RodegastСегодня - есть, завтра - нет. А наличие main() - общая питоновская идиома. Когда main() нет, очень часто она внезапно становится нужна, а её нет.
И за одно выполнить sys.exit(app.exec_())
Отредактировано py.user.next (Март 6, 2016 05:09:40)
Офлайн
> Там initUI(), а что такое UI? Это всё, что относится к внешнему виду. Но бывает и инициализация внутренних, приватных вещей. Те же таймеры (не касающиеся интерфейса) должны быть отдельно сделаны.
Я прекрасно знаю что такое UI. И как раз это UI должно быть в конструкторе, а не чёрт знает где.
> Сегодня - есть, завтра - нет. А наличие main() - общая питоновская идиома. Когда main() нет, очень часто она внезапно становится нужна, а её нет.
Вот это совсем не серьёзно. Что значит “Сегодня - есть, завтра - нет”? У точки входа sys.exit должен быть всегда, а импортировать точку входа будит разве что полный идиот.
Офлайн
RodegastМожно написать несколько разных main() и вызывать их по выбору.
Что значит “Сегодня - есть, завтра - нет”?
RodegastНапример, надо вызвать программу несколько раз. Что ты сделаешь? Ничего. Ты не можешь несколько раз вызывать.
а импортировать точку входа будит разве что полный идиот.
RodegastА оно где? Ты просто не отличаешь класс от окна. Интерфейс окна никакого отношения к классу не имеет.
И как раз это UI должно быть в конструкторе
RodegastUI относится только к виджету, в то время как класс может наследоваться как от виджета, так и от класса числа какого-нибудь.
Я прекрасно знаю что такое UI.
from PyQt4 import QtGui, QtCore import sys class Window(QtGui.QWidget): def __init__(self): super(Window, self).__init__() self.name = 'W' self.initUI() def initUI(self): self.setWindowTitle(self.name) self.label = QtGui.QLabel('x', self) self.show() class Number(QtCore.QObject): def __init__(self): self.number = 2 class NumberedWindow(Window, Number): def __init__(self): super(Window, self).__init__() super(Number, self).__init__() self.name = 'N' self.initNumber() self.name += str(self.number) self.initUI() def initUI(self): self.setWindowTitle(self.name) self.label = QtGui.QLabel(str(self.number), self) self.show() def initNumber(self): self.number *= 3 app = QtGui.QApplication([]) w = Window() nw = NumberedWindow() app.exec_()
Отредактировано py.user.next (Март 7, 2016 04:36:28)
Офлайн
> Можно написать несколько разных main() и вызывать их по выбору.
Мы сейчас не обсуждаем то что можно, а чего нельзя. У него в примере только 1 main и как-бы всё.
> Например, надо вызвать программу несколько раз. Что ты сделаешь? Ничего.
Вот ты вроде адекватный человек, а какую-то фигню пишешь. Ты понимаешь что sys.exit делает? Видно не очень…
Если мне надо вызвать другую программу, то я конечно же буду использовать subprocess.
> А оно где?
Я бы сказал где, да народу много.
Дальше идёт бред который я даже комментировать не буду.
Офлайн
RodegastНу, потому что так принято в питоне писать. Он просто питон знает.
Мы сейчас не обсуждаем то что можно, а чего нельзя. У него в примере только 1 main и как-бы всё.
RodegastА ты никак не можешь въехать, что его можно там не ставить или просто отключить.
Ты понимаешь что sys.exit делает?
RodegastНу, сложновато что-то противопоставить. Слишком плоско думаешь. Ты возьми, реальные программы какие-нибудь поделай, где надо не какие-то там учебные результаты получить, а выжать максимум. Тогда тебе всякий быдлокод не будет казаться хорошими примерами. Ты будешь просто видеть, что работает, а что - просто хрень собачья, выданная за профессиональную.
Дальше идёт бред который я даже комментировать не буду.
Офлайн
> Ну, потому что так принято в питоне писать. Он просто питон знает.
Ну хорошо… В таком случае покажи мне PEP в котором это написано.
> Представь просто себе программу, которая запускается и предлагает приложение на выбор….
subprocess
Офлайн
RodegastВот с исходников питона:
В таком случае покажи мне PEP в котором это написано.
[guest@localhost main]$ grep -r 'def main('
Tools/pynche/Main.py:def main():
Tools/unittestgui/unittestgui.py:def main(initialTestName=""):
Tools/demo/mcast.py:def main():
Tools/demo/redemo.py:def main():
Tools/demo/sortvisu.py:def main():
Tools/demo/rpythond.py:def main():
Tools/demo/life.py:def main(stdscr):
Tools/demo/hanoi.py:def main():
Tools/demo/rpython.py:def main():
Tools/demo/queens.py:def main():
Tools/scripts/md5sum.py:def main(args = sys.argv[1:], out=sys.stdout):
Tools/scripts/win_add2path.py:def main():
Tools/scripts/byteyears.py:def main():
Tools/scripts/rgrep.py:def main():
Tools/scripts/fixheader.py:def main():
Tools/scripts/cleanfuture.py:def main():
Tools/scripts/untabify.py:def main():
Tools/scripts/import_diagnostics.py:def main(args):
Tools/scripts/fixcid.py:def main():
Tools/scripts/checkpyc.py:def main():
Tools/scripts/mkreal.py:def main():
Tools/scripts/mailerdaemon.py:def main():
Tools/scripts/fixnotice.py:def main():
Tools/scripts/pdeps.py:def main():
Tools/scripts/fixdiv.py:def main():
Tools/scripts/dutree.py:def main():
Tools/scripts/find-uname.py:def main(args):
Tools/scripts/svneol.py:def main():
Tools/scripts/reindent-rst.py:def main(argv=sys.argv):
Tools/scripts/lll.py:def main():
Tools/scripts/finddiv.py:def main():
Tools/scripts/ndiff.py:def main(args):
Tools/scripts/pathfix.py:def main():
Tools/scripts/google.py:def main():
Tools/scripts/run_tests.py:def main(regrtest_args):
Tools/scripts/which.py:def main():
Tools/scripts/objgraph.py:def main():
Tools/scripts/nm2def.py:def main():
Tools/scripts/findlinksto.py:def main():
Tools/scripts/pickle2db.py:def main(args):
Tools/scripts/suff.py:def main():
Tools/scripts/lfcr.py:def main():
Tools/scripts/gprof2html.py:def main():
Tools/scripts/patchcheck.py:def main():
Tools/scripts/byext.py:def main():
Tools/scripts/ifdef.py:def main():
Tools/scripts/treesync.py:def main():
Tools/scripts/checkpip.py:def main():
Tools/scripts/fixps.py:def main():
Tools/scripts/h2py.py:def main():
Tools/scripts/crlf.py:def main():
Tools/scripts/diff.py:def main():
Tools/scripts/ptags.py:def main():
Tools/scripts/db2pickle.py:def main(args):
Tools/scripts/linktree.py:def main():
Tools/scripts/reindent.py:def main():
Tools/scripts/eptags.py:def main():
Tools/scripts/generate_opcode_h.py:def main(opcode_py, outfile='Include/opcode.h'):
Tools/scripts/copytime.py:def main():
Tools/i18n/pygettext.py:def main():
Tools/i18n/msgfmt.py:def main():
Tools/ccbench/ccbench.py:def main():
Tools/freeze/freeze.py:def main():
Tools/importbench/importbench.py:def main(import_, options):
Tools/iobench/iobench.py:def main():
Tools/ssl/test_multiple_versions.py:def main(*args):
Tools/stringbench/stringbench.py:def main():
Tools/clinic/clinic.py:def main(argv):
Tools/pybench/pybench.py: def main(self):
Tools/pybench/CommandLine.py: def main(self):
Tools/parser/unparse.py:def main(args):
Tools/msi/make_zip.py:def main():
Tools/msi/generate_md5.py:def main():
Tools/msi/csv_to_wxs.py:def main(file_source, install_target):
Двоичный файл Doc/build/doctrees/howto/logging.doctree совпадает
Двоичный файл Doc/build/doctrees/howto/curses.doctree совпадает
Двоичный файл Doc/build/doctrees/howto/logging-cookbook.doctree совпадает
Двоичный файл Doc/build/doctrees/faq/programming.doctree совпадает
Двоичный файл Doc/build/doctrees/library/concurrent.futures.doctree совпадает
Двоичный файл Doc/build/doctrees/library/venv.doctree совпадает
Двоичный файл Doc/build/doctrees/library/email-examples.doctree совпадает
Двоичный файл Doc/build/doctrees/library/pickle.doctree совпадает
Двоичный файл Doc/build/doctrees/library/difflib.doctree совпадает
Двоичный файл Doc/build/doctrees/library/optparse.doctree совпадает
Двоичный файл Doc/build/doctrees/library/getopt.doctree совпадает
Doc/build/html/_sources/howto/curses.txt: def main(stdscr):
Doc/build/html/_sources/howto/curses.txt: def main(stdscr):
Doc/build/html/_sources/howto/logging-cookbook.txt: def main():
Doc/build/html/_sources/howto/logging-cookbook.txt: def main():
Doc/build/html/_sources/howto/logging-cookbook.txt: def main():
Doc/build/html/_sources/howto/logging-cookbook.txt: def main():
Doc/build/html/_sources/howto/logging-cookbook.txt: def main():
Doc/build/html/_sources/howto/logging.txt: def main():
Doc/build/html/_sources/faq/programming.txt: def main():
Doc/build/html/_sources/library/getopt.txt: def main():
Doc/build/html/_sources/library/concurrent.futures.txt: def main():
Doc/build/html/_sources/library/venv.txt: def main(args=None):
Doc/build/html/_sources/library/difflib.txt: def main():
Doc/build/html/_sources/library/optparse.txt: def main():
Doc/build/html/library/venv.html:def main(args=None):
Doc/howto/logging-cookbook.rst: def main():
Doc/howto/logging-cookbook.rst: def main():
Doc/howto/logging-cookbook.rst: def main():
Doc/howto/logging-cookbook.rst: def main():
Doc/howto/logging-cookbook.rst: def main():
Doc/howto/logging-cookbook.rst: def main():
Doc/howto/logging-cookbook.rst: def main():
Doc/howto/curses.rst: def main(stdscr):
Doc/howto/curses.rst: def main(stdscr):
Doc/howto/logging.rst: def main():
Doc/tools/rstlint.py:def main(argv):
Doc/includes/email-dir.py:def main():
Doc/includes/email-unpack.py:def main():
Doc/includes/dbpickle.py:def main():
Doc/faq/programming.rst: def main():
Doc/library/concurrent.futures.rst: def main():
Doc/library/optparse.rst: def main():
Doc/library/getopt.rst: def main():
Doc/library/venv.rst: def main(args=None):
Двоичный файл .git/objects/pack/pack-804212d4f89e753b4ef0bc07fdd2f19f6490ec29.pack совпадает
setup.py:def main():
Mac/Tools/plistlib_generate_testdata.py:def main():
Mac/Extras.install.py:def main():
Mac/BuildScript/build-installer.py:def main():
Lib/idlelib/PyShell.py:def main():
Lib/idlelib/run.py:def main(del_exitfunc=False):
Lib/timeit.py:def main(args=None, *, _wrap_timer=None):
Lib/profile.py:def main():
Lib/base64.py:def main():
Lib/quopri.py:def main():
Lib/tarfile.py:def main():
Lib/py_compile.py:def main(args=None):
Lib/venv/__init__.py:def main(args=None):
Lib/compileall.py:def main():
Lib/pdb.py:def main():
Lib/keyword.py:def main():
Lib/zipfile.py:def main(args = None):
Lib/json/tool.py:def main():
Lib/tokenize.py:def main():
Lib/lib2to3/pgen2/driver.py:def main(*args):
Lib/lib2to3/main.py:def main(fixer_pkg, args=None):
Lib/lib2to3/tests/pytree_idempotency.py:def main():
Lib/tabnanny.py:def main():
Lib/site.py:def main():
Lib/test/pystone.py:def main(loops=LOOPS):
Lib/test/test_cprofile.py:def main():
Lib/test/test_profile.py:def main():
Lib/test/reperf.py:def main():
Lib/test/test_coroutines.py: async def main():
Lib/test/test_coroutines.py: async def main():
Lib/test/test_coroutines.py: async def main():
Lib/test/libregrtest/main.py: def main(self, tests=None, **kwargs):
Lib/test/libregrtest/main.py:def main(tests=None, **kwargs):
Lib/test/test_ast.py:def main():
Lib/test/test_threading.py: def main():
Lib/test/curses_tests.py:def main(stdscr):
Lib/test/sortperf.py:def main():
Lib/test/test_asyncio/test_events.py: def main():
Lib/turtledemo/round_dance.py:def main():
Lib/turtledemo/clock.py:def main():
Lib/turtledemo/sorting_animate.py:def main():
Lib/turtledemo/chaos.py:def main():
Lib/turtledemo/nim.py:def main():
Lib/turtledemo/wikipedia.py:def main():
Lib/turtledemo/planet_and_moon.py:def main():
Lib/turtledemo/bytedesign.py:def main():
Lib/turtledemo/penrose.py:def main():
Lib/turtledemo/peace.py:def main():
Lib/turtledemo/lindenmayer.py:def main():
Lib/turtledemo/paint.py:def main():
Lib/turtledemo/forest.py:def main():
Lib/turtledemo/minimal_hanoi.py:def main():
Lib/turtledemo/__main__.py:def main():
Lib/turtledemo/colormixer.py:def main():
Lib/turtledemo/tree.py:def main():
Lib/turtledemo/fractalcurves.py:def main():
Lib/turtledemo/two_canvases.py:def main():
Lib/turtledemo/yinyang.py:def main():
Lib/zipapp.py:def main(args=None):
Lib/cProfile.py:def main():
Lib/multiprocessing/semaphore_tracker.py:def main(fd):
Lib/multiprocessing/forkserver.py:def main(listener_fd, alive_r, preload, main_path=None, sys_path=None):
Lib/trace.py:def main():
Lib/calendar.py:def main(args):
Lib/distutils/tests/test_install.py: self.write_file('hello.py', "def main(): print('o hai')")
Lib/webbrowser.py:def main():
PCbuild/prepare_ssl.py:def main():
Parser/asdl_c.py:def main(srcfile, dump_module=False):
[guest@localhost main]$
def main(srcfile, dump_module=False): argv0 = sys.argv[0] components = argv0.split(os.sep) argv0 = os.sep.join(components[-2:]) auto_gen_msg = common_msg % argv0 mod = asdl.parse(srcfile) if dump_module: print('Parsed Module:') print(mod) if not asdl.check(mod): sys.exit(1) if INC_DIR: p = "%s/%s-ast.h" % (INC_DIR, mod.name) f = open(p, "w") f.write(auto_gen_msg) f.write('#include "asdl.h"\n\n') c = ChainOfVisitors(TypeDefVisitor(f), StructVisitor(f), PrototypeVisitor(f), ) c.visit(mod) f.write("PyObject* PyAST_mod2obj(mod_ty t);\n") f.write("mod_ty PyAST_obj2mod(PyObject* ast, PyArena* arena, int mode);\n") f.write("int PyAST_Check(PyObject* obj);\n") f.close() if SRC_DIR: p = os.path.join(SRC_DIR, str(mod.name) + "-ast.c") f = open(p, "w") f.write(auto_gen_msg) f.write('#include <stddef.h>\n') f.write('\n') f.write('#include "Python.h"\n') f.write('#include "%s-ast.h"\n' % mod.name) f.write('\n') f.write("static PyTypeObject AST_type;\n") v = ChainOfVisitors( PyTypesDeclareVisitor(f), PyTypesVisitor(f), Obj2ModPrototypeVisitor(f), FunctionVisitor(f), ObjVisitor(f), Obj2ModVisitor(f), ASTModuleVisitor(f), PartingShots(f), ) v.visit(mod) f.close() if __name__ == "__main__": import getopt INC_DIR = '' SRC_DIR = '' dump_module = False opts, args = getopt.getopt(sys.argv[1:], "dh:c:") for o, v in opts: if o == '-h': INC_DIR = v if o == '-c': SRC_DIR = v if o == '-d': dump_module = True if INC_DIR and SRC_DIR: print('Must specify exactly one output file') sys.exit(1) elif len(args) != 1: print('Must specify single input file') sys.exit(1) main(args[0], dump_module)
RodegastМодуль subprocess порождает отдельный процесс.
subprocess
Офлайн
> Вот с исходников питона
Разве я про исходники говорил? Ты мне PEP покажи!
> Модуль subprocess порождает отдельный процесс.
И в чём проблема?
Офлайн
RodegastНу, отдельный процесс занимает больше времени в работе. Вот у меня сканер есть, я его пробазировал на nmap'е, так он работает, как черепаха. Тот же ping, который там используется, очень много времени занимает. Потому что запуск процесса требует больше времени, чем выполнение чего-то в уже запущенном процессе.
И в чём проблема?
RodegastНу, это же исходники от разработчиков питона. А пепы кто пишет?
Разве я про исходники говорил?
Отредактировано py.user.next (Март 7, 2016 15:03:31)
Офлайн
> Ну, отдельный процесс занимает больше времени в работе.
Ну отдельная программа должна работать в отдельном процессе.
> Ну, это же исходники от разработчиков питона. А пепы кто пишет?
Мне всё равно как они функции называют. Пусть хоть МонаЛиза назовут, это их право/проблемы. Ты мне покажи PEP в котором написано что точку входа нужно импортировать.
Офлайн