Этого треда уже нет.
Это копия, сохраненная 18 ноября 2019 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Питон тред #73 /python/ 1521391 В конец треда | Веб
Тред, посвящённый языку программирования Питон, #73.
Предыдущий >>1512752 (OP)

ЧАВО: https://github.com/TheKnightsWhoSayNi/info/wiki/Hat актуальность примерно 2015 года

Книжки: https://yadi.sk/d/HQhhsBsq3TVRUq
Тоже книжки: https://yadi.sk/d/tArKKuQu3Kejuq
Больше книжек: https://yadi.sk/d/H-00n-UG3RSQem
Очень много книжек: https://drive.google.com/drive/folders/13YaFijvuH4dtv-PjUKVWLQ7ZIqXIfCLK

Анон, вместо того, чтобы без разметки постить код, лучше шарь его через специальные ресурсы:
https://ideone.com/ - возможность постить листинги кода и онлайн-запуска, не требует регистрации
https://dumpz.org/ - можно постить листинги, не требует регистрации
https://pastebin.com/ - для листингов, регистрация не обязательна
https://www.codepile.net/ - можно расшарить код в том числе на редактирование, особая полезная опция - чат при каждом листинге, где можно код обсудить
https://pyfiddle.io/ - запуск python кода онлайн, но чтобы шарить, надо регистрироваться
#######################################
Вопросы-ответы:
А стоит ли читать Лутца, том номер N? Мнения в треде разделены. Кто-то за (очень неплохая база даётся), кто-то против (слишком много воды и объём книг убивает всё рвение). В общем - решать тебе, книга вредна не будет, то ты можешь её просто не дочитать и забросить.

Стоит ли читать %книга_нейм%, если там питон версии 2.х? - Нет, не стоит. 100% есть более актуальная книга, для пистона 3.х

А что ещё можно читать? - Питон сам по себе очень хорошо задокументирован, и для уровня начинающих, и для продвинутого. Смотри официальную документацию. Можно начать вот с этого https://docs.python.org/3/tutorial/introduction.html

Есть у кого на примете годный курс лекций по алгоритмам? Формат лекций мне как-то ближе, нежели просто чтение книги. - МФТИшный курс, например, https://www.youtube.com/playlist?list=PLRDzFCPr95fK7tr47883DFUbm4GeOjjc0

Что можно почитать/посмотреть по многопоточности/параллелизации в питоне, да и вообще в целом? - очень годный ролик на американском языке про многопоточность и асинхронность https://www.youtube.com/watch?v=MCs5OvhV9S4

А как учить джангу? Нахожу только книги по джанге 1.х - У джанги отличные доки (одни из лучших для пистоновских либ, имхо), почитай их для начала. Книгу по джанге можно читать и для версий <2, это не проблема, т.к. принципы остаются теми же. Для переката на 2.х хватит changelog`a или тех же самых доков/статей. Начни изучать с разбора учебного приложения с голосовалкой, из официальной документации.

В ньюфаг-треде написано, что нужно начинать с SICP, чтобы научиться программировать - Вот, пожалуйста, та же самая программа, но переработанная под язык Python http://composingprograms.com/ (нужно знать ангельский или уметь пользоваться переводчиком)

Дайте нормальные книжки на русском! Мы, блядь, не в пиндосии живём - брат, смотри книжки по ссылкам в шапке, там есть и русские. Но помни, без языка ангелов твоя жизнь проходит мимо и ты обречён быть на обочине знаний и технологий.
2 1521394
>>1391 (OP)
Сколько сейчас пайтон джун со знаниями и парой петпроектов на джанго, но без коммерческого опыта может получать в мск? Хотя бы 50-55 реально выбить?

Там где я живу 0 вакансий, думаю переехать ради опыта
3 1521395
>>1391 (OP)
Ну зачем, нормально же общались!
sage 4 1521441
>>1394
Двачую вопрос и призываю джуна ответившего мне в прошлом треде.
Мой вопрос, что спрашивали на собесе и что он конкретно на работе делает.
Нужно ли джуну дрочить синтаксис углубленно и окончательно ломать себе мозги ИЛИ лучше задрочить конкретные конструкции/идиомы тех задач что джун будет непосредственно решать.
изображение.png112 Кб, 659x472
5 1521469
Как в 2020 проще всего обойти директирию с поддиректориями? Можно без сортировки.
6 1521512
Как вообще принято покрывать юнит-тестами функции?

Вот, например,

если у меня есть функция, которая разбивает строку по запятым на спиок слов,
я точно знаю, что этих слов должно быть 3

какие тесты я должен для неё прописать ?
Допустим:
Проверка на правильный тип данных возвращаемого значения
Проверка на правильную работу функции (забить выходной список вручную для небольшого примера)
Проверка на правильное количество возвращаемых элементов в списке

Я немного упростил свою реальную функцию, у меня еще добавятся тесты для разных специфичных случаев,
но есть ли еще какие-то основные тесты, которые я упустил?
7 1521513
>>1512
И еще, если,допустим, делаешь собственный парсер и оформляешь его , как питоновский пакет,
нужно ли там прописывать собственные исключения, например для случая, когда на вход подана строка неправильного формата?
Или достаточно выбрасывать в коде уже существующий тип исключения, например ValueError, написав лишь там своё сообщение ?
8 1521517
>>1469
Рекурсивно
изображение.png1,5 Мб, 1063x1299
9 1521547
>>1517
Уже через os.walk() обошёл всё, довн.
10 1521579
>>1547
def walk(top, topdown=True, onerror=None, followlinks=False):
"""Directory tree generator.

For each directory in the directory tree rooted at top (including top
itself, but excluding '.' and '..'), yields a 3-tuple

dirpath, dirnames, filenames

dirpath is a string, the path to the directory. dirnames is a list of
the names of the subdirectories in dirpath (excluding '.' and '..').
filenames is a list of the names of the non-directory files in dirpath.
Note that the names in the lists are just names, with no path components.
To get a full path (which begins with top) to a file or directory in
dirpath, do os.path.join(dirpath, name).

If optional arg 'topdown' is true or not specified, the triple for a
directory is generated before the triples for any of its subdirectories
(directories are generated top down). If topdown is false, the triple
for a directory is generated after the triples for all of its
subdirectories (directories are generated bottom up).

When topdown is true, the caller can modify the dirnames list in-place
(e.g., via del or slice assignment), and walk will only recurse into the
subdirectories whose names remain in dirnames; this can be used to prune the
search, or to impose a specific order of visiting. Modifying dirnames when
topdown is false is ineffective, since the directories in dirnames have
already been generated by the time dirnames itself is generated. No matter
the value of topdown, the list of subdirectories is retrieved before the
tuples for the directory and its subdirectories are generated.

By default errors from the os.listdir() call are ignored. If
optional arg 'onerror' is specified, it should be a function; it
will be called with one argument, an os.error instance. It can
report the error to continue with the walk, or raise the exception
to abort the walk. Note that the filename is available as the
filename attribute of the exception object.

By default, os.walk does not follow symbolic links to subdirectories on
systems that support them. In order to get this functionality, set the
optional argument 'followlinks' to true.

Caution: if you pass a relative pathname for top, don't change the
current working directory between resumptions of walk. walk never
changes the current directory, and assumes that the client doesn't
either.

Example:

import os
from os.path import join, getsize
for root, dirs, files in os.walk('python/Lib/email'):
print root, "consumes",
print sum([getsize(join(root, name)) for name in files]),
print "bytes in", len(files), "non-directory files"
if 'CVS' in dirs:
dirs.remove('CVS') # don't visit CVS directories

"""

islink, join, isdir = path.islink, path.join, path.isdir

# We may not have read permission for top, in which case we can't
# get a list of the files the directory contains. os.path.walk
# always suppressed the exception then, rather than blow up for a
# minor reason when (say) a thousand readable directories are still
# left to visit. That logic is copied here.
try:
# Note that listdir and error are globals in this module due
# to earlier import-*.
names = listdir(top)
except error, err:
if onerror is not None:
onerror(err)
return

dirs, nondirs = [], []
for name in names:
if isdir(join(top, name)):
dirs.append(name)
else:
nondirs.append(name)

if topdown:
yield top, dirs, nondirs
for name in dirs:
new_path = join(top, name)
if followlinks or not islink(new_path):
for x in walk(new_path, topdown, onerror, followlinks):
yield x
if not topdown:
yield top, dirs, nondirs

Тут рекурсия, педорас.
10 1521579
>>1547
def walk(top, topdown=True, onerror=None, followlinks=False):
"""Directory tree generator.

For each directory in the directory tree rooted at top (including top
itself, but excluding '.' and '..'), yields a 3-tuple

dirpath, dirnames, filenames

dirpath is a string, the path to the directory. dirnames is a list of
the names of the subdirectories in dirpath (excluding '.' and '..').
filenames is a list of the names of the non-directory files in dirpath.
Note that the names in the lists are just names, with no path components.
To get a full path (which begins with top) to a file or directory in
dirpath, do os.path.join(dirpath, name).

If optional arg 'topdown' is true or not specified, the triple for a
directory is generated before the triples for any of its subdirectories
(directories are generated top down). If topdown is false, the triple
for a directory is generated after the triples for all of its
subdirectories (directories are generated bottom up).

When topdown is true, the caller can modify the dirnames list in-place
(e.g., via del or slice assignment), and walk will only recurse into the
subdirectories whose names remain in dirnames; this can be used to prune the
search, or to impose a specific order of visiting. Modifying dirnames when
topdown is false is ineffective, since the directories in dirnames have
already been generated by the time dirnames itself is generated. No matter
the value of topdown, the list of subdirectories is retrieved before the
tuples for the directory and its subdirectories are generated.

By default errors from the os.listdir() call are ignored. If
optional arg 'onerror' is specified, it should be a function; it
will be called with one argument, an os.error instance. It can
report the error to continue with the walk, or raise the exception
to abort the walk. Note that the filename is available as the
filename attribute of the exception object.

By default, os.walk does not follow symbolic links to subdirectories on
systems that support them. In order to get this functionality, set the
optional argument 'followlinks' to true.

Caution: if you pass a relative pathname for top, don't change the
current working directory between resumptions of walk. walk never
changes the current directory, and assumes that the client doesn't
either.

Example:

import os
from os.path import join, getsize
for root, dirs, files in os.walk('python/Lib/email'):
print root, "consumes",
print sum([getsize(join(root, name)) for name in files]),
print "bytes in", len(files), "non-directory files"
if 'CVS' in dirs:
dirs.remove('CVS') # don't visit CVS directories

"""

islink, join, isdir = path.islink, path.join, path.isdir

# We may not have read permission for top, in which case we can't
# get a list of the files the directory contains. os.path.walk
# always suppressed the exception then, rather than blow up for a
# minor reason when (say) a thousand readable directories are still
# left to visit. That logic is copied here.
try:
# Note that listdir and error are globals in this module due
# to earlier import-*.
names = listdir(top)
except error, err:
if onerror is not None:
onerror(err)
return

dirs, nondirs = [], []
for name in names:
if isdir(join(top, name)):
dirs.append(name)
else:
nondirs.append(name)

if topdown:
yield top, dirs, nondirs
for name in dirs:
new_path = join(top, name)
if followlinks or not islink(new_path):
for x in walk(new_path, topdown, onerror, followlinks):
yield x
if not topdown:
yield top, dirs, nondirs

Тут рекурсия, педорас.
exercise.PNG100 Кб, 792x338
11 1521720
Аноны, поясните, что они хотят в этой задаче?
12 1521722
>>1720
а всё не нужно. понял, просто с переводом проебался.
13 1522062
Для работы с данными одной программы очень удобно реализован вывод в дата фреймы pandas. В книжке Numerical python познакомился с рядами и массивами numpy. Есть хорошая книга или другая обучающая литература по pandas? Документация разработчика просто пугает объемом свыше 1000 страниц.
14 1522156
>>2062
Читай только то, что тебе нужно и всё.
15 1522160
>>2156
Нет.
1572817688-3ae3a1a7da2d2d32ac5ccea79a3deaf4.jpeg399 Кб, 1365x2048
16 1522325
В какой области лучше начать делать пет проджект, что бы подтянуть базу знаний на практике? Желательно с минимальным использованием библиотек. Т.е. что бы область к этому располагала.
17 1522328
Write a function count that returns the number of occurrences of target in a nested list

аноны, переведите, пожалуйста, задание не понимаю что хотят
18 1522352
>>2328
короче если мои навыки ангельского мне не пиздят то ты должен написать функцию def count которая считает количество вхождений некоторого заданного значения в (nested ?) списке и в следующий раз воспользоваться гугл переводчиком который такие предложения переводить уже умеет
19 1522416
>>2156
Спасибо.
20 1522417
>>2328
Напишите функцию count, которая возвращает количество совпадений (вхождений) в целевом вложенном списке.
Вложенный список, это когда внутри списка есть еще списки.
a = [['a', 'b', 'c'], [3, 4, 5], ['ji','ri','do']
По сути задача на for/ while и if, elif, else, in.
21 1522474
>>2325
В какой области хочешь знания поднятунть, в такой и делай?
22 1522582
>>2417
нет, спасибо. я знаю что такое вложенныq список и что они хотят рекурсивную программу. я не понимаю вот этого

>которая возвращает количество совпадений (вхождений) в целевом вложенном списке


я не понимаю что это означает, скажи, пожалуйста. не понимаю смысл
23 1522585
>>2062
А что конкретно надо сделать с этим датафреймом?
24 1522592
>>2417
что такое вхождения?
что такое целевой вложенный список? вернее вложенный знаю, а целевой это как? какой-то определённый. дайте, пожалуйста подробный пример этого всего я не понимаю
25 1522626
>>2417
Посчитать, сколько вхождений (переменной) target во вложенном списке.
def count(target):
...
26 1522629
>>2626
а понял. спасибо большое. дошло до меня. но последнее уточнение

вот [5,3,[3,4]] нужно посчитать цифру три только во вложенном списке или в целом?
27 1522650
>>1518484

> олдфажного сокрещенного синтаксиса


Пиздуй на мою прежнюю работку к дедам, прогающим на asm-е. Тебе там понравится
Capture.PNG3 Кб, 232x139
28 1522671
>>2626
>>2417
>>2352
Последний вопрос и я от вас отстану, обещаю. Вот я сделал это задание как я понял. Правильно сделал?
29 1522673
>>2671
L это список
A это искомое число
c считает кол-во сколько прза случилось число в списке. могу сделать и чисто чтобы во вложеном искал на определённой глубине рекурсии. блять ну почему эти условия заданий непонятные всё время загнут какую-то хуйню типа "сколько вхождений в целевом вложенном списке?" что блядь?
30 1522682
>>2629
Откуда я знаю, смотри примеры, если есть. По идее надо искать во всём списке, нигде не сказано, что только во вложенных.
31 1522686
>>2673

>в целевом вложенном списке


Ты побольше переводы местных ретардов, не способных в язык, слушай.
32 1522695
>>2682
ну вот я >>2671 код написал.

Так в том то и проблема блядь в этой книге авторы любят загнуть что-то такое сложное на словах и не предоставить примеры. Там нет примеров, одна строчка текста как задача и всё. Регулярно сюда за помощью обращаюсь. Заебала эта книжка с её охуительными формулировками уже.
15452441678811.jpg78 Кб, 700x514
33 1522714
Так, котаны. Начал использовать R но проблевался от неконсистентности. Уже было начал учить julia, но эти ваши индексы с 1, ух. Сдался и решил пойти мейнстримным путем. Кодить умеют, монады не пугают. Подскажите какую книжку (на английском) лучше взять? Смотрю в сторону Python for data analysis
34 1522715
>>2714
ёбаный папус у тебя на пикче.
35 1522752
>>2715
типичный пограмизд)
36 1522856
>>2417
из условий не понятно, какая у тебя степени вложенность, предположим что первая, это самый легкий вариант:

from collections import Counter
your_list = [[1,2],[3,4], [2,3], [2,3,54,1,2,43,12], [3,1]]
flatten_list = sum(your_list, [])
print(Counter(flatten_list)) # Counter({2: 4, 3: 4, 1: 3, 4: 1, 54: 1, 43: 1, 12: 1})
37 1522858
>>2856
Это считает количество всех элементов во всем листе со вложенными листами, если тебе нужно только в одном из вложенных и там гарантированно нет второго уровня вложения, то просто по индексу делай.

Вообще нихуя не понятно из этого условия, что делать, либо ты сам его сам так сформулировал (считай себя составителем задачи и смотри дальше), либо тот, кто составлял задачу - даун.
38 1522865
>>2671
тип надо проверять так - isinstance(instance, type)
вместо второго if должно быть elif

Ну и по условию не понятно, что вообще надо делать, да и по твоему коду тоже не понятно ничего.
Приведи пример вводного листа и результат функции, наверняка в твоей книжке это дается.
39 1522869
>>2062
У них довольно неплохая документация на сайте. Для быстрого вхождения в тему можешь почитать это - https://pandas.pydata.org/pandas-docs/stable/getting_started/10min.html, а потом уже гуглить то, что нужно конкретно тебе.
40 1522873
Добрый вечер. Почему это произошло в моей жизни?
41 1522877
>>2671
https://github.com/30-seconds/30-seconds-of-python/blob/master/snippets/deep_flatten.md
Кстати вот универсальный метод сглаживания листа, после этого ты получаешь просто лист со значениями и считаешь там повторы или что тебе нужно. Если ты хочешь пилить свой велосипед и отказываешься юзать collections.Counters, то земля тебе пухом, делай лучше через словарь все это дело.

Типа так:
counter_dict = dict()
for elem in flatten_list:
....counter_dict[elem]+=1 if counter_dict.get(elem) is not None else counter_dict[elem]=1
count = len([v for v in counter_dict.values() if v > 1])
42 1522878
>>2873
понял, извиняюсь
43 1522881
>>2877
....counter_dict[elem]=counter_dict[elem]+1 if elem in counter_dict else 1

пофиксил
44 1522959
>>2877
>>2865
спасибо вам огромное, аноны, вы мне очень сильно помогли.
45 1522969
Решил поизучать питон. Или пайтон. Поставил среду. Запустил. А она как давай память жрать. В программке 10 строк и 600 мб в памяти. Это нормально?
46 1522976
>>2969
покажи код
47 1522977
>>2969
jetbrains? Используй IDLE.
48 1522986
>>2969
eclipse + pyDev
49 1523064
>>1394
>>1441
Отвечаю вам обоим аноны. Вкатился летом в бекенд джуниор питон разработчиком. Работаю уже 5 месяц.

Был всего на двух собесах. Надо знать основы языка ну и основы фреймворка который будешь юзать, например Django или Flask.
Чтобы меньше было вопросов на собеседовании, лучше иметь какой нибудь проект на гите, ну или хотя бы с собой принести на ноутбуке, но лучше на гите, так как на первом собесе ноутбук не пропустила охрана и тимлид ебал меня вопросами про слои БД и всякую ебалу, на втором собесе показал код и вопросы были по моему коду.

ЗП сейчас 50к, не ДС или ДС2, то есть для моего города вполне нормально.

Работать в целом не сложно, так как любая задача уже решена на SOF. Сложно когда блять тупой менеджер называет сроки не посоветовавшись с тобой, а потом пытается нагнуть работать в выходные. Со временем научился слать нахуй менеджера, ну или говорю что постараюсь, а сам нихуя не делаю на выходных, напишу пару строк и рассказываю сказки как спал всего 3 часа и спасал мир, в итоге менеджеру приходится сроки подгонять под мои. Проект старый и большой, документации нету, я в нём немного разобрался и поэтому могу диктовать свои условия, несмотря на то что, я нету даже полгода стажа, уже поступают предложения на собес, летом буду искать удаленку, хочу пару лет пожить на море.
sage 50 1523091
>>3064
Спасибо за развернутый ответ. Скажи, можешь ли ты с нуля написать что то сложное, на чистом питоне? Насколько спрашивают основы языка? Можно быть макакой работающей только с готовыми решениями из библиотек?
51 1523092
кто какой редактор/иде использует для питона?попробовал пайчарм,комп чуть не сгорел,вообще не понимаю что он там внутри делает чтоб так память сжирать
52 1523095
>>3092
у вскода иногда не работает автокомплит,он как будто не загрузил еще модуль,то ли что то там внутри ломается, потому что он иногда хорошо автокомплитит
53 1523100
>>3092
Саблайм с анакондой
54 1523109
>>3092
Thonny использую, не пишу ничего сложнее парсеров, так что мне хватает, но для каких-то комплексных проектов его будет мало
55 1523125
>>3092
emacs + elpy + flycheck + py-autopep8
56 1523197
>>3092
Так это же жидбрейнз
57 1523210
Я тут работаю над небольшим проектом. По сути это скрейпер, который работает 24/7 и каждые пару минут обновляет базу данных, когда пользовательно открывает главную страничку сайта, информация с бд отоборажается в виде таблицы. Пишу на Python+Flask+PostgreSQL. Возник вопрос. Стоит ли переместить парсер в отдельную программу (пакет)? Хорошая ли это практика? Хуй знает, как такое гуглить.
58 1523217
>>3125
Автокомплит не тормозит?
Запости скрин, няша.
59 1523271
>>2877
Работа со словарями это какой-то мрак, прочитал в нескольких разных курсах про них так ничего и не понял как это всё синтаксически оформлять, перебирать, юзать в циклах.
60 1523275
>>3210
А у тебя как сейчас запущен парсер?
61 1523321
>>3092

> вообще не понимаю что он там внутри делает чтоб так память сжирать


Использует жабу вместо плюсов.
image.png171 Кб, 1918x1159
62 1523359
>>3217
Сначала думает немного, потом быстрее.
63 1523414
>>3271
По идее словари нужны были не для перебора изначально, но когда начал гарантироваться порядок все немного изменилось. Там вроде все элементарно же, чего не понял то?

test_dict = {1:10, 2:2.0, 3:'N'}

for element in test_dict:
....print(element)
# 1 2 3

for element in test_dict.keys():
....print(element)
# 1 2 3

for element in test_dict.values():
....print(element)
# 10 2.0 N

for key, value in test_dict.items():
....print(key, value)
# (1, 10) (2, 2.0) (3, N)

print(list(test_dict.keys())) # [1, 2, 3]
print({v:k for (k,v) in test_dict.items()}) # {10:1, 2.0:2, "N":3}

test_dict[2] = 'two'

print(test_dict) # {1:10, 2:'two', 3:'N'}

test_dict[6] # value error

test_dict[6] = 6

print(test_dict) # {1:10, 2:'two', 3:'N', 6:6}
63 1523414
>>3271
По идее словари нужны были не для перебора изначально, но когда начал гарантироваться порядок все немного изменилось. Там вроде все элементарно же, чего не понял то?

test_dict = {1:10, 2:2.0, 3:'N'}

for element in test_dict:
....print(element)
# 1 2 3

for element in test_dict.keys():
....print(element)
# 1 2 3

for element in test_dict.values():
....print(element)
# 10 2.0 N

for key, value in test_dict.items():
....print(key, value)
# (1, 10) (2, 2.0) (3, N)

print(list(test_dict.keys())) # [1, 2, 3]
print({v:k for (k,v) in test_dict.items()}) # {10:1, 2.0:2, "N":3}

test_dict[2] = 'two'

print(test_dict) # {1:10, 2:'two', 3:'N'}

test_dict[6] # value error

test_dict[6] = 6

print(test_dict) # {1:10, 2:'two', 3:'N', 6:6}
2019-11-17-1548281425x1841scrot.png275 Кб, 1425x1841
64 1523416
>>3359
org-mode+org-babel+emacs-jupyter не пробовал?
65 1523417
Анонасы, не подскажите, как завести python3.x на notepad++? Чтобы с автодополнением и по красоте было, перепробовал много вариантов, но так и не смог привинтить хоть сколько-то нормальное дополнение.
66 1523419
>>3091
Сложное на чистом питоне? Думаю можно, но зачем? Сейчас куча библиотек, которые облегчают жизнь, не знаю как в крутых компаниях типа Гугл, но по рынку 90% это создание веб приложении, а значит Django/Flask, кое где нужны знания докера или celery + rabbit MQ/reddis, но это уже на мидла, советую потратить время на изучение Django + DRF, толку больше будет, ну и создай себе бложик на Джанго, почти туда чему научился, в итоге и тебя польза и от работодателя плюс

Мимо от анон, которому ты отвечал
67 1523430
>>3416

>org-mode


Меня немного пугают аддоны, к которым прилагается мануал на 300 страниц.
68 1523431
>>3430
95% времени ты просто делаешь аутлайн и вешаешь TODO на итемы, так что не сложнее маркдауна.
image.png2 Кб, 335x80
69 1523432
Что это за модуль? Гугл выдаёт про командную строку.
image.png22 Кб, 612x100
70 1523434
>>3432

>Гугл выдаёт про командную строку.


А ты случайно не врешь?
71 1523440
>>3434
Там и описания нет. Как можно найти модуль, если знаешь лишь как он вызывается?

from commander.commander import Commander

И что мне качать? commander.commander?
image.png148 Кб, 1775x151
72 1523441
73 1523443
>>3441
Не роботоет. Всё равно не находит.
image.png73 Кб, 1039x228
74 1523444
>>3443
Опять врешь.
Capture.PNG22 Кб, 759x150
75 1523447
аноны, как распечатать список в таком виде? что бы он был и списком и чтобы каждый элемент столбиком был. заебала эта книга со своими охуительными условиями каждая задача мне мозг пол дня выносит
image.png19 Кб, 807x144
76 1523448
>>3444
То есть я что-то делаю не так?
77 1523450
>>3447
хотя впрочем не нужно. авторы просто мудазвоны. я сделал обычный принт построчный, один хрен в списке слеши адресов удавиваются. не знаю каким местом авторы думали когда подобный высер в условия толкали
78 1523455
>>3450
Что за книга?
79 1523457
>>3455
хуёвая
80 1523460
>>3457
Название.
81 1523461
>>3448
Я похоже не то находил, извини.
Если ты пишешь какого-нибудь ссаного бота для вконтактика, вот какой-то коммандер:
https://github.com/AppLoidx/vk_bot
82 1523475
>>3461
Спасибо!
83 1523476
>>3460
How to Think Like a Computer Scientist: Learning with Python 3 Documentation, Release 3rdEdition
84 1523492
>>3461
Блять. Почему нельзя было его закинуть в Pypl или запилить одним файлом. И как теперь эту ебанину заставить работать.
85 1523496
Поясните как работают ограничения рекурсии? Почему при значении 1, происходит ашь 12 рекурсий. В то время как при значении 100 доходить только до 87. Я уже весь мозг сломал.
86 1523499
>>3496
вот скрины анонам. извиняюсь. так будет понятнее. почему такие выводы?
image.png34 Кб, 1095x286
87 1523525
Сап, анон, помоги построить структуру пикрил. Я смог сделать только Бренд и Товар. Категорию я сделал ручками, то есть при создании нового бренда приходится в url ручками прописывать filter(brand__contains=Apple, например). Как сделать так, чтобы можно было прописать все через слаг и у меня через слаг фильтровались модели конкретной категории? причем чтобы можно было добавить бренд через админ панель и ничего в код не дописывать? получается я могу делать связку ModelListView-ModelDetailView, а как делать связку BrandListView-ModelListView-ModelDetailView.
88 1523538
Предположим мне на сервер надо послать несколько json'ов, один из которых содержит флаг, который должен быть установлен на сервере, а остальные собственно обрабатываемую информацию.
Как это смоделировать во фласке?
Надо ли под первый тип (установка флага) и второй тип (передача данных) заводить отдельные процессы?
Или всё делается в одном?
89 1523570
>>3538

> смоделировать


О, снова ты.

Тупо послать несколько жсонов подряд, сервер последовательно их обработает. Наткнувшись в первом жсоне на флаг, он у себя это запомнит. Всё в одном процессе.
90 1523579
>>3570
Да, выхожу на связь.
Ну соответственно, на сервере надо будет написать отдельную функцию, чтобы флаг принимала?
91 1523590
>>3579
Можно и не писать. Достаточно условия:
mydata = фласк.request.json
if "flag" in mydata:
__store_flag_somewhere(mydata["flag"])
...
92 1523593
Сколько длится блокировка за парсинг на фейсбуке?
a.jpg20 Кб, 300x223
93 1523599
>>3593
Целую вечность
94 1523602
>>3538
Делаешь два типа данных, один с флагом, другой без, делаешь один общий интерфейс который они имплементируют, делаешь апи эндпойнт который принимает список с типом этого интерфейса, делаешь одну функцию которая обрабатывает тип без флага, вторую - как композицию первого + обработчик флага.
95 1523606
>>3602
Хм... Звучит как-то по-джавовски.
блок за парсинг.png21 Кб, 1148x319
96 1523612
>>3599
но они же обещали temporarily(((
97 1523613
>>3590
Спасибо.
Попробую.
98 1523702
>>3414
Везде примерно тоже самое, описан базовый функционал, но всё равно не понятно как с помощью него решать задачи. В итоге решаю их без словарей, но в этом нету смысла.
99 1523773
>>3702
Ну может быть в твоих задачах словари и не нужны. Либо нужны, но тебе не хватает алгоритмической базы, базы по структурам данным.

Словари - это базисная структура данных, позволяющая хранить данные в виде ключ-значение. Вот если тебе нужно хранить данные с возможностью обращения к ним по ключу, значит тебе нужны словари. Всё остальное - дополнительный функционал, чтобы работать было удобнее и чтобы не городить свои велосипеды.

Если обращение по ключу не актуально, то и словари тебе не нужны.
100 1523781
>>3525
У тебя же вроде линейная структура. Как товар ссылается на бренд, так бренд на категорию.
Другое дело, что это какая-то оторванная от жизни модель. Бренд же явно может не в одной категории встречаться. Или это какой-то особенный каталог?
101 1523785
>>1391 (OP)
Посоветуйте библиотечку для написания ботов в телегу. Ну или перенаправьте в соответствующий тред, спасибо.
102 1523795
>>3785
я давненько писал с этим - https://github.com/eternnoir/pyTelegramBotAPI, не советую.
103 1523820
Прошу помощи, программа ищет все простые числа до n-го числа, с помощью Решета Эратосфена. https://pastebin.com/PxXW8Si4, думаю на stackoverflow все объяснено , но я не знаю английского, конкретно непонятна вот эта строка.
sieve[ii::2i]=[False]((n-ii-1)//(2i)+1)
Непонятно, как вообще работает эта строка,разве ясно как вырезка делается , как я понял, сколько вырезка выдает значений , на такое же число мы должны домножить [False], ни больше ни меньше, иначе выдаёт ошибку , механика мне непонятна. Дальше не ясно откуда взялась эта мудреная формула ((n-i
i-1)//(2*i)+1), которая угадывает количество чисел, которым надо присвоить False значения, так как они составные.
104 1523821
>>3820
Вот сама программа

def primes(n):
""" Returns a list of primes < n """
# (c) Robert William Hanks - https://stackoverflow.com/a/3035188/5741205
sieve = [True] n
print("все чётные числа игнорируются и будут пропущены при возврате...\n")
for i in range(3,int(n
0.5)+1,2):
if sieve:
print('содержимое решета:\t{}'.format([x for x in range(3,n,2) if sieve[x]]))
print(f'i:{i} вычёркиваем все числа кратные "{i}", начиная с "{i}^2": {list(range(i
i, n, 2i))}')
sieve[i
i::2i]=[False]((n-ii-1)//(2i)+1)
print(f'sieve[{i}{i}::2{i}]=[False](({n-i}{i-1})//(2{i})+1)')
print('содержимое решета:\t{}'.format([x for x in range(3,n,2) if sieve[x]]))
print('
' * 60)
return [2] + [i for i in range(3,n,2) if sieve]
105 1523822
>>3820
Извиняюсь за криворукость https://pastebin.com/7hrrgPwF , надеюсь
не удалится
106 1523913
>>3822
sieve[ii::2i] выбирает все числа кратные "{i}", начиная с "{i}^2.
((n-ii-1)//(2i)+1) = находит сколько таких чисел в твоем листе.
Умножая на [Flase] получаем равенство len(sieve[ii::2i]) == len(
[False]((n-ii-1)//(2i)+1) )
Дальше на все места sieve[ii::2i] подставляется False
107 1523992
>>1391 (OP)
Сап, я новичок, создал профиль на гитхабе, пощу туда решение задач с курсов, и просто задач. Буду какие то проекты постить.

И возник такой вопрос, есть ли смысл допустим просить людей звездочку поставить на мой репрозиторий, или в этом нет никакого смысла?
108 1523993
>>3992
Молодец, возьми пряник
109 1524027
>>3992

>пощу туда решение задач с курсов, и просто задач


Этот мусор там не нужен.
110 1524031
>>3992
Если проект полезен - сами поставят.
111 1524047
>>3913
Спасибо, но не совсем понятна откуда взялась эта формула ((n-ii-1)//(2i)+1) , как ее вообще выдумали , я даже подумал проще было бы записать эту строку как
sieve[ii::2i]=[False]*len(sieve[ii::2i])
Смотрел , результат получается тот же правильный , но может, так я значительно теряю в скорости ?
112 1524052

>всего ~6300 вакансий для питона на hh


>в твоём городе ни одной


>удалённых на всю раисю 273


>из них для джунов меньше 50


Всё тлен.
113 1524078
>>4052
Ну ты глупенький? Никто ждуна брать на удаленку не будет.
Лучше пройди собес по скайпу и вкатывайся в ДС. Там джунам платят хорошо, на съем хватит и сверху останется.
114 1524119
>>4078
Кому там нужны понаехи без прописки за 30 лет, не смеши.
115 1524154
>>4119
Оу, что у нас тут? Выученная беспомощность? Прекрасный настрой для начала новой жизни. Продолжай в том же духе.
116 1524158
>>4154
Я в отличии от диванных пиздаболов бывал в мск и знаю что это такое пытаться куда-то там устроится без московской прописки. А потом очередное дерьмо умничающее статейку прочитало от психолуха и давай покровы срывать хочется ему в рожу плюнуть.
117 1524187
>>4158
И куда тебя без прописки не пускали, практик наш?
14861651328250.jpg152 Кб, 768x1024
118 1524229
Как изменить значение ключа в словаре, но ТОЛЬКО если этот ключ существует?

В две строки так:
if 'benis' in d: d['benis'] = 'long'

А покороче никак нельзя? Думал встроенные методы словаря что-нибудь подобное умеют, но там нет ничего, update и тот добавляет лишние ключи.
119 1524240
сап, програмач. такой вопрос от нюфага вам возник: ищу работу в вебе (по классике вкатывальщик) и в моем зажопье нет никаких галер на питонщиков джунов в вебе. а если и есть это мидлы и сеньоры куда я уже там все отсылал и меня просто продинамили. но при этом дохуя вакансий на пхп джунов и стажеров. так вот вопрос - стоит ли им слать в надежде что придется быстро переучиваться, или же я там даже тестовое не пройду если мне его вообще вышлют?
wallhaven-498043.png1,8 Мб, 1920x1080
120 1524241
А подскажите, чем можно сделать следующую штуку:

Есть примитивная кроссплатформенная софтина, которая должна определенным образом обрабатывать указанные каталоги. Накидал на Ткинтере форму, сделал кнопку добавления каталога в Listbox и удаление выбранного, плюс кнопка старта.

А хочется не простой листбокс, а список с колонками (например, путь к каталогу и статус его обработки), плюс (самое главное!) возможность перетащить в него нужные каталоги мышкой из проводника, а не добавлять каждый раз вручную из диалогового окна. Вот как бы этот драг-н-дроп реализовать правильнее? Ткинтер для таких вещей не особо приспособлен, насколько я понял. Стоит смотреть в сторону PyQt? И если да, то куда копать, а то гуглится не очень пока успешно?
121 1524289
Есть некоторая библиотека, но для моей задачи там может понадобиться всего лишь малая часть тех файлов и функций, которые там присутствуют. Как я могу узнать, какие конкретно файлы и функции используются, кроме как добавлять принт имени файла и функции в каждом файле библиотеки?
122 1524291
>>4229
Наверное как-то так

d['benis']='long' if 'benis' in d.keys() else pass
123 1524295
>>4291

> else pass


Зачем эти полумеры? Давайте по-чесному перейдём на перл, раз пишем на питоне, как на перле.
124 1524296
>>4295
Предложи свой вариант
125 1524300
>>4296
Пожалуй, что совсем лаконичного решения нет. Задача нештатная пожалуй.

Варианты решения:
1) описать свою функцию
def upd(dict_obj, key, value)

2) унаследовать класс от dict и добавить к нему метод upd(key, value)

>if 'benis' in d: d['benis'] = 'long'


>d['benis']='long' if 'benis' in d.keys() else pass


по сути одно и тоже , первый вариант даже получше
Но мне в них не нравится то, что дублирование ключа идёт, это тут самое некрасивое.
126 1524303
>>4300
Можно поправить исходнички интерпретатора и скомпилировать свой форк с лаконичным однострочным синтаксисом.
127 1524306
>>4296
ВНЕЗАПНО, писать две строки, а не какую-ту нечитаемую хуиту.
128 1524308
>>4300

> совсем лаконичного решения нет


Писать свои классы тебя не учили?..
метод __missing__ блять, документацию читай

>>4229
...
129 1524314
>>4303
Вот мне тоже кажется, что анон спрашивал как попроще, а тут предлагают совсем по-взрослому.

Мне вот не нравится "else pass". Хорошо бы чтобы его можно было не писать.
130 1524320
>>4314
Проще всего написать функцию или писать две строки, а не устраивать синтаксические выебоны. Простое лучше, чем сложное.
$d{benis} = "long" if exists $d{benis};
Тред утонул или удален.
Это копия, сохраненная 18 ноября 2019 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски