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
如何解决此问题?
进口时不需要增加
注意,如果您试图将函数从
首先,你不需要一个
如果您有一个文件
1 2 3 4 5 6 7 | def b(): # Something return 1 def c(): # Something return 2 |
你想把它们进口到
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格式保存文件(例如,
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() |
您不必添加
只需将文件与要从中导入的文件保持在同一位置。然后导入函数:
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项目中有以下包结构:
在-
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 |
您想从
在
1 | from com.my.func.DifferentFunction import * |
或定义要导入的每个函数名
1 | from com.my.func.DifferentFunction import add, sub, mul |
然后在
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文件位于同一位置。"从文件导入函数"也足够了。
在我的案例中,我将我的文件命名为
假设要调用的文件是anotherfile.py,而要调用的方法是method1,然后首先导入该文件,然后导入该方法
1 | from anotherfile import method1 |
如果method1是类的一部分,则将该类设为Class1,然后
1 | from anotherfile import class1 |
然后创建Class1对象,假设对象名为ob1,然后
1 2 | ob1 = class1() ob1.method1() |