如何使用另一个python文件的功能

时间:2017-10-09 19:32:03

标签: python python-import

由于我是蟒蛇世界的新手,我今天向您询问使用其他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

我的问题:在功能中使用导入是否清楚,因为我无法在顶部使用它?

使用像这样的全局变量是一种好方法吗?如你所知,在我的情况下我有多个全局变量等,这就是我做事的方式。

有什么建议吗?

3 个答案:

答案 0 :(得分:3)

PEP8是Python代码风格的通用标准,声明:

  

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

所以不,在函数中间或代码顶部以外的任何地方进行导入并不清楚。

另请注意,name可能是变量/函数名称的不良选择,因为它是像list,def,dict,'保留关键字'这样的词。可以与Python中用于其他事物的单词冲突。 PEP8建议使用同义词/替代词(这是我在这种情况下会做的),或附加下划线:name_

NB有一些用例需要在函数内部导入以避免循环导入,作用域等。这些可能包括测试,Flask webapps,但这些是特定的用例,并且应该遵循来自另一个模块的函数的一般访问PEP除非必要。然而,通常在这些情况下会进行此类进口,因此更清楚。

答案 1 :(得分:2)

您应遵循 PEP8 指南,但有例外。

如果您要导入的功能仅在您的功能中使用 ,则可以执行此操作。 注意只有在执行该功能时才会加载模块。这意味着如果您的环境缺少模块,只有在使用该功能时才会引发异常

你应该避免这种情况,但是当没有其他选择时,它会运行。

答案 2 :(得分:1)

为什么不能在顶部导入它?进口是昂贵的(速度快),你可能不希望每次调用该功能时都导入相同的模块。此外,导入结果缓存在python中,使冗余导入更加浪费。