基本上有一个文件被调用8puzzle.py,我想将文件导入另一个文件(在同一文件夹中,我不能在提供文件时更改文件名).无论如何在Python中这样做?我试过通常的方式from 8puzzle import *,它给了我一个错误.
错误是:
>>> import 8puzzle
File "<input>", line 1
import 8puzzle
^
SyntaxError: invalid syntax
>>>
Run Code Online (Sandbox Code Playgroud)
Yuj*_*ita 75
你可以做到
puzzle = __import__('8puzzle')
Run Code Online (Sandbox Code Playgroud)
非常有趣的问题.我记得不要用数字命名任何东西.
如果你愿意import *- 你应该看看这个问题和答案.
lai*_*e9m 28
以上答案是正确的,但就目前而言,推荐的方法是使用import_module功能:
importlib.import_module(name, package=None)
导入模块.name参数指定以绝对或相对术语导入的模块(例如,pkg.mod或者..mod).如果以相对术语指定名称,则必须将package参数设置为包的名称,该包用作解析包名称的锚点(例如,import_module('..mod', 'pkg.subpkg')将导入pkg.mod).import_module()函数充当简化包装器
importlib.__import__().这意味着函数的所有语义都是从中派生出来的importlib.__import__().这两个函数之间最重要的区别是import_module()返回指定的包或模块(例如pkg.mod),同时__import__()返回顶级包或模块(例如pkg).如果要动态导入自解释器开始执行以来创建的模块(例如,创建了Python源文件),则可能需要调用
invalidate_caches()以便导入系统注意到新模块.
__import__ 现在不推荐.
importlib.__import__(name, globals=None, locals=None, fromlist=(), level=0)
内置__import__()函数的实现.注意编程模块的导入应使用
import_module()而不是此功能.
小智 5
文件目录结构如下:
daily
-- 20210504
permutations.py
__init__.py
__init__.py
Run Code Online (Sandbox Code Playgroud)
您可以permutations通过__import__或导入模块importlib.import_module。
官方文档建议使用importlib.import_module.
导入(名称,全局=无,本地=无,fromlist =(),级别= 0) - >模块
导入一个模块。由于此函数仅供 Python 解释器使用而不是一般用途,因此最好以
useimportlib.import_module()编程方式导入模块。
有什么不同?
如果使用__import__. 例如:
res = __import__('daily.20210504.permutations')
Run Code Online (Sandbox Code Playgroud)
所以,如果想要获取permutations模块,需要提供fromlist参数,其写法如下。
res = __import__('daily.20210504.permutations', fromlist=('daily.20210504'))
Run Code Online (Sandbox Code Playgroud)
如果我使用怎么办importlib.import_module?
res = importlib.import_module('daily.20210504.permutations')
Run Code Online (Sandbox Code Playgroud)
permutations这允许您直接获取模块。