Это копия, сохраненная 9 февраля 2016 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Прошлый: >>626701 (OP)
2.x или 3.x: http://legacy.python.org/dev/peps/pep-0373/
Остальным слоупокам, если таковые кроме меня ещё тут есть рекомендую: http://www.rafekettler.com/magicmethods.html
Названия тоже к месту лепить надо. Так и конструктор магией назвать можно, и ООП, и даже Аллаха.
Я уже сделал 2 раза.
Я не он, но ты прав. Но щито поделать, если ничего не нравится, и надо как то зарабатывать себе на существование? В детстве в меня заложили неверные приоритеты, и теперь вместо того чтобы идти к успеху, мне милее сидение на диване как бивис и батхед, или тупое валяние дурака, как в других сортирных комедиях 90 - 00-х гг.
Освой рабочую специальность. Сварщик, электрик. Или там водителем стань.
Или на север езжай вахтовым методом работать.
Ты - это я. С утра нагенерил идей для стартапов, весень день прокрастинировал, вечером - пикрилейтед.
А это тяжело и рутинно. Кто ж захочет имея полное образование погромиста внезапно менять профу на рабочую, да притом тяжелую? Я распиздяй, но не идиот.
Работа быдлокодера тоже рунитта. И если кодить не нравится это вообще ад и стресс жуткий.
Это не ты та местная истеричка, который боится, что ньюфаги отнимут его доширак?
> капчевание
хуй там. за капчевание не платят. скорее всего тебя ждет работа в потогонной конторе какой-нить где надо на потоке кучу проектов делать и на тебя пять менеджеров орет.
Такая работа ждет нормальных кодеров. А быдлокодер только будет сидеть и капчевать 5/7. На любой работе. Я побывал на разных и везде капчевал 90% (в среднем) рабочего времени в среднем, и получал за это заслуженную минимальную зп.
Не бойся на счет нюфань. Если кто то и будет способен отнять твой дошик, это так или иначе случится. А если не плющит человека быть погромистом, то даже если на каждом столбе будут висеть объявы про бесплатные курсы "стань сеньором помидором за 2 недели", он все равно не пойдет на них.
И эникеил, и погромировал, но все как то через жопу. У меня есть огромная простыня с моим "рабочим опытом" тут в одном треде, если интересно, могу поискать.
Да я не боюсь ничего. Просто со мной в конторе брали иногда джунов полных нубов которые очень просились из жалости. Готовы были им помогать, объяснять если че. И почему-то всегда они просто сидели и тупили. Или просто втыкали в код безрезультативно или капчевали. В итоге их просто увольняли и драма была.
Не интересно, потому что у меня так же. Опыт какой-то есть, но для достойного резюме он не годится.
>>631635
Я где-то слышал высказывание, которое мне понравилось: стань лучшим в любой области где ты хорош. А если я люблю задумчиво вдыхать амбре своих яиц, которые не подмывал 3 дня, как в этой области стать лучшим?
Все правильно делали. Рано или поздно такие отсеиваются. Если конечно у вас не гос контора, которая существует как качалка денег из бюджета, а работники в ней только для прикрытия.
Нет, как раз нормальный кодер может подыскать себе непыльную работенку, где позволить капчевать, а в 20% оставшегося времени быстро всё сделает.
Потогонная система во всяких веб студиях и аутсорсах там дофига проектов и везде что-то делать надо. И каждый день-два что-то надо сдавать какой-то результат. Аналогично если какой-то скрам внедрен.
Ну а нахрен вообще мучиться если это "не твоё". И сами страдают и коллектив как бы подводят.
Можно в техподдержку пойти или там эникеем или даже админом. Или тестером.
А известно ли нормальному кодеру, что на работенках где можно капчевать и делать все по быстрому и платят копейки? Серьезно копейки. Не больше 20-30к. Нормальный кодер не пойдет на такое, ящитаю.
>>631648
Лично за себя скажу, что кодинг > админство. В детали углубляться не буду, но мне вот так легче. Ну и временами на меня все же находит желание что нибудь пописать и почитать. По работе вообще ничего не задают.
> на работенках где можно капчевать и делать все по быстрому и платят копейки? Серьезно копейки. Не больше 20-30к.
У меня всё наоборот. Я работа в типа веб студии и там было дохуя работы. Простой но дохуя и дергали всё время. Платили мало как раз типа 20, потом 30к.
Потом я работал в конторе, напрямую не связанной с программированием. Надо было их сайт и онлайн проект развивать. Там можно было делать мало, а платили в 2 раза больше.
Потом я работал в конторе где был один большой проект, госзаказ так скажем. Там тоже спешить особо не надо было, платили ещё больше и были ещё и перспективы роста до соточки если бы там дольше проработал.
Потом я работал над проектом где типа скрам и каждые 2 дня выкатывали новую задачу. Платили соточку но работой загружали неплохо, зато удаленно.
Сап, гайз, нашел годные книжкм по full-stack python'у, как ее получить БЕСПЛАТНО, ЕВПОЧЯ?
https://gumroad.com/l/WOvyt
Ты описал такие должности и уровень, до которого быдлокодерам как до китая пешком. И не надо ахуительных историй, что ты просто пришел, ничего не знал и там всему научился Надо различать ещё нормальные непыльные работенки и такие работы, где от кодера нужен только диплом из шараги. В первые не попадут распиздяи, а нормокодеры не пойдут в последние.
Предлагаю завершить нашу беседу, пока не потерли весь офтоп
Смузиблядок не палится.
Вилка есть?
Не получается привязать один метод из родительского окна к нескольким кнопкам, но находящимся в разных виджетах через
self.connect(self.button, QtCore.SIGNAL('clicked()'), parent.func)
Начинает выдавать
AttributeError: 'NoneType' object has no attribute 'func'
При привязке к одной кнопке все работает.
Разделять на несколько отдельных методов для каждого виджета не хотелось бы, ведь они делают практически одно и то же.
И туда же. Можно ли передавать аргумент методу в этих привязках?
А что такое parent? Объект этот существует? Почему он nonetype?
> Можно ли передавать аргумент методу в этих привязках?
Через functools.partial?
Parent - атрибут, содержащий ссылку на родительский виджет.
Уже разобрался. Я не передал self при создании новых окон. А аргумент parent в __init__ виджетов был None, по умолчанию.
Кстати двачую
Да я тоже ща глянул на доку мельком и вспомнил почему мне оно не нравилось. pygtk/pygi намного приятней.
>functools.partial
Может, лучше
lambda arg=argument: parent.startfunc(arg)?
Встречаются еще советы применить QSignalMapper, но писать с этим всем куда больше.
например, как так вышло, что функция может возвращать несколько значений и как это сделать, и всё в этом духе. (может, на самом деле это тоже не менее очевидно, чем фор, но я имею в виду чтобы объяснялось что-то, чуточку более, хз, практическое что ли.) тока не говорите про документацию, охота чтоб прям пиздец сжато и тематически было.
Может ты и в школе из первого класса сразу в выпускной перешел?
Спасибо, анончик
> функция может возвращать несколько значений
Это как? Ты про генераторы?
Или про возвращение tuple? Последнее это как бы одно значение.
Все-таки, охуенная штука, lambda. Я только что обошел ебучий многострочный велосипед с ее помощью, похоже.
И вообще плохо сделали, тупа, не могли прикрутить кортеж с аргументами для слота.
Да, обычно в других тулкитах и прочих библиотеках где можно вешать какие-то события, такая возможность есть.
> функция может возвращать несколько значений и как это сделать
Ты про такую фигню для умственно отсталых что ли?
def zaebis_func(x):
y = x*2
z = x+2
return y,z
Охуенно. Я уже его поклонник. Следующее свое говно склепаю на нем.
>>631750
Ну чтобы вместо
self.connect(self.button, QtCore.SIGNAL('clicked()'), lambda arg=argument: parent.startfunc(arg))
цивилизованно и чисто передать аргумент в чем-то вроде
self.connect(self.button, QtCore.SIGNAL('clicked()'), parent.startfunc, (argument)
как белый человек, а не ебаный пердолик. Тем более, что слот это просто метод, и подразумевается, что он может быть простой функцией.
Разница в унификации и чётком разделении функций.
в qt5:
button.clicked.connect(functools.partial(yoba, "foo", "bar", baz="baz"))
https://www.youtube.com/watch?v=wCJ5kiSmvUY&list=PLQ176FUIyIUZ1mwB-uImQE-gmkwzjNLjP
О спасибо. А то нихрена не знаю сочетания клавиш там и фишки.
Я признаться чуть в ахуе как оно у него без лагов работает.
Ясен пень у меня комп динозавр-кор2дуо2ггц-8гб и хубунта сверху, но блядь неужели дело только в компе, а не жавахуете на которой на кой-то хуй всё подряд сейчас пишут?
Ну у меня оно термимо тормозит(i5, 8гб ноут)
Вообще для питона ide не очень то и нужна. Разве что когда очень большой и незнакомый проект.
> подразумевает, что в природе существует язык/платформа быстрее джявы, кроме компилируемых в натив
Жава говно для педиков, уже больше 10 лет сколько раз сталкиваюсь, столько и думаю об этом. Искренне желаю ведроиду перейти целиком на пидерастичное гоу, свифт, хоть сраный обжект си
Не так давно ещё люди жаловались что емакс много оперативки жрет и целых 30 мегабайт на диске.
А еще запускается долго. Приходится демон держать и коннектиться через emacsclient
Конкретнее говоря, нужно создать виджет, и на нем отобразить данные, которые создаются от 2-30 секунд.
При этом, во время этого ожидания виджет должен быть уже создан и активен, чтобы была возможность потыкать кнопочки, например.
Если запускать метод из __ini__ class CustomWidget - все зависает на кучку секунд, и потом виджет создается с уже готовыми данными. Так и должно быть.
Казалось бы, нужно сначала создать виджет, и после вызвать этот метод извне.
Но вызов метода из родительского окна, после setCentralWidget(CustomWidget(self))
дает тот же эффект.
Чем жява отличается от пифона в этом плане? И там и там виртуальная машина.
В java jit. Настоящий и очень продвинутый.
И она не динамическая и со строгой типизацией и прочим.
Программу на жабе можно определить не смотря на сорцы, просто по всратому внешнему виду, прожорливости и тормозам.
> она не динамическая и со строгой типизацией и прочим
Это не имеет отношения к виртуальной машине. Есть clojure, например.
Хочу написать ОРМ на питончике (для диплома). В общем, головой понимаю, что должно быть и как надо сделать, но целостности картины нет. Подскажите какой-нибудь гайд или книгу, где эта хуебень разбирается.
У тебя там фабрика по производству фабрик по производству урины? Иди сделай еще десяток, жабадаун.
Официальную документацию. Серьёзно.
Кроме того не хотелось бы ради того, что я через threading.Thread могу сделать в одну строчку, через QTread делать чуть ли не на целый модуль.
Вроде Qt с 4й версии есть в open-sourse версии. Для некоммерческого использования уж точно. Смотри ниже 30-дневной коммерческой на сайте
>пок-пок синтетические бенчмарки
А теперь сходи и посмотри как пишут жавагоспода в реальности
Ну, это цена за динамичность и выразительность. Не бывает серебрянной пули.
Блокируешь же гуи тред. Тебе надо создать этот виджет изначально пустым, потом через сигналы и слоты собственно отправлять/получать данные из отдельного треда и уже заполнять свой виджет.
Problem Solving with Algorithms and Data Structures
Не гарантирую что то что ты ищешь гарантированно в этой книге(не читал ещё), но полистай, её очень хвалят да и по смыслу вроде подходит
En http://interactivepython.org/courselib/static/pythonds/index.html
Ru http://aliev.me/runestone/
Счастья тебе.
хуйта, реализующая у себя в интерфейсе меджики, ведет себя подобно встроенным типам как перегрузка операторов в крестах, только шире
Тебе надо реализовать какой-нить паттерн типа
https://en.wikipedia.org/wiki/Active_record_pattern
https://en.wikipedia.org/wiki/Data_mapper_pattern
Вообще оче интересная задача. Я когда-то фор фан написал пару орм.
qt для опенсоурс проектов всегда был бесплатный.
В реальности на java пишут очень сложные гиганстские проекты которые на чем угодно будет тормозить.
В том же pycharm куча анализаторов кода, эвристик всяких. Если их отключить - всё будет летать.
По номеру
Боттл
По print()
Эт да))
шо це таке
Dependency Injection не имеет смысла в питоне.
Точнее, не имеет смысла выделять это как какую-то особую технику. Динамика же + условные импорты, например, что ещё тебе надо?
Для самого начала норм. Лучше, правда pdf навернуть. Бумажный вариант неудобный, бумага говно и столько денег не стоит.
>DI
>monkey patching
Чёт ты перепутал тёплое с твёрдым. DI это прежде всего отказ от инстанцирования зависимостей внутри класса. Зависимости просто приходят в конструктор, тем самым позволяя легко их подменять, в том числе на мок-объекты для тестов.
Манки патчинг, несмотря на негативное восприятие большинством этого термина, не является чем-то особенно плохим. Конечно строить ОРХЕТЕКТУРЫ на нём нельзя, но пофиксить какую-нибудь библиотеку изредка таки можно.
Пишем без DI, в тесте мокируем зависимость манки-патчингом, profit - DI вроде как и не нужен. В этом смысле.
Я больше не для себя даже, а сколько для мамы. Что-то фундаментальное на 1000-2000 страниц ей точно не подошло бы. Хотя думал и сам прочесть, так как недавно щупал питон и мне он понравился.
6 Jan @ 4:03pm
8 Jan @ 2:17pm
9 Dec @ 4:00am
9 Dec @ 5:14pm
9 Dec @ 5:28am
10 Jan @ 2:55pm
10 Jan @ 4:21am
10 Jan @ 7:14pm
12 Dec @ 7:48pm
12 Dec @ 7:50pm
12 Jan @ 3:32pm
13 Dec @ 3:43pm
13 Dec @ 5:02am
13 Dec @ 5:24am
14 Jan @ 5:17pm
15 Jan @ 5:29am
21 Dec @ 3:56pm
21 Dec @ 9:40am
Ты ты их перегоди в даты, отсортируй и потом можешь обратно в текст перегнать если надо.
А есть какой-то ликбез-подборка в формате киндлоблядей? Пдф без текста в исходнике читать невозможно.
Поставил фласк и буквально спустя 3 минуты первого попавшегося туториала врубился как оно всё в нём работает и тд.
Жаль что для фласка нет автогенерируемой админки из коробки и прелестей автоматического "ну а в бд-из бд оно как-нибудь само", но это мелочи на фоне того что блядь всё остальное ОЧЕНЬ ПРОСТО
Нигде такого не видел.
Да может и ничего, но "с наскока" зайти не удалось, а читать на иноземной мове 2 scoops of django мне было очень лень, при чём мову-то я на болтательном уровне знаю, но забивать голову и переводами, и самой джангой выше моих сил.
А тут пиздык-пиздык вьюз.пу всем рулит и педалит безо всякого говна, хочешь - модели припиздячьивай, хочешь - хуй забей, вариантов масса
и да я разумеется понимаю что это не только самый большой плюс, но и самый большой минус
>при чём мову-то я на болтательном уровне знаю, но забивать голову и переводами, и самой джангой выше моих сил.
Опять охуительные истории.
У тебя такого не бывает? Тебе похуй на каком языке читать, оба нагружают башню одинаково? Молодец, хули, завидую тебе!
Собстивенно в django тебе тоже только urls.py и views.py нужны, остальное не обязательно. Да и вьюхи ты можешь в самом urls.py задать если очень хочется, тогда и views.py не нужен.
Мне проще на английском техническую хуйню читать. Потому что при переводе надмозги часто неправильно переводят и гадаешь что там в оригинале имелось ввиду.
>>632682
Платиновые отмазки знающих мову, по две рандомных отмазки на тред:
Мову то я знаю, но на родном читать приятней
Мову то я знаю, но боюсь ошибиться в терминах
Мову то я знаю, но боюсь неправильно понять
Мову то я знаю, но лень переучивать термины
Мову то я знаю, но я патриот и читаю только на русском
Мову то я знаю, но я уже начал на русском и будет путаница
Мову то я знаю, но учить питон и доучивать мовву одновременно - сложно
Мову то я знаю, но я устал
Мову то я знаю, но не хочу забивать голову
Мову то я знаю, но мне лень напрягать башню
Мову то я знаю, но ...
Может и так, но в совокупности оно всё равно ебануто получается.
Всё джанго держится на каких-нибудь тайных атрибутах классов, из которых построено, и в итоге тебе постоянно надо лепить хуйню типа "хочешь в админке картинки к ImageField? - ПРОСТО БЕЗ ЗАДНЕЙ МЫСЛИ ДОПИШИ ВОЛШЕБНУЮ ПЕРЕМЕННУЮ ImageField.listview= True В КЛАСС и всё нахуй чудом станет как и задумывалось.
А хоть где брать список волшебных переменных инб4 сорцы - хуй знает.
>>632691
Блядь, ну очевидно же что ни по питону, ни по фреймворкам инфы на русском недостаточно и один хуй приходится читать на мове. Анальную клоунаду разводить тут удумал, ишь какой.
Энивей, я свято и не безосновательно (вкатился же) верю что во Фласк вкатиться проще чем в Джангу.
Скорее всего Фласком я не ограничусь, и спустя какое-то время снова попоробую ворваться и в Джангу тоже, но пока мне и фласка "за глаза".
А какую ты orm использовать будешь? Потому что обычно берут алхимию а она сильно сложнее джанговской.
Формы? wtforms какие-нить? Там магии хватает тоже.
Благодарю.
А как эта ссылка помогает сделать выбор? Разве что...
> Possible features for 2.7
> Nothing here. [Note that a moratorium on core language changes is in effect.]
Стабильность
>The End Of Life date (EOL, sunset date) for Python 2.7 has been moved five years into the future, to 2020.
>Being the last of the 2.x series, 2.7 will have an extended period of maintenance. The current plan is to support it for at least 10 years from the initial 2.7 release. This means there will be bugfix releases until 2020.
Жди прихода.
self.connect(self.button, QtCore.SIGNAL('clicked()'), partial(self.func, self.arg)
Я так понимаю, значение self.arg берется в момент создания привязки и больше не меняется?
Как исхитриться и брать актуальное значение, ведь self.arg меняется?
> Я так понимаю, значение self.arg берется в момент создания привязки и больше не меняется?
Да
> Как исхитриться и брать актуальное значение, ведь self.arg меняется?
Передавать туда self, а уже внутри self.func читать self.arg. А учитывая, что это self.func там self уже есть, так что partial не нужен
Ты охуенен. Можешь посоветовать что почитать, чтобы понять, как работает то, что ты написал?
Документацию к питону читай. Там все это есть.
Лучше же generator expression использовать вместо мапа т.к. мап медленнее с лямбдой.
мимо пифонер без стажа
Все, посоны, разобрался. Сделал абстрактную модель, куда запихал все общие поля и методы, и унаследовался дважды от неё.
спс
Да, что-то вроде этого, 'автоматическое'
А что интересует? Хороший фреймворк (точнее клей для будущего фреймворка%)), если под веб не писал,то лучше начать с чего-то более простого. Для меня пирамида 2й фреймворк после django (иногда надо что-то с нормальным ормом)
Люблю map, не люблю list/generator/dict comprehensions.
> медленнее
Преждевременный оптимизатор?
Если есть более рациональное решение - скажи, я непременно им воспользуюсь.
>Преждевременный оптимизатор?
не ИДИОМАТИЧНО
ну и да, тормозит, переписывал подобную хуйню по результатам из профайлера, лучше уж сразу как человек писать
define "как человек"
Если у тебя производительность упирается в это, то переписывание не поможет.
>то переписывание не поможет
Негодный экстрасенс
>define "как человек"
не порождать ненужные промежуточные листы, как у тебя делают мап и фильтер. оно раза 2 тормознее, и в несколько раз прожорливее по памяти. на тысяче-другой элементов в коллекции ты прозреешь
открой для себя comprehensions и модуль itertools
> Негодный экстрасенс
> не порождать ненужные промежуточные листы, как у тебя делают мап и фильтер. оно раза 2 тормознее, и в несколько раз прожорливее по памяти. на тысяче-другой элементов в коллекции ты прозреешь
ИКСПЕРТ подтянулся
https://docs.python.org/3/library/functions.html?highlight=filter#filter
https://docs.python.org/3/library/functions.html?highlight=map#map
>>633142
> прематур
define "прематур"
https://ideone.com/VlIeSg
На 10% быстрее твоей портянки, при равных данных на входе, чому так?
третьепитонопроблемы
3-шка нестабильное эксперементальное говно. нечетные версии нестабильные.
нормальные люди сидят на двойке, перекатятся когда выйдет стабильная 4.0
> sorted((
здесь не нужно две пары скобок можно просто sort(foo for foo in bar)
А вообще пиздец ты оптимизатор. распрасить 10 дат на 10% быстрее!!! выигрыш 0.00000000000000000000001 секунды!
При этом читаемость кода хуже. Даже блять в длину строки гитхаба не влезает.
> s.split("\n")
есть str.splitlines() на разных системах перенос строки по-разному делается
А бля там key= ещё не долгядел
Это парсер сайта, дибил. Там их десять/сто и будет. Парсеры затем и нужны, чтобы руками ничего не делать.
Ему нужно было распарсить и сортировать. strftime только для вывода на ideone. К словам придираешься, ибо обосрался?
Какие десятки секунд? Ты ебанутый?
Да даже если были бы десятки секунд - похуй на них, читабельный код важнее.
Иди на асме пиши.
define читабельный
в моем `key=` на новую строчку перенести, и будет заебцом, как в лучших домах
Эти двойкодебилы. Чуваку повезло, короче.
Сука, только попробуй не перезвонить.
Как через пайтон запустить другую консольную программу в фоне, используя готовые ассоциации Винды, при этом получив на выходе stdout?
Пробую так, но оно, почему-то, выдает лишь пустую байтовую последовательность, хотя вывод должен быть:
script = subprocess.Popen('cmd /c start "" /b' + path, stdin=sub.PIPE, stdout=sub.PIPE, stderr=sub.PIPE, env=envp, cwd=os.getcwd())
output = script.stdout.read()
Тем что оно не считается comprehensions, ну или я нигде не видел чтобы кто-то упоминал его так.
> в фоне
> получив stdout
Это и на прыщах то через жопу целается - надо будет её stdout в неблокирующем режиме в цикле читать типа http://stackoverflow.com/questions/8980050/persistent-python-subprocess
https://www.python.org/dev/peps/pep-0289/
>This PEP introduces generator expressions as a high performance, memory efficient generalization of list comprehensions
>generalization of list comprehensions
>comprehensions
Хотя это и без пруфов очевидно неупоротым
Таки comprehensions. Каюсь.
Спасибо, надо же забыть такую элементарную вещь
Что будет с этими людьми если их за изучение жс посадить с его ошибками вида undefined is undefined.
>В реальности на java пишут очень сложные гиганстские проекты которые на чем угодно будет тормозить.
Это ты про майнкрафт?
Питонтутор
У меня -3 получается
Ну ты чего, что не так, я только первый день занимаюсь
Я наркоман, не обращайте внимания.
Там решение под выхлоп подогнать надо что ли? Если да, то бросай нахуй это говно. Если нет, то ты неправильно понял задание.
Отступы проебались.
Спасибо
В питоне всё объекты. Всё ли? Ну т.е. во 2м print был не объектом, в третьем - стал.
Для любого объекта грубо говоря мы можем дописывать свои свойства, через функции. Ну типа def str_add_shit(str): return str + 'shit'.
Так типа, или я что-то упускаю?
Классы это такой способ навязать кучу свойств куче объектов
Все эти self.{имяфункции} это и есть спсоб декларации того, что у объектов такого класса по имяфункции теперь есть одноимённое свойство.
Ебать у тебя каша в голове.
print в 2 питоне - инструкция. Как return, например.
А вообще, хули я тебе объясняю что-то. Пиздуй читать Лутца.
Благодарю за отличный развёрнутый ответ, вкусняшек тебе!
Потому что это бессмысленно, если только ты не будешь заниматься реверс-инжинирингом, но даже в этом случае эти "задачи" далеки от реальности . С таким же успехом ты можешь на бумажке написать 5 рандомных цифр, а потом пытаться найти в них закономерность. Лучше с checkio какого-нибудь задачек порешай.
Вот есть у меня связь в Джанге много к 1. Есть пост, к нему идут комменты. Сука, как мне запросить количество коментов к этому посту без создания кастомного фильтра для шаблона?
Ну, т.е. чтобы это все во вьюхе работало, и через запрос в эту вьюху и выводилось количество комментов. Вчера полдня убил, так нихера и не смог сделать.
Ты имеешь ввиду а шаблоне чтобы работало?
Ты можешь писать там как-то {{ post.comment_set.count }} так
p.s. count это функция, но движок шаблонов "умный" - если это функция он сам её вызовет
создал свой класс, как мне переопределить операцию умножения вида: инт экземпляр класса ?
пример:
>>> class SupAnton:
\tdef __init__(self, data):
\t\tself.value = data
\tdef __mul__(self, repVal):
\t\treturn SupAnton(self.value repVal)
>>> sA = SupAnton(228)
>>> (sA 410).value \t#выводит результат
>>> (410 sA).value \t#ошибка. как переопределить метод для такого вида?
немного с табами ошибся
В доке:
These methods are called to implement the binary arithmetic operations (+, -.....) with reflected (swapped) operands.
Я к тому что может тебе None вставлять в список вместо этого класса. Хотя я незнаю, что ты именно делать. Может и нет.
А так называй как хочешь. Placeholder звучит подходяще.
AnoosHolder
И вот тут на ранних примерах нашёл один листинг:
http://ideone.com/ihWTOs
Так вот, собственно, в чём вопрос. В книге пишут, что если документировать объявленную функцию, при запросе function.__doc__ выдаст эту самую документацию, но, как видите, что в ideone, что в QPython3 вместо этого мне пишут хуй None.
На домашней же ПеКе пашет как надо. Почему вообще возникает такой глюк с документацией? Что еще ждать в таком же духе от Ideone?
Попробовал вот тут:
http://live.sympy.org/
и тут
http://www.brython.info/tests/console.html?lang=en
Пашет как надо
Какая-то особенность ideone
https://dpaste.de/xem2
Вангую, что у них там сорт оф eval/exec для которого они фильтруют входящий текст от мусора, в т.ч. докстрингов.
У интерпретатора питона есть такая опция
> -OO : remove doc-strings in addition to the -O optimizations
> Никаких foreign key, правда в одной из этих таблиц имееются ключи, указывающие на primary key'и второй таблицы
А зачем так? Почему не сделать foreign key?
> какому-то id-шнику
Что это значит?
Просто этот ключ может содержать id и из другой таблицы.
> какому-то id-шнику
Это значит, что в первой таблице есть id, которые иногда ссылаются на другую таблицу, и есть поля, которые нужно заполнить, взяв их из второй таблицы. Вот как это сделать по-человечески. Foreign key не подходит в данном конкретном случае.
Если бы этого не было встроено в саму джанго, то модно было бы реализовать самому.
Или вот немного из другой оперы, есть https://pypi.python.org/pypi/eav-django http://mvpdev.github.io/django-eav/ позволяет иметь произвольный набор аттрибутов у модели, редактируемый без измнения структуры бд.
Или https://django-mptt.github.io/django-mptt/ для эффективного хранения древовидных структур в бд.
Я в начале думал, что просто сделаю какую-нибудь sql процедурку и ей просто заполню нужные мне филды, но тут есть встроенный механизм, почему бы и не воспользоваться
И что, проски эти рабочие? Да ещё и не забаненые?
Господа, с чем может быть связан такой нюанс в Django.
Есть страница, к примеру:
2ch.hk/b
На ней ссылка на тред, к примеру:
2ch.hk/b/12
Когда я перехожу из /b/ на страницу треда- всё в порядке. Когда я заполняю формы- всё в порядке. Однако, когда я нажимаю "Отправить сообщение"- то страница обновляется, и в строке браузера уже не 2ch.hk/b/12, а 2ch.hk/b//
Что за чудеса?
А пост то отправляется?
Вообще твая функция должна возвращать не thread.html после post запроса а делать редирект, см https://ru.wikipedia.org/wiki/Post/Redirect/Get
Отправляется. Функция возвращает не просто html, я не так выразился. Она возвращает рендер.
return render(request,'imageboard_app/thread.html', {'form':form, 'posts':Anon_Post.objects.all(), 'file_form':file_form})
А вообще, конечно, что-то тут не так. Смотри что там в urls.py
Кстати, извините за оффтоп, гейбук реально тема? Сколько у него, так сказать, срок эксплуатации? Т.е. время, когда ты не ощущаешь тормозов, лагов, всякой херни с железом?
class MyClass(MyView):
queryset = бла-бла-бла
или
class MyClass(MyView):
def get_queryset(self):
....бла-бла-бла
Я бы склонился ко второму варианту как питон вэй.
Плюсую второй вариант
Ага. Тема. В эксплуатации с 2012, только что ногами не пинал, а бук как новый.
>тормозов, лагов, всякой херни с железом
Ноль. Автономность, отзывчивость гейоси - 10/10.
много лет красноглазил бифор, от винди не могу не блевануть
min(циферки)
прости невужество батюшка, в питоне почти 5 лет ( с него начинал обучение в 13, так что реальной пракьтики особо нет), но что значит 'generic' и почему его брать по максимому)
Вьюхи из django.views.generic
>почти 5 лет
Не ты ли, катати, тот подлый шакал, что отрицал величие comprehension и выражений-генераторов в пользу map/filter/reduce?
У питона нет синтаксиса.
Спасибо
И как оно, не скучно? Какие технологии используешь? Я б наверное ебанулся, лет 5 конфигурять джангу.
На тебе однострочник, не мучайся:
print(min(map(int, input().split())))
Маленький разбор: input().split() получает на ввод строку и разбивает её по пробелам на список отдельных элементров, map(int, input().split()) применяет функцию int (преобразование в целочисленную переменную) ко всем элементам полученного с ввода списка, min ищет наименьшее число, print выводит на экран. Не благодари.
Лишь бы платили)
Вот сейчас гуглил и к тому же выводу пришел. Kivy как-то не очень для десктопа подходит что ли. Или мне так кажется просто. Но я на нем запили игру, а чтобы выстроить кнопки в ряд очень муторно
Первый раз о таком слышу.
PyGObject -биндинг к GObject, который жи есть гнутая реализация ООП с подсчетом ссылок для PlainC. Gtk - почти Linux-only ГУЙ-библиотека. Никакого Material design как у гугла на ней не сделать. Декларативности как в qml тоже не завезли.
>Linux-only ГУЙ-библиотека
Поэтому флагман ГТК - гимп - кроссплатформа. И поэтому твой браузер слинкован с ГТК. Попробуй тоньше.
>гимп
Когда я работал на венде, там он выглядел как говно. И хоткеи в ымперской раскладке не работали.
>твой браузер
Safari
>слинкован с ГТК
из Хромого давно выпилен
pygtk/pygi
> Linux-only ГУЙ-библиотека.
Толсто. Наиболее популярный питоноский кросплатформенный гуи софт - deluge, gajim, exaile - на pygtk. Под прыщи на нем вообще тонны популярного софта. А на pyqt софта чуть более чем нихуя. Я знаю только spyder, eric и tortoisehg, но это не популярный софт, а узкоспециализированный и не самый удачный(например гуи для hg мне больше нравится gwsmhg, а он на pygtk).
> на ней не сделать.
Можно дохуя чего сделать, фреймворк очень гибкий и мощный.
> Декларативности как в qml тоже не завезли.
Завезли, glade для этого и ui файлы.
Рассчитано на тех кто имеет представление о программировании. Он там показывает все основные констукции языка и встроенные типы.
Или (default=timezone.now)
Странно. Ну можешь переопределить save(если у тебя pk == None здачит объект создан и надо записать дату, а потом дернуть super().save()).
Или метод create https://docs.djangoproject.com/en/1.9/ref/models/instances/
Вот тут кстати рекомендуют делать save свой тоже
http://stackoverflow.com/questions/1737017/django-auto-now-and-auto-now-add
А что за бд? Странно вообще что auto_now_add не работает.
CodeBattle опубликовали статистику. Те кто пишут на Ruby побеждают чаще тех кто пишет на Python, Clojure, JavaScript и прочих.
О чём это говорит? Ruby лучший язык. Да, это несомненно так.
Да у тебя и D - лучший язык.
Я в базе создаю триггер, который отрабатывает на изменение в другой таблице, а в мою записывает определенные филды. Вообщем, разобрался я со временем, мой save() отрабатывает. Спасибо, анон, здоровья тебе и чая
у меня тут тупой вопрос. Я когда-то ходил на курсы по программированию и решил одну задачу функцией eval, хотя надо было просто завернуть функцию в функции 1000 раз. Дак вот препод тогда в ахуе на меня посмотрел и сказал мол eval используют только мудрые бородатые программисты и вообще это дыра в безопасности тебе мол не гоже этим пользоваться (с таким выражением лица будто я Авадекедавру кастанул). Дак вот я тут решил все с нуля очень углубленно все изучить и начал с Лутца и он буквально на первых страницах пишет, ну вот короче можно еще использовать eval и exec и все збс.
Поясните, где правда?
Где-то посередине. Также как с goto в сишечке.
В целом лучше не пользоваться, но бывают случаи, довольно редкие, когда оно нужно.
Так же и метаклассами всякими, но в меньшей степени.
Но вообще:
код в eval трудно будет разобрать тому, кто в твоем коде будет разбираться
сложно отлаживать
он просто не нужен, питон достаточно гибкий сам по себе, можно обойтись без кодогенерации и eval вообще.
niet
В долю не возьму.
Сходи в социоблядства-тред, там были какие-то попытки кооперироваться на жидхабе.
Теплое с мягким. Sphink - FTS-движок, Haystack - фронтенд, абстрагирующих конкретные FTS engine'ы. От Sphink какой-то php-душок исходит
В django ты просто набираешь python manage.py runserver
И у тебя будет доступен dev сервер на 8000 порту с твоим приложением. Можешь ещё поставить какой-нить django-debug-toolbar и сможешь видеть прямо на страничке всякую хреть, например что в кэше или какие sql запросы происходили.
Деплой на боевой сервер проходит примерно как с php-fpm, но тебе это для "попробовать" не надо.
Спасибо.
Бамп.
Вообще можно использовать обычную idea и поставить на неё python-плагин. Питон плагин умеет всё тоже что пичарм.
Ну бля, у меня и они не работают. Либо их нет в том говне, что я юзаю. А я юзаю Flask{,-Login,-SQLAlchemy}.
Ты неумный?
Есть бинарник, который запускается через subprocess.run(). Это делается из функции, которая вызывается через multiprocessing.Pool().map(func, iterable). Если есть 12 ядер, то от скольки тредов не офигеет GIL?
Т.е. ты запускаешь сторонний бинарник из питона, и чтобы этот бинарник тебя не блочил - ты запускаешь его через мультипроцессинг? Но зачем, если тебя блочит ожидание вывода от субпроцесса, и можно просто взять asyncio.create_subprocess_exec?
Извини, хуйню написал. Вопрос такой: как эффективно распараллелить запуск бинарников?
Так как ты и делаешь.
Можешь и через threading делать, какая разница gil никак не влияет на подпроцессы.
> multiprocessing.Pool().map
Кстати так не рекомендуется делать. По возможности пиши как-то типа
pool = Pool()
pool.blabla
Мултипроцессинг тут нахуй не нужен, только машину жрет. Можно из одного питонячьего инстанса запускать сколько влезет и без блока. Через asyncio - https://docs.python.org/3/library/asyncio-subprocess.html
А зачем тебе вообще питон? Почему просто в шелле не запустить
/bin/foo >file1 &
/bin/foo2 >file2 &
и т.п.
Или в питоне через os.system('/bin/foo >file &')
Зачем городить всякие мультипроцессинги если тебе на вывод пофигу?
Хотелось цельную систему выстроить по анализу данных, чтобы поставить на ночь, а утром уже всё готово. Обработать нужно где-то 1кк файлов. Если по одному за раз, то это как-то слишком долго.
Если ты в шелле запускаешь "/путь/команда &" то оно запускается в фоне.
>Если имя переменной начинается с двойного подчёркивания, как, например, __privatevar , Python делает эту переменную приватной (private). Поэтому принято имя любой переменной, которая должна использоваться только внутри класса или объекта, начинать с подчёркивания; все же остальные имена являются публичными, и могут использоваться в других классах/объектах. Помните, что это лишь традиция, и Python вовсе не обязывает делать именно так (кроме двойного подчёркивания).
С двойным подчеркиванием все понятно - я потыкал в шелле, действительно, объявленную таким образом переменную без явно определенного геттера/сеттера дернуть не удается. А от одинарного подчеркивания какой профит? Я проверял - такая переменная доступна, как и переменная без подчеркиваний вообще.
Параллель то зачем? Опять усложняешь. Запуска в бекграунде через & и редиректа stdout/stderr тебе хватит. Чтобы процессы не отваливались при закрытии терминала (а так есть с & ) можно запускать бинарники от инита, setsid ./yoba &>/tmp/log - запустит, перенаправит весь вывод и не заблочит.
Я бы stderr в другой файл направил иначе там будет каша
Я вообще мало смысла вижу в таком хардкорном отказе в доступе к переменной. Если прижмет - я все равно ее достану, только 100500 костылей нагорожу. А чтобы просто дать понять что переменная не предназначена для прямого использования _name достаточно.
Это просто соглашение, тот кто будет использовать твой код будет знать что это внутренняя переменная, которую лучше не трогать. Никак это насильно не ограничевается.
К __переменным тоже доступ получить не проблема
Мне нужно обработать 1кк фалов. Бинарник на вход берёт только один файл. Если я правильно понимаю, то запустив параллельно несколько процессов, я быстрее разберусь с этой бучей. Отрабатывать всё это дело неделю не вариант.
Запускай сразу кучу бинарников в бекграунде & или через setsid. Работать они будут одновременно.
Но не сразу миллион же.
Не знаю туда ли я зашел но на всякий случай спрошу. В общем обмазался я пастой про дайв инто питон. Книгу прочитал еще пару лет назад, pep8 тожедаже раньше. Теперь смотрю на асинхронные сервера чтобы войти в увлекательный мир хайлоада ну и ради разнообразия, посмотреть что-то кроме фласка и джанги.
А теперь, внимание, вопрос - tornado или asyncio? И там и там асинхронщина, корутины, иолуп, вебсткеты всякие. Торнадо таки старее и стабильнее, асинкио включен в стандартную поставку третьего питона который я и использую.
Торнадо умеет сам в asyncio http://www.tornadoweb.org/en/stable/asyncio.html
Вообще если для веба/вебсокетов то торнадо повзрослее будет. Для асинкио я пока не знаю каких-то готовых фрейворков, они есть, но какие-то пока не оче доделанные.
Благодарствую. За ссылку на документацию вообще отдельное спасибо. У меня примерно такие же мысли были
Смотрел на него, на первый взгляд даже поинтереснее будет чем торнадо из-за более широкого профиля могу хуйню нести. Но лично для меня у него фатальный недостаток - нет поддержки третьего питона
Есть два класса, главный и вложенный. В конструкторе главного создается экземпляр вложенного, конструктор которого, в свою очередь, получает ссылку действующий экземпляр главного (self). После этого ссылка на экземпляр вложенного сохраняется в качестве переменной действующего экземпляра главного и получается такой себе закрытый круг:
class Main:
--class Sub:
----def __init__(self, parent):
------self.parent = parent
----def foo(self):
------print(self.parent.text)
--def __init__(self, text):
----self.child = Sub(self)
----self.text = text
Итак, вопрос: Не охуеет ли от того расклада GarbageCollector, и не будет ли каких-нибудь утечек памяти? Можно ли как-то оптимизироват эту хуиту?
Ну на твистед я делал сервер для карточной игры. Дальше тестирования это не пошло. Да и альтернатив тогда особо не было если хочешь какой-то протокол реализовать и не изобретать велосипедов, для твистед куча протоколов всяких поэтому реализована.
Очень продуманный и грамотный API и архитектура.
На торнадо я делал веб-сервер, который должен был принимать много мелких запросов и складывать их в очередь. Нормально работало.
Понял. Благодарю за ответы, некоторое прояснение появилось
имеется задача построить нка по регулярному выражению (простому, без вложеных скобок даже)
нка в дка перевести и проверить строку могу.
Очевидно надо через sudo это делать
>>635856
Хорошо, разобрался. Тогда другой вопрос — можно ли как-нибудь получить модифицированный environment из Popen?
Т.е, допустим, я делаю так:
env = copy.deepcopy(os.environ)
env['some_var'] = ''
script = subprocess.Popen('python script.py', env = env)
Внутри script.py я шаманю на переменной среды some_var. А как потом эму модифицированную переменную получить в основном скрипте? То, есть можно ли как-нибудь экспортировать значения среды из Popen?
И зачем запускать питон скрипт через Popen? Почему не использовать import или там ещё чего да хоть eval?
Вот именно переменные среды ты никак оттуда не получишь. Можно какое-нить IPC использовать, в простейшем случае в файл их сохранять.
Даже в баш ты никак если запускаешь скрипт один из другого через новый шелл не получишь их поэтому надо делать source file.sh если хочешь переменные эти оттуда получть.
from lxml import html
from lxml import etree
def get_urls_from_page(url):
result = []
path = './/div clas[@class = "price"]/text()'
doc = html.parse('http://www.bloomberg.com/quote/USDRUB:CUR')
values = doc.xpath()
for i in values:
result.append(i)
return result
print (doc)
сука, я все проебал, вот норм:
from lxml import html
from lxml import etree
def get_urls_from_page(url):
result = []
path = './/div clas[@class = "price"]/text()'
doc = html.parse('http://www.bloomberg.com/quote/USDRUB:CUR')
values = doc.xpath()
for i in values:
result.append(i)
return result
print (doc)
поправил, но лучше не стало.
возвращает вот что:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-46-32bab99cc426> in <module>()
14 doc = html.parse('http://www.bloomberg.com/quote/USDRUB:CUR')
15
---> 16 values = doc.xpath()
17
18
lxml.etree.pyx in lxml.etree._ElementTree.xpath (src\lxml\lxml.etree.c:59902)()
TypeError: xpath() takes exactly 1 positional argument (0 given)
lxml не умеет обращаться к веб-серверам. Для этого надо использовать другие библиотеки.
блять, ты серьезно? я второй вечер ебусь с этим.
ладно, а какие годятся для этого? Beautifulsoup4 пойдет?
lxml, beautifulsoup — это парсеры html. Они не обращаются к серверу, а просто парсят строку. Иными словами они ожидают примерно такого:
html.parse('<html><head></head></html>')
Не пизди, умеет. Только для https надо свои костыли прописывать.
>>636189
У тебя вообще много чего там не так в коде начиная от path и заканчивая тем, что оно нигде не используется.
По быстроляну исправил и все работает
http://pastebin.com/P1eLBNty
Ладно, обосрался.
def semantic_similarity(bag1, bag2: list, w2v_model, unknown_coef=0.0) -> float:
Данке шен
Альтернативный вариант https://dpaste.de/Mp4C
мимо-ньюфаг-который-решает-чужие-задачки-для-тренировки
def abc(a):
..if a == 0:
....return
..print 'huy'
..print 'ololo'
чому когда возвращается пустой return оно в него пихает всё что ниже? не разумею
В твоем примере всегда возвращается None. Разница только в том, что принты вызываются, если а != 0.
Нет. Просто ты никакого другого возврата кроме None не указал. Если вообще не писать return в функции - питон мысленно "дописывает" её сам и возвращает None. Т.е. с точки зрения интерпретатора твоя функция выглядит так:
def abc(a):
..if a == 0:
....return None
..print 'huy'
..print 'ololo'
..return None
Ты вообще какого результата добиться хочешь? Может, лучше так:
def abc(a):
..if not a:
....print 'huy'
....print 'ololo'
Лучше бесспорно, я просто читал о "мёртвом коде", который типа после ретёрна не выполняется, попробовал а оно хуйак и выполняется, и это-то мне и странно
У меня не выполняется. Ты вообще как проверяешь выполнение-то? Я думал на None функцию чекаешь.
ну печатать же тоже код
и после ретёрна что-нибудь типа:
ворд = "хуйхуй"
принт ворд
ворд *= 2
принт ворд
тоже будет выполняться
а возвращать функция нихуя не будет, да, тут сомнений нету
Ну, блять, ты же а не равное нулю в функцию передаешь. У тебя выполнение в блок if не заходит и return не вызывается.
хуй с ним.
Подкинь наводку, бро.
Уже 2 года разработки на python за плечами, писал как-то и полгода на С.
а в джанге орм для бд используется алхимия или своя? Я не сталкивался с ней. А в теории да, используешь foreign key к моделям, которые тебе нужны, а затем аггрегируешь для вывода.
Трендинг на гитхабе.
Coursera, я там как-то шарился - знания неплохие дают. Хз что со стоимостью обучения.
Ну и классик вариант - codeacademy/
Сорри, в глаза после работы долюблюсь.
Я бы на его месте за Лутца взялся, это даст довольно неплохие знания.
Я бы на его месте реальные задачи искать начал. Знания - это прекрасно, но он быстро разочаруется в этом говне, если не будет превращать знания в действующий код. Пусть скриптами автоматизирует все, что может; решает задачки на checkio или codewars; разбирается в чужом опенсорс на гитхабе; начинает реализовать какую-то свою идеи, обложившись гуглом и stackoverflow.
А Лутц при этом используется, как справочник, чтобы не изобретать велосипеды.
Если с идеями для проектов голяк, то правда checkio попробуй - там задачи с возрастающей сложностью. Плюс они пытаются их подобрать таким образом, чтобы решения можно было где-то в большом проекте использовать. Плюс по каждой задаче смотри первые три most voted решения других людей и сравнивай их со своими, там интересные фишки попадаются.
Со временем начнут появляться мысли чего-нибудь такое написать. Распарсить какую-нибудь страничку, написать скрипт автоматического бэкапа порнухи, или скрипт для наведения порядка в папке Downloads, например. Можешь попробовать свои реализации классических алгоритмов и структур написать. Разные виды сортировок или связные списки. Поймешь заодно, как это все работает.
Есть еще на двоще добрый Анон, Чаю.
Да я уже подумал, что может быть лучше использовать обычные integerfield's, а во view сделать один sql запрос и выгрести все, хз, выгоднее ли это с точки зрения обращения к бд
Оптимизируй только когда понадобится, ты таким образом избавишься от 99% проблем, серьёзно.
Да, анон, это вообще золотое правило разработки. Кнут вроде советовал. Но тут дело, скорее в том, что sql - для меня проще, лол
Когда понадобится может оказаться поздно, и для оптимизации придется переписывать 60% кода и менять архитектуру. Вот веселье то будет.
Вот когда понадобится, тогда и приходите.
Это не отменяет необходимости нормального проектирования, и выбора структур данных. И вообще скорее про ++i vs i++
while ['.' in i for i in res].count(True)<CHAIN_LENGTH:
....key = ' '.join(res[-2:])
....ch = choice(words[key])
....res.append(ch)
Почему-то каждую итерацию res пересоздаётся заново, вместо того, чтобы добавлять в себя элементы. Если исправить условие цикла на
while len(res)<CHAIN_LENGTH:
то всё работает нормально. Что вообще происходит? Я уже нифига не понимаю.
res - это по сути слова, которые я потом объединяю в предложение. Тот кусок кода проверяет количество точек, т.е. фактически количество предложений.
Допустим у меня проект с вложенными packages:
myproj.aaa.bbb.ccc
и в последнем определён класс MyClass
в другом месте своего проекта я пишу
MyClass.<ctrl+пробел>
PyCharm заботливо показывает список того, что он может импортировать. Выбираю свой проект, <ENTER> вверху создаётся строчка с импортом.
Во всех моих проектах всё работает отлично и создаётся как положено:
from myproj.aaa.bbb.ccc import MyClass
Но вот в одном проекте по какой-то причине генерирует
from aaa.bbb.ccc import MyClass
(путь не абсолютный от корня, а относительный)
Вангую дело в настройках проекта. В чём может быть дело?
Python 2, во всех файлах стоит рекомендуемая строчка:
from __future__ import absolute_import
Как это реализовать без чудовищных костылей?
У меня получается какой-то бред с подгрузкой всех постов, цикл с отсеиванием ненужных, затем адские циклы в шаблоне. 2 запроса.
Проще это сделать через raw sql? И выводить одним циклом?
Помогите плес.
не знаком с django, но это обычно делается на SQL.
Таблицы:
Threads
id (int или GUID), первичный ключ
caption (varchar(100))
Posts
id (int или GUID), первичный ключ
thread_id (ссылка на id треда)
post_number (int - порядковый номер поста в треде)
message (varchar(1000)) - сообщение поста
dt_created (datetime) - когда создан пост
Примеры использования (на MS SQL)
Вывод 10 названий тредов + дат создания на странице:
SELECT TOP 10 t.id, t.caption, min(p.dt_created) -- время создания треда == времени создания первого поста
FROM Threads t
LEFT JOIN -- чтобы также выводились треды без постов
Posts p
ON t.id = p.thread_id
GROUP BY t.id, t.caption
ORDER BY min(p.dt_created) DESC -- от последнего треда к старым
дальше уже по для каждого полученного id треда запрашиваешь столько постов, сколько надо.
не знаком с django, но это обычно делается на SQL.
Таблицы:
Threads
id (int или GUID), первичный ключ
caption (varchar(100))
Posts
id (int или GUID), первичный ключ
thread_id (ссылка на id треда)
post_number (int - порядковый номер поста в треде)
message (varchar(1000)) - сообщение поста
dt_created (datetime) - когда создан пост
Примеры использования (на MS SQL)
Вывод 10 названий тредов + дат создания на странице:
SELECT TOP 10 t.id, t.caption, min(p.dt_created) -- время создания треда == времени создания первого поста
FROM Threads t
LEFT JOIN -- чтобы также выводились треды без постов
Posts p
ON t.id = p.thread_id
GROUP BY t.id, t.caption
ORDER BY min(p.dt_created) DESC -- от последнего треда к старым
дальше уже по для каждого полученного id треда запрашиваешь столько постов, сколько надо.
https://github.com/TheKnightsWhoSayNi/info/wiki/Books#Лёгкие-книги
class RegistrationForm(UserCreationForm):
username = forms.CharField(required=True, max_length=25)
email = forms.EmailField(required=True)
password1 = forms.CharField(widget=PasswordInput)
password2 = forms.CharField(widget=PasswordInput, label='Confirm Password')
class Meta:
model = User
fields = ("username", 'email', "password1", "password2")
def clean_password2(self):
user = super(RegistrationForm, self).save(commit=False)
user.email = self.cleaned_data['email']
password1 = self.cleaned_data['password1']
password2 = self.cleaned_data['password2']
if password1 != password2:
raise forms.ValidationError("Passwords do not match.")
return password2
Вопрос: каким образом вызывается функция клин_пасворд? Что её вызывает?
капелюх-треды начали закрывать
У меня в рубях он не подсвечивает аргумент >_<
или это все враки?
Ну фиг знает, я имея год опыта таки смок устроиться backend погромистом, и это в мухосранске
а где год опыта приобрел?
Проблема в том, что
print(">RES 0:", res)
почему то выдаёт [''], хотя в first_word пустых строк нет вообще.
Пример вывода:
'.' in first_word False
'' in first_word False
' ' in first_word False
'.' in res[0] False
'' == res[0] True
' ' in res[0] False
>RES 0: ['']
.
В чём может быть проблема?
У тебя res = choice(first_word), выходит что res строка, но потом ты аппендишь что-то в нее, разве это сработает?
first_word - это лист листов типа [['a', 'b'], ['c', 'd'],]
Вот здесь не пойму:
first_word = tuple(filter(lambda x: c.lower() in x[0].lower(), words.keys()))
Ты берешь ключ словаря, и проверяешь совпадает ли введенная строка с первым символом ключа. Есть подозрение, что ты имел в виду что-то другое.
В общем, я хочу найти такие пары слов, в первом которых присутствует введённый мной кусок, т.е. c.
words = {
('a', 'b'): 'c',
('d', 'e'): 'f',
...
}
Но в данный момент это роли не играет, я просто Enter тыкаю, так что тамошнее условие не выполняется. res бывает равно [''] даже в первой итерации.
И проверки на содержания '.' в любом случае будут False, если у тебя все элементы списки, даже если у тебя будет что-то подобное [['',' '],['.',' ']]. Ну ты понял.
>парсить всякое говно, а реально крутые спецы сосут хуи на уёбищной работе за копейки.
Начало додумайте сами.
Это копия, сохраненная 9 февраля 2016 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.