这是我的项目结构:
a
??? b.py
??? __init__.py
Run Code Online (Sandbox Code Playgroud)
文件b.py为空.
文件__init__.py是一行:
b = 'this is a str'
Run Code Online (Sandbox Code Playgroud)然后,以下程序给出了不一致的结果a.b:
import a
print(a.b) # str
import a.b
print(a.b) # module
Run Code Online (Sandbox Code Playgroud)
检测变量和文件名之间这种名称冲突的最佳方法是什么?
print(a.b)"我想指出,虽然结果可能不同,但事实上,Python并没有做任何不一致的事情.没有详细介绍,这就是程序中每一步所发生的事情.
import aPython搜索目录,sys.path直到找到其中一个:一个名为"a.py"的文件,或一个名为"a"的目录,其中包含一个名为的文件__init__.py.然后Python 导入你的包.值得注意的是,Python没有查看包"a"并自动从中导入所有".py"文件(这节省了内存和时间).
print (a.b)Python查找它在属性b中a找到a的__dict__属性.bis 的值'this is a string'是打印的.
import a.bPython导入你的模块.使用此语句,与s b内a的键对应的值将__dict__成为模块对象a.b.
print (a.b)Python查找属性b.值的值是打印b的模块对象a.b.
您可以编写一个脚本来列出包中所有模块的名称,以及所有变量(本地和全局),并确定是否存在任何冲突.然而,恕我直言,在这种情况下,一盎司的预防值得一磅治疗; Python中的良好命名约定(一个很好的资源 - PEP8)是防止这样的错误的最佳方法.
| 归档时间: |
|
| 查看次数: |
195 次 |
| 最近记录: |