从Python中的另一个文件调用函数

Call a function from another file in Python

设置:对于程序中需要使用的每个函数,我都有一个.py文件。

在这个程序中,我需要从外部文件调用函数。

我试过了:

1
from file.py import function(a,b)

但我得到了错误:

ImportError: No module named 'file.py'; file is not a package

如何解决此问题?


进口时不需要增加file.py。只需编写from file import function,然后使用function(a, b)调用函数。这可能不起作用的原因是file是Python的核心模块之一,所以我建议您更改文件名。

注意,如果您试图将函数从a.py导入到名为b.py的文件中,则需要确保a.pyb.py在同一目录中。


首先,你不需要一个.py

如果您有一个文件a.py,并且在其中有一些功能:

1
2
3
4
5
6
7
def b():
  # Something
  return 1

def c():
  # Something
  return 2

你想把它们进口到z.py里,你得写

1
from a import b, c


你可以用两种方法来做到这一点。首先是从file.py导入您想要的特定函数。这样做使用

1
from file import function

另一种方法是导入整个文件

1
import file as fl

然后可以使用

1
fl.function(a,b)

您也可以从其他目录调用该函数,以防您不能或不希望该函数位于正在工作的同一目录中。你可以用两种方式做到这一点(也许还有更多的选择,但这些都是对我有效的选择)。

替代方案1临时更改工作目录

1
2
3
4
5
6
7
import os

os.chdir("**Put here the directory where you have the file with your function**")

from file import function

os.chdir("**Put here the directory where you were working**")

替代方案2将函数所在的目录添加到sys.path

1
2
3
4
5
import sys

sys.path.append("**Put here the directory where you have the file with your function**")

from file import function


首先以.py格式保存文件(例如,my_example.py)。如果这个文件有功能,

1
2
3
4
5
6
7
8
9
10
11
def xyz():

        --------

        --------

def abc():

        --------

        --------

在调用函数中,只需键入以下行即可。

文件名:my-example2.py

===================

1
2
3
4
5
6
import my_example.py


a = my_example.xyz()

b = my_example.abc()

===================


遇到了相同的功能,但我必须做下面的工作才能使它工作。

如果看到"modulenotfounderror:no module named",可能需要在文件名前面加上点(.),如下所示;

from .file import funtion


将模块重命名为"file"以外的其他名称。

然后还要确保在调用函数时:

1)如果要导入整个模块,请在调用时重复模块名:

1
2
import module
module.function_name()

1
2
import pizza
pizza.pizza_function()

2)或者,如果要导入特定函数、带有别名的函数或所有使用*的函数,则不必重复模块名:

1
2
from pizza import pizza_function
pizza_function()

1
2
from pizza import pizza_function as pf
pf()

1
2
from pizza import *
pizza_function()

您不必添加file.py

只需将文件与要从中导入的文件保持在同一位置。然后导入函数:

1
from file import a, b


在MathMethod.py中。

1
2
3
4
5
def Add(a,b):
   return a+b

def subtract(a,b):
  return a-b

内部主

1
2
import MathMethod as MM
  print(MM.Add(200,1000))

产量:1200


如果您的文件处于不同的包结构中,并且您希望从不同的包中调用它,那么您可以以这种方式调用它:

假设您的python项目中有以下包结构:

Python package and file structure

在-com.my.func.DifferentFunctionpython文件中,您有一些功能,例如:

1
2
3
4
5
6
7
8
def add(arg1, arg2):
    return arg1 + arg2

def sub(arg1, arg2) :
    return arg1 - arg2

def mul(arg1, arg2) :
    return arg1 * arg2

您想从Example3.py调用不同的函数,然后按照以下方法进行调用:

Example3.py文件中为import all函数定义import语句

1
from com.my.func.DifferentFunction import *

或定义要导入的每个函数名

1
from com.my.func.DifferentFunction import add, sub, mul

然后在Example3.py中,可以调用函数来执行:

1
2
3
4
5
6
7
8
9
num1 = 20
num2 = 10

print("
 add :"
, add(num1,num2))
print("
 sub :"
, sub(num1,num2))
print("
 mul :"
, mul(num1,num2))

输出:

1
2
3
4
5
 add :  30

 sub :  10

 mul :  200

您应该将该文件与要导入的python文件位于同一位置。"从文件导入函数"也足够了。


在我的案例中,我将我的文件命名为helper.scrap.py,直到我改为helper.py,它才起作用。


假设要调用的文件是anotherfile.py,而要调用的方法是method1,然后首先导入该文件,然后导入该方法

1
from anotherfile import method1

如果method1是类的一部分,则将该类设为Class1,然后

1
from anotherfile import class1

然后创建Class1对象,假设对象名为ob1,然后

1
2
ob1 = class1()
ob1.method1()