Помогите интерпретировать фрагмент кода - PullRequest
4 голосов
/ 26 сентября 2010

Я очень плохо знаком с Python и BeautifulSoup.

В выражении for что такое incident? Это класс, тип, переменная? Строка после for .. полностью потеряна.

Может кто-нибудь объяснить мне этот код?

for incident in soup('td', width="90%"):
    where, linebreak, what = incident.contents[:3]
    print where.strip()
    print what.strip()
    break
print 'done'

Ответы [ 3 ]

3 голосов
/ 26 сентября 2010

Первый оператор запускает цикл, который анализирует HTML-документ и ищет элементы td с шириной, установленной на 90%. Объект, представляющий элемент td, связан с именем incident.

Вторая строка является множественным назначением и может быть переписана следующим образом:

where = incident.contents[0]
linebreak = incident.contents[1]
what = incident.contents[2]

Другими словами, он извлекает содержимое из тега td и дает каждому элементу более осмысленное имя.

Последняя строка в цикле вызывает разрыв цикла после проверки только первого элемента. Код можно было бы переписать так, чтобы он не использовал цикл, который сделал бы его более понятным.

1 голос
/ 27 сентября 2010

Добро пожаловать в переполнение стека!Давайте посмотрим на то, что происходит.По пути я добавил ссылки для дальнейшего чтения, прежде чем задавать дополнительные вопросы, ознакомьтесь с ними.

    for incident in soup('td', width="90%"): 

incident - это произвольная локальная переменная для повторяемого значения, возвращаемого soup.Вообще говоря, локальная переменная в выражении for , вероятно, является списком, но может быть кортежем или даже строкой.Если возможно перебрать что-то, например, файл, то Python, вероятно, примет for для просмотра элементов.

В этом случае soup возвращает список td элементов HTML сширина 90%.Мы можем видеть это из-за того, что происходит в следующей строке:

        where, linebreak, what = incident.contents[:3]

where, linebreak и what также являются произвольными локальными переменными.Все они присваиваются в одном утверждении.В Python это называется множественное присваивание .Откуда эти три элемента? incident.contents[:3] запрашивает первые три элемента, используя обозначение среза .

        print where.strip()
        print what.strip()

Эти две строки печатают where и what наэкран. ¹ Но что делает strip?Это удаляет пустое пространство.Таким образом, " some text " становится "some text".

        break

break просто разрывает цикл for после первого цикла.Это не нарушает всю программу.Вместо этого он возвращает поток программы на следующую строку после цикла.

    print 'done'

Это просто делает то, что говорит, отправляя слова «сделано» на экран.Если вы используете эту программу, вы знаете, что она завершена, когда вы видите, что «выполнено» (без кавычек) появляется на экране.

¹ Чтобы быть более технически точным, они отправляют байты в стандартный вывод (обычноизвестный как стандартный вывод).

0 голосов
/ 26 сентября 2010

Прежде всего, Python заботится о том, где находятся новые строки и пробелы, поэтому вы должны использовать тег code для представления кода Python.Как я уже догадался, как ваш код был изначально отформатирован.

for incident in soup('td', width="90%"): 
    where, linebreak, what = incident.contents[:3] 
    print where.strip()
    print what.strip() 
    break 
print 'done'

В операторе 'for x in y:' предполагается, что y - это некая итеративная (похожая на список) вещь - упорядоченная коллекция объектов.Затем для каждого элемента в списке он присваивает элемент имени 'x' и запускает блок с отступом.

В этом случае, по-видимому, существует функция soup (), которая возвращаетсписок инцидентов.Каждый инцидент - это объект, который содержит атрибут, называемый «содержимым», который сам является списком;[: 3] означает «первые три элемента списка».Таким образом, эта строка берет первые три вещи в содержании инцидента и присваивает им имена «где», «разрыв строки» и «что».Функция strip () удаляет пробелы в начале и конце строки.Таким образом, мы печатаем «где» и «что».'break' выходит из цикла for, поэтому в этом случае он запускается только один раз, что немного странно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...