発生している問題
pythonのBeautifulSoup講座をUdemyで学んでおります。定義した関数を()をつけずに実行していて成立している意味がわからないので教えていただきたいです。
該当のソースコード
python
1html =''' 2 3<html> 4 <head> 5 <title>清水義孝の著書</title> 6 </head> 7 <body> 8 <p class="title"> 9 <b>清水義孝の最新の著書には、次の本があります。</b> 10 </p> 11 <p class="recent books"> 12 <a class="book" href="https://www.amazon.co.jp/dp/B07TN4D3HG" id="link1"> 13 Python3によるビジネスに役立つデータ分析入門 14 </a> 15 <a class="book" href="http://www.amazon.co.jp/dp/B07SRLRS4M" id="link2"> 16 よくわかるPython3入門2.NumPy・Matplotlib編 17 </a> 18 <a class="book" href="http://www.amazon.co.jp/dp/B07T9SZ96B" id="link3"> 19 よくわかるPython3入門4.Pandasでデータ分析編 20 </a> 21 </p> 22 <p class="end"> 23 <b>そして、これらの本は好評発売中です。</b> 24 </p> 25 </body> 26</html> 27''' 28 29soup = BeautifulSoup(html,'html.parser') 30 31#class属性があって、id属性がないタグの要素を取得 32def has_class_but_no_id(tag): 33 return tag.has_attr('class') and not tag.has_attr('id') 34 35soup.find_all(has_class_but_no_id)
補足情報(FW/ツールのバージョンなど)
python 3.9.13
beautifulsoup4 4.11.1
該当箇所はソースコード一番下の
def has_class_but_no_id(tag): return tag.has_attr('class') and not tag.has_attr('id') soup.find_all(has_class_but_no_id)
という箇所です。
「class属性があって、id属性がないタグの要素を取得する」というコードです。
has_class_but_no_idに(tag)がついていないのに正しく処理される意味がわかりません。
関数は「関数()」と記述して実行するものではないのでしょうか。
また、tagがないにもかかわらずsoupの中身を使えているのはどういった仕組みだからでしょうか。

回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。