ChatGPT解决这个技术问题 Extra ChatGPT

从另一个文件调用函数?

file.py 包含一个名为 function 的函数。我如何导入它?

from file.py import function(a,b)

上面给出了一个错误:

ImportError:没有名为“file.py”的模块;文件不是包

from file import function。无需文件扩展名或函数参数
您可能应该阅读 Python 教程中的 modules section
此外,如果您想从 file.py 导入函数,请确保您的目录中没有名称为 file 的包。
如果您有 ImportError 或 ModuleError 看到这个问题,这对我很有帮助stackoverflow.com/questions/31279446/…

M
Mateen Ulhaq

首先,从 file.py 导入 function

from file import function

稍后,使用以下命令调用该函数:

function(a, b)

请注意,file 是 Python 的核心模块之一,因此我建议您将 file.py 的文件名更改为其他名称。

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


“文件”只是我要问的问题的占位符,而不是实际的文件名。不过还是谢谢你。我会试试这个并回复你。
我试过了,但它仍然显示错误:它与 Python 3 有什么关系,还是一般问题?
@GamesBrainiac,如果您要从中导入函数的文件位于不同的目录中怎么办?我可以在文件名之前包含文件路径,还是有更复杂的东西?
@Tom您必须将该路径添加到 PYTHONPATH 变量中,如果它还没有在那里。
如果它们不在同一个目录中,有没有办法将函数从 a.py 导入到文件 b.py 中?
M
Mateen Ulhaq

导入时不要写.py

file_a.py 在其中包含一些函数:

def f():
  return 1

def g():
  return 2

要将这些函数导入 file_z.py,请执行以下操作:

from file_a import f, g

你也可以导入 *
@DimitarMarinov 用 * 替换文件名?
@Karlo,不,只是 *
使用“import *”被认为是一种不好的做法。显式优于隐式。
如果 a.py 在一个文件夹中,比如 fol1,那么它应该如何导入? @dimitar-marinov
a
abanmitra

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

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

https://i.stack.imgur.com/lZONx.png

在 - com.my.func.DifferentFunction python 文件中你有一些功能,比如:

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 中定义导入语句 - 用于导入所有函数的文件

from com.my.func.DifferentFunction import *

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

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

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

num1 = 20
num2 = 10

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

输出:

 add :  30

 sub :  10

 mul :  200

不鼓励 glob 导入。
忍不住要指出类似 Java 的文件结构...... com.my.example.. 有点戳到我的眼睛里,虽然它可能只是我。
运行代码的工作目录应该是什么?
我正在从“Example3.py”文件中执行这个加法或乘法函数。
M
Mateen Ulhaq

方法 1. 从 file.py 中导入您想要的特定函数:

from file import function

方法2.导入整个文件:

import file as fl

然后,要调用 file.py 中的任何函数,请使用:

fl.function(a, b)

J
Juan Ossa

您也可以从不同的目录调用该函数,以防您不能或不想在您正在工作的同一目录中使用该函数。您可以通过两种方式做到这一点(也许有更多的选择,但这些是对我有用的)。

备选方案 1 临时更改您的工作目录

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

import sys

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

from file import function

与向 PYTHONPATH 添加路径不一样吗?
这是在我想“借用”一些外部代码而不复制或修改的特殊情况下为我工作的那个。
M
Mateen Ulhaq

修理

ModuleNotFoundError:没有命名的模块

尝试在文件名前使用点 (.) 进行相对导入:

from .file import function

请对此有任何解释吗?
拯救了我的一天,谢谢。 '。'指向当前工作目录
W
Weky

.py 文件中的函数(可以(当然)在不同的目录中)可以通过先写入目录然后不带 .py 扩展名的文件名来简单地导入:

from directory_name.file_name import function_name

稍后使用:function_name()


m
misterrodger

将模块重命名为“文件”以外的名称。

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

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

import module
module.function_name()

或者

import pizza
pizza.pizza_function()

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

from pizza import pizza_function
pizza_function()

或者

from pizza import pizza_function as pf
pf()

或者

from pizza import *
pizza_function()

P
Peter Mortensen

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

def xyz():

        --------

        --------

def abc():

        --------

        --------

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

文件名:my_example2.py

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

import my_example.py


a = my_example.xyz()

b = my_example.abc()

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


我不知道我的失败是否与 python 版本有关。我选择这个示例是 import fn(不带扩展名)并直接在主文件 fn.my_funcion() 上使用它们。当我使用 import fn.py 尝试加载 py.py 文件时,它不存在。使用 from fn.py import funcname 也没有用。谢谢你。
M
Mahabubuzzaman

在 MathMethod.Py 中。

def Add(a,b):
   return a+b 

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

内部 Main.Py

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

输出:1200


J
JoSSte

如果要导入与运行代码相同的目录中的文件,请在文件名前附加一个点 .

例如,我正在运行一个名为 a.py 的文件,我想导入一个名为 addFun 的方法,该方法写在 b.py 中,而 b.py 位于同一目录中

from .b import addFun

P
Peter Mortensen

您不必添加 file.py

只需将文件与要导入的文件保存在同一位置即可。然后只需导入您的功能:

from file import a, b

哦,当然不是。我不是要输入 .py 这是一个错字
A
ASE

解决方案 1:在一个文件 myfun.py 中定义任何函数。

# functions
def Print_Text():
    print( 'Thank You')

def Add(a,b):
    c=a+b
    return c 

在另一个文件中:

#Import defined functions
from myfun import *

#Call functions
Print_Text()
c=Add(1,2)

解决方案2:如果上述解决方案不适用于 Colab

创建一个文件夹myfun 在此文件夹中创建一个文件 __init__.py 将所有函数写入 __init__.py 从 Colab 笔记本中导入函数 from myfun import *


P
Peter Mortensen

您应该将该文件与您尝试导入的 Python 文件的位置相同。 '从文件导入功能'也足够了。


n
noone

上述任何解决方案都不适合我。我收到 ModuleNotFoundError: No module named whtever 错误。所以我的解决方案是像下面这样导入

from . import filename # without .py  

在我的第一个文件中,我定义了 fun 函数,如下所示

# file name is firstFile.py
def fun():
  print('this is fun')

在第二个文件中可以说我想调用函数 fun

from . import firstFile

def secondFunc():
   firstFile.fun() # calling `fun` from the first file

secondFunc() # calling the function `secondFunc` 

A
Amir Md Amiruzzaman

假设你要调用的文件是anotherfile.py,你要调用的方法是method1,那么先导入文件再导入方法

from anotherfile import method1

如果method1是一个类的一部分,让这个类是class1,那么

from anotherfile import class1

然后创建一个class1的对象,假设对象名是ob1,那么

ob1 = class1()
ob1.method1()

b
bresleveloper

在我的情况下,我将我的文件命名为 helper.scrap.py,但在更改为 helper.py 之前无法使其工作


我不认为你可以拥有。或 - 在文件名中
M
Mansur Ul Hasan

在我的主脚本 detectiveROB.py 文件中,我需要调用 passGen 函数来生成密码哈希并且该函数在 modules\passwordGen.py

对我来说最快和最简单的解决方案是

下面是我的目录结构

https://i.stack.imgur.com/0fgBP.png

所以在 detectiveROB.py 我已经使用以下语法导入我的函数

from modules.passwordGen import passGen

https://i.stack.imgur.com/VNC1O.png


A
Aniket Malik

只是一个快速的建议,那些相信通过按 alt+ 自动导入的人进入 Pycharm 并且无法获得帮助。

只需通过以下方式更改要导入的文件名:右键单击文件并单击重构-> 重命名。您的自动导入选项将开始出现