由于我是蟒蛇世界的新手,我今天向您询问使用其他python文件功能的最佳方法。
让我们举个例子:
- app/
- __init__.py
- helpers/
- __init__.py
- myhelper.py
- run.py
run.py
import app
app.setname("helloworld")
app.run()
应用/ __初始化__。PY
def setname(fname):
global name
name = fname
def run():
import helpers.myhelper as my_helper
my_helper.function()
应用/助手/ myhelper.py
from .. import name
def function:
return "hello world ! "+name
我的问题:在功能中使用导入是否清楚,因为我无法在顶部使用它?
使用像这样的全局变量是一种好方法吗?如你所知,在我的情况下我有多个全局变量等,这就是我做事的方式。
有什么建议吗?
答案 0 :(得分:3)
PEP8是Python代码风格的通用标准,声明:
导入总是放在文件的顶部,就在任何模块之后 注释和文档字符串,以及模块全局和常量之前。
所以不,在函数中间或代码顶部以外的任何地方进行导入并不清楚。
另请注意,name
可能是变量/函数名称的不良选择,因为它是像list,def,dict,'保留关键字'这样的词。可以与Python中用于其他事物的单词冲突。
PEP8建议使用同义词/替代词(这是我在这种情况下会做的),或附加下划线:name_
NB有一些用例需要在函数内部导入以避免循环导入,作用域等。这些可能包括测试,Flask webapps,但这些是特定的用例,并且应该遵循来自另一个模块的函数的一般访问PEP除非必要。然而,通常在这些情况下会进行此类进口,因此更清楚。
答案 1 :(得分:2)
您应遵循 PEP8 指南,但有例外。
如果您要导入的功能仅在您的功能中使用 ,则可以执行此操作。 注意只有在执行该功能时才会加载模块。这意味着如果您的环境缺少模块,只有在使用该功能时才会引发异常。
你应该避免这种情况,但是当没有其他选择时,它会运行。
答案 2 :(得分:1)
为什么不能在顶部导入它?进口是昂贵的(速度快),你可能不希望每次调用该功能时都导入相同的模块。此外,导入结果缓存在python中,使冗余导入更加浪费。