栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Python

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python

嵌套函数在执行时(而不是在定义时)从父范围中查找变量。

编译函数主体,然后验证“自由”变量(未在函数本身中通过赋值定义),然后将其作为闭包单元绑定到函数,并且代码使用索引引用每个单元格。

pet_function
因此具有一个自由变量(
cage
),然后将其通过一个闭合单元引用,索引为0的闭合本身指向局部变量
cage
get_petters
功能。

当你实际调用该函数时,该闭包将用于在你调用该函数时查看

cage
周围作用域中的值。问题就在这里。在你调用函数时,该函数已经完成了对其结果的计算。将在在执行过程中的一些点局部变量分配各的,和字符串,但在功能的结束,包含了最后一个值。因此,当你调用每个动态返回的函数时,就会得到打印的值。
get_petterscage'cow''dog''cat'cage'cat''cat'

解决方法是不依赖闭包。你可以改用部分函数,创建新的函数作用域或将变量绑定为关键字parameter的默认值。

部分函数示例,使用

functools.partial()

from functools import partialdef 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_functionyield (animal, partial(gotimes, scoped_cage(cage)))

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

def pet_function(cage=cage):    print "Mary pets the " + cage.animal + "."yield (animal, partial(gotimes, pet_function))

无需

scoped_cage
在循环中定义函数,编译仅进行一次,而不是在循环的每次迭代中进行。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/372044.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号