正在加载...

包在函数外面

你想在一句问候前先写出一行。你用 kai 调用 greet。屏幕上的第一行是 door。第二行是 hi kai。

问候前先写 door

python
def announce(fn):
    def wrapped(name):
        print("door")
        return fn(name)
    return wrapped

@announce
def greet(name):
    return "hi " + name

print(greet("kai"))

屏幕上有两行。第一行是 door。第二行是 hi kai。你写的是 print(greet("kai"))。这次运行不是从 greet 里面的 return 那一行开始的。@announce 把 wrapped 包在 greet 外面,所以 greet("kai") 先运行 wrapped。wrapped 里面的 print 写出 door。然后 wrapped 运行问候,问候返回 hi kai。greet("kai") 外面的 print 写出第二行 hi kai。程序到这里就结束了。没有第三行。

door 不是问候语。问候语是 hi kai。如果 greet 上面没有 @announce 这一行,print(greet("kai")) 只会写出 hi kai。那个程序不是这个程序。这个程序有 @announce,所以第一行是 door,第二行是 hi kai。

现在你可以把一层包装放在函数外面,让一行先于函数自己的那一行运行。屏幕上先是 door,再是 hi kai。下一页会在名字旁边写一个类型。

问候前先写一行

wrapped 里面的 print 写出 door,然后问候写出 hi kai:屏幕上有两行。下一页会在名字旁边写一个类型。

🧠 测试您的知识

准备开始

测试您的知识

通过这个互动测验挑战自己,看看你对这个主题的理解程度如何

❓
5
问题
🎯
70%
及格要求
♾️
∞
时间
🔄
∞
尝试次数

📝 说明

  • 仔细阅读每个问题
  • 为每个问题选择最佳答案
  • 您可以随时重新参加测验
  • 您的进度将显示在顶部