Это копия, сохраненная 20 апреля в 14:16.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
ЗАПРЕЩЕНО ПОСТИТЬ КОД
шарь через https://online-python.com
Книжки:
https://ln2.sync.com/dl/cf2c1d070#xq4s328t-xbbjys2z-9r6j7ss7-gf4e9dv6
https://yadi.sk/d/HQhhsBsq3TVRUq
https://yadi.sk/d/tArKKuQu3Kejuq
Предыдущий: >>2933091 (OP)
#######################################
Вопросы-ответы:
— С чего начать изучать питон?
У питона намного лучше официальная документация, чем у большинства других языков. Есть там и учебное пособие для начинающих: https://docs.python.org/3/tutorial/introduction.html, неофициальный перевод на русский язык: https://digitology.tech/docs/python_3/tutorial/introduction.html (для питона версии 3.8, но разницы почти нет)
— Какие книги считаются лучшими?
На слуху чаще всего Лутц, но там очень много воды. Ещё на слуху Марк Саммерфильд, Эл Свейгарт "Автоматизация рутинных задач с помощью Python". Эти книги рекомендуют чаще всего, но книги довольно старые, а питон развивается.
— Есть у кого на примете годный курс лекций по алгоритмам? Формат лекций мне как-то ближе, нежели просто чтение книги.
МФТИшный курс, например, https://www.youtube.com/playlist?list=PLRDzFCPr95fK7tr47883DFUbm4GeOjjc0
— А как учить джангу? Нахожу только книги по джанге 1.х
У джанги отличные доки (одни из лучших для пистоновских либ, имхо), почитай их для начала. Книгу по джанге можно читать даже для версий 1.x, т.к. принципы остаются теми же. Но лучше хотя бы с версии 2.0, слишком много мелких изменений в базе.
— Какие веб-фреймворки стоит учить в начале двадцатых?
Что бы не говорили, Джанго живее всех живых и умирать не собирается (и Django REST Framework), очень перспективный асинхронный FastAPI, асинхронный AioHTTP. Flask ещё где-то используется, но уже legacy. Прочие фреймворки или у нас экзотика, или это вымирающее легаси как Торнадо.
— В ньюфаг-треде написано, что нужно начинать с SICP, чтобы научиться программировать
Вот, пожалуйста, та же самая программа, но частично переработанная под язык python: http://composingprograms.com/ (нужно знать ангельский или уметь пользоваться переводчиком)
— Что можно почитать/посмотреть по многопоточности/параллелизации в питоне, да и вообще в целом?
Ролик на американском языке про многопоточность и асинхронность, построение своего event loop с нуля, помогает понять, как устроена асинхронность внутри: https://www.youtube.com/watch?v=MCs5OvhV9S4
— Можно ли на питоне делать мобильные приложения?
Да, смотри на фреймворк Kivy https://en.wikipedia.org/wiki/Kivy_(framework) https://kivy.readthedocs.io но народ на него жалуется
— Как можно без лишней возни ускорить программу на питоне
1) проверь сначала свой код, алгоритмы и структуры данных. Чаще проблема здесь.
2) код можно иногда феерично ускорить, используя JIT (Just-in-Time) компиляцию. Почитай обязательно про модуль numba, он ставится через pip, и альтернативный интерпретатор PyPy.
— Дайте нормальные книжки на русском! Мы, блядь, не в пиндосии живём
Брат, смотри книжки по ссылкам в шапке, там есть и русские. Но помни, без языка ангелов твоя жизнь проходит мимо и ты обречён быть на обочине знаний и технологий.
Шапка: https://goonlinetools.com/snapshot/share/#8gd2g1snu3l8i26k0bc6k9
Поменял - оставь ссылку.
🐍🐍🐍
from __future__ import division
import sys
import time
import traceback
class Fibonacci:
class TimeoutError(Exception):
msg = "Execution time of %g seconds exceeded maximum of %g."
def __init__(self, time = 0, maxTime = 0):
self.parameter = self.msg % (time, maxTime)
def __str__(self):
return repr(self.parameter)
Name = "Fibonacci"
cache = "cache.txt"
maxCache = 1000
memory = [0, 1]
start = 0
maxTime = 0.01
maxBinet = 1475 # math range error at 1475
sqrt5 = pow(5, 0.5)
def __init__(self):
self.readCache()
def readCache(self):
"""
load fibonacci cache from file system
"""
f = s = None
try:
f = open(self.cache, "r")
s = f.read()
except Exception, e:
trace(e)
finally:
f and f.close()
if s:
self.memory = [int(x) for x in s.split(",")]
def writeCache(self):
"""
write self.memory to the file system cache
"""
a = [str(x) for x in self.memory[:self.maxCache]]
s = ",".join(a)
f = None
try:
f = open(self.cache, "w")
f.write(s)
except Exception, e:
trace(e)
finally:
f and f.close()
def binet(self, n):
"""
return the binet approximation of the the fibonacci number
"""
if n <= self.maxBinet:
self.start = time.clock()
sqrt5 = self.sqrt5
a = pow((1 + sqrt5) / 2, n)
b = pow((1 - sqrt5) / 2, n)
c = (1 / sqrt5) (a - b)
self.end = time.clock()
else:
c = self.exact(n)
return int(c)
def exact(self, n):
"""
return the fibonacci number at index n
"""
self.start = time.clock()
l = len(self.memory) - 1
m = n if l > n else l
a, b = self.memory[m - 1], self.memory[m]
for i in range(m, n):
b, a = a + b, b
self.memory.append(b);
t = time.clock() - self.start
if t > self.maxTime:
raise self.TimeoutError(t, self.maxTime)
self.end = time.clock()
self.writeCache()
return b
def getNatural(n = 0):
"""
prompt the user to input a natural number
"""
if not n:
while True:
try:
n = int(raw_input("Please enter a natural number (0 to exit): "))
if n >= 0:
break
else:
raise ValueError
except ValueError:
print "That was not a natural number. Try again..."
return n
def trace(e):
print "\nError:"
print "-" 72
traceback.print_exc(file = sys.stdout)
print "-" 72
print "\n"
def main():
fib = Fibonacci()
while True:
n = getNatural();
if n < 1:
del fib
break
try:
v1, t1 = fib.binet(n), fib.end - fib.start
v2, t2 = fib.exact(n), fib.end - fib.start
dv = ((v1 - v2) / v2) 100
dt = ((t1 - t2) / t2) * 100
success = True
except Exception, e:
trace(e)
success = False
if success:
s = """
Binet approximation:
%d (%g seconds)
Fibonacci number:
%d (%g seconds)
Difference ((B - F) / F):
%g%% value (%g%% time)
"""
print s % (v1, t1, v2, t2, dv, dt)
if __name__ == "__main__":
main()
from __future__ import division
import sys
import time
import traceback
class Fibonacci:
class TimeoutError(Exception):
msg = "Execution time of %g seconds exceeded maximum of %g."
def __init__(self, time = 0, maxTime = 0):
self.parameter = self.msg % (time, maxTime)
def __str__(self):
return repr(self.parameter)
Name = "Fibonacci"
cache = "cache.txt"
maxCache = 1000
memory = [0, 1]
start = 0
maxTime = 0.01
maxBinet = 1475 # math range error at 1475
sqrt5 = pow(5, 0.5)
def __init__(self):
self.readCache()
def readCache(self):
"""
load fibonacci cache from file system
"""
f = s = None
try:
f = open(self.cache, "r")
s = f.read()
except Exception, e:
trace(e)
finally:
f and f.close()
if s:
self.memory = [int(x) for x in s.split(",")]
def writeCache(self):
"""
write self.memory to the file system cache
"""
a = [str(x) for x in self.memory[:self.maxCache]]
s = ",".join(a)
f = None
try:
f = open(self.cache, "w")
f.write(s)
except Exception, e:
trace(e)
finally:
f and f.close()
def binet(self, n):
"""
return the binet approximation of the the fibonacci number
"""
if n <= self.maxBinet:
self.start = time.clock()
sqrt5 = self.sqrt5
a = pow((1 + sqrt5) / 2, n)
b = pow((1 - sqrt5) / 2, n)
c = (1 / sqrt5) (a - b)
self.end = time.clock()
else:
c = self.exact(n)
return int(c)
def exact(self, n):
"""
return the fibonacci number at index n
"""
self.start = time.clock()
l = len(self.memory) - 1
m = n if l > n else l
a, b = self.memory[m - 1], self.memory[m]
for i in range(m, n):
b, a = a + b, b
self.memory.append(b);
t = time.clock() - self.start
if t > self.maxTime:
raise self.TimeoutError(t, self.maxTime)
self.end = time.clock()
self.writeCache()
return b
def getNatural(n = 0):
"""
prompt the user to input a natural number
"""
if not n:
while True:
try:
n = int(raw_input("Please enter a natural number (0 to exit): "))
if n >= 0:
break
else:
raise ValueError
except ValueError:
print "That was not a natural number. Try again..."
return n
def trace(e):
print "\nError:"
print "-" 72
traceback.print_exc(file = sys.stdout)
print "-" 72
print "\n"
def main():
fib = Fibonacci()
while True:
n = getNatural();
if n < 1:
del fib
break
try:
v1, t1 = fib.binet(n), fib.end - fib.start
v2, t2 = fib.exact(n), fib.end - fib.start
dv = ((v1 - v2) / v2) 100
dt = ((t1 - t2) / t2) * 100
success = True
except Exception, e:
trace(e)
success = False
if success:
s = """
Binet approximation:
%d (%g seconds)
Fibonacci number:
%d (%g seconds)
Difference ((B - F) / F):
%g%% value (%g%% time)
"""
print s % (v1, t1, v2, t2, dv, dt)
if __name__ == "__main__":
main()
https://goonlinetools.com/snapshot/code/#aqb4ejoiuxir84vfonk7l
>>2980800 →
я нащёль!! validate_default в конфиге модели, включит проверку дефолтных значений
там ещё есть validate_assignment для проверки при присвоении,
и strict которое... отключает автоматическую конвертацию?
типа "123" сможет конвертировать в int без strict
Не ищи в москве
https://hh.ru/vacancy/90865664
https://hh.ru/vacancy/90657302
https://hh.ru/vacancy/91095852
Год назад вкатился. Повезло что на вакухе среди требований было одно очень специфическое не скажу ибо там неиронично деанон из-за которого из ~400 откликов реально релевантных было с десяток наверное. Если бы не эта вакуха то не уверен что вкатился бы вообще
Попробуй какие-нибудь курсы дающие реальный опыт работы, это то что и ищут работодатели
Тогда было 23 года. Учился ~4 месяца в формате "на выходных и вечером после работы", потом уволился и буквально на следующий день попал на трёхмеясчную стажировку в крупную галеру, но потом что-то случилось и весь Новый Год был заморожен из-за чего после стажировки не взяли работать. После этого ещё три месяца учился +/- всё свободное время и волею случая наткнулся на ту самую вакансию.
В порядке убывания затраченного времени, учил слудующее:
- Сам пихтон по книгам, Голубой Огонёкам, курсам, записям Стишок на табуреткеов;
- База compsci & SE- ОС, сети, алгосы и структуры данных, архитектура ПК, архитектура софта, паттерны, ООП;
- Линух (командная строка, назначение папок, пермишенсы, всё такое);
- Базы данных;
- Другие ЯП (жиес, голованг, ржавчина, элихир);
- Дженга, фласк, фастапи;
- AWS, докер, как захостить сайтик или сервис;
- CI/CD тулзы, линтеры, форматтеры, тайпчекеры;
- Три команды из гита;
Наверное может бросается в глаза что дженга и ко. в списке довольно низко но ретроспективно считаю что првильно сделал что много времени на это не тратил - вктунов по фреймворкам не сильно задрачивют насколько я могу судить
>- База compsci & SE- ОС, сети, алгосы и структуры данных, архитектура ПК, архитектура софта, паттерны, ООП;
А как ты это учил? По ютубу или книгам?
Я же не говорю что я всё это в совершенстве выучил, скорее наоборот даже. Всего я до вката учился ~10 месяцев. На первый пункт списка ушло, скажем, 40% времени, на последний - ну пусть 3%, всё остальное где-то посередине. Допустим на compsci & SE ушло 25% - это 2.5 месяца. Ну что там за столько времни можно было выучить? Почему поиск в хэшмапе алгоритмически быстрее чем в списке и чем микросервисы от микрозаймов отличаются разве что
>>2981739
Это по книгам в основном
Нет, не pylance, я neovim'ер
Фулстаком вкатился на джангу + реакт + линукс, ну и мишура всякая 🕛, цсс.
Сложно найти работу было, полгода искал. Учился где-то года 2.
30 лет, брат жив, бочку делаю.
В целом, если стараться и потратить кучу времени, то обязательно всё получится. Просто знаний нужно набираться, желательно на каких-то своих реальных проектах. Я аж свой форум зафигачил ради опыта и практики.
Но Джанга это такое себе, Зайчишкаы не очень нужны. Да и вообще Питон для вката так себе, как язык, из-за конкуренции.
<div class="movie_card" id="tomb" styles="background: url('{{ video.img_link }}');">
так не работает
В том смысле, что работает с выносом тега стиля во вне:
<style>.movie_card {background: url("{{ video.img_link }}");}</style>
Сам с собой попиздел.
Сколько проектов показывал? Одного, в котором вся бабуйня присутствует, достаточно?
Володин скозал, что "дифицыт кадраф", значит дефицит, чё ты споришь с увожамемым человеком.
Ты бы знал, какой п-ц у переводчиков творится... Раньше, в 2010, чтобы переводчиком английского языка вкатиться, достаточно было алфавит знать, десяток неправильных глаголов и present simple / past simple.
А сейчас походу всю грамматику знать надо, словарный запас чуть ли не на B2, уметь речи политиков в оригинале понимать, и всё это на Зайчишку-переводчика.
Совсем кабаны берега потеряли
Это манямир. Просто написать и задеплоить маловато. Нужен стив жопс, что бы это потом разлеталось. Ну или хотя бы друг антошка папкин сын с котлетой.
@
Пет проект начинает приносить сначала 100к, потом 200к, потом 500к. Едва успеваешь открыть ИП
@
Ой мы готовы рассмотреть вашу кандидатуру, жаль конечно, что у вас нет профильного образования и в не Прочитали задачку школьной олимпиады
прошладка
даже не подавайте в эту контору. Я подал на Эльфа, сделал их тестовое, они меня даже заставили Голубой Огонёк снять, где я объясняю, как их тестовое работает блять. Через три дня дура в телеграмме пишет: "мы готовы взять вас стажёром, вы готовы?" Я ей говорю, как это, я выполнил тестовое на Эльфа, и подавался на Эльфа, чё случилось, дура? Молчит теперь, Шельма.
если всё-таки хотите пойти на стажировку, код к их тестовому можете спиздить на Новогодний Выпуске : очень много дурачков прямо так репо и называют ТЕАниматорВОЕ ЗАВЕЩАНИЕ ДЛЯ ООО ПРОСТЫЕ РЕШЕНИЯ, лол
Так не надо сразу метить на мильены пользователей, главное чтоб на пожрать хватило и норм.
Блять автозамены ржака
>ТЕАниматорВОЕ
Сделайте тред в /d/ кто-нибудь, пожалуйста. Ну это просто невозможно терпеть.
>Моча, поясни, что это за хуйня вообще и нахуй оно надо?
Мимо анон
На праздниках надо отдыхать, а не на двачи писать... Закончатся праздники, всё это откатят, дальше сюда писать будешь
>Эльфа
>Новогодний Выпуск
>Аниматор
>Голубой Огонёк
Какой-то всратый «юмор». На моче ботан-инцел что ли?
Сначала ты осваиваешь базу, чтобы чувствовать себя комфортно в языке, потом осваиваешь технологии.
Если тебе сложно писать функции урвоня "шифр Цезаря", то тебе ещё просто рано что-то делать в индустрии.
Хотя отдельно изучать HTML вёрстку полезно.
Если хочется уже оторваться от земли, но крылья еще маловаты - выбери один из практических курсов по джанге или фласку (для полного понимания это один хуй) или сразу в фастапи обмазывайся, о тут инфы сильно меньше. Смотри, ставь на паузу и тут де пиши прям то же самое. Только весь до конца. Что не понятно, пробуй находить в инетах и читать.
После чего любой другой точно так же. Потом третий... в какой то момент блевать уже будет тянуть от того, что ты это уже сотню раз видел и знаешь, вот тогда садись писать своё.
Не знаю твой уровень. Просто открой рандомные поделки из канала pythontoday на ютубе. Если сам примерно понимаешь всё, что он там лепит, что куда и почему, то можно двигаться дальше, как я писал. Если не раздупляешь, что там происходит - не выёбывайся, решай дальше задачки по своему курсу, что ты проходишь, ты не готов расчехляться. Это тебя не даром дрочат, казалось бы не нужной хуйнёй, это как кунг фу: ты носишь вёдра с водой по сто раз не просто так.
>>2988411 - кун
накидайте идей что можно добавить в игру и вообще какую сделать
хочу запилить консольную рпг
пока по мыслям
1. инвентарь
2. журнал
3. квесты
4. взаимодействия с неписями
5. сбор лута/ресурсов
че ище там в этих рпг бывает
Здраствуйте. Я, Кирилл. Хотел бы чтобы вы сделали игру, консольное РПГ суть такова... Пользователь может играть лесными эльфами, охраной дворца и злодеем. И если пользователь играет эльфами то эльфы в лесу, домики деревяные набигают нагибают солдаты дворца и злодеи. Можно грабить корованы... И эльфу раз лесные то сделать так что там густой лес... А движок можно поставить так что вдали деревья картинкой, когда подходиш они преобразовываются в 3-хмерные деревья. Можно покупать и т.п. возможности как в Daggerfall. И враги 3-хмерные тоже, и труп тоже 3д. Можно прыгать и т.п. Если играть за охрану дворца то надо слушаться командира, и защищать дворец от злого (имя я не придумал) и шпионов, партизанов эльфов, и ходит на набеги на когото из этих (эльфов, злого…). Ну а если за злого… то значит шпионы или партизаны эльфов иногда нападают, пользователь сам себе командир может делать что сам захочет прикажет своим войскам с ним самим напасть на дворец и пойдет в атаку. Всего в игре 4 зоны. Т.е. карта и на ней есть 4 зоны, 1 - зона людей (нейтрал), 2- зона императора (где дворец), 3-зона эльфов, 4 - зона злого… (в горах, там есть старый форт…)
Так же чтобы в игре могли не только убить но и отрубить руку и если пользователя не вылечат то он умрет, так же выколоть глаз но пользователь может не умереть а просто пол экрана не видеть, или достать или купить протез, если ногу тоже либо умреш либо будеш ползать либо на коляске котаться, или самое хорошее… поставить протез. Сохранятся можно…
P.S. Я джва года хочу такую игру.
dwarffortress...
Не ўжывай бібліятэку msvcrt, бо яна толькі для вакенцаў. Ужывай якуюсь readkeys каб працавала ў іншых сістэмах.
>Если сам примерно понимаешь всё, что он там лепит, что куда и почему, то можно двигаться дальше, как я писал.
Кстати, этого может не хватать. Я по должности очень много читаю код, если понимаю предметную область, а язык и стиль не слишком эзотерические, то понять, что и как там делается - легко. Почему так - как правило тоже понятно. А вот "написать такое же" - это отдельная история.
Что думаете по этому поводу, анонсы, стоит ли доставлять дискомфорт своему гладенькому мозгу ради асинхронности?
> Почему все вокруг говорят, что порог вхождения в фастапи ниже, чем в джанго
Наверное, это потому, что фастапи это про чистую серверную разработку в то время как джанго это ещё и дзиндзя с фронтом.
> стоит ли доставлять дискомфорт своему гладенькому мозгу ради асинхронности?
Мне лично FastAPI нравится не за асинхронность, а за то, что он даёт АПИ удобное, искаропки. Если ты хочешь делать не веб, а что-то ещё, например, консольное или десктопное приложение или прилождения под разные системы (web на десктопах и отдельные клиенты для мобильных платформ), то АПИ - маст хэв.
У джанго это drf. Ставится в один pip install, так что тоже искаропки.
Россия страна чудес нахуй, здесь легче вкатиться в "сложный" энтерпрайзный стек вроде Java/c#, чем в "легкие" js или python. Спасибо государству за бесплатные курсы домохозяйкам.
Причем тут бесплатные курсы и сложность языка? Компания выбирает стек исходя из задач. В России студии любят php, ruby и java, а питон используют в нейросетях.
Всем привет! Всех с наступающим рождеством!
Пишу бота, в задачи которого будет входить рассылка видео, и наткнулся на ограничение телеграма: максимальный размер видео - 50 Мб. Пытался использовать способ, описанный в статье
https://habr.com/ru/articles/348234/
идея коротко - создать агента, который будет работать в связке с тг-ботом и отправлять видео, но так, как это описано в статье - сделать не получилось.
Сделал таким образом
https://pastebin.com/iXUVghhf
И оно работает (отсылает сообщение, ну или видео). Вот только мне для нормальной работы нужно запустить это в середине бота, и это проблема.
Если вставить эту конструкцию в функцию бота, то при выполнении вываливается ошибка:
"There is no current event loop in thread 'WorkerThread2'." Как я понял, это из-за специфики работы асинхронного кода
Вопрос: как сделать так, чтобы работало? Можно ли написать какую-то функцию без асинхронности, которая отправит сообщение (видео) от агента боту (это было бы идеально, т.к. нужно отправлять видео и отдельно делать что-то для отслеживания не хочется)? Можно ли как-то заставить асинхронную функцию работать в обычном телебот боте?
Бот напписан на подобии этого https://habr.com/ru/articles/697052/
class Test:
....lst=[]
....def __init__(self):
........self.some()
....def some(self):
........self.lst.append("foo bar")
out = Test()
Что изменить внутри класса, чтобы "out" был списком "lst".
Изменения можно вносить только в тело класса.
#---------------------------
В общем суть такова что немного потыкавшись получилось всё сделать изменив метод new таким образом.
def __new__(cls):
....super().__new__(cls).__init__()
....return cls.lst
1) Оцените такое решение, безотносительно самой идеи что класс возвращает не свой экземпляр а какуб-то хуйню. Вот есть задача и вот такое решение в три строки. Как оно? Можно лучше?
2) Можете пояснить к чему обращается super()? Класс же не наследуется.
Почему нельзя отнаследоваться от list или collections.UserList?
>от левого несвязанного класса
Так ты для своего инстанса хочешь получить поведение (или интерфейс) списка, каким образом ты собрался это делать внутри класса без реализации всех методов?
>вместе с другими, которые не нужны
Так переопредели их, можешь в отдельном миксине.
Как раз подменой new ты делаешь неявную несвязанную грязь, у тебя все инстансы будут ссылаться на атрибут класса и иметь интерфейс списка, при этом сам класс не является им.
Ну хуй знает, наверное ты и прав. Когда видишь вызов класса без метода ожидаешь что это будет его инст. Но тут совсем другое, а пример с list() я просто привел чтобы было проще продемонстрировать что мне нужно.
В общем наследоваться тоже нельзя, нужно чтобы класс возвращал что-то кроме своего экземпляра. Оцени то решение с super() и поясни куда он там сылается плз.
Очень редко.
Например когда надо запоминать строки, какие-нибудь пути к файлам, но в словаре хранить нечего: вместо key:None словаря используешь set.
В смысле ты предлагаешь переехать на другого бота?)
Ну, я читал, что у нормальных людей как раз aiogram используется, но:
1) это займет некоторое время, а с моим уровнем даже чуть больше, чем некоторое
2) хочется все же сделать что-то и заставить работать текущее решение, победить, так сказать.
код давай и выхлоп ошибки. рандомные статьи никто читать не будет. з.ы.: телетон красивее и функциональнее аиограм
Код ошибки
"There is no current event loop in thread 'WorkerThread2'."
Сам код (постарался выделить наглядно)
https://pastebin.com/R3PmfV0c
Решил тут обмазаться телетоном, и чет или лыжи не едут, или я…
А есть пример, как реализовать диалог? Ну, не обработку какого-то сообщения, а цикла этих сообщений?
К примеру, мне нужно задать пользователь несколько вопросов, и на основании этого сгенерировать ответ
Как это реализовать? Как мне сохранить данные пользователя? Словарь не ключом айди пользователя не канает.
Наверняка это как-то по-простому реализовано, но я прямо не нашел ни одного +- похожего решения
Бариста вкатун перекатывал? Так старался, что не указал тэг для каталога доски и теперь этот ИТТ тред не виден из меню поиска по тредам.
Найс джоб.
>Боевые ананасы, как часто вы используете структуру Set в бою и например в каком случае?
Собственно, использую, когда мне нужно буквально иметь список чего-то с возможностью туда что-то добавить, убрать или проверить наличие там соответствующего объекта. Например, использовал в скрипте для решения судоку, чтобы хранить там список возможных значений в ячейке, изначально задаю его в виде "set(chars)", где chars - строка со всеми возможными в головоломке символами (в классике - "123456789"), при проверке ячейки - проверяю его len и, если он больше 1, то запускаю цикл по его содержимому для проверки, ну а при простановке чара - удаляю его из строки, столбца, ячейки.
Этот пример тут это когда я ещё учился начал, для практики написал, опенсорса с тех пор считай не было, по крайней мере такого, где были бы сеты: https://github.com/V-Laeda/sudoku/blob/master/sudoku.py
Тащемта пример... ну, такой себе, мне не очень нравится, как получилось (в первую очередь оформление, но до тюнинга руки не доходят), впрочем по большому счёту иначе эту задачу хуй решишь, она всегда сводится к тому, чтобы мотыляться по трёхмерным таблицам во всех направлениях, так что что-то кроме 7-кратно вложенных циклов это можно реализовать только вложенными методами. Зато очень нравится универсальность, вот она получилась просто ВАХ.
Ты почти видел, что тред почти месяц в бамплимите и не перекатил. А он хотя бы перекатил. Тэги не имеют принипиального значения, но если попросить, модеры могут их добавить.
Телетон это лишь реализация апи телеги, он предназначен для юзерботов, имитации пользователя, минимально поддерживает бот апи, кроме фильтров и тонкой обработки сообщений там нет ничего. А аиограм это уже серьезный комбайн для бот апи с поддержкой собственных фильтров, миддлварей, машины состояний, веб хуков, клавиатур, языков, инлайн запросов, оплаты и тд
https://docs.telethon.dev/en/stable/concepts/botapi-vs-mtproto.html?highlight=aiogram#migrating-from-aiogram
https://docs.telethon.dev/en/stable/concepts/full-api.html
https://tl.telethon.dev/ - тут ищи payment с примерами.
ключевая разница в том, что telethon реализует сам протокол телеги (mtproto) и общение идёт непосредственно с дата центрами, а не с в серверами, которые предоставляют http api для (только) ботов.
q = ("1", "2", "3", "4", "5")
w = (_, *q)
print(w)
как правильно исправить ошибку?
предполагается сделать вывод: ("2", "3", "4", "5")
Это я понимаю, базовая реализация с хегдлерами сообщений и фильтрами, а где всё остальное? Где middleware чтобы удобно и безопасно подключить базу? Где конечные автоматы, чтобы помнить контекст диалога? А колбек кнопки можно в меню собрать чтобы сделать красивый бесшовный интерфейс? Телетон годится как дополнение к аиограму, но никак не замена
Бамп ?
Не поверю, что для создания простого бота с диалогом нужно обмазываться aiogram и телетон не подойдет
Или про примеры с payment - это было мне?
piska = ("хуй", "пизда", "хуй", "идиот просто", "", "")
z = zip(name, piska)
print(z) # ('Вася', 'хуй') ('Маша', 'пизда') ('Иван', 'хуй') ('Петя', 'идиот просто')
for i,j in z: print( i,j )
""" Вася хуй
Маша пизда
Иван хуй
Петя идиот просто
"""
Вот этот for не выводится. Выводится, только если закомментировать строку print(z)
Почему так?? zip одноразовый??
Есть у меня index.hml, в котором есть:
{% for card in cards %}
{% include 'card.html' %}
{% endfor %}
как правильно пробросить данные из card в card.html?
Сейчас я делаю так:
{% for card in cards %}
{% with data=card %}
<div>
{% include 'videos/includes/card.html' %}
</div>
{% endwith %}
{% endfor %}
Без дивов почему то не работает
Это правильно?
Бля, это школьная тема.
Метод работает только с отсортированными данными.
Берёшь и сраниваешь элемент в середине массива.
Если он меньше искомого, все до него отсекаешь и в оставшейся части опять сравниваешь средний элемент.
А если он был больше искомого, то отсекаешь другую половину и в оставшей части опять сравниваешь средний элемент.
Короче говоря, за каждую итерацию ты отсекаешь половину вариантов. И в результате быстро находишь искомы элемент.
Если данные не отсортированы, то этот алгоритм нихуя не работает. Вообще не применим для неотсортированных данных.
Это т.н. бисекция из матана, когда ты делишь интервал пополам и приближаешься к решению уравнений. На этом основан алгоритм бинарного поиска который описал анон выше.
Это реально самое простое что есть, дальше только сложнее будет, не лезь лучше, наверное не твое.
Только в комбинации len(set()) и sorted(set()), когда надо посмотреть на какую-нибудь коллекцию в которой дохрена повторов
>>2993103
то есть конкретно в этом случае тебе надо сделать макрос условно card, который принимает параметр data и делает то, что тебе нужно
{% macro macro_card(data) %}
...
{% endmacro %}
###
{% from 'macro.html' import macro_card %}
{% for card in cards %}
<div>
{{ macro_card(card) }}
</div>
{% endfor %}
Подскажите, как хотя бы это гуглить?
Как можно сохранить состояния между функциями?
Ну, к примеру, если я запрашиваю у пользователя некоторые параметры, у меня же каждая функция ожидает определенное сообщения. Или просто в одной функции все действия делать?
Или на aiogram уйти, пока не поздно?
А как?)
Есть какие-то примеры?, Как это реализовать? Я дебил просто, обезьяна, мне нужен практический образец, чтобы понять
решил проблему так:
w = [z]
print(w) # ('Вася', 'хуй') ('Маша', 'пизда') ('Иван', 'хуй') ('Петя', 'идиот просто')
Может это не по-питонячи?
>не программирование
Да. При чем даже, если ты не сиськи рисуешь, а конкретно в свои слои пытаешься. Чистейшие эксперименты с хуйнёй.
Схемы в ComfyUI интересно составлять, остальное хуйня полная, даже если всё, что оно может дать у тебя получилось сделать - это всё равно никакого счастья не приносит.
Выкатился обратно в веб из этого говна.
Пикча отклеилась.
Моя матрица с перебором всех возможных пар контролнетов.
Осторожно. Этот аутизм затягивает.
Сычев, ты почему в телеграме не отвечаешь?
Отсоси. Делаю оффлафн АРМ работника кассового, postgres и gui разное.
Вы там все обдолбались уже по онлайнам???
Можно ещё делать программы. А не говно онлайновское. Это если уже забыла школота про то, что и такое бывает!
>postgres
Т.е. ты с базой работаешь НЕ через ОРМ? Поздравляю (нет)
>gui разное
Т.е. ты делаешь уёбищный гуй на один разок? Поздравляю (нет)
>АРМ
это на плюсах быстрее работает
>кассового
это онлайн
>программы
Джанга - это ОРМ (postgres) и красивейший и гибчайший вэб-интерфейс (gui разное), который оборачивается под твой дэсктоп кучей разных способов, в одном флаконе. Хочешь - вэб пили, хочешь - оффлафн АРМ работника кассового, postgres и gui разное.
> пилю свои личные говноподелки
Ты буквально заявил на весь двач, что работаешь в трубу и срёшь на голову тому, кто придёт после тебя
Ничего плохого не вижу, чтобы работать с базой на стейтментах, в компаниях редко любят орм
ЛОВИТЕ НАРКОМАНА
Устраиваешься в компанию, а тебе дают вот такие вот поделки и ебись с ними, как хочешь
1) должна быть нормальная документация, и комментарии в коде (если есть выебонные конструкции)
2) должен быть программист-технолог (или как он там зовётся), который именно в курсе технологический процессов, куда и какие данные идут
3) не иди в такие ёбнутые компании где нет п.1 и п.2
>>2994539
сказать нечего?
>>2994542
нахуй мне орм на 1-5 работников-то?? Для повыёбываться какой крутой???
Плюсы-минусы... Я и пишу на пистоне, мне скорость не нужна, это не игрушка какая-то
Кассовое - это НЕ онлайн, идиот, ты тему не знаешь совсем.
въёб интерфейс не так важен, как гибкость формочек (смотри pysimplegui и сравни с ui от PySide и QT !!)
ну заявил, и что страшного-то? Моей поделкой я и мелкая фирма будет пользоваться. Это не коммерч. проект за 100500млрд.
>оффлафн АРМ работника кассового
Который будет стучаться в API через кролика, которое будет стучаться в БД. И серверную часть придётся писать на чём-то типа фастапи/вдаска/джанги.
>>2994542
>Т.е. ты с базой работаешь НЕ через ОРМ? Поздравляю (нет)
Никого не собираюсь ни в чём убеждать. Но я лично, покурив ОРМы, пришёл к выводу, что они в целом неудобны и проще разделить уровни ответственности, если работать с БД через хранимки для записи и вьюшки для чтения. Но у меня важный нюанс: я имею некоторый бэк с базами.
Хранимки и вьюшки означают, что ты размазываешь логику по базе и по коду.
Хранимки и вьюшки это дичайшее легаси тех времен, когда предполагалось, что база будет содержать всю программу, а пользователи будут просто подключаться через консоль. И вот чтобы они не писали ебических запросов, и придумали хранимки и вьюшки.
Короче говоря, за использование вьюшек и хранимок в 2024 надо вырезать ноздри.
>нахуй мне орм на 1-5 работников-то?? Для повыёбываться какой крутой???
Друк, это не так работает. Ты как раз выёбываешься не используя ОРМ. Сегодня у тебя 1-5 работников, завтра (на другом проекте или втором или на этом же) 100 работников, это тебя вообще не ебёт, потому что у тебя везде всегда всё стандартизировано. Даже если тебя не станет, другой челик придёт и моментально врубится в процесс при любом раскладе, а потом ты вернёшься и точно так же врубишься во всё то, что этот челик делал, потому что всё СТАНДАРТНО, а не самописно, в зависимости от настроения и религиозных взглядом
>Кассовое - это НЕ онлайн, идиот, ты тему не знаешь совсем.
Здрасте, ёбана!
Я с гринбоксами работал, у меня по Москве около 300 точек на питерской ферме висят. Попробуй придумать хоть один оффлайн-вариант кассы, что бы чеки можно было официально не выдавать покупателю.
Ну хуй знает, может у тебя какая то древняя касса и она в оффлайне.
>Короче говоря, за использование вьюшек и хранимок в 2024 надо вырезать ноздри.
Иди нахуй. А что, если одни данные во время обновления надо конвертировать в другие данные? Например, точку для геолокации конвертировать в другой формат. Тут и пригодятся хранимые процедуры
>Короче говоря, за использование вьюшек и хранимок в 2024 надо вырезать ноздри.
Это речи современного кодера. Просто от необразванности и незнания, что там на бэке вообще творится и как этим пользоваться.
Что поделать, крудошлёпы - такие крудошлёпы.
>pysimplegui и сравни с ui от PySide и QT
А теперь смотри гибкость формочек на html+css+js
Да, и в дэсктоп твой любимый это добро можно завернуть.
Вот и получилось, что ты ходишь вокруг да около, вместо того, что бы сесть и на джанге это реализовать. При чем познав это однажды, будешь юзать везде и во всём этот один и тот же инструмент.
есть питоновский файл, который надо сделать exe файлом. pyinstaller вроде как справляется, но я использую библиотеку speech_recognizer и он ее найти не может. уже все перепробовал, но не ебу че делать, подскажите
еще пытался просто через командную строку запустить файл, но она тоже ругается из-за threading в коде, но зато speech_recognizer работает нормально
Вообще доля правды в его словах есть. Эти технологии на самом деле придумали в лохматые года, именно чтобы облегчить работу пользователям с сырыми запросами. А если тебе не надо руками запросы составлять, тогда уже потребность сильно меньше.
Больше теоретизирую. Вот вьюшки как минимум позволяют абстрагироваться от конкретной реализации БД, то есть ты можешь что-то внутри переделать, сохранив простой интерфейс без изменений. Правда я сомневаюсь, что с ОРМ это оправдано, ОРМ и так знает структуру базы, а ещё с вьюшкой как-то дружить. И с ОРМ несложно просто метод нужный реализовать, который любой сложности запрос сделает внутри.
Вот хранимые процедуры на продвинутой базе заведомо могут быть полезны, просто для обеспечения целостности данных, чтобы доступ ограничивать к каким-то операциям и таблицам.
Раз уж зашла речь об орм, поясни плиз, а то я ньюфаг.
Вот орм - как я понимаю, она представляет собой надстройку над sql в виде питонового кода - т.е. я могу писать запросы через методы орм-библы. А это работает только в том случае, если базу поднимаю я сам для этого проекта? Если у меня есть какая-то внешняя база, в которую я просто хожу по хттп, орм тоже можно/нужно подключать?
С орм ты один раз пишешь модель, которая описывает таблицу в виде питон класса и дальше всю дорогу используешь эти модели, чтобы управлять записями в базе. За счёт отказа от чистых запросов, кода станет меньше, он будет более читабельным. С другой стороны сам орм бывает трудно готовить, особенно если это алхимия или если ты решил в процессе поменять саму базу, то орм может сломаться или обосрать тебе данные в базе. Палка с двумя концами, оба в говне. Используй орм в личных и небольших проектах смело
Любая ОРМ несколько уровней абстракции даёт.
Вообще главная суть самой технологии в том, чтобы связать классы из твоего кода с таблицами в базе. Ты ведь работаешь всегда с какими-то объектами. А ОРМ позволяет автоматизировать процессы получения-сохранения данных твоих объектов в базе.
ОРМ обычно (алхимия, джанго в том числе) обычно позволяют как полностью автоматический режим, так и тюнинг на высоком уровне, чтобы избежать лишних запросов (prefetch всякие), так и выполнение просто сырого SQL для каких-то запросов.В зависимости от того, что нужно в конкретной ситуации.
>Если у меня есть какая-то внешняя база, в которую я просто хожу по хттп, орм тоже можно/нужно подключать?
Что ты имеешь в виду под "хожу по http"? Там какое-то API уже есть? Тогда ты не прикрутишь ОРМ уже, потому что SQL от тебя спрятан.
>>2996136
вообще смысла в ORM не вижу, если модели для каждого запроса генерируются сами автоматически
вот либа: https://github.com/racinette/querky
Не понимаю что там за поделка, смотрится как попытка создать свою собственную ОРМ
Вообще, в сложном проекте ты или используешь стандартную ОРМ, или изобретаешь свою собственную. Но разумнее освоиться со стандартной.
Потому что они весьма функциональны как минимум. Несложно самому реализовать отображение классов на таблицы и наоборот. Но дальше тебе надо делать связи по внешним ключам, как-то описывать констреины всякие, удаление элементов, сложные поля и другое.
Без ОРМ можно, конечно, иногда так проще, если у тебя своя система классов, которые надо как-то сложно дружить с ОРМ иерархией, известная проблема.
>Который будет
Не будет. БД оффлайн, или по сети, или по инету по статике на роутере. Я на такое количество гигабайт ещё не заработал.
Хуй в пизду, а не жданга. Дерьмовое решение. Будет стучаться postgres по айпи статике. И потом выдаваться по PySimpleGUI
Мозг от фласк и джанга совсем атрофировался??
ты не понял, я делаю десктоп для АРМ работника, типа 1С-склада, если так понятнее. Я не делаю онлайн ОФД сервисы.
Согласен, сегодняшней школоте это уже трудно даётся.
Ну хотя бы попробуйте поизучать тему подсоединения внешних таблиц тогда.
Ты в курсе про офлайн авторизацию?? Хоть на уровне проги, хоть на уровне postgres (БД не важна)! Как это влияет на кол-во юзеров?? Если транзакции правильно написаны.
Ваш этот ОРМ - это просто надстройка, синтаксический сахар, и ВСЁ.
Да, и ещё, стандартизация - это ты загнул, это не к орму, а вообще к культуре написания кода, и к технологу проекта.
Ругается что TypeError: unhashable type: 'memmap'
Ну так я знаю что оно без хеща, меня вполне устроит если идентичность ключа будет сверяться по id объекта пока объект жив. Почему так нельзя?
>Weak references are hashable if the object is hashable. They will maintain their hash value even after the object was deleted. If hash() is called the first time only after the object was deleted, the call will raise TypeError.
>Weak references support tests for equality, but not ordering. If the referents are still alive, two references have the same equality relationship as their referents (regardless of the callback). If either referent has been deleted, the references are equal only if the reference objects are the same object.
Если вкратце: __eq__ там всегда определён, а __hash__ - нет. В питоне фоллбек на сравнение id происходит, только если ни того, ни другого нет.
> Как мне сделать dict в котором ключами будет weakref?
https://docs.python.org/3/library/weakref.html#weakref.WeakKeyDictionary
При чем тут онлайн? Ты можешь пилить ЛЮБЫЕ кастомные формочки, максимально гибкие под десктоп. Так же можешь взять из джанги только drf, если тебе апи нужен или только орм, что бы удобно работать с базой и при этом оставаться в своём десктопе полностью, в оффлайне
> у меня есть какая-то внешняя база, в которую я просто хожу по хттп
Это значит кто то, кто дал тебе апи - настроил у себя на сервере апи (drf) например. Это чужая база, не твоя, ты там и не залезешь со своей орм.
Другое дело, если у тебя есть данные сервера, порта, юзера и пароль конкретно для доступа к базе - то обращаться к базе ты можешь через орм, как и через чистые запросы
Вот все велосипеды блять перепробует, лишь бы не вникать в что то стоящее, потому что СЛОЖНА. Всё равно все дороги тебя приведут в джангу или фастапи. Первое проще.
ты сказал, что не знаешь, что это, а потом накатал дефолтное полотно: "используйте уже готовые ОРМ, не пишите свои"
это не ОРМ, пахомыч, поэтому твои аргументы - говно
орм - это сложно? а, точно, поэтому его советуют любым даунам-вкатусям
может, пора наконец вырасти до SQL?
затем и советуют чтобы дауны своими кривыми ручонками в sql не лезли и не накодили там решето
>>2998068
Посмотрел статью поверхностно, почитал комменты, посыл автора такой, что не осилил ОРМ, решил что-то своё придумать.
Концепт сомнительный. Если у тебя несложная база, то в принципе нормально вообще без ОРМ. На питоне по крайней мере. Когда база большая, то проблема вот эта вот система не решает, которые решаются через обычные ОРМ. Там сразу же говорится, что нет поддержки диалектов разных БД, например.
И нафиг такое нужно? Там много чего ещё нет.
в споре рождается истина, а у твоей мамы родился долбоеб
вся проблема орм в самом орм
ты делать запросы нормально можешь только по таблицам, а про джоины забудь, потому что при джоине, агрегате и ТД (любая человеческая функция sql) рождается другой тип данных
в чем толк костылей, которые пытаются впихнуть "невпихуемое", т.е. результат запроса в объект рекорда таблицы?
мне наоборот кажется, что орм - это для неосиляторов sql, которым обязательно, чтобы все было классом и объектом
либа за тебя пишет код, тебе только sql запрос написать - все. какой функционал ещё нужен? транспиляция на разные диалекты? ну мужик, давай разберём по частям тобою написанное
при поддержке всех диалектов, ты автоматически скатывается до наименьшего общего доступного функционала. сейчас не вспомню год, но отчётливо помню, как на SO видел вопрос, как сделать UPSERT в алхимии. и челы всерьез отвечали, что этого нельзя сделать, потому что в sqlite ещё не завезли. ну и предлагали селект с if not exists инсертом на стороне питона делать. race condition? не, не слышали.
вывод лично для меня ясен: выбери базу postgres, oracle, mysql - похуй. и пиши на диалекте нормальный sql. не еби себе мозги. ты будешь видеть, что исполняется, потому что ты это написал.
orm хоть и покрывает 80% запросов (крудиков), но те 20% (n+1 ам-ням орм абстракция века, течет как мать админа), с которыми ты будешь ебаться с дебагером и логгером - они того блять не стоят. особенно, когда есть такая удобная библиотека, которая тебе тайп хинты автоматически предоставляет прямо из базы.
>ты делать запросы нормально можешь только по таблицам, а про джоины забудь, потому что при джоине,
Как это "забудь про джоины", когда это вообще основная фишка ОРМ, что они сами тебе джоин-запросы составляют? При этом там есть опции, чтобы выбрать нужную политику подгрузки данных, или сразу всё вытянуть, или ленивое вытягивание.
Весь функционал вроде Constraint ОРМ поддерживают. Ну например ты в модели описываешь, что у тебя поле int должно иметь значение от 13 до 666. Как это вот описанные тобой либы поддержат?
ОРМ позволяют тебе на разных уровнях работать, как полный автомат, так ты можешь почти вручную собирать запрос, но абстракциями того же SA, или же вообще raw-запрос, что тоже нормально.
Единственное что, ОРМ на самом деле сложнее голого SQL, тебе надо и SQL знать в любом случае, и ещё изучать ОРМ.
Проблема квалификации и макакинга у джангистов часто наблюдается, просто из-за особенностей джанго и джанго-орм. Хотя ОРМ джанго тоже весьма гибкая и с большими возможностями, просто мало поводов в неё лезть.
1. А чем тебе нормальный мужской джоин не угодил? Зачем его наряжать в платье? Ты гей?
2. Чекайте, что ормщики придумали. CHECK CONSTRAINT называется.
3. Зачем, зная SQL, учить его кастрированную версию? Я что, долбоеб?
4. Вот именно, что туда нужно ЛЕЗТЬ. Не править свои ошибки, потому что ты долбоеб и накосячил. А потому что ИНСТРУМЕНТ за тебя решил, что ты долбоеб, и не умеешь нихуя.
Зачем мне писать руками скл-запросы, ещё и париться с названиями полей в селекте / инсерте / апдейте, когда орм это делает за меня?
Двачую специалиста
> Код ошибки
> "There is no current event loop in thread 'WorkerThread2'."
> Сам код (постарался выделить наглядно)
ошибка говорит, что у тебя нет ивентлупа.
используй синхронную версию telethon:
from telethon.sync import TelegramClient
+ почитай доку как это работает: https://docs.telethon.dev/en/stable/concepts/asyncio.html?highlight=telethon.sync#what-does-telethon-sync-do
совет: перепиши сразу на telethon и забудь про телебота, ну и про asyncio хотя бы офф. доку прочитай
ну ты онлайновый петух - поэтому питон тебя и имеет.
>не может
Хули там мочь то в твоё кутэ. Это просто нахуй не упало, пилить отдельно под десктоп, отдельно под остальное. Типа донт репит ёу селф, если угодно. Или тут даже больше подходит про джаву: один раз написюнькал, запускай везде.
Если вкатываешься в ботов - вкатывайся сразу в асинхронные фрэймворки, типа aiogram.
Того шизика, который "оффлайн-онлайн" не слушай, я так понял, это местный дурачок
ты требования читат? надо обойти ограничение по размеру загружаемых файлов bot api. aiogram не сможет априори, т.к. только под http bot api и заточен.
типа "писю бог создал - теперь тыкай ей в каждую дырку (и в мусорном баке между стенками)"???
Ебааать ты даун. Под каждую задачу - свой инструмент. Нехуй ваш онсрайн вставлять там, где он не нужен.
Блять что? Откуда вы такие берётесь дауны ебучие? Сидит как попугай ебальничек с умным видом открывает, только кроме откровенной афазии высрать не может
не советую юзать питон, даже касаться.
В питоне плохо всё, от экосферы, инструментов, дистрибутивов, безопасности, обновлений до синтаксиса.
Просто лишнее корявое нечто, каким то недоразумением стало популярным, впрочем это совпало с повсеместной деградацией айти в целом.
> Афа́зия или афази́я — это локальное отсутствие или расстройство уже сформировавшейся речи с нарушением восприятия речи при сохранении слуха. Возникает при органических поражениях речевых отделов коры головного мозга в результате перенесённых травм, опухолей, инсультов, воспалительных процессов и при некоторых психических заболеваниях. Афазия затрагивает различные формы речевой деятельности.
что сказать то хотел?
МЯУ. Чем больше опыта набираюсь в программировании тем сильнее меня воротит от пайтона. Максимально уебищное говно
>вывод лично для меня ясен: выбери базу postgres, oracle, mysql - похуй. и пиши на диалекте нормальный sql.
Добрая выснова, але справа ў тым, што калі бізнэс-лёгіка тваёй прылады выкарыстоўвае аб'екты, ты змушаны стварыць свой ORM, кепскі і абмежаваны; альбо ўжываць добры існуючы, адразу з сістэмай кантролю версій.
а цяпер паглядзи на гэтую библиятэку: https://github.com/racinette/querky
гэта не ОРМ, бо ОРМ гауно сабачае
яшчэ вышэй на расейскай можна прачытаць пра прыладу на habr
ОРМ не патрэбны, кали маеш нармальны интэрфэйс да фармавання запытау и атрымання адказау
а кали ня маеш, то згаджуся, што з ОРМам код будзе выглядаць лепей, чым без
насчёт названия полей проблема очень просто решаема теми же автогенераторами моделек из базы. например, sqlacodegen. у тебя полный автокомплит и автоматические аннотации типов. а этого нет ни в одной ОРМ.
джавист обиделся
>sqlacodegen
Но это надстройка над алхимией.
>у тебя полный автокомплит и автоматические аннотации типов
Мне проще декларативный маппинг копи-пастом сделать, скопировав из дбивера схему бд.
>чтобы доступ ограничивать к каким-то операциям и таблицам
Кстати, да. ИБ. Не столько И, сколько Б: можно закрыть вообще доступ к реализации хранения данных.
>>2998593
>париться с названиями полей
Зачем?
>>3000848 >>3001082
Ваше мнение очень важно для нас. Так приятно смотреть на полыхающие жопы с доставкой в тред.
я тебе либу скинул, которая за тебя весь код перегенерирует под новую схему, о чем ты?
потому что твоя мама попросила принести питона, чтоб в очко ей запихать
уже бульба с цебулей в пизде у нее лежат
Не, это хоть и не питон, но если бы это было про джаву, то там было бы еще: "писать дохуища сахара и говна, а оно потом еще и не работает с полоборота"
С этим можно где то работу искать или мало?
(Понятно, что всю эту сопутствующую хуйню гит, хуит, свою часть скуэля знаю)
На Kwork часто требуются ребята умеющие писать парсеры. Был кейс, когда требовалось вытаскивать результаты баскетбольных матчей на американском сайте, где используется примитивная таблица html, нужно вытащить все игры из разных лиг, женских, мужских, студенческих. Заказчик занимался ставками, данные потом через калькулятор прогоняли.
как будто на галере спрашивать будут а чего Владик хочет писать а какую кашку он любит а попочку ему не подтереть
Зачем отдельная надстройка над либой для этого, когда хватает функционала либы?
Т.е. в случае внесения изменений надо лезть сначала в код проекта, а потом ещё и в базу. Спасибо, в 2 раза больше работы делать не хочу.
>сначала в код проекта, а потом ещё и в базу
Нет. Сначала в код ликвибейза, а потом - возможно, в код проекта.
576x1024, 1:18
Мнения? Что более перспективно?
А чел походу вкатун и никогда не работал - после уязвимости в джавовой либе в 2021 (https://nvd.nist.gov/vuln/detail/CVE-2021-44228) весь джавовый туллинг забанен для использования в нормальных конторах.
Я закручиваю гайки разводным ключом, а не таскаю под каждый диаметр отдельный ключ.
>примитивная таблица
Блин, это изично вообще. В любую структуру вытащу даже динамичный одностраничник-приложение.
>Kwork
Спасибо
да нет, ты швейцарским ножиком пользуешься как раз, мультитулом
ага, а после heartbleed никто не пользуется OpenSSL и не пишет на С
ага, а после heartbleed никто не пользуется OpenSSL и не пишет на С
https://www.online-python.com/87Mvbr0Zh1
Дано: [1, 2, 3, 4, 5, 6, 7, 8, 9]
Нужно: [100, 200, 300, 400, 500, 600, 700, 800, 900]
Ошибка TypeError: unsupported operand type(s) for *: 'NoneType' and 'int'. Причина понятна, асинхронная функция пыталась работать раньше чем закончила работать предыдущая функция, готовящая данные.
Тебе надо добавлать примитивы синхронизации
Например семафор
https://docs.python.org/3/library/asyncio-sync.html#asyncio.Semaphore
идея в том, что есть специальный объект, который лимитирует использование какого-то ресурса. Ты проверяешь значение этого счётчика, если он больше нуля, то используешь ресурс, если ноль, то ждёшь, пока этот счётчик кто-то не увеличит
метод acquire() запрашивает счётчик, уменьшает его значение на единицу и блокирует, если счётчик 0
метод release() увеличивает счётчик
там можно через with с этим работать, но это для других сценариев, не твоего
Идея в том, чтобы создать семафор с исходным значением 0 (по-умолчанию 1), передать в оба сервиса
В первом сервисе, как ты посчитал элемент, ты увеличиваешь счётчик через release(), во втором сервисе ты перед каждым вычислением делаешь await sem.acquire(), то есть ждёшь, когда ресурс станет доступным
> Тулза написана на неправославном языке, поэтому я против!
>>3002066
> ТАДА, ТРИ ГОДА НАЗАД БЫЛА ДЫРКА! Поэтому навсегда запрещено использовать абсолютно любые смежные проекты даже в контролируемой среде.
Чувак, у меня оно пускается в инит-контенерах независимо ото всего вокруг, меня даже уязвимые версии не зацепили бы, а с учётом того, что оно давно пофикшено - вообще не важно.
Собственно точно так же если всплывёт какая-нибудь уязвимость в питоне 3.9, например - я не прекращу писать на Питоне
М-м. Когда-то, на заре проекта я даже писал свою систему миграции схемы. А потом просто выяснилось, что система с точно такой же логикой уже реализована, отлажена и сделана удобно, с тех пор я переехал на LB.
>>3002057 >>3002526
Из этих двух я скорее адепт раста. Но не уверен, что есть смысл уходить на бэке от питона. Когда говорят "питон медленный" нужно внимательно выяснять, в чём именно и, например, в нём медленная математика, но она в проде никому почти не нужна, а когда время на бэке раскладывают выясняется, что I/O-bound >> CPU-bound то есть на фоне задержек получения данных от внешних API или БД всякие "медленные" или "быстрые" генерации вообще на уровне погрешности, зато на питоне пишется быстрее, чем на любом более высокоуровневом ЯП.
Если же хочешь сменить предметную область... То там много нюансов. Например, там, где я работал - везде - были важны результаты и какой ЯП ты используешь не так важно потому что проектов больше, чем людей и как правило оказывается, что нет такого, как у гигантов, когда десяток кодеров пилит разные фичи в одном проекте, а есть 1-2 проекта на разраба и каждый использует то, на чём покажет лучший результат, а передача происходит слишком редко, чтобы особо париться.
Спасибо, но ведь всё равно сказанного тобой недостаточно.
Семафор позволит знать сколько "спелых" объектов в списке, но не скажет какие именно. Ошибка возникает именно когда stage2() берётся за "неспелый" объект, т.е. прошедший stage1(). И семафор этого непредотвратит.
Мне решение видиться в присвоении неспелым объектам значения типа "futures". И надо чтобы stage() наткнувшись на это ждала не блокируя.
Эй опище, беги в \d просить чтобы в твою шапку тег навигации добавили, который ты проебал. Люди до сих пор в старый тред пишут.
>Семафор позволит знать сколько "спелых" объектов в списке, но не скажет какие именно
В твоём коде цикл, где объекты обрабатываются последовательно. Соответственно достаточно знать сколько объектов в списке, чтобы знать, что обработано, а что нет.
Если хаотичный порядок возможен, то в твоей задаче надо бы чего-нибудь вроде
rand_data = data[:]
random.shuffle(rand_data)
for obj in rand_data:
...
>futures
Если каждый объект независим, то вариант. Но в целом есть стандартная рекомендация не использовать низкоуровневые объекты вроде futures, они для написания библиотек, а не конечного кода. В конечном коде лучше тогда asyncio.Event
Вообще я бы в таком варианте тогда другой подход применил. Ты создаёшь очередь asyncio.Qeuee, шаришь её между двумя сервисами.
Первый сервис, как обработает объект, кладёт или объект, или его номер, в очередь. А второй сервис просто слушает очередь, как только в ней что-то появится, то обрабатывает.
Это вообще наиболее функциональный паттерн, очереди, очень много для чего можно использовать. Фактически Queue это такой универсальный механизм синхронизации, любой другой можно реализовать через очереди
в моём коде await asyncio.sleep(random_time()), что как бы намекает объект #1 может обработаться после объектов #2,3. Счётчик в семафоре скажет "обработано 2", по твоему предположению это #1,2 но практически из-за разного времени на обработку окажуться другие.
На данный момент я приспособил семафор лишь для ограничения конкурентности в stage1() https://www.online-python.com/53DjJbNiBL
эта реализация подходит только для обработки неизменного списка. Теперь хочу для изменяемого списка, т.е. функции stage1() и stage2() будут в ходе работы добавлять заданий друг другу.
>создаёшь очередь asyncio.Qeuee, шаришь её между двумя сервисами
Иммешь в виду шаблон проектирования producer-consumer? Вот его реализация: https://www.online-python.com/XbGpJzNFU2
Проблема в том, что, когда очередь пустая, consumer() застревает на obj = await data.get(). Программа подвисает и никогда не заканчивается.
>в моём коде await asyncio.sleep(random_time()), что как бы намекает объект #1 может обработаться после объектов #2,3.
Не может, в каждом сервисе (stage1, stage2) выполнение строго последовательное. Иначе тебе надо запускать для каждого элемента свою задачу. random даёт то, что stage2 может попросить элемент раньше, чем он был посчитан stage1. Но порядок заведомо определён.
>>3003850
>Имеешь в виду шаблон проектирования producer-consumer?
Да, в целом это. Паттерн намного шире, сам по себе подход позволяет сделать логику кода значительно стройней.
Что касается завершающего этапа, я лично в таких случаях посылаю в очередь значение-терминатор, как вариант None,
Соответственно ты при получении значения просто проверяешь на None (или что-нибудь ещё, если None допустим по логике), и когда None, прерываешь цикл обработки.
>>3003809
>Теперь хочу для изменяемого списка, т.е. функции stage1() и stage2() будут в ходе работы добавлять заданий друг другу
В таком варианте сам бог велел использовать очереди
Там бывают более извращённые варианты закрытия задач, в случае Queue можешь глянуть на join()/task_done(), но это имхо для других сценариев, когда мастер-процесс есть, который массово кормит консумеров и контролирует, кто сколько сделал, и он же отвечает за то, чтобы отменять консумеров. По мне значение-терминатор самое универсальное решение
>в случае Queue можешь глянуть на join()/task_done(), но это имхо для других сценариев, когда мастер-процесс есть, который массово кормит консумеров и контролирует, кто сколько сделал, и он же отвечает за то, чтобы отменять консумеров
В принципе именно эта схема приведена в документации
https://docs.python.org/3/library/asyncio-queue.html
но вариант со значениями-терминаторами мне обычно нравится больше.
В примере просто цель такая, чтобы подождать, когда всё выполнится, и только после этого делать что-то дальше.
Собственно хватило меня на следующий говнокод или его почти полное отсутствие, и не могу понять как подступиться к самой функции, как написать вот эту самую "сменяемость"? Помогите пожалуйста
Код: https://www.online-python.com/CD1F07E8Qb
Ну-ка глянь и прокомменти. Тут использована Queue. Можно как-то улучшить?
https://www.online-python.com/LyeSRkO5jI
options = {"opt1": "foo", "opt2": 2, "opt3": repr(None)}
"{opt1} {opt2} {opt3}".format(options)
>Недавно открыл для себя существование людей которые хейтят f-строки и вместо них .format() используют
Много хейта было, когда из вводили, потом все привыкли
Серьёзный упрёк в том, что смешивается код и представление, что антипаттерн. Ты внутрь f-строк можешь встраивать какой-то значимый код, вплоть до вызовов меняющих контекст функций и другого. В общем скользкая дорожка, особенно когда нет культуры кодирования адекватной.
Из плюсов обычных строк: ты их можешь вынести в специальный конфиг, а в коде использовать по ссылке. А конфиг подключать разный, например разные языковые версии использовать.
В целом думаю, борьба против f-строк сами по себе необоснована, надо бороться с какими-то неправильными паттернами их примерения, а если надо будет вынести строки за код, то рефакторинг в format очень прост.
>Ну-ка глянь и прокомменти. Тут использована Queue. Можно как-то улучшить?
Смотрится рабочим для данного варианта, но и опасным при этом. Вот это вот прерывание цикла:
> while not queue.empty():
Не в этом варианте, но в аналогичный, более сложных, можно словить race condition
Во-первых в этом контексте опасен
await queue.put(obj)
тут надо думать, реально ли это, но по идее возможна история, когда ты начнёшь класть что-то в очередь, в этот момент планировщик переключится на главный worker, тот увидит, что очередь пуста, и завершит своё исполнение. Только потому, что ты не успел что-то добавить в очередь.
Мой совет, используй всегда синхронный вызов
queue.put_nowait()
он работает быстрее, нет рисков описанных. Единственное, он не пригоден, когда у тебя лимитированная очередь, может заполняться и тебе надо ждать, пока место освободится, но так в реальности не пишут.
Второе, представить, что ты используешь эту логику для более сложных случаев. Эту логику в том смысле, что у тебя stage-воркеры заполняют ту очередь, из которой читают потом другие. У тебя stage1 может порождать, скажем, не один объект, а десять. Что вполне себе нормальное поведение. Хотя вот тут как раз могут понадобиться очереди с ограничением.
В этом случае, скажем на первом этапе, у тебя 10 worker'ов, и всего 3 значения исходных в очереди. В результате пока эти три значению будут обрабатываться, очередь опустеет и все незадействованные воркеры будут прибиты. А потом очередь заполнится 30 объектами, на их обработку останется только 3 воркера. Тут put_nowait уже не спасёт
В общем такая стратегия прибития воркеров опасна. Надёжнее их прибивать все вместе после того, как работа будет сделана.
дополню ещё
очень опасное и сложное поведение, когда у тебя работа одного воркера зависит от результата его же работы
например, когда у тебя воркер читает и записывает в одну очередь, при этом внутри есть блокировки. Можно словить dead lock очень легко
В идеале надо как-то убирать обратные связи, это страхует от dead lock'ов. Тут надо думать про каждый конкретный случай
не, ну если даже с такой хуйнёй не справляешься - может твой папка бы лучше с занавеской справился бы?
Ну не твоё это, брось нафик.
f-строки более нагляднее, для меня имхо. Пусть и приходится применять фигуристые скобки, но видны переменные, и меньше писать кода, с точками и функцией формат.
п.с. Везде их пользую. понимаю и другой формат, но его ненавижу, не знаю почему.
я всё еще рассматриваю ваши предложения.
(SELECT cp.placeid FROM cpoints cp WHERE cp.id = h.pointid)
?
постгрес БД.
SELECT t.id, t.hw, t.dt_start, t.dt_stop, t.descr,
h.uid, h.model, h.pointid, h.kassid, h.kind,
(SELECT cp.clientid AS _clientid FROM cpoints cp WHERE cp.id = h.pointid),
(SELECT cp.name _cpointname FROM cpoints cp WHERE cp.id = h.pointid),
(SELECT cp.placeid FROM cpoints cp WHERE cp.id = h.pointid),
(SELECT plc.uid FROM cplace plc WHERE plc.uid = (SELECT cp.placeid FROM cpoints cp WHERE cp.id = h.pointid)),
(SELECT plc.name FROM cplace plc WHERE plc.uid = (SELECT cp.placeid FROM cpoints cp WHERE cp.id = h.pointid)),
(SELECT plc.adr FROM cplace plc WHERE plc.uid = (SELECT cp.placeid FROM cpoints cp WHERE cp.id = h.pointid)),
(SELECT plc.comment FROM cplace plc WHERE plc.uid = (SELECT cp.placeid FROM cpoints cp WHERE cp.id = h.pointid))
FROM spr_to t, hardwares h WHERE t.hw = h.uid;
В части (SELECT plc.adr FROM cplace plc WHERE plc.uid = (SELECT cp.placeid FROM cpoints cp WHERE cp.id = h.pointid)
SELECT t.id, t.hw, t.dt_start, t.dt_stop, t.descr,
h.uid, h.model, h.pointid, h.kassid, h.kind,
(SELECT cp.clientid AS _clientid FROM cpoints cp WHERE cp.id = h.pointid),
(SELECT cp.name _cpointname FROM cpoints cp WHERE cp.id = h.pointid),
(SELECT cp.placeid FROM cpoints cp WHERE cp.id = h.pointid),
(SELECT plc.uid FROM cplace plc WHERE plc.uid = (SELECT cp.placeid FROM cpoints cp WHERE cp.id = h.pointid)),
(SELECT plc.name FROM cplace plc WHERE plc.uid = (SELECT cp.placeid FROM cpoints cp WHERE cp.id = h.pointid)),
(SELECT plc.adr FROM cplace plc WHERE plc.uid = (SELECT cp.placeid FROM cpoints cp WHERE cp.id = h.pointid)),
(SELECT plc.comment FROM cplace plc WHERE plc.uid = (SELECT cp.placeid FROM cpoints cp WHERE cp.id = h.pointid))
FROM spr_to t, hardwares h WHERE t.hw = h.uid;
Пиздец как я обожаю f-строки!
1. Вставка значения переменной в строку:
name = "Alice"
age = 25
print(f"My name is {name} and I'm {age} years old.")
# Вывод: My name is Alice and I'm 25 years old.
2. Вычисление выражений внутри строки:
a = 4
b = 6
print(f"The sum of {a} and {b} is {a + b}.")
# Вывод: The sum of 4 and 6 is 10.
3. Форматирование чисел:
pi = 3.14159
print(f"Value of pi: {pi:.2f}")
# Вывод: Value of pi: 3.14
4. Выполнение вызовов методов объектов внутри строки:
message = "Hello, World!"
print(f"{message.upper()} is {len(message)} characters long.")
# Вывод: HELLO, WORLD! is 13 characters long.
5. Использование условных выражений:
is_raining = True
print(f"It's {'raining' if is_raining else 'not raining'} today.")
# Вывод: It's raining today.
6. Использование словарей для вставки значений:
person = {"name": "Bob", "age": 30}
print(f"{person['name']} is {person['age']} years old.")
# Вывод: Bob is 30 years old.
7. Экранирование фигурных скобок:
name = "John"
print(f"{{ {name} }}")
# Вывод: { John }
Пиздец как я обожаю f-строки!
1. Вставка значения переменной в строку:
name = "Alice"
age = 25
print(f"My name is {name} and I'm {age} years old.")
# Вывод: My name is Alice and I'm 25 years old.
2. Вычисление выражений внутри строки:
a = 4
b = 6
print(f"The sum of {a} and {b} is {a + b}.")
# Вывод: The sum of 4 and 6 is 10.
3. Форматирование чисел:
pi = 3.14159
print(f"Value of pi: {pi:.2f}")
# Вывод: Value of pi: 3.14
4. Выполнение вызовов методов объектов внутри строки:
message = "Hello, World!"
print(f"{message.upper()} is {len(message)} characters long.")
# Вывод: HELLO, WORLD! is 13 characters long.
5. Использование условных выражений:
is_raining = True
print(f"It's {'raining' if is_raining else 'not raining'} today.")
# Вывод: It's raining today.
6. Использование словарей для вставки значений:
person = {"name": "Bob", "age": 30}
print(f"{person['name']} is {person['age']} years old.")
# Вывод: Bob is 30 years old.
7. Экранирование фигурных скобок:
name = "John"
print(f"{{ {name} }}")
# Вывод: { John }
5 и 6 удобнее через .format
Да действительно, спасибо
Джеймс Пауэлл неплохо рассказывает, хочу есчо.
Просто .py скриптами с requirements, как на гитхабе или заворачиваете во что то экзешное\эсашное для заказчика?
Например сейчас при создании venv я вижу что создается директория pypa не там где я бы хотел ее видеть. И при установке pip (через get-pip.py) директория pip тоже создалась не там куда я хотел бы ее поместить. Или опять же при установке pip я вижу что инсталлятор насрал мне в /appdata/local/temp, чего я хотел бы избежать и заставить срать его в строго определенную директорию.
Нувыпонели о чем я, да?
Мимо неудачный вкатун в android kotlin, вакансий 0
Если есть хоть какой-то опыт, то лучше Java/C#.
Если нет вообще опыта, то вкатывайся куда хочешь, один хуй надо будет конкурировать с такими же тысячами, как ты.
хуёвая идея. вкатись в говнокод на Си, бейсик, ассемблер Z80
Например у вас объекты дохуя жрут, one simple trick и уже терпимо. Продолжение в источнике...
У меня массивы чисел с очевидным нампаем, но до него числа надо доготовить.
>>3014907
Читал гайды про работу питона с памятью, но они довольно поврехностны. Действительно остаётся RTFM.
>>3015167
Плавали, знаем, с интересом читаем про приколы типа обратного вычисления квадратного корня и другой дрочь. В работе не пригождалось.
Подскажите, тут есть помидоры? Или хотя бы прошаренные миддл+?
Я бы был рад, если бы настоящий томат вчитал несколько моих поделок, чтобы обсудить с ним логику и понять, как делать правильно и избавиться от говнокода. Причем, для меня важнее не отрефакторить код, для меня - важно понять, как делать правильно в будущем, так что будет немало вопросов типа "зачем это?" и "почему именно так?"
Готов заплатить, если надо (не сотни нефти, правда).
В общем, кидайте фейкомыльце, я напишу, авось договоримся до чего.
У меня embedded python если что, поэтому и хочу заизолировать его в пределах одной директории, да еще и на флешке таскать, для запуска используя batch с назначением переменных в пределах сессии.
Ссылку оставь и всё на репу, кто-нибдуь глянет, если не лень будет.
Никаким прошаренным твои 500 рублей не нужны.
На один реп я выкладывал, но никто не вчитал, там много возни для мимоходом вброшенного поста и он очень учебный.
Второй - не в опенсорсе, на меня по работе повесили не совсем профильную задачу. NDA не строгий: релизы открываются, но релиз отстаёт от репы уже на пару месяцев, а кидать пока ещё закрытый код в паблик - это всё-таки перебор.
> прошаренным твои 500 рублей не нужны.
Ну, такое... Я, конечно, надеюсь, что найдётся тот, кто оценит моё искреннее желание стать лучше и поможет.
Но если нет, то я полагал, что речь о сумме более сопоставимой с ценой, например, бутылки бушмилса, или что такой человек посчитает адекватной наградой.
Но для чего там аж 7 разных вариаций, ума не приложу.
Надо, что бы при добавлении карты карта добавлялась, а автор, если такой уже есть, пропускался. Как сделать?
Отбой. Нашел косяк. Это я в коде описАлся просто.
@спрашиваю про джанго ОРМ (чисто питонячья хуйня)
>джанга говно, чистый скул рулит!
@спрашиваю про чистый скул
>Тред про язык программирования Питон.
И что блять, теперь хэлло ворлд мне писать на питоне?
Да нахуй ты не нужен со своими тупорылыми вопросами. Открывай документацию на python.org, и вычитывай свою хуету.
> У меня embedded python
Соболезную.
> спрашиваю про джанго ОРМ
В твоих постах ни слова про этот фреймворк.
> спрашиваю про чистый скул
Какой скул? Ты ебанашка?
> И что блять, теперь хэлло ворлд мне писать на питоне?
Напиши программу, которая заставит тебя съебать отсюда.
Я вообще нихуя не понимаю, ну прикрутил я к апи типа чтобы запрос шел в сессию рабита, ну увидел этот запрос на дашборде когда его дернул, а как проверить что он на самом деле не параллельно прошел? И в раббит и в бек. Потому что к примеру я когда запрос дергал в постмане обращался по адресу бека, а не раббита. Как это работает? я гуглил, но заебался уже, вдруг тут есть добрые аноны которые подскажут
Сделай сервис-прокладку, которая будет получать события из кролика, а затем передавать их на бек твоего приложения.
Блин а есть примеры на гитхатбе где это реализовано примерно простенько? Я найти не могу, гуглю уже неделю....
Что именно реализовано? Тебе надо настроить кролика, рядом с ним поставить сервис (асинхронный), который будет по соответствующим роутам принимать от кролика сообщения. Далее этот сервис просто должен постухой отсылать жсончики на твой целевой бек.
Да я нихуя не понимаю момент что значит поставить "рядом сервис который будет принимать от кролика сообщения"
Это что, типа копия бека, только с mock-запросами? Как оно будет принимать от кролика сообщения и передавать на другой бек?
Просто сделай
Если ты задаешь такие вопросы, то ты по-моему не выкупил, как работать с кроликом, хотя вроде начал вопрос с того, что уже что-то там прикрутил к апи.
У них прям на сайте все есть:
https://www.rabbitmq.com/tutorials/tutorial-one-python.html
https://www.rabbitmq.com/tutorials/tutorial-two-python.html
https://www.rabbitmq.com/tutorials/tutorial-three-python.html
Тебе надо сделать продьюсера (клиент, сообщения которого будут класться в очередь - на практике это может быть какой-нибудь вебхучок).
Тебе надо настроить кролика - добавить очередь queue, добавить обменник exchange, добавить биндинг binding - это будет ядро твоего кролика.
Тебе надо сделать консьюмера - т.е. твой целевой сервис, который будет работать с полученными из очереди данными.
Консьюмер при этом можно разделить на две отдельных прилаги - первая прилага имеет коннект с кроликом, валидирует все данные, имеет кучу роутов на каждую очередь и т.д., а вторая прилага уже непосредственно выполняет бизнес-логику (таких "вторых прилаг" может быть десяток, если у тебя микросервисная архитектура, а вот "первая прилага" будет одна - она чисто аккумулирует всю логику общения с кроликом).
Как научить продьюсера класть сообщения в кролика и как из кролика получать сообщения в консьюмере - описано в тех трех линках.
Связь между "первой прилагой" и "второй прилагой" - первая прилага просто вычитывает сообщение из очереди и отправляет POST-запросом на нужный эндпоинт второй прилаги.
Спасибо что разжевал. Буду пробовать.
берешь абсолютное позиционирование, зная угол и удаление числа от центра, рассчитываешь смещение по х и у через синус и косинус, по координатам ставишь элемент, повторяешь по всей длине каждой стрелки в цикле
Я еще погуглил, набрел на https://refactoring.guru/ru/design-patterns - но тут про MVC вообще не упоминается например.
Это хуйня, тут всего 60 возможных углов. Были бы круче, если бы стрелки с большим разрешением двигались не с 1 сек таймером, а постоянной перерисовкой.
Выглядит как извращение. RabbitMQ и есть сервис-прокладка. Например, между фронтом и бэком.
Если вы хотите предотвратить экранирование и сохранить стили CSS в вашем блоке, вам может потребоваться другой подход. Один из вариантов - использовать фильтр safe только для содержимого блока, где это абсолютно необходимо, а для остального содержимого использовать экранирование по умолчанию:
<div class="my-block">
{{ my_content|safe }}
</div>
ть пути, после чего повторите попытку.
И ведь для интерпертатора все ставлю, а оно все равно, как на зло не работает и продолжает выдавать. Каждый раз чисто каким то чудом начинает запускаться все
Самый идеологически верный из них - второй, через лист компрехеншн (через компоновку), а третий - вообще наверняка добавлен для юмора и странно, что не в одну строку типа такой:
> list(''.join(['a','v','b']).replace('v', 'V'))
Для фронта есть реакт
Когда верстали фронт на Джанго, ты ещё не родился.
> фронт на жанге
> прокладка между фронтом и БД
> Для фронта есть реакт
Ты откуда такой вылупился? Понахватался умных слов, поросёночек и пришёл елдой махать.
Какой модуль лучше всего для этого взять по вашему мнению в силу вашего опыта, мой же критерий только один - чтобы просто было разобраться с порога, без вычитки мануалов для простейших функций. Встроенный tkinter? Какие подводные камни? Может что-то попроще получше да покрасивее?
Делал софт с gui только однажды для юпитера на ipywidgets но там было полторы кнопки и четыре вкладки так что наверное не считается.
А, да, ОС - винда.
Любой, который отвечает твоим требованиям, которые ты не указал. В любом случае, лучше сразу Pyqt брать, информации по нему море
> для чего там аж 7 разных вариаций
Ну вот смтори допустим есть две таблицы и в каждой по 1000 записей и они пронумерованы от 0 до 999 и номер записан в поле id. Очевидно есть единственный способ собрать попарно записи с одинаковым номером, их всегда будет ровно две одна с одной стороны и одна с другой.
В общем случае может быть что в одной из таблиц какие-то номера отсутствуют. Или повторяются. Тогда разумных способов собрать вместе записи с одинаковым номером становится несколько. Например мне может быть удобнее чтобы вернулись только пары, где номер нашелся в обеих таблицах. А может быть чтобы вернулись все строки из левой таблицы, и там где в правой таблице совпадающего номера не нашлось чтобы стояло None. То есть зависит уже от логики задачи и смысла таблиц.
> мой же критерий только один - чтобы просто было разобраться с порога, без вычитки мануалов для простейших функций.
>>3024501
> Любой, который отвечает твоим требованиям, которые ты не указал.
таки указал
>В любом случае, лучше сразу Pyqt брать, информации по нему море
pyqt - ваще не про разобраться с порога.
>>3024355
> Аноны, хочу наговнякать для себя некоторый софт с gui.
бери tk
tkinter бери
в официальной документации все есть с примерами
https://docs.python.org/3/library/tkinter.html#a-hello-world-program
От проверенных камрадов слышал, что в Питоне-3000 словари летают как птицы, даже быстрее списков, задыхаясь от жадности немедленно записал каждую строчку в словарь. Ключ: строка из файла, значение - true\false.
Смотрю в память: ну и ну, размер - мое почтение. Сраный текстовый файл занял 200 мб оперативы в форме словаря.
Ну что с этим говном делать? Списки получается надо использовать в таких случаях?
список кортежей(tuple,named tuple) или datadict со slots. все изменяемые структуры данных - прожорливые. как вариант можешь обрабатывать значения по мере поступления, выгребая итератором
Надо постоянно чекать какие файлы есть, они все должны быть в памяти.
Ты ебанутый? Иди нахуй
Я сейчас Flet раздупляю. После недельного перебора всего, что есть, мне этот лучше всего подходит.
0. документашка имеет тёмную тему
1. нормальная документашка с примерами кода и результата для самых даунов
2. относительно пиздатая мультиплатформенность
Я заебался придумывать, как свитч в таблицу вставить. Как то урезанно, кастомизируется буквально в 4 более менее современных темы (а разница там между ними в цвете ползунка, синий или зеленый) и точка.
> def func(param: str) -> str:
> ....if param = "1":
> ........return f1()
> ....if param = "2":
> ........return f2()
> ....if param = "3":
> ........return f3()
> и т.д., там много опций.
> ....return ""
Хочу его привести к более вменяемому виду, например, как советует пайлинт:
https://pylint.readthedocs.io/en/latest/user_guide/messages/refactor/too-many-branches.html
Что-то типа:
> def func(param: str) -> str:
> ....return {"1": f1, "2": f2, "3": f3}[param]()
Это работает. НО! Я не могу понять, как по дефолту вернуть пустую строку.
Вижу два варианта:
1. Написать функцию, возвращающую пустую строку и передать её как вариант по-умолчанию:
> def empt():
> ....return("")
> def func(param: str) -> str:
> ....return {"1": f1, "2": f2, "3": f3}.get(param, empt)()
2. Ловить эксцепшн:
> def func(param: str) -> str:
> ....try:
> ........a = {"1": f1, "2": f2, "3": f3}[param]()
> ....except KeyError:
> ........a = ""
> ....finally:
> ........return(a)
Оба способа мне не слишком нравятся. Что думаете, как лучше поступить?
> def func(param: str) -> str:
> ....if param = "1":
> ........return f1()
> ....if param = "2":
> ........return f2()
> ....if param = "3":
> ........return f3()
> и т.д., там много опций.
> ....return ""
Хочу его привести к более вменяемому виду, например, как советует пайлинт:
https://pylint.readthedocs.io/en/latest/user_guide/messages/refactor/too-many-branches.html
Что-то типа:
> def func(param: str) -> str:
> ....return {"1": f1, "2": f2, "3": f3}[param]()
Это работает. НО! Я не могу понять, как по дефолту вернуть пустую строку.
Вижу два варианта:
1. Написать функцию, возвращающую пустую строку и передать её как вариант по-умолчанию:
> def empt():
> ....return("")
> def func(param: str) -> str:
> ....return {"1": f1, "2": f2, "3": f3}.get(param, empt)()
2. Ловить эксцепшн:
> def func(param: str) -> str:
> ....try:
> ........a = {"1": f1, "2": f2, "3": f3}[param]()
> ....except KeyError:
> ........a = ""
> ....finally:
> ........return(a)
Оба способа мне не слишком нравятся. Что думаете, как лучше поступить?
Видимо, надо было сразу делать:
Оригинальный код:
https://www.online-python.com/uTfKykecax
Через дополнительную функцию:
https://www.online-python.com/41cnHRrj39
Через трай:
https://www.online-python.com/u0m4bsTBgP
Твой же код возвращает не строку, а функцию для тех случаев, которые обрабатываются явно и нормально получается только возврат пустой строки:
https://www.online-python.com/Ao6xJ92cys
А если вернуть скобки, то сломается код на параметрах, обрабатываемых неявно, через другие параметры (например, представь, что параметр "4" есть, но его значение получается вместе со значением параметра 3 в функции f3) потому что "TypeError: 'str' object is not callable":
https://www.online-python.com/wNehPvp6mj
Я на полном серьёзе рвусь от того, что дауны из стэковерфлоу и хабра до сих пор не добавили ссаную переключалку на дарк тему. У меня буквально всё остальное тёмное и приходится переписывать и подменять локально цсски, иначе глаза выгорают
Хм-м. А ведь мне необязательно добавлять новую функцию. Ведь есть встроенная функция 'str':
https://www.online-python.com/drOC5tk192
Хотя код получается неочевидным и как работает get в данном случае не слишком понятно с одного взгляда...
На СО есть тёмная тема. Нужно залогиниться просто.
>>3025437
Ладно, вот еще аргумент: Там есть хот релоад прям искаропки.
flet settings.py -d
и ты видишь все изменения сразу при каждом Ctrl+S
при чем параметр -d отслеживает всю директорию
Из минусов - я так понял, что нельзя собрать отдельно кнопку, а потом её импортировать в форму отдельным файлом, типа как в реакте.
ты какую-то натуральную хуйнж делаешь чел. Вот твоё уродство, держи и никогда так не делай.
return {"1": f1, "2": f2, "3": f3}.get(param, str)()
Есть база с 1000 записями.
Как подтягивать вместо сгенерированных строк запрос, точнее, как правильно запрашивать данные из базы, что бы они по порядку по 10 штук запрашивались?
Сейчас бы бредни агрессивного вкатуна дальше первого предложения читать...
Мерси. Перечитаю и примеряю к задаче в этом и других местах, просто вот:
>>3026022 >>3026022
Тащемта матч-кейс это ни хухры-мухры, это вам не банальный свич-кейс, это ниибацца паттерн-матчинг (см. пеп: https://peps.python.org/pep-0622/ ), помню поковырялся с ним, читал пепы, но почему-то пришёл к выводу, что нинужно на подобных кейсах. В основном потому, что он мягко говоря не для того, чтобы сравнивать переменную со значениями, это его побочное умение.
Например, можно посмотреть тут: https://habr.com/ru/articles/585518/
Впрочем, как раз в данной он по крайней мере не агрит линтер, значит разрабы считают его валидным выходом.
>>3025996
> твоё уродство, держи и никогда так не делай.
> return {"1": f1, "2": f2, "3": f3}.get(param, str)()
Это я уже сделал, в том же посте написано, почему мне это не нравится:
>>3025812
> Ведь есть встроенная функция 'str':
> код получается неочевидным и как работает get в данном случае не слишком понятно с одного взгляда
>>3026004
ВАХ! Спасибо. Первый раз (почти) вижу, чтобы лямбда на живых примерах, а не в какой-то абстрактной задаче так хорошо вписалась в код, спасибо! Пока что этот пример мне нравится больше всего.
Тем более, что собственно суть вопроса к формату сейчас - когда потом в системе появится ещё 100500 параметров, требующих отдельной обработки (а это более, чем возможно) я хочу как можно проще расширять список.
>Это я уже сделал
Это другое, посмотри внимательней там скобочки () после гета, функция передается и сразу вызывается на месте.
Реализую байтовый протокол и надо разобрать строку - достать значение первое, второе, а потом, в зависимости от третьего, определённое количество следующих.
Помогите пожалуйста.
0. Помни, что верися запускаемого питона зависит от имеющейся в системе версии GLibs и, возможно, чего-то ещё.
1. Скопируй виэнв оттуда, где есть нужная тебе версия.
2. Не забудь зайти внутрь и поправить пути.
3. Активируй виэнв.
Или вместо всего этого:
1. Запускай в докере.
>версия запускаемого питона зависит от имеющейся в системе версии GLibs
Это просто из моих шишек: достаточно современный питон (примерно с версии 3.9) физически не запускается на окаменевшем говне мамонта под названием "CentOS 7", а голимый тырпрайз любит этот недоёбанный копролит!
>>3026782
не ну оно-то понятно, что на его собирать придётся из сырцов. просто пока не понятно с какими опциями запускать ./configure чтоб приблизительно получить такой же питон, как он в дебиане собран. скачал пока себе сорцы пакета python3-minimal, но что-то не нашёл ещё там в каком конфиге он собирается.
Распаковываешь & переходишь в папку соуса, потом так:
./configure --prefix=$HOME/python/Python-3.10.13 --enable-optimizations --disable-test-modules --with-lto
make -j 16
make install
Всё-таки встроенная либа, надо как минимум быть в курсе, вот это всё.
И сразу столкнулся с такой хуйней.
Чтобы сделать обычную прокрутку во внутреннем фрейме.
Надо 1) создать внешний фрейм, потом создать в нем объект холста, потом создать скролбар и прикрепить к холсту, потом создать внутренний фрейм и прикрепить его к холсту и вот в этом фрейме уже размещать элементы которые будут прокручиваться.
Т.е. какое-то нелепое нагромождение фреймов ради простой прокрутки.
Не стоит благодарности. Обещаю и впредь держать тебя в курсе.
19 лет, вкатился на 70к. Вопросы?
ты блять импорты нормально описал или чем?
Пинсталлер пихает в экзешник тупо интерпретатор и библиотеки. ВСЕ.
Если у тебя что то не работает то ты библиотеки хуево описал.
Попробуй импортировать полнуюю либо, а не модули из нее
без from mamka import jopa
импортируй сразу import mamka
Жопа без мамки может не сработать, я те говорю.
>чтоб приблизительно получить такой же питон, как он в дебиане собран
Это отдельный вопрос, я однажды собирал руками какой-то то ли 3.8, то ли 3.9 для сраной центоси с дефолтными параметрами, вообще легко в полторы команды и заработало как надо.
Но у меня вопрос встречный: чем тебя докер не устраивает? Если нужна какая-то специфичная среда, то он идеален.
смена угла линии
>всё-таки встроенная либа, надо как минимум быть в курсе
Можно смело скипать, как и sqlite3 (всё-таки тоже встроенная либа)
....yield from sorted(file for file in lst)
for x in gen():
....print(x)
Аноны поясните, тут суть генератора теряется или нет? Для сортировки же надо знать длину массива или ещё что-то такое, что противоречит генератору. Получается в sorted() возвращается полный список и потом выплевывается в yield, но тогда теряется смысл передачи прав "from". Может тут под капотом какая-то неявная магия? Или как это работает? Поясните блин.
Command "python setup.py egg info" failed with error code 1 in /tmp/pip-build....
Как это фиксить? В чем причина?
> Для сортировки же надо знать длину массива или ещё что-то такое, что противоречит генератору.
Нинужно, достаточно уметь сравнивать элементы, а их количество неважно. Другое дело, что нельзя отсортировать список не имея собственно всех элементов списка. Заинтриговал. Я елд-фром не пользовал пока.
Итак:
https://www.online-python.com/tQVgmvR69q
То есть генератор с елд-фромом работает.
Вангую, что сначала там отрабатывает компоновка, потом она прогоняется через сорт и оно хранит внутри себя отсортированный лист, по которому уже итерирует. Что в целом действительно противоречит идее генераторов, которые хранят только условную позицию. С одной стороны.
Но с другой - есть ситуации, когда это тупо удобнее и расход памяти не так роляет.
>>3028605
>кое-что
Кое-что, блядь, он взял, как-то запускает, что-то происходит...
Детали, Билли, нам нужны детали!
https://www.online-python.com/SakFRnNudY
Провел тут тест, как и ожидалось сначала все элементы прогоняются в сортеде, потом выплёвываются, генератор тут не ленивый а просто сомнительный элемент синтаксиса. Ещё оказалось что лист компрехенсон вообще с yield from не работает, а вот map работает.
В php я могу узнать, было ли выполнено условие
Например переменной статус присваиваем действие. Например подключение к БД
$status = mysqli_connect(1.1.1.1, root, 123, BD_NAME);
Если подключение удавалось, то переменная статус была True
Если нет, то False
И далее можно было сделать проверку и вывести сообщение об ошибки или успехе
Можно ли так в питоне?
Пробовал как в php, но не получилось. Пытался загуглить, но чет норм инфы нет, через какие-то заебства такое надо осуществлять
Можете накинуть примеров или ссылок?
Ты какой драйвер/библиотеку используешь для подключения к базе? Обычно там отдается объект подключения, и если он не None, то подключение прошло успешно, а если None, то что-то сломалось. Но опять же, в разных либах по-разному может быть
В питоне можно создать соединение через try except чтобы отследить ошибки, а через условие if проверить, что соединение не None
import pymysql
try:
# Подключение к базе данных
conn = pymysql.connect(host='1.1.1.1', user='root', password='123', db='BD_NAME')
print("Подключение успешно")
except pymysql.Error as e:
print(f"Ошибка подключения: {e}")
И так
import pymysql
# Подключение к базе данных
conn = pymysql.connect(host='1.1.1.1', user='root', password='123', db='BD_NAME')
# Проверка статуса подключения
if conn:
print("Подключение успешно")
else:
print("Ошибка подключения")
>>3028889
Спасибо, щас поразбираюсь с кодом. Этого примера достаточно в принципе
Я вообще не юзаю подключение к БД. Это как пример
У меня есть условно какой-то код, даже допустим отправка файла куда-то через curl. И мне нужно узнать статус выполнения этого кода, успешно ли было выполнено или нет
И вот в пхп об этом думать не надо. Достаточно переменной присвоить этот код и потом через if else проверку сделать, true или false
Ну друже, тебе надо в ООП вникнуть хорошенько. Станет гораздо понятнее хотябы куда смотреть, чтобы найти то, что надо. В пхп все-таки совсем не ООП было. Как попишешь немного на питончике - будет гораздо проще
Здарова дрочеры, поясните мне насколько питон пересахарен говном всяким. Например, в обучалках все любят показывать как декоратор делать. Нахуй его делать через @Decorator, если можно было просто лямбду передать, типа такого кода?
Можно наслаивать декораторы и это будет красивее. Диф будет красивее. Вместо +1-1 строки будет просто +1
Справедливо.
юзай pysimplegui !!!
У сапы есть официальные книги https://www.sap-press.com/ Там такие талмуды шо ты проста ахуеешь. По одним только workflow там под тыщу страниц наверно. По финансам только вводная часть - это 500 страниц. Шоп сделать курс по sap, это надо часов 300 ебать начитывать текст. И весить он будет гигабайт сто нахуй.
Ну-ка бамп.
>где можно доступным языком почитать про паттерны?
Гуглишь "software engineering books". Там будет про паттерны.
https://www.amazon.com/Patterns-Enterprise-Application-Architecture-Martin/dp/0321127420
https://www.amazon.com/Righting-Software-Juval-L%C3%B6wy/dp/0136524036/ref=zg_bs_g_491316_d_sccl_34/145-4422778-3236939?psc=1
https://www.amazon.com/Software-Engineering-6th-Ian-Sommerville/dp/020139815X/ref=zg_bs_g_491316_d_sccl_41/145-4422778-3236939?psc=1
>кто-то уже считает устаревшим паттерн MVC
Динамический одностраничник на реакте, например не MVC
Ну вкатился, ептыть. Правда проект какое-то окаменелое легаси дерьмецо в виде монолита на фласке из 2016 года.
Хочу перекатиться в молодежные микросервисы на Golang!
Ну можно конечно выебнуться, проявить активность и выбить бабла на переписывание этого копролита на go и микросервисы, да вот только я не лид, а сама команда из лоускиллов состоит, которые микросервисов ни разу не видели, как и я собственно.
Получится куда более худшая версия того, что есть сейчас. Поэтому посижу годик и съебу туда, где микросервисы и го есть.
Галера? Или почему уровень разрабов такой низкий?
>Хочу перекатиться в молодежные микросервисы на Golang!
>>3030710
>микросервисов ни разу не видели, как и я собственно.
Блядь, откуда вы такие альтернативно одарённые лезете?
Схуяли ты взял, что микросервисы будут лучше, если ничего о них не знаешь? Потому что индус на ютубе сказал, что микросервисы это модно-современно?
>Потому что индус на ютубе сказал, что микросервисы это модно-современно?
Кстати, да. Технологии же примерно так и выбираются, лол. Что хайпит - то хорошо, и опыт с такой технологией будет ценнее.
Не знаю почему, но С++ меня накаляет. Делал 20 лет назад лабораторные и благополучно забыл его.
C++ хуйня, соглашусь.
Но какую бы ты не взял библиотеку на питоне, она будет хуйней.
Ты сможешь делать только очень простые вещи на очень ходовых либах.
ну напрмер включитьс ерву по нажатию на кнопку ты сможешь.
А вот передать lora сообщение к другому устройству нет, потому что обасрешься с готовой либой.
Опустил бы лучше какой-нибудь топ прогой собственной разработки, мол на питухоне такое не сделать. А так очень жалко выглядишь со своим ответом
>C#
Это который чуть более, чем весь спиздили у джавы, но с заточкой только лишь под мастдай? Ты жалок и узок.
Речь же не про чистый Си, так что норм.
>Я вообще с C#, но опускаю питон в сообщениях.
>Сказали, чтобы не страдал хуйней
>В этом и прикол.
>У меня нет конкурентов я спокойно работаю и никто меня не дергает.
Напомни еще раз, нахуя ты ИТТ? Может тебе лучше в /psy помощи поискать?
Конкурентов нет потому что c# нигде не нужен кроме оборонных госушных заводов сори за факты.
Старшно далёк ты от народа.
Не. Я видел. Хуйню пописывают самописную под себя всякую. Но только до тех пор, пока не сообразят, что проект разрастается и пора бы на линукса перекатывать для надежности
А ты ОП, тупорылая долбоёбина, ставь тег python при создании темы.
Иначе аноны не находят его поиском и долбятся в предыдущий.
ОП не умеет программировать тег
https://pastebin.com/A8PQ4wCf
https://pastebin.com/VX2Deuv9 на. Только тебе там в функции надо передавать дополнительных два каких-то аргумента (она принимает 4, ты передаешь 2), вообще хз че они делают. Сам подставь. По идее должно быть оставшейся единственной ошибкой
внутри твоей мамки определяю твой эмбрион, который папкина сперма. Это я медленно ищу твой мозг??
Какая проблема-то у тебя, убогенький?
Тимофей Хирьянов на ютубе или поколение python на степике.
codecombat.com
У каждого первого асинхронность = параллельность, вы че ебанутые блять? Вы реально настолько тупые сука?! Бляя, идите нахуй со своим питоном, это пиздец просто клоунада, а не коммунити
А по твоему это че? Не механизм, позволяющий исполнение нескольких задач одновременно? Или что ты считаешь асинхронностью
Механизм, который позволяет выполнять задачи одновременно - это блять потоки, представляешь? Асинхронность ничего не выполняет одновременно, шизоид поехавший бля
Асинхронность - это когда вызывающий поток засыпает до получения результата. Если поток запускает другой поток и сам продолжает работу - это многопоточность.
Понятно
>Это медленно?
Это нинужно. Так может работать, но ю дуин ит вронг. Используй отдельные классы, наследование с перезагрузкой части методов или приватные методы, смотря по ситуации.
Если хочешь научиться базовым вещам, то тебе придется читать официальную документацию и книги. На Хабре пишут те кто хочет выебнуться
Я нагуглил, что второстепенное окно можно реализовать через QWidget и QDialog. И не вполне понимаю, какое тут лучше использовать и есть ли смысл тут в QDialog - с пользователем общаться окошко не будет, только выводить матплотлибовскую анимацию. Или тут похуй?
А чо не просто на PyQt? Вопрос без иронии, просто тоже предстоит сделать gui для одного скрипта.
Ааа просто так, по историческим причинам.
Pyside и PyQt всё равно на 99% одно и то же.
Но с некоторым шансом, если матплотлиб нарушит обещания в своих доках, что работает нормально со всеми свежими реализациями питон-Qt, мне таки придётся переписать всё на PyQt5.
Для тех, кто хочет своё ПО с гуем пилить и официально в мире продавать, надо будет отстёгивать в PyQt, а в пайсайд не надо.
А по факту 99% одно и то же. Я б вкатывался сразу в пайсайд тогда уж.
Нечего тебе делать в ИТ, чувак. И даже не потому, что ты не знаешь буржуйсткого (хотя и поэтому тоже), но и потому, что тот совет, который тебя типа устроил - это повтор совета из ОП-поста, который ты либо не прочитал, либо не понял, в обоих сллучаях если ты способен запутаться в небольшом текстике - значит с ИТ не справишься.
>>3037430
>шаблоне перебираю через for, это говнокод?
Нет, это нормальное использование дзиндзи. Например, возьмём карточки товаров: ты запросом получил 10 или 20 товаров и для каждого из них тебе нужна небольшая карточка с фото, наименованием и ценой, соответственно это неизвестное заранее количество дивов. Дивы должны быть только в дзиндзе. Так что обходи циклами реализуется именно в шаблоне. Как вариант ты можешь использовать вложенные шаблоны (те же карточки - хранить в отдельном файле и передавать им входные параметры при генерации), это не особо критично, вроде.
Мимо писал на джанге один раз пару лет назад, но что-то ещё помню.
https://www.cbtnuggets.com/it-training/linux/certified-system-administrator
Вот это пойдет?
Промазал, не туда.
Теоретически многие могут обойтись вообще без него или тупо заучить пару команд и узбагоидзя. Но в реальной IRL жизни - чем лучше, тем лучше. Иногда знание некоторых очень редких тонкостей позволит тебе легально здорово срезать некоторые углы.
Способность настроить себе окружение + возможность выполнять на нём работу. Вообщем-то этого достаточно.
Если смотреть по ссылке: как выше написали.
По поводу терминалов и команд - какие то базовые надо знать(ну там файлик посмотреть, подключиться к удалённому серверу, ну докеры туды сюды позапускать и тд. - примерно такой уровень.)
Да я не себе, коллегам подсобить взялся, а им надо кнопку, а не "какое-то черное окно".
Что в pydantic означают выражения вроде Field(...) и Field(None)? Вот тут вот в is_active пробрасывается почему-то Ellipsis (троеточие), что оно делает? А вот source с None. Я никогда особо Field в пайдентике и не использовал, просто фигачил поля с тайпингом и все
Поищи qtdesigner или типа того, это рисовалка под pyQt
Если питон знаешь, просто не парсил никогда, тогда читай этого, он базу даст.
https://habr.com/ru/articles/579336/
Если совсем нубас, придется бабок вкинуть мальца. Пройди например вдумчиво курс https://letpy.com/. Задачи с рисованием можно смело скипать, это хуйня. В конце курса ты будешь уметь собирать данные с простого беззащитного сайта в CSV-файл.
В этом деле, как и во всей технической науке есть три узла: Вход-контроллер-выход.
Вход: целевой сайт, разведуешь его, ищешь, как собрать данные максимально быстрым и стабильным способом. В идеале, родной АПИ сайта, пусть даже платный, далее смотришь XLR ответы, там иногда джейсоны в чистом виде прилетают на халяву, дальше по ухудшению надежности идёт свой скрытый апи, найти можно, поковырявшись в заголовках запросов-ответов, иногда джейсон-данные прячутся в джейсон-коде, прям в теле запрашиваемой страницы, об этом рассказывает тот чувак из хабр статьи. Если же ты нихуя выше не нашел, тогда разбирай бьютифулсупом хтмл-теги, как лошара, осознавая, что если через полгода сайт чууутка подкоректирует разметку, твоему парсеру пизда. Последнее днище - селениум. Это когда совсем уже конкретное одностраничное глухое приложение работает прям в браузере клмента и никакими запросами оно с сервером не меняется и на твоей стороне просто в кашу заобфускированное мясо из джейсона.
Контроллер: Вот ты нашел способ, как забрать данные. Вычисляешь пагинацию и погнал цикл по страницам, в каждом цикле цикл по карточкам.
Выход: Можешь сохранять в CSV (под эксель удобно например кому то), можешь в БД (если база будет храниться локально и к ней подключаться будет один пользователь единовременно, можно прям в sqlite3, похуй), можешь в постгре, можешь в джейсон (это если дальше с ними будет работать какаянить морда напрямую например) для базы в контроллере данные карточки сохраняй в виде кортежа и в базу загоняй их не по одной карточке, а пачкой карточек после прохода по каждой странице
Как то так.
Теперь дай мне съесть наловленную рыбу, просто скажи, куда блять с этим мне теперь сунуться?
Если питон знаешь, просто не парсил никогда, тогда читай этого, он базу даст.
https://habr.com/ru/articles/579336/
Если совсем нубас, придется бабок вкинуть мальца. Пройди например вдумчиво курс https://letpy.com/. Задачи с рисованием можно смело скипать, это хуйня. В конце курса ты будешь уметь собирать данные с простого беззащитного сайта в CSV-файл.
В этом деле, как и во всей технической науке есть три узла: Вход-контроллер-выход.
Вход: целевой сайт, разведуешь его, ищешь, как собрать данные максимально быстрым и стабильным способом. В идеале, родной АПИ сайта, пусть даже платный, далее смотришь XLR ответы, там иногда джейсоны в чистом виде прилетают на халяву, дальше по ухудшению надежности идёт свой скрытый апи, найти можно, поковырявшись в заголовках запросов-ответов, иногда джейсон-данные прячутся в джейсон-коде, прям в теле запрашиваемой страницы, об этом рассказывает тот чувак из хабр статьи. Если же ты нихуя выше не нашел, тогда разбирай бьютифулсупом хтмл-теги, как лошара, осознавая, что если через полгода сайт чууутка подкоректирует разметку, твоему парсеру пизда. Последнее днище - селениум. Это когда совсем уже конкретное одностраничное глухое приложение работает прям в браузере клмента и никакими запросами оно с сервером не меняется и на твоей стороне просто в кашу заобфускированное мясо из джейсона.
Контроллер: Вот ты нашел способ, как забрать данные. Вычисляешь пагинацию и погнал цикл по страницам, в каждом цикле цикл по карточкам.
Выход: Можешь сохранять в CSV (под эксель удобно например кому то), можешь в БД (если база будет храниться локально и к ней подключаться будет один пользователь единовременно, можно прям в sqlite3, похуй), можешь в постгре, можешь в джейсон (это если дальше с ними будет работать какаянить морда напрямую например) для базы в контроллере данные карточки сохраняй в виде кортежа и в базу загоняй их не по одной карточке, а пачкой карточек после прохода по каждой странице
Как то так.
Теперь дай мне съесть наловленную рыбу, просто скажи, куда блять с этим мне теперь сунуться?
Фриланс. Просто огромное количество заказов на сбор сущностей из какого-нибудь интернет справочник/каталога в эксельку. Я так понимаю тебе написать их будет быстро, а денег нормально иногда предлагают
Еще как вариант существуют инженеры по автоматизации, там как раз парсеры юзаются. Такой работы не то чтобы много, на самом деле, но туда мало кто идет. Можешь поискать по ключевым словам bs4/selenium на всяких сайтах с вакансиями. Придешь туда и будешь апи внутрений дербанить, а не хтмлы.
>Фриланс
Да вот хотелось бы на работу обычным способом устроиться. Почекал я всякие кворки, там тыщу предлагают за трехдневную работу и еще голову всю выебут. У меня не подвешен язык, мне не нравится всяких долбоёбов облизывать за тыщу.
Например?
Сам себе бота, который мне мои штрафы парсит и присылает в телегу я то напишу. А другим людям, это другое.
это не твоё тогда. Ты чё собрался писать??
Есть два стула (пик). Делают одно и тоже. В одном случае у меня 12 строк, 3 уровня и 6 бранчей, в другом - 13 строк, 5 уровней и 2 бранча а ещё он не работает на сайте online-python.com потому, что у них питон 3.8, а паттерн-матчинг появился в 3.10 и проявиться это может почти где угодно ещё.
Что вам больше нравится визуально? Как считаете писать правильнее?
Текстом, если что: https://pastecode.io/s/9ga1mmj7
ind4: Есть же специальный модуль для сбора параметров!
Таки да, есть. Чуть не в стандартной библиотеке. Не помню, как называется. Я не смог заставить её выдавать нормальные многострочные подсказки, а там их надо. Вот прям НАДО.
Нахуй ты вообще написал второй вариант? Паттерн матчинг если где-то и нужен, то явно не здесь.
Какой нахуй модуль для сбора параметров?
Выше (>>3025530 и далее) писали про бранчи и свичматч-кейс (>>3025816).
Я потыкал, попробовал. Оказалось, что линтер считает его плоским кодом с нулём ветвлений. Взял кусок, похожий на свичматч-кейс и переписал его. Получилось вот так вот. Странно. Не нравица!
С другой стороны я меняю 4 ветвления (при общей рекомендации - уложиться в 12 это немало) на 1 строку и пару отступов.
Я там не могу понять механизм переадресации. Вроде логин-пароль отправляю, но не вижу куда потом отправлять код подтверждения.
Где там то? Я что, угадал и ты про штрафы?
Но я всё равно скорее всего не смогу освежить воспоминания, я по понятным причинам, удалил акк госуслуг, как только почалось.
Что там ветвления, что там ветвления, только во втором случае отступов больше и код сложнее. Если твоя цель наебать линтер, то пожалуйста. Во всех остальных случаях первый вариант лучше.
сумма АБУ == БУА == УБА == БАУ == УАБ
типа sum(ord(c) for c in s) == sum(ord(c) for c in t)
ВСЁ
разобрался сам
просто сравниваемые слова могут быть разных символов и разных букв которые могут дать равные значения суммы. Но прикол в том что я нашел похожую задачу на кодварсе и....смог решить её через одинаковые значения сумм...
Ну например буду программировать кардиостимулятор. И по итогу на большом количестве повторений накопится ошибка, стимулятор заглючит и челу придет кирдык. Не хочется чтобы из-за того что не учел циферку умер человек
Там чисто тесты с рандомными значениями, причем не то чтобы сильно много тестов. В критической инфрастурктуре, типа ПО для самолетов и медицинских устройств работоспособность кода доказывается математически, для этого существуют свои инструменты, типа COQ. Думаю там еще и системные аналитики привлекаются, которые пытаюсь постигнуть, что в системе может пойти не так на уровне железа. В общем, не волнуйся
Причина тряски?
Про автотестинг не думал? Тот же самый селениум и дёрганье апишек
А так вроде и отдельные конторы есть, которые парсингом занимаются, и просто в галерах всяких команду иногда держат
Ебать годнота, кроме шуток. Это я про статью с Хабра. Спасибо. Другой анон
Какого хрена в re.findall круглые скобки работают не как в остальных функциях? чем их заменить?
Я хочу чтобы выражение возвращало мне наборы из 6-10 цифр плюс-минус пробелы, скобки или дефис.
r"((\d[\s\(\)\-]*){6,10})\d"
Почему я получаю в ответ кортежи, где есть ненужное значение из одной цифры и как этого избежать?
да потому что ты пидор ёпта
b = 'ASSSSSSS'
print(a is b)
print(id(a), id(b))
x = 'ХУЙ'
y = 'ХУЙ'
print(x is y)
print(id(x), id(y))
True
1230440834736 1230440834736
False
1230440353392 1230440765744
Почему так? Str кирилицы изменяемые данные?
Тут просто говняк с переводом терминов с русского на английский. Для обывалы параллельное исполнение == английскому concurrency
бамп реквесту
Последний раз кодил на питоне - в вузе для диплома.
Суть-то в том, что я всегда питон воспринимал как такой-то калькулятор + прокаченый баш-скрипт.
Но из-за того, что .NET - основной мой инструмент, я даже простые задачки по автоматизации для себя решаю .NET'ом. А это как по мне - оверхед.
Вот и вчера возникла задача - померять, RPS для сервера под большой нагрузкой. Начал писать на .NET'е хуйню для симуляции нагрузки. Но из-за особенностей работы .NET'а, этот тест - жрет больше, чем тестируемая приложуха, понять реальное положение дел с нагрузкой сложно. Думал - как раз взять питон и на нем сэмулировать 100к коннектов и посмотреть RPS и корректность работы. Справится? Или проще попросить вторую машину, на которой будет моя хуйня запускаться, чтобы не мешать серверу.
>Стоит ли сеньеру .NET пытаться освоить питон?
Питон, как и джава скрипт, как и С/С++, хотя бы на средне-начальном уровне решения студенческих лаб и литкода должен знать и уметь ЛЮБОЙ, абсолютно любой сеньор. Сюда же в принципе входит SQL, HTML, Excel, git, md, атрибуты расширенного поиска в гугл и яндекс, базовые админские вещи, докер, кубер, может что-то ещё забыл. Наверное, иметь опыт работы в линуксе тоже обязательно. Английский и алгосы конечно же.
Если за твои 5+ лет опыта работы (а иначе какой ты сенька, молокосос накрученный) тебе не понадобились все эти пункты, то ты работал в каком-то закукленном пузыре, и тебе надо срочно менять работы и наращивать насмотренность.
Спасибо
> image.png
круто, по табличке выходит, что я синьёр 300к-наносек.
ну кроме, разве что, отличия декларативного от императивного и эксплейнов любой степени тяжести я видел некоторое дерьмо
мимо-20к-пенсия-по-шизе
Потому что регулярки кросс-язычны, 90% их функций одинаково работают во всех языках.
Питон таки мне кроме лаб в вузе на работе ни разу не пригодился.
Вру. Один раз - когда лень было с Make ебаться - на питоне накидал сборку сишного проекта, и когда очередную квалификацию проходил - чтобы графики нормальные построить с помощью pyplot, но это так. Как и говорю - скорее расширенный баш.
Это и есть программирование
база + алгосы
>Как научиться программировать.
Начать решать задачи реального мира, научиться в абстракцию и декомпозицию.
бамп реквесту
На питоне - никак, это не программирование
Попытался родить свой калькулятор на основе готового PEG-парсера - модуль parsimonious .
Задача выглядит как приключение на 5 минут, но все время какая-то хуета получается.
Что означает такая ошибка?
parsimonious.exceptions.IncompleteParseError: Rule 'user_input' matched in its entirety, but it didn't consume all the text. The non-matching portion of the text begins with '+3' (line 1, column 2).
Это я еще до обработки значений не дошел
Задача софта "включать" \ "выключать" некоторые файлы в файловой системе. Меняя их свой свойства или имена, например делая их скрытыми в OS Винды или дописывая расширение file.ext._hide_
Вот сейчас думаю, как организовать базу данных этих файлов.
Дело в том, что файлов буквально миллионы и они могут быть сильно "зависимы" между собой. Т.е. если мы "выключаем" какой-то файл то вместе с ним должны выключить ещё например 1000, потому что они с ним связаны. Как эту связь лучше всего записать?
1) Базовая единица группировки файлов это строка с неким названием, назовем её "лэйбл".
2) Пользователь "включает\выключает" файлы кликая именно по "лэйблу".
3) Каждый файл внутри "лэйбла" имеет своё отдельное состояние "вкл \ выкл"
Например "лейбле" в 3к файлов которые надо "выключить" и 1к файлов которые должны остаться не тронутыми, когда пользователь кликает по "лэйблу". Одновременно с этим каждый файл который мы меняем может иметь "зависимость" - другой файл который тоже надо "выключить". Зависимый файл может быть только в пределах одно "лэйбла".
Изначально файлы содержатся в такой вот структуре словаря.
Это json, так что есть серьезное ограничение - объект должен быть сериализуем с помощью json. Организацию словаря можно изменять как угодно, если потребуется.
{
"Lable_1":{
...."On" :["/path/dir/file1.ext","/path/dir/file2.ext", ...], #файлы которые не трогаем
...."Off":["/path/dir/file3.ext", ...]}, #файлы которые надо выключить когда пользователь жмет на лэйбл
"Lable_2":{
...."On" :["/path/some dir/file4.ext",],
...."Off":["/path/some dir/file5.ext", "/path/some dir/file6.ext", ...]},
}
Вот сейчас файлы организованы в таком виде. Задача - добавить эту "перелинковку", как-то записать, что "вот этот файл" связан с "тем файлом".
Загвоздка в том, что например "file 1" может быть связан с "file 2" и "file 3"
И одновременно файл "file 257" может быть связан с "file 2" и "file 3"
Если каждый файл сделать ключом словаря и его "зависимости" записать в значение, то получится так, что строки с названием файлов "file 2" и "file 3" будут повторяться в словаре просто миллионы раз. Из за этого словарь станет весить в памяти непомерные значения.
Я подумал использовать список и индексы, т.к. список сериализуем json , но памяти занимает значительно меньше.
Например так
{
"Lable_1":{
...."all files" :["/path/dir/file1.ext","/path/dir/file2.ext", "/path/dir/file3.ext", ...],
....#просто отсортированный список всех файлов
...."idx off":[2,3,156]
....#индексы файлов которые выключаем при клике на лэйбл
...."dependence":[(2,3,4), (156,3,7)]
....#списки, где перечислены все индексы которые связаны
}
Это будет работать медленне чем словарь и json файл перестает быть человекочитаемым, но с таким подходом база данных не будет занимать в памяти гигобайты.
Как ещё можно организовать такую базу без использования SQLite, PostgreSQL, MySQL, любыми другими вариантами кроме этих. У меня с ними мало опыта, а новую инфу я сейчас не могу осваивать, надо быстро и эффективно сделать с тем что есть.
Задача софта "включать" \ "выключать" некоторые файлы в файловой системе. Меняя их свой свойства или имена, например делая их скрытыми в OS Винды или дописывая расширение file.ext._hide_
Вот сейчас думаю, как организовать базу данных этих файлов.
Дело в том, что файлов буквально миллионы и они могут быть сильно "зависимы" между собой. Т.е. если мы "выключаем" какой-то файл то вместе с ним должны выключить ещё например 1000, потому что они с ним связаны. Как эту связь лучше всего записать?
1) Базовая единица группировки файлов это строка с неким названием, назовем её "лэйбл".
2) Пользователь "включает\выключает" файлы кликая именно по "лэйблу".
3) Каждый файл внутри "лэйбла" имеет своё отдельное состояние "вкл \ выкл"
Например "лейбле" в 3к файлов которые надо "выключить" и 1к файлов которые должны остаться не тронутыми, когда пользователь кликает по "лэйблу". Одновременно с этим каждый файл который мы меняем может иметь "зависимость" - другой файл который тоже надо "выключить". Зависимый файл может быть только в пределах одно "лэйбла".
Изначально файлы содержатся в такой вот структуре словаря.
Это json, так что есть серьезное ограничение - объект должен быть сериализуем с помощью json. Организацию словаря можно изменять как угодно, если потребуется.
{
"Lable_1":{
...."On" :["/path/dir/file1.ext","/path/dir/file2.ext", ...], #файлы которые не трогаем
...."Off":["/path/dir/file3.ext", ...]}, #файлы которые надо выключить когда пользователь жмет на лэйбл
"Lable_2":{
...."On" :["/path/some dir/file4.ext",],
...."Off":["/path/some dir/file5.ext", "/path/some dir/file6.ext", ...]},
}
Вот сейчас файлы организованы в таком виде. Задача - добавить эту "перелинковку", как-то записать, что "вот этот файл" связан с "тем файлом".
Загвоздка в том, что например "file 1" может быть связан с "file 2" и "file 3"
И одновременно файл "file 257" может быть связан с "file 2" и "file 3"
Если каждый файл сделать ключом словаря и его "зависимости" записать в значение, то получится так, что строки с названием файлов "file 2" и "file 3" будут повторяться в словаре просто миллионы раз. Из за этого словарь станет весить в памяти непомерные значения.
Я подумал использовать список и индексы, т.к. список сериализуем json , но памяти занимает значительно меньше.
Например так
{
"Lable_1":{
...."all files" :["/path/dir/file1.ext","/path/dir/file2.ext", "/path/dir/file3.ext", ...],
....#просто отсортированный список всех файлов
...."idx off":[2,3,156]
....#индексы файлов которые выключаем при клике на лэйбл
...."dependence":[(2,3,4), (156,3,7)]
....#списки, где перечислены все индексы которые связаны
}
Это будет работать медленне чем словарь и json файл перестает быть человекочитаемым, но с таким подходом база данных не будет занимать в памяти гигобайты.
Как ещё можно организовать такую базу без использования SQLite, PostgreSQL, MySQL, любыми другими вариантами кроме этих. У меня с ними мало опыта, а новую инфу я сейчас не могу осваивать, надо быстро и эффективно сделать с тем что есть.
Разобрался. при использовании PEG все зависит от порядка декларации. Такие парсеры задуманы быстрыми и нужно учитывать это.
Короче, если захотите встроить в свою программу какой-нибудь псевдоязычок выражений - рекомендую эту хрень!
Ещё такой прикол, что когда я запускаю сервер появляется надпись django using settings "project.settings.dev" Я в этот settings. dev зашёл, а там несколько строчек кода. Это не тот файл настроек, который я раньше использовал. Мне нужно просто указать, чтобы Джанго не использовал dev, а использовал тот файл, который раньше?
Истинно так.
Но все работает.
Лучше подскажи как в этой PEG-грамматике одним выражением убрать все ненужные пробелы?
Ты, кстати, не понял, похоже, что я пишу. Это не парсер HTML.
Создание нового языка программирования - максимально борщехлебское илитное занятие!
В данной ситуации у этого языка будет вполне определенная практичная цель.
бамп
>Стоит ли сеньеру .NET пытаться освоить питон?
Сеньке поздно что-то осваивать. Для него это просто один из миллиона инструментов, о которых он знает и знает, когда их использовать. Но ведь сеньор не пишет код. По крайней мере нормальный - не пишет. код попроще (которого основная масса) - пишут джуны, код посложнее (его не так много, но он требует менее тривиального подхода) пишут мидлы, а сеньоры - продучмывают, как это будет работать на уровне архитектур, после чего ставят и объясняют им задачи.
Чем больший ты сеньор, тем больше твой вклад выглядит как на пике.
На пике - гитхаб сеньора для сеньоров Бьёрна Трупастрауса.
Механизм интересный, но почему кириллическая строка не интернируется - непонятно. Есть, правда, ссылка на AST optimizer, но там, видимо, надо курить код критериев (807LOC сишного кода) и делать уже тогда мердж-реквест. Ну или хотя бы ишшу завести.
Короче пишу в GPT такой-то модуль, перечисли все поля и методы такого-то класса с примерами. Он всё выдает красивая стена текста, певрое второе третье, красота.
Пердолюсь-пердолюсь-пердольюсь час, ни хуя не получается. Полез в гугл и на первой же странице обнаружил что этот пидорас почему-то пропустил пару методов в том числе тот. который решает мои задачи.
О каком применении GPT может идти речь если он даже как справочник и поисковик срет под себя.
Жопа горит, но винить конечно я могу только себя, сликом много я возложил на этот инструмент.
> сликом много я возложил на этот инструмент
Как автоматизатор задач работает реально неплохо, я иногда ему скармливаю классы и пишу что хочу сделать, он выдает мне костяк методов, а дальше я тестирую че он сделал не так, и правлю ручками сам.
Самостоятельно он нихера не может. Писать что-то в чем не разбираешься с помощью гпт - то еще казино
Короче нахуй этот parsimonious.
Студенческая поделуха. Как только классов столько на гитхабе набрала?
Калькулятор со скобками - уже, пиздец как громоздко выглядит.
Пойду лучше ковырять pyparsing.
Или я не разобрался и приоритеты операций в любых грамматиках сложно описываются?
Есть либа, SLY. Ее попроуй, она довольно популярная
Решаю задачки и иногда возвращаюсь к тем, которые уже решал, чтобы перерешать их. Но у меня не получается её сделать, но в прошлом я это упражнение сделал как-то через жопу но сделал. Это нормально?
Другой вопрос. Я смог пару раз решить задачи 4 кю на кодварсе(судя по отзывам легкие) для меня все равно это достижение. Пердел над задачами по 1-2 дня.
ну не сутть. Взбрелось мне глянуть то как эти задачи решают на святом си.....8 кю чтобы просто поосмотреть ....и я нифига даж приблизительно логику понять не смог что они там делают. Постоянно что-то делят берут остатки и инкременты инкременты инкременты.....
>Это нормально?
Да совершенно нормально, ты же задачки решаешь по 2 дня чтобы сдать их и забыть что ты только что делал. В этом и суть.
>Другой вопрос.
>ну не сутть.
>логику понять не смог
Ты вопрос забыл задать. Челозавр, судя по всему ты очень рассеянный, наверное из за этого и все твои вопросы и возникают.
Это нормально?
Какой Джун? У меня норм работа есть. Просто кодю ради хобби. Потому что игры что-то не приносят больше радости
Перекатов больше не будет питон мертвый язык. Убит джунами
Конечно сложнее. Питон это как спички, а Си это как трением огонь добывать. Си это счеты, где ты каждый байт видишь, а Питон это калькулятор, нажми на кнопку - получишь результат. Именно по этой причине байтоебы сишники так от Питона горят.
Через 20 лет будет новый язык поргомирования на основе нейросети - "программист" будет просто в микрофон промпты надиктовывать и смотреть что на экране получается, а Питонистов все будут считать настоящимми программистами. А байтоебы и сишники к тому времени вымрут.
Конечно, белые вороны, на питониста всегда смотрят как на человека третьего сорта, это дворник от мира программирования. Ещё эти курсы вездесущие, теперь буквально в кого не плюнь он скажет что программист на питоне и может с закрытыми глазами Хэлло Ворлд написать.
Как будто сишники кому-то нужны
>настоящие программисты
Последние вымерли лет 10 назад.
Программист как человек, который создаёт программы больше не существует, вместо него - архитекторы, кодеры, дизанеры и ещё хуева гора людей, вот все вместе они - "программист" (ага, один).
Кодер это не программист вне зависимости от ЯП.
Пушто код усложняется.
Если раньше автомобиль мог собрать один человек, то сейчас уже есть инженер по двигателям, по электронике, по эргономике и так далее. А дальше будет всё сложнее — инженер по карбюратору, по генератору, по поршневой группе (УСЛОВНО).
Коммерческий опыт - это делать никому не нужное говно по приказу туповатого Кабан Кабаныча, бэкенды для банкоматов, приложухи наебывающие простых работяг. А Питонисты это мыслители, фелосафы, филантропы, которые созидают, двигают человечество вперед, делают нейросети, анализ данных для людей. Голы босы, но не сломлены. Настоящие Иисусы. Вот это всё.
Двачую. Сразу почему-то онлайники вызывают ассоциации с какими-то соевыми педиками чулочниками
Веб разработчики
Это не прозвище, по этимологии похоже на фразеологизм, который высирают школьники, вроде "матеша" или "физра" и так далее. В общем, не обращай внимание, сейчас питон в школе часто преподают, наверное это подгоревший школотун забежал высказать всё что он думает про клятых питонистов с их питоном.
Онлайники, что за название такое жидкое? Как будто анальники.
Боже, какой же я тупой. Спасибо)
Вот бы был фреймворк по перекатам
Как мне в одну строчку записать этот цикл чтобы он распаковал мне элементы списка если они являются списком, и просто добавил числа если это числа
itertools поставляется с python - это стандартный модуль.
подробности: https://docs.python.org/3/library/itertools.html
Рекурсия через генератор.
ValueError: day is out of range for month
cfg.append( f"{day:02d}.{month:02d}.{year}:22-{(day+1):02d}.{month:02d}.{year}:01" )
вобщем, day+1 выходит за рамки дней в месяце.
# ошибка тут: dts_last1 = datetime.strptime(dts_last, '%d.%m.%Y:%H')
это анальники. Это нормально, все так делают, в попе ковыряются
или сейчас это типо норма? до чего мы докатились йопта.
Аджайл блять. Скрам бляяять. Дейли, ретро, демо, тренинг, груминг, планинг, онтуан бляяяяяяяяять
Чел же элементарно, это компрехенсон, база базовая питона, если человек не понимает эту простейшую строку, то боюсь у него нет склонности к программированию...
l = [1, 2, [3, 4]]
l = [lst for lts in l for lst in (lts if type(lts) is list else [lts])]
Срам, каминг аут, орангутанинг
А ты думал тебе дадут макбук и отпустят в свободное плавание, чтобы ты сидел и писал хуйню?
хед = НОДЕ(дата)
ноде = хед
а потом писать
ноде.нехт если можно написать просто хед.нехт?
Анальная магия
Хз что ты там нахуевертил никогда таких длинных компрехенсон не писал и скорее всего не смогу. Использую циклы
Мимо анальник 350к
и у кого зарплата выше 150, тоже отпишите плиз как росла, и примерно какие компетенции на каждом уровне зп.
Ты. е. вы в школе по информатике ещё print() не проходили?
помогите(
Символ это например буква "R". Или знак "+".
Как вставить в символ код? Какой-то одночлен, ты пробовал хотя бы один раз перечитать бред, который высираешь?
бамп вопросу
Что-то подзаебало искать подходящую версию ко всякой легаси параше, хочется просто накатить последнюю версию и забыть про все эти проблемы с совместимостью
Это наоборот хорошо. Когда учишь питон ты учишь только один язык. А когда учишь яву учишь 20 яв
Нет. Просто выучил 20 яв
За месяц работы в новой компании было четыре созвона, остальное просто текстом в чате, джире или на гитхабе. Гы
Чего нахуй
Порой один дурак может задать такой вопрос, на который на ответят и сотни мудрецов
Иди нахуй, ученик 6-7 класса
Подскажите материал, тренажёр или лекции, по чистоте кода и по "проектированию" чё то я не могу нормально придумывать "архитектуру" получается какое то сопливое говно вызывающее друг друга, друг друга переписывающее и прочее.
>вызывающее друг друга
И что в этом плохого? У нас есть три святые заповеди ООП - наследование, инкапсуляция, полиморфизм. Если тебе нужно получить атрибут экземпляра, то ты в классе создаешь метод чтобы он это поле возвращал и похуй что будет лишний вызов это канон ООП, а значит так и надо делать.
>переписывающее
То же самое перегрузка метода это часть базы питона, отвечает завету наследования. Перегрузка методов это даже хорошо и красиво.
Я вот просто руководствуюсь таким принципом в написании - "ни один блок кода не должен повторяться дважды и всё должно соответствовать заповедям ООП" и в результате код получается дичайше модный, чистый, понятный. Смотрю на него и шишка дымиться.
Да мне нужно понимание как примерную задачу разбить на такую абстракцию, а то это понимание приходит только вовремя написания, т.е. на практике, а в проектирование и представление всего этого процесса в голове/на бумаге не получается .
Я уверен что есть методика как этот навык задрочить
Ну так проектируй не проектируй, а когда дело дойдет до текста кода окажется что элементы и данные всё равно нужны то ту то там. Тем более если ты пишешь софт в одно лицо, то в проектировании нет смысла т.к. нет разделения труда ты в своей голове держешь сразу все части. В таких условиях единственно возможный и верный вариант писать мммммаксимально по канонам ООП, чтобы каждый блок кода стал универсальным кубиком чтобы логику софта можно было перестраивать на более поздних этапах.
Я так думаю, ну уверен что есть бесполезные уроки на этот счет. Вообще уроки по проектированию внутренней логики софта это нверное что-то максимально беспредментное. Потому что задачи всегда уникальные.
>писать мммммаксимально по канонам ООП
вот наверное дроча это можно воспитать в себе понимание как лучше перенести ту или иную задачу на код.
Ну смотря что ты имеешь в виду под стать. Устроиться на работу - чисто на удачу откликаться после 3-ех месяцев и надеяться что тебя возьмут куда-нибудь, вероятность маленькая. Обучиться программированию - поискать инфу в инете, за пол года вполне реально вкатиться в скиллы написания неплохого кода
Я создал - это про битовые операции, иначе глаза выгорают
Это копия, сохраненная 20 апреля в 14:16.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.