1. Python / Говнокод #12880

    −97

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    @render_to_json()
    def view(request):
        # ...
        return {'name':obj.name for obj in
                    Company.objects.filter(id=cid, is_valid=True)}

    Не, ну а чё? )

    Запостил: Crazyzubr, 11 Апреля 2013

    Комментарии (26) RSS

    • дык не запустится же.
      вру, запустится, но вернет фигню.
      Ответить
      • Нет, вернет все правильно. Либо пустой словарь, либо с одним ключом name.
        Ответить
        • Значение ключа будет не список, а генератор.
          Ответить
          • Значением ключа будет строка с наименованием компании...
            Ответить
            • Ух ты, я не знал что есть генераторы словарей.
              Т.е. выражение
              { i:-i for i in xrange(3) }

              даст {0:0, 1:-1, 2:-2}.
              Интересно...
              Ответить
              • Comprehensions есть для списков, множеств, словарей и генераторов.
                Возможно, вам также будет интересно, что yield может быть не только statement, но и expression, что позволяет использовать функции - генераторы в качестве сопрограмм
                http://docs.python.org/release/2.5.2/ref/yieldexpr.html
                Ответить
                • Скучная ветка получилась, я думал намного, намного лучше будет это всё, но как-то не удало-оось.
                  Ответить
    • Поскольку ключи в словаре уникальные, вернет только последнее имя.

      //К.О.
      Ответить
      • Наверно, автор имел в виду

        return {'name':[obj.name for obj in
                        Company.objects.filter(id=cid, is_valid=True)]}

        Еще один способ, которым питон позволяет себе выстрелить в ногу.
        Ответить
        • Ничего подобного я не имел в виду.
          В этом примере переделать 'name' в 'names' и все ок)
          Только вернет-то список всего с одним элементом)
          Ответить
          • >В этом примере переделать 'name' в 'names' и все ок)
            Чет не понял.
            Ответить
            • Если возвращается список, то во множественном числе будет вернее назвать. Зависит от контекста, конечно.
              Ответить
              • >Только вернет-то список всего с одним элементом
                Еще и случайным. Ты понимаешь, что это говно(код)?
                Ответить
                • Видимо я один понимаю в чем здесь говнокод =)
                  А ты до сих пор так и не понял...
                  Ответить
                  • Я написал уже http://govnokod.ru/12880#comment175893
                    Если ты имел в виду что-то другое - то проблема на твоей стороне.
                    Ответить
                    • Вот начиная с этого поста ты ничего и не понял. Пересмотри код еще раз.
                      Ответить
                      • https://ideone.com/anIVYB
                        Ответить
                        • Твоя мысль ясна, и имеет место быть, но я, наверное, уже повторюсь, если скажу, что она не является ключевой. Попробуй вместо range(10) подставить все-таки кверисет. Из кверисета видно, что используется поле id, которое как и подобает ему в подавляющем большинстве случаев, является уникальным. То есть кверисет по-любому возвратит только один объект, или пустой кверисет, это значит будет либо {} либо {'name': 'Company name'} без всяких лишних итераций. Я написал такой код только потому, что не хотелось писать лестниц для проверки существования объекта, однако это повлияло на понимаемость кода, что авторы комментариев в этом посте и доказали...
                          Ответить
                          • Слишком хитрожопо для понимания. Однако, как это можно записать понятно и покороче?
                            Ответить
                          • Выглядит илитно, но, я б сказал, тут проблема в другом: твой подход косячный. Как ты собираешься работать с json-ом? Я бы запилил такое:
                            for company in companies:
                                name = company['name']

                            Тогда было бы логичней возвращать список с {'name': 'Company name'} или же пустой список. В твоем варианте будет
                            try:
                                name = js['name']
                            except хуйзнаеткакойэксепт:
                                хз
                            Ответить
    • Gosh, I wish I would have had that initomarfon earlier!
      Ответить
    • на <= 2.6 упадет, это единственное что реально может смущать.
      Ответить
    • Reading posts like this make surfing such a plrsauee
      Ответить
    • This "free sharing" of <a href="http://bqcutzpdag.com">intoamrfion</a> seems too good to be true. Like communism.
      Ответить
    • Heck yeah bab-eye keep them coming! http://idikmueuwfc.com [url=http://mrkultil.com]mrkultil[/url] [link=http://czudixcgmia.com]czudixcgmia[/link]
      Ответить
    • These pieces really set a standard in the indyrtsu. http://wlqmlzezanp.com [url=http://fpngjnrdvau.com]fpngjnrdvau[/url] [link=http://rajvzixb.com]rajvzixb[/link]
      Ответить

    Добавить комментарий