Обновить
59

Пользователь

2,5
Рейтинг
16
Подписчики
Отправить сообщение
даже для конференции по пайтон. :)
загрузчик html достаточно сообразителен, чтобы исправить ошибки, поэтому валидность не имеет особого значения — можно парсить даже полный бред:
$crazyHtml = 'd<dd';
$dom =new  DomDocument();
$dom->loadHtml($crazyHtml);
echo $dom->saveHtml();

другое дело, что алгоритмы исправлений могут отличаться у разных библиотек и браузеров, давая на выходе разные деревья. например php, этот пример интерпретирует вот так:
PHP Warning:  DOMDocument::loadHTML(): Couldn't find end of Start Tag dd in Entity, line: 1 in /tmp/a.php on line 3
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><p>d</p><dd></dd></body></html>
здесь терминологическая путаница — понятие first-class object (aka значение) и object в ООП (который содержит свойства и методы) — это две разные штуки.

функции в С не являются first-class object — ими являются указатели. а функции в python и то и другое. ;)
Нет )
>>> os.path.join('a/b', 'c')
'a/b\\c'

функция лишь вставляет os.sep между аргументами. а файл открывается потому, что винда понимает и прямые и обратные слеши (см os.sep, os.altsep ).
то как выглядит код с вашей точки зрения и с точки зрения pylint — это просто две разные точки зрения. запустите и сами всё увидите. :)
Код становится тяжело отлаживать, модифицировать и сопровождать.
исходники django анти-pythonic до мозга костей. попробуйте отстроить pylint для таких проектов :)
value = (foo.bar()['first'][0]*baz.ham(1, 2)[5:9]               # pythonic
        + verify(34, 20)*skip(500, 360))

не-а. «The preferred place to break around a binary operator is *after* the operator, not before it.» (© pep-0008)

>>> bar = []                            # pythonic

на днях, рассматривая логи коммитов, нашел удивительную чехорду патчей:
-foo = []
+foo = [ ]
затем
-foo = [ ]
+foo = []

и так несколько раз. а как должно быть pythonic?

а нужно-ли делать, отступы на пустых строках, или нет:
def foo(x):
....
.... if x is None:

или
def foo(x):

.... if x is None:
?
как-то попадалась библиотека для конструирования путей к файлам, позволяющая вместо
foo + "/" + baz 
записывать просто
foo / baz
не напомните :?
а как это себя ведет при рефакторинге кода?

насколько я понял аспекты привязываются к методам по именам. что происходит, если имя метода меняется — авторизация перестает проверятся, логи — записываться? есть-ли для таких случаев поддержка со стороны среды разработки, предупреждения какие-то?
… в тексте они неразличимы. При попытке объяснить, начинается блуждание в трех соснах. :) На самом деле object и type _это_ действительно объекты, но по-разному. :) object это объект потому, что он является экземпляром type, а type это объект, потому что он является подклассом object.

Добавьте ссылку: www.cafepy.com/article/python_types_and_objects/python_types_and_objects.html — классическое чтиво по этой теме, объясняющее объектную модель python на простых примерах с картинками.
Более того object, и type — это объекты типа (классы), и у них тоже есть специальные атрибуты __name__, __bases___


Для понимания объектной модели python нужно обозначить два вида отношений: subclass-superclass (выражает частное-общее, например «человек» это «живое существо») и instance-type (выражает определение, «Таня» это «человек»). В русском (да и английском) языках, данные отношения обычно называют словом «это» (или «является»), поэтому

Для каждого j>0 заменить все присваивания L=j соответствующей подпрограммой Gj(в том числе и для L=1). Так как L больше никогда не будет присвоено значение j можно убрать проверку L=j (вместе с соответствующей ей веткой выполнения) из структуры программы.
выглядит как «inline» подпрограмм? эта затея осуществима для всех j>0, в любом случае? или тут схема маягче: «Для каждого j>0 пытаться заменить все присваивания L=j… », и «Если L больше никогда не будет присвоено значение j ...». Просто в данном примере заменились не все присавивания — «L=3» в структуре осталось.
Теперь построим цикл while do с заменой предикатных и функциональных блоков.
я правильно понимаю, что на этой схеме получилось нечто похожее на машину состояний — switch, в котором каждый case это подпрограмма, представляющая собой либо выбор нового значения L (одного из двух) либо выполнение операции и назначение нового L?:
L = 1
white L > 0:
   switch L:
     case 1: if p1 L = 2 else L = 3   ; break
     case 2: f1; L = 6                ; break
     ...
     case 8: f5; L = 0                ; break 
Или совсем избавиться от флага как это сделал eigrad здесь.

кажется, что вариант комменте по ссылке не верный — если условие b изначально '0', то хвост алгоритма (E) не выполнится ни разу.
Мне кажется для скрытия адресной строки есть разумное объяснение — google'у нужна связанность переходов. Для этого нужно, чтобы пользователи щелкали именно по ссылкам на страницах, а не меняли адресную строку как попало.
Спасибо, теперь понял.
Значит в вашей системе эта логика является вполне нормальной — бизнес- — наверняка, окруженная полноценными тестами, документацией и проч. семейной атрибутикой. Нашим администраторам такая возможность не требуется. В итоге аналогичный код одиноко подвисает в слое тестов, в виде абсолютно неконтролируемой логики (чуть не сказал — женской). Получается, что интерпретация зависит от конкретного набора требований.

Так вот проблема — нужно-ли писать тесты для MotherObject или нет? :) Голос «за» — они рожают точно такие же объекты, какие появляются на свет у нормальной бизнес-логики (просто какими-то левыми сценариями). Голос «против» — кажется, это будут тесты, ради тестов.
Например, сценария createAndLoginUser() в реальном коде не существует — потому, что пользователей заводит администратор, но ни когда их не логинит. Логиняться пользователи всегда сами, но только в существующий аккаунт.

Однако в тестах очень часто участвуют именно такие вот залогиненные пользователи, поэтому от деталей их создания и логина хочется абстрагироваться. Думаю, такой код мог бы быть контроллером (если бы необходимость в такой логике, по факту, была не только в тестах).

Информация

В рейтинге
1 862-й
Зарегистрирован
Активность