html tool

2013年3月6日星期三

Dive into Python 的我的翻译 IXXXV------8.5 III


       [原文] 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:
  1. 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
  2. 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.
  3. 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.
If Python doesn't find x in any of these namespaces, it gives up and raises a NameError with the message There is no variable named 'x', which you saw back in Example 3.18, ?Referencing an Unbound Variable?, but you didn't appreciate how much work Python was doing before giving you that error.

[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 会到所有可用的名字空间去查找变量,按照如下顺序:
  1. 局部名字空间――特指当前函数或类的方法。如果函数定义了一个局部变量 x,或一个参数 x,Python 将使用它,然后停止搜索。
  2. 全局名字空间――特指当前的模块。如果模块定义了一个名为 x 的变量,函数或类,Python 将使用它然后停止搜索。
  3. 内置名字空间――对每个模块都是全局的。作为最后的尝试,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 还是翻译为参数吧, 都被自己转的不知;另外的问题:a 和 an 应该如何翻译会好一点,完全不翻译想现在一定是不好的,语义丢失的太多了。再想想吧。

]    

没有评论:

发表评论