Python 从另一个文件导入函数,从何处导入其他库?

Python 从另一个文件导入函数,从何处导入其他库?,python,python-3.x,Python,Python 3.x,一个简单的问题,我找了也没用。假设我有一个文件“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]) #funcs.py import pandas as pd def make_d

一个简单的问题,我找了也没用。假设我有一个文件“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])
#funcs.py
import pandas as pd

def make_df():
    return pd.DataFrame(index=[1,2,3],data=[1,2,3])
我是否将其放在funcs.py中的函数之外

#funcs.py
def make_df():
    import pandas as pd
    return pd.DataFrame(index=[1,2,3],data=[1,2,3])
#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()

谢谢和亲切的问候。

直接从

导入总是放在文件的顶部,就在任何模块之后 注释和文档字符串,以及模块全局变量和常量之前


最佳做法是在执行任何其他编码之前,在脚本文件的前几行执行所有导入操作。

最佳做法是在
funcs.py

没有必要,也不应该在
main.py
中包含
pandas

基本上,当您使用
导入pandas
pandas
库成为代码的一部分时。

\35; 3不起作用。在大多数情况下,#2是首选选项(如果库是仅由该函数使用的大型(导入速度较慢)库,则主要例外)。您可能还需要考虑其中一个选项(可选依赖项):

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

在模块
func
中定义的函数中使用名称
pd
时,它将首先在函数中查找局部变量
pd
,如果它不存在, 它将在其模块的名称空间
func
中查找它。即使调用函数的代码在main.py中,它也不会在模块
main
中查找它

这被称为词法作用域-规则是变量的查找靠近代码的定义位置,而不是代码的使用位置。有些语言确实会查找代码使用位置附近的变量,称为动态作用域-在其中一种语言中,类似于您的解决方案#3的方法可以工作,但包括Python在内的大多数语言都遵循词法作用域规则,因此无法工作

因此,熊猫必须以funcs.py进口。main.py不必导入甚至 了解熊猫的使用方法
make_df

如果在func.py顶部导入熊猫,则从main.py导入模块
func
时,将执行func.py顶部的行
import pandas as pd
,将加载熊猫模块,并在绑定到名称
pd
func
中创建对其的引用。不需要在main.py中重新导入它

如果您在main.py中重新导入pandas,Python将足够聪明,不会因为您在两个地方导入了整个模块而重新加载整个模块,它只会给您一个对已加载pandas模块的引用


将导入放在函数体中会起作用,但这被认为是不好的做法,除非您有很好的理由这样做。导入通常位于使用它们的文件的顶部。

惯例说导入语句位于文件的顶部。因此,不应使用函数中包含import的第一个示例。但是最后两个例子看起来是正确的。import语句应该在使用它的文件中。因此,它应该在funcs.py中,最好在函数外部,因此如果需要在同一文件中的另一个函数中使用相同的包,则无需再次导入。希望它有帮助该链接没有太大帮助,因为它显示了根据Pep8规则导入的最佳实践。OP的问题有两个方面:从何处导入和如何导入你是对的,我从文档中添加了相关的引用,希望是clearerOk coolio,干杯。我试着考虑逻辑。因此,如果从另一个文件导入函数,它不仅会将该函数作为独立的代码段导入,还会导入该函数使用的任何库依赖项(这些依赖项是在其本机文件中导入的)。是的。就像您在主菜单中导入
func.py
(或其中的一个函数)“成为代码的一部分”听起来就像您在使用pandas import*中的