Как включить внешний код 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.