Этот тред пройдет под знаком темной стороны силы. >Dooku is a set of libraries for the Python programming language that provides various useful stuff that you might need in everyday usage. The idea is to provide a set of libraries and useful functions, just like Boost does in C++ world. http://dooku.readthedocs.org/en/latest/
в етом ИТТ треде мы выяснили что новомодные анальные игрушки для быдляков ПИСТОН и ХАЧКЕЛЬ сосут у олдфажных мега языков на все времена C-шки и perl-а все время --- лучий вариант на ПИСТОНЕ: http://ideone.com/udDJ9 (императивный понос) 2 варианта на ХАЧКЕЛЕ 1.ебаный пиздец во всех смыслах и имеперативное гавнище: http://ideone.com/M42su (сосет у C-шки) 2. деклашотивное петушение http://ideone.com/0e3qE (сосет у декларотивного петушения на perl) --- для сравнения perl: http://ideone.com/i0ob4http://ideone.com/olq5B C: http://ideone.com/ap43H LUA: http://ideone.com/DVdhrhttp://ideone.com/Xkj4D --- http://ideone.com/6cZYq лисп как и ожидалось сонул, ну и возможно ответ неправильный (какието черезжопные варианты с 33 кратной вложеностю скобок быле побыстрее но натая хуйне никому не сдалась когда есть простое и самое быстрое решение на C-шке)
Анон, скажи за порфолио, если я решу связать жизнь с пистоном:
1.имеет ли смысл делать имидж борду, да ещё и на какой-нибудь торнадо (или что там норм, что-нибудь с асинхио в связке и тд). 2.делать ли бложек, если есть борда, или бложик > борды ? тут, конечно, джанга 3. форум с авторизациями/регистрациями/модераторами/админами 4. пилить ли сраный_чатик на асинхио с JS клиентом и выбсокетами ? оно вообще. нахуй кому надо будет ? всего-то меньше 100 строк, примут за дебила с "привет мир" 5. что надо ещё, чтобы не послали нахуй с таким портфолио ? 6. а если я хочу быть кем-то отличным от веб-девелопа, но всё ещё писать на пистоне
>>400351 Всё что ты назвал это hello world, уровня туториалов, никому не интересно. Попробуй сделать библиотеку, которая будет кому-нить полезна и выложить на pypi.
>>400408 Один из самых популярных ЯП. Востребован. Его в любом случае полезно знать хотя бы как второй язык, скриптовый, для системного администрирования, автоматизации и прочего.
Имхо,смысл же показать как я код пишу и, что умею хоть что-то, а не хер с горы который на любую вакансию идёт
На самом деле я было без воображения и не могу придумать ничего хоть немного полезного, есть опасение, что если я запилю либу, она сама будет уровня ХВ, не потому что не смог, потому что не придумал
>>400481 Потому что необходимость делать либы появляется по мере того, как что-то делаешь. В какой-то момент не находишь то, что тебе нужно и приходиться пилить самому. >смысл же показать как я код пишу Обычно на собеседованиях дают задания же. Оторванные от реальных задач, всякие задачи на смекалку и знание каких-то хитрожопых тонкостей, что жутко бесит.
>>400482 в том и проблема, я не могу придумать себе проект. вернее могу, но все это набор херни для решения инстант-задач, ничего уберсложного или для чего нет плюшек в pypy
максимум, могу подкинуть себе задачку на пару часов, чтобы мозги размять, но придумать что-то большое, на что не будет времени жалко - мозгов не хватает
Cтоит ли учить питон, если я знаю кресты лишь на средненьком уровне? Паттерны учу по крестам, игрульку на SFML пишу. Прост вдруг питон перемешает все знания в башке.
>>400798 Кроме знания просто синтаксиса питона тебе нужно знать понимать практиковать git, базовые знагия реляционной теории, понимания как работает ОС, состязательные проблемы, паттерны проектирования. Как специалист ты должен полностью понимать как вообще работает компьютеры и сеть. Короче танненбаум + лутц/бизли + фреймворк который ты будешь использовать и ты уже отличаешься от фриланс макаки. Зарабатываю питоном, в большинстве случаев (80 %) - django
Большой вопрос. Касаемо связи по сети в питоне + tkinter
В общем, имеется: 1. "клиенты" с интерфейсом в tkinter'е 2. консольный сервер, получающий сообщение от одного и отправляющий другим.
Как правильно — для маленькой частной программы, а не энтерпрайзного решения — организовывать асинхронную связь по сети через socket?
Если получить нечего, то socket ждёт себе и ждёт, из-за чего гуи клиента виснет до получения какого-либо соощения. Для сервера норм, если нет сообщения, то ему и делать ничего не надо.
В данный момент я сделал так: 1. В клиенте стоит неблокирующий сокет, выдающий ошибку в случае отсутствия данных. Собственно, эта ошибка ловится и возвращается какое-нибудь "empty" 2. Функция listener'а пробует получить сообщения, и если там это "empty" — tkinter.after(150,receive). А если что-то есть, то уже дальше куда надо отправляется. То есть, каждые 150 миллисекунд я проверяю, не пришло ли мне там чего по сети. В итоге интерфейс не виснет, спокойно могу разные виды данных (самоустановленные, разумеется) получать и обновлять что нужно без всяких проблем.
Процессор, вроде бы, не грузит (когда ставил 5 миллисекунд, мои core2duo 500-строчным кодом загружались на 15 процентов) — 0.5% времени всего занимает.
Собственно, а нормально ли вообще такое решение? Как-то немного топорно это смотрится, постоянно проверять, а не просто ожидать получения и уже тогда выполнять операции. Задержка не так важна, в принципе, но приятно было бы иметь минимальную возможную без нагрузки на процессор.
Пытался через multiprocessing/multithreading, но не взлетело, всё равно зависало, почему-то. Ещё не разобрался, видимо. В теории, взлетит ли запуск двух процессов: в одном клиент, в другом этот самый network listener, но уже с блокирующим сокетом. И вот второй процесс пусть себе висит, а отедльный гуи будет себе работать без проблем?
Ну и мимовопрос, который просто лень было пока погуглить: как-нибудь в байтовом формате объект pickle (отправленный socket.sendto(pickle.dumps(a))) можно распознать? Грубо говоря, у меня передаётся либо string (на любых языка), либо вот уже что-то более серьёзное (объект какого-нибудь самописного класса, например) через этот pickle.dumps. Добавлять очередные флаги как-то не хочется. Передавать всё через pickle — тоже.
>>401059 О последнием: так-то я посмотрел, как оно выглядит, и начинается с \x80\x03X каждый раз (дальше уже количество символов, если это строка, идёт, и так далее), но мало ли где ещё такое начало будет.
>>401059 заебало читать эту простыню, но почему бы не запилить всё на асинхио ? прием/рассылка сообщений делается с половины пинка, в качестве примеров погугли чатики на вебсокитах с питоновским сервером на асинхио, на гитхабе точно есть
и да, проверять на наличие сообщений это пиздец из 90х, уже давно используют события
>>401079 >и да, проверять на наличие сообщений это пиздец из 90х, уже давно используют события Да я понимаю, лол, но надо мне было хоть что-то придумать, чтобы работало.
В общем, асинхио ещё не пробовал, но зато, вроде, с мультитредингом разобрался, и сделал так: socket blocking включил, внутри Tk() запускается в отдельным тредом функция с msg, addr = socket.recvfrom(), и как только что-то получает, создаётся событие, которое tkinter ловит и делает что нужно. Норм? В асинхио, я так понимаю, тоже примерно так всё сделано, ведь как иначе-то можно сделать?
>>401430 >описывающий все его возможности и нюансы Это же трёхтонный талмуд будет, не? Да и после прочтения которого всё забудешь. Разве не лучше по мере поступления необходимости что-то выучивать? Какую интродактори книжечку, конечно, и можно почтитьа, но оно, вероятно, по basic python спокойно гуглится, или какой-нибудь курс на сайте а-ля codecademy пройти
>>401434 >Официальная документация. Она на инглише. Читать могу, но после нескольких жутко страниц заебывает. > Описание охватывает наиболее распространенные версии Python: от 1.5.2 до 2.0. Тухловато же.
>>401440 > Учи инглиш Ненавижу английский, поэтому и учить его не собираюсь. > в библиотеках не разберешся Знаний и терпения на пару страниц обычно хватает, поэтому проблем не было.
Нубовопрос, посоны: в PEP8 нихуя нет про indentation вот в таком случае; pylint матерится, как ни изворачивайся. Как правильно-то? Или всё-таки заводить переменные под результат каждой из функций?
Аноны, помогите ньюфагу. Как правильно реализовать такую ерунду? for a1 in xrange(10): __for a2 in xrange(a1): ____for a3 in xrange(a2): ______... __________for a10 in xrange(a9): ____________print a1, a2, ..., a10
>>401677 Что-то я понять не могу, а почему функция комбинаций с повторениями возвращает только неубывающие? Сам решил так — http://ideone.com/J7zBFS Насколько это хуже встроенной (не считая красивости) команды?
>>401712 Хотел спросить, нахуя оно это делает, но понял, что это не комбинации с повторением, так как есть with replacement, а есть with repetition, о котором я думал.
>>400888 Поясни за паттерны проектирования конкретно в питоне, а то есть мнение, что большая часть их - богомерзкая джава-хуита, в питоне либо вредная, либо каким-то образом уже присутствующая.
Помогите запилить цикл который проверит мой список на дубли соседних элементов Это что-то вида if b == b b = b+1 else skip Я хз как это правильно и нормально сделать на третьепитоне
ВЫ ВСЁ ВРЁТЕ. ГОВОРИТЕ, ЧТО ЯЗЫК ПРОСТОЙ; А Я ПРОЧИТАЛ 50 СТРАНИЦ САМОУЧИТЕЛЯ ПО ПИТОНУ И НЕ МОГУ НАПИСАТЬ ПАРСЕР ХМЛ ФАЙЛОВ, ДАЖЕ ЧУЖИЕ ПРИМЕРЫ КОДА НЕ ПОНИМАЮ. ВЫ ВРЁТЕ ВСЁ. НЕ ЛЕГКИЙ ВАШ ЭТОТ ПИТОН.
>>401980 >А Я ПРОЧИТАЛ 50 СТРАНИЦ САМОУЧИТЕЛЯ ПО ПИТОНУ И НЕ МОГУ НАПИСАТЬ ПАРСЕР ХМЛ ФАЙЛОВ, ДАЖЕ ЧУЖИЕ ПРИМЕРЫ КОДА НЕ ПОНИМАЮ А до этого 5 лет водил такси и играл в танки?
Матаны, имеется такая вот матрица. Необходимо найти все "пустые" (нули) точки, вокруг которых есть 3 и более единичек. На пике там Х поставил. Какой наиболее рациональный способ нахождения этих Х-ов? Простой топорный перебор if Xm+1,n and Xm,n+1... как-то не очень. Если какая-то возможность поиска по "маске"?
>>402375 Просто прикладывай к каждому элементу матрицы (ну, не к каждому, но от 1 до n-1 "шаблон" 3х3. И считай сколько единичек окружает один элемент.
>>402551 В общем, кроме как for i in m: for j in n: ... (проверять каждую клетку) по-другому не сделать? Я надеялся на какой-нибудь векторизированный способ, или там операцию какую с матрицей произвести.
Правильно ли я понимаю, что -verbose режим вручную вписан в код? То есть, это не какой-то магический автоprint всего происходящего, а банальное if '-verbose' in sys.argv: print('...')? Ну там функцию printverbose написать и т.д., это уже детали.
C++ кун врывается в тред. Думаю подучить питон, чтобы писать на нем в тандеме с крестами. Это хорошая идея или с крестами не очень? Слышал про jython, но он под джяву, а с сython как-то глухо
>>403314 >в тандеме с крестами С c++ оче плохо взаимодействовать, т.к. он не имеет стандартизированного ABI, из-за чего приходится делать вручную или генерировать автоматически сишные обертки.
>>402551 >прикладывай к каждому элементу матрицы "шаблон" 3х3. А каким образом это сделать-то? например, маленькая_матрица in большая_матрица False всегда выдаст, numpy.where тоже []. Пока что у меня просто для каждого элемента 4 if'а (через try, чтобы и крайние проверяло), после которых c+=1.
parser = argparse.ArgumentParser() parser.add_argument('-u', '--user') parser.add_argument('-c', '--color') namespace = parser.parse_args() command_line_args = {k:v for k, v in vars(namespace).items() if v}
Вопрос по дженге. Когда я делаю проект на своем компе, то использую джангосервер. Но когда я деплою его куда-то, то там уже нормальный сервер стоит, например Apache. Значит, это сервер занимается отдачей статических файлов? А базу данных тоже надо настраивать на работу с сервером? Где вообще почитать про деплой приложения на джанге? Какие настройки использовать?
Есть два стула: остаться тип фулл-стек разработчиком (джанга 2 года + ангуляр 1 год), можно пойти на вакансию с фронтендом онли. С одной стороны, я круче прокачаю фронтенд и стану более лучшим фуллстек девелопером потом. Кроме того, есть впечатление что фронт сейчас перспективнее. С другой стороны, проебу экспу с бекендом. Как быть?
>>404895 Бекендов много (и джанга далеко не самый популярный из них), а фронтенд (читай javascript и браузер) один.
Либо, если бекенд тебе ближе и уже есть целых два года опыта – имеет смысл перекатиться на РОБУСТ СКЕЛЕЙБЛ ИНТЕРПРАЙЗ стек уровня go/slala или на чем там щас модно хайлоад писать.
>>404903 То есть ты предлагаешь пилить всякие красивые эффектики, анимацию, чтобы все так "вау" на убогом джаваскрипте в треде про питон? В добавок, ты это отвечаешь на пост, где вообще не было вопроса про выбор бэкенда/фронтенда. Зачем так жить?
>>404912 >не было вопроса про выбор бэкенда/фронтенда Был вопрос про выбор фуллстак/фронтенд, мой ответ вполне релейтед.
>ты предлагаешь пилить всякие красивые эффектики С приходом javascript mvc большая часть логики приложения находится у клиента. А бекенд опыт уровня двух лет джанги как раз позволит максимально эффективно пользоваться инструментом.
С вакабой все было понятно, а как на макабе? Поглядев Chrome Console я нашел https://2ch.hk/posting.fcgi?json=1 и переданные данные, но не могу понять, как они передаются? Как их передать через cURL или еще как-то?
Привет, анон. Есть у меня одно задание, чувствую, что близок, но решить не могу. Что ввести, что запустилась функция bad я понял, а вот дальше (вернее начало, флаг вводится в начале), я хз. Помоги, анон
base64 as printf import random import math import time
def Captcha(): j1 = random.randrange(25) J1 = random.randrange(25) print("J1 = ",j1,"| j1 = ",J1+2) cap = j1 J1+2 return cap
def bad(ml,m1): mI = [4624, 10817, 10002, 10204, 9413, 14166, 9807, 11032, 15384, 9225, 11459, 10620, 1948, 11677, 9230, 11464, 2320, 7761, 15394, 10628, 12789, 13017, 10022, 13947, 13480] if (chr(len(ml)) > chr(len(mI))): print(printf.b64decode(b'RmxhZzogdGhpcyBpcyB2ZXJ5LXZlcnkgbG9uZyB3b3JkLCBhcyB5b3Ugc2Vl')) return for mi in range(len(mI)): mI[mi] = (mI[mi]+mi) >> 0 for mi in range(len(ml)): if ((pow(ord(ml[mi])^mi,2)+2mi) << 0) != mI[mi]: ss = input('>> ') if int(ss) == m1: print("Ok. Your are 'win'!") print(chr(70)+chr(108)+chr(97)+chr(103)+chr(58)+' '+ml) return else: return time.sleep(6) print(printf.b64decode(b'RmxhZzo=')) print(ml) return
def Start(): SecretKey = random.randrange(1,30) print(SecretKey) MegaLongInt = Captcha() flag = input('>> ') if (int(input(">> ")) != MegaLongInt): print("Flag is \"You are 'winner'!\"") else: bad(flag,SecretKey) return
2 дня в питоне. Хуями не закидывайте. S = {'xui': 'sosesh', 'xuy': {'ololo': 'privet'}, 'rnd': ['1', '2']} Есть возможность добавить/удалить/изменить пару ключ:значение в ключ xuy?
Подскажите нормальную IDE с нормальным автодополнением кода. В pycharm поставил pygame и он нихрена не дополняет: пишет всякую херь вроде модулес миссинг, анресолвед референс, однако, код все равно работает.
Как в медленном работать с байтиками напрямую? Чтобы они были в двоичном виде. То есть мне надо открыть файл, его закодировать примитивным шифрованием и сохранить. А потом обратно. Вот и я хочу, например, каждый бит просто ксорить.
Решил попробовать vim + jedi. Пишу "modulename.", олл гуд, всплывает список содержимого модуля. Но пробую "some = 1; v = some +1", и в присваивании v some не дополняется и приходится писать руками. Так и должно быть?
Быстренький вопрос. Как в джанге просто отправить куки и потом прочитать когда надо? Мне чисто для учебного проекта laba1, поэтому нужен самый простой спрособ.
Надеюсь, умирать вы будете так же медленно, как работает ваш говнокод. Двадцать! Двадцать ебаных минут расчитывало зависимости для обновления трех, блять, трех, сука ебаных пакетов!
>>400291 Устанавливаю pycuda, в процессе лезут какие-то ошибки, но вроде как встает. Запускаю тесты и получаю: "ImportError: /usr/local/lib/python2.7/dist-packages/pycuda-2014.1-py2.7-linux-x86_64.egg/pycuda/_driver.so: undefined symbol: cuMemHostRegister_v2". Объясните, как это поправить? Гугол молчит.
>>> class dict_(dict): def append(self,args): for arg in args: if arg and type(arg)==dict: for i in arg.iteritems(): key = i[0] value = i[1] self[key] = value else: raise Exception("Not a dictionary.")
>>> x = dict_({4:3}) >>> x.append(5)
Traceback (most recent call last): File "<pyshell#136>", line 1, in <module> x.append(5) File "<pyshell#134>", line 10, in append raise Exception("Not a dictionary.") Exception: Not a dictionary. >>> x.append({11:11},{12:12}) >>> x {12: 12, 11: 11, 4: 3} >>> x.append({433:23,223:12}) >>> x {12: 12, 11: 11, 4: 3, 223: 12, 433: 23}
Пытаюсь скачивать файлы по списку из аргумента, вот только не работает: http://pastebin.com/aUtbyA6d Где накосячил?
Выдает: user@peka:~/Documents/PythonProjects/downloader$ ./downloader.py urllist.txt Traceback (most recent call last): File "./downloader.py", line 12, in <module> data = urllib2.urlopen(url) File "/usr/lib/python2.7/urllib2.py", line 127, in urlopen return _opener.open(url, data, timeout) File "/usr/lib/python2.7/urllib2.py", line 404, in open response = self._open(req, data) File "/usr/lib/python2.7/urllib2.py", line 422, in _open '_open', req) File "/usr/lib/python2.7/urllib2.py", line 382, in _call_chain result = func(args) File "/usr/lib/python2.7/urllib2.py", line 1214, in http_open return self.do_open(httplib.HTTPConnection, req) File "/usr/lib/python2.7/urllib2.py", line 1187, in do_open r = h.getresponse(buffering=True) File "/usr/lib/python2.7/httplib.py", line 1045, in getresponse response.begin() File "/usr/lib/python2.7/httplib.py", line 409, in begin version, status, reason = self._read_status() File "/usr/lib/python2.7/httplib.py", line 373, in _read_status raise BadStatusLine(line) httplib.BadStatusLine: ''
А как уменьшить размер скомпилированной проги? Однострочный print("hello, world") компилируется в 17.7 мегабайт. Впрочем, и весьма значительный код в те же 17.7 мегабайт. Ладно, 9.5 мегабайт там python framework занимает, но остальное-то? На 8 мегабайт каких-то библиотек зачем-то напихано, хотя они вовсе не используются. Как у людей получается 1-5 мегабайтные приложения вообще с ГУИ делать? Весь секрет в использовании уже имеющихся на компьютере пользователя библиотек и модулей? комплию с py2app
>>406994 >>407001 Ошибка >httplib.BadStatusLine >A subclass of HTTPException. Raised if a server responds with a HTTP status code that we don’t understand. может с ссылками в файле что-то не так
>>407002 Байтоебство в питоне это крайне ебанутая затея. В экзешнике нихуя не компилируется кроме библиотек там находятся библиотеки и интерпретатор + ддлки. Вот твои мегабайты.
Самое действенное. Сжать библиотеки upx’ом. Консольное приложение. Работает элементарно. На вход передается файл, оно его сжимает.
Удалить unicodedata.pyd, bz2.pyd, select.pyd, w9xpopen.exe. Веса немного, но, как минимум, в проекте станет меньше файлов
Если в setup.py указать опцию optimize:2, то модули будут компилироваться в .pyo (python optimized code), а не в .pyc (python compiler script). Это не дает большого эффекта. И наконец, можно подчистить library.zip от неиспользованных модулей и кодировок. Только аккуратно.
Такой вопрос, значит. Предположим есть гуи приложение. И частенько так бывает, что поведение элемента меняется после первого нажатия. Например, клавиша добавить в избранное превращается в удалить из избранного. Как такое реализуется? Например вот в фреймворке kivy нажатие вызывает метод on_touch_down. Если скажем, я буду использовать некую переменную, в которой будет адрес метода, который надо вызвать из on_touch_down. Какой нибудь __touch_handler. И я каждый раз буду присваивать ему ссылку на новый метод. Так делают? Или есть другие годные практики?
>>407289 > Или есть другие годные практики? Можно попробовать реализовать (или найти) одноразовые события. Либо, в случае с добавлением в избранное, метод on_touch_down может вызывать, в свою очередь, обработчики из следующей структуры: https://docs.python.org/3/library/itertools.html#itertools.cycle
sosoni pomogite pls 13. Проверьте выполнения выражения set (sent3) <set (text1). Измените аргументы функции. Результаты объясните. 26. В строке "Love me tender, love me sweet, never let me go." Написать программу для нахождения: Количества употребление слова "me"
Этот класс из этого файла импортируется в дргом и там создаётся объект этого класса с другими параметрами, а не теми, что указаны в этом файле. Если сделать obj = Class("A", "B", "C") То результат будет: "A" "b" "c"
Почему в __init__ он правильно воспринимает аргументы, а в методах обращается именно к тем, что были заложены внутри .py файла? (Разумеется, если их оттуда удалить, то он попропусту будет ругаться на undefined переменную.) Получается, мне нужно все аргументы в self.arg в ините переводить?
>>407430 там в __init__ нужно self.method1() добавить, чтобы он при создании вызывался, разумеется.
Потестировал, оно и без всяких импортирований именно так работает. Впрочем, можно вызывать self.method1(arg1, arg2, arg3), тогда всё работает.
Вся проблем просто в том, что в моём случае method1 это event_handler, так что никакие аргументы я в него передать не могу. В моём случае только self.arg1 = arg1 можно сделать и далее их использовать в методах? Или можно что-то ещё сделать?
>>407466>>407465 Я уже примерно догадался, да. __init__, получается, ничем особо от других методов не отличается, кроме его автоматического выполнения при инициализации класса? Просто мне (почему-то) казалось, что эти переданные в класс аргументы им "запоминаются", то есть передаются в том же self, и в любом месте могут быть использованы.
В книге Learn Python The Hard Way есть упражнение, в котором нужно исправить ошибки в говнокоде. Код тут: http://learnpythonthehardway.org/book/exercise26.txt Я всё исправил (http://ideone.com/mnYWjR), всё работает, кроме одного: так получается, что этот файл импортирует сам себя, и из-за этого запускается по нескольку раз: вручную, и проходя строчу import. Я выполнил упражнение, или есть способ запускать один раз?
Вопросик такой, если серии "нахуй оно тебе надо". Есть хоть сколько-нибудь значимая разница в порядке условий в if/else? Допустим, переменная принимает значения от 0 до 100, равноверятно, и написав if foo>95: print(foo) else: pass
Делаю ли я плохо? Лучше ли будет написать if foo<96: pass else: print(foo)
Потому что гораздо чаще foo будет меньше 96? Короче, стоит ли расставлять условия (особенно если несколько elif'ов) в порядке снижения частоты их выполнения? Если их там тысячи таких мест будут во всей программе, например.
>>407949 Это тебе надо смотреть байткод питона. Сколько операций производят те или иные действия. Но если смотреть ассемблер, то сначала просто сравнивается два числа и выставляются соответствующие флаги, а потом в зависимости от этих флагов производится переход. То есть количество операций одинаково.
Код ______________________________________________ for i in range(len(t)): x = index['threads'][0]['posts']['comment'] a = index['threads'][0]['posts']['name'] cur.execute("insert into po values (%s, %s) %(x,a)") cur.commit() ______________________________________________
Traceback (most recent call last): File "android.py", line 18, in <module> cur.execute("insert into po values (%s, %s) %(x,a)") sqlite3.OperationalError: near "%": syntax error
>>408010 Уже нашел >cur.execute("INSERT INTO po VALUES (?,?)" (a,x)) Но теперь >Traceback (most recent call last): > File "android.py", line 18, in <module> > cur.execute("INSERT INTO po VALUES (?,?)" (str(x),str(a))) >TypeError: 'str' object is not callable
Мне вот интересно. Теоретически, можно на питоне реализовать все что угодно. Например, я хочу сделать игру на kivy. Но смогу ли я нормально реализовать освещение? Что-то я сомневаюсь. Есть ли там техническая возможность изменять только часть спрайта? Вообще, что такое свет в 2д играх? Шейдеры? Подбор нужного цвета каждого пикселя?
>>400291 Конструкция elif в блоке except, который в цикле, не работает?
for key,value in hash.items(): try: >действие except: elif key = 1: print "Действие не взлетело.Запускаю процесс 1" elif key == 2: print "Действие не взлетело.Запускаю процесс 2" elif key == 3: print "Действие не взлетело.Запускаю процесс 3"
>>408656 А, конструкция IF ELIF ELSE же. Понял. Всё работает. if key == 1: print "Действие не взлетело.Запускаю процесс 1" elif key == 2: print "Действие не взлетело.Запускаю процесс 2" elif key == 3: print "Действие не взлетело.Запускаю процесс 3"
Раз тут упомянулись 2д игры, задам вопрос по поводу вывода изображения. А как его "по-настоящему" делают? Каждый кадр всегда прорисовываются все элементы заново? Например, если мне нужно вывести фоновую картинку и клетки поля, а потом только поверх них что-то рисовать, нормально ли, что у меня это всё стоит в on_draw(), то есть, он каждую секунду всё это прорисовывает по много раз? Или оно и так, для вывода на экран, каждый кадр должно прорисовываться/сообщать гпу обо всём? Просто мне как-то кажется более разумным один раз при старте нарисовать это всё, а потом не трогать. Я просто в процессе работы видео-драйверов не смыслю, может оно в принципе только так и работает. Если я, например, прорисовку изображения вынесу в отдельную функцию и убери все очистки экрана и прорисовку фона выведу в отедльную функция (чтобы вызвать один раз), то оно при начатии рисуется и потом "пропадает", оставаясь только в виде артефактов сзади, а прорисовка движущихся объектов оставляет за собой как бы след, который постепенно (в течение чуть менее секунды) исчезает.
В общем, кто что может интересного рассказать/ссылку кинуть о работе с open gl?
>>408762 А ещё сопутствующий вопрос: Почему-то частота вызова функции с некоторым интервалом времени (в доках написано, что секунды указываются) зависит от фпс. Почему? У компьютера нет как таковых часов, что ли? Я знаю, что по крайней мере один из багов в халфе первой был выставление фпс в >9000 и прижатие одной дверью, которая случайно лечила хп, а не отнимала, вело к добавлению тысяч хп в секунду. В диабле тоже все длительности яда и прочего были завязаны на кадры. Почему так?
Все работает, только нужен Grab и модуль какой-то который с грабом в комплекте для чтения css селекторов. Кто допишет чтобы создавалась папка с названием треда и все картинки качались туда - молодец. Ну и от Grab можно избавится А то я уже хочу спать.
Официальный тутор по джанге требует понимания основ веб разработки и mvc. А есть ли годные туторы для детей-аутистов, что включали бы в себя все в комплексе? А то непонятно, как учить, с какой стороны подойти. Сесть и начать фигачить код, как это обычно делается, не выходит.
>>408968 >>408967 Начал читать Бизли и ни хуя не понимаю. Опыта в прогреммировании нет. Как научиться кодить понемногу? Каким-нибудь базовым командам и функциям.
Как сделать так, чтобы лямбда была в ините, а не в аргументах при создании объекта? То есть, чтобы создавая объект через c = Class(x+5), поведение было таким же? (Т.е. присвоение self.y не значения, а функции)
>>409142 Или это в принципе невозможно, потому что (x+5) просчитывается именно в момент передачи его в качестве аргумента, то есть на момент self.y = arg, arg равен результату и никакого понятия о том, что передавалась функция, а не число, не имеет?
>>408836 А ты повтори все подряд за туториалом. Он не сложный, правда. Весь код там есть. Потом пробуй написать свой блог с одной формой - если что забудешь смотри опять в туториалах. Потом попробуй опять с нуля что-нибудь простое написать. Так со временем и вольешься.
Хочу я того, чтобы в переменную функции записалось не значение, а функция/операция, переданная и сформулированная в аргументе. Но, по-видимому, "x+5" это и есть как бы значение, сами действия никуда кому не передаётся и сразу выполняются.
Прописать "self.y = lambda: arg + 5" в ините нельзя, потому что в этом-то и весь смысл, что функция может быть разной (и она довольно громоздкая, а не x+5), иначе и смысла во всём этом не было бы.
>>409187 Не, строкой не пойдёт, там же переменные не из глобал скоупа, а всякие self.param передаются из другого класса. Ну ладно, пусть так тогда будет. По сути, я просто хотел перенести символы "lambda: " в другое место для красоты.
>>409192 >А зачем тебе? В смысле зачем? Ну ты с таким презрением "это же питон" говоришь, вот мне и интересно стало, как это было бы сделано в "не питоне" и "нормальном языке". >Вангую, что у тебя там хуёво спроектированная пердолина. Если интересно: http://ideone.com/EqFWot
>>409218 А если у меня два окна? Какое из них хардкодом вписывать в метод класса? А если я захочу изменить название переменновать window = Window() DRUGOE_WINDOW = Window()? Снова переписывать класс меню? А если я захочу добавить вторую менюшку, того же класса, но которая будет не относительно размеров окна, а относительно размеров какого-то другого элемента (рамочка там, например)? self.x и self.y должны быть просто изначальной, "нулевой" точкой данной конкретной инстанции объекта класса Menu, относительно которой все элементы рисуются.
>>409224 >А если у меня два окна? Одно меню в два окна? Наркоман шоле? >Какое из них хардкодом вписывать в метод класса? Никакое. >А если я захочу изменить название переменновать window = Window() DRUGOE_WINDOW = Window()? Снова переписывать класс меню? Таки советую тебе почитать что-нибудь по ООП. >А если я захочу добавить вторую менюшку, того же класса, но которая будет не относительно размеров окна, а относительно размеров какого-то другого элемента (рамочка там, например)? Вот и передашь ей рамочку, например.
>>409228 >Одно меню в два окна? Наркоман шоле? Два окна, в каждом по меню. >Вот и передашь ей рамочку, например. В смысле, ты предлагаешь мне menu = Menu(window, args) делать? Тоже вариант, конечно.
>>409230 А, нет, не вариант. Для каждой инстанции Menu может быть нужна своя функция расчёта нулевой точки же. Для одного меню это self.width/2, для другого — self.width9000/self.height.
>>409230 >Два окна, в каждом по меню. Меню-то разные. >В смысле, ты предлагаешь мне menu = Menu(window, args) делать? Да. Обычно так вообще и делают: передают область (фрэйм), на котором меню (или ещё какое говно) должно нарисоваться.
>>409233 >Меню-то разные. Ну в смысле разные? Если это "меню" содержит кнопки "выйти" и "сделан фон ядовито зелёным", чего им разным-то быть? Оба меню будут одного класса, просто рисоваться в разных окнах и в разных местах. Так-то я window и так передаю для создания событий по клику на эти кнопки.
Я >>409232, в общем, объяснил проблему. Что мне нужен доступ не конкретно к окну, а к формуле расчёта нулевой точки, чтобы когда надо было перерисовать их, оно стояло именно там, где нужно. Размер окна там по чистой случайности.
>>409236 > тебе никто не запрещает передавать относительные координаты расположения. Ну я вот их через lambda: ... и передаю. Как ещё можно? Мне нужно, чтобы именно в момент вызова place_buttons() расчитывались self.x и self.y с самыми последними данными.
>>409237 >Ну в смысле разные? Объекты разные. >Как ещё можно? Передавай менюшке окно и относительные координаты, а она сама уже пусть считает и рисует как хочет. И никаких костылей тогда не понадобится.
>>409241 >Объекты разные. Лол, ну это понятно. Я к тому, что класс и методы там одни и те же.
>и относительные координаты Как? Мне нужно не просто в момент передачи чтобы они были относительными, а в любой момент вызова, и относительно уже новых значений тех же переменных.
>>409244 Вот тебе пример self.menu = Menu(self, x = 0.5, y = 1) А менюшка, когда ей надо, вычисляет реальные координаты как-нибудь так: real_x = self.frame.width self.x real_y = self.frame.height self.y И никаких ломающих глаза и абстракцию лямбд.
>>409249 Добавлю, что на конкретное меню мне сейчас уже плевать, я ему хоть харкодом мог бы расположение вбить для двух режимов работы, а вот способ "правильного" выполнения нужного мне действия узнать хотелось бы.
>>409249 >self.menu1 = Menu(lambda: self.p2/self.p1, '1') >self.p1 = self.p1 × 1.3 >self.p2 = self.p2 / 1.3 >self.menu1.output() За такой грязный побочный эффект нужно пиздить руками и ногами. Лучше делать как-то так: menu1.x = ... или menu1.move(x = ..., y = ...), а не менять значение магических переменных.
>>409253 >побочный эффект Почему побочный? Это именно то, что мне нужно.
Ну и каждый раз, когда какая-то переменная (будь то размер окна или размер кнопки, под которой должно появляться меню) — передавай всё это 100-символьное говно в аргументы инб4: записать в переменную и передавать её? Я при создании объекта говорю ему, относительно чего ему нужно строится. Никаких побочных эффектов быть не может, потому что при изменении размера окна ему нужно подвинуться, при изменении отступа от края окна, меню нужно подвинуться. При толщины фигурки человека — меню нужно подвинуться, чтобы не перекрывать этого человечка. Что не так-то, я не пойму?
>>409253 В общем, если весь твой ответ заключается исключительно в "так не делают" — хорошо, учту, буду стараться так не делать. Просто тут ну сам аллах велит сделать автоматизм же.
>>409255 >Почему побочный? Потому что побочный. Ты сам на код посмотри. Что там происходит? Ты где-то перемещаешь меню? Нет, ты меняешь значение какой-то переменной. Такой код нечитабеленый и труднно поддерживаемый. Почитай какую-нибудь книжку по ООП или просто СИКП, где поясняют, как стоить абстракции, и не городить грабли там, где они не нужны.
>>409258 >Ты где-то перемещаешь меню? Да. Изменяя эту переменную, я хочу, чтобы меню подвинулось. menu1.output() это, грубо говоря, menu1.move(), просто назвал не так (без вызова функции координаты самих кнопок не обновятся же, там лупа никакого нет).
>>409260 http://ideone.com/CExeXL Во общем, решил я написать то, как я подобную функционально хотел бы использовать. С комментами, нормальным названием функций, обозначающим именно то, что делают.
Можешь развёрнуто ответить, почему и чем такая реализация плоха? И какие шишки я должен набить? Лично я, наоборот, только простоту и удобность в таком коде вижу.
Важные комменты: > 4 орбы — 1 класс. 2 созвездния — 1 класс, но разные положения как каждой из орб, так и самих созвездий. Там не написано. > Каждое созвездие внути себя содержит вбитую в себя функцию определния положения своего центра > Обновляем созвездия и рисуем их > Мне не нужно думать, какое, куда и на сколько двигать каждый раз когда это нужно сделать.
>>409300 >Можешь развёрнуто ответить Я уже заебался тебе разъяснять, и не собираюсь пересказывать то, что ты и сам можешь прочитать. Открой уже статью о вреде побочных эффектов, почитай об основах ООП и проектирования в целом. Ну, или говнокодь дальше.
>>409300 А если вкратце, то поведение объекта не должно зависеть от направления волос на среднем пальце левой ноги, оно должно зависеть только от своего внутреннего состояния. Слышал про инкапсуляцию?
>>409307 Да почему, блядь, побочных?! self.y() — функция, вызываемая при переисовке. Просто я этой "self.y" придал функцию через аргумент, при созаднии объекта. Изменяет она своё значение только тогда, когда я прошу.
Всё, что я делаю, это заменяю: cave.draw((cave.stalactite1-cave.stalagmite1)/2) при каждой необходимой перерисовке На: 1 х Constellation.y = (cave.stalactite1-cave.stalagmite2)/2 и cave.draw() при каждой перерисовке.
Что там, чёрт побери, неочевидного, неявного, и побочного!? В общем, ладно.
>>409310 > то поведение объекта не должно зависеть от направления волос на среднем пальце левой ноги Но мне нужно, чтобы оно от этого зависело. И поведение этого объекта зависит от своего внутреннего состояния, просто это состояние меняется согласно некоторым условиям изменения состояния другого объекта.
>>409312 Своё не пахнет. Вот тебе простой критерий определения говнокода: если ты пишешь одно, а подразумеваешь другое, то поздравляю, ты только что выдавил дымящуюся кучку.
Можно как-нибудь в одну строчку и с одной переменной сделать так, чтобы она при каждом обращении к ней меняла своё значение, в некотором диапазоне с некоторым шагом, сначала возрастая, потом угасая?
То есть, что-то вроде: x = 0 x = (x+33)%99, Но в этом случае x принимает значения 0->33->66->0, а мне нужно 0->33->66->33->0.
С косинусом получается только имея вторую переменную. Полдня просидел — не смог придумать.
>>409712 Нет, нельзя. Давай формализуем по частям, тобою написанное. Ты хочешь найти некую функцию в математическом смысле слова, а не в программистском f(x), такую что f(0) = 33, f(33) = 66, f(66) = 33 и f(33) = 0 чтобы ты мог написать в коде x = f(x). Посмотри внимательно на второе и четвертое равенство. Функция от одного и того же аргумента дает два разных значения. Это противоречит понятию функции, т.е. такой функции не существует. Не выебывайся, сделай флажок is_growing = true / false, через if распиши два случая, оформи это в функцию и забудь про это. Косинус, блядь. Ты б еще через параметризацию ленты Мебиуса сделал, хули мелочиться.
>>409747 В смысле зачем? Нужна мне вот пульсирующая переменная. >>409761 >сделай флажок is_growing = true / false, через if распиши два случая, оформи это в функцию >Косинус, блядь. Лол, а что такого-то? Нахуй нужны флаги, если математика дала нам периодические фукнции? y = bias + Axcos(x) x = (x+step)(остаток_от_деления)2pi И готово.
>>409764 >Нахуй нужны флаги, если математика дала нам периодические фукнции? Люди придумывают аппроксимационные формулы, считают величину невязки, рассчитывают требуемую точность представления числа и достаточное количество итераций для сходимости, оптимизируют все это дерьмо, и все это для того, чтобы какой-то индус мог вычислить 0 1 2 1 0 без флагов. С другой переменной, набитой каким-то флоатовым дерьмом, но зато без флагов. Пиздец.
>>409776 А мог бы сделать, чтобы у тебя в проге гигабайт памяти ушел на какую-то хуйню. Чем тебя решение с флагом не устраивает? Быстро? Быстро. Читабельно? Читабельно. Мало кода? Мало кода. Если уж ты так не переносишь дополнительные переменные, запихай этот флаг в старший бит числа. Будет менее читабельно, но тоже быстро. А если тебя так выбешивает дополнительная строчка кода, запиши if в тернарном виде, как настоящий BATYA. Но зачем выдумывать поебень, которая жрет в разы больше ресурсов, чем требует самое тупое наивное решение, и которую сам через неделю не поймешь, я решительно не понимаю. Да, прикольно, конечно, когда можно в одну формулу все запихать, сам так делаю постоянно. Но надо и меру знать.
>>408830 Спасибо, интересно. Правда, всё равно вопрос остался: если программа может показывать количество кадров в секунду, значит у неё есть представление о настоящем времено. Почему оно не может использовать те же самые часы для вызова функция независимо от фпс без всяких пердолений с пропуском кадров?
И ещё вот по ООП вопрос. http://ideone.com/6tKYQ0 Есть, значит, сама игра и как бы сетевой клиент к ней, отдельным классом, в который передаётся объект класса игры. Как только клиент получает сообщение, он создаёт событие, а игра, ловя это событие, делает что там ей надо. В есть матрица, по значениям которой либо рисуются соответствующие спрайты, либо ничего не рисуется. Соответственно, в функции отрисовки стоит луп по элементам матрицы и if x < 5: risouvat'. Также там есть собственно словарь, из которого и берётся текстурка. Матрица может принимать значение 5, но ключа такого в словаре нет, потому что для этого значений матрицы рисовать ничего не надо (то есть, if x < 5 такой элемент не пройдёт и как бы норм должно быть).
Проблема заключается в следующем: если событие смены значений матрицы вызывается клиентом, то иногда (довольно-таки часто, я бы сказал) выпадает ошибка KeyError 5.0 на одной из строк: sprite = pyglet.sprite.Sprite(SPRITES[self.matrix[i,j],...) sprite.opacity = OPACITY[self.matrix[i.j],...) стоящих внутри if self.matrix[i,j] < 5 !!!
Если же я это же событие буду вызывать из самой игры, по нажатию кнопки, например, то за всю ночь стресс-теста ни одной ошибки не происходит. Ни через вызов события, ни через clock.schedule, ни через смену матрицы по нажатию кнопки эпплскриптом — никак, всё работает правильно.
Как я понял, каким-то образом получается так, что элемент матрицы меняет своё значение уже после того, как выполнилось условие < 5. Но почему? Чем отличаются вызовы событий из Game и из NwClient? Ведь вызывает его, в итоге, один тот же объект, разве нет? Решил это тем, что в самом начале присваиваю значение матрицы локальной переменной, по которой уже и идёт сравнение, то есть изменение матрицы более не влияет эту итераци лупа. Но нормально ли это?
Я вот проходил курсы на юдасити и там пользователя определяли по кукам. То бишь у него имя и хэш пароля вроде. И таким образом все записывалось. Давно это было, может и путаю чего. Это нормально так делать? Как в джанге делают аутенфикацию пользователь? Я имею в виду common practice конечно. А не конкретный код.
>>410010 Окей, попробую одним предложением описать: Создание объектом А события внутри функции объекта Б позволяет вызываемой функции выполняться посреди выполнения другого процесса этого же объекта А. Почему?
Интересно, делать сайт-визитку на джанге - это по воробьям из пушки? В смысле, все что потребуется от джанги - это выдавать гребанную страницу, а остальную работу сделает html, css и js. С другой стороны не осваивать же мне все эти убогие вордпрессы.
Анон, подскажи ньюфагу как быть в непростой ситуации. Операционка Windows 7, есть установленная ide Enthought Canopy и есть виртуальное окружение virtualenv. Я хочу установить django в виртуальном окружении. Активирую окружение, устанавливаю pip install django, устанавилось без проблем, но при попытке запустить скрипт создания нового проекта [code]> (env) django-admin.py startproject blabla[/code] в виртуальном окружении, открывается редактор canopy и открывает django_admin.py. Чому так получается? Где-то прописано приложение по умолчанию, которое используется для открытия файлов .py?
Вопрос от ньюфага. Вот такой код: import urllib.request url=input('Введите URL: ') code1=urllib.request.urlopen(url) print('Ответ сервера: ',code1.getcode(),' - ',code1.geturl()) print('Заголовки:\n',code1.info()) input("Press Enter to continue...")
Аноны, поясните, что должен знать крепкий сферический джуник в вакууме?
Небольшое кулстори: Студентота с колледжа. Сам уже пол года пытаюсь устроиться в конторки (ДС хохлостана) - только ОДНА набирает джуников. Ок. Мне больше одного места работы не нужно.
Прохожу тех. собеседование: годно рассказал про замыкания, декораторы, старые\новые классы (версия 2.7), дескрипторы. Налажал с set'ами (посколько их не использовал, знаю по сути только о их существовании), нес несвязную пургу про базы данных (немного рассказал о MySQL, Mongo, Redis). Честно сказал о том, что плохо разбираюсь в реализацию многопоточности (про GIL в курсе), но работал с Celery.
Как мне разрезать этот зип лист на отдельные зип-листы по этим меткам, и каждому новому листу дать индивидуальное имя? Всего таких разделений в списке около десяти-двадцати.
на ум приходит сделать (с избытком) .txt файлов с последовательными номерами, и раздуть код повторами для каждого файла. Т.е. писать сегмент в файл до метки, закрывать, открывать следующий и т.д. Имхо это изврат, не хотеть так.
Гайс, посоветуйте клауд хостинг на джанго. Я щас новичок в Пистоне, и выбрал джанго для осваивания. Нужен клауд хост, чтобы я мог пушить гитом, это был годный хостинг, можно было подключать CDN.
Сейчас всё лежит на хероку, но я человек привыкший к хостингам для пшп цмс-ок где получаешь все плюшки из коробки за небольшие(когда как) деньги. Но workflow на хероку мне в целом оче нравится, и я хтел купить платный акк там, но когда увидел цену - понял, что для учебных потребностей это дорого.
>>411309 Я пользуюсь fullspace.ru хоть у них как-то все не оче выглядит, но зато за платеж от 800 рублей дают бесплатный домен в ru. А в оппосте тебе чем не угодил pythonanywhere?
Вобщем посидел-подумал, и решил что чем резать лист на листики, лучше я его проиндексирую, а потом сделаю дикшонари, где кей будет отдельный лист, а велью - список стрингов. Как-то так. Но всё равно спасибо
Написал простой чатик и обернул его в ткинтер. Хочу, чтобы он выглядел получше. Дальше ебаться с ткинтером или освоить wxPython? Или вообще смотреть в сторону PyQt? В общем прошу пояснить нубу за графические пакеты, заебало уже в консольке пердолиться.
>>411872 Забыл добавить. Я раньше писал все на С++ и смотрел в сторону Qt. Так может как раз и освоить PyQt дабы мог легко связываться с сишкой, когда надо? Просто PyQt мне показался слишком тяжелым для моих простеньких целей, а wxPython вроде довольно прост и сразу же встроен в пайтоняшку.
П-поцаны, нужно заскрапить инфу из myanimelist.net, но там ебучий robots.txt и тэг <META NAME="robots" CONTENT="noindex,nofollow">, и поэтому заскрапить нихуя не получается.
>>411954 Китайские мультики тут не при чем. Хотел с мала собирать инфу о недавно комплитнутых тайтлах, чтобы палить малы анончиков в реакшон-треде. Собственно, это можно делать и вручную, но скриптом все это быстрее должно было осуществляться. Да и практика хорошая для ньюфага в python. Ладно, подожду чуток, может добавят в белый список.
>>411959 Может и проще, но хочу именно в python все это реализовать, ибо начал учить его. Практика написания py-скриптов в приоритете над конечным результатом.
Питоны, а что нынче с Boo - знает кто ? Вроде как годный компилятор, но в интернетах глухо. Разве что в районе Булина пара человек на нем игори штампует, попутно пропагандируя.
Поясните пожалуйста ньюфагу, почему рекомендуют изучать именно Питон? Реально ли зарабатывать твёрдо зная этот язык програмирования паралельно изучая смежные?
>>412268 Поясните пожалуйста ньюфагу, почему рекомендуют изучать именно Питон? Реально ли зарабатывать твёрдо зная этот язык програмирования паралельно изучая смежные?
>>412271 Ну а как можно приступать к чему то не зная перспектив? Хорошо, задам вопрос по другому - за что стоит браться, что бы иметь реальные перспективы зарабатывать деньги? В какой сфере есть спрос на специалистов, как не соснуть, и поможет ли мне в этом Питон?
У меня есть два списка одинаковой длины ~40000, в одном - 1111111111111111112333333333345555555555555 и т.д., во втором просто рандомные числа.
Порядок и размер на этом этапе важны, первый список это ключ ко второму.
Мне нужно "закрепить" первый список относительно второго так, чтобы числа в первом списке перестраивались вслед за числами во втором, если я захочу например их отсортировать или отрезать ниже определенного значения.
Как это лучше сделать? Если я сделаю словарь, в котором ключ это число из первого списка, а значение - это список чисел которые соответствуют первому числу, то как я буду потом сортировать значения? Если я поменяю ключ со значением местами, то у меня будут повторяющиеся значения во втором списке, которые став ключом изменят количество позиций в первом списке?
Поясните плиз за SciPy и NumPy. Вот я подумал, что мне нужна матрица. Просто питон 2.7 с python.org в матрицы не может, так? Т.е. мне нужно что-то типа аддона? Вот есть numpy и scipy, они оба имеют этот функционал, или только numpy? Если я хочу накатить NumPy, как это лучше сделать? На оффсайте какой-то хорткор, компиляция каких-то билдов, скачать компилятор без смс, что за ад вообще? Там же даны ссылки на какие-то сборки, я так понимаю что это некий Вован и он уже всё скомпилировал, воткнул в питон, назвал сборочку каким-то именем и это можно качнуть? А оно ляжет на уже установленный питон или будет муть с шеллом и путями и "немогу импортировать numpy потому что всё криво встало и я ебал вообще"?
>>412367 NumPy — твоя либа для матриц. Ставится одной командой: [CODE]pip install numpy[/CODE] (ну или [CODE]pip3 install numpy[/CODE]). Не знаю, о каких проблемах ты говоришь.
Господа, прошел курс по Python на codecademy, сейчас решаю задачки на www.checkio.org. А куда дальше двигаться, что читать? Посоветуйте, что можно написать, что бы и не сложно для начинающего и интересно. Я из украшки, периодически просматриваю вакансии, но нигде не нужны джуны. Хотел бы переехать в Киев, но там тоже нет вакансий на джунов. Как начинать-то, уважаемые? Главное, что готов работать за еду, только бы обучали и опыт работы появился.
>>412367 Если ты под виндой, то для установки некоторых пакетов нужен C компилятор из определенной студии, поэтому есть сайт http://www.lfd.uci.edu/~gohlke/pythonlibs/ куда Вован выкладывает установщики со скомпиленными пакетами. Матрицы в numPy, scipy – это куча функций для инженерных и научных расчетов в духе преобразований Фурье и всяких интерполяционных многочленов Лагранжа.
>>412425 Чему тут учиться? Это просто способ объявления функции, ты мог также написать def t(x): return x[1] sort(key = t) Ну, а про key - http://habrahabr.ru/post/138535/
у меня сейчас другой затык. Есть список формата 111111111133333333555555555 и мне нужно подсчитать количество одинаковых нечетных чисел в каждом блоке. Я написал луп для этого, но он кривой и пропускает по единице из каждого блока, также пропускает нечетные числа которые встречаются только один раз, например 75 из ..73,73,73,75,77,77,77.. и я понять не могу, почему.
>if is_number(str_pep_number) == True Можно просто "if is_number():". Так как написанное под if выполняет в том случае, если следующее за ним вырежние является True. Соответственного, истинными являются как само True (возвращённое is_number'ом), так и True==True. Но лишняя операция сравнения же.
>if pept_iter_counter == 1000: >.... break Но у тебя и так луп <=1000, лол, зачем брейк с тем же условием добавлять?
ну мне производительность не нужна, мне главное не забыть что у меня за переменные и зачем они. break может и правда лишний, но я дебажил им на промежуточных числах.
Кстати код улучшился - я поменял порядок условий в if str_pep_number_int == pept_counter и if str_pep_number_int != pept_counter, теперь он не теряет единицы с каждого блока, но всё еще пропускает единичные числа.
>>412799 Ну я даже не столько из целей производительности, а просто чтобы ты знал, как оно работает, вдруг ты не просто не знаешь, что можно так.
Так а зачем там столько всяких проверок-то непонятных? Особенно == и != pep_counter меня волнуют. Со счётчиком-то какой смысл что-то сравнивать? Числа всегда только увеличиваются? Чем мой код тебе не подходит (переделаю/поправлю)?
А пропускает он вот почему: >начало лупа >str_pep_number = pep_current_line[0:3] Прочитали строку. >str_pep_number_int = int(str_pep_number) Перевели в инт. >if str_pep_number_int != pept_counter: Число не равно счётчику какому-то >... pept_counter += 1 >... a = 1 Инкрементровали счётчик, а =1 и... Новая итерация цикла! Соответственно, у тебя не только единичные числа пропадали, но и количество всех остальных чисел на 1 меньше, чем должно быть.
не, я сравниваю с сорцом глазами. всего столько сколько нужно, но пропущены все одиниочные числа.
я просто поменял порядок сравнений, равно или не равно pep_counter. Было: сначала ==, потом != - терял все единицы и единичные значения. Стало: сначала !=, потом == - единицы перестал терять, но также теряет единичные значения.
Общая мысль такая - у меня упорядоченная последовательность чисел. есть счётчик. Если число совпадает со счётчиком - например 1, и счётчик 1, в дикшонари записывается +=1. итератор +1, по любому. следующая строка, снова проверка. Если в списке пошло следующее число, то счётчик получает +1, дальше должно всё повторяться.
>>412823 >Если число совпадает со счётчиком Но зачем? У тебя есть словарь, в котором уже есть эти ключи. Зачем ещё какие-то счётчики дополнительные изобретать?
Ну и плюс, числа нечётные, а инкрементируешь ты его на 1 каждый раз.
Посоны,я только начал что-то высерать на пистоне(да и вообще погромировать) читаю щас Лутца,а там нужно воспроизвести скрипт,ну создал я файл с расширением .py,написал туда нужный код,а как открыть его через интерпритатор?Сколько не пытался-еррор.Хелп ми,плиз
>>413038 Теперь я кое что изменил(видимо,из-за того,что у меня и автора были немного разные версии) и теперь в IDLE все работает,только вот открыть его я по прежнему не могу.
Правильно ли я понимаю, что каждый Process() будет выделен на отдельное ядро, и, соответственно, если я хочу разделить на 4 ядра, то нужно делить задачу на 4 части и вызывать 4 Process()'а?
Если предполагается запускать программу на разных компьютерах, лучше сделать систему гибкой и вызывать столько процессов, сколько ядер (-1), или вызов 8 процессов на 4-хядерном компьютере ничего особенно плохого не сделает? (По тестам получается, что норм, но мало ли.)
Алсо, как быть с Queue.get()? Если задача требует времени на выполнение, то .get() всё останавливает, есил дело происходит в графическим интерфейсе, например. Только выносить в отедльный тред, где оно будет себе фоном сидеть и ждать?
>>413786>>413804 >куда его распределить — это уже вопрос ОС. Наверное, логично, что ОС его распределит на свободное ядро. Но да, если нет свободных ядер, нужно же будет всё равно запускать. >открой список процессов ОСи и сам увидишь У меня при старте двух процессов в диспетчере два python'оа по ~95% времени цпу отжирают, то есть в сумме как раз почти 200%, что свидетельсвуют о загруженности двух ядер. На маке, по крайней мере, оно всё показывает. С мультитредингом же всё равно только одно ядро на максимум забивается и всё.
Получается, можно не скупиться на раздельные процессы?
>вангую тубу надо почитать + и - треадинга, мультипроцессинга и ассинхронности Необходимого мне плюса мульипроцессинга у трединга нет, так что тут очевидно. А пот асинхронностью ты что имеешь в виду? Эвентлуп? Это есть уже и не совсем по теме, по-моему.
>>413863 Ну так это, вместо смеха, быть может, расскажешь тогда, не? Я ведь именно это и спрашивал: как заставить питон работать на всех ядрах. На СО посоветовали мультипроцессинг, при мультипроцессинге мой компьютер задействует все ядра. Где тут чего ещё сделать-то нужно, чтобы уж точно оно все ядра использовало? [Мне не обязательно выполнение конкретных задач на конкретных отдельных ядрах, а лишь доступ питона ко всем ресурсам компьютера.]
>>413863 Хотя на маленьком кол-ве процессов может таки разрулит. Но не удивляйся если все твои процессы окажутся на одном ядре.
>Наверное, логично, что ОС его распределит на свободное ядро. Смотря какая политика распределения и ещё туча факторов. Оно наоборот, в целях экономии может постараться полностью освободить максимум ядер, пока их время не нужно. Или все твои процессы могут быть вытеснены на одно ядро процессами других программ.
Короч, многозадачность на процессах ОС - это днивое дно, в ней плохо всё, начиная от пиздатого времени переключения контекста, большого веса и невозможности контролировать распределение без написания своего балансировщика/мигратора, заканчивая уёбищными низкоуровневыми средствами их контроля и взаимодействия. Хотя если у тебя там лаба, то похуй.
А так, чтобы программы выполнялись параллельно - их нужно писать параллельно или использовать платформы, которые это делают за тебя, но и на них программы должны быть написаны в определённом стиле.
>>413872 >Оно наоборот, в целях экономии может постараться полностью освободить максимум ядер, пока их время не нужно. Ну если их время не нужно, пусть вытесняет куда хочет. Или ты хочешь сказать, что имея 10 процессов с вычислением триллиона косинусов, может получиться так, что ОС даст им каждому по 5% времени, решив не перетруждать процессор (= дохрена времени он в простое)?
>>413877 Я же написал, вроде, что треды всё равно только одно ядро используют.
>>413877 Сразу видно иксперта. Чем по-твоему потоки от процессов отличаются? (Хинт: пространством в памяти. Все остальное, включая шедулинг, работает одинаково.)
>>413664 Юзай мультипроцессинг. Только не еби себе мозги очередями и процессами, когда есть божественный pool, для числодробения самое то.
from multiprocessing import Pool po = Pool(8) po.map(func,iterable) po.close() po.join()
>Правильно ли я понимаю, что каждый Process() будет выделен на отдельное ядро Нет, схуяли? Но в видне можно например назначить в диспетчере каждому процессу определенные ядра.
>>412332 >>412367 Тяжело смотреть на страдания заблудшей души. Ковыряние в библиотеках, установка скомпилированных сборок, возня с циклами, велосипеды из велосипедов. И все почему? Потому что тебе сказали, что питон легок в изучении и хорош для математических вычислений? Отринь лукавого! Открой свою душу для Wolfram Mathematica! С ней ты забудешь, что такое библиотеки, ведь про любое мирское деяние можно прочитать в Священном Мануале F1. Изучай его, и ты достигнешь просветления, от понимания того, что любое типичное действие реализуется парой-тройкой типовых функций, и твоя душа вознесется над кодом, программы твои станут писаться в одну строчку, и ты забудешь про компиляцию, ООП, статическую типизацию, пространства имен и прочие бренные суеты. свидетель математики
>>414251 У процесса контекст процесса, своя отдельная среда, личный хип и вообще это самый жирный примитив ОС. У треда - контекст треда, есть только личный стек, это более тонкий примитив. Процессы живут в ОС, треды живут в процессах.
Так вот, внезапно, ротация тредов по ядрам оптимальней, чем ротация процессов. Догадаешься почему?
>>414258 Наверное, потому что ты всю эту хуйню только что выдумал. Ты серьезно считаешь, что ОС при переключении процессов всю память одного процесса выгружает на диск, а потом память другого оттуда вываливает в ram? У меня для тебя плохие новости.
>>414263 По каким пунктам, ущербный? Я же тебе четко написал, и даже ссылки привел, что в прыщеблядиксе потоки реализованы через процессы, а в шиндовсе процесс - всего лишь набор потоков с общими параметрами типа приоритета, а шедулеру похуй и он работает с потоками в любом случае.
>У CPython нет юзерспейс-потоков. Ааа, так вот откуда эта боль и попытки объяснить что тред это типа почти как процесс. Ладно, не буду сыпать соль на рану, всем пис))
>>414265 >По каким пунктам 1. У процесса контекст процесса, своя отдельная среда, личный хип и вообще это самый жирный примитив ОС. 2. У треда - контекст треда, есть только личный стек, это более тонкий примитив. 3. Процессы живут в ОС, треды живут в процессах. 4. Ротация тредов по ядрам оптимальней, чем ротация процессов.
Давай ебашь, а я посмеюсь. Желательно ещё приведи бенчи где треды по скорости и распределению работают как процессы, обратного то в сети полно, так как все это знают, если не школьники конечно, как ты.
>>414268 >1. У процесса контекст процесса, своя отдельная среда, личный хип и вообще это самый жирный примитив ОС. Какая нахуй "отдельная среда"? Ты там какой-то особой ОС пользуешься, которая каждый процесс виртуализует? У процесса есть 1. командная строка; 2. набор квот; 3. свои области в памяти. Все. >У треда - контекст треда Третий раз уже тебе пишу, что в линуксе поток = процесс. Может ты жабоблядь и в системном программировании не разбираешься? Давай я в твоих терминах: public class Thread extends Process. >Процессы живут в ОС, треды живут в процессах. Что за матрешку ты выдумал, наркоман? >Ротация тредов по ядрам оптимальней, чем ротация процессов. Это тебе твоя мамка нашептала? >обратного то в сети полно То-то ты ни одного не показал. >все это знают "Все" много чего знают. Все знают, что на небе живет старикашка который тебя отправит в огромную печку, если ты будешь ебаться до свадьбы. Все знают, что прививки от гриппа вызывают аутизм. Все знают, что ты пидор, а твоя мамка больше чем вспышки на солнце.
Each process provides the resources needed to execute a program. A process has a virtual address space, executable code, open handles to system objects, a security context, a unique process identifier, environment variables, a priority class, minimum and maximum working set sizes, and at least one thread of execution. Each process is started with a single thread, often called the primary thread, but can create additional threads from any of its threads. A thread is the entity within a process that can be scheduled for execution. All threads of a process share its virtual address space and system resources. In addition, each thread maintains exception handlers, a scheduling priority, thread local storage, a unique thread identifier, and a set of structures the system will use to save the thread context until it is scheduled. The thread context includes the thread's set of machine registers, the kernel stack, a thread environment block, and a user stack in the address space of the thread's process. Threads can also have their own security context, which can be used for impersonating clients.
>>414258 >внезапно, ротация тредов по ядрам оптимальней Ну так это, каким образом это сделать-то? Thread из threading'а использует только одно ядро, сколько бы этих тредов не наплодилось. Поэтому если у меня, скажем, рисуется игрулька в опенгл, то просчёт чего-либо через Thread, разумеется, снижает фпс, тогда как с Process всё ок, даже если я их запущу заведомо больше, чем ядер, он сам равномерно снижает скорость выполнения каждого, отдавая предпочтение главному процессу/треду с рендерингом. Вот ты (насколько я понял, это >>413877 ты) советовал треды использовать. Как мне добиться такого же удобного поведения программы с тредами? И насколько она оптимальней-то? 1-2% прирост производительности не так сильно нужен, если это будет достигаться какими-то охуительными костылями и ручным написанием своих распределительных очередей или что там ещё есть. Запуск процесса да, примерно в 100 раз (~10мс, вместо 0.1мс) медленнее, чем тред. Но их как-то и не планируется постоянно запускать/завершать, только передавать между ними малые объёмы информации.
>>414398 > Thread из threading'а использует только одно ядро Nope. Реализация интерпретатора — "CPython", использует один thread для выполнения байт-кода. Всё остальное выполняется как обычно.
>>414448 Nope. Реализация CPython удерживает глобальный лок (GIL) во время интерпретации байткода. Все остальное выполняется как обычно. (Можно попробовать PyPy, там вроде STM уже готов к использованию.)
>>414448 >Nope. Лол, ну что значит nope? Я запускал, у меня больше 100% питон не жрал. Я ж не поспорить или доказать что-то хочу, а программу написать. Хотел сделать тебе скриншот, но треды магически начали-таки использовать чуть больше, чем одно (в нампи дело, вероятно, до этого просто с math.cos пробовал), но теперь более интересный вопросы по скриншоту. 1. Multithreading. 20% процессора бабушке моей зачем-то оставляет. С задачей справляется за минуту. Непонятные 30% загрузки "Системой" появляются, которые, я так думаю, тоже совсем не на косинусы уходят. Нет, не совпадение, а именно от питона. 2. Multiprocessing. Кушает столько, сколько дают. С задачей справляется за 20 секунд. Если np.cos заменить на math.cos, времена меняются на 17 и 11 при уже серьёзно загружающем систему фаерфоксе.
Так вот, где там треды лучше-то, я никак не пойму?
Алсо, проблема падения фпс при использовании тредов всё равно же есть, и одни твои рассуждения этого не меняют.
анон, выручи, а? мне нужно написать скрипт, который будет из .wav файлов собирать информацию о длительности записи. как это сделать? хоть модуль подскажите, с каким работать?
>>414574>>414594 http://pastebin.com/crBAFmuk Multithreading took 15.442 seconds to complete Sequential took 14.138 seconds to complete Multiprocessing took 8.159 seconds to complete Pool map took 7.942 seconds to complete Pool apply_async took 7.931 seconds to complete Pool imap_unordered took 7.562 seconds to complete
>>414594 С Pool'ом я не очень разобрался что-то, как оно работает (пример из 3.4 документации с "with pool() as p" у меня вообще не работает: иногда запустит 1-3 поцесса, но, в основном, ничего не делает, а просто стоит, ждёт чего-то). Но вот как-то так сделал, не знаю, верно ли, но разницы от обычного запуска процессов почти нет. Если же я вместо запуска 10 функций в пуле сделаю одну, но в десять раз большую — pool.apply_async и pool.imap_unordered замедляются до времени трединга/последовательного вычисления.
>>415058 На форилансе либо задачи типовые, либо заказчику похуй на твои милисекунды, а вот если быстрее сделаешь, то заебись. Чистого питона более чем достаточно.
Аноны, каких знаний по Питону достаточно набраться, чтобы начать зарабатывать этим? Сейчас присматриваюсь в codeacademy, достаточно ли там знаний дают? Или лучше даже не начинать?
>>415155 Чтобы начать зарабатывать codecademy явно не будет достаточно. Там, грубо говоря, просто рассказывают базовые-базовые команды, объясняя синтаксис языка и какие-то основы программирования. В общем, после того курса ты мало чего сможешь сходу написать, а что сможешь — за то и 100 рублей не дадут, наверное, так как любой опытный человек за 10 минут напишет. >Или лучше даже не начинать? Вопрос про питон или codecademy? Если второе — хуже от прохождения не будет. Если первое — . . . . . . . . . . .
>>415177 >Вопрос про питон или codecademy? Про академию был. Спасибо, анон. А чем тогда продолжить академию в таком случае? В каком направлении двигать дальше? Сейчас начал потихоньку проходить ее, уже четверть позади. За пару дней точно осилю.
Господа, проработал в телекоме. Писал простые скрипты на пайтоне + портал на джанго + базы. Но хочу в разработку. Тут уже ничему не учусь и сижу на месте(К тому же, тут не у кого учиться). Что делать? Искать работу,связанную с пистоном или засесть дома и изучить андроид-дев?
Земляне, есть такая штука как blender game engine. Может кто знает, возможно ли в скриптах подключить библиотеку Tkinter, и если да то как? Просто ковырять движок неохота время спать уже заипался глаза красные.
>>415576 Надеюсь, что нельзя, нужно чтобы это говно уже сдохло.
Кстати, вопрос. Во многих местах пифона есть два варианта сделать одно действие (хотя фактически это одно и то же). Какой вариант предпочесть: [code]str.lower(s) s.lower()[/code]
Цепочки вызовов "от" объекта это как-то стрёмно и… "грязно" что ли, с другой стороны, вложенное говно быстро становится нечитабельным. Дискасс.
>>415640 Во первых, не вижу ничего стрёмного в цепочках. Как ты сам написал, вложенные вызовы типа `a.this(b, c).that().andThat(d)` читаются лучше именно в таком виде. А читабельность — самое главное.
С другой стороны, многие стандартные функции (например, `map`) существуют именно в виде отдельных функций, поэтому иногда приходится смешивать типа `sum(sorted(map(int, s.upper().split('\n'))))`. В Python, к сожалению, без этого никак.
По большей части это вопрос синтаксиса, но одно существенное преимущество цепочечной нотации — это утиная типизация. Если у объекта есть метод `items`, то это значит, что у него можно получить список пар ключ—значение. И совсем не важно, что это не `dict`, а `Counter` или `OrderedDict`.
Посоны, а какими средствами лучше всего запиливается серверное ПО на питоне?
Хочу напилить простой сервис сошиала, который будет быстро отвечать на HTTP запросы и не будет проседать.
Нормально ли будет тупо поставить apache2, накатить на него mod_wsgi и напедалить десяток скритов на wsgi? Если так, есть ли рекомендации по оптимизации? Чтобы, например, не создавать по инстансу на запрос и тд.
Так-то apache нахуй не нужен, если так то как поднять веб-сервер на питоне, чтобы тупо через wsgi делал работу? Ну или не через него, а через простой API, чтобы я не ебался с байтами, а обрабатывал конкретно запросы.
Тошнит от mysql, имел опыт с MongoDB (pymongo), понравилось. Нормально ли будет в продакшене такое?
Делитесь опытом, посоны. Поможете мне — отвечу тем же.
>>416540 ебал я отвечать на твой отдельный тред, но тут отвечу, 2014 - синхронность назуй не нужна
почитай про asyncio, как отдельную либу для асинхронности, огребёшь сраную тонну примеров серверов на нём. Если надо в веб, то ещё про торнадо можешь, та же хуйня, только веб-фреймворк с вытекающими
Есть два массива: A ([2,1,2,3,2,3,4,3,4,5,4,5]) B ([1,0,1])
Нужно получить третий: C ([1,1,1,2,2,2,3,3,3,4,4,4])
Очевидно, что это поэлементное (A - B), только как это нормально без лупа сделать? np.subtract ругается на размерности, A.reshape(12,1) - B или A - B.reshape(3,1) выдают лишние значения (умножая количество либо столбцов, либо строк на 3)
Где-то я по мелочи туплю, но где? В R всё легко само делается, должно же быть и тут так же.
>>416735 Ну, собственно, можно сделать с помощью np.tile(B,4), получив одинаковые размеры и там всё вычитается как мне надо. Нормально ли такое решение, или можно поэлегантнее что-нибудь придумать?
>>412332 >Если я сделаю словарь, в котором ключ это число из первого списка, а значение - это список чисел которые соответствуют первому числу, то как я буду потом сортировать значения? SortedDict не? slow
Нужно разделить число a на число b и округлить в большую сторону. Оба числа типа int. Какой метод быстрее в плане производительности? 1) c = int(math.ceil(float(a)/b)) 2) if a % b > 0: c = a // b + 1 else: c = a // b
Python и работаАноним16/12/14 Втр 11:01:38#512№417274
Стоит сейчас пытаться питоном заниматься , но не для себя , а с перспективой найти работу? просто год назад помню ещё было довольно много вакансий в интернете по питону. А сейчас куда меньше.
>>400291 Аноны, как через subprocess получить PID уже запущенного процесса? Экземпляров одной программы может быть несколько, кстати, но параметры разные. Мне subprocess дали, не хотет говнокодить так: > proc_info = string.split(commands.getoutput("ps -aux | grep -v \'grep\' | grep my_process")) При запуске через > my_pid_proc = subprocess.Popen("arg",shell=True, stdout=subprocess.PIPE) PID то можно получить. Но процесс висит демоном.
Есть один класс. У него сильно разросся __init__. Норм будет если я в целях читаемости разобью __init__ на логические блоки и вынесу код в другие методы этого же класса, а в самом __init__ буду вызывать эти методы или так лучше не делать? Какие подводные камни?
Помогите ньюфагу советом. В общем, я не всегда понимаю, когда нужно применить цикл [code]for[/code] с [code]in range(len(list))[/code], а когда с просто [code]in list[/code]. Можете объяснить, в чем разница? Не могу понять. Например, вот этот код (получает список и возвращает только четные числа): [code]def purify(numbers): even = [] for number in numbers: if number % 2 == 0: even.append(number) return even print (purify([1,2,3]))[/code]
работает без проблем, и вот этот: [code]def purify(numbers): even = [] for number in range(len(numbers)): if numbers[number] % 2 == 0: even.append(numbers[number]) return even print (purify([1,2,3]))[/code] Работает аналогично. Так разница есть, иль нет?
>>417766 range(len(foo)) - создает список от нуля до длины объекта foo - 1. for i in foo, если foo - итерируемый объект - список, например, то значение i будет пробегать значения от первого элемента до последнего элемента списка, а не от нуля. напр. такой пример как for i in b: print b выдаст ошибку если b = [1,2,3] и нет, если b = [0,1,2] в общем тут можно поиграть и поэкспериментировать. надеюсь более-менее понятно объяснил
Нужен совет профессионалов. В общем, есть кусок кода, который считает некие данные. после этого есть две опции: 1. Импортировать это всё в csv файл. 2. Передать в другую программу, минуя стадию импорта в файл. Посоветовавшись с одним весьма компетентным в Jave человеком, он предложил всё сделать через интерфейсы. Интерфейс будет кидать данные либо в программу, либо в файл. Идея красивая. Т.к. я в Джаве 0, а Python знаю немного, начал искать что-то похожее на интерфейсы в пайтоне. Как я понял, аналога нет. И вроде как они не нужны. Тут есть свои примочки. В общем нужен совет от анона, как сделать это красиво? Примитивно я и сам могу. Создать класс, суперкласс (вроде такие есть). Я так понимаю, что стоит разделить обработку данных (импорт/экспорт) от самого расчета. Только как это сделать с архитектурной стороны кода?
>>417940 > Импортировать это всё в csv файл Вот с этого момента нихуя не понятно… Какая то другая программа, Java, интерфейсы.. > что-то похожее на интерфейсы в пайтоне В питоне есть множественное наследование, поэтому всякие интерфейсы/ mixin'ы и пр. костыли не нужны. > как сделать это красиво Для рассуждений о прекрасном, нужно больше конкретики. > стоит разделить обработку данных (импорт/экспорт) от самого расчета Если в перспективе собираешься расширять свою программу, тогда стоит.
>>417766 range даёт циферки, list даёт содержимое, enumerate даёт оба.
Надо циферки? — for i in range Надо содержимое? — for v in list И то и другое? — for i, v in enumerate(list) Нужен новый, немного изменённый список или последовательность — list/generator comprehension
Как получить доступ из одного модуля к переменной которая была объявлена в другом модуле? "from имярёк import имярёк" взлетит? Или в таком случае просто будет создана другая переменная с тем же именем, но не связанная с той что в другом модуле?
>>400486 Ты это я. Не могу никакой проект придумать. Вернее, у меня есть самый главный проект, но для него знаний надо много. А какие-то переходные проекты выдумать не могу.
По какому учебнику занимаешься? А то я просто выбрать для себя не могу.
>>418601 Не взлетает: 1) В main.py доходит до строки с импортом модуля. 2) Перескакивает в modul.py 3) Там доходит до строки с импортом main 4) Перескакивает в main.py и продолжает его парсить. 5) Доходит в main.py до момента когда переменной присваивается класс объявленный в modul.py 6) Тк modul.py был спарсен пока только до импорта main, пишет, что такого класса в данном модуле оно не видит. 7) Выдаёт соответствующее исключение.
>>418857 > main импортирует module > module импортирует main > Не взлетает А ты чего ожидал, лол? Что интерпретатор разрулит бесконечную рекурсию, сгенерирует нормальную иерархию модулей и задним числом подставит все значения?
>>418888 Так я и спрашиваю как получить доступ из модуля к переменной объявленной в main. Алсо, бесконечной рекурсии нет и не получится, тк каждая строка исполняется интерпретатором только 1 раз. Все остальные импорты уже прочитанного модуля похоже только пространство имён подгружают.
Анон, поясни пожалуйста. Изучаю питон по книге майка доусона. Так вот пикрелейтед, для чего нужны обведенные бэкслеши? По книге это символы продолжения строки, но никакого эффекта от удаления их из кода нету.
>>419034 Моя версия: Это специальный символ, чтобы питон знал что строка кода не закончилась и воспринимал перенос строки как продолжение предыдущей строки. В данном случае они не нужны тк всё переносимое находится в круглых скобках, а пока питон не получил закрывающую скобку он и так по умолчанию считает, что строка продолжается. РЕР8 так же рекомендует использовать вместо бекслешев неявное продолжение строки, оборачивая всё оборачиваемое в скобки.
Сделал модуль с именем time и питон 2.7.8 ни в какую не хотел его читать. Просто игнорил его так будто я import time и не писал вовсе. Переименовал его и всё заработало. Это баг или фича?
>>419683 >http://ideone.com/YQom9K Спасибо. А можно с комментами и пояснениями, что для чего сделано? А то как-то замудрёно для моих скромных познаний. Меня самого только на примерно такое решение хватило: http://ideone.com/oS2LF4
>>419807 А что именно непонятно? Заморочка с partial и исключение, на самом деле не нужны, можно и без них или вообще без on_defaulf. К тому же, он написан не правильно и не будет работать с другим prefix. _prefix нужен чтобы при обработке ввода не вызвать __del__, __kill_all_humans, __call__ и п.д. Более полные и функциональные диспетчеры, есть в разных библиотеках для обработки событий, интерактивных интерфейсов, игр и пр.
>> http://ideone.com/oS2LF4 Немного доработать (убрать [x].func = [x].action бойлерплэйт) и получится что-то вроде того, что я написал.
В каждой модели ( использую SQLAlchemy ) я импортирую объект базы данных - from app import db
А беда в том, что когда в контроллере я делаю импорт любой модели ( from app.models.record import Record, например ) - ругается на ImportError: cannot import name 'db'
Я нагуглил что эта хуита называется "цикличный импорт", но нихуя не могу понять как исправить. Выходит что мне в любом случае нужно делать объект базы данных ( db ) и импортировать его в модели для описания колонок
>Dooku is a set of libraries for the Python programming language that provides various useful stuff that you might need in everyday usage. The idea is to provide a set of libraries and useful functions, just like Boost does in C++ world.
http://dooku.readthedocs.org/en/latest/
Полезные ссылки
http://pythondigest.ru/ - новости и так далее. Можно подписаться на их твитер.
http://habrahabr.ru/post/205944/ - полезные материалы для начального уровня.
http://pythonanywhere.com/ - бесплатный и простой хостинг для джанги, например.
Завтра ищешь в интернете книжку...
Прошлый тут