«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему создание переменной и использование ее в качестве ссылки может привести к путанице?

Почему создание переменной и использование ее в качестве ссылки может привести к путанице?

Опубликовано 1 августа 2024 г.
Просматривать:137

Why creating a variable and using that variable as reference can lead to confusion?

Введение

В сценарии Python я хотел протестировать разные строки HTML, используя одну и ту же логику. Мой подход заключался в циклическом переборе диапазона для создания нескольких экземпляров строковых переменных HTML, но он работал не так, как ожидалось.

# DO NOT DO THIS

for i in range(1, 5):
    html = f"html{i}"
    soup = BeautifulSoup(html, "html.parser")
    print('----', soup)

Поведение, которое я наблюдал, связано со способом интерпретации форматированной строки f"html{i}". В моем коде f"html{i}" оценивается как литералы "html1", "html2", "html3" и "html4", а не содержимое переменных с именами html1, html2 и т. д.

Python не заменяет автоматически f"html{i}" значением переменной, имя которой создается динамически, например html1 или html2. Вместо этого он оценивает строку как фиксированный шаблон, состоящий из префикса «html», за которым следует значение i.

Если я хочу использовать содержимое предопределенных переменных html1, html2 и т. д., мне нужно явно получить их значения, например, используя словарь для сопоставления имен строк с их фактическим содержимым.

Вот пример, иллюстрирующий это:

from bs4 import BeautifulSoup

# Define the variables
html1 = "Test 1"
html2 = "Test 2"
html3 = "Test 3"
html4 = "Test 4"

# Store them in a dictionary for easy access
html_dict = {
    "html1": html1,
    "html2": html2,
    "html3": html3,
    "html4": html4
}

# Iterate and process each html content
for i in range(1, 5):
    key = f"html{i}"
    html = html_dict[key]
    soup = BeautifulSoup(html, "html.parser")
    print('----', soup)

Объяснение:

  1. Определить переменные:

    • html1, html2, html3, html4 определяются содержимым, которое вы хотите проанализировать.
  2. Словарь для поиска переменных:

    • html_dict создается для сопоставления имен строк с соответствующим содержимым.
  3. Перебор ключей:

    • Цикл генерирует ключи от «html1» до «html4».
    • key = f"html{i}" создает ключ.
    • html = html_dict[key] извлекает содержимое, связанное с ключом.
  4. Разбор и печать:

    • Парсит HTML-контент с помощью BeautifulSoup.
    • Печатает проанализированное содержимое.

Выход:

---- Test 1
---- Test 2
---- Test 3
---- Test 4

Этот подход динамически получает доступ к содержимому переменных на основе индекса итерации и правильно печатает предполагаемое содержимое.

Заявление о выпуске Эта статья воспроизведена в: https://dev.to/doridoro/why-greating-a-variable-ad-using-taT-variat
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3