python-2.7 - Python 中的命名空间和作用域

标签 python-2.7 scope namespaces

我在 Python 中遇到了一个关于命名空间和作用域的脚本,我无法弄清楚这个脚本是如何运行的,因为它混合使用了这两个概念。这是代码:

j, k = 1,2
def proc1():
       j, k = 3, 4
       print “ j == %d and k == %d” % (j, k)
       k = 5

def proc2():
       j = 6
       proc1()
       print “ j == %d and k == %d” %(j , k)

k = 7
proc1()
print “ j == %d and k == %d” % (j, k)

j = 8
proc2()
print “ j == %d and k == %d” % (j, k)

我认为这个脚本的输出应该只包含四个打印表达式,但运行它时结果是五个。此外,每一行的 j 和 k 的值也与我预期的相差很大。有人可以解释这是如何运行的吗?

如果您还可以详细说明这些代码块中的命名空间和作用域,我们将不胜感激。此外,这是我从当前配备 Python 2.7.14 的计算机上运行它时的输出。
output result ] 1

最佳答案

解释变量如何生存的小轮廓

Scope and liveness

编辑:“我们可以重用 j_1 因为以前的 j_1 和这个永远不会在一起”的部分实际上并不完全准确,因为在 proc2 中您调用 proc1所以他们确实住在一起。好蓝j_1 (j 在 proc2 实际上是 j_2 。我改变了轮廓。

关于python-2.7 - Python 中的命名空间和作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47864751/

相关文章:

python更改启动/默认目录

jquery - JQuery 中的变量作用域行为不当

python - 在 Python 中通过 TCP 套接字发送文件

Python 2.7 - 解包可迭代对象抛出语法错误

Java - 调用不在范围内的对象的方法( parent 的 child )

javascript - 将 jQuery 引用传递给回调或插件的标准方法

apache-flex - 不同的命名空间在 Flex 中意味着什么?

c# - 编译器以什么顺序搜索命名空间/二进制文件以查找变量名?

php - 为什么在 PHP 中使用 "use"关键字来导入核心标识符?

python - PyQt : switch windows/layouts created by Qt Designer