Python 模擬試験

Python実践 模擬試験 第3回 問9・3章 Pythonの言語仕様(デコレータ)

引数付きデコレータ

次のコードを実行したときの出力として、正しいものを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())
  1. A

    'x'

  2. B

    ['x']

  3. C

    <function hi>

  4. 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']

学習のポイント:functools.wraps を併用すると、名前や docstring が保たれる。

この問題を演習で解く →

問題一覧へ

このサイトの問題は、各試験の公式に示された出題範囲に沿って作ったオリジナルの模擬問題です。本試験の問題ではありません。一般社団法人Pythonエンジニア育成推進協会の公式サービスではありません。