質問: soup.find('div', class_='foo') for element in div(text=lambda it: isinstance(it, Comment)): element.extract() ``` コード出典
回答: ラムダ式については先ずはPython公式のドキュメントを見てください。 6.14. ラムダ (lambda) > > ラムダ式 (ラムダ形式とも呼ばれます) は無名関数を作成するのに使います。 式 `lambda parameters: expression` は関数オブジェクトになります。 この無名オブジェクトは以下に定義されている関数オブジェクト同様に動作します: > > > > ``` > def (parameters): > return expression > > ``` > > 引数の一覧の構文は関数定義を参照してください。ラムダ式で作成された関数は文やアノテーションを含むことができない点に注意してください。 > > > 少し解説が追加されている記事はこちら: Pythonのlambda(ラムダ式、無名関数)の使い方 > > **def文とlambda式の対応関係** > > def文による関数定義とそれに相当するラムダ式での無名関数の対応関係は以下のようになる。便宜上、ラムダ式に名前を割り当てている(ラムダ式を変数に代入している)が、Pythonのコーディング規約であるPEP8では非推奨となっている。後述。 > > > > ``` > def 名前(引数, 引数, ...): > return 式 > > 名前 = lambda 引数, 引数, ...: 式 > > ``` > > なので`it`は関数として見た時の`引数`になります。 `text`については、こちらのfind_all()のtext引数の解説が該当するでしょう。 > > `text`引数で、タグに挟まれている文字列を対象に検索することができます。 `name`引数やキーワード引数のように、 文字列 , 正規表現 , リスト , 関数 , True値 が使えます。 > > > `text`引数はテキスト文字列の検索ですが、これにタグの検索を組みわせることもできます。 Beautiful Soupは、`text`引数で指定した文字列を`.string`にもつタグ全てを見つけます。 > > > その上で「pythonのlamda式を普通の式に戻したい。」について、しかも質問のソースコードを対象とした対処としては、この記事が参考になるでしょう。 BeautifulSoup4でコメントタグの中身を取得する方法に腹落ちするまでの話 丁度適用した最後のソースコードで閉じ括弧が抜けているので、上記記事のプログラム自身はエラーになりますが、それを当てはめると質問の以下の部分は: ``` for element in div(text=lambda it: isinstance(it, Comment)): ``` こちらの関数定義と: ``` def is_comment(text): return isinstance(text, Comment) ``` こちらの呼び出しになります: ``` for element in div(text=is_comment): ```