【问题标题】:Nested function causing troubles嵌套函数导致麻烦
【发布时间】:2017-06-12 15:37:28
【问题描述】:

我有一个 Python 脚本。 我在这个脚本中有几个函数,我决定将它们移到主脚本旁边的“包”文件夹中。 在这个文件夹中,我创建了一个 *.py 文件,其中放置了我的所有函数。 我在“package”文件夹中的这个文件附近放置了一个空的 init.py。

当我的主脚本代码开始时:

from package_folder.my_functions import *

从该文件调用每个函数时,该脚本运行良好。

但是当尝试直接导入时:

import package_folder.my_functions    

它似乎不像上述技术那样有效。

原因似乎是在文件 wellmy_functions.py 中,我有一个需要另一个函数的函数,该函数之前已在该文件中声明。
我在那个需要另一个函数的函数上遇到了这个模糊的错误:

TypeError: 'NoneType' 对象不可调用

是否允许,如果不允许,如何处理?

【问题讨论】:

  • 你可以试试import package_folder.my_functions.func1,其中func1my_functions.py文件中的函数名
  • 我已经读到使用通配符不是一个好主意,这就是我问的原因。
  • 是的,通配符导入并不是一个好主意,那么你应该像from package_folder.my_functions import func1, func2那样做,其中func1func2my_functions.py文件中的函数名称跨度>
  • 加载大量这样的函数可能会很痛苦,不是吗?
  • 这很痛苦,但在避免由于通配符导入而可能发生的命名空间污染方面很好。

标签: python function module package


【解决方案1】:

使用 from module import * 通常不是一个好主意。通配符导入导致命名空间污染;您导入的名称比您需要的多,如果您不小心引用了导入的名称,您可能不会得到您想要的 NameError。

此外,如果库的未来版本添加了其他名称,您最终可能会屏蔽其他名称,从而导致奇怪的错误:

示例

from my_mod1 import func1
from my_mod2 import *

如果您升级 my_mod2 并且它现在包含 my_mod2.func1,它将替换第一行中的 my_mod1.func1 导入。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-13
    • 2017-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多