[ /b/ /u/ /rf/ /dt/ /vg/ /r/ /cr/ /lor/ /mu/ /oe/ /s/ /w/ /hr/ ] [ /a/ /ma/ /sw/ /hau/ /azu/ ] [ /tv/ /cp/ /gf/ /bo/ /di/ /vn/ /ve/ /wh/ /fur/ /to/ /bg/ /wn/ /slow/ /mad/ ] [ /d/ /news/ ] [ Главная | Настройки | Закладки | Плеер ]

Ответ в тред 28158. [Назад]
 [ Скрыть форму ]
Имя
Не поднимать тред 
Тема
Сообщение
Капча Капча
Пароль
Файл
Вернуться к
  • Публикация сообщения означает согласие с условиями предоставления сервиса
  • В сообщениях можно использовать разметку wakabamark
  • На данной доске отображаются исходные имена файлов!
  • Разрешенные типы файлов: music, vector, image, code, pdf, flash, archive, text, video
  • Тред перестает подниматься после 500 сообщений.
  • Треды с числом ответов более 100 не могут быть удалены.
  • Старые треды перемещаются в архив после 40 страницы.

No.28158 Ответ
Файл: python_logo_3d_by...
Png, 128.36 KB, 800×600
edit Find source with google Find source with iqdb
python_logo_3d_by_technopathic-d4qgd9q.png
Файл: python_ninja_by_p...
Png, 432.25 KB, 859×1000
edit Find source with google Find source with iqdb
python_ninja_by_plaidklaus-d2z4e07.png

Прошлый тред >>17058 пошёл ко дну, посему Здесь стартует новый.

Краткая справка для новичков:
Официальный сайт: http://python.org/
Документация по стандартной библиотеке и разнообразные Tips & Tricks: http://docs.python.org/
Свежая тема для священной войны, или руководство по выбору между версиями: http://wiki.python.org/moin/Python2orPython3
Ссылка для вопящих про дикие тормоза: http://speed.pypy.org/
>> No.28203 Ответ
>>28158
Почему на скриптовом языке стали писать высокоуровневые приложения? Нормально ли это?
>> No.28209 Ответ
>>28203
Что в твоем понимании "скриптовый язык" и чем оно отличается от того же дотнета?
> Нормально ли это?
Нормально. На питоне писать в несколько раз быстрее, чем на плюсах, например.
>> No.28210 Ответ
>>28158
А есть в Питоне 3 минимизация/максимизация (например, симплекс-методом, чтобы была целевая функция f(x)->min и произвольное количество ограничений вида g_i(X)<=N, h_i(X)=M)? Самому пилить долго, чуть-чуть посмотрел в гугле — вроде ничего не нашёл. Так может кто из анонов знает.
>> No.28211 Ответ
Файл: -.jpg
Jpg, 289.79 KB, 1280×1862 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
-.jpg
>>28209
Ну так программа на питоне, просто скрипт, а дотнетовское приложение компилируется в байткод.
>> No.28212 Ответ
>>28210
Есть в NumPy/SciPy.
>> No.28213 Ответ
>>28211
> программа на питоне, просто скрипт, а дотнетовское приложение компилируется в байткод
Фейспалм.жпг
Программа на питоне тоже преобразуется в байт-код. И яваскрипт преобразуется в байт-код. И любой другой язык, который вообще претендует хоть на какое-то быстродействие, преобразуется в байт-код.
>> No.28214 Ответ
>>28212
Нашёл это: http://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.fmi[...].fmin
Симплекс-метод, линейная оптимизация, вроде всё хорошо. Но как туда заносить ограничения?
>> No.28215 Ответ
>> No.28216 Ответ
>>28215
Параметр "constraints"? Только для методов COBYLA и SLSQP, причём в первом нет ограничений-равенств, а второй требует якобиан (благо, у меня задача линейного программирования). Похоже сильно отличается от того, чему нас учили, но разобраться можно будет. Спасибо.
>> No.28217 Ответ
>>28216
Как вариант, ограничения можно вшить прямо в функцию же.
>> No.28218 Ответ
>>28217
Хм? Проверять аргументы внутри функции с помощью if-else? Что возвращать если ограничения не работают? Какое-то заведомо большое значение? А это разве не поломает оптимизатор (ибо уже не линейное программирование)?
>> No.28220 Ответ
>>28216
SLSQP производной не требует
>>> from scipy.optimize import minimize
>>> def f(x):
...     return (x[0] - 2) ** 2 + 10
... 
>>> res = minimize(f, [0.0], method='SLSQP')
>>> print res.x
[ 2.]

>>> res = minimize(f, [0.0], method='SLSQP', bounds=((-100.0,  1.0),))
>>> res
  status: 0
 success: True
    njev: 2
    nfev: 6
     fun: 10.999999999999996
       x: array([ 1.])
 message: 'Optimization terminated successfully.'
     jac: array([-1.99999988,  0.        ])
     nit: 2
>> No.28221 Ответ
>>28220
Но ведь в это примере нет constraints, а производная именно там:
> constraints : dict or sequence of dict, optional
> Constraints definition (only for COBYLA and SLSQP). Each constraint is defined in a dictionary with fields:
> type: str
> Constraint type: ‘eq’ for equality, ‘ineq’ for inequality.
> fun: callable
> The function defining the constraint.
> jac: callable, optional
> The Jacobian of fun (only for SLSQP).
>> No.28222 Ответ
>>28221
Ну вот тебе с ограничениями:
>>> res = minimize(f, [0.0], method='SLSQP', bounds=((-100.0,  1.0),), constraints={'type': 'ineq', 'fun': lambda x: f(x) - 12})
>>> res
  status: 0
 success: True
    njev: 5
    nfev: 15
     fun: 12.000000000108864
       x: array([ 0.58578644])
 message: 'Optimization terminated successfully.'
     jac: array([-2.8284272,  0.       ])
     nit: 5
>> No.28223 Ответ
>>28222
ОК, признаю, я слепой.
> jac: callable, optional
Спасибо, это упростит задачу.
>> No.28239 Ответ
Файл: 4b5d6e3307966b2b93d3d8ba8acb0b12.jpg
Jpg, 423.93 KB, 1000×950 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
4b5d6e3307966b2b93d3d8ba8acb0b12.jpg
Анончик, опять думал тебе вопрос задать, но сам разобрался уже.
С наступающим тебя!
>> No.28251 Ответ
Файл: foverver-с-компом.jpeg
Jpeg, 32.23 KB, 470×275 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
foverver-с-компом.jpeg
>>28239
Ога, тебя тоже.
>> No.28256 Ответ
инфо:сижу на виндах xp sp2 и 7 sp1. Пользуюсь python 3.3.
что нужно: Нужно получить текст, выводимый виндовой консолью при обращении к ней.
В чём проблема: в кодировке.
при использовании функции sys.getfilesystemencoding() получаю результат 'mbcs' блять.
Значит в консоли используется эта кодировка? Она же не поддерживается питоном?
>> No.28257 Ответ
Анон, каким инструментарием можно реализовать следующий алгоритм:
одновременно запускаются некоторая процедура, а также таймер обратного отсчета. Процедура может завершиться раньше, или позже того, как выйдет время по таймеру. Если процедура завершается раньше, то она ждет, пока не выйдет таймер, а потом таймер с процедурой запускаются по новой. Если к моменту завершения процедуры таймер уже вышел, то процедура с таймером опять же перезапускаются. Чтобы не зациклиться навечно, процедура может проверять некоторое значение и завершать цикл.
Мне в голову приходят только очереди с блокировками, но я совсем не уверен, что это по теме.
>> No.28258 Ответ
>>28257
Делаешь два потока, в одном time.sleep(), в другом твоя процедура.
>> No.28259 Ответ
Я обнаружил баг/фичу, вот такую. В данный момент ищу объяснения сам, но вдруг кто-то пошлёт меня куда надо раньше:
def f (l = [], addr = [0]):
for el in l:
    addr[-1]+= 1
    print str(addr) + ':' + str(el)
    if (type(el) == list):  # sublist
        addr.append(0)
        f(el, addr)
    else:
        pass
return addr
Здесь три сосны и заблудиться негде, но эта функция умеет сохранять состояния переменной addr между вызовами. Я нуб конечно, и не читал внимательно про объявления ф-ций (сейчас читаю), но это выпало меня в осадок:
> > > print f ([1, 2, ['a', 'b']])
[1]:1
[2]:2
[3]:['a', 'b']
[3, 1]:a
[3, 2]:b
[3, 2]
> > > print f ([1, 2, ['a', 'b']])
[3, 3]:1
[3, 4]:2
[3, 5]:['a', 'b']
[3, 5, 1]:a
[3, 5, 2]:b
[3, 5, 2]
> > > print f ([1, 2, ['a', 'b']])
[3, 5, 3]:1
[3, 5, 4]:2
[3, 5, 5]:['a', 'b']
[3, 5, 5, 1]:a
[3, 5, 5, 2]:b
[3, 5, 5, 2]

как такое может быть, если никаких глобальных переменных я не объявлял? Выходит, при повторном запуске она стартует с того места, где остановилась? Но зачем?
>> No.28260 Ответ
>>28259
Это не баг, это стандартная ловушка для новичков. Инициализация дефолтных значений происходит только при объявлении функции, а не при её вызове. Поэтому нельзя использовать мутабл значения, если ты не хочешь таких вот эффектов.
В документации это специально подчеркивается.
>> No.28261 Ответ
Вот это в документации,
http://docs.python.org/2/reference/compound_stmts.html#function-definitions
> Default parameter values are evaluated when the function definition is executed. This means that the expression is evaluated once, when the function is defined, and that the same “pre-computed” value is used for each call. This is especially important to understand when a default parameter is a mutable object, such as a list or a dictionary: if the function modifies the object (e.g. by appending an item to a list), the default value is in effect modified. This is generally not what was intended.
Выделено специально болдом даже.
>> No.28262 Ответ
Файл: красивая-девушка-с-веснушками.jpg
Jpg, 59.90 KB, 544×544 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
красивая-девушка-с-веснушками.jpg
>>28260
>>28261
вот вам няшечка
>> No.28266 Ответ
Файл: guido-van-rossum_x270.jpg
Jpg, 21.79 KB, 270×270 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
guido-van-rossum_x270.jpg
>>28259
> Но зачем?
Фюрерок так захотел.
>> No.28269 Ответ
>>28257
Я бы сделал так:
  
import threading
  
def timed_func(timeout):
    job_is_done = False
    
    still_alive = threading.Event()
    still_alive.set()
    
    timer = threading.Timer(timeout, still_alive.clear)
    timer.start()
    
    while still_alive.is_set() and not job_is_done:
        # raise job_is_done flag then continue instead of just break!
        ...
        do some stuff..
        ...
    
    else:
        timer.join()  # wait for the timer to finish
    
    timer.cancel()
while True: timed_func(3)
>> No.28271 Ответ
Файл: 1356552500571.jpg
Jpg, 62.95 KB, 754×900
edit Find source with google Find source with iqdb
1356552500571.jpg
Файл: 1356553431966.jpg
Jpg, 127.89 KB, 1152×1565
edit Find source with google Find source with iqdb
1356553431966.jpg
Файл: 1356553784674.jpg
Jpg, 160.04 KB, 1000×1332
edit Find source with google Find source with iqdb
1356553784674.jpg

>>28269
Огромное спасибо!
>> No.28411 Ответ
Какая может быть мотивация использовать IPython? Как вы его используете?
>> No.28450 Ответ
В программировании полный ноль. Начал изучать python с книги Лутца Изучаем Питон 4 издание. Всё правильно делаю? И да, как правильно читать офф. документацию?
>> No.28469 Ответ
>>28450
> Всё правильно делаю?
Нет. В твоём случае начинают с SICP (который на Scheme). Точнее, с http://courses.csail.mit.edu/6.042/spring12/mcs.pdf. Точнее, с курса английского языка.
>> No.28471 Ответ
Real World Haskell
>> No.28472 Ответ
>>28450
> > В программировании полный ноль.
Я вот с этого начал:
http://younglinux.info/python.php
Имея до этого только чуть завышенный школьный уровень. По моему очень годно написано. Правда только про ветку 2.x
> > как правильно читать офф. документацию?
А как читать её неправильно?
>> No.28566 Ответ
>>28210
Толи в NumPy, толи в SciPy (библиотеки) есть твои методы.
>> No.28582 Ответ
Добра всем. Недавно решил подучить какой-нибудь язык для выполнения нужных мне задач. Решил взять Питон, поскольку в последнее время был у меня на слуху. Как упражнение для ознакомления, написал ознакомительный скрипт для парсинга страницы нашей гос. транспортной компании и выдачи времени, через которое на остановке появится следующий автобус. Думаю оформить это в виде приложения на Симбиан, которое будет висеть виджетом на главном экране телефона. Сейчас допиливаю систему кеширования для того, чтобы не приходилось каждый раз лезть в интернет за страницей. Страницу решил распарсить регекспами, благо вероятность ошибки достаточно мала, да и в библиотеки для парсинга ХТМЛ я не въехал =( Плюс не работает ensymble_gui - вообще не реагирует на кнопки, кроме кнопки "Browse". ДА и с гуем пока не разбирался.
https://github.com/CRImier/RSEasy
Оцените?
>> No.28583 Ответ
>>28582
> библиотеки для парсинга ХТМЛ
есть Grab: http://grablib.org/docs/ - он основан на lxml
> https://github.com/CRImier/RSEasy
> Оцените?
первое, что бросилось в глаза - несоблюдение code conventions относительно количества пустых строк между блоками кода :3, PEP 8 в общем %%http://www.python.org/dev/peps/pep-0008/%%. Больше пока ничего не скажу, потому что мимопробегал и некогда.
>> No.28585 Ответ
>>28583
Присоединяюсь и добавлю, что модуль "main" нечитаемый. Также import не в начале, а в разных местах кода разбросаны.
В некоторых функциях коменты делать пытаешься. После объявления функции используй лучше docstring:
def func():
  """ Return that""" 
Тогда это можно будет прочитать, посмотрев атрибут doc :
print func().__doc__
> #That's all, folks
Ненужные комментарии тоже не по-питоньему. Лучше, если код говорит сам за себя.
>> No.28586 Ответ
>>28582
def check_transtp(transtp):
if transtp == "tram" or transtp == "bus" or transtp == "trolleybus" or transtp == "night_bus":
return True
else:
return False
Это ужасно. Лучше так
def check_transtp(transtp):
    return transtp in ["tram", "bus", "trolleybus", "night_bus"]
>> No.28590 Ответ
>>28583
Ок, давно собираюсь скачать и почитать =) Спасибо, учту.
>>28585
Как повысить читаемость, по-твоему? Чаще комментировать и по делу? Плюс стиль, конечно же. Уже бегу качать.
>>28586
Если можешь, объясни, как это работает. И кстати, как по мне, мой вариант лучше по читаемости - сразу понятен. Какие подводные камни?
>> No.28591 Ответ
>>28583
А, и по твоей библиотеке - реально ли ей легко пользоваться? Будет ли она быстрее, чем моё смешение регекспов? Регекспы планирую потом переделать, конечно. Кеширование доделаю и пересмотрю основные модули.
>> No.28594 Ответ
>>28591
Она будет корректнее. "HTML-нельзя-парсить-регэкспами.txt".
Мимоид-в-категории-проходилов
>> No.28595 Ответ
>>28590
> объясни, как это работает. И кстати, как по мне, мой вариант лучше по читаемости - сразу понятен.
Разумеется, тебе твой вариант более понятен, так как ты не знаком с оператором in. Тебе стоит сначала почитать учебник, прежде чем что-то писать. Вряд ли кто-то будет тебе объяснять базовые вещи, кроме личного репетитора.
>> No.28596 Ответ
>>28590
> Если можешь, объясни, как это работает
Если бы там был set (это который {"tram",... } ), то можно было бы выразиться в терминах "transpt входит в множество {x}" - "transpt in {set}", результат операции - True или False (входит и не входит, соответственно).
А с [list] аналогично же.
Таки да, читни учебника или документацию, туториал на офсайте.
>> No.28597 Ответ
>>28590
> повысить читаемость
А перед тем как их копипастить, разберись как они работают.
У питона замечательная документация с поиском и примерами: http://docs.python.org/2/reference/expressions.html#membership-test-details
исползуй её!
  • Почитай исходники программ похожих на твою и не только, посмотри как они это всё реализовали.
И если возникает необходимость добавить комментарий, который вместо "как этим кодом пользоваться", объясняет "что этот код делает". То скорее всего ты делаешь что то не так. Лучше переписать такой код так, что бы было понятно и очевидно что оно делает, даже без комментариев.
Так как в питоне обычно - нечитаемый код == нерабочий.
>> No.28717 Ответ
Реквестирую python-скрипт, который бы делал рассылку сообщений юзерам ВКонтактика.
Мне нужно для доброй цели :3.
Заодно интересуюсь, после скольких сообщений забанят аккаунт.
>> No.28718 Ответ
>>28717
Там лимит на 20 юзеров-нефрендов с одного акка в день, так что особо не поспамишь.
>> No.28719 Ответ
Файл: spam-can-collection-2009-09-med.jpg
Jpg, 319.20 KB, 1582×1070 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
spam-can-collection-2009-09-med.jpg
>>28718
Спасибо. Мне надо всего-то 216 сообщений.

Посмотрел POST-запросы при отправке сообщений, там везде в параметрах какие-то хэши.
Не знаю, как их выцепить, используя httplib.
Видимо, придётся отправлять сообщения JavaScript'ом из браузера.
>> No.28743 Ответ
>> No.28755 Ответ
Анон, привет!
Я тут продолжаю постигать глубины распараллеливания и пришел к тебе с вопросом. Есть пример:
#!/usr/bin/env python3

from multiprocessing import Pool
from time import sleep

counter = 0
markers = range(20)

def runner(marker):
	print(marker)

def main():
	if counter == 10:
		raise SystemExit

	pool = Pool(2)
	pool.map(runner, markers)

while True:
	main()
	sleep(3)
	counter += 1
Так вот, когда я его запускаю, то вижу, что отработавшие дочерние процессы до выполнения raise SystemExit не помирают, а продолжают висеть в памяти. Как правильно реализовать их убийство, чтобы не тратить ресурсы впустую?
>> No.28756 Ответ
>>28755
Это вроде бы решается вызовом метода join для пула твоего:
http://docs.python.org/3/library/multiprocessing.html#multiprocessing.[...].join
>> No.28757 Ответ
Файл: 030.jpg
Jpg, 194.99 KB, 1620×1080 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
030.jpg
>>28756
Точно, добавил две строки:
pool.terminate()
pool.join()
и перестали процессы плодиться. Большое спасибо за подсказку!
>> No.28758 Ответ
Файл: 1359022250443.jpg
Jpg, 309.53 KB, 1000×666 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
1359022250443.jpg
>>28757
Даже pool.join() не нужен, и без него работает нормально.
>> No.28759 Ответ
>>28758
Без join главное приложение может раньше созданных процессов завершиться, как я понимаю. Если тебя это устраивает, то ок.
>> No.28763 Ответ
>>28759
Спасибо за совет, но меня это устраивает, да.

Анон, кажется, я заплутал в областях видимости, погляди своим свежим взглядом, пожалуйста. Вот код, который ведет себя ожидаемо и понятно мне:
#!/usr/bin/env python3

class Hello:
	X = ['browser']
	def __init__(self, x):
		self.x = x

	def translate(self):
		Hello.X.extend(['-new-tab', self.x])

def main():
	hello1 = Hello(1)
	hello2 = Hello(2)
	hello1.translate()
	hello2.translate()

main()
print(Hello.X)
А вот код, в который я добавил мультипроцесс, и который меня удивляет:
from multiprocessing import Pool

class Hello:
	X = ['browser']

	def __init__(self, x):
		self.x = x

	def translate(self):
		Hello.X.extend(['-new-tab', self.x])

def runner(marker):
	inst = Hello(marker)
	inst.translate()

def main():
	markers = range(2)
	pool = Pool(len(markers))
	pool.map(runner, markers)
	pool.terminate()

main()
print(Hello.X)
Почему значение переменной класса не сохраняется в итоге? И можно ли все же его сохранять?
>> No.28772 Ответ
>>28763
На каждый новый процесс, multiprocessing, запускает новый интерпретатор с новыми эксземплярами классов.
Поэтому для обмена данных между процессами юзай:
http://docs.python.org/2/library/multiprocessing.html#pipes-and-queues
http://docs.python.org/2/library/multiprocessing.html#managers
>> No.28773 Ответ
Файл: 055.jpg
Jpg, 601.51 KB, 1763×1167 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
055.jpg
>>28772
Понятно, спасибо!
>> No.29038 Ответ
>> No.29070 Ответ
>>29038
Чем тебя модуль io не устраивает?
>> No.29071 Ответ
>>29070
уныл и малофичаст же
>> No.29073 Ответ
>>29071
Ну, хрен знает, чего тебе не хватает.
О других не слышал как-то. Может ещё кто знает.
>> No.29074 Ответ
>>29073
Например, я хочу заменять по регулярке вхождения из входного стрима в выходной стрим, как юниксовым sed'ом можно делать. Потом мне нужна например функция read_until, которая читает символы из потока в строку, пока не встретится определенный шаблон. Я понимаю, что все это можно навелосипедить, но я уже говорил, что не хочется.
>> No.29081 Ответ
>>29074
> изменять стрим по регулярке
Питоновский .re не умеет в стримы, только строки или буфферы.
> read_until
Смотри itertools.
http://docs.python.org/2/library/itertools.html
>> No.29083 Ответ
не холивара ради, объясните постигающему преимущество джанго перед пхп. Начинаю пилить городской сайт, решил писать на питоне, поскольку его я знаю лучше пхп. Но есть сомнения в целесообразности. Хостинг для джанго дороже обычного пхп+мускул. спасибо.
>> No.29101 Ответ
>>29083
> преимущество джанго перед пхп
Такового не имеется, в джангу ещё пару лет назад набижала толпа похапешников и понатащила туда своих кривых мыслительных шаблонов.
>> No.29105 Ответ
>>29101
Можешь провести аналогии и привести примеры?
>> No.29125 Ответ
>>29083
За неимением гербовой (руби) пиши лучше на туалетной (пхп).
> объясните постигающему преимущество джанго перед пхп.
Его знает меньше кулхацкеров, из-за чего риск взлома твоего поделия теоретически меньше.
>> No.29126 Ответ
>>29125
LOL!
>> No.29167 Ответ
Файл: aigis1.jpg
Jpg, 36.15 KB, 250×333 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
aigis1.jpg
Вот мой сокет:
s = socket.socket(socket.AFINET, socket.SOCKDGRAM)
PORT = 8000
s.settimeout(None)
s.bind(('localhost', PORT))
while True:
   data, address = s.recvfrom(4096)
   print data
   print address
Почему когда в браузере я ввожу 127.0.0.1:8000 я не вижу GET
запрос(там где print data)?
>> No.29168 Ответ
>>29167
SOCK_DGRAM - это UDP, поэтому попробуй:
echo "qwerty" | nc -u localhost 8000
и всё должно заработать.
>> No.29171 Ответ
Файл: aigis2.jpg
Jpg, 25.89 KB, 397×298 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
aigis2.jpg
>>29168
У меня не установлено nc. На что нужно SOCK_DGRAM заменить?
>> No.29172 Ответ
>>29171
Скорее всего тебе нужен SOCK_STREAM (TCP) про остальные есть в man/mdsn, но тогда придётся добавить:
s.listen(backlog)
сonnection, address = s.accept()
перед
data = сonnection.recv(1024)
так как TCP на сколько я знаю не умеет получать данные, не установив заранее соединение.
>> No.29173 Ответ
Файл: kurisu2.jpeg
Jpeg, 272.40 KB, 857×643 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
kurisu2.jpeg
>>29172
Чаю тебе, анонимный. Никогда не обращал внимания на accept(), а он, оказывается, нужен.
>> No.29200 Ответ
Файл: yrfFDiB1lXYXRhhxZlKKIOqbJ72Et-N0TJB1Nad5Qe8.jpeg
Jpeg, 54.38 KB, 576×768 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
yrfFDiB1lXYXRhhxZlKKIOqbJ72Et-N0TJB1Nad5Qe8.jpeg
Помогите, пожалуйста. Вот код:
http://pastebin.com/1gWqPhdL
Ошибка вот в этом блоке
for yy in range (MAP_HEIGHT):
for xx in range (21):
    if smap[yy][xx]=='#':
        map[yy][xx]=Tile(True)
По идее в строчке in range(21) Должно стоять значение MAP_WIDTH, которое равно 46. Это значение длины строки из массива smap(Он по ссылке, вставлять сюда не встал, так как большой).
Так вот, если в for xx in range(): стоит больше 20, то возникает ошибка list assignment index out of range. Но почему?! Ведь в каждой строчке из smap больше 20 значений!
Более того, до этого я спокойно делал
for y in range(SCREEN_HEIGHT):
for x in range(SCREEN_WIDTH):
    if smap[y][x] == '#':
        ....далее присваивание...
И это работало.
Помогите, второй день не могу понять что к чему.
>> No.29201 Ответ
>>29200
У тебя вот здесь:
map = [[Tile(False)
                for y in range(MAP_HEIGHT) ]
                        for x in range(MAP_WIDTH) ]
Создается матрица на 46 строк и 20 столбцов. А тебе надо наоборот, наверно.
>> No.29211 Ответ
>>29200
А почему сразу не
map_ = [[Tile(cell == '#') for cell in row] for row in smap]
?
и не каких IndexError.

Олсо
if block_sight == False
   - жесть, достаточно
self.block_sight = block_sight or blocked
>> No.29214 Ответ
>>29201
http://www.python.org/dev/peps/pep-0008/
> Use 4 spaces per indentation level.
>> No.29217 Ответ
Файл: 075.jpg
Jpg, 93.31 KB, 510×378 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
075.jpg
>> No.29225 Ответ
>>29201
Да, ты оказался прав. Спасибо тебе.
>>29211
Я только учусь кодить. Спасибо за замечания.
>> No.29239 Ответ
Файл: 095.jpg
Jpg, 163.55 KB, 1024×960 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
095.jpg
>>29211
А существует ли некий сборник подобных питоньих best practice, или это собирается по крохам, и приходит с опытом?
>> No.29240 Ответ
>>29239
Болшенство из них есть в документациии, остальное гуглится, читается, спрашивается, придумывается.
>> No.29244 Ответ
Ещё довольно много людей ведут блоги.
Мне понравились вот эти парни:
http://www.dabeaz.com/talks.html
http://nedbatchelder.com/

Это какой-то "мануал по философии Python":
http://python.net/~goodger/projects/pycon/2007/idiomatic/presentation.html
>> No.29245 Ответ
>>29240
>>29244
Спасибки.
>> No.29275 Ответ
Файл: 1360607227551.jpg
Jpg, 70.52 KB, 576×459 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
1360607227551.jpg
Вот еще вопрос. Я решил ввести еще и цвет тайтла.
class Tile:
def __init__(self, blocked,color,block_sight = None):
    self.color=color 
Дальше:
wall_wood=Tile(True, libtcod.green)

Когда дальше я делаю присваивание
for y in range(100):
for x in range(100):
    if maps[y][x]=='#':
        map[x][y]=wall_wood
Выходит ошибка:
TypeError: 'builtinfunctionormethod' object has no attribute 'getitem_'
Как я понимаю этого от того, что я объявляю color внутри функции. Как его сделать доступным всей программе? И почему, когда я делал просто
map[x][y]=Tile(False) не было никаких ошибок?
>> No.29287 Ответ
>>29275
http://docs.python.org/2/library/functions.html#map
Именно поэтому считается дурным тоном, маскировать объекты из __builtin__. а так же использовать global, nonlocal и т.п. без явной надобности.
>> No.29290 Ответ
>>29287
Я переобозначил функцию map. Теперь это у меня список.
Мне кажется, что ты меня не совсем понял.
>> No.29292 Ответ
>>29290
Ну тода проверяй что за builtin function or method и что он делает у тебя в списке.
Или переписывай без злоупотребления индексами, что бы было сразу понятно что, откуда и куда.
>> No.29293 Ответ
>>29292
Вот смотри. Неболььшой код.
class lol:
   def init(self, color):
   self.color=color
palitra=lol('red')

maps=[]
for x in range(10):
   for y in range(10):
   maps.append(palitra)
print maps[1].color

Ошибок никаких нет, но если я делаю
print maps[1][1].color
То у меня вылетает ошибка lol instance has no attribute 'getitem'
Почему?
>> No.29297 Ответ
>>29293
Всё правильно, метод __getitem__, у эксземпляра класса lol не определён.
Поэтому palitra[1] вызывает соответствующую ошибку. Так же, list.append добавляет объекты к концу списка, а судя по двойному циклу, ты наверное хотел создать вложенный список, матрицу как сдесь: >>29211
>> No.29299 Ответ
>>29297
Ясно. Спсибо за помощь. Буду разбираться с этим.
>> No.29305 Ответ
>>29297
Здесь, здание, здоровье. Запомни уже блджадь!
>> No.29306 Ответ
>>29305
Да он даже не знает, зачем нужны спойлеры, - куда уж ему запомнить правила.
>> No.29332 Ответ
Файл: picurlfail.png
Png, 155.10 KB, 1365×744 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
picurlfail.png
Котаны, что делать с таким выводом?
>> No.29347 Ответ
>>29332
Можно добавить хидер с юзерагентом, чтобы обмануть, например.
>> No.29348 Ответ
>>29347
> хидер
Что это?
>> No.29351 Ответ
>> No.29352 Ответ
>>29351
аа, но так ведь это [`hedə] читается!
>> No.29353 Ответ
>>29352
Устоявшийся термин.
>> No.29354 Ответ
Есть Python 3.2.3. Также имеются несколько скриптов, на данном питоне написанные. В директории со скриптами я выполнил python3 -O -m compileall *py. Была создана директория pycache с кучей файлов .pyo. Размер этих скомпилированных файлов получился больше, чем у нескомпилированных, что нелогично. Отчего так?
>> No.29355 Ответ
>>29354
Точнее даже так: насколько я понял, цель компиляции в том, чтобы уменьшить размер файла и сократить время на его чтение, что приведет к повышению быстродействия. А тут такое.
Какие еще есть рабочие методы ускорения для третьего питона?
>> No.29356 Ответ
>>29353
Нет, правда?
>> No.29357 Ответ
>>29354
Почему это нелогично, по-твоему?
>> No.29358 Ответ
>>29357
Больший файл дольше читается.
Вот тут >>29355 написал.
>> No.29359 Ответ
>> No.29360 Ответ
>>29359
Вот оно что, спасибо.
>> No.29367 Ответ
Файл: 21312 .jpg
Jpg, 131.64 KB, 720×576 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
21312 .jpg
>>29347
Держи неку, умняша.
>> No.29448 Ответ
Файл: 1243193066113.jpeg
Jpeg, 101.24 KB, 572×720
Ваши настройки цензуры запрещают этот файл.
unrated
Не уверен что по адресу, проблема такая:
Есть динамический url. Кусок который меняестся получаю через Foo.objects.get(bar=eggs) из бд, это внутры блока try. Если такого нет, то должно вызыватся исключение DoesNotExist. Но мне выдает NameError: global name DoesNotExist undefenned. Если обрабатывать NameError, то получаю ошибку DoesNotExist
>> No.29449 Ответ
>>29448
Не понимаю, о какой СУБД идет речь, но, боже мой, обработай оба исключения, делов-то.
>> No.29451 Ответ
>>29448
NameError тебе говорит, что ты не импортировал DoesNotExist, перед тем как его использовать.
>> No.29459 Ответ
Файл: 1235058431566.jpg
Jpg, 116.56 KB, 480×499
Ваши настройки цензуры запрещают этот файл.
unrated
>>29449
В except пишу оба через or и получаю NameError
>>29451
Импортирую оба модуля которые есть в выводе ошибки query manager - ничего не меняется.
%%File "/usr/lib/python2.7/site-packages/django/db/models/manager.py", line 131, in get
return self.get_query_set().get(*args, **kwargs)
   File "/usr/lib/python2.7/site-packages/django/db/models/query.py", line 366, in get
% self.model._meta.object_name)
DoesNotExist: Post matching query does not exist.%%
>> No.29473 Ответ
>>29459
При импортировании модуля, его содержимое не попадает ни в locals, ни в globals.
Так что:
Или каждый раз указывай полный путь до объекта except foo.bar...baz.DoesNotExist:.
Или определи соответствующее имя в видимом пространстве имён DoesNotExist = foo.bar...baz.DoesNotExist (чтобы не обращаться каждый раз к foo,bar,baz...).
Или импортируй нужный объект из модуля from foo.bar...baz import DoesNotExist, если сам модуль foo тебе не нужен.
>> No.29484 Ответ
>>29473
Не работает даже с приставкой модуля. Если from foo.bar...baz import DoesNotExist то получаю атрибутЭрор.
Хотя проблема уже решилась использованием getobjector_404
>> No.29616 Ответ
>>29484
лови TvoyaModelClass.DoesNotExist
>> No.29620 Ответ
Файл: 1269374836_python-3.jpeg
Jpeg, 24.22 KB, 278×400 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
1269374836_python-3.jpeg
Доброчан, выхожу из ридонли.
Так все-таки, поясните мне прямо, какую ветку питона нужно изучать, если в будущем планируется работать с django? И живо ли еще все это? Я просто не в теме.

Поясните за книгу на пике, так как я 2 года изучал java в универе, то Лутц я думаю мне не нужен. Все правильно делаю?
>> No.29622 Ответ
Файл: 1334663934327.png
Png, 720.07 KB, 685×1000 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
1334663934327.png
>>29616
Это работает! Спасибо.
>> No.29630 Ответ
Файл: zx.jpg
Jpg, 21.38 KB, 299×300 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
zx.jpg
>>29620
Поясняю. Так называемые фреймворки - это первый признак того, что язык перестал соответствовать требованиям той области, где используется, и вокруг него строят нагромождение костылей. Так было с Паскалем, Жаббой, Пыхом и ПЛ/1.

Гвидо ван Россум знает об этом и спокойно пилит третью версию языка.

%%А вокруг бегает толпа обезьян с дикими воплями: "джанго", "соцсети", "хайлоадЪ", "фреймворки"...
Но живо ли ещё всё это? Я тоже не в теме.%%
>> No.29639 Ответ
>>29630
Вообще-то недавно вышел Django 1.5 с экспериментальной поддержкой Python 3, а следующая версия, 1.6, запланирована как версия, полностью готовая для использования 3-й ветки языка.
>> No.29645 Ответ
>>29630
> фреймворки - это первый признак того, что язык перестал соответствовать требованиям той области, где используется, и вокруг него строят нагромождение костылей
Python - опенсорсный проект. Если в него запихать все все все, то его станет нереально поддерживать сообществу. Лучше меньше, но лучше.
>> No.29664 Ответ
>>29620
Советую Третьепитон кроме тех случаев когда нужно особые библиотэки, см. https://python3wos.appspot.com/ например.
>> No.29707 Ответ
>>29630
> Так называемые фреймворки - это первый признак...
Хуйню вы несете, товарищ.
Веб, графика, гуй — все подобные вещи в любом языке делаются через фреймворки, чтобы для типикал приложения не изобретать стотыщмиллионов раз изобретенные до этого велосипеды.
> Гвидо ван Россум знает об этом и спокойно пилит третью версию языка.
Питон3 никак на фреймворки не влияет вообще, у него другое назначение — устранить ряд багов в core features.
>> No.29708 Ответ
>>29707
Вот и выросло поколение, не заставшее Windows 3.x
>> No.29709 Ответ
>>29708
говно операционка была же
>> No.29712 Ответ
>>29708
Это важно только для тех, кто застал.
>> No.29868 Ответ
Файл: Снимок.JPG
Jpg, 38.98 KB, 685×440 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
Снимок.JPG
Питоняши, подскажите, как вы настраиваете Sublime Text 2 под Windows, чтобы он делал Build по Ctrl+B, пик рилейтед. Хоть и "C:\python27\" есть в PATH, конфиг все равно не понимает ни относительного, ни полного пути к интерпретатору. В cmd.exe Python запускается нормально.
>> No.29869 Ответ
>>29868
Шиндовс не для питона и не для программирования в целом.
>> No.29871 Ответ
>>29869
> и не для программирования в целом
Orly? Пруфы или КУДАХ-ТАХ-ТАХ
>> No.29874 Ответ
>>29871
В линупсах тулчейны устанавливаются и обновляются одной командой в концольке, в шинде всё через жёпу, нужны таблэтки или покупать и не юнегз нихера.
>> No.29877 Ответ
>>29868
Решил проблему с помощью SublimeREPL: https://github.com/wuub/SublimeREPL

А вы, вместо того, чтобы разводить софтосра симпозиумы, занялись бы делом. Книги сами себя не прочитают, скиллы сами себя не разовьют.
>> No.29881 Ответ
>>29874
> в шинде всё через жёпу
Сначала хотел согласиться, но потом вспомнил, что в Линуксе не так много отличий в установке. А общих проблем, зачастую, больше.
> нужны таблэтки или покупать
Нет. Достаточно свободного кроссплатформенного ПО.

>>29877
Эх.
>> No.29890 Ответ
Можно как-то передать параметры от одной функции в другую, не исользую яглобальные переменные?
>> No.29899 Ответ
>>29890
Вызвать из одной функции другую и вернуть результат последней? Или если что-то совсем специфическое — можно использовать именованные аргументы. Опиши проблему конкретнее.
>> No.29900 Ответ
>>29890
Можно, используя классы. Если у тебя есть какое-либо состояние, не мучай жопу, используй сразу по дефолту классы, в питоне они для хранения состояния идеально подходят.
>> No.29922 Ответ
>>29899
Вот спасибо тебе. Именно так и сделаю.
>>29900
Именно в этой программе я классы не использую.
А что вообще такое функция в питоне. В классическом понимании она должна возвращать значение, но её можно использовать, как модуль, например, в паскале, то есть просто выполнять какие-либо действия.
>> No.29924 Ответ
>>29922
Коряво как-то выразился, но надеюсь, что вы поймете.
>> No.29928 Ответ
>>29922
Когда используешь ее как модуль - можно считать что она возвращает выбранную функцию
>> No.29931 Ответ
>>29922
"функция" в питоне - это объект с определённым методом __call__.
> class Foo(object): pass
> x = Foo()
> callable(x)
False
>>> x(3)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'x' object is not callable
>>> Foo.__call__ = lambda s, y: y*y
>>> callable(x)
True
>>> x.__call__(4)
16
>>> x(4)    # краткая запись вызова __call__
16
>>> def foo(y): return y*y
>>> dir(foo)
['__annotations__', '__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__doc__', ..., '__str__', '__subclasshook__']
>>> isinstance(foo, object)
True
>>> foo.__call__(4)
16
>> No.29969 Ответ
Файл: 1293782727166.gif
Gif, 87.87 KB, 365×361 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
1293782727166.gif
Написал программу, которая скачивает постеры к фильмам, указанным в файле, заполняемым пользователем, и распологает их на картинке.
Тобишь составляет адвайс листы.
Может тут найдутся гуру питона, которые укажут, куда мне нужно смотреть, что именно в коде я сделал не так.
http://pastebin.com/bYkwjyEE
>> No.29998 Ответ
Что скажете про гуи на питоне?
Какой лучше выбрать? Qt? Gtk? Нужна кросплатформенность.
http://wiki.python.org/moin/GuiProgramming
>> No.29999 Ответ
>>29998
Третий год клепаю их на питоне, до этого писал на плюсах.
Однозначно PyQt, с т.з. разработки он на голову обходит конкурентов. Есть определенный геморрой в упаковке результата под виндовз, но не смертельно. Результат получается как правило от 100МБ, но опять же, по нынешним меркам не смертельно.
>> No.30005 Ответ
Файл: jp_g1241241.jpeg
Jpeg, 47.81 KB, 493×740 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
jp_g1241241.jpeg
>>29969
Все что сразу бросаются в глаза:

global database и global text убери, функции и так имеют доступ к глобальным переменным.

На функции там разбит весь код для того, чтобы понятно было что какой кусок делает? Можно было оставить комментарии. У тебя читабельность больше страдает, вкупе с тем, что ты жадный до пробелов.

if line[0]=='$': None ... else: тоже лишняя конструкция. У тебя четыре раза открывается один и тот же файл, но нигде ты его не закрываешь.

В функции download у тебя два раза проверка на наличие постера.

Последняя функция для удаления пустых картинок, ничего не делает, так как у тебя уже есть проверка на наличие постера при создании файла.

Переменная text служит только для получения числа строк начинающихся с $? Тоже нужно что-то с этим сделать, потому как ты рад этого открываешь файл заново, создаешь совершенно лишний список. Можно в первой же функции посчитать эти строки там где у тебя if line[0]=='$': None Модуль math ты так и не использовал.

>>29999
Доброчую, сам пользовался обоими вариантами — приятнее PyQt.
>> No.30010 Ответ
>>30005
Спасибо, что потратил время на меня. Научиться писать хороший код-действительно важно для меня.
А разве файл сам не закрывается после совершения операции над ним?
>> No.30014 Ответ
>>30010
> А разве файл сам не закрывается после совершения операции над ним?
Нет. Файл закрывается когда объект удаляется, но в питоне язык не дает гарантий о времени удаления объектов. Т.е. при завершении программы он удалится, а до этого — как повезет.
>> No.30016 Ответ
>>30010
Кроме тех случаев, когда используешь конструкцию wits open(filename) as f:. Так файл будет закрыт даже если будет выкинуто исключение.

В твоем случае, достаточно прочитать текстовый файл один раз и работать уже с его строками.
>> No.30023 Ответ
>>29999
>>30005
А вы гуи клепаете через идешки или ручками все?
>> No.30024 Ответ
>>30023
Если есть возможность и не лень, то ручками. А так QtDesigner за глаза хватает и всегда можно скомпилить в питоновский файл.
>> No.30027 Ответ
>>29999
Сейчас себе на жизнь проганьем на питоне зарабатываешь?
>> No.30031 Ответ
>>30027
На жуткой помеси питона и плюсов, у меня куча лоулевел задач (драйверы для железа, которое делают в нашей конторе, код перехвата сетевого трафика и т.д.), которые на питоне делать не кошерно. В основном то, что работает с железом или большими потоками данных на плюсах, а гуй и вспомогательные скрипты на питоне.
>> No.30032 Ответ
>>30023
Я в результате к такой формуле пришел — формы и виджеты рисую в QtCreator, сохраняю их в .ui файлы, а потом их конпелирую в питон через pyuic4, там довольно няшное разделение кода создания виджета и логики (обработки евентов и т.д.) получается, есть UI модуль, есть модуль с логикой.
>> No.30033 Ответ
>>30032
Вот так выглядит та часть, которую я руками писал, http://pastebin.com/bmRQ3ZKe
Остальное всё сгенерировано pyuic4
>> No.30037 Ответ
>>29969
Я не гуру, а так мимоновичек, но мне понравилась задача и захотелось её по-своему сделать как упражнение. Не знаю, вдруг, тебе интересно будет, а мне, если повезёт, может быть тоже немного критики перепадет.
Так как imdbapi прекрасно отдаёт JSON, то я подумал, что не стоит связываться с этим XML и парсингом. Соответственно beautifulsoup не нужна, тем что она у меня не захотела устанавливаться. По тайтлу imdb не всегда находит фильмы, так что без imdb_id, пожалуй, не обойтись. Вообще формат входного файла у меня такой:
tt0133093, The Matrix, Sci-Fi
tt0110912, Pulp Fiction, Crime
Знаю, что по-хорошему бы надо через sys.argv входной и выходной файл сделать. Так сказать для пущего юзабилити. Но я пока плохо с этим разобрался. В общем, вот.
http://pastebin.com/8Jaexy5L
>> No.30042 Ответ
Файл: wallpaper-2331079.jpg
Jpg, 543.24 KB, 1920×1080 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
wallpaper-2331079.jpg
>>30037
Вместо sys.argv лучше попробуй сразу argparse — вдруг решишь расширять функционал.

Кстати о всяких там contains и подобных методов — они являются служебными и вызывать их лучше не напрямую.
То есть в 21 строке вместо if json[0].__contains__('poster'): использовать if 'poster' in json[0]: Я смотрю увлекся ты генераторами списков unique_genres = [item for item in set(genres)] почему бы не упростить list(set(genres)) ?

И в 35 строке, как он себя поведет при жанрах написанных в разном регистре? То есть когда работаешь с пользовательским вводом всегда стоит принимать во внимание то, что данные могут быть не совсем валидными. Это все конечно не критично, но лучше не забывать. А то получится у тебя два разных жанра Drama и drama.

Так же можешь почитать про функцию map, она упростит подсчет максимального числа постеров примерно до max(map(genres.count, genres)) и в дальнейшем будет очень полезной.

requests так же нормально грузит бинарные файлы.

Ну и опять же файл открывается два раза, первый раз он так и не закрывается. Операции чтения и записи всегда являются узким местом.

А вообще практика хорошая, можно в дальнейшем что-нибудь посложнее, как вариант: подсчет слов на странице и создания облака слов подобно wordle.net.

Заказанная критика. Понимаю, глаз замыливается, через пару дней даже можно перечитать код — найдешь новые более элегантные решения.
>> No.30049 Ответ
>>30037
В get_poster_url, if 'poster' in json[0]: будет читаться лучше вызова if json[0].__contains__('poster'):, а ещё лучше будет заменить всю эту конструкцию на: return json[0].get('poster') Для подсчета жанров (и Number of posters in each column), вместо кучи списков удобнее использовать Counter http://docs.python.org/2/library/collections.html#counter-objects
from collections import Counter
  
genres = Counter(l.split(',')[2].strip() for l in open('films.txt', 'r'))
unique_genres = list(genres.keys())
max_posters = max(genres.values())
На 61-63й строке не нужно вызывать split три раза подряд, mdb_id, title, genre = (i.strip() for i in line.split(',')) Но это всё мелочи..
Лишняя возня с индексами и списками, повторное чтение из файла, намекают тебе на неудачную структуризацию данных.
А код обработки исходных данных, загрузки постеров и генерации картинки (строки 59-88) перемешан в одном большом цикле.

Попробуй разделить код на блоки, чтобы в одно время выполнялась только одна задача и подбери подходящую структуру данных для хранения списка фильмов, например: namedtuple http://docs.python.org/2/library/collections.html#collections.namedtuple
from collections import namedtuple
_Movie = namedtuple('Movie', 'mdb_id, title, genre, poster')
def Movie(mdb_id, title, genre, poster=None):  # workaround for default "poster" argument
    return _Movie(mdb_id, title, genre, poster)
  
# read movies from file
movies = [Movie(*(i.strip() for i in line.split(',', 2)))
          for line in open('films.txt', 'r')]
теперь чтобы посчитать жанры достаточно:
genres = Counter(m.genre for m in movies)
или скачать все постеры:
for mov in movies:
    p_url = get_poster_url(mov.mdb_id)
    if p_url:
        mov.poster = urlopen(p_url).read()
отсортировать по жанру:
movies.sort(key=lambda m: m.genre)
и так далее..
>> No.30052 Ответ
Файл: 5a08bbf94914.jpg
Jpg, 168.63 KB, 1024×768
edit Find source with google Find source with iqdb
5a08bbf94914.jpg
Файл: 26451eba6dcb.jpg
Jpg, 161.63 KB, 1024×819
edit Find source with google Find source with iqdb
26451eba6dcb.jpg
Файл: 49529980fb76.jpg
Jpg, 208.52 KB, 1024×768
edit Find source with google Find source with iqdb
49529980fb76.jpg
Файл: 82ef0f53c9da.jpg
Jpg, 199.71 KB, 1024×683
edit Find source with google Find source with iqdb
82ef0f53c9da.jpg

>>30042
>>30049
Спасибо, доброкодеры. Вот вам немного кристаллов.
>> No.30053 Ответ
>>30052
На первой картинке черепашка?
>> No.30056 Ответ
Файл: 5a08bbf94914m.jpg
Jpg, 240.74 KB, 1024×768 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
5a08bbf94914m.jpg
>>30053
Зачем ты это сказал? Она мне теперь приснится.
>> No.30115 Ответ
>>30042
Кроме того, что спецметоды напрямую не используются, там блок if-else, легко заменяется на
return json[0].get('poster', False)

Не забывайте, друзья, про замечательный метод .get у словарей, который не создает эксепшн и может возвращать дефолтное значение, если указанный ключ отсутствует.
>> No.30116 Ответ
>>30115
Сори, анон 30049 уже упомянул об этом.
>> No.30119 Ответ
>>30049
>>30115
Это я пропустил, спасибо за исправление. В его случаи, это лучший вариант.
В других случаях же, это может стать плохой практикой — все же значение может и быть как и None так и False.
>> No.30132 Ответ
Поясните за распараллеливание. Что есть годного почитать из этого. Смотрел туториалы в интернете и ни черта не понял.
И можно ли обмениваться значениями между функциями, или будет мешать GIL? Ну то есть надо, чтобы по массиву проходили две функции, и при их обмене, если выполняется какое-то условие, то элементы массива бы изменялись.
>> No.30136 Ответ
>>30132
> можно ли обмениваться значениями между функциями процессами
Можно.
http://docs.python.org/3/library/multiprocessing.html?highlight=multip[...]esses
Но для
> по массиву проходили две функции
распараллеливание не нужно.
>> No.30137 Ответ
>>30132
Если грубо, в питооне распараллеливание по потокам имеет смысл только для i/o операций. Открытие и чтение файлов, граббинг веб-страничек, запись в БД и все такое. Для этого GIL мешать почти не будет.
Чистую математику можно бить по процессам, модуль кажется multiprocess или как-то так.
>> No.30138 Ответ
>>30132
> И можно ли обмениваться значениями между функциями, или будет мешать GIL?
GIL это Global Interpreter Lock, т.е. мьютекс внутри мейн лупа интерпретатора, позволяющий одновременно питоновые опкоды выполнять только одному потоку.
Он по определению не может мешать обмену данными или чему там еще, это просто внутренний мьютекс, гарантирующий, что оно не рухнет все нахер.

Для синхронизации внутри программы есть целая куча готовых синхронизирующих примитивов, берешь те, что нравятся и пользуешься.
> Что есть годного почитать из этого
Да в общем-то стандартные доки питона достаточно ясно поясняют, что это всё такое. Ну и PEPы.
>> No.30139 Ответ
>>30137
> в питооне распараллеливание по потокам имеет смысл только для i/o операций
Глупости, есть замечательный C-API GIL_Release(), который позволяет выполнять код без GILа, т.е. такой код вполне нормально паралеллится.
Не помню сходу, насколько оно используется в NumPy/SciPy, но по-моему там было вообще автоматическое распараллеливание для трудоемких вычислений.
>> No.30146 Ответ
Посоны, как в питоне читать/писать простые хмл-файлы?
>> No.30147 Ответ
>>30146
Красивым мылом.
>> No.30151 Ответ
>>30147
Красивым каменным супом же. Или домом минидомом.
>> No.30190 Ответ
>>30146
Не слушай этих, они ничего не понимают в хмле, только lxml, только нормальный ElementTree.
>> No.30193 Ответ
Файл: Bubl.png
Png, 86.64 KB, 960×540 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
Bubl.png
>>30190
ElementTree сложный, я уже минидомом упоролся.
>> No.30217 Ответ
>>30037
Поисправлял то, что насоветовали, и попробовал сделать многопоточную загрузку. Суть такова:
Загрузка происходит в 2 этапа. Сначала скачивается ссылка, потом постер. Пусть будет t1 и t2. Для каждого этапа я делаю несколько потоков. Чтобы упорядочить доступ к объектам, делаю 3 очереди (q1, q2, q3) и размещаю таким образом: q1=>t1=>q2=>t2=>q3. Вроде бы всё работает.
Аноны, может вы ещё раз посмотрите, если не лень будет, годится такой код, нет? Ну там претензии к оформлению может ещё какие есть.
http://pastebin.com/6b4dy24q
>> No.30242 Ответ
>>30217
  • Цикл и условие в строках 125-126 эквивалентны конструкции:
genre = mov.genre
try:
    x = 20+(WIDTH+20)*unique_genres.index(genre)
except ValueError: pass
else:
    y = 100 + y_counter[genre]
    ...
Причем код в исключении никогда не будет выполняться, так как список unique_genres уже сгенерирован из всех возможных mov.genre .
  • Не совсем понятно, зачем код скачивающий постеры разбит на четыре части, было бы логичней получить ссылку и сразу начинать скачивать постер.
  • Вместо link_task.setDaemon(True), лучше link_task.daemon = True так как:
> setDaemon() Old API for daemon.
http://docs.python.org/2.7/library/threading.html?highlight=setdaemon#[...]aemon
  • У тебя частенько встречаются конструкции вроде:
while not q1.empty():
    movie = q1.get()
в то время как в документации явно указанно что:
> if empty() returns False it doesn’t guarantee that a subsequent call to get() will not block.
http://docs.python.org/2/library/queue.html?highlight=queue#queue-objects
Поэтому будет лучше:
try:
    while True:
        movie = q1.get(timeout=TIMEOUT)  # или .get_nowait()
        ...
except Empty: pass
  • Настолько частая проверка while not q3.full(): pass будет жрать все 100% cpu, поэтому вместо pass лучше использовать sleep(DELAY) (из модуля time ).
Но так как ты всё равно используешь q3.task_done() , было бы целесообразней вызвать q3.join() .
Похожая проблема есть в стоках 49-53.

А вообще, операции над списками в несколько потоков удобней делать с помощью ThreadPool, (thread версия multiprocessing.pool).
http://docs.python.org/2/library/multiprocessing.html?highlight=multip[...].pool
from multiprocessing.pool import ThreadPool
downloader = ThreadPool(threads_num)
downloader.map(get_link_and_poster, movies)  # blocks until the result is ready.
А ещё он умеет возвращать генератор, таким образом можно начинать собирать "advice", не дожидаясь пока докачаются остальные постеры.
for mov in downloader.imap_unordered(get_link_and_poster, movies):
    if mov.poster:
        ...
>> No.30249 Ответ
Файл: 1341515567108.gif
Gif, 36.13 KB, 720×720 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
1341515567108.gif
>>30242
Ок, буду дальше медитировать над скриптом.
> было бы логичней получить ссылку и сразу начинать скачивать постер.
Просто ссылка на одном сайте, а картинка на другом. Или это не имеет значения?
>> No.30256 Ответ
>>30249
Всё понял. Действительно, нет смысла разбивать загрузку на 2 части. Спасибо.
>> No.30312 Ответ
>>28158

Скажите есть какой нибуть механизм/практики контроля типов в Питоне?

Допустим функция принимает что то типа wx.Window. Но передать туда можно что захочешь.

Есть какая либо возможность эту ошибку отловить, до того как оно мне ноги поотстреливает?
>> No.30313 Ответ
>>30312
Явную проверку типов issubclass, isinstance обычно не используют, так как она ломает "Duck Typing".
Поэтому такие ошибки обычно ловят или уже после того как "простреливают" ноги:
try:
    ...
    ...
except (AttributeError, ..., Whatever):  # looks like it wasn't wx.Window after all
    raise TypeError("Expected 'wx.Window' got '{0.__name__}'"
                    .format(type(window)))
Или заранее проверяют объект на наличие нужных методов:
if not hasattr(window, 'Show'):
    raise TypeError("Can't show this window!")
Последнее можно запихать в __subclasscheck__, __instancecheck__ и использовать issubclass, isinstance для большей наглядности.
А еще, для создания абстрактных классов, проверки объектов во время инициализации и пр. есть:
http://docs.python.org/2.7/library/abc.html?highlight=abs#module-abc
from abc import ABCMeta, abstractmethod
class A(metaclass=ABCMeta):  # for Python3
    # __metaclass__=ABCMeta  # for Python2
    @abstractmethod
    def foo(self): pass
  
class B(A):
    def foo(self): pass
  
class C(A): pass
>
>>> a=B()  # OK
>>> b=C()
TypeError: Can't instantiate abstract class C with abstract methods foo
>> No.30341 Ответ
Файл: 00000.jpeg
Jpeg, 115.60 KB, 800×600 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
00000.jpeg
>>30313
Спасибо
>> No.30489 Ответ
Анон, привет, есть простой цикл:
for a in b:
    do_something(a)
Дело в том, что при выполнении do_something(a) может возникнуть исключение, характер появления которого плавающий. А функцию эту все же хочется отработать. Вижу такое решение:
c = iter(b)
a = next(c)

while True:
    try:
        do_something(a)
    except:
        pass
    else:
        try:
            a = next(c)
        except StopIteration:
            break
Но должно же быть более простое решение?
>> No.30490 Ответ
>>30489
Ничего не понял, почему просто не запихать трай-эксепт внутрь фор?
>> No.30491 Ответ
>>30490
Да, а еще можно можно в какой-нибудь подавляющий эксепшоны декоратор завернуть.
>> No.30492 Ответ
>>30490
Это как, продемонстрируй?
>> No.30496 Ответ
>>30492
Банально
for a in b:
    try:
        do_something(a)
    except:
        pass
>> No.30499 Ответ
>>30496
Не то. Текущий элемент (а), на котором будет поймано ислючение, будет пропущен, и цикл начнет обрабатывать следующий элемент из (b). А надо, чтобы пыталось обработать текущий (a), пока исключение не пропадет. Т.е. логика такая:
for a in b:
    try:
        do_something(a)
    except:
        прогнать_еще_раз_текущий_(а)
>> No.30501 Ответ
>>30499
> надо, чтобы пыталось обработать текущий (a), пока исключение не пропадет
Извращение какое-то.
Ну вообще гря тоже самое:
for a in b:
    f = True
    while f:
        try:
            do_something(a)
            f = False
        except Exception as e:
            pass
>> No.30504 Ответ
>>30501
Можно и без флага:
for a in b:
    while True:
        try:
            do_something(a)
        except Exception: pass
        else: break
>> No.30505 Ответ
Файл: 147.jpg
Jpg, 43.43 KB, 465×700 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
147.jpg
>>30504
Годно, спасибо.
>> No.30580 Ответ
Файл: alice_100.jpg
Jpg, 4584.41 KB, 2552×3508 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
alice_100.jpg
Это снова я и я опять прошу посмотреть мой код. Делал специальный будильник-аркаду. Помните старый баян - по полю в рандомных направлениях летают прямоугольники и нужно своим прямоугольником не задеть другие. Мол, если ты продержишься больше 17 секунд, то ты гений. Сделал на основе этой идеи будильник.
http://pastebin.com/xUUcR3iG
>> No.30581 Ответ
>>30505
Какая же она противная.
>> No.30598 Ответ
>>30580
time_alarm=time_alarm.split(':')
hours=time_alarm[0]
minutes=time_alarm[1]
В одну строку.
hours, minutes = time_alarm.split(':')
for event in pygame.event.get():
            pygame.mouse.set_visible(0)
Вот здесь непонятно, зачем ты делаешь курсор невидимым в цикле.

А собственно по pygame вряд ли могу помочь, у меня скрипт не работает. Сначала просто висит, я так понял, ждет назначенного времени, потом мелькнули какие-то квадраты и все, выход.
>> No.30603 Ответ
>>30598
Ага. Там нужно указывать в таком виде.
python file.py 12:00 20. Где последний аргумент - сколько секунд продлится игра.
Спасибо за помощь.
>> No.30617 Ответ
>>30580
:12
window_open=True + while window_open: = while True: ?
Или window_open это дескриптор из pygame.locals и он потом меняет значение?.. было бы неплохо это документировать.

:19-23
Читать аргументы лучше тогда, когда они есть, т.е. после if __name__=='__main__': .
И вообще нежелательно писать код в теле модуля, не относящийся к инициализации этого модуля.

Обе функции wait() подсказывают тебе, что ты делаешь что то не так. Зачем будильнику проверять время каждые 30 секунд?
Тем более, для отложенного запуска, в питоне есть http://docs.python.org/2/library/threading.html#timer-objects

:41,65
except: эквивалентен except BaseException: и ловит ВСЕ исключения, служебные, системные, исключения интерпретатора и т.д.
Если тебе зачем-то надо поймать ВСЕ исключения твоей программы (а в твоём случае, это точно не надо), лови except Exception: .

:42
Всё-таки наличие файла лучше проверить сразу, при запуске, чем потом узнать что "будильник сломался" лол.

:43,101
Вызов sys.exit() не из основного потока, возможно делает не совсем то что ты ожидал
http://docs.python.org/2/library/sys.html#sys.exit

:53-55
Луче (и понятней) иметь один список с объектами, чем три (а потом четыре, пять..) с их свойствами.

:94
Питон не любит рекурсии, особенно те, без которых можно было обойтись.
Тем более, в этом месте "me" пропадает и если не двигать мышкой, больше не появляется и можно дальше идти спать..

:78-85
Когда x>640 или y>480 то очевидно что они не меньше нуля и наоборот. Тут была бы уместней конструкция if, elif .
Каждый [i] и .x это вызов __getitem__(i) и __getattr__(x), с последующим обращениями к словарям и т.д..
Так как их значения во время цикла не меняются, что бы "питон не тормозил" их можно кэшировать в локальном пространстве имён. (Тоже самое относится и к .cos, .sin, .randint и пр.)

:96-98
Не знаток PyGame, но для бесконечного повтора вроде есть music.play(loops=-1) .

:102-106
Зачем нужно три потока? третий - основной.
thread1 завершается сам, а кто и когда завершает thread2 ?
>> No.30635 Ответ
Файл: o772894.jpg
Jpg, 662.28 KB, 1600×1200 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
o772894.jpg
>>30617
Спасибо. Хорошие замечания, особенно про проверку музыки и функцию wait(там был жуткий быдлокод).
>> No.30739 Ответ
Файл: JGgHcT8.jpg
Jpg, 444.64 KB, 1836×2448 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
JGgHcT8.jpg
Анон, а безопасно ли питон-коду модифицировать свой файл?
Перезапускать себя, например os.system('python file.py &')?

Если да, то можно же организовать самооптимизирующийся код!
>> No.30741 Ответ
>>30739
> безопасно ли питон-коду модифицировать свой файл?
Нет.
>> No.30784 Ответ
>>30739
> модифицировать
"Модифицируй" текстовый файл и исполняй его через exec().
Или просто строку. Будет то же самое, но без приставки "само".
>> No.30785 Ответ
Файл: wallpaper-733405.jpg
Jpg, 160.78 KB, 1024×768 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
wallpaper-733405.jpg
Здравствуйте.
Подскажите пожалуйста. Хочу научиться программировать. До этого программировал только на турбо паскале, в школе. И то, только квадратные уравнения решали, лол.
Хочу начать с питона. Начинал читать Лутца. Прочёл пол книги, и как-то потихоньку забил. Ибо на столько страниц всё растянуть... Каких-то конкретных заданий - нету. Поэтому то что я прочёл, я успешно забывал. В идеале хотел бы научиться программировать не питоне. А дальше может быть, в целях самообразования с++.
Таки вот, как нужно изучать язык? Когда я читал Лутца, мне не было интересно, ибо примитивные, неинтересные примеры. Я после прочтения статьи, набирал код и исполнял его и т.д. Но через день забывал. Нужно ли конспектировать что-то? Может нужно прочесть что-то вводное в программирование? ООП вообще никак не понимаю. Не укладывается у меня это в голове и не могу понять как работает. Также испытываю проблемы с алгоритмами. Надеюсь на вашу помощь, ня.
>> No.30787 Ответ
>>30785
Указанную тобой книгу не читал, но уверен что ты говоришь о хорошей, годной книге для обучения программированию на конкретном языке, а не программированию вообще. По второму я даже и не знаю что посоветовать, кроме четырехтомника Кнута, но это зело хардкорно.
Хороший метод для самообучения програмированию на мой взгляд - выбрать себе простую, но реальную задачу и решить её: калькулятор, сетевой пинг-понг, маленькую тулзу для автоматизации какого-нибудь твоего действия. Главное, довести дело до конца. Нормальный интерфейс, понятный не только тебе. Хелп, шорткаты, настройки.

Ну и в конце немного скепсиса
> > Хочу научиться программировать.
> > Начинал читать Лутца. Прочёл пол книги, и как-то потихоньку забил.
> > Поэтому то что я прочёл, я успешно забывал.
> > Когда я читал Лутца, мне не было интересно
> > Хочу научиться
> > забил забывал не было интересно
Ты вообще уверен, что оно тебе надо?
>> No.30788 Ответ
>>30787
Да, уверен!
>> No.30789 Ответ
>>30788
Хм, может тогда будешь няшей и сделаешь мне вот что:
есть набор пар имя:значение, например "имя1":10, "Имя2":5. Еще есть есть формула в виде строки "имя1*(2имя2+4)".
Нужна функция, принимающая набор и формулу и возвращающая результат вычислений (140 в данном примере).
>> No.30790 Ответ
>>30789
Но я не знаю как это сделать!ъ
Единственная мысль, которая пришла в голову - "имя1":10, "имя2":5 сделать словарями.
"имя1*(2имя2+4)" - сделать строкой.
Дальше подстановка значений словаря в формулу и вывод?
>> No.30791 Ответ
>>30790
> Но я не знаю как это сделать.
Чего ты не знаешь как сделать?
Как заменить один кусок строки другим в питоне? Посмотри в книге.
Не умеешь вычислять значения по формуле? Походи на уроки математики в младшей школе.
Не знаешь, как работают операторы сложения/умножения напитоне? Посмотри в книге.
Не знаешь, как разобрать строку в вычисляемое выражение? Посмотри в книге. Подумай. Не поможет - погугли. Если и погуглить не можешь - бросай все, иди в гуманитарии.
В этом собственно и заключается умение программировать - понять задачу и найти способ её решения.

ПыСы, может немного грубовато, но я просто хочу дать тебе понять, что это ты хочешь научиться программировать, это только тебе нужно и все средства для этого у тебя есть. Если ты на каждую новую задачу будешь реагировать "Я не знаю как это сделать", то нахер такой разработчик вообще нужен. Вся ценность разработчиков в том, что им можно сказать: "У меня есть такая задача" и они её решат. Придумать как - это их работа.
Готовых рецептов для всего на свете нет, нужно каждый раз думать своей головой.

к: лесбиянку тутор во всем виновата
>> No.30803 Ответ
Файл: 0133972aa000f4d1447744fd47e6470d.jpg
Jpg, 200.14 KB, 850×850 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
0133972aa000f4d1447744fd47e6470d.jpg
Анон, есть такая проблема: нужно сохранить страницу с кириллицей(на странице она есть, но сохранять ее не обязательно) и с правильными заголовками в запросе(важно). Если попробовать urllib2.urlopen(url).read(), затем записать это в файл - кирилица отваливается(хрен с ней, конечно, но сохраняется архивом)(если вывести на печать получаю кракозябры). Если через urllib.urlretrieve(url, file) то нельзя добавить заголовки. Заголовки можно добавить в urllib2, но нельзя через него сохранить(насколько я знаю).
>> No.30804 Ответ
>>30803
wget -r -p -np -S http://www.example.net
>> No.30805 Ответ
Файл: 7dbafb125a587aecfb0d341c027fc752.jpg
Jpg, 353.90 KB, 850×1976 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
7dbafb125a587aecfb0d341c027fc752.jpg
>>30804
Мне нужно через питон
>> No.30806 Ответ
>>30803
Наверное как-то так:
http://stackoverflow.com/questions/1020892/urllib2-read-to-unicode

Или пробуй третий питон, у него с кракозябрами проблем, обычно нет.
>> No.30809 Ответ
>>30806
Зпто проблемы с половиной непортированных либ.
>> No.30816 Ответ
Файл: 3ecd58008790d489873483b1ee73346b.jpg
Jpg, 329.22 KB, 850×1277 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
3ecd58008790d489873483b1ee73346b.jpg
>>30806
Выдает UnicodeDecodeError
>> No.30818 Ответ
>>30816
А ты в заголовке страницы смотрел ее кодировку?
В третьем питоне без проблем читаю странички чем-то вроде такого:
url = 'http://www.kinopoisk.ru'
page = opener.open(url)
html = str(page.read().decode(encoding='cp1251'))
>> No.30819 Ответ
Файл: fddbe31d96d4fb53dca47e40dfe85afe.jpg
Jpg, 174.22 KB, 850×850 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
fddbe31d96d4fb53dca47e40dfe85afe.jpg
>>30818
У меня твой код выдает ошибку
UnicodeDecodeError: 'charmap' codec can't decode byte 0x98
Кодировка в заголовке windows-1251
>> No.30821 Ответ
>>30803
> сохраняется архивом
похоже получаешь страницу в gzip-encode
попробуй ее перед сохранением разгзипить
>> No.30830 Ответ
>>30819
А если так?
html = str(page.read().decode(encoding='cp1251', errors='ignore'))
>> No.30838 Ответ
>>30785
>>30787
>>30791
Решил сделать парсер картинок с wallbase.cc.
С чего начать? Ибо я не совсем представляю как работают парсеры.
>> No.30839 Ответ
Файл: A832049.jpg
Jpg, 82.90 KB, 468×512 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
A832049.jpg
>>30838
> не совсем представляю как работают парсеры
Ну так разбери и посмотри.
https://github.com/search?q=wallbase.cc
>> No.30840 Ответ
>>30838
Что в твоем понимании парсер картинок? Может грабилку? Ты хочешь стащить с сайта картинки по тегам, или что?
>> No.30842 Ответ
>>30840
Видимо да, я не знаю терминологии. Ну какая-нибудь форма - вводишь кеи - и вывод картинок по кеям.
>> No.30858 Ответ
>>30842
У тебя подход какой-то странный я не понимаю.
Ладно, попробуй так: сделай это на маленьком конкретном примере вручную и подробно опиши каждый шаг. А потом запрограммируй эту же последовательность действий.
Ужасная, отвратительная практика, но я ничего лучше посоветовать не могу
>> No.30860 Ответ
Файл: 3ad394387a5821b7b...
Jpg, 138.32 KB, 565×800
edit Find source with google Find source with iqdb
3ad394387a5821b7b157e97f9a1ce2ab.jpg
Файл: 0d09624bec7bb78c6...
Jpg, 279.48 KB, 850×1189
edit Find source with google Find source with iqdb
0d09624bec7bb78c6fc945c133fb3d55.jpg

>>30821
Да, это был архив. Вот только нахрена сжимать текст я так и непонял. Спасибо тебе, огромное!
>>30830
Выдает ошибку декодирования, правда ругается на другой символ.
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2039' in position 1: ordinal not in range(128)
Я тоже пробовал добавлять ignore, т.к. кирилица не особо и нужна, но не взлетело.
>> No.30862 Ответ
>>30860
> Да, это был архив. Вот только нахрена сжимать текст я так и непонял. Спасибо тебе, огромное!
Можно настроить вебсервер так, чтобы он отдавал контент в gzip-encoded. Это несколько нагружает сервер, но экономит трафик. Браузеры умеют автоматически распаковывать такой контент. Причем когда браузер делает запрос он в хидере Accept-Encoding указывает в каких форматах он готов принять данные с сервера. В том числе можно этим включить/выключить гзип. urllib2 может ередавать такие хидеры, поэтому как вариант - делать свой кастом хидер.
headers = {
                   'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Version/3.1.2 Safari/525.21',
                   'Accept': r"text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1",
                   'Accept-Language': r"en-EN,ru;q=0.9,en;q=0.8",
                   #'Accept-Encoding': r"deflate, gzip, identity, *;q=0",
                   'Accept-Encoding': r"gzip;q=0,deflate;q=0, identity, *;q=0",
                   'Accept-Charset': r"Accept-Charset: iso-8859-1, utf-8, *;q=0.1",
                   'Keep-Alive': r"300",^M
                   'Connection': r"Keep-Alive",
^M
                }
request = urllib2.Request(url, data=None, headers=headers)
>> No.30863 Ответ
>>30860
UnicodeEncodeError из за str() , которой ты не указал в какую кодировку конвертировать юникод (а по умолчанию это ascii ).
Так что, или указывай кодировку, или убирай str() и напрямую юзай encode html = page.read().decode(encoding='cp1251').encode(encoding='<твоя любимая кодировка>') (так, имхо, понятней что происходит), или работай с юникодом, 2013 год на дворе...
>> No.30905 Ответ
>>28158
Привет, Питонач. Пишу прогу, которая заполняет базу данных рандомными данными. Использую MySQLbd у меня в таблице есть поля типа timestamp и я не понимаю что с ними делать. Подскажите советом или ссылочкой?
>> No.30950 Ответ
>>30905
> timestamp
Юниксовый timestamp же. Количество секунд с 1970го года.
Гугл говорит, что можно например так:
import datetime
print(datetime.datetime.fromtimestamp(int("1284101485")).strftime('%Y-%m-%d %H:%M:%S'))
мимонепитонщик
>> No.31068 Ответ
Файл: eHut74O.jpg
Jpg, 57.78 KB, 500×412 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
eHut74O.jpg
>>30784
Медленное спасибо тебе, анон.
Пару дней помониторил и ушел - даже не знал что мне ответили.
>> No.31076 Ответ
Как обстоят дела с разработкой под Андроид на питоне? Трудно ли портировать приложение с компа на Андроид?
>> No.31079 Ответ
>>31076
> портировать приложение с компа
никак. В SLA пользовательский интерфейс состоит из хтмл кода. правда, я последний раз смотрел на него коло года назад.
>> No.31321 Ответ
Доброкодер, возможно записать объект в файл? В документации куча способов записи строк, но что делать если в переменной хранится картинка или архив?
>> No.31322 Ответ
>>31321
serialization
>> No.31327 Ответ
Питоняши, тут такое дело. Прохожу курс на coursera по данным, а там домашки на этом вашем питоне. С CS у меня неплохо, но вот языка не знаю. Подскажите какой-нибудь справочник по синтаксису, чтобы коротко, понятно, и исчерпывающе, как в msdn например.
>> No.31328 Ответ
>> No.31329 Ответ
>>31328
Это понятно и исчерпывающе, но очень подробно и многословно. Для того чтобы понять, как написать хэллоуворлд нужно будет прочесть четверть документа.
Хотелось бы иметь документ, в котором за минуту можно найти необходимый элемент языка, при условии, что я знаю, что ищу тоесть при условии, что взглянув на первый абзац описания я смогу понять, подойдет оно мне или нет..
>> No.31330 Ответ
>> No.31331 Ответ
Файл: flower_fairy_wallpaper_by_bluesaga331-normal[1].jpg
Jpg, 1215.34 KB, 1680×1260 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
flower_fairy_wallpaper_by_bluesaga331-normal[1].jpg
>>31330
Агонь! Спасибо, анон, держи фею.

И если >>31328 с >>31330 не одно и то же лицо - тоже спасибо, за участие.
>> No.31332 Ответ
Файл: Gravity-Falls-Episode-7-Double-Dipper.jpg
Jpg, 81.84 KB, 600×400 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
Gravity-Falls-Episode-7-Double-Dipper.jpg
>>31331
Один и тот же пэхэпист, мечтающий писать на руби, но еще поверхностно знающий и одобряющий питон.
>> No.31355 Ответ
>>28158
У меня к вам скромный вопрос про питонятину.
Лень было вчера вникать в синтаксис при написании одного разборщика местного апи, однако я заметил, что в вашем язык блоки кода объявляются отступами.

Так ли это и стоит ли его дальше использовать вместо баша в повседневной жизни? Ну и да, расскажите мне про другие "качественные архитектурные решения" этого языка. (про грабли с гирляндой версий я уже в курсе, это у вас так отлично развивается проект, да)

С: золото чану
>> No.31390 Ответ
>>31355
> Так ли это и стоит ли его дальше использовать вместо баша в повседневной жизни?
Имхо, это как использовать виндовый павершелл в повседневной жизни - излишне.
Имхо, на баше повседневные задачи решаются тупо быстрее: грепнул, авкнул, запустил. Плюс это де факто стандарт написания консольных скриптов в *nix системах.
Питон же стоит использовать там где баша не хватает, ну допустим написать анализатор лога со статистикой, графиками и шлюхами. Ну точнее можно и на баше, но это тоже уже будет изъебством.
>> No.31409 Ответ
>>31355
> Так ли это и стоит ли его дальше использовать вместо баша в повседневной жизни?
Стоит юзать ipython - очень мощная оболочка. Считай что ipython = python + bash.
>> No.31416 Ответ
>>31409
о, питон в кои то веки дорос до уровня руби
>> No.31810 Ответ
Новый релиз IronPython, yay! Альфа версия alpha as fuck!
>> No.31924 Ответ
Файл: 1248331803739.jpg
Jpg, 352.47 KB, 688×650
Ваши настройки цензуры запрещают этот файл.
unrated
>>28158
   Доброго здравия, анон.
   Пилю Python-поделку для реализации одной нужной мне фичи, заодно обучаюсь на реальном примере. Написал нужные функции, поддержку примитивной БД, словом, все, что требовалось. Теперь хочу облачить это дело в графику с помощью tkinter-а, но перед этим прикрутить некостыльный интерфейс для интерпретатора. Соответственно, появились вопросы.
1.Как можно реализовать или где можно почитать о реализации такого: открываем интерпретатор > запускаем скрипт, который создает строку ввода и выполняет функции в скрипте по именам > вызываем функцию из скрипта по имени > обрабатываем результат > вызываем еще n функций по надобности > по вводе пустой строки цикл ввода прекращается.
Пробовал через while True и далее с вводом строки, как у Саммерфилда написано, но не взлетело. Желательно материал вообще на эту тему, как сделать программку более дружелюбной для конечного пользователя(то есть, меня, ибо если импортировать в интерпретатор функции, а потом вызывать их как module.func() это извращение и неюзабельно.
2.Отзывы по поводу tkinter-а, трудно ли будет написать примерно такой интерфейс: набор однотипных кнопок, скажем, A с разными параметрами(тут ООП рулит, как я догадываюсь), кнопка B добавляющая кнопки A и кнопка C удаляющая кнопки A.
p.s. Извиняюсь, если написано ужасающе, но я слишком долго сидел в ридонли.
>> No.31927 Ответ
>>31924
> 1.Как можно реализовать или где можно почитать о реализации такого: открываем интерпретатор > запускаем скрипт, который создает строку ввода и выполняет функции в скрипте по именам > вызываем функцию из скрипта по имени > обрабатываем результат > вызываем еще n функций по надобности > по вводе пустой строки цикл ввода прекращается.
Реализовал это через функцию, которая принимает строку, по условию определяет содержание, выполняет указанную функцию и вызывает саму себя, но, подозреваю, что страшнейший быдлокод и нужно через while True делать. Вопрос еще актуален.
>> No.31931 Ответ
>>31927
Как-то так:
class Dispatch:
    def foo1: pass
    def foo2: pass
    ...
    def foon: pass

while True:
    fun = input('blah.. blah..')
    if not fun: break
    foo = getattr(Dispatch, fun)  # или наоборот
    result = foo(*args, **kwargs)
Можно ещё попробовать это в генератор обернуть.
>> No.31952 Ответ
Файл: 6166315.2.jpg
Jpg, 1656.17 KB, 2000×1437 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
6166315.2.jpg
>>31931
Обернул все функции в класс, сделал через while, получилось гораздо компактней и в принципе то, что нужно. Т.к. функции простейшие и между собой связаны только одним объектом, то не стал лезть к getattr, опять сделал через if-ы ввода, но упростил.
http://pastebin.com/NavP4Ui6 - вот часть кода для примера.
Работает так, как и задумывалось изначально. Приношу благодарность за помощь.
>> No.31953 Ответ
Котоны, а код типа такого не лучше ли (прошу прощения за руби) http://ideone.com/74Is6J
При этом, $task пополняется при подключении модулей с действиями, а значит более чистая архитектура и нет гемороя с плагинами
>> No.31962 Ответ
>>31931
А ещё лучше, вот так: http://docs.python.org/3.2/library/cmd.html
import cmd

class Standart(cmd):
    def __init__(self, tasklist)
        self.tasklist = tasklist

    def do_Add(self):
        # addtask to self.tasklist
        pass

    # ...

    def do_Del(self):
        # deltask from self.tasklist
        pass

std = Standart(tasklist)
std.prompt = "Справка = help. Команда: " 
std.cmdloop()
>> No.32180 Ответ
>>28158
Пишу простенький HTTP сервер на Python (задание из универа)
нужно занять 80 порт. Система запрещает. Как получить к нему доступ?
>> No.32181 Ответ
>>32180
Винда? Тогда используй netstat, посмотри, кто занял порт, и прибей гада.
>> No.32182 Ответ
>>32180
хм. я идиот. просто запустить через Sudo и всё. прошу прощения.
>> No.32192 Ответ
>>32182
В Debian и Ubuntu по умолчанию биндиться на порты до 1024-го может только root. Есть утилитка authbind, она позволяет нерутовым программам биндиться.
>> No.32324 Ответ
>>32182
И снова в тред врывается идиот с 80м портом.

У меня проблемы с относительными адресами. Когда запускаю из IDE ( spider) всё работает, а из консоли файл не находит. почему так? Абсолютный адрес работает и там и там. но не хотелось бы его использовать
>> No.32329 Ответ
>>32324
В консоле вбей pwd. Все относительные пути будут прибавляться к нему. Сравни то что получилось с абсолютным.

Хинт: используй cd
>> No.32335 Ответ
>>32324
> но не хотелось бы его использовать
Тебе мало проблем, ты хочешь еще текущую директорию отслеживать?
>> No.32337 Ответ
>>32335
> еще текущую директорию отслеживать?
Как будто что-то сложное, вычислил при запуске программы, подставил ко всем относительным адресам.
>> No.32371 Ответ
>>32337
Если бы всё было так просто. В 95% случаев эту самую директорию выставляют в чёрт знает что. Не нужна тебе еще одна глобальная переменная, не нуж-на.
>> No.32400 Ответ
>>32371
> В 95% случаев эту самую директорию выставляют в чёрт знает что.
Ват?
> Не нужна тебе еще одна глобальная переменная, не нуж-на.
Ок.
Вычислил, сделал туда cd, все остальные файлы в относительных путях.
>> No.32405 Ответ
>>32400
Тебе не нужна еще одна глобальная переменная. Не нуж-на.
>> No.32443 Ответ
>>32405
> > сделал туда cd
>> No.32470 Ответ
>>32443
1. Внутри программы тоже можно сделать "cd" (для текущей программы).
2. Когда юзер будет ставить и запускать эту прогу, это будет одним из поводов обматерить ее автора или послмть ему багрепорт.
>> No.32702 Ответ
Файл: 1250171982515.jpg
Jpg, 136.99 KB, 800×841 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
1250171982515.jpg
Хочу устроится куда-нибудь стажером. Знаю синтаксис и умею сортировать пузырьками. Пидорнут ли меня сразу или стоит попробовать?
>> No.32703 Ответ
>>32702
> стоит попробовать
This.
>> No.32718 Ответ
Файл: 1352788336864.jpg
Jpg, 99.34 KB, 530×580 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
1352788336864.jpg
>>32702
Сейчас нужен SQL, а не сортировка пузырьками.

Дано три таблицы: товары, города, продажи. Нет, не так: посетители, страницы, посещения. Нет, не так: A, B, AB. Нарисовать их, добавить индексы, написать запрос с тремя условиями WHERE, JOIN-IN, HAVING - обыкновенная задача с собеседования.
>> No.32883 Ответ
>>28158
Добрый день, питонач. У меня вопрос: как запретить программе выходить за пределы корневого каталога. да и как это вообще работает.
Преподаватель скинул тесты. В одном из тестов запрашивается файл httptest/../../../../../../../../../../../../../etc/passwd, которого в корневом каталоге нет, но почему-то программа его находит, что считается ошибкой.
>> No.32886 Ответ
>>32883
Проверять получаемые пути:
if not os.path.abspath(path).startswith(abs_work_dir_path):
    raise Exception()
Создать белый список файлов, которые можно открывать и разрешить обращаться к ним только по индексам:
allowed_files = {'file1': 'httptest/files/1',
                 'file2': 'httptest/files/2',
                 ...
                 'test/file3': 'httptest/testfiles/3'}

try:
    file = open(allowed_files[path])
except KeyError:
    print('Access denied')
А вообще это задача операционной системы, запускай программу от имени пользователя у которого нет доступа к файлам за пределами рабочего каталога или запускай программу из под chrootа.
>> No.32888 Ответ
>>32886
> запускай программу от имени пользователя у которого нет доступа к файлам за пределами рабочего каталога
>> No.32897 Ответ
>>32883
> запрашивается файл /etc/passwd
Ну и пусть запрашивается, там все равно ничего интересного нет.
>> No.33010 Ответ
Файл: cirno2.png
Png, 114.68 KB, 300×333 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
cirno2.png
>>32718
Можно ли использовать всякие orm-костыли на собеседованиях? SQL плохо знаю.
>> No.33013 Ответ
>>33010
Имхо использование orm хорошо, но знание к приблизительно каким sql-запросам они приводят еще лучше.
>> No.33016 Ответ
>>33010
По моему опыту на собеседованиях спрашивают по SQL, а на практике всегда нужно работать с ORM.
>> No.33420 Ответ
Файл: 977944.jpg
Jpg, 801.01 KB, 1171×1495 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
977944.jpg
Что такое тестирование(unittest)? Программа передающая что-то на вход тестируемой программе и проверяющая результат? Зачем тогда нужны эти фреймворки? Такие тесты полностью автоматические?
Гугл говорит как их писать, а не что это.
>> No.33421 Ответ
>>33420
функция:
def fact(n)
  if n == 0 then return 1
  else return n * fact(n - 1) end
end
Юнит-тест:
def test_fact
  assert(fact(0) == 1)
  assert(fact(1) == 1)
  assert(fact(3) == 6)
  assert(fact(5) == 120)
end
>> No.33431 Ответ
>>33421
Спасибо, понял. Их обычно пишут полностью автоматическими или как у тебя? А что такое end?
>> No.33432 Ответ
>>33421
А в чём смысл такого теста?
>> No.33434 Ответ
>>33432
Если ты что нибудь в ядре нарефакторишь, то можешь проверить что ничего не отвалилось.
>> No.33442 Ответ
>>33431
Да, полностью автоматическими. И запускаться они должны в один клик, иначе никто их запускать не будет.
>> No.33443 Ответ
>>33434
Точнее, в чём смысл конкретно этого теста? Почему проверяются 0 и 1 понятно, а почему проверяются и 3, и 5? Это ведь избыточно.
>> No.33444 Ответ
>>33421
Ох лол. Не называй это тестами.
>> No.33451 Ответ
>>33443
> и 3, и 5
> избыточно
Тесты проверяют твою программу на определённых, показательных входных данных. Мол, если программа правильно работает на них, то она будет правильно работать на всех данных.
>>33444
Почему? Чем это не юнит-тест?
>> No.33455 Ответ
>>33451
Входных данных пять классов: нуль, единица, n>1, n<0 и не целые числа. Достаточно одного теста на каждый класс. Либо тест на 3, либо тест на 5 следует выкинуть, потому что они из одного класса.
>> No.33514 Ответ
Питонач, у меня сломался гугл. Можно ли на питоне создавать нативные приложения под окошки, например? С гуем и прочими прелестями.
>> No.33515 Ответ
>> No.33518 Ответ
>>33515
Спасибо. Осталось только доучить Python :3
>> No.33532 Ответ
>>33515
На ЛОРе пишут, что gtk умирает, так что возможно лучше валить PyQt.
Вот например гткашные pidgin и gajim выглядят под шиндой временами корявенько, а кутешные qbittorrent и clementine как родные.
>> No.33533 Ответ
>>33532
* валить на
>> No.33535 Ответ
>>33532
4.2, gtk просто более нишевый (и в плане платформ, и в плане ЯП, на которых с ним удобнее работать)
>> No.33645 Ответ
Привет, анон, есть класс:
class AttributeDict(dict): 
    __getattr__ = dict.__getitem__
    __setattr__ = dict.__setitem__
И если сделать вот так:
urls = AttributeDict({})
urls.foo = bar
то все в порядке. Но хочется достичь большего (в идеале бесконечного) уровня вложенности. Т.е. чтобы можно было сделать и так: urls.foo1.foo2 = bar2. Соответственно, чтобы и достать значения можно было так же. Как это реализуется вообще?
>> No.33647 Ответ
>>33645
Бесконечный уровень вложения делается примерно так:
class Node:
    def __init__(self, val=None):
        self._val = val

    def __getattr__(self, name):
        d = self.__dict__
        attr = d.get(name)
        
        if not name.startswith('_') and attr is None:
            attr = Node()
            d[name] = attr

        return attr
    
    def __setattr__(self, name, val):
        d = self.__dict__
        
        if name.startswith('_'):
            d[name] = val
        
        else:
            self.__getattr__(name)._val = val
Доступ к '._val' через '=', делается через дескрипторы нужно гуглить как именно.
>> No.33648 Ответ
Файл: 089.jpg
Jpg, 283.44 KB, 790×1000 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
089.jpg
>>33647
Спасибо, конечно, но как-то мудрёно для меня. Проще словари друг в друга вкладывать.
>> No.33651 Ответ
>>33648
там это и написанно
>> No.33654 Ответ
>>33651
Значит, я не понимаю чего-то. А есть пример, как помещать туда элементы, и как доставать?
>> No.33655 Ответ
>>33654
> > > a = Node()
> > > a.x.y = 9
> > > a.x = 7
> > > a.x.y._val
9
> > > a.x._val
7

А чтобы не писать каждый раз ._val нужно курить мануалы по дескрипторам.
>> No.33657 Ответ
Файл: 025.jpg
Jpg, 130.41 KB, 1600×1200 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
025.jpg
>>33655
Понятно, спасибо.
>> No.33659 Ответ
>>33647
Какой нечитабельный код

перл-кун
>> No.33664 Ответ
Файл: -.jpg
Jpg, 66.97 KB, 604×453 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
-.jpg
>>33659
Для примера сойдёт, Доброкодер-кун ведь не будет его как есть копипастить правда, Доброкодер-кун?.
>> No.33665 Ответ
Файл: yes.jpg
Jpg, 91.45 KB, 962×1080 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
yes.jpg
>> No.33700 Ответ
Добра, анон.
Что спросить-то хотел...
Ты знаешь какие-нибудь opensource-проекты, где использовались бы Tornado и MongoDB вместе? Спрашивал у гугла, обшарил весь github. Не обязательно GPL, лишь бы сорцы почитать можно было.
>> No.33725 Ответ
В суперклассе есть метод со структурой if else. Можно ли в производном классе наследовать этот метод и добавить в структуру elif?
>> No.33726 Ответ
>>33725
Нет, но ты можешь написать вот так например http://ideone.com/MbkgjS
>> No.33727 Ответ
>>33725
Если в суперклассе это заранее не предусмотрено, как тут >>33726, то можно добавлять 'if'ы только в начале конструкции.
class A:
    def elseifs(self, x):
        if ..:
        elif ..:
        else: ..

class B(A):
    def elseifs(self, x):

        if something(x):
            dosomething()

        elif something_else(x):
            dosomething_else()

        else:
            super().elseifs(x)
А если тебе надо часто менять или расширять условия, то возможно будет лучше использовать словари\диспетчер классы.
>> No.33736 Ответ
Файл: tumblr_m73a5a0YaJ1r68r2ho1_1280.png
Png, 384.21 KB, 1062×1428 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
tumblr_m73a5a0YaJ1r68r2ho1_1280.png
>>33726
>>33727
Спасибо!
>> No.33745 Ответ
Файл: sample_9a9947f37984f61c9b480721dd138250.jpg
Jpg, 88.21 KB, 850×715 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
sample_9a9947f37984f61c9b480721dd138250.jpg
>>32702
Пидорнули!
>> No.33750 Ответ
>>33745
За неумение или за что-то другое?
>> No.33756 Ответ
>>33750
За неумение. Еще я нервничал и двух слов связать не мог. Зато посоветовали хорошую книгу по алгоритмам. Буду пробовать снова.
>> No.33764 Ответ
>>33756
> ато посоветовали хорошую книгу по алгоритмам
Какую?
>> No.33768 Ответ
Довожу до конца курс по Питону на Codeacademy. Что читать дальше? И стоило ли вообще этот курс проходить?
Цель - написать мамке программу для бухгалтерии, с гуем и прочим. Ну и потом, разумеется, пытаться на этом поприще заработать. Заранее спасибо :3
>> No.33769 Ответ
>>33768
А там разве не за полчаса всё проходится?
>> No.33771 Ответ
>>33769
Мне некуда торопиться. И таки на вопрос ты не ответил, няша.
>> No.33772 Ответ
>>33768
> Что читать дальше?
SICP, Совершенный код, Объектно-ориентированное конструирование программных систем.
И вообще http://pastebin.com/3LXd4HAc
> И стоило ли вообще этот курс проходить?
Ну ознакомиться с синтаксисом, норм.
>> No.33773 Ответ
>>33764
Python Algorithms: Mastering Basic Algorithms in the Python Language
>> No.33774 Ответ
>>33772
> И вообще
Заманала эта паста.
мимо
>> No.33779 Ответ
>>33774
Букварь бы тоже заманал, если бы не принудительное среднее образование.
>> No.33820 Ответ
Файл: Снимок-экрана-02.08.2013-19:16:57.png
Png, 187.95 KB, 464×345 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
Снимок-экрана-02.08.2013-19:16:57.png
Питонач, где я дурак?
>>> matrix = [[0]*4]*4
>>> for line in matrix: line
... 
[0, 0, 0, 0]
[0, 0, 0, 0]
[0, 0, 0, 0]
[0, 0, 0, 0]
>>> matrix[2][2] = 1
>>> for line in matrix: line
... 
[0, 0, 1, 0]
[0, 0, 1, 0]
[0, 0, 1, 0]
[0, 0, 1, 0]
>> No.33828 Ответ
>>33820
>>> id(matrix[0])
139913036760056
>>> id(matrix[1])
139913036760056
Это значит что у тебя вектора, составляющие матрицу - один и тот же объект на самом деле.
matrix = [[0 for x in range(4)] for x in range(4)]
>> No.33867 Ответ
Файл: fate.JPG
Jpg, 67.76 KB, 801×602 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
fate.JPG
http://pastebin.com/rBATrEwY
В списке pics все картинки в папке. Нужно оставить только те, которые начинаются с frame. Регулярное выражение совпадает где нужно, НО в конце рядом с print pics видно что остались картинки которые под него не попадают. Они просто пропускаются(это видно в print i который перед raw_input()). Как такое может быть(for вроде должен перебрать весь список)? А если отсортировать нетронутый список pics - получаю None.
>> No.33869 Ответ
>>33867
Предлагаю так:
[item for i, item in enumerate(pics) if not re.search(p, item)]
>> No.33870 Ответ
>>33869
Блин, поспешил. И пароль главное не стал вводить - типо фиг с ним, вроде всё просто.
Не нужны же индексы, вот:
[item for item in pics if not re.search(p, item)]
>> No.33874 Ответ
Файл: 22bf4f3a4885f9eaf0f9faab47aee0a3.jpg
Jpg, 277.46 KB, 600×1100 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
22bf4f3a4885f9eaf0f9faab47aee0a3.jpg
>>33870
Спасибо, работает, но интерестно почему через for - нет. Циклом традиционнее, вроде, и во вложенных сборках что-то не то с индексами(в предидущем треде было) - так что я их боюсь.
>> No.33875 Ответ
>>33874
В for он перескакивает через одну при удалении. Сам до конца не понял,почему, поэтому не стал умничать.
>> No.33878 Ответ
>>33875
А как по твоему 'for' должен "догадаться" что после удаления элемента нужно вернуться на один индекс назад?
По хорошему он должен вылетать с исключением, как это случается когда один поток модифицирует список, а другой в это время, перебирает его через 'for'. Но видать это пока не починили.
>> No.33896 Ответ
>>33867
Регулярное выражение для такого случая? Вы совсем поехамши.
Где же простота и элегантность?
pics = [blablabla]
print filter(lambda x: x.startwith('frame'), pics)
>> No.33897 Ответ
>>33896
Прошу прощения, не .startwith, а .startswith
>> No.33898 Ответ
>>33896
> Питон для такого случая? Вы совсем похеамши.
Починил.
Где же простота и элегантность?
ls |grep -E '^frame_[0-9]+\.(jpg|png|gif)$'
>> No.33901 Ответ
>>33898
bash в питонотреде? Нет пути.
Да и элегантностью тут не пахнет.
>> No.33903 Ответ
>>33901
Тащемта, для такой задачи bash действительно подходит лучше Python.
мимопитонист
>> No.34005 Ответ
Почему не удаляется фрейм?
from tkinter import *

class something():
    def play(self):
        a2 = Frame()
        a2.grid()

        self.bttn = Button(root,text = 'Anything',command = a2.destroy).grid()

root = Tk()
a1 = Frame(root)
a1.grid()
Label(a1,text = '1234').grid()

a = something()
a.play()

root.mainloop()
>> No.34007 Ответ
>>34005
Во-первых, прежде чем виджет дестроить, надо его распаковать.
Во-вторых, фрейм удаляется, но поскольку кнопка родителем имеет не фрейм, а рута, этого не видно.
В-третьих, grid() возвращает None, потому твоё присваивание self.bttn = малоосмысленно.
<...>
    def play(self):
        a2 = Frame()
        def finish():
            a2.grid_forget()
            a2.destroy()
        a2.grid()
        self.bttn = Button(a2, text = 'Anything', command = finish)
        self.bttn.grid()
Приятно видеть, что дело питонотреда живёт. Оп предыдущего треда.
>> No.34023 Ответ
Почему app недоступно из метода play, но доступно из com?
from tkinter import *


class c1():
    def __init__(self):
        a = c2()
        a.play()


class c2():
    variants = ('1','2')
    answers = ('one','two')

    def play(self):
        self.bttn_app = Frame(root)
        self.bttn_app.grid()
        app.output.insert(END, '>>> ')    # Вот тут выдает ошибку

        for variant in list(enumerate(self.variants)):
            Button(self.bttn_app, text=variant[1],
                   command=lambda variant=variant[0]: self.com(variant)).grid()

    def com(self,var):
        app.output.insert(END, '>>> '+self.answers[var])


class Application(Frame):
    def __init__(self, master):
        Frame.__init__(self, master)
        self.grid()
        self.create_widgets()

    def create_widgets(self):
        self.output = Text(self,wrap=WORD)
        self.output.grid()

        game = c1()


root = Tk()
app = Application(root)
root.mainloop()
>> No.34024 Ответ
>>34023
Смотри внимательно Traceback, на момент вызова 'play()', 'app' ещё не определена.
Ещё подробно про резолюцию имён можно почитать здесь: http://tech.blog.aknin.name/2010/06/05/pythons-innards-naming/
Или писать более внятный код, чтобы этого читать не пришлось
>> No.34065 Ответ
Файл: ssdsd.png
Png, 6.54 KB, 372×47 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
ssdsd.png
>>28158
Анончик, почему получается так? Снизу выложу две строчки кода, а пикчей будет вывод из консоли. Собственно, первая строчка на пикче - то, что я ввожу, вторая - результат работы print. Что это за странные дополнительные символы там, где их и быть не должно и почему метод lower() не срабатывает на кусок русского текста?
> self.userinput = rawinput("> ").lower()
> print self.user_input
>> No.34066 Ответ
>>34065
Разметку запорол, но с нижними подчёркиваниями, надеюсь, разобраться можно.
>> No.34067 Ответ
Файл: html-cheat-sheet-...
Png, 76.83 KB, 763×1037
edit Find source with google Find source with iqdb
html-cheat-sheet-v1.png
Файл: emezeta-php-card-...
Png, 1268.87 KB, 2480×3508
edit Find source with google Find source with iqdb
emezeta-php-card-v0.2.png

Есть похожее для питона? Интересуют стандартные библиотеки.
>> No.34068 Ответ
>>34065
> raw_input
> кусок русского текста
Пришло время перекодировать строки, строки сами себя не перекодируют..
Кстати Рyhton нативно поддерживает юникод c 2008го года.
>> No.34069 Ответ
Файл: hot-sexy-girl-n1.jpg
Jpg, 43.21 KB, 610×779 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
hot-sexy-girl-n1.jpg
> Пришло время перекодировать строки, строки сами себя не перекодируют
Ты имеешь ввиду encode() и decode() методы? Беда в том, что при попытке применить один из них я натыкаюсь на огромную кучу проблем, так что может ты укажешь мне куда гуглить и что читать, чтобы точно и точечно применить их по отношению к русскому тексту так, чтобы убрать те символы?
Или ты говоришь о u" "?
>> No.34070 Ответ
>>34069
Я бы посоветовал погуглить в сторону третьего пайтона.
Так как работать с не ascii во втором это, как ты уже заметил, "огромная куча проблем".
Вот тут, небольшая их компиляция: http://pythonhosted.org/kitchen/unicode-frustrations.html
>> No.34071 Ответ
Файл: 2013-08-26-003704_722x434_scrot.png
Png, 16.08 KB, 722×434 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
2013-08-26-003704_722x434_scrot.png
>>34070
Я бы посоветовал не давать дурацких советов, потому как все, кто может, используют 3-й, но не все, видишь ли, могут, и по вполне реальным причинам. Новички же банально ссут. Короче, не можешь подсказать, так и не выёбывайся, Склифосовский. Хотя ссылку ты ему дал нормальную, да.
>>34069
#!/usr/bin/env python
# -*- coding: utf-8 -*-
  
txt = raw_input().decode('utf-8')
print 'Lower: ', txt.lower()
Консоль: sakura, кодировка консоли utf-8. Как видишь, всё работает. Другое дело, что, вообще говоря, не лучшая практика. полагаться на то, что кодировка консоли именно utf-8, но, как я понимаю, тебя сейчас не это волнует.

Обрати внимание на вторую строчку кода, она важна, если в теле скрипта есть захардкоженые не-ascii строки.

Что тебе нужно понять: букв нет. Есть последовательности байтов и то, как их интерпретировать, определяет кодировка. u"" это не строка в кодировке utf-8, это строка юникода, что является совершенно отдельной абстракцией.
Читать: Разница между вторым и третьим пайтоном в этом плане в том, что во втором дефолтная строка — это байтовая строка, а в третьем — юникод строка. Таким образом, второй пайтон как бы всё технически в работе со строками умеет, но многие АПИ просто не умеют работать со строками в нужной кодировке, а в третьем об этом заботиться не нужно, ибо абстракцией по умолчанию является юникод, а не байтовая строка.
Читать (по желанию): http://lucumr.pocoo.org/2013/7/2/the-updated-guide-to-unicode/

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

Алсо, да, впредь, пожалуйста, используй более точные формулировки, чем "огромная куча проблем". "Огромная куча проблем" не является удовлетворительным идентификатором.
>> No.34077 Ответ
>>34071
Так стоит python 2 сейчас изучать или python 3?
>> No.34089 Ответ
>>34077
3, чтобы никому не сношать мозг.
Это ж то же самое, что спрашивать «ребята, я собираюсь купить себе первый компьютер, что на него ставить, ME или восьмёрку?».
>> No.34112 Ответ
>> No.34117 Ответ
>>34077
Учи оба. Не ошибёшься.
>> No.34130 Ответ
>>34089
Только пока все перетащат свои поделия на третий — пройдет еще пара лет. Лучше начать со второго, потом пересесть будет не проблемой.
>> No.34136 Ответ
>>34130
Лучше начать со второго, а потом еще пару лет тащить свои приложения на третий.
Анон, не стоит использовать старое программное обеспечение, ведь новое почти всегда лучше!
>> No.34283 Ответ
Добрый вечер.
Есть два скрипта: один на python, другой на lua. Как научить их общаться между собой?
Как сделать это через сокет (который Unix Domain)? Питонский скрипт должен слушать, ждать данные, луаскрипт - обрабатывать некоторое событие.
Сам ни одного, ни другого языка толком не знаю, так что, вполне может быть, реализуется сие вполне стандартными методами. А может нет? Расскажите, а.
>> No.34332 Ответ
Доброанон, не могу выбрать фреймворк. У меня очень-очень большая БД, в которой часто используются связи много-ко-многим с параметром в средней таблице.
Попробовал джангу, но она не может нормально в описанную выше связь (только если руками sql). Посмотрел по сторонам - там какие-то пирамидки, фласки, вебпишечки - черт ногу сломит кто для чего и зачем.
На чем вообще масштабные и нагруженные проекты пилят?
>> No.34356 Ответ
>>34332
> На чем вообще масштабные и нагруженные проекты пилят?
На других языках. Другие программисты. Которые не задают такие убогие вопросы на доброчане. Не ориентируйся на масштабные и нагруженные проекты, неудачник.

По делу: хватит думать "фреймворками", неудачник. Тебе нужен ОРМ? Используй sqlalchemy. Тебе нужен фреймворк для веб-страничек? Используй flask. Пирамиды и джанги а ещё в нагрузку твистеды и торнадо это всё очень здорово, но зачем? Не отвечай, но если ты можешь ответить зачем, то их и используй впрочем, нахуя я это пишу, если понятно, что ты не стал бы спрашивать, если бы мог ответить на этот вопрос. Если не можешь ответить: просто используй фласк и не еби мозг себе и другим своими фреймворкопробелмами.

Алсо, да, ещё может появиться такой же умник как я, и обосрать мой совет, сказав, что нужно использовать не sqlalchemy и flask, a peewee и flask. Так вот, peewee, конечно, минималистичней, но он самостоятельно выдумывает имена таблиц и вообще имеет ряд странностей, так что пока не можешь решать сам, что лучше: используй-ка лучше sqlalchemy.
>>34283
Дурацкие ты вопросы какие-то задаёшь. Лень отвечать. Если б ты не знал про сокеты, я б тебе что-нибудь и ответил, но раз ты знаешь, что они есть и это то, что тебе надо, так хуле ты тут спрашиваешь, уеба? Иди погугли. Или напишу, почему найденное тебя не устроило.
>> No.34369 Ответ
>>34356
Спасибо, жопа, похоже, ты подсказал ровно то, что мне нужно:3
>> No.34386 Ответ
Файл: a8dbb2bec6ec3e82cef906b52cebbe7d.0.jpg
Jpg, 67.53 KB, 520×392 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
a8dbb2bec6ec3e82cef906b52cebbe7d.0.jpg
>>34332
> только если руками sql
Ты так пишешь "sql" будто это что-то плохое...
>> No.34389 Ответ
>>34386
Надо либо так, либо эдак. А когда месиво в коде начинается при более менее типовых выборках - не айс
>> No.34390 Ответ
>>34283
Что насчёт запуска lua в скрипте на python (https://pypi.python.org/pypi/lupa/)?
>> No.34391 Ответ
>>34389
Вьюшки не пробовал создавать?
>> No.34855 Ответ
Файл: WinPython.png
Png, 144.13 KB, 1366×768 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
WinPython.png
Анон, у меня проблема с библиотеками. Скачал Pygame, Numpy, Scipy и на всё говорит, что модуль не найден на инструкцию import %название библиотеки%. Скачал WinPython, но там работает только WinPython интерпретатор, и при этом на весьма нужные мне функции говорит, что они ошибочны. А остальные программы выдают сообщение на картинке. Переустанавливал, брал старые версии, всё равно ошибки.

ОС: Windows 8 64 бит.
>> No.34856 Ответ
Файл: Linus-Torvalds.jpg
Jpg, 22.07 KB, 620×310 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
Linus-Torvalds.jpg
>>34855
Господа, дайте ему линукса.
>> No.34857 Ответ
>>34855
Скачал PyCharm, всё работает из коробки, попробуй, ещё захочешь.
>>34856
С каких это пор питон стал зависим от оси?
>> No.34862 Ответ
>>34857
Питон делался бородатыми красноглазиками для бородатых красноглазиков, поэтому под не юнихобразыми осями корректная работа его не была никогда приоритетной задачей, в линупсах он идет изкоробки, а в гейос из-за приверженности к нетрадиционному сексу изкоробки руби, но поставить и работать с питухоном не проблема, ибо юнегз. В винде всё ни как у людей, всё ксеноморфно и инопланетянско.
>> No.34869 Ответ
>>34862
Наркоман.
>> No.34884 Ответ
>>34857
С тех пор как в винде нет логичного именования веток файловой системы.

Хотя, внимательный BSDвод здесь может похулить и линупс.
>> No.34933 Ответ
>>34884
> Хотя, внимательный BSDвод здесь может похулить и линупс.
За помойку в /etc? Хоть я с линупсами долго не работал, но вот это бросилось в глаза
>> No.34957 Ответ
>>34884
/usr/local == shit
>> No.34974 Ответ
Файл: 1224372932169.jpg
Jpg, 202.72 KB, 466×699
Ваши настройки цензуры запрещают этот файл.
unrated
Есть сервер на локалхосте которому нужно отправить строку, и он пришлет ответ. Клиент на питоне не печатает ответ, хотя через telnet все работает нормально:
import socket
s = socket.create_connection(('127.0.0.1', 10000))
s.sendall('ghjk')
print s.recv(500)
через wireshark видно что строка отправляется, затем сервер отправляет подтверждение что принял, потом он должен отправить ответ вида "this is response"(в другом пакете) - но не отправляет.
Возможно s.recv(500) читает из парета с подтверждением?
Проблема именно в клиенте, через telnet всё работает.
>> No.34981 Ответ
>>34957
Не смотрел, но осуждаю? Иди перечитай позикс.
>> No.34982 Ответ
>>34974
Поищи, как указать порт. Без его указания, наверное, он отправляет на какой-то свой дефолтный - отличный от телнетовского.
>> No.34983 Ответ
>>34974
Алсо, советую вместо телнета использовать netcat.
>> No.34985 Ответ
>>34974
flush()
>> No.34987 Ответ
>>34974
while True:
    sys.stdout.write(s.recv(512))
>> No.34990 Ответ
>>34982
Порт указан - 10000, и работает именно через telnet, а через клиент не хочет.
>>34987
Безрезультатно.
Прикладываю код сервера, он 100% правильный, скопипастил с примера, хотя проблема скорее всего в клиенте.
http://pastebin.com/Qtqdh1wz
Пакет подтверждения приходит с одинаковыми флагами независимо от telnet или клиент используется, но ответ отправляет только телнету. Почему?
>> No.34993 Ответ
>>34990
flush()
>> No.34994 Ответ
Файл: horo1.jpg
Jpg, 1331.50 KB, 1500×1000 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
horo1.jpg
>>34993
Пакет не приходит, и flush() тоже не помогает. Не понятно почему. Можешь сам попробовать: http://pastebin.com/Qtqdh1wz - сервер, >>34974 - клиент.
>> No.34995 Ответ
>>34994
> ответ отправляет только телнету.
> class FingerProtocol(basic.LineReceiver)
> t.p.b.LineReceiver(protocol.Protocol, _PauseableMixin) : class documentation
> A protocol that receives lines and/or raw data, depending on mode.
> In line mode, each line that's received becomes a callback to lineReceived.
s.sendall('ghjk')
s.sendall('\n')
>> No.34996 Ответ
Файл: horo2.jpg
Jpg, 1332.74 KB, 1000×1500
Ваши настройки цензуры запрещают этот файл.
r-15
>>34995
Ох лол, кто бы мог подумать! Это такой тонкий ньюанс или я очень чайник?
Зачем тогда присылать подтверждение что принял, если на самом деле - еще нет
Заработало с '\r\n', спасибо.
>> No.35011 Ответ
Питончане, насколько нормальна будет такая конструкция?


def isvalidfilename(fn):
if fn.count('.doc',-4,len(fn))
    fn = doc2pdf(fn,fn)
if fn.count('.pdf',-4,len(fn))
    fn = pdf2tiff(fn,fn)
return fn.count('.tif',-4,len(fn))
def pdf2tiff(source, destination):
idx = destination.rindex('.')
destination = destination[:idx]
args = [
'-q', '-dNOPAUSE', '-dBATCH',
'-sDEVICE=tiffg4',
'-r600', '-sPAPERSIZE=a4',
'-sOutputFile=' + destination + '__%03d.tiff'
]
gs_cmd = 'gs ' + ' '.join(args) +' '+ source
os.system(gs_cmd)
args = [destination + '__*.tiff', destination + '.tiff' ]
tiffcp_cmd = 'tiffcp  ' + ' '.join(args)
os.system(tiffcp_cmd)
args = [destination + '__*.tiff']
rm_cmd = 'rm  ' + ' '.join(args)
os.system(rm_cmd)
>> No.35012 Ответ
Файл: Питон-внезапно-322691.jpeg
Jpeg, 78.22 KB, 700×525 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
Питон-внезапно-322691.jpeg
>>35011
пик отклеился.
>> No.35081 Ответ
Анон, подскажи, как полностью выпилить python 2.7 с компьютера? Не так давно проявил фантастический долбоебизм - при живом и рабочем Python(xy) зачем-то поставил Python 2.7. Spyder тут же накрылся, при каждой попытке запуска выводилось Spyder crashed during last session. При переустановке Python(xy) выводит предупреждение, что на компьютере уже стоит Python 2.7., как удалить его - не знаю, в "программах и компонентах" нет, но где-то, видимо, скрывается.
>> No.35084 Ответ
>>35081
В path проверь.
>> No.35086 Ответ
>>35084
У меня все добро работает и без прописки в path - находит по регистру, подозреваю.
>> No.35155 Ответ
>>35084
Сейчас я "будто бы всё удалил" и хочу заново поставить Python(xy). В Path тоже ничего от старых не осталось. И всё равно, в начале установки выскакивает предупреждение, что на компьютере есть другая версия Python.
>> No.35171 Ответ
>>35155
Реестр почисть
>> No.35210 Ответ
>>35081
время переустанавливать шинвдовs
>> No.35215 Ответ
Файл: spinegirl_by_kingdeadman-d5cxduj.jpg
Jpg, 54.13 KB, 560×660
Ваши настройки цензуры запрещают этот файл.
r-15
Няши, сегодня я первый раз открыл питон и начал его ковырять. расскажите мне о лучших практиках работы со стрингами.
в чём разница "яблоки" и 'груши'?
что предпочтительнее "лётчик " + name + " не понимает" или "лётчик %s не понимает" %name
>> No.35220 Ответ
в чём разница " и ' для обозначения стрингов?
как лучше конкатенировать стринги? "пукан" + boom или же "пукан %s" % boom
>> No.35228 Ответ
>>35215
> в чём разница "яблоки" и 'груши'?
C ' не нужно лишнюю клавишу (shift) нажимать.
"лётчик %s не понимает" % name
или
"лётчик {} не понимает".format(name)
Последний вариант предпочтительнее, им чаще пользуются, помогает от некоторых неоднозначностей избавиться, больше возможностей форматирования, но первый мне лично больше нравится, компактнее.
>> No.35300 Ответ
есть список с bytes, как его записать в файл через BufferedWriter?
>> No.35306 Ответ
Какую питоноIDE используешь, и почему? Не могу найти идеальный вариант а внутренний перфекционист хочет его найти.
Симпатичны пока IEP и Ninja.
>> No.35307 Ответ
>>35306
Критерии выбора IDE у меня практически равны критериям выбора партии среди быдла в современной россии.
>> No.35318 Ответ
>>35306
PyCharm, т.к. привык к PhpStorm и RubyMine. Опепативы 8 гигов, проц i5, жить можно.
>> No.35319 Ответ
>>35307
То есть, используешь то, что идёт по умолчанию — IDLE?
>> No.35322 Ответ
>>35306
Spyder.
+ Поддержка SciPy, NumPy, IPython
>> No.35360 Ответ
>>35306
Э-э… Vim. Потому что больше ничего не нужно.
>> No.35365 Ответ
>>35360
потому что ты ничего больше не умеешь?
>> No.35368 Ответ
Допустим, нужно вывести содержание всех элементов в элементе.
Как это делаю я:
for a in mod.element:
	print(eval("mod.element." + a))
Можно ли это сделать прямее? А именно, есть ли некий модификатор который будет изменять интерпретацию значений a, которая равны элементу внутри mod.element со строки на код?

Такой код, например
for a in mod.element:
	print(a)
...лишь печатает само название элемента, что наверное было сделано для того чтобы дети быстрее освоили язык.
>> No.35370 Ответ
>> No.35380 Ответ
Почему нельзя сделать так?
i = -1
while i+=1 < 1000:
    # do something
    pass
Выбрасывает скупо SyntaxError.
>> No.35381 Ответ
>>35380
А как ты собрался к i прибавлять 1 < 1000?
>> No.35396 Ответ
>>35381
То же самое происходит если взять его в скобки. Уже пробовал.
>> No.35397 Ответ
>>35396
Имею ввиду i+=1.
>> No.35404 Ответ
>>35380
Потому что "i += 1" — это не expression, и значания у него нет.
>> No.35406 Ответ
>>35404
Питонопроблемы.
крестобог
>> No.35408 Ответ
>>35406
> шоколадопроблемы
> говнобог
>> No.35409 Ответ
>>35404
Кривизна языка. Почему этот оператор нельзя сделать производителем выражений? Даже в чистом си есть.
>> No.35410 Ответ
Файл: 6e07469b23c279438...
Jpg, 139.45 KB, 687×800
edit Find source with google Find source with iqdb
6e07469b23c279438f6da6dca7cd2112.jpg
Файл: 10.jpg
Jpg, 209.43 KB, 704×396
edit Find source with google Find source with iqdb
10.jpg

>>35380
> Почему нельзя сделать так?
Потомушта атата. Нельзя так делать.
while не предназначен для перебора последовательностей. Ибо есть for же. Если нужно пройтись по сложной последовательности чисел, то инкапсулируй всё это непотребство в итератор.

>>35409
> Кривизна языка.
А зойчем вообще так делать? Спортивная стрельба по своим ногам?
Это далеко не баг. Это фича. При том годная весьма.
> Почему этот оператор нельзя сделать производителем выражений?
Да ты упорот же.
> Даже в чистом си есть.
В Няшном нет ничего, кроме нескольких сортов int-а. Если ты думаешь, что это не так, то ты не знаешь Няшный. И уж тем более в Няшном нет указателей, но есть номера ячеек памяти.
while в си не эквивалентен while в питоне
Та же фигня со всякими for и if.
А знаешь почему? Да потомушта питон не си-подобный ЯП.

мимоняшнобог
>> No.35413 Ответ
>>35410
Что такое няшный?
>> No.35416 Ответ
>> No.35476 Ответ
Python2
Допустим есть один класс с методом:
''
class TestClass():
def __init__(self, a,b):
    self.a=a
    self.b=b
def test(self):
    return self.a*self.b
''
Создаю экземпляр и хочу, чтобы метод мне отработал
''
x=TestClass(2,2)
print x.test
''
А он мне начинает телегу толкать про какой-то
''
<bound method TestClass.test of <main.TestClass instance at 0xb750336c>>
''
Что мне сделать, чтобы метод просто передавал 4?
В гугл сходил, результат неудовлетворительный.
>> No.35477 Ответ
>>35476
Зафейлил разметку
class TestClass():
    def __init__(self, a,b):
        self.a=a
        self.b=b
    def test(self):
        return self.a*self.b

x=TestClass(2,2)
print x.test
Выдает:
<bound method TestClass.test of <__main__.TestClass instance at 0xb750336c>>
>> No.35478 Ответ
Файл: Снимок-экрана-17.11.2013-20:06:47.png
Png, 27.95 KB, 640×506 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
Снимок-экрана-17.11.2013-20:06:47.png
>>35476
> print x.test()
>> No.35480 Ответ
>>35478
Спасибо, анон.
>> No.35482 Ответ
>>35481
Совсем косой. Извините.
>> No.35491 Ответ
>>35410
> Да ты упорот же.
Понятно же вроде объяснил. Попробуй лучше.
Можно только привести еще пример.
i = 1
(i+=1)-1 == SyntaxError.
> А зойчем вообще так делать? Спортивная стрельба по своим ногам?
> Это далеко не баг. Это фича. При том годная весьма.
Элегантное малострочное решение задач. В самом стандартном k&r, как я уже сказал, встречается уйму раз. Тебе просто непривычно. Так и мне было.
>> No.35498 Ответ
>>35491
> Элегантное малострочное решение задач
с нулевой сопровождаемостью.
>> No.35506 Ответ
Питоны, делая из своего набора функций и переменных класс с методами, написал self более 9000 раз.
Я что-то делаю не так, или это еще одна прекрасная сторона ООП, которая ждет меня в любом языке программирования?
>> No.35508 Ответ
Какой толк от классов? Я имею ввиду зачем они существуют, если можно писать например так:

def qwerty():
print 1111
def ololo():
qwerty()
И объясните тупому что такое в каждом классе и функции self.
>> No.35512 Ответ
>>35508
Так нельзя писать, нужны отступы птрсн.жпг
>>35506
Непосредственно к ООП эта особенность имеет минимальное отношение. В крестах можно без этого, только вот во избежание конфликта с именами параметров многие всё равно пишут через this-> или приписывают богомерзкое m_ ко всем членам класса.
>> No.35514 Ответ
Файл: такие-дела.jpg
Jpg, 35.82 KB, 604×400 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
такие-дела.jpg
>>35506
Мне например на собеседованиях большинство работодателей пытается доказать что паттерны проектирования являются главной и неотъемлемой частью ООП, несмотря на то что паттерны - это примитивные алгоритмы, а уж с классами они будут или без - дело десятое. Карочи мир жесток и несправедлив.
>> No.35521 Ответ
>>35514
> паттерны [ООП] - это примитивные алгоритмы
Извини, анон, но ты идиот, не понимающий сути(тм) ООП. Паттерны - это не алгоритмы, а способы организации классов для решения какой-то типовой задачи. Слово "алгоритмы" к ним применимо примерно так же, как, например, к связи таблиц БД на ER-диаграмме.
>> No.35524 Ответ
>>35514
Мне например на собеседованиях большинство пидарасов пытается доказать что паттерны проектирования являются главной и неотъемлемой частью ООП, несмотря на то что паттерны - это примитивные костыли для тех языков, где нет функций высших порядков, и где задача "передать на вход функции сортировки функцию сравнения" вызывает унижение и боль, а уж с классами они будут или без - дело десятое. Карочи мир жесток и несправедлив.
>> No.35528 Ответ
Питач, у меня тут проблема с форматированием. Вот есть у меня стринг

eingabe = '86 232 69 131 84 218 86 29 83 210 82 67'

А мне его нужно выровнять по колонкам:

ausgabe = ' 86 232 69 131 84 218 86 29 83 210 82 67'

Так, чтоб перед каждым двухзначным числом добавлялся дополнительный пробел. Пока насобачил вот такой велосипед:

def fstr(s):
   t = s.split()
   result = ''
   for i in t:
   result += " " * (4 - len(i)) + i
   return result

Чую, что можно сделать красивее.
>> No.35529 Ответ
>>35528
с разметкой я зафейлил, Антон.
>> No.35530 Ответ
>>35524
я бы оставил на произвол судьбы свидетелей иеговы, которые затесались в мой домашний кружок бесед, и каждый день ходил бы на такие собеседования, просто потому, что я восхищаюсь полётом мысли идиотов.
>> No.35531 Ответ
>>35508
А можно вот так:
class QwertyOlolo():
    def qwerty(self):
    print 1111
    def ololo():
    self.qwerty()
>> No.35532 Ответ
>>35531
Только работать не будет потому, что я опять забыл сраный self
>> No.35533 Ответ
>>35528
ns = eingabe.split()
w = max(map(len, ns)) + 1

print(''.join(map(('{:>%d}' % w).format, ns)))
# или
print((('{:>%d}' % w) * len(ns)).format(*ns))
``
>> No.35534 Ответ
В продолжение темы про пропущенные скобки при вызове метода.
Анон, как мне сделать, чтобы при обращении типа:
> > > a.b
В случае наличия в объекте значения b, передавалось это значиние, а в случае отсутствия автоматически вызывался метод a.b()?
>> No.35535 Ответ
>>35534
class БуханкаХлеба:
    @property
    def тролейбус(self):
        """Но зачем??!"""
        if имеет_значение(self._b):
            return self._b

        return self._b()
>> No.35538 Ответ
Антон, а как няшно заполнять Dict, в котором только ключи без значений? (или просто перезаписать значения из list)

d = {"Петрович": None, "Палыч": None, "Мухтар": None}
l = ["1 бутылка", "1 бутылка", "сок"]

так вот, как сделать, чтобы было:

d = {"Петрович": "1 бутылка", "Палыч": "1 бутылка", "Мухтар": "сок"}

есть ли вариант без всяких for key in d ?
>> No.35544 Ответ
>>35538
d.update(zip(sorted(d), l))
>> No.35545 Ответ
Спасибо, Антон
>> No.35547 Ответ
Файл: what_a_fuck_i_am_doing.png
Png, 240.06 KB, 721×300 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
what_a_fuck_i_am_doing.png
я уже двадцать минут как питонист. такая проблема - хочу распарсить страницу через BeautifulSoup, но как получить эту самую страницу из интернетов, если нужна печенька с sessionID? ну печенька-то у меня уже есть, а как её передать серверу через третий питон? какие модули (да и же тысячи!) для этого использовать и как это всё будет выглядеть?
>> No.35550 Ответ
>> No.35553 Ответ
Файл: Святой-Дух1.jpg
Jpg, 194.91 KB, 700×495 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
Святой-Дух1.jpg
>>35550
а она не устарела? я хочу использовать что-то перспективное, чтоб дух времени удовлятворяла
>> No.35554 Ответ
Файл: et.jpg
Jpg, 18.47 KB, 460×296 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
et.jpg
>>35550
а она не устарела? я хочу использовать что-то перспективное, чтоб дух времени удовлятворяла
>> No.35557 Ответ
>>35550
а что оно такое грубо неотёсанное?
>> No.35559 Ответ
>>35550
можешь дать пример?
>> No.35560 Ответ
Файл: 1246397463874.jpg
Jpg, 29.47 KB, 320×240 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
1246397463874.jpg
как считать из файла печеньку, что в JSON формате?
>> No.35561 Ответ
Файл: 1246398152666.png
Png, 14.17 KB, 661×577 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
1246398152666.png
как считать из файла печеньку, что в JSON формате?
>> No.35567 Ответ
Даблпостер, ты опять выходишь на связь ТЕПЕРЬ С РАЗНЫМИ КАРТИНКАМИ БЕСПЛАТНО БЕЗ СМС!!!?
>>35553
> 3.3
> устарела
Конечно устарела, епт, сейчас всё под мабилки пишут на сярпе и жаве, нахуй питон.
>>35557
Оно есть, оно работает, этого вполне хватает для того, чтоб сделать нормальный запрос.
>>35559
http://docs.python.org/3.3/library/urllib.request.html#examples ?
>> No.35603 Ответ
Наверное не я один устал ждать API на ЛОРе, хочу запилить принципиально™ новый™ ЛОР-клиент™©® на замену почившей LORA.

Берем рандомный тред

import requests
`r = requests.get('https://www.linux.org.ru/forum/desktop/9855376/comments')`
`r.headers['content-type']`
`'application/json;charset=UTF-8'`
`r.json()`
`Out[90]:` 
`{u'comments': [{u'author': {u'nick': u'ziemin', u'stars': [True]},`
   `u'deletable': False,`
   `u'deleted': False,`
   `u'editable': False,`
   `u'id': 9855413,`
   `u'postdate': u'2013-11-23T13:38:15.708+0000',`
   `u'processedMessage': u'<p><b>\u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435:</b> <a href="https://www.linux.org.ru/wiki/en/Lorcode">\u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0439\u0442\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0438 LORCODE</a></p>',`
   `u'userpic': {u'height': 129,`
    `u'url': u'/photos/105962:-960368627.png',`
    `u'width': 146}},`
  `{u'author': {u'nick': u'fornlr', u'stars': [True]},`
   `u'deletable': False,`
   `u'deleted': False,`
   `u'editSummary': {u'editCount': 1,`
    `u'editDate': u'2013-11-23T13:48:38.365+0000',`
    `u'editNick': u'fornlr'},`
   `u'editable': False,`
   `u'id': 9855446,`
   `u'postdate': u'2013-11-23T13:47:29.973+0000',`
   `u'processedMessage': u'<p>\u041d\u0443 \u0445\u0432\u0430\u0442\u0438\u0442 \u0443\u0436\u0435 \u0442\u0440\u0443\u043f \u043d\u0430\u0441\u0438\u043b\u043e\u0432\u0430\u0442\u044c :/ <a href="http://www.kali.org/">http://www.kali.org/</a></p>',`
   `u'userpic': {u'height': 150,`
    `u'url': u'/photos/108412:1512604789.png',`
    `u'width': 150}},`
  `{u'author': {u'nick': u'smilessss', u'stars': [True, True]},`
   `u'deletable': False,`
   `u'deleted': False,`
   `u'editable': False,`
   `u'id': 9855454,`
   `u'postdate': u'2013-11-23T13:50:13.759+0000',`
   `u'processedMessage': u'<div class="none">&gt;&gt;-----\u0426\u0438\u0442\u0430\u0442\u0430----&gt;&gt;</div><div class="quote"><p>\u0441\u0442\u0430\u0432\u043b\u044e \u0431\u0430\u043a\u0442\u0440\u0430\u043a<br></p></div><div class="none">&lt;&lt;-----\u0426\u0438\u0442\u0430\u0442\u0430----&lt;&lt;</div><p>\u043a\u043e\u0433\u043e \u043b\u043e\u043c\u0430\u0442\u044c \u0441\u043e\u0431\u0440\u0430\u043b\u0441\u044f ?<br>\u0435\u0441\u043b\u0438 \u0434\u043b\u044f &#171;\u0430\u0443\u0434\u0438\u0442\u0430 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0441\u0432\u043e\u0435\u0439 \u0441\u0435\u0442\u0438&#187; \u0442\u043e \u0441\u0442\u0430\u0432\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u0432 \u0441\u0432\u043e\u0439 \u0434\u0438\u0441\u0442\u0440, \u0433\u0434\u0435 \u0432\u0441\u0451 \u0443\u0436\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043e. </p>',`
   `u'userpic': {u'height': 150,`
    `u'url': u'/photos/102112:-873217890.jpg',`
    `u'width': 150}},`
  `{u'author': {u'nick': u'ymnikvlz'},`
   `u'deletable': False,`
   `u'deleted': False,`
   `u'editable': False,`
   `u'id': 9855473,`
   `u'postdate': u'2013-11-23T13:54:29.825+0000',`
   `u'processedMessage': u'<p>\u0441\u043f\u0430\u0441\u0438\u0431\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u044e kali \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c .</p>',`
   `u'reply': {u'author': u'fornlr',`
    `u'id': 9855446,`
    `u'postdate': u'2013-11-23T13:47:29.973+0000',`
    `u'samePage': True},`
   `u'userpic': {u'height': 150,`
    `u'url': u'https://secure.gravatar.com/avatar/83f8dadb9b79976e7d9cc39e6457f33e?s=150&r=g&d=blank',`
    `u'width': 150}},`
  `{u'author': {u'nick': u'ymnikvlz'},`
   `u'deletable': False,`
   `u'deleted': False,`
   `u'editable': False,`
   `u'id': 9855483,`
   `u'postdate': u'2013-11-23T13:56:33.552+0000',`
   `u'processedMessage': u'<p>\u041b\u043e\u043c\u0430\u0442\u044c \u043d\u0438\u043a\u043e\u0433\u043e \u043d\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u043b\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0437\u0443\u0447\u0430\u044e \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e \u0441\u0432\u043e\u0451 \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0435. \u0421\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0441\u044f \u0441 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439 \u0432\u0438\u0434\u0435\u043e\u0434\u0440\u0430\u0439\u0432\u0435\u0440\u043e\u0432 \u0438 \u043f\u044b\u0442\u0430\u044e\u0441\u044c \u0445\u043e\u0442\u044c \u043a\u0430\u043a-\u0442\u043e \u043d\u0430\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u0440\u0435\u0448\u0430\u0442\u044c \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0432 linux  </p>',`
   `u'reply': {u'author': u'smilessss',`
    `u'id': 9855454,`
    `u'postdate': u'2013-11-23T13:50:13.759+0000',`
    `u'samePage': True},`
   `u'userpic': {u'height': 150,`
    `u'url': u'https://secure.gravatar.com/avatar/83f8dadb9b79976e7d9cc39e6457f33e?s=150&r=g&d=blank',`
    `u'width': 150}}],`
 `u'topic': {u'commentsAllowed': True,`
  `u'id': 9855376,`
  `u'link': u'/forum/desktop/9855376'}}`
dictionary_1 = dict(r.json()) ``
In [92]: dictionary_1['url'] --------------------------------------------------------------------------- KeyError Traceback (most recent call last) <ipython-input-92-70195ecbb415> in <module>() ----> 1 dictionary_1['url'] KeyError: 'url' Каким способом можно ответ перевести в читабельный словарь?
>> No.35604 Ответ
>>35603
лицоладонь.жпг
Пользуй пестебин чтоли, твоя разметка отвратна.

АПИ на ЛОРе мог бы взять и запилить сам, исходники на гитхабе имеются.
>> No.35605 Ответ
>>35603
Альзо,
#!/usr/bin/env python3
вместо `u'юникотная-строка' и прочей питухон2 некрофилии я бы пользовал, если бы писал на питоне, лол.
>> No.35864 Ответ
Файл: -.jpg
Jpg, 292.60 KB, 1280×960 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
-.jpg
Что почитать про хайлоад?
>> No.35983 Ответ
Файл: b2887d3346feb70512a6c075be4fd809e3a2acbc.jpg
Jpg, 147.43 KB, 568×800 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
b2887d3346feb70512a6c075be4fd809e3a2acbc.jpg
Аноны, могу ли я сюда обратиться с проблемой по Ren'Py, или мне в другой тред?
>> No.35984 Ответ
>>35983
Логичней спросить на прямую у авторов и комьюнити, они ж там целые уроки клепали.
>> No.35985 Ответ
>>35984
У меня проблема не напрямую с создаванием кода, а скорее с копанием чужого - автор оригинального кода не отзывается, уроки комьюнити шерстил, но тамошний ответ мне не помог.
>> No.35986 Ответ
>>35985
Ну показывай.
>> No.35987 Ответ
>>35986
Пилю перевод этой игрульки: http://scoutshonour.com/digital/
Наживую, бо сам не кодер и особенными приёмами не владею. Просто заменяю текст в самом коде.

Проблема в том, что невозможно перевести заглавия писем - выдает ошибку:

I'm sorry, but an exception occured while executing your Ren'Py
script.

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-10: ordinal not in range(128)

While running game code:
   - script at line 187 of C:\Program Files\Digital - A Love Story/game/script.rpy

-- Full Traceback ------------------------------------------------------------

   File "C:\Program Files\Digital - A Love Story\renpy\bootstrap.py", line 260, in bootstrap
   File "C:\Program Files\Digital - A Love Story\renpy\main.py", line 310, in main
   File "C:\Program Files\Digital - A Love Story\renpy\main.py", line 93, in run
   File "C:\Program Files\Digital - A Love Story\renpy\execution.py", line 236, in run
   File "C:\Program Files\Digital - A Love Story\renpy\script.py", line 466, in lookup
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-10: ordinal not in range(128)

While running game code:
   - script at line 187 of C:\Program Files\Digital - A Love Story/game/script.rpy

Ren'Py Version: Ren'Py 6.10.2e


Шрифт проверял - необходимые символы имеются. Не знаю, что не так и что ему не нравится.
>> No.35988 Ответ
>>35987
Строки сами юникодные? Должны быть вида u'fghfgh', либо в файле явно кодировка задана, хотя чёрт его знает, что там ренру ещё добавить может. А если питон третий, то тем более не понятно какие проблемы могут быть.
>> No.35990 Ответ
>>35988
Нет, не такие.

Но при правке простого текста всё идёт, как часы, без всяких проблем.
>> No.35991 Ответ
>>35864
Ничего.
>> No.35997 Ответ
>>35991
На питон хайлоад невозможен из-за его слоупочности?
>> No.36034 Ответ
>>35997
Он возможен даже на похэпэ, но готовые рецепты никто подробно описывает, потому что это всё делается на практике индивидуально для каждого конкретного проекта.
>> No.36044 Ответ
Файл: -.jpg
Jpg, 69.16 KB, 700×525 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
-.jpg
Имею на входе ['dict']['comment'] со всякими &#44, <br />, &quot; и так далее. Подскажите простой и красивый способ вырезать, желательно без replace, т.к. придется руками собирать их.
>> No.36045 Ответ
>>36044
Да, js там тоже присутствует.
>> No.36048 Ответ
>> No.36063 Ответ
Антуаны, поведуйте, а как вы учили тот же питон или другой ЯП? Именно с чего начинали и через сколько был результат? Т.е. написание своих программ.
>> No.36064 Ответ
>>36063
В школе паскаль показали. Когда понимаешь Суть, становится все равно на чем писать уже.
>> No.36070 Ответ
>>36063
В школе мы изучали Бейсик Вильнюс и рисовали блок-схемы, был еще какой-то учебник по информатике на байтолюбские и алгоритмические темы. В универе на первом курсе были паскаль и сишка. Имхо программирование на императивных ЯП дается сразу либо никогда. Склад ума должен быть нужный, ну и практиковаться надо, книжки там всякие умные читать.
>> No.36221 Ответ
Файл: 1372058538716.jpg
Jpg, 764.10 KB, 1600×1200 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
1372058538716.jpg
Доброчан, помоги!
http://pastebin.com/shxma2i1
Прокси сервер на twisted который не делает ничего кроме принятия и отправки сообщений. Некоторые сайты через него работают нормально, - никаких ошибок: nowere.net, konachan.com. Некоторые не грузятся полностью и в консоли появляются deffered error, но из-за чего - мне непонятно. Такое случается на iichan.hk и vk.com(при скролинге вниз не подгружаются картинки альбома, что очень важно. пишу грабер) Цель - добиться правильной работы на vk.com, сижу не первую неделю.
>> No.36236 Ответ
Доброй ночи, доброанон :3

Почему такой код

for i in range(len(dic['thread'])):
num = dic['thread'][i][0]['num']
com = dic['thread'][i][0]['comment']
cur.execute('INSERT INTO i (id, post) VALUES (?, ?), (num, com)')
con.commit()
возвращает такую ошибку
  2     num = dic['thread'][i][0]['num']
  3     com = dic['thread'][i][0]['comment']
----> 4 cur.execute('INSERT INTO i (id, post) VALUES (?, ?), (num, com)')
  5     con.commit()
  6 
OperationalError: no such column: num

?
Вроде же всё по мануалу, а сам врубится не могу :(
>> No.36237 Ответ
>>36236
А, разобрался. (num, com) надо за кавычку выносить.
>> No.36252 Ответ
Файл: 1372058596133.jpg
Jpg, 1477.02 KB, 1680×1050 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
1372058596133.jpg
>>36221
Бамп
>> No.36274 Ответ
Аноны, а можно на питончике распараллелить числодробилку по ядрам? Их у меня 4, хочется скорости. Но, насколько я знаю, CPython выполняется только на одном ядре.
>> No.36282 Ответ
>>36274
Тебе ничто не мешает запустить несколько независимых процессов, а они уже будут выполняться как угодно. Если совсем просто, то используй multiprocessing.Pool.map. Работает так же, как и обычный map, но в несколько процессов. Правда, у него есть куча ограничений на то, какие ему можно пихать функции (грубо говоря, никакого кода, определённого внутри классов). Поэтому если хочешь что-то позаковыристее простых вычислений над списком, делай свой класс-наследник multiprocessing.Thread.
>> No.36467 Ответ
Вопрос про regex:
Как в конструкцию вида [^123], записать 123 которые будут восприниматся как подряд идущие символы "1" "2" "3", т.е. как regex, а не просто набор символов.
>> No.36474 Ответ
>>36467
По хорошему никак, по плохому можно добиться похожего через negative look ahead/back
stackoverflow.com/questions/406230/regular-expression-to-match-string-not-containing-a-word
>> No.36635 Ответ
Файл: 1.py
Python, 2.19 KB, 80 строк - Нажмите на картинку, чтобы скачать файл
view edit
1.py
Привет, бидонщики.
Наверняка тут есть люди, которые писали парсеры доброчана, так что я пришёл посоветоваться.
Это моё детище, которое чекает новые посты и выводит сообщение при их появлении.

Не могли бы вы мне посоветовать, что можно улучшить или оптимизировать. Бидон не знаю, писал вслепую
>> No.36636 Ответ
>>36635
Каждые 30 секунд ты спамишь запросами на кучу тредов вместо того, чтоб просто проверять закладки. Отличная идея, чо.
>> No.36637 Ответ
>>36636
Объясни@обоснуй.
Для начала за закладки. Что это и как их пользовать с помощью API
>> No.36638 Ответ
>>36637
/api/user.json?threads. Единственная проблема, что сейчас в той же куче скрытые треды, но это обещали поправить.
>> No.36639 Ответ
>>36638
Ты предлагаешь мне где-то хранить кукисы и + каким образом мне добавлять треды в закладки через бидон?
>> No.36640 Ответ
>>36639
Добавлю, что добавил через бравзер, зашел, смотрю выхлоп, а там, например lastpostid == null, unread == 0, хотя я знаю, что уже насыпалось как минимум одно сообщение в треде. Может я не туда смотрю, но теперь не могу понять, как именно мне понимать, что появился новый пост.

"threads":
   [
   {
   "board_id": 1,
   "thread_id": 267218,
   "lastpostid": null,
   "last_viewed": "2014-01-13 13:55:40.301217",
   "level": "bookmarked",
   "unread": 0,
   "class": "UserThread",
   "last_hit": null
   },
   {
   "board_id": 24,
   "thread_id": 227951,
   "lastpostid": null,
   "last_viewed": "2014-01-13 13:58:50.336214",
   "level": "bookmarked",
   "unread": 0,
   "class": "UserThread",
   "last_hit": null
   }
   ]
>> No.36641 Ответ
>>36639
Я предлагаю пожалеть Доброчан и не устраивать ему регулярные стресс-тесты.
Хранить печеньки не сложнее хранения списка тредов.
> каким образом мне добавлять треды в закладки через бидон
Тем же, каким производятся все остальные взаимодействия с Доброчаном. /api/thread/b/123/sign.json
>> No.36642 Ответ
>>36641
Так, тогда вопрос, где мне почитать полную доку по API?
>>/help/api здесь нет ничего за sign например
>> No.36643 Ответ
Лол, я тебя таки обманул. Эта срань в закладках и правда не работает. Ну тогда мод тебе судья.
>> No.36644 Ответ
>>36642
Там много чего нет. Кури скрипт ханабиры.
>> No.36645 Ответ
>>36644
Но ведь наверняка закладки это где-то внутри системы и в api никак не выводится.
Какой тогда смысл что-то там искать в коде, если извне я всё равно не смогу получить эти данные?
Или предлагаешь парсить выхлоп самой борды? Это же неблагодарное дело. ничем не лучше моего подхода.
>> No.36646 Ответ
>>36645
Я уже ничего не предлагаю. Мне казалось апи закладок нормально работает, а оно вот оно как.
>> No.36820 Ответ
http://programarcadegames.com/index.php?lang=en
Что по поводу этого скажете? Стоит пробовать, если я новичок?
>> No.36937 Ответ
Анон, а как на питоне максимально изящно определить, соответствуют ли 2 строки одному и тому же регулярному выражению?

Например, если нужно сдетектировать одинаковые последовательности гласных-согласных.

Думаю упрощать обе строки и просто сравнивать, но кажется грубоватым решением.
>> No.36939 Ответ
>>36937
> соответствуют ли 2 строки одному и тому же регулярному выражению
Применить выражение на каждую строку и сравнить результаты.
все_соответствуют = all(выражение(строка) for строка in строки)
> сдетектировать одинаковые последовательности гласных-согласных
Не совсем понятно что именно ты хочешь "сдетектировать" (наличие,количество,порядок,индекс,..)
>> No.36942 Ответ
>>36939
> все_соответствуют = all(выражение(строка) for строка in строки)
не совсем понял.
> Не совсем понятно что именно ты хочешь "сдетектировать" (наличие,количество,порядок,индекс,..)
ну вот например, критерий "эквивалемтности" - это порядок гласных/согласных.
тогда строки "ололо" (ГСГСГ) и "ороро" (ГСГСГ) эквивалентны, а "ололо" и "битард" (СГСГСС) - нет.

Или критерий - чредование гласных/согласных с игнорированием повторов, например строка (СГГГС) эквивалентна строке (СГС).

пытаюсь найти способ решить это с помощью регулярных выражений, за один проход независимо от кол-ва критериев эквивалентности, но не знаю возможно ли.
>> No.36944 Ответ
>>36942
Из этого получается хорошая сеть переходов состояний (сеть Маркова вроде), но не знаю как это заюзать.
>> No.36948 Ответ
>>36942
Я бы сделал как то так:
https://ideone.com/pnWF2g
>> No.36956 Ответ
Файл: 418-ScMQEfy.jpg
Jpg, 623.99 KB, 1997×1248
edit Find source with google Find source with iqdb
418-ScMQEfy.jpg
Файл: 316-yX4bBt7.jpg
Jpg, 131.77 KB, 1920×1080
edit Find source with google Find source with iqdb
316-yX4bBt7.jpg
Файл: 443-CPGLPrB.jpg
Jpg, 330.99 KB, 1366×768
edit Find source with google Find source with iqdb
443-CPGLPrB.jpg
Файл: 227-sFRvocO.jpg
Jpg, 116.34 KB, 1024×576
edit Find source with google Find source with iqdb
227-sFRvocO.jpg
Файл: 416-DSY1lSo.jpg
Jpg, 468.62 KB, 1920×1080
edit Find source with google Find source with iqdb
416-DSY1lSo.jpg

>>36948
> isVowel = set('AЕЁИОУЫЭЮЯаеёиоуыэюя').contains
> equivalent("ололо", "ороро", keyfunc=partial(map, isVowel))
> for c, _ in groupby(map(isVowel, cs)):
немножко просветлился.
тысячи добра тебе.
>> No.36980 Ответ
Где можно почитать про адекватные требования например к мидлу? Зашел на хх, там ересь какая-то. В заголовке написано вакансия для питонщика, а внутри css, html5, dhtml, js, jquery и так далее. Или это нормально считается?
>> No.36981 Ответ
Файл: 285a53d82edb68354d3db006b00eb3c45fc584ea.jpg
Jpg, 304.94 KB, 630×800
Ваши настройки цензуры запрещают этот файл.
r-18
>>36980
На самом деле тебя подсадят там на джангу какую-нибудь и будешь сайты клепать как обычная вебмакака.


Энивей, надоело быдлокодить а наверняка именно это у меня выходит сейчас, несмотря на кошерную документацию и ебучий пичарм, истерящий на каждый лишний пробел, хочу почитать умные книги и писать хорошо. Про Лутца говорят, что воды много. От Dive into Python я, если честно, охуел, потому что ну совсем для нубов же. И не устарела ли она за 10 лет-то?
>> No.36982 Ответ
>>36981

Какой ужас ты сейчас написал. А кроме джанги питон уже всё?
>> No.36983 Ответ
>>36982
Ни разу не видел вакансии с питоном без требования других языков или той же джанги. Хотя я особо и не искал.
>> No.36984 Ответ
>>36983
Грусть-тоска.
>> No.36986 Ответ
>>36983
А для чего может быть использован скриптовый язык типа питона кроме веба и мелких скриптов для каких-то целей?
>> No.36987 Ответ
>>36986
Для любого бэкэнд кода.
У того же гугла большая часть писалась на питоне какое-то время, сейчас вроде на какой-то свой велосипед переходят/перешли.
>> No.36988 Ответ
>>36987
В смысле, бек-энд кода? Ты же опять про веб?
>> No.36989 Ответ
>>36988
В том числе, но не обязательно. Любые дела, которые крутятся на никсовом сервере.

Вообще, питон для веба это скорее виток хипсторской моды. Сначала был питон, потом рельсы, сейчас уже переползают на всякие ноде.жс, лол.
>> No.36990 Ответ
>>36986
Да хоть для чего! В нормальных странах, например, data science переходит/перешла на питон, опенсорс и всё такое. Numpy, nltk, pymorphy, тысячи других в pypi. Но в украшке/рашке только питон ассоциируется только со сраной джангой. Даже сраный WoT на питоне, но туда не имеет смысла отправлять резюме.
>> No.36991 Ответ
>>36989
> Сначала был питон, потом рельсы, сейчас уже переползают на всякие ноде.жс, лол.
Это те, кто впереди планеты всей. Массовые сайтошлёпы же только начинают переходить на джанго.
>> No.36992 Ответ
Анончик, дай мне какое-нибудь задание, только небольшое, так, для практики.
>> No.36997 Ответ
>>36992
Есть сайт для перевода субтитров notabenoid.com, где есть мудаки, которые запрещают скачивать перевод, но зато смотреть его можно.
Например, http://notabenoid.com/book/39952 или http://notabenoid.com/book/43860
Напиши скрипт, который бы дергал оттуда перевод и красивенько собирал.
>> No.36998 Ответ
>>36997
> статус готово
> овер9000 вариантов перевода каждого абзаца со срачами
Ну и нахуй такой перевод?
>> No.37018 Ответ
>>36997
Объясни конкретнее что тебе нужно. Вот прошел я по ссылке, зашел например сюда http://notabenoid.com/book/39952/148744
Тебе надо стянуть http://notabenoid.com/book/%book%/%хуйпоймичто% все переводы? Сформулируй внятнее, я с радостью постараюсь тебе помочь.





А так же очень интересны идеи по пиздингу только добавленных файлов на рутрекерах, которые еще не проверили, но и не успели закрыть. Или там что-то поменялось?
>> No.37019 Ответ
>>37018
На рутрекере же есть фид.
>> No.37030 Ответ
Файл: 1382256615176.jpg
Jpg, 70.56 KB, 395×589 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
1382256615176.jpg
QTCPSocket не дает считать строку. Выдает ошибку "RuntimeError: no access to protected functions or signals for objects not created from Python"
Серверный сокет на PyQt4, принимает соединение, state() возвращает 3(значит подключен), можно узнать хост, порт подключеного к нему сокета, прочитать строку нельзя.
self.sock = QTcpServer()
self.sock.listen(QHostAddress('127.0.0.1'), 8000)
self.sock.newConnection.connect(ф-ция печатает результат)
Клиент простой сокет python, отрабатывает без ошибок.
s = socket.socket()
s.connect(('127.0.0.1', 8000))
s.sendall('Hello Qt!')
s.close()
>> No.37046 Ответ
>>37018
Стянуть текст из колонки "Перевод на русский" и собрать перевод. Так как в некоторых кусках много вариантов, то, видимо, следует выбирать самый заплюсованный.
Лучше начинать сразу с перевода сабов, а не книги, потому что там еще с временем слинковать надо.
>> No.37048 Ответ
>>37046
Не вопрос. Накидай тз ага, без него макака не может и краткий ман как их готовить.
>> No.37049 Ответ
Файл: 1383827587903.jpg
Jpg, 47.82 KB, 402×604 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
1383827587903.jpg
>>37030
Всё, разобрался. Нужно было вытаскивать строку по сигналу QIODevice.readyRead().
>> No.37051 Ответ
>>37030
Читай байты, а не строку.
>> No.37076 Ответ
Поднимаю вопрос о литературе по второму питону. DYP прочитал пролистал, хайпа не понял - это же просто разжеванные доки пополам с понтами.
>> No.37098 Ответ
>>37076
Попроще хз что предложить, попробуй справочник Бизли и погугли хаб про неизвестный питон. Алсо, зачем второй?
>> No.37099 Ответ
>>36989
> Вообще, питон для веба это скорее виток хипсторской моды. Сначала был питон, потом рельсы, сейчас уже переползают на всякие ноде.жс, лол.
Да ну вас нахрен со своей хипстерской модой. похапе - адовое недоразумение. Непременно надо его куда-нибудь деть и на что-нибудь заменить. Почему кто-то должен мучиться с ним, если уже все поняли, что это за говно?
>> No.37106 Ответ
Файл: -.png
Png, 36.73 KB, 909×352 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
-.png
>> No.37108 Ответ
>>37106
PHP не может быть лучшим выбором решительно ни для чего.
>> No.37113 Ответ
>>37108

Два чая этому господину. PHP - решето.
>> No.37127 Ответ
>>37098
Спасибо, посмотрю. Второй, потому что на третий ни сдл, ни киви не перенесли, да и для утилитарных задач хватает второго за глаза.
>> No.37130 Ответ
Нужен новый тред.
>> No.37133 Ответ
>>37130
Нужен ещё более графонистый питон. Может даже в 3д, ЕВПОЧЯ.
>> No.37135 Ответ
>>37133
> pyformex - program to create 3D geometry from Python scripts.
М?
>> No.37136 Ответ
>>37135
А так же
> Panda3D - 3D Engine
Алсо,
> pip search 3D
>> No.37386 Ответ
Файл: getPics.py
Python, 2.68 KB, 87 строк - Нажмите на картинку, чтобы скачать файл
view edit
getPics.py
Ну что, бидонщики. Очередной охуительный скрипт от меня.
На этот раз мы скачиваем все все пикчи на всех всех досках :3
>> No.37548 Ответ
Файл: wallpaper-71767.jpg
Jpg, 205.19 KB, 1024×768 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
wallpaper-71767.jpg
Почему когда вызываешь какой нибудь класс без "()" в конце показывает участок памяти? Как посмотреть аттрибуты класса? dict? Dir - это просмотр методов класса? Что делать если документация говно, а читать исходники - из глаз течет кровь, from world import Everything и ты после импорта еще 20 библиотек теряешь сознание и аппетит.
В общем  вопрос как питон устроен на низком уровне и если я достигну сатори и пойму как он работает на низком уровне, я буду лучше понимать как работают классы, super, @ и другие адские вафли? Си немножко знаю, но мало. Хотет что бы дали ссылки на такие материалы - "класс выделяет участок в памяти, создаеться dict, а каждый класс Python имеет свой dict(что такое dict на примере памяти?)" 
   Желаю материал после которого я буду точно знать что такое класс и обьект класса.
>> No.38353 Ответ
Файл: 1393010199747.jpg
Jpg, 36.26 KB, 391×366 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
1393010199747.jpg
Всем доброй весны. Проблема вот в чем. Есть django-папка,в ней лежит папочка со статическими файлами и папочка с настройками джанги. В папке с настройками джанго хочу сделать универсальный поиск папки со статикой что бы можно было пользовать этот репозитарий на другом компе. Если использовать команду "os.getcwd()", получаешь текущую директорию - /home/minik/django/setting_django, а мне нужно директорию выше - /home/minik/django. Как это можно сделать? Или не парить себе мозги и перенисти папку со статикой?
>> No.38489 Ответ
>>38353
> а мне нужно директорию выше
curr_path = os.getcwd() parent = os.path.join(curr_path, '..')
> хочу сделать универсальный поиск папки
os.walk(...)
>> No.38686 Ответ
Файл: 1315946128187.jpg
Jpg, 161.04 KB, 1024×768 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
1315946128187.jpg
>>37386
> онднопоточная загрузка
Ты серьезно?
>> No.38721 Ответ
Как создать символьную ссылку? Пробовал subprocess, os.symlink - получаю нерабочую ссылку. Имя файла с пробелами. Пробовал заменять через имя.replace(' ', '\\ ') - не работает.
>> No.38806 Ответ
Файл: tests.py
Python, 0.51 KB, 21 строк - Нажмите на картинку, чтобы скачать файл
view edit
tests.py
Анон, никак не могу написать тесты для Flask + MongoDB. Код в аттаче, выдаёт 404 Not Found. На тебя вся надежда.


Пароль:

[ /b/ /u/ /rf/ /dt/ /vg/ /r/ /cr/ /lor/ /mu/ /oe/ /s/ /w/ /hr/ ] [ /a/ /ma/ /sw/ /hau/ /azu/ ] [ /tv/ /cp/ /gf/ /bo/ /di/ /vn/ /ve/ /wh/ /fur/ /to/ /bg/ /wn/ /slow/ /mad/ ] [ /d/ /news/ ] [ Главная | Настройки | Закладки | Плеер ]