[原文] P109
When a line of code asks for the value of a variable x, Python will search for that variable in all the available namespaces, in order:
- local namespace − specific to the current function or class method. If the function defines a local variable x, or has an argument x, Python will use this and stop searching
- global namespace − specific to the current module. If the module has defined a variable, function, or class called x, Python will use that and stop searching.
- built−in namespace − global to all modules. As a last resort, Python will assume that x is the name of built−in function or variable.
[pope 改进译]
当一行代码查询变量x的值时,Python将搜索全部可能的命名空间中的变量,如下顺序:
1.本地命名空间 - 具体为当前函数或类的方法。如果函数定义了本地变量x,或者 是 参数x,Python 将停止查找,使用这个。
2.全局命名空间 - 具体为当前的模块。如何模块中有定义变量,函数,或者类叫做x,Python 将停止查找,使用这个。
3.嵌入的命名空间 - 整体搜索全部模块。作为最后一次尝试(resort),Python将假定x 是嵌入的函数或变量的名字
如何Python没有在任何命名空间中找到x,它将放弃查找并起增加 NameError 的信息。这没有x命名的变量,你可以去看Example 3.18 Referencing an Unbound Variable ,但你之前没有意识到Python在给出你提示之前是如何工作的。
----------------------------------------------------------------------
[pope译]
当一行代码查询变量x的值时,Python将搜索全部命名空间中的变量,如下顺序:
1.本地命名空间 - 具体为当前函数或类的方法。如果函数定义了本地变量x,或者 是 自变量{argument}x,Python 将停止查找,使用这个。
2.全局命名空间 - 具体为当前的模块。如何模块中有定义变量,函数,或者类叫做x,Python 将停止查找,使用这个。
3.嵌入的命名空间 - 整体搜索全部模块。作为最后一次尝试(resort),Python将假定x 是嵌入的函数或变量的名字
如何Python没有在任何命名空间中找到x,它将放弃查找并起增加 NameError 的信息。这没有x命名的变量,你可以去看Example 3.18 Referencing an Unbound Variable ,但你之前没有意识到Python在给出你提示之前是如何工作的。
[net 译 来源:http://woodpecker.org.cn/diveintopython/html_processing/locals_and_globals.html]
当一行代码要使用变量 x 的值时,Python 会到所有可用的名字空间去查找变量,按照如下顺序:
- 局部名字空间――特指当前函数或类的方法。如果函数定义了一个局部变量 x,或一个参数 x,Python 将使用它,然后停止搜索。
- 全局名字空间――特指当前的模块。如果模块定义了一个名为 x 的变量,函数或类,Python 将使用它然后停止搜索。
- 内置名字空间――对每个模块都是全局的。作为最后的尝试,Python 将假设 x 是内置函数或变量。
如果 Python 在这些名字空间找不到 x,它将放弃查找并引发一个 NameError 异常,同时传递 There
is no variable named 'x' 这样一条信息,回到 例 3.18
“引用未赋值的变量”,您会看到一路上都有这样的信息。但是您并没有体会到 Python 在给出这样的错误之前做了多少的努力。
[popexizhi:
all the available namespace
[pope译]全部命名空间
[net 译]所有可用的名字空间
[popexizhi] available pope翻译时把这个丢了,没有了原文中的强调的含义,注意单词的细节使用
or has an argument x
[pope译]或者 是 自变量 x
[net 译]或一个参数 x
[popexizhi]argument 还是翻译为参数吧,
]
没有评论:
发表评论