包含标签 Python 的文章

Python基础之闭包和装饰器

Python中的闭包和装饰器 Python中的闭包 讲装饰器之前,先来说一下闭包。 闭包的由来 首先我们需要知道,我们是可以在函数中再定义一个函数的(嵌套函数)。 就像这样: def foo(): def bar(): print("Hello world!") return bar 此时我们调用 foo 函数,会得到一个其内部定义的 bar 函数。我们把 foo 函数的返回值赋值给一个变量就可以使用这个变量来调用 bar 函数了。 就像这样: func = foo() # func <- bar func() # bar() 输出: Hello world! 好了,闭包的故事就发生在上面这样的嵌套函数中。 举个例子: def foo(): name = "Andy" # 定义了一个foo函数内部的局部变量 def bar(): print(name) # 在bar函数内部引用了其外部函数foo的局部变量name return bar 现在,我们来调用一下 foo 函数: func = foo() func() 上面的代码,输出结果是: Andy bar函数不需要传参数,就能获取到外面的变量。 这就是典型的一个闭包现象。 闭包的定义 函数内部定义的函数,称为内部函数。如果这个内部函数使用了它外部函数的局部变量,即使外部函数返回了,这个内部函数还可以访问到外部函数的局部变量,这种现象就叫做闭包。 注意,即使你在调用 func 之前,定义一个全局变量 name,它还是会使用原来foo 函数内部的 name :

阅读全文