包在函数外面
你想在一句问候前先写出一行。你用 kai 调用 greet。屏幕上的第一行是 door。第二行是 hi kai。
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:屏幕上有两行。下一页会在名字旁边写一个类型。
🧠 测试您的知识
测试您的知识
通过这个互动测验挑战自己,看看你对这个主题的理解程度如何
📝 说明
- 仔细阅读每个问题
- 为每个问题选择最佳答案
- 您可以随时重新参加测验
- 您的进度将显示在顶部