gentoo.ru
python
python@conference.gentoo.ru
Суббота, 3 сентября 2011< ^ >
krigstask установил(а) тему: ЯП Python || https://gist.github.com/289467 || Логи: http://tinyurl.com/gentoo-py-logs || "Python's a drop-in replacement for BASIC in the sense that Optimus Prime is a drop-in replacement for a truck." || Вышел IPython 0.11!
Конфигурация комнаты
Участники комнаты

GMT+4
[01:17:15] LK4D4 вышел(а) из комнаты
[05:43:22] sky вошёл(а) в комнату
[05:44:08] sky вышел(а) из комнаты
[11:31:57] LK4D4 вошёл(а) в комнату
[14:57:54] maksbotan вошёл(а) в комнату
[17:28:25] pimiento вошёл(а) в комнату
[17:29:20] <pimiento> Доброго всем всего. Подскажите информацию по decimal окромя docs.python.org/library/decimal. Никак не могу въехать как же с ними работать с этими decimal
[17:49:20] <maksbotan> а что там работать
[17:49:24] <maksbotan> что у тебя не выходит?
[18:08:30] <pimiento> Вот у меня сейчас getcontext().prec=2 - это значит
что после точки два знака в результате операций? Можно ли тогда делать
Decimal('52.145').quantize(Decimal('0.01'), rounding=ROUND_HALF_DOWN)?
[18:10:20] <maksbotan> хаха
[18:10:25] <maksbotan> а хз :)
[18:10:28] <maksbotan> жаль крига нет
[18:11:17] <pimiento> Ещё вопрос по словарям: как сделать штуку типа  dict[str_from_list] += [Decimal('10'), Decimal('12')] - смысл в том, чтобы повторяющиеся строки сложить
[18:12:03] <pimiento> в перле для парсинга /proc/net/tcp я это делал легко, а здесь так нельзя: traffic_table[address[0]] += [
KeyError: '1.2.3.4'
[18:12:37] <maksbotan> что-то я ничего не понял
[18:14:00] <pimiento> ну вот есть список вида [['1.2.3.4', '10', '12'], ['1.2.3.4', '24', '5']] - как мне из него сделать словарь, чтобы ключём было первое поле, а остальные складывались?
[18:14:39] <pimiento> результат должен быть {'1.2.3.4': ['34', '17']}
[18:14:58] <maksbotan> мм
[18:15:11] <maksbotan> дай подумать
[18:15:17] <pimiento> перлу пофиг - он складывает и не возмущается :)
[18:24:05] <maksbotan> http://paste.pocoo.org/show/469520/
[18:25:19] <maksbotan> pimiento: как-то так ^^
[18:27:15] <maksbotan> lk4d4: а ты что скажешь? ^^
[18:41:30] <pimiento> а можешь объяснить логику работы d.update({e[0]:map(sum, zip(d.get(e[0], [0, 0]), e[1:]))})?
[18:45:08] <maksbotan> без проблем :)
[18:45:35] <pimiento> он каждый раз выдёргивает уже существующий ключ или создаёт пустой, потом создаёт списки из существующего/нового значения и e[1:], затем отображает на них функцию sum
[18:45:51] <maksbotan> ну типа того
[18:46:06] <pimiento> это я понял... какое-то не очень приятное решение :)
[18:47:06] <maksbotan> ну первое что в голову пришло
[18:51:34] <pimiento> ну он же умеет создавать ключи когда делаешь dict[rand_key] = [one, two] - что мешает ему поддерживать в таком случае +=
[18:53:41] <maksbotan> ну сам подумай
[18:54:13] <maksbotan> dict[rand_key] += [one, two] эквивалентно dict[rand_key] = dict[rand_key] + [one, two]
[18:54:17] <maksbotan> не получится
[18:58:18] <LK4D4> может функцию просто написать, складывающую списки?
[18:59:23] <maksbotan> а чем это будет лучше того что есть?
[19:00:02] <LK4D4> Explicit is better than implicit.
[19:00:06] <LK4D4> а больше ничем
[19:00:35] <maksbotan> экий ты
[19:04:43] <pimiento> if not rand_key in dict:
    dict[rand_key] = [a, b]
else:
    with dict[rand_key] as element:
        element = [(element[0] + new[1]), (element[1] + new[2])]
[19:04:59] <pimiento> А так чего будет? стоит проверять?
[19:05:22] <LK4D4> а что за new?
[19:05:38] <maksbotan> да это то же самое, только строк много
[19:05:49] maksbotan любит однострочники :)
[19:05:59] <maksbotan> lk4d4: наверно то что надо добавить
[19:06:06] <maksbotan> видимо rand_key это new[0]
[19:06:16] <pimiento> почему тогда питон, а не перл? :)
[19:06:29] <pimiento> да rand_key = new[0]
[19:06:39] <maksbotan> перл для задротов :)
[19:06:55] pimiento задрот - прям польстили
[19:55:43] <pimiento> А подскажите ещё по экзепшенам: как вот мне определить что IOError вывалился потому что файл с недоступными правами, а не потому что файл не существует?
[19:56:19] <pimiento> И как, например, определить какие мне надо вылавливать эксепшены для перевода и округления Decimal+
[19:56:21] <pimiento> ?
[19:58:46] <maksbotan> ну ты смотри с какими он падает :)
[19:58:56] <maksbotan> а у IOError есть что-то типа message
[19:59:15] <pimiento> и грепать его message в поисках правды?
[19:59:34] <pimiento> вот здесь, возможно, расскажут: http://www.python.org/dev/peps/pep-3151/  - почитамс
[19:59:35] <maksbotan> http://docs.python.org/library/exceptions.html
[20:01:20] <pimiento> maksbotan: читал, не понял как выделить экзепшен насчёт прав или насчёт существования файла
[20:01:33] <maksbotan> ну там у них .errno есть ещё вроде
[20:03:40] <pimiento> http://www.python.org/dev/peps/pep-3151/#id24 - вот это не оно?
[20:05:41] <pimiento> или это типа они обсуждают возможно включить эти экзепшены?
[20:05:51] jurdan вошёл(а) в комнату
[20:09:05] <pimiento> в sys.exc_info()[1] Пишут permission denied или No such file or directory
[20:17:12] jurdan вышел(а) из комнаты: offline
[20:23:13] <pimiento> А как узнать какие эксепшены может выдать Decimal(var), var - строка
[20:26:57] <pimiento> Похоже, только InvalidOperation
[20:31:12] <maksbotan> код почитать :)
[20:31:17] <maksbotan> вроде нигде не пишут
[20:31:38] <pimiento> http://www.python.org/dev/peps/pep-0327/#id36 - здесь пишут
[22:27:15] <pimiento> а как внутри программы узнать имя с которым её запустили? sys.args[0]+
[22:27:29] <maksbotan> sys.argv[0]
[22:46:04] <pimiento> http://paste.pocoo.org/raw/469638/ - если какая-нибудь запись будет ошибочной, то надо исключить все записи с таким же адресом из списка или из конечного словаря
[22:46:10] <pimiento> но как это сделать?
[22:47:37] <pimiento> Лучше не посчитать все запси адреса, у которого есть ошибочные записи, чем посчитать ему неправильно, но и вообще не считать все записи не стоит
[22:51:07] <LK4D4> я даже прочитать не могу, что ты написал
[22:51:49] <pimiento> Настолько ужасно?
[22:52:10] <LK4D4> нет, я твое сообщение не могу понять
[22:53:35] <LK4D4> # Не могу придумать как при помощи try проверить случай
# наличия строки вида ":12:34" - line[0] в таком случае ''
[22:53:40] <LK4D4> ты об этом?
[22:55:02] <pimiento> Ну почти. Если в строке будет неправильная запись (например, пустая цена) то нужно все записи этого адреса аннулировать
[22:56:13] <LK4D4> ну проверяй строку на соответствие регэкспу
[22:56:22] <LK4D4> может там вообще борода будет в строке
[22:57:44] <pimiento> ладно, это тогда завтра доделаю, а то я не знаю как регулярки в питоне делать :) но меня волнует как удалять потом все записи с этим адресом
[22:58:29] <LK4D4> а в чем проблема-то?
[22:58:36] <LK4D4> ааа
[22:58:41] <LK4D4> еще до создания словаря
[23:00:17] <LK4D4> ну сделаешь функцию поиска подонков c неправильными записями, запишешь их в set
[23:00:43] <LK4D4> а в set функция in за O(1) вроде бы
[23:01:26] <pimiento> А как в set Правильнее писать? создать лист и потом его в сет или добавлять найденное сразу в сет?
[23:01:46] <LK4D4> ну думаю сразу
[23:01:59] <LK4D4> просто не будет одинаковых
[23:02:07] <pimiento> а как к сету добавлять? он же иммутабле
[23:02:54] <pimiento> myset = myset & newvalue - так?
[23:03:23] <LK4D4> можно апдейтом наверное
[23:03:39] <pimiento> что-то я не видел у него такого метода
[23:03:46] <LK4D4> а он есть
[23:04:07] <pimiento> точно есть
[23:04:10] <LK4D4> сейчас может на stack overflow что-нибудь глянем
[23:04:41] <pimiento> http://docs.python.org/library/stdtypes.html#set.update
[23:06:23] <pimiento> Ладно, завтра допилю. Спасибо всем, всем пока
[23:06:48] <LK4D4> давай
[23:07:08] pimiento вышел(а) из комнаты
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!