Как включить внешний код Python для использования в других файлах? - PullRequest
112 голосов
/ 03 апреля 2009

Если у вас есть набор методов в файле, есть ли способ включить эти файлы в другой файл, но вызывать их без какого-либо префикса (то есть префикса файла)?

Итак, если у меня есть:

[Math.py]
def Calculate ( num )

Как я могу назвать это так:

[Tool.py]
using Math.py

for i in range ( 5 ) :
    Calculate ( i )

Ответы [ 4 ]

147 голосов
/ 03 апреля 2009

Вам нужно будет импортировать другой файл как модуль:

import Math

Если вы не хотите добавлять префикс вашей функции Calculate к имени модуля, сделайте следующее:

from Math import Calculate

Если вы хотите импортировать всех членов модуля, сделайте следующее:

from Math import *

Редактировать: Вот хорошая глава из Dive Into Python , в которой мы немного углубимся в эту тему.

45 голосов
/ 17 мая 2013

Просто напишите команду «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()))
33 голосов
/ 03 апреля 2009

Если вы используете:

import Math

тогда это позволит вам использовать математические функции, но вы должны сделать Math.Calculate, так что это, очевидно, то, что вы не хотите.

Если вы хотите импортировать функции модуля без префикса, вы должны явно назвать их, например:

from Math import Calculate, Add, Subtract

Теперь вы можете ссылаться на «Вычислять, складывать и вычитать» только по их именам. Если вы хотите импортировать ВСЕ функции из Math, выполните:

from Math import *

Однако вы должны быть очень осторожны, когда делаете это с модулями, в содержимом которых вы не уверены. Если вы импортируете два модуля, которые содержат определения для одного и того же имени функции, одна функция перезапишет другую, и вы ничего не узнаете.

0 голосов
/ 12 ноября 2013

Я нашел модуль Python Inspect очень полезным

Например, с teststuff.py

import inspect

def dostuff():
    return __name__

DOSTUFF_SOURCE = inspect.getsource(dostuff)

if __name__ == "__main__":

    dostuff()

А из другого скрипта или консоли python

import teststuff

exec(DOSTUFF_SOURCE)

dostuff()

А теперь dostuff должно находиться в локальной области видимости, а dostuff () вернет консоль или сценарии _ name _ выполнение test.dostuff () вернет имя модуля python.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...