「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 変数を作成し、その変数を参照として使用すると、なぜ混乱が生じる可能性があるのでしょうか?

変数を作成し、その変数を参照として使用すると、なぜ混乱が生じる可能性があるのでしょうか?

2024 年 8 月 1 日に公開
ブラウズ:569

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 などの名前の変数の内容ではなく、リテラル "html1"、"html2"、"html3"、および "html4" として評価されます。

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. 解析して印刷:

    • BeautifulSoup を使用して HTML コンテンツを解析します。
    • 解析されたコンテンツを出力します。

出力:

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

このアプローチは、反復インデックスに基づいて変数の内容に動的にアクセスし、意図した内容を正しく出力します。

リリースステートメント この記事は次の場所に転載されています: https://dev.to/dridoro/why-creating-a-variable-and-using-that-variable-as-reference-can-lead-to-confusion-311i?1侵害がある場合は、削除するには[email protected]までご連絡ください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3