如何在Python中实现类似Go语言中的defer语句的功能?
defer语句将一个函数调用推入一个栈中。当包含defer语句的函数返回时,推迟的函数调用会逐个弹出并执行,执行的作用域与defer语句所在的作用域相同。defer语句看起来像函数调用,但只有在弹出时才会执行。
以下是Go语言中的示例:
一个使用案例的示例:
defer语句将一个函数调用推入一个栈中。当包含defer语句的函数返回时,推迟的函数调用会逐个弹出并执行,执行的作用域与defer语句所在的作用域相同。defer语句看起来像函数调用,但只有在弹出时才会执行。
以下是Go语言中的示例:
func main() {
fmt.Println("counting")
var a *int
for i := 0; i < 10; i++ {
a = &i
defer fmt.Println(*a, i)
}
x := 42
a = &x
fmt.Println("done")
}
输出:
counting
done
9 9
8 8
7 7
6 6
5 5
4 4
3 3
2 2
1 1
0 0
一个使用案例的示例:
var m sync.Mutex
func someFunction() {
m.Lock()
defer m.Unlock()
// Whatever you want, with as many return statements as you want, wherever.
// Simply forget that you ever locked a mutex, or that you have to remember to release it again.
}
with
。很多东西(例如file
、threading.Lock
)都内置了上下文管理器,但如果你想像第一个例子中那样做一些特定的事情,就必须自定义构建它。 - a p