map*_*ple 5 import python-import python-3.x
我遇到了类似的问题,可以简化如下:
例如我有一个文件结构如下:
----folder
---- main.py
---- math.py
Run Code Online (Sandbox Code Playgroud)
我在 中定义了一个函数math.py,我想将其导入math.py到 中main.py。
中的代码math.py如下
# math.py
def f(x) :
return x**3
Run Code Online (Sandbox Code Playgroud)
如果我编写main.py如下代码
# main.py
import math
def main() :
print(math.f(3))
if __name__ == "__main__":
main()
Run Code Online (Sandbox Code Playgroud)
然后它返回AttributeError: module 'math' has no attribute 'f'
如果我编写main.py如下代码
# main.py
from . import math
def main() :
print(math.f(3))
if __name__ == "__main__":
main()
Run Code Online (Sandbox Code Playgroud)
然后它返回ImportError: cannot import name 'math' from '__main__' (main.py)
我的问题:
如果我只想导入与内置模块同名的math.py路径中的模块,我该怎么办?folder
如果我想同时main.py使用my 中定义的和内置的,我该怎么办? math.f(x)math.pymath.acos(x)
PS:我遇到了类似的问题,因为我有十年前某人写的长代码。当时没有这样名称的内置模块(实际上它不是math模块。我只是通过上面的问题简化了问题)。而且这个模块的功能已经被很多地方用到了。因此,更改模块的名称几乎是不可能的,因为如果是这样,我需要仔细更改所有站点module.function()。
小智 5
以内置模块命名模块是非常糟糕的做法。我建议将您的 math.py 命名为其他名称。
话虽如此,您可以使用带有 imp 的路径导入它:
import imp
math = imp.load_source('math', './math.py')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2011 次 |
| 最近记录: |