回答編集履歴

8

append context

2022/10/12 12:27

投稿

ps_aux_grep
ps_aux_grep

スコア1579

test CHANGED
@@ -3,9 +3,9 @@
3
3
  [Beautiful Soup Documentation - A Function](https://beautiful-soup-4.readthedocs.io/en/latest/index.html?highlight=find_all#a-function)
4
4
 
5
5
  > tagがないにもかかわらずsoupの中身を使えているのはどういった仕組みだからでしょうか
6
- このCallableに,`find_all()`内部的に`tag`を渡しています.
6
+ このCallable`has_class_but_no_id`に,`find_all()`内部`tag`を渡して,`has_class_but_no_id(tag)`と書たことになるようなコードを実装しています.
7
7
 
8
- [find_all()](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L478)の実態は,[SoupStrainer](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L1417)による変換が行われ,[SoupStrainer()._normalize_search_value()](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L1448)による検索手順の正規化が行われていることが知られています.`find_all()`の第一引数にCallableとして渡した`name`は,`SoupStrainer()._normalize_search_value()`で`callable(value)`というチェックを受け`SoupStrainer`の中に`SoupStrainer().name`で残ります.その後,`find_all()`の中で[strainer.search(i)](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L505)で渡された`tag`である`i`を使って,[SoupStrainer().search_tag()](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L1484)にてCallableである`self.name`を[self._match(markup, self.name)](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L1551)に渡して[関数として利用している](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L1578)ことがわかります.
8
+ [find_all()](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L478)の実態は,[SoupStrainer](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L1417)による変換が行われ,[SoupStrainer()._normalize_search_value()](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L1448)による検索手順の正規化が行われていることが知られています.`find_all()`の第一引数にCallableとして渡した`name`は,`SoupStrainer()._normalize_search_value()`で`callable(value)`というチェックを受け`SoupStrainer`の中に`SoupStrainer().name`で残ります.その後,`find_all()`の中で[strainer.search(i)](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L505)で渡された`tag`である`i`を使って,[SoupStrainer().search_tag()](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L1484)にてCallableである`self.name`を[self._match(markup, self.name)](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L1551)に渡して[関数として利用している](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L1578)ことがわかります.ユーザ観点では`has_class_but_no_id(tag)`が実行されますが,内部的には`match_against(markup)`と書かれて関数が呼び出されています.
9
9
 
10
10
  PythonでCallableを渡すことは多々あるので使っていると違和感もなくなるでしょう.
11
11
  ```Python

7

fixed context

2022/10/12 09:20

投稿

ps_aux_grep
ps_aux_grep

スコア1579

test CHANGED
@@ -5,7 +5,7 @@
5
5
  > tagがないにもかかわらずsoupの中身を使えているのはどういった仕組みだからでしょうか
6
6
  このCallableに,`find_all()`は内部的に`tag`を渡しています.
7
7
 
8
- [find_all()](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L478)の実態は,[SoupStrainer](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L1417)による変換が行われ,[SoupStrainer()._normalize_search_value()](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L1448)による検索手順の正規化が行われていることが知られています.`find_all()`の第一引数にCallableとして渡した`name`は,`SoupStrainer()._normalize_search_value()`で`callable(value)`というチェックを受け`SoupStrainer`の中に`SoupStrainer().name`で残ります.その後,`find_all()`の中で[strainer.search(i)](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L505)で渡された`generator`(今回は`Tag`)である`i`を使って,[SoupStrainer().search_tag()](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L1484)にてCallableである`self.name`を[self._match(markup, self.name)](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L1551)に渡して[関数として利用している](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L1578)ことがわかります.
8
+ [find_all()](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L478)の実態は,[SoupStrainer](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L1417)による変換が行われ,[SoupStrainer()._normalize_search_value()](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L1448)による検索手順の正規化が行われていることが知られています.`find_all()`の第一引数にCallableとして渡した`name`は,`SoupStrainer()._normalize_search_value()`で`callable(value)`というチェックを受け`SoupStrainer`の中に`SoupStrainer().name`で残ります.その後,`find_all()`の中で[strainer.search(i)](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L505)で渡された`tag`である`i`を使って,[SoupStrainer().search_tag()](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L1484)にてCallableである`self.name`を[self._match(markup, self.name)](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L1551)に渡して[関数として利用している](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L1578)ことがわかります.
9
9
 
10
10
  PythonでCallableを渡すことは多々あるので使っていると違和感もなくなるでしょう.
11
11
  ```Python

6

fixed code

2022/10/12 09:09

投稿

ps_aux_grep
ps_aux_grep

スコア1579

test CHANGED
@@ -24,8 +24,15 @@
24
24
 
25
25
  組み込み関数`map()`の第一引数は`Callable`,第二引数は`Iterable`であることもよく使われます.
26
26
  ```Python
27
+ def f1(x):
28
+ return x[0] + x[1]
29
+
30
+ def f2(x):
31
+ return x[0] * x[1]
32
+
27
- x = [1, 2, 3, 4]
33
+ a = [[1, 2], [3, 4], [5, 6]]
28
- print(x) # [1, 2, 3, 4]
34
+ print(a)
29
- x = list(map(lambda a: a * a, x))
35
+ print(list(map(f1, a))) # [3, 7, 11]
30
- print(x) # [1, 4, 9, 16]
36
+ print(list(map(f2, a))) # [2, 12, 30]
37
+ print(list(map(lambda x: x[0] ** x[1], a))) # [1, 81, 15625]
31
38
  ```

5

fixed code

2022/10/12 09:00

投稿

ps_aux_grep
ps_aux_grep

スコア1579

test CHANGED
@@ -26,6 +26,6 @@
26
26
  ```Python
27
27
  x = [1, 2, 3, 4]
28
28
  print(x) # [1, 2, 3, 4]
29
- x = list(map(lambda x: x * x, x))
29
+ x = list(map(lambda a: a * a, x))
30
30
  print(x) # [1, 4, 9, 16]
31
31
  ```

4

fixed code

2022/10/12 08:59

投稿

ps_aux_grep
ps_aux_grep

スコア1579

test CHANGED
@@ -6,3 +6,26 @@
6
6
  このCallableに,`find_all()`は内部的に`tag`を渡しています.
7
7
 
8
8
  [find_all()](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L478)の実態は,[SoupStrainer](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L1417)による変換が行われ,[SoupStrainer()._normalize_search_value()](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L1448)による検索手順の正規化が行われていることが知られています.`find_all()`の第一引数にCallableとして渡した`name`は,`SoupStrainer()._normalize_search_value()`で`callable(value)`というチェックを受け`SoupStrainer`の中に`SoupStrainer().name`で残ります.その後,`find_all()`の中で[strainer.search(i)](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L505)で渡された`generator`(今回は`Tag`)である`i`を使って,[SoupStrainer().search_tag()](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L1484)にてCallableである`self.name`を[self._match(markup, self.name)](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L1551)に渡して[関数として利用している](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L1578)ことがわかります.
9
+
10
+ PythonでCallableを渡すことは多々あるので使っていると違和感もなくなるでしょう.
11
+ ```Python
12
+ def f1(x, y):
13
+ return x + y
14
+
15
+ def f2(x, y):
16
+ return x * y
17
+
18
+ def result(func, x, y):
19
+ return func(x, y)
20
+
21
+ print(result(f1, 2, 3)) # 5
22
+ print(result(f2, 2, 3)) # 6
23
+ ```
24
+
25
+ 組み込み関数`map()`の第一引数は`Callable`,第二引数は`Iterable`であることもよく使われます.
26
+ ```Python
27
+ x = [1, 2, 3, 4]
28
+ print(x) # [1, 2, 3, 4]
29
+ x = list(map(lambda x: x * x, x))
30
+ print(x) # [1, 4, 9, 16]
31
+ ```

3

fixed code

2022/10/12 08:47

投稿

ps_aux_grep
ps_aux_grep

スコア1579

test CHANGED
@@ -5,4 +5,4 @@
5
5
  > tagがないにもかかわらずsoupの中身を使えているのはどういった仕組みだからでしょうか
6
6
  このCallableに,`find_all()`は内部的に`tag`を渡しています.
7
7
 
8
- [find_all()](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L478)の実態は,[SoupStrainer](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L1417)による変換が行われ,[SoupStrainer._normalize_search_value()](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L1448)による検索手順の正規化が行われていることが知られています.`find_all()`の第一引数として渡された`name`は,`SoupStrainer()._normalize_search_value()`で`callable(value)`というチェックを受け`SoupStrainer`の中に`self.name`で残ります.その後,`find_all()`の中で[strainer.search(i)](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L505)で渡された`generator`(今回は`Tag`)である`i`を使って,[SoupStrainer().search_tag()](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L1484)にてCallableである`self.name`を[SoupStrainer()._match()](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L1551)に渡して[関数として利用している](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L1578)ことがわかります.
8
+ [find_all()](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L478)の実態は,[SoupStrainer](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L1417)による変換が行われ,[SoupStrainer()._normalize_search_value()](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L1448)による検索手順の正規化が行われていることが知られています.`find_all()`の第一引数にCallableとして渡た`name`は,`SoupStrainer()._normalize_search_value()`で`callable(value)`というチェックを受け`SoupStrainer`の中に`SoupStrainer().name`で残ります.その後,`find_all()`の中で[strainer.search(i)](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L505)で渡された`generator`(今回は`Tag`)である`i`を使って,[SoupStrainer().search_tag()](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L1484)にてCallableである`self.name`を[self._match(markup, self.name)](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L1551)に渡して[関数として利用している](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L1578)ことがわかります.

2

fix code link

2022/10/12 08:44

投稿

ps_aux_grep
ps_aux_grep

スコア1579

test CHANGED
@@ -5,4 +5,4 @@
5
5
  > tagがないにもかかわらずsoupの中身を使えているのはどういった仕組みだからでしょうか
6
6
  このCallableに,`find_all()`は内部的に`tag`を渡しています.
7
7
 
8
- [find_all()](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L478)の実態は,[SoupStrainer](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L1417)による変換が行われ,[SoupStrainer._normalize_search_value()](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L1448)による検索手順の正規化が行われていることが知られています.`find_all()`の第一引数として渡された`name`は,`SoupStrainer()._normalize_search_value()`で`callable(value)`というチェックを受け`SoupStrainer`の中に`self.name`で残ります.その後,`find_all()`の中で[strainer.search(i)](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L505)で渡された`generator`(今回は`Tag`)である`i`を使って,[SoupStrainer().search_tag()](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L1484)にてCallableである`self.name`を[関数として利用している](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L1498)ことがわかります.
8
+ [find_all()](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L478)の実態は,[SoupStrainer](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L1417)による変換が行われ,[SoupStrainer._normalize_search_value()](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L1448)による検索手順の正規化が行われていることが知られています.`find_all()`の第一引数として渡された`name`は,`SoupStrainer()._normalize_search_value()`で`callable(value)`というチェックを受け`SoupStrainer`の中に`self.name`で残ります.その後,`find_all()`の中で[strainer.search(i)](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L505)で渡された`generator`(今回は`Tag`)である`i`を使って,[SoupStrainer().search_tag()](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L1484)にてCallableである`self.name`を[SoupStrainer()._match()](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L1551)に渡して[関数として利用している](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L1578)ことがわかります.

1

fix context

2022/10/12 08:34

投稿

ps_aux_grep
ps_aux_grep

スコア1579

test CHANGED
@@ -4,3 +4,5 @@
4
4
 
5
5
  > tagがないにもかかわらずsoupの中身を使えているのはどういった仕組みだからでしょうか
6
6
  このCallableに,`find_all()`は内部的に`tag`を渡しています.
7
+
8
+ [find_all()](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L478)の実態は,[SoupStrainer](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L1417)による変換が行われ,[SoupStrainer._normalize_search_value()](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L1448)による検索手順の正規化が行われていることが知られています.`find_all()`の第一引数として渡された`name`は,`SoupStrainer()._normalize_search_value()`で`callable(value)`というチェックを受け`SoupStrainer`の中に`self.name`で残ります.その後,`find_all()`の中で[strainer.search(i)](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L505)で渡された`generator`(今回は`Tag`)である`i`を使って,[SoupStrainer().search_tag()](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L1484)にてCallableである`self.name`を[関数として利用している](https://github.com/wention/BeautifulSoup4/blob/03a2b3a9d1fc5877212d9d382a512663f24c887d/bs4/element.py#L1498)ことがわかります.