- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
#Было
def extract_brand(x):
x = x[0].lower()
for brand in brands:
if x.count(brand):
return brand
il.brand_out = extract_brand
#Стало после кодревью
il.brand_in = lambda x: [brand for brand in brands if brand.lower() in x[0].lower()]
Lure Of Chaos 22.06.2014 13:27 # +2
bormand 22.06.2014 14:06 # +4
Жопа в другом - теперь lower считают на каждой итерации. Мой внутренний байтоёб негодует.
kyzi007 22.06.2014 14:25 # 0
someone 23.06.2014 06:30 # 0
bormand 22.06.2014 14:05 # +5
Код, кстати, не эквивалентный - оригинал возвращает первый найденный бренд, а вторая версия - все найденные.
kyzi007 22.06.2014 14:23 # 0
Но в моем случае оно дальше искать не будет и вообще лишних телодвижений в разы меньше. Но это не важно, я тупо не могу прочитать результат.
bormand 22.06.2014 15:15 # +1
[brand for brand in brands if brand.lower() in x[0].lower()]
Вернуть brand для каждого brand из brands такого, что brand.lower() содержится в x[0].lower().
orion 23.06.2014 16:14 # +1
bormand 23.06.2014 16:40 # +1
Как-то так?
orion 23.06.2014 16:48 # +1
PS. вот таким макаром в проекте создается автодополнение значений из базы данных.
bormand 23.06.2014 16:59 # 0
Оно не слишком медленное?
wvxvw 23.06.2014 17:07 # 0
bormand 23.06.2014 17:11 # 0
Но этот код никакие отложенные запросы не спасут, т.к. objects() + for явно пробегут по всем записям в таблице, а obj[prop] с неизвестным на время исполнения запроса prop заставит ОРМ выбрать все подряд поля...
При этом тот же LINQ, емнип, превратил бы этот запрос в че-то типа 'select distinct prop from table' в цикле по (prop, table). И база смогла бы воспользоваться index scan'ом вместо full table scan'а и т.п. Ну и трафик между СУБД и прогой на порядки бы упал.
wvxvw 23.06.2014 17:16 # 0
Vince 23.06.2014 19:09 # 0
var customer_name = Customer->findById(id);
Вопрос в том, что ORM тоже бывают не идеальны и запилить прямой запрос окажется в разы дешевле чем "сделать красиво", но тогда твой код окажется здесь.
bormand 23.06.2014 19:11 # 0
Ну и для тех, кто заебался писать where foo like 'bar%' and baz = 42, когда эти условия убираются/добавляются динамически... Вот тут орм реально выруливает за счет композиции условий. Ну и insert/update конкретной записи намного проще делать. В общем большую часть рутины для формошлепства ORM запросто снимает.
wvxvw 23.06.2014 19:28 # +1
Vince 23.06.2014 19:37 # 0
Так что ОРМ очень даже при чем. Особенно если ее писали люди с ынтерпрайзом головного мозга.
Vasiliy 23.06.2014 19:38 # −1
orion 23.06.2014 17:09 # 0
bormand 23.06.2014 17:15 # 0
А хрен знает, я на нем тоже не писал.
Ну а в теории монга должна же выполнить select distinct prop from table (или как там это пишется на ее языке) быстрее, чем прокачать всю таблицу да выпилить дубликаты на стороне питона?
orion 23.06.2014 17:34 # +1
kyzi007 22.06.2014 14:30 # +2
Почти стихи
myaut 22.06.2014 14:34 # 0
orion 23.06.2014 09:59 # 0
bormand 23.06.2014 11:07 # 0
orion 23.06.2014 11:20 # +4
Vindicar 22.06.2014 17:59 # 0
А второй еще ничего так, обычный list comprehension с не особо сложным условием. Хотя делает не совсем то, да.
wvxvw 22.06.2014 18:27 # 0
В Питоне есть штатная функция any() которая замечательно справляется с поставленной задачей.
Если я правильно понял задачу.
myaut 22.06.2014 22:08 # +1
Тут из встроенных функций filter можно: filter(...)[0], но это изврат и нужно обрабатывать ситуацию с пустым множеством возвращенным filter()
wvxvw 22.06.2014 23:28 # 0
bormand 23.06.2014 05:13 # 0
Потому что в оригинальном коде проверяют не совпадение а вхождение. Т.е. для 'Coca Cola inc' оно должно вернуть 'Coca Cola'.
wvxvw 23.06.2014 08:46 # 0
Не, наоборот, есть бренд "pizza", а передали какую-то конкретную контору с названием в котором есть слово "пицца". Ну не суть.
bormand 23.06.2014 09:05 # 0
Да, как-то так. Видимо, формат строчки с брендом довольно свободный, и на == его не проверишь. Хотя, тут может быть вообще какое-то нечеткое сравнение нужно, или поиск по наличию ключевых слов...
wvxvw 23.06.2014 09:09 # 0
kyzi007 23.06.2014 09:47 # +1
kyzi007 23.06.2014 09:55 # 0
wvxvw 23.06.2014 10:08 # +1
bormand 23.06.2014 11:22 # +2
Преждевременная оптимизация, не? Что-то мне подсказывает, что время поиска в массиве брендов пренебрежимо мало по сравнению со временем исполнения HTTP запроса...
Но ответить на этот вопрос может только профилирование (которое никто не будет делать, пока скрипт отрабатывает за приемлемое время).
wvxvw 23.06.2014 11:51 # 0
kyzi007 23.06.2014 13:09 # +6
Нет это специфичный кусочек кода для одного сайта который полагается на его структуру и который был написан за несколько минут. Если понадобится поддержка в другом парсере напишу ее еще раз оттталкиваясь от особенностей текущих данных.
Нет ничего хуже универсальных отверток там где они не нужны.
kegdan 23.06.2014 17:38 # +2
bormand 23.06.2014 17:46 # 0
Если ножек меньше трех - устойчивого положения не добиться. Если больше трех - устойчивость сильно зависит от рельефа пола, да и расход материалов повышается. Оптимальное число ножек - 3.
kipar 23.06.2014 18:48 # 0
bormand 23.06.2014 19:06 # +1
Если ветви в плоскости, перпендикулярной ножке - получим зависимость от рельефа пола, стул будет качаться.
А если они отходят от центральной под углом - это частный случай трех ножек, но менее надежный, т.к. все нагрузки ложатся на эту ось и точку сопряжения с ветвями ;)
У трехногого же стула нагрузка распределяется на все ножки, и они работают, по большей части, на сжатие.
kegdan 23.06.2014 20:10 # 0
bormand 23.06.2014 20:15 # 0
bormand 23.06.2014 20:24 # 0
Эх блин, пойти что-ли в kerbal space program порубиться...
kegdan 23.06.2014 20:46 # 0
bormand 23.06.2014 21:03 # 0
Очень годный космосим. Посмотри на ютубе или вики/лурке.
kegdan 23.06.2014 21:05 # 0
bormand 23.06.2014 21:19 # 0
Что-за утюг такой стрёмный, что вики не откроет? У нее же оптимизация под мобилы и все такое...
Ну в общем зеленые человечки покоряют просторы своей солнечной системы. Строишь ракету из говна и палок 100500 разных модулей и запускаешь куда-нибудь. А потом отправляешь еще одну - спасать первых чуваков, которым топлива хватило только в один конец. Попутно вкуриваешь матан rocket science ^_^.
Определенных целей нету, миссий нету, оружия нету. Да оно и не надо, ибо и так море фана и свободы ;)
kegdan 23.06.2014 21:24 # 0
eth0 24.06.2014 19:51 # 0
bormand 24.06.2014 20:35 # 0
Орбитальная карта пугает из-за кучи меток и траекторий?
kegdan 24.06.2014 21:21 # 0
bormand 24.06.2014 21:27 # 0
А я тут уже полчаса компоную ракету, подбирая баки и движки под нужные TWR и ΔV и стараясь не забыть какую-нибудь важную детальку ^_^
kegdan 24.06.2014 21:55 # 0
kipar 25.06.2014 16:47 # 0
bormand 25.06.2014 18:14 # 0
Под дюну. У меня просто далеко не все научное древо открыто, мощного движка (MainSail или как там его зовут) нету, и TWR при взлете с кербина хрен наберешь...
eth0 25.06.2014 20:40 # 0
И это тоже. Сам процесс стыковки выглядит безумным, типа заката солнца вручную. Или просто комментатор был тормоз.
kipar 25.06.2014 20:55 # 0
>У меня просто далеко не все научное древо открыто, мощного движка (MainSail или как там его зовут) нету, и TWR при взлете с кербина хрен наберешь...
В стандартном режиме? Там по-моему достаточно слетать людьми на Минмус и Мун чтобы почти всю науку открыть.
Хотя по честному на дюну с посадкой и возвратом я так и не слетал ни разу, все время на какие-нибудь безумные проекты отвлекаюсь.
Пользуясь случаем рекомендую мод BTSM. Вот там жесть, за каждое открытие бороться приходится, на последнем пропелленте маневрировать. Картошка вместо батареек, солнечные весят больше чем экипаж.
kegdan 25.06.2014 21:06 # 0
наш человек
bormand 25.06.2014 21:22 # 0
Тут парковочный радар просто дико неудобный. В орбитере я в свое время спокойно совмещал скорость/направление/цель.
А в перехвате чего муторного?
> Там по-моему достаточно слетать людьми на Минмус и Мун чтобы почти всю науку открыть.
Ну х.з., я давно не запускал KSP, вот на днях решил режим карьеры включить... 120sp дают за привезенный образец грунта с Муны. А тот же набор из MainSail и морковки стоит 300sp. А набор от Kerbodyne вообще 500sp.
> из-за этого всегда хочется побольше одним куском запустить
Не только :) Шлюз - не жесткий элемент, и из-за него вечно начинается "я твой дом труба шатал"... На взлете то можно закрепить балками, но потом - уже никак.
kipar 25.06.2014 23:23 # 0
А образца 2-3 из разных биомов, плюс куча отчетов и прочей телеметрии. на минмусе вообще можно особо не напрягаясь раз 4-5 сесть, охватив кучу близлежащих биомов, и еще над всеми оставшимися пролететь.
>А в перехвате чего муторного?
Ну, это маневров 5 в общем счете, хоть мехджеб их сильно автоматизирует, но все равно минут 10 или даже полчаса они занимают. Тем более в полностью автоматическом режиме он обычно очень неоптимально действует, так что поднимаю орбиту и выравнивать наклонение надо отдельно.
А если без мехджеба или скажем с RemoteTech (сетью ретрансляторов) делать, то обычно еще какие-нибудь косяки происходят, то мертвая зона, то затормозить не успел.
>Не только :) Шлюз - не жесткий элемент, и из-за него вечно начинается "я твой дом труба шатал"... На взлете то можно закрепить балками, но потом - уже никак.
Это да. Но если все симметрично и без посадок на планеты, то обычно все ок.
bormand 25.06.2014 23:43 # 0
Вот, кстати: A more efficient method (less total change in velocity) would be to combine the plane change with the tangential burn at apogee of the transfer orbit. http://www.braeunig.us/space/orbmech.htm#maneuver
> на минмусе
О, спасибо, я про него совсем забыл.
> то обычно все ок
Там, кстати, аддон вроде бы был со шлюзами без физики.
bormand 25.06.2014 21:02 # 0
Ну когда надоест вручную - есть аддон, который стыкует на автомате.
> Или просто комментатор был тормоз.
Есть вероятность, что он просто коряво прикрутил RCS.
> Сам процесс стыковки выглядит безумным
Можно ссылку на рол, тоже хочу посмотреть ;)
eth0 25.06.2014 21:17 # 0
Читерство, наверное?
Помнится, какой-то Союз стыковался с каким-то Союзом, но автоматика не шмогла из-за поворота блоков на 180 градусов по оси друг относительно друга.
> Можно ссылку
Смотрел примерно через месяц после выхода. Даже в истории не найду, наверное.
bormand 25.06.2014 21:27 # 0
Ну некоторые считают читерством. Но ведь у реальных космонавтов тоже есть такой чит ;)
eth0 26.06.2014 21:16 # 0
eth0 23.06.2014 20:15 # 0
Варианты реализации тоже различаются: можно сидеть на полу; магнитная, антигравитационная или аэродинамическая подвеска.
bormand 23.06.2014 20:18 # +2
Заодно защищает от пригорания жопы на форумах? ;)
eth0 24.06.2014 19:51 # 0
kegdan 24.06.2014 19:55 # 0
1024-- 23.06.2014 20:24 # 0
bormand 23.06.2014 20:26 # +3
Стул это точка, сидящий на нем - она же, и даже небо, и даже аллах являются той же точкой...
kegdan 23.06.2014 20:46 # 0
1024-- 23.06.2014 20:51 # 0
А если найду?
Как тогда эта хрень называется?
P. S. Удивительно, всеобобщающая математика выделила точку из множества пространств.
Это же аналог http://govnokod.ru/16208
kegdan 23.06.2014 20:57 # 0
kyzi007 23.06.2014 13:17 # +4
Ну и там не сколько поиск время жрал сколько загрузка, парсинг и сохранение результатов в эксельку.
3.14159265 25.06.2014 17:34 # +3
На какие преступления готовы пойти люди лишь бы не писать простой и понятный цикл?
wvxvw 25.06.2014 17:58 # 0
Но до этого нужно дорости. Сразу это не очевидно.
kyzi007 25.06.2014 19:25 # 0
3.14159265 25.06.2014 19:30 # +4
>Но до этого нужно дорости. Сразу это не очевидно.
Только чтобы повторно использовать простой и быстрый код в 3 строчки люди зачем-то пишут 510.
Ну и сразу вопрос. Как можно повторно использовать такую вот замечательную лямбду:
lambda x: [brand
for brand in brands
if brand.lower() in x[0].lower()]
С ненавистным словом for между прочим.
kyzi007 25.06.2014 19:35 # 0
Но в принципе питонисты такое должны читать, и пока я это все копипастила и меняла в общем привыкла. Все равно парсер состоит из xpath, css (который потом в тот же xpath транслируется) и регулярок больше чем наполовину (а все это гребанные кучки символов).
1024-- 25.06.2014 19:40 # 0
> Как как, копипастой.
Судя по тому, где она уже 2 раза оказалась, копипастой на ГК
wvxvw 25.06.2014 19:52 # 0
Где в цикле простой код? Как измерялась простота?
Если речь идет о моем примере:
эта лямбда? Так там сразу же и пример использования, прямо там же.
Если речь о примере с лямбдой со списком внутри, то использовать так:
В чем проблема?
kegdan 25.06.2014 19:55 # +1
он про гипотетическое паттерноговно и его неумелое использование.
>>Как измерялась простота?
в ЭШах?
Dummy00001 22.06.2014 21:50 # +1
Lure Of Chaos 23.06.2014 09:10 # +4