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

Joa*_*nge 114 python

如果文件中有方法集合,是否有办法将这些文件包含在另一个文件中,但是调用它们时没有任何前缀(即文件前缀)?

所以,如果我有:

[Math.py]
def Calculate ( num )
Run Code Online (Sandbox Code Playgroud)

我怎么称它为:

[Tool.py]
using Math.py

for i in range ( 5 ) :
    Calculate ( i )
Run Code Online (Sandbox Code Playgroud)

And*_*are 150

您需要将其他文件作为模块导入,如下所示:

import Math
Run Code Online (Sandbox Code Playgroud)

如果您不想在Calculate函数前添加模块名称,请执行以下操作:

from Math import Calculate
Run Code Online (Sandbox Code Playgroud)

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

from Math import *
Run Code Online (Sandbox Code Playgroud)

编辑: 这是Dive Into Python的一个很好的章节,在这个主题上更深入一些.

  • 值得注意的是,"来自Math import*"是[不推荐](https://www.python.org/dev/peps/pep-0008/#imports). (8认同)

Lou*_*uis 46

只需编写"include"命令:

import os

def include(filename):
    if os.path.exists(filename): 
        execfile(filename)


include('myfile.py')
Run Code Online (Sandbox Code Playgroud)

@Deleet:

@bfieck评论是正确的,对于python 2和3的兼容性,你需要:

Python 2和3:替代方案1

from past.builtins import execfile

execfile('myfile.py')
Run Code Online (Sandbox Code Playgroud)

Python 2和3:替代方案2

exec(compile(open('myfile.py').read()))
Run Code Online (Sandbox Code Playgroud)

  • 实际上python 3有另一个`compile()`签名而不是提到的签名.所以正确的Python 2和3:替代2将是:`exec(compile(source = open('myfile.py').read(),filename ='myfile.py',mode ='exec'))` (7认同)
  • @ naught101:这就是目标:运行代码,导入时不会发生这种情况.通常它只是定义变量. (4认同)
  • 是否有任何理由在`from module import*`上执行此操作?此外,如果您正在调用的文件在正文中有代码,那么如果您执行此操作,将运行该代码. (3认同)
  • 如果您希望在"include"的调用者范围内的包含文件中包含变量,则"include"辅助函数不起作用 (3认同)
  • @Deleet python 3没有`execfile` (2认同)

rye*_*guy 33

如果您使用:

import Math
Run Code Online (Sandbox Code Playgroud)

然后,这将允许您使用Math的函数,但您必须执行Math.Calculate,因此这显然是您不想要的.

如果要导入模块的函数而不必为它们添加前缀,则必须明确命名它们,如:

from Math import Calculate, Add, Subtract
Run Code Online (Sandbox Code Playgroud)

现在,您可以仅通过名称来引用Calculate,Add和Subtract.如果要从Math导入所有函数,请执行以下操作:

from Math import *
Run Code Online (Sandbox Code Playgroud)

但是,在使用您不确定的内容的模块时,您应该非常小心.如果导入两个包含相同函数名称定义的模块,则一个函数将覆盖另一个函数,而不是更聪明的函数.