@ru_python

Страница 5482 из 9768
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
Не эксперементировал

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, использующий кастомную мету. Создаешь класс, наследуешь от стракта. Пишешь внутрь структуру специальным образом. В зависимости от переданных туда данных, мета создает корректный парсер.

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
Нет, есть if-elif-else
может у py "if"'ы оптимизированы и просто не надо?

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

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

может у py "if"'ы оптимизированы и просто не надо?
Оптимизированы ленивым вычислением

В питоне просто нет нормальных инструментов для парса бинарки, пришлось извратиться.

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
Не, С без шаблонов нахрен пусть идет

Или ты так и делаешь?
MyStruct наследуется от базового Struct, в котором подцеплена мета

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
А что за сокеты такие?
Unixsocket Кароче для общения на одной машине через эдакий файл

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

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

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

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 ) нужно вывести логины скайпа

Страница 5482 из 9768