Python 模擬試験

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

デコレータの重ね掛け

次のコードを実行したときの出力として、正しいものを1つ選べ。

def a(f):
    return lambda: "A" + f()
def b(f):
    return lambda: "B" + f()
@a
@b
def f():
    return "x"
print(f())
  1. A

    BAx

  2. B

    x

  3. C

    AB

  4. D

    ABx

正解と解説を見る

正解:D

複数のデコレータは、下から順に適用される(@a @b def f は f = a(b(f)))。呼び出しでは、外側から順に実行される。

順実行する行実行後の変数
1`def a(f):`—
2`def b(f):`—
3`@a`—
4`@b`—
5`def f():`—
6`@b`—
7└ `return lambda: "B" + f()`—
8`@a`—
9└ `return lambda: "A" + f()`—
10`def f():`—
11`print(f())`—
12└ `return "x"`—
結果実際の出力ABx

学習のポイント:適用の順序と、実行の順序は逆になる。

この問題を演習で解く →

問題一覧へ

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