
BlackAndOrange
12.05.2018
06:05:57
Да вы заебали со своим Лутцем
Как можно растянуть столько материала на чёртову тысячу страниц с лишним?
Как справочник хорош, но как учебник пока прочитаешь до конца питон устареет компьютер устареет программирование устареет наступит конец света а ты только на середине

Sergei
12.05.2018
06:08:11
Мне так понятнее, тк я далеко не технарь и мне надо простым языком по началу было.

wi34rd
12.05.2018
06:08:12
один говорит, что Лутца можно прочитать за 3 часа, другой что и жизни не хватит...

Sergei
12.05.2018
06:08:33
Можно прочитать

Google

Sergei
12.05.2018
06:08:48
Предисловие про питон можно выкинуть

Aragaer
12.05.2018
06:08:58
lpthw надо, там вот совсем все просто. А после него на 3-й питон перескочить уже несложно

BlackAndOrange
12.05.2018
06:09:35
Примерно 1000 страниц
Это 5 страниц в минуту, 12 секунд на страницу
Можно, если при этом вообще за компом не экспериментировать

Sergei
12.05.2018
06:10:14
Не эксперементировал

so1n [14]
12.05.2018
06:10:18

Sergei
12.05.2018
06:10:24
Читаешь - потом эксперементируешь
Часть с метаклассами оставляешь на завтра

BlackAndOrange
12.05.2018
06:10:47
Вообще необходимость в справочных пособиях по питону сомнительна
docs.python.org

Sergei
12.05.2018
06:11:33
Хз, постоянно их использую

wi34rd
12.05.2018
06:11:35
холивары на тему как стоит учиться программировать, они божественны

BlackAndOrange
12.05.2018
06:12:10

wi34rd
12.05.2018
06:14:34
открой Бизли, открой любой рецепт, попробуй найти это решение в официальной доке пайтона

Google

Sergei
12.05.2018
06:14:51
Ну например у меня есть бинарный парсер на метах. Есть класс Struct, использующий кастомную мету. Создаешь класс, наследуешь от стракта. Пишешь внутрь структуру специальным образом. В зависимости от переданных туда данных, мета создает корректный парсер.

BlackAndOrange
12.05.2018
06:17:39

Sh-nya
12.05.2018
06:18:17
под python есть какой нибудь switch, чтоб не "if"?

Sergei
12.05.2018
06:18:17
Это так не будет работать
Ты вообще не так понял

BlackAndOrange
12.05.2018
06:18:31
А, всё, я кажется понял тебя.
При создании класса, наследованного от Struct, он регистрируется в парсере и потом парсер умеет его использовать?

Sh-nya
12.05.2018
06:19:43

BlackAndOrange
12.05.2018
06:21:00
может у py "if"'ы оптимизированы и просто не надо?
Не думай про оптимизацию базовых операций в python. Можно, конечно, залезть в код и выяснить оптимизируются там они в таблицу переходов или нет, но в целом ты уже потерял в производительности в 1000 раз и разница между ветвлениями и таблицей переходов для тебя не очень большая.

Sergei
12.05.2018
06:21:08
Ну типо того. Я там реализовал кастрированный аналог С++ темплейтов. Т.е. при помощи меты создается прототип, который может генерить обьекты определенным образом с определенным набором методов
В питоне просто нет нормальных инструментов для парса бинарки, пришлось извратиться.

Aragaer
12.05.2018
06:23:02
ну ващет switch можно делать через словари
но я предпочитаю парсить бинарные файлы на теплом ламповом си

BlackAndOrange
12.05.2018
06:23:32
Прикольно. Окей, да, согласен, здесь метаклассы полезны.
Хотя по хорошему стоит делать как-нибудь так, не?
parser = Parser()
class MyStruct(metaclass=parser.StructBase):
... # smth
Чтобы можно было при этом создавать несколько парсеров
Или ты так и делаешь?

Sergei
12.05.2018
06:23:48
Не, С без шаблонов нахрен пусть идет

BlackAndOrange
12.05.2018
06:25:13
Я про то, что базовый Struct имеет смысл создавать отдельно для каждого экземпляра Parser
Чтобы иметь возможнлость сделать несколько непересекающихся парсеров

Google

Sergei
12.05.2018
06:28:02
Не. Класса парсер вообще нет. Вся логика парсинга лежит в классе стракт. Суть меты в том, чтобы как бы «скомпилировать» структуру из входных данных. Как результат любой класс, наследованный от стракта превращается в независимый парсер определенный структуры.
Хотя Зарт из другого чата мою реализацию засрал. Говорит можно как-то на дескрипторах это написать, но ни разу не сказал как именно

BlackAndOrange
12.05.2018
06:29:52
И в одном "файле" или что у тебя там на входе записана только одна структура и ты делаешь что-то вроде
my_struct.parse(file)
?

Sergei
12.05.2018
06:30:15
Да
Или .write
Мета еще организует опционально __slots__ для класса

BlackAndOrange
12.05.2018
06:31:53
А зачем тебе тогда вообще метакласс?
class MyStruct(Struct):
def __init__(self, *args, **kwargs):
... # здесь делаешь любые подготовительные действия
super().__init__(*args, **kwargs) # здесь делаешь любую "компиляцию" структуры, __slots__, whatever

Sergei
12.05.2018
06:34:13
Ну во-первых слоты при генерации именно класса задаются, объекту на ините их дать нельзя. Во-вторых, это будет обозначать необходимость делать повтор реализации методов для каждого стракта. Для создания стракта мне сейчас нужно лишь отнаследоваться, описать в ней структуру и все.
Мне не нужно писать никаких методов вообще

BlackAndOrange
12.05.2018
06:34:47
Да нет, методы ты реализуешь в базовом классе Struct, они переходят в MyStruct при наследовании

Sergei
12.05.2018
06:35:03
Да
Но мне не надо писать никаких инитов

Sergei
12.05.2018
06:35:24
И вызывать там инит от супера

BlackAndOrange
12.05.2018
06:35:43
Окей, не пиши. Ты можешь задать стандартный инит в базовом классе Struct и он будет вызван автоматически, так как в MyStruct инит не определён

Sergei
12.05.2018
06:36:02
А как я структуру передам?
Именно укажу как именно создавать парсер
В смысле структуру бинарки

BlackAndOrange
12.05.2018
06:38:03
Я бы делал так:
class MyStruct(Struct):
first_field = Field(bits=123, type=int)
second_field = Field(bits=321, type=str)
fields = [first_field, first_field, second_field]

Sergei
12.05.2018
06:38:48
Громоздко

BlackAndOrange
12.05.2018
06:39:13
Норм, ORM так же выглядят.
Но окей, вот на этом этапе я уже согласен, что нужен метакласс чтобы извлечь названия полей.

Google

Sergei
12.05.2018
06:39:18
У меня синтаксис лучше получается
Я сейчас правда написать не могу, с телефона

Denis
12.05.2018
07:17:16
https://pastebin.com/GqpWP3KS
если forprint[10] пуст - происходит ошибка, как не выводить кнопку если forprint[10] пуст?

Ioann
12.05.2018
07:18:20
выучить питон?
и не тратить время спрашивая в чатах очевидные вещи

Stanislav
12.05.2018
07:19:07
Рили, примитивная логика
А ты несёшь это в чат для профессионалов

Admin
ERROR: S client not available

Vladislav
12.05.2018
07:19:22
Слишком сложно

Denis
12.05.2018
07:23:41
как проверить forprint[10] на существование, но что бы не крашился питон?)

some_random_anonymous
12.05.2018
07:24:53
В бегиннерсах спросить

Vaderoff
12.05.2018
07:34:57

Stanislav
12.05.2018
07:37:21
Так например nginx и uwsgi общаются (так лучше всего настраивать)

Vaderoff
12.05.2018
07:38:59

Sergey
12.05.2018
07:45:07

Stanislav
12.05.2018
08:03:54

Проксимов
12.05.2018
09:08:40
Точно выучишь питон

Google

Evil
12.05.2018
09:10:58
Лутц нудный и тягомотный, но это лучшее про питон вообще как для новичков так и для уже работающих

wi34rd
12.05.2018
09:13:57
подустарел ток

Mark
12.05.2018
09:14:10

X
12.05.2018
09:14:11
Бизли

wi34rd
12.05.2018
09:15:21
Кнут академичный

Evil
12.05.2018
09:17:12

Joss
12.05.2018
09:18:50
В смысле, не согласен, что это лучшее
Вот это есть у Лутца?
Я не нашел.

wi34rd
12.05.2018
09:19:53
а зачем?
и откуда это?

Joss
12.05.2018
09:20:24
Ну, это так же, как спросить у Qt-шника, зачем ему знать, что все классы идут от QObject
Вопрос тогда - зачем писать 1200 страниц?

wi34rd
12.05.2018
09:21:20
больше вообще-то

Denis
12.05.2018
09:21:36
https://pastebin.com/TQP8a8yq гляньте BeautifulSoup ) нужно вывести логины скайпа