<small id='90yGy'></small><noframes id='90yGy'>

    1. <legend id='90yGy'><style id='90yGy'><dir id='90yGy'><q id='90yGy'></q></dir></style></legend>

      • <bdo id='90yGy'></bdo><ul id='90yGy'></ul>

    2. <i id='90yGy'><tr id='90yGy'><dt id='90yGy'><q id='90yGy'><span id='90yGy'><b id='90yGy'><form id='90yGy'><ins id='90yGy'></ins><ul id='90yGy'></ul><sub id='90yGy'></sub></form><legend id='90yGy'></legend><bdo id='90yGy'><pre id='90yGy'><center id='90yGy'></center></pre></bdo></b><th id='90yGy'></th></span></q></dt></tr></i><div id='90yGy'><tfoot id='90yGy'></tfoot><dl id='90yGy'><fieldset id='90yGy'></fieldset></dl></div>
    3. <tfoot id='90yGy'></tfoot>

      python闭包的实例详解

      时间:2023-12-10

      <small id='wWNxE'></small><noframes id='wWNxE'>

        • <i id='wWNxE'><tr id='wWNxE'><dt id='wWNxE'><q id='wWNxE'><span id='wWNxE'><b id='wWNxE'><form id='wWNxE'><ins id='wWNxE'></ins><ul id='wWNxE'></ul><sub id='wWNxE'></sub></form><legend id='wWNxE'></legend><bdo id='wWNxE'><pre id='wWNxE'><center id='wWNxE'></center></pre></bdo></b><th id='wWNxE'></th></span></q></dt></tr></i><div id='wWNxE'><tfoot id='wWNxE'></tfoot><dl id='wWNxE'><fieldset id='wWNxE'></fieldset></dl></div>
          <tfoot id='wWNxE'></tfoot>

            • <bdo id='wWNxE'></bdo><ul id='wWNxE'></ul>
              <legend id='wWNxE'><style id='wWNxE'><dir id='wWNxE'><q id='wWNxE'></q></dir></style></legend>
                <tbody id='wWNxE'></tbody>

                下面我将为您详细讲解 "Python闭包的实例详解"。

                什么是闭包

                在介绍闭包的实例之前,我们先来了解闭包的概念。闭包是指在函数内部再定义函数,并且这个内部函数可以引用到外部函数中的变量,叫做闭包。

                下面是一个简单的例子,函数 counter 返回了内部函数 add,而 add 引用了外层的变量 n

                def counter(n):
                    def add(m):
                        return m + n
                    return add
                

                闭包的基本特点

                1. 闭包函数可以访问外部函数中定义的变量,这些变量只在外部函数的作用域中才能访问;
                2. 当外部函数被调用时,外部函数中的变量被保存在内存中,内部函数可以随时访问这些变量,并且即使在外部函数执行完之后,这些变量的值也不会被释放掉;
                3. 内部函数不能改变外部函数中定义的变量,它只能进行读取操作。

                闭包的实例

                实例一:计数器

                def make_counter():
                    count = 0
                    def counter():
                        nonlocal count
                        count += 1
                        return count
                    return counter
                

                这个例子展示了如何使用闭包实现计数器。make_counter 函数返回了内部函数 counter,而 counter 函数每次被调用时都会自增 count 变量的值。

                我们可以使用以下方式来使用 make_counter 函数创建计数器:

                counter = make_counter()
                print(counter()) # 输出 1
                print(counter()) # 输出 2
                print(counter()) # 输出 3
                

                实例二:循环绑定事件

                def bind_events():
                    events = []
                    for i in range(3):
                        events.append(lambda: print(i))
                    return events
                

                这个例子展示了闭包的一个潜在问题。函数 bind_events 返回了一个包含了三个函数的列表 events,这三个函数都是对一个变量 i 的引用。

                我们可以使用以下方式来测试 bind_events 函数:

                for event in bind_events():
                    event()
                

                预期的输出应该是:

                0
                1
                2
                

                但实际上,输出的却是:

                2
                2
                2
                

                这是因为当执行这三个函数时,它们所引用的 i 已经变成了循环结束时的值,即 i=2。要解决这个问题,我们可以使用默认参数来保存 i 的值:

                def bind_events():
                    events = []
                    for i in range(3):
                        events.append(lambda i=i: print(i))
                    return events
                

                现在,我们再执行下面的代码,输出就变成了预期的结果:

                for event in bind_events():
                    event()
                

                输出:

                0
                1
                2
                

                所以,闭包虽然可以方便地共享变量,但是也需要小心使用,避免出现上述问题。

                上一篇:JavaScript在for循环中绑定事件解决事件参数不同的情况 下一篇:详解BootStrap表单验证中重置BootStrap-select验证提示不清除的坑

                相关文章

                • <bdo id='4JtDO'></bdo><ul id='4JtDO'></ul>

                <legend id='4JtDO'><style id='4JtDO'><dir id='4JtDO'><q id='4JtDO'></q></dir></style></legend>
                  1. <i id='4JtDO'><tr id='4JtDO'><dt id='4JtDO'><q id='4JtDO'><span id='4JtDO'><b id='4JtDO'><form id='4JtDO'><ins id='4JtDO'></ins><ul id='4JtDO'></ul><sub id='4JtDO'></sub></form><legend id='4JtDO'></legend><bdo id='4JtDO'><pre id='4JtDO'><center id='4JtDO'></center></pre></bdo></b><th id='4JtDO'></th></span></q></dt></tr></i><div id='4JtDO'><tfoot id='4JtDO'></tfoot><dl id='4JtDO'><fieldset id='4JtDO'></fieldset></dl></div>
                  2. <tfoot id='4JtDO'></tfoot>

                    <small id='4JtDO'></small><noframes id='4JtDO'>