这是我的项目结构:
a
├── b.py
└── __init__.py
>文件b.py为空.
>文件__init__.py是一行:
b = 'this is a str'
然后以下程序给出了a.b的不一致结果:
import a
print(a.b) # str
import a.b
print(a.b) # module
检测变量和文件名之间这种名称冲突的最佳方法是什么?
解决方法:
“以下程序给出了不一致的打印结果(a.b)”
我想指出,虽然结果可能不同,但事实上,Python并没有做任何不一致的事情.没有详细介绍,这就是程序中每一步所发生的事情.
进口一个
Python搜索sys.path上的目录,直到找到其中一个:一个名为“a.py”的文件,或一个名为“a”的目录,其中包含一个名为__init__.py的文件. Python然后imports你的package.值得注意的是,Python没有查看包“a”并自动导入所有“.py”文件(这节省了内存和时间).
打印(a.b)
Python查找a的属性b,它在__dict__属性中找到. b的值是’this is a string’,它被打印出来.
导入a.b.
Python导入你的模块.使用此语句,与__dict__中的键b对应的值将成为模块对象a.b.
打印(a.b)
Python查找属性b. b的值是打印的模块对象a.b.
“检测这种名称冲突的最佳方法是什么?”
您可以编写一个脚本来列出包中所有模块的名称,以及所有变量(本地和全局),并确定是否存在任何冲突.然而,恕我直言,在这种情况下,一盎司的预防值得一磅治疗; Python中的良好命名约定(一个很好的资源 – PEP8)是防止这样的错误的最佳方法.
标签:python
本文发布于:2024-02-03 00:26:11,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170689117247448.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |