很简单的问题,我搜了一下没有结果。假设我有一个文件“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 pd
func.py 顶部的内容将被执行,pandas 模块将被加载,并在中创建对它的引用func
与名字绑定pd
。无需在 main.py 中重新导入它。
如果你在 main.py 中重新导入 pandas,Python 会足够聪明,不会仅仅因为你在两个地方导入它而重新加载整个模块,它只会为你提供对已加载的 pandas 模块的引用。
将导入放入函数体内是可行的,但这不被认为是好的做法,除非您有充分的理由这样做。通常导入位于使用它们的文件顶部。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)