从另一个文件导入函数,在哪里导入其他库?

2024-04-30

很简单的问题,我搜了一下没有结果。假设我有一个文件“funcs.py”,其中有一个我想调用当前脚本的函数。该函数使用另一个库(例如 pandas),我在哪里导入该库?约定是什么?

我是否将它放在 funcs.py 的函数内?

#funcs.py
def make_df():
    import pandas as pd
    return pd.DataFrame(index=[1,2,3],data=[1,2,3])

我把它outsidefuncs.py 中的函数?

#funcs.py
import pandas as pd

def make_df():
    return pd.DataFrame(index=[1,2,3],data=[1,2,3])

或者我是否将其放入我正在使用的当前脚本中?

#main.py
import pandas as pd

from funcs import make_df

df = make_df()

谢谢并致以亲切的问候。


在Python中每个文件都是一个module。每个模块都有自己的名称空间- 它自己的一组变量。每个函数也有自己的本地命名空间。

当你使用这个名字时pd在模块中定义的函数中func,它会首先寻找局部变量pd在函数中 - 如果它不存在, 它将在其模块的名称空间中查找它,func。它会not在模块中查找它main,即使调用该函数的代码位于 main.py 中

这称为词法作用域 - 规则是在靠近代码的位置查找变量defined,不是它所在的地方used。有些语言确实会查找靠近代码使用位置的变量,这称为动态作用域 - 在其中一种语言中,像您的解决方案 #3 这样的东西可以工作,但包括 Python 在内的大多数语言都遵循词法作用域规则,因此它不起作用。

所以必须在 funcs.py 中导入 pandas 。 main.py 不必导入,甚至不必导入 了解有关 pandas 的任何信息以供使用make_df.

如果您在 func.py 顶部导入 pandas,那么当您导入模块时func来自 main.py,该行import pandas as pdfunc.py 顶部的内容将被执行,pandas 模块将被加载,并在中创建对它的引用func与名字绑定pd。无需在 main.py 中重新导入它。

如果你在 main.py 中重新导入 pandas,Python 会足够聪明,不会仅仅因为你在两个地方导入它而重新加载整个模块,它只会为你提供对已加载的 pandas 模块的引用。

将导入放入函数体内是可行的,但这不被认为是好的做法,除非您有充分的理由这样做。通常导入位于使用它们的文件顶部。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从另一个文件导入函数,在哪里导入其他库? 的相关文章

随机推荐