Уведомления

Группа в Telegram: @pythonsu

#1 Март 6, 2016 05:09:03

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10003
Репутация: +  857  -
Профиль   Отправить e-mail  

Визуальное программирование на Python

Rodegast
А __init__ “для прикола” существует.
Там initUI(), а что такое UI? Это всё, что относится к внешнему виду. Но бывает и инициализация внутренних, приватных вещей. Те же таймеры (не касающиеся интерфейса) должны быть отдельно сделаны.

Rodegast
И за одно выполнить sys.exit(app.exec_())
Сегодня - есть, завтра - нет. А наличие main() - общая питоновская идиома. Когда main() нет, очень часто она внезапно становится нужна, а её нет.



Отредактировано py.user.next (Март 6, 2016 05:09:40)

Офлайн

#2 Март 6, 2016 13:40:50

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2832
Репутация: +  186  -
Профиль   Отправить e-mail  

Визуальное программирование на Python

> Там initUI(), а что такое UI? Это всё, что относится к внешнему виду. Но бывает и инициализация внутренних, приватных вещей. Те же таймеры (не касающиеся интерфейса) должны быть отдельно сделаны.

Я прекрасно знаю что такое UI. И как раз это UI должно быть в конструкторе, а не чёрт знает где.

> Сегодня - есть, завтра - нет. А наличие main() - общая питоновская идиома. Когда main() нет, очень часто она внезапно становится нужна, а её нет.

Вот это совсем не серьёзно. Что значит “Сегодня - есть, завтра - нет”? У точки входа sys.exit должен быть всегда, а импортировать точку входа будит разве что полный идиот.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#3 Март 7, 2016 04:35:18

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10003
Репутация: +  857  -
Профиль   Отправить e-mail  

Визуальное программирование на Python

Rodegast
Что значит “Сегодня - есть, завтра - нет”?
Можно написать несколько разных main() и вызывать их по выбору.

Rodegast
а импортировать точку входа будит разве что полный идиот.
Например, надо вызвать программу несколько раз. Что ты сделаешь? Ничего. Ты не можешь несколько раз вызывать.

Rodegast
И как раз это UI должно быть в конструкторе
А оно где? Ты просто не отличаешь класс от окна. Интерфейс окна никакого отношения к классу не имеет.

Rodegast
Я прекрасно знаю что такое UI.
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)

Офлайн

#4 Март 7, 2016 13:17:37

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2832
Репутация: +  186  -
Профиль   Отправить e-mail  

Визуальное программирование на Python

> Можно написать несколько разных main() и вызывать их по выбору.
Мы сейчас не обсуждаем то что можно, а чего нельзя. У него в примере только 1 main и как-бы всё.

> Например, надо вызвать программу несколько раз. Что ты сделаешь? Ничего.
Вот ты вроде адекватный человек, а какую-то фигню пишешь. Ты понимаешь что sys.exit делает? Видно не очень…
Если мне надо вызвать другую программу, то я конечно же буду использовать subprocess.

> А оно где?
Я бы сказал где, да народу много.

Дальше идёт бред который я даже комментировать не буду.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#5 Март 7, 2016 13:57:53

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10003
Репутация: +  857  -
Профиль   Отправить e-mail  

Визуальное программирование на Python

Rodegast
Мы сейчас не обсуждаем то что можно, а чего нельзя. У него в примере только 1 main и как-бы всё.
Ну, потому что так принято в питоне писать. Он просто питон знает.
Тебе-то что от того, что оно в main()'е? Ты же даже объяснить не можешь. Потому что читаешь всякую хрень вроде тех примеров недоделок.

Rodegast
Ты понимаешь что sys.exit делает?
А ты никак не можешь въехать, что его можно там не ставить или просто отключить.
Представь просто себе программу, которая запускается и предлагает приложение на выбор. Ты выбираешь - и она запускает определённое приложение. Но когда-то тебе надо и отдельно его запускать.

Rodegast
Дальше идёт бред который я даже комментировать не буду.
Ну, сложновато что-то противопоставить. Слишком плоско думаешь. Ты возьми, реальные программы какие-нибудь поделай, где надо не какие-то там учебные результаты получить, а выжать максимум. Тогда тебе всякий быдлокод не будет казаться хорошими примерами. Ты будешь просто видеть, что работает, а что - просто хрень собачья, выданная за профессиональную.



Офлайн

#6 Март 7, 2016 14:20:50

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2832
Репутация: +  186  -
Профиль   Отправить e-mail  

Визуальное программирование на Python

> Ну, потому что так принято в питоне писать. Он просто питон знает.
Ну хорошо… В таком случае покажи мне PEP в котором это написано.

> Представь просто себе программу, которая запускается и предлагает приложение на выбор….
subprocess



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#7 Март 7, 2016 14:32:35

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10003
Репутация: +  857  -
Профиль   Отправить e-mail  

Визуальное программирование на Python

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]$

Вот с последнего файла - Parser/asdl_c.py:
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 порождает отдельный процесс.



Офлайн

#8 Март 7, 2016 14:47:24

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2832
Репутация: +  186  -
Профиль   Отправить e-mail  

Визуальное программирование на Python

> Вот с исходников питона
Разве я про исходники говорил? Ты мне PEP покажи!

> Модуль subprocess порождает отдельный процесс.
И в чём проблема?



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#9 Март 7, 2016 14:55:00

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10003
Репутация: +  857  -
Профиль   Отправить e-mail  

Визуальное программирование на Python

Rodegast
И в чём проблема?
Ну, отдельный процесс занимает больше времени в работе. Вот у меня сканер есть, я его пробазировал на nmap'е, так он работает, как черепаха. Тот же ping, который там используется, очень много времени занимает. Потому что запуск процесса требует больше времени, чем выполнение чего-то в уже запущенном процессе.

Rodegast
Разве я про исходники говорил?
Ну, это же исходники от разработчиков питона. А пепы кто пишет?



Отредактировано py.user.next (Март 7, 2016 15:03:31)

Офлайн

#10 Март 7, 2016 15:26:32

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2832
Репутация: +  186  -
Профиль   Отправить e-mail  

Визуальное программирование на Python

> Ну, отдельный процесс занимает больше времени в работе.
Ну отдельная программа должна работать в отдельном процессе.

> Ну, это же исходники от разработчиков питона. А пепы кто пишет?
Мне всё равно как они функции называют. Пусть хоть МонаЛиза назовут, это их право/проблемы. Ты мне покажи PEP в котором написано что точку входа нужно импортировать.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version