Как включить внешний код Python для использования в других файлах?
Если у вас есть набор методов в файле, есть ли способ включить эти файлы в другой файл, но вызывать их без префикса (например, префикс файла)?
Итак, если у меня есть:
[Math.py]
def Calculate ( num )
Как мне это назвать следующим образом:
[Tool.py]
using Math.py
for i in range ( 5 ) :
Calculate ( i )
Ответы
Ответ 1
Вам нужно будет импортировать другой файл в виде модуля:
import Math
Если вы не хотите префикс своей функции Calculate
с именем модуля, сделайте следующее:
from Math import Calculate
Если вы хотите импортировать все члены модуля, сделайте следующее:
from Math import *
Изменить: Вот хорошая глава из Dive Into Python, который пойдет по этому вопросу более подробно.
Ответ 2
Просто напишите команду "include":
import os
def include(filename):
if os.path.exists(filename):
execfile(filename)
include('myfile.py')
@Deleet:
@bfieck замечательно, для совместимости с python 2 и 3 вам нужно:
Python 2 и 3: альтернатива 1
from past.builtins import execfile
execfile('myfile.py')
Python 2 и 3: альтернатива 2
exec(compile(open('myfile.py').read()))
Ответ 3
Если вы используете:
import Math
то это позволит вам использовать функции Math, но вы должны выполнить Math.Calculate, так что это явно то, чего вы не хотите.
Если вы хотите импортировать функции модуля без необходимости их префикса, вы должны явно называть их, например:
from Math import Calculate, Add, Subtract
Теперь вы можете ссылаться на Calculate, Add и Subtract только по их именам. Если вы хотите импортировать ВСЕ функции из Math, выполните:
from Math import *
Однако вы должны быть очень осторожны, когда делаете это с модулями, содержимое которых вы не уверены. Если вы импортируете два модуля, которые содержат определения для одного и того же имени функции, одна функция перезапишет другую, а вы не будете мудрее.
Ответ 4
Я нашел, что модуль проверки python очень полезен
Например, с помощью teststuff.py
import inspect
def dostuff():
return __name__
DOSTUFF_SOURCE = inspect.getsource(dostuff)
if __name__ == "__main__":
dostuff()
И из другого script или консоли python
import teststuff
exec(DOSTUFF_SOURCE)
dostuff()
И теперь dostuff должен находиться в локальной области, а dostuff() будет возвращать консоль или скрипты _name _, тогда как выполнение test.dostuff( ) вернет имя модуля python.