回答編集履歴
8
append context
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()`
|
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
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)で渡された`
|
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
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
|
-
|
33
|
+
a = [[1, 2], [3, 4], [5, 6]]
|
28
|
-
print(
|
34
|
+
print(a)
|
29
|
-
|
35
|
+
print(list(map(f1, a))) # [3, 7, 11]
|
30
|
-
print(
|
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
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
|
29
|
+
x = list(map(lambda a: a * a, x))
|
30
30
|
print(x) # [1, 4, 9, 16]
|
31
31
|
```
|
4
fixed code
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
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()`の第一引数として渡
|
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
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#L1
|
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
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)ことがわかります.
|