首页 >后端开发 >Python教程 >Python 中的嵌套函数如何处理局部变量和闭包?

Python 中的嵌套函数如何处理局部变量和闭包?

Linda Hamilton
Linda Hamilton原创
2024-12-20 18:04:10775浏览

How Do Nested Functions Handle Local Variables and Closures in Python?

嵌套函数中的局部变量

这个复杂的示例涉及嵌套函数和闭包,这可能会导致令人困惑的行为。让我们揭开谜底。

嵌套函数执行

嵌套函数在执行时会访问父作用域中的变量。在本例中,pet_function 是 get_petters 生成器中的嵌套函数。执行时,它会在 get_petters 范围内搜索变量。

闭包单元和局部变量

pet_function 有一个自由变量(笼子)。在编译期间,这个自由变量由闭包单元表示。当执行 pet_function 时,此闭包单元会检查 get_petters 周围范围内的 cage 值。

动态查找和闭包

当 funs 列表时,会出现有问题的行为被创建。此时,get_petters 中的 cage 的值为“cat”。当调用 funs 中的每个函数时,pet_function 中的闭包单元会在该函数调用时查找 cage 的值,而不是在定义它时。

访问不同的动物

为了解决此问题,pet_function 需要访问每个动物的笼子对象的特定实例。这可以通过部分函数、新函数作用域或关键字参数来实现。

部分函数

部分函数创建一个具有固定参数的新函数。以下是使用 functools.partial() 的示例:

def pet_function(cage=None):
    print("Mary pets the " + cage.animal + ".")

yield (animal, partial(gotimes, partial(pet_function, cage=cage)))

新函数作用域

创建新函数作用域可确保笼变量绑定在新定义的范围内函数。

def scoped_cage(cage=None):
    def pet_function():
        print("Mary pets the " + cage.animal + ".")
    return pet_function

yield (animal, partial(gotimes, scoped_cage(cage)))

关键字参数

绑定cage变量作为关键字参数的默认值:

def pet_function(cage=cage):
    print("Mary pets the " + cage.animal + ".")

yield (animal, partial(gotimes, pet_function))

以上是Python 中的嵌套函数如何处理局部变量和闭包?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn