Python中文
首页
教程
问答
标签
搜索
登录
注册
词汇范围有动态方面吗?
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>对词法范围的访问可以在编译时根据源代码中的位置在编译时(或者通过静态分析器,因为我的示例是用Python编写的),这似乎是司空见惯的事情。在</p> <p>下面是一个非常简单的例子,其中一个函数有两个闭包,它们的<code>a</code>的值不同。在</p> <pre><code>def elvis(a): def f(s): return a + ' for the ' + s return f f1 = elvis('one') f2 = elvis('two') print f1('money'), f2('show') </code></pre> <p>当我们阅读函数<code>f</code>的代码时,当我们看到<code>a</code>,它不是在{<cd2>}中定义的,所以我们弹出到封闭函数并在那里找到一个,这就是<code>f</code>中的<code>a</code>所指的。源代码中的位置足以告诉我<code>f</code>从一个封闭范围中为<code>a</code>获取一个值。在</p> <p>但是正如所描述的<a href="http://www.composingprograms.com/pages/16-higher-order-functions.html#defining-functions-iii-nested-definitions" rel="nofollow">here</a>,当一个函数被调用时,它的局部框架会扩展其父环境。所以在运行时进行环境查找是没有问题的。但我不确定的是,静态分析器总是能够在代码运行之前,计算出编译时引用哪个</em>闭包。在上面的例子中,<code>elvis</code>有两个闭包,很容易跟踪它们,但其他情况就不那么简单了。直觉上,我很紧张静态分析的尝试可能会遇到一个总体上停滞不前的问题。在</p> <p>那么词法作用域真的有一个动态的方面吗?源代码中的位置告诉我们包含一个封闭的作用域,但不一定要引用哪个闭包?或者这是编译器解决了的问题,函数中所有对闭包的引用都可以静态地详细地计算出来吗?在</p> <p>或者答案取决于编程语言——在这种情况下,词法范围界定并不像我想象的那么强烈?在</p> <p>[编辑@评论:</p> <p>在我的例子中,我可以重申我的问题:我读过诸如“词法解析可以在编译时确定”之类的声明,但是我想知道在<code>f1</code>和<code>f2</code>中对<code>a</code>值的引用是如何静态/在编译时计算出来的(一般情况下)。在</p> <p>解决办法是,词法范围界定并不要求这么多。五十、 S.可以告诉我们,在编译时,当我在<code>f</code>时,<em>名为<code>a</code>的东西将被定义(这显然可以静态地计算出来;这是词法范围的定义),但是确定它实际需要什么值(或者,哪个闭包是活动的)超出了L.S.的概念,2) 在运行时完成(不是静态的),所以在某种意义上是动态的,但是当然3)使用了与动态范围不同的规则。在</p> <p>引用@PatrickMaupin的话,我们要传达的信息是“还有一些动态的工作要做。”]</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>在Python中,如果一个变量被赋值(出现在赋值的LHS上),并且没有显式地声明为global或nonlocal,那么它就被确定为局部变量。在</p> <p>因此,可以建立<em>词法</em>范围链来静态地确定哪个标识符将在哪个函数中找到。但是,一些动态的工作还是要做的,因为你可以任意嵌套函数,所以如果函数A包含函数B,其中包含函数C,那么对于函数C来说,从函数A访问变量,你必须为A找到正确的框架(闭包也是一样)</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
python语法错误(如果不在Z中,则在X中表示s)
1 回答
Python语法错误(无效)概率
3 回答
python语法错误*带有可选参数的args
4 回答
python语法错误2.5版有什么办法解决吗?
3 回答
Python语法错误2.7.4
6 回答
python语法错误30/09/2013
10 回答
Python语法错误E001
4 回答
Python语法错误not()op
6 回答
python语法错误outpu
5 回答
Python语法错误print len()
3 回答
python语法错误w3
2 回答
Python语法错误不是caugh
9 回答
python语法错误及yt-packag的使用
5 回答
python语法错误可以查出来!!瓦里亚布
4 回答
Python语法错误可能是缩进?
6 回答
Python语法错误和缩进
10 回答
Python语法错误在while循环中生成随机numb
4 回答
Python语法错误在哪里?
1 回答
python语法错误在尝试导入包时,但仅在远程运行时
5 回答
Python语法错误在电子邮件地址提取脚本中
5 回答