引数付きデコレータ
次のコードを実行したときの出力として、正しいものを1つ選べ。
def rep(n):
def deco(f):
def w():
return [f() for _ in range(n)]
return w
return deco
@rep(2)
def hi():
return "x"
print(hi())
- A
'x' - B
['x'] - C
<function hi> - D
['x', 'x']
正解と解説を見る
正解:D
引数付きのデコレータは、引数を受け取ってデコレータを返す関数(3 重の入れ子)で書く。@rep(2) は hi = rep(2)(hi)。
| 順 | 実行する行 | 実行後の変数 |
|---|---|---|
| 1 | `def rep(n):` | — |
| 2 | `@rep(2)` | — |
| 3 | └ `def deco(f):` | — |
| 4 | └ `return deco` | — |
| 5 | `def hi():` | — |
| 6 | `@rep(2)` | — |
| 7 | └ `def w():` | — |
| 8 | └ `return w` | — |
| 9 | `def hi():` | — |
| 10 | `print(hi())` | — |
| 11 | └ `return [f() for _ in range(n)]` | n = 2 |
| 12 | └ `return "x"`(2回) | — |
| 結果 | 実際の出力 | ['x', 'x'] |
- A
誤り。
rep(2)で 2 回呼ぶ関数に包まれる。 - B
誤り。
nは 2。 - C
誤り。
hi()を呼んでいる。 - D
正しい。
rep(2)がデコレータを返し、それがhiを包む。
このサイトの問題は、各試験の公式に示された出題範囲に沿って作ったオリジナルの模擬問題です。本試験の問題ではありません。一般社団法人Pythonエンジニア育成推進協会の公式サービスではありません。