gentoo.ru
python
python@conference.gentoo.ru
Пятница, 9 ноября 2012< ^ >
maksbotan установил(а) тему: ЯП 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." || Создан список рассылки python@lists.gentoo.org
Конфигурация комнаты
Участники комнаты

GMT+4
[00:17:30] maksbotan вышел(а) из комнаты
[08:38:03] lk4d4 вошёл(а) в комнату
[10:03:53] <krigstask> [*N]  >> dev-python/3to2 ((~)1.0): Refactors valid 3.x syntax into valid 2.x syntax, if a syntactical conversion is possible
Хы
[10:06:24] <lk4d4> рульная рулька
[10:06:38] <krigstask> Почему это?
[10:07:01] <lk4d4> можно портировать на 3, а потом на второй обратно, клево же
[10:07:15] <lk4d4> вам ирландцам не понять нашей тонкой организации души
[10:07:17] <krigstask> 2to3 и 3to2?
[10:07:35] <lk4d4> а то
[10:16:26] <krigstask> Русские варвары
[16:07:01] krigstask вышел(а) из комнаты: Replaced by new connection
[16:07:11] krigstask вошёл(а) в комнату
[16:55:30] krigstask вышел(а) из комнаты: Replaced by new connection
[16:55:40] krigstask вошёл(а) в комнату
[18:13:36] lk4d4 вышел(а) из комнаты
[19:59:50] maksbotan вошёл(а) в комнату
[21:16:12] <krigstask> Написал читалку файла построчно задом наперёд: http://bpaste.net/show/56912
[21:23:05] krigstask вышел(а) из комнаты
[22:43:41] lk4d4 вошёл(а) в комнату
[22:51:26] <lk4d4> krigstask: батя
[22:51:59] <krigstask> Нормально работает, исправно, даже на utf-8
[22:54:32] <krigstask> Вообще забавно такой (относительно) низкоуровневый код писать
[22:57:24] <maksbotan> а я все ллвм мучаю :)
[22:57:39] <maksbotan> BUF_SIZE if pos >= BUF_SIZE else pos
[22:58:10] <maksbotan> а, туплю
[22:58:33] <krigstask> У меня было смутное чувство, что это можно лучше записать, но второпях не придумал
[22:58:50] <maksbotan> я подумал что тут можно % как-то обойтись
[22:58:52] <maksbotan> но вроде нет
[22:59:07] <krigstask> Чего-чего?
[22:59:19] <maksbotan> остатком
[22:59:45] <krigstask> Ну ты затейник
[23:00:35] <maksbotan> да, я затейник ;)
[23:00:38] <maksbotan> maks@maksbotan-netbook ~/Projects/SlavaStupidLanguage $ python compiler.py test.sst
maks@maksbotan-netbook ~/Projects/SlavaStupidLanguage $ llvm-ld test.bc -native -o test
maks@maksbotan-netbook ~/Projects/SlavaStupidLanguage $ ./test
100500 465
15
[23:00:42] <maksbotan> подсчет НОД
[23:12:36] maksbotan вышел(а) из комнаты
[23:12:50] <krigstask> lk4d4: кого он там считает?
[23:27:16] <lk4d4> никого хорошего наверняка
[23:32:39] Deda_Zych вошёл(а) в комнату
[23:34:14] <Deda_Zych> krigstask: ничего не говорил.
[23:34:18] <Deda_Zych> про функторы
[23:34:59] <krigstask> Ну так и чего ты мне доказываешь, что это они? Я и сам знаю
[23:35:22] <Deda_Zych> я бы не сказал, что это тупо функторы
[23:35:28] <Deda_Zych> есть и такая форма
[23:35:58] <Deda_Zych> @decomaker(argA, argB, ...)
def func(arg1, arg2, ...):
    pass
[23:36:16] <Deda_Zych> которая тупо передаёт список аргументов декорируемоему методу
[23:36:26] <Deda_Zych> ладно, это всё теория
[23:36:42] <Deda_Zych> krigstask: ты же нюхал фреймворк Bottle?
[23:36:42] <krigstask> Не-не-не, это та же форма, просто декоратор один и с аргументами
[23:36:51] <krigstask> Не-а, я только flask
[23:37:06] <Deda_Zych> Ну даже если и так, вопрос не о нём.
[23:37:40] <Deda_Zych> http://gotofritz.net/blog/weekly-challenge/restful-python-api-bottle/
[23:37:54] <Deda_Zych> @route('/')
def hello():
    return "Hello World!"
[23:38:03] <Deda_Zych> КАК это работает?!
[23:38:06] <krigstask> Ага, во flask так же сделано
[23:38:48] <Deda_Zych> куда проваливается аргумент-слэш?
[23:38:54] <Deda_Zych> как вызывается hello?
[23:38:58] <krigstask> Если тебе интересна реализация route(), то придётся послать тебя в сырцы
[23:39:07] <krigstask> А идеологию могу попробовать пояснить
[23:39:08] <Deda_Zych> вот это для меня прямо сейчас магия
[23:39:14] <Deda_Zych> да, лучше идеологию
[23:39:24] <Deda_Zych> реализацию я и сам раскурить попробую
[23:42:00] <lk4d4> он добавляет эту функу в синглтон app
[23:42:11] <lk4d4> у меня свой такой декоратор есть на работе
[23:42:21] <Deda_Zych> ты плохо объяснил
[23:42:31] <Deda_Zych> я вообще ничего не понял сейчас
[23:42:41] <krigstask> Это равнозначно
hello = route('/')(hello)
[23:42:42] <krigstask> Так?
[23:42:50] <lk4d4> неа
[23:42:58] <lk4d4> ща попробую пример накидать
[23:43:08] <krigstask> lk4d4:  э-э-э?
[23:43:20] <Deda_Zych> кстати, да
[23:43:33] <Deda_Zych> Криг по-моему, правильно сказал
[23:44:16] <lk4d4> вообще да, правильно
[23:44:19] <krigstask> Так вот, route('/') выполняется сразу при запуске приложения
[23:44:25] <lk4d4> я просто про сам route подумал
[23:44:31] <Deda_Zych> выполняется route
[23:44:42] <Deda_Zych> который выполняет внутри хитро как-то там
[23:44:50] <krigstask> И регистрирует соответствие '/' -> hello
[23:44:54] <Deda_Zych> метод hello, который ему передали
[23:45:04] <krigstask> Мол, такой-то URL обрабатывается hello'м
[23:45:18] <Deda_Zych> блииин, ну не надо такой абстракции
[23:45:32] <krigstask> Ну ты просил идеологии
[23:45:36] <Deda_Zych> мне важна именно конкретика с точки зрения питона
[23:45:55] <lk4d4> ну тогда почитай про wsgi pep
[23:46:06] <krigstask> Да он-то тут при чём?
[23:46:10] <lk4d4> там вызывается метод и в нем рулится какому пути какой хендлер
[23:46:12] <Deda_Zych> lk4d4: ты опять мимо посоветовал
[23:46:30] <lk4d4> ну ладно)
[23:46:33] <lk4d4> я просто про роут
[23:46:44] <Deda_Zych> мне именно про тонкости работы декораторов в питоне
[23:46:55] <Deda_Zych> я примерно уяснил, как оно работает в C++
[23:47:09] <Deda_Zych> с точки зрения паттерна проектирования
[23:47:25] <Deda_Zych> в питоне - примерно то же самое, но несколько хитрее
[23:47:57] <Deda_Zych> Криг мне сейчас туман развеял почти окончательно
[23:48:08] <Deda_Zych> ещё один пример, который меня смутил
[23:48:41] <krigstask> Deda_Zych: https://bitbucket.org/skrattaren/scripties/src/9e945fe883e59b9e6f07aac29ddea37b4ed40650/inotify_watcher.py?at=default
[23:48:47] <krigstask> Может, поможет
[23:48:51] <Deda_Zych> @route('/recipes/<name>', method='PUT')
def recipe_save( name="Mystery Recipe" ):
    return "SAVE RECIPE " + name
[23:48:55] <krigstask> Как пример попроще
[23:49:03] <Deda_Zych> вот от этого я кирпичей высрал
[23:49:09] <krigstask> Почему?
[23:49:48] <Deda_Zych> насчёт первого аргумента понятно - оно проваливается в кишки Bottle и как-то там вызывает recipe_save
[23:50:06] <Deda_Zych> а второй аргумент у декоратора как работает?
[23:50:17] <krigstask> Точно так же, там карринга нету же
[23:50:49] <Deda_Zych> method='PUT' - вот это что?
[23:50:49] <krigstask> Он вешает на такой-то URL и метод PUT этот обработчик
[23:51:01] <Deda_Zych> булево выражение какое-то, али как?
[23:51:04] <krigstask> Ты знаешь, что такое методы HTTP?
[23:51:17] <krigstask> GET, POST и т.п.?
[23:51:21] <krigstask> И вот PUT
[23:51:23] <Deda_Zych> я знаю, что такое RESTful API, да
[23:51:58] <krigstask> REST API тут ни при чём, это спецификации HTTP
[23:52:27] <Deda_Zych> я в курсе, да
[23:52:37] <krigstask> Тогда я не понимаю, что тебя смущает
[23:52:41] <Deda_Zych> как про HTTP, так и про REST
[23:52:54] <Deda_Zych> меня смущает, с позиции упоротого сишника
[23:53:02] <Deda_Zych> method='PUT'
[23:53:03] <krigstask> Количество аргументов в декораторе неважно, если они есть
[23:53:10] <Deda_Zych> это передано как аргумент
[23:53:14] <krigstask> Ну и?
[23:53:19] <Deda_Zych> как оно сработает внутри?
[23:53:40] <Deda_Zych> это эквивалентно сишному "method == "PUT"?
[23:53:42] <Deda_Zych> или как?
[23:54:10] <krigstask> lk4d4: ты его понимаешь?
[23:54:28] <krigstask> Это эквивалентно вызову функции с двумя аргументами
[23:54:30] <Deda_Zych> блин, ну как мне тебе ещё объяснить
[23:54:35] <Deda_Zych> :E
[23:54:42] <krigstask> В C оно такое же, как в Питоне, насколько я знаю
[23:54:54] <lk4d4> деда зыч пытается паттерн матчинг наверное придумать
[23:55:12] <lk4d4> но вообще это аргументы по умолчанию
[23:55:21] <Deda_Zych> деда зыч пытается как-то согласовать это всё со своим мировоззрением
[23:55:44] <krigstask> lk4d4: ты дуб, это же не определение функции, это kwargs
[23:55:48] <lk4d4> хаха
[23:55:48] <krigstask> А-а-а, я понял
[23:55:54] <lk4d4> ну да, я не читал
[23:56:03] <krigstask> Deda_Zych: это именованные аргументы
[23:56:39] <Deda_Zych> вот смотри, я попытаюсь рассказать, что я имел в виду
[23:56:43] <krigstask> Да я понял
[23:56:53] <krigstask> Сейчас поясню
[23:57:17] <Deda_Zych> method == "PUT" у тебя вычисляется в true, если method равно "PUT"
[23:57:26] <krigstask> Нет, совсем нет
[23:57:31] <lk4d4> хыхы
[23:57:31] <krigstask> Если ты хочешь толком разобраться, всё равно придётся читать про аргументы функции в питоне, но
[23:57:34] <lk4d4> ну вообще почему же нет
[23:57:36] <Deda_Zych> это true передаётся, как аргумент, в функцию, по значению
[23:57:44] <lk4d4> а вот это уже нет
[23:57:45] <Deda_Zych> это я и хотел спросить
[23:57:48] <krigstask> Я понял
[23:58:08] <lk4d4> нет, считай, что просто 'PUT' туда передаешь
[23:58:13] <Deda_Zych> читать, всяко, придётся
[23:58:26] <krigstask> Но здесь просто указывается конкретно, какой из многих аргументов функции имеет значение "PUT"
[23:59:32] <krigstask> Потому что у route возможных, но не обязательных, аргументов много
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!