如何包含在其他文件中使用的外部 Python 代码?

如果你有一个文件中的方法集合,有没有一种方法可以将这些文件包含在另一个文件中,但是不带任何前缀(即文件前缀)调用它们?

因此,如果我有:

[Math.py]
def Calculate ( num )

怎么说呢:

[Tool.py]
using Math.py


for i in range ( 5 ) :
Calculate ( i )
276665 次浏览

如果你使用:

import Math

那么你就可以使用数学的函数,但是你必须学习数学。计算,所以这显然是你不想要的。

如果您想导入模块的函数而不需要为它们加上前缀,那么您必须显式地为它们命名,比如:

from Math import Calculate, Add, Subtract

现在,您可以仅通过它们的名称来引用 Calculate、 Add 和扣除。如果要从 Math 导入所有函数,请执行:

from Math import *

但是,在使用内容不确定的模块时,应该非常小心

您需要像下面这样导入另一个文件:

import Math

如果您不想在 Calculate函数前面加上模块名,那么可以这样做:

from Math import Calculate

如果要导入模块的所有成员,请执行以下操作:

from Math import *

编辑: 这是一个很好的章节 from 深入巨蟒,在这个主题上进行了更深入的讨论。

只需写下“ 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()))

我发现 Python 检查模块非常有用

例如 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 ()将返回控制台或脚本 _ < em > name _,而执行 test.dostuff ()将返回 python 模块名称。

我要强调评论中的一个答案,这个答案对我很有用。正如 mikey 所说,如果您希望在‘ include’的调用程序的作用域中包含文件中的变量,只需将其作为普通 python 插入即可。它的工作原理类似于 PHP 中的 include 语句。在 Python 3.8.5中工作。

第一个选择

import textwrap
from pathlib import Path
exec(textwrap.dedent(Path('myfile.py').read_text()))

第二个选择

with open('myfile.py') as f: exec(f.read())

我更喜欢选择 # 2,并一直在使用它在我的网站开发。

这很简单: 你可以这样做:

def run_file(path):
return exec(open(path).read());


run_file("myfile.py");