Ответ 1
Вы могли бы сделать
puzzle = __import__('8puzzle')
Очень интересная проблема. Я помню, чтобы не называть ничего с номером.
Если вы хотите import *
- вы должны проверить этот вопрос и ответить.
В основном есть файл с именем 8puzzle.py
, и я хочу импортировать файл в другой файл (в той же папке, и я не могу изменить имя файла, поскольку файл предоставлен). Есть ли все-таки сделать это в Python? Я пробовал обычный способ from 8puzzle import *
, это дает мне ошибку.
Ошибка:
>>> import 8puzzle
File "<input>", line 1
import 8puzzle
^
SyntaxError: invalid syntax
>>>
Вы могли бы сделать
puzzle = __import__('8puzzle')
Очень интересная проблема. Я помню, чтобы не называть ничего с номером.
Если вы хотите import *
- вы должны проверить этот вопрос и ответить.
Вышеуказанные ответы верны, но на данный момент рекомендуется использовать import_module
:
importlib.import_module(name, package=None)
Импортируйте модуль. Имя аргумент указывает, какой модуль импортировать в абсолютном или относительном выражении (например, либоpkg.mod
, либо..mod
). Если имя указано в относительном терминов, то аргумент пакета должен быть установлен на имя пакет, который должен выступать в качестве якоря для разрешения имени пакета (например,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()
.
Не используйте расширение .py
в своих импортах.
Работает ли from 8puzzle import *
?
Для того, что стоит, from x import *
не является предпочтительным шаблоном Python, поскольку он пропускает это пространство имен модулей в ваш текущий контекст.
В общем, попробуйте импортировать вещи, которые вы специально хотите от этого модуля. Любой глобальный из другого модуля можно импортировать.
например, если у вас есть 8puzzle.foo
, вы можете сделать `из импорта 8puzzle
В то время как мое сообщение .py
верное, этого недостаточно.
Предложение другого плаката __import__('8puzzle')
верно. Однако Я настоятельно рекомендую избегать этого шаблона.
Во-первых, он зарезервировал внутренний, частный метод Python. Вы в основном нарушаете фундаментальные предположения о том, что значит иметь возможность импортировать модуль. Простое переименование файла на что-то еще, например puzzle8
, исправит это.
Это отвлечет внимание от опытных программистов на Python, которые ожидают узнать, что ваш импорт находится наверху, и ожидают, что код (попытаться) будет соответствовать PEP8.