|
|
1
27
我相信“在你的程序中”你是在说一个进口 里面 函数定义:
任何
函数中的名称可能引用全局模块,因为
放
2013年4月编辑: 在研究其他内容时,我发现这个限制是在python2.1中引入的,这是 "Nested Scopes" feature PEP 227 ). 引用链接:
这澄清了评论中讨论的python3.x对2.x的行为。它总是与语言规范相反,但是cpython2.1到2.7只会为
编辑之子: |
|
|
2
16
在任何词汇层面上,
这种杂乱无章的结构使得阅读代码的穷人(通常是注定要帮助调试代码的人)很难理解神秘出现的名字是从哪里来的——如果该结构在词汇级别上被多次使用,这是不可能的;但是即使只使用了一次,它也会迫使整个模块费力地重新阅读每次在你说服自己之前,是的,那肮脏的裸名一定来自模块。
另外,模块作者通常不会去极端麻烦需要“支持”可怕的建设问题。如果在你的代码中有,比如说,使用
在函数中
,一种添加和重写任意本地名称的方法会更糟。作为一个基本但至关重要的优化,Python编译器在函数体中查找每个barename上的任何赋值或其他绑定语句,并将它看到的那些被赋值的名称视为“本地的”(其他名称必须是全局的或内置的)。带着一个
转到任何Python交互提示。类型
在限定名为 更可取的是,你基本上是在做 相反的 关于这一明智的建议:与其欣赏名称空间的伟大和单调,还不如做更多的事情,你是 两个非常好的、随时可用的名称空间(你要导入的模块的名称空间和你要导入的词法作用域的名称空间)构成了一个单一的、不神圣的、有缺陷的、缓慢的、僵硬的、无法使用的混乱。
如果我能回去换衣服
Python中的早期设计决策(这是一个艰难的选择,因为
|
|
|
3
13
这个 release notes for Python 2.1 似乎可以解释为什么存在这种限制:
|
|
4
4
... 它对于快速脚本和shell探索非常方便。
|
|
|
5
1
一点也不禁止。它工作得很好,但是你会得到一个警告,因为它通常是一个坏主意(因为其他人已经进入的原因)。如果愿意,可以取消显示警告;警告模块就是您想要的。 |
|
|
6
0
|