代码之家  ›  专栏  ›  技术社区  ›  gwydion93

在另一个函数中导入函数

  •  0
  • gwydion93  · 技术社区  · 6 年前

    假设我有一个剧本, test.py ,它的函数在另一个函数中:

     x = 3
     def function_1(x):
         ...
         y = x + 7
    
         def function_2():
            return value
    

    现在我想两者都用 function_1 function_2 在另一个脚本中。我该怎么做?

    我试过了:

    import test
    from test import function_1
    from function_1 import function_2
    

    我基本上只是得到一个错误说 No module named function_1 . 它确实进口 功能1 我可以用,但不行 功能2 . 我不能只做 功能1 类(它需要一个参数)。我怎么修这个?我能用一下吗 _main_ 替代 功能1 ?我可以进口吗? 功能2 ?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Mad Physicist    6 年前

    嵌套函数 function_2 是中的对象 地方的 外部函数的命名空间。当 function_1 没有运行。

    通常,嵌套函数或者执行 私有的 外部函数的计算,或以某种形式返回。在后一种情况下,您可以运行 功能1 以获取对 功能2 .

    任何要导入的对象都应该在全局命名空间中,或者至少可以直接从中引用。更好的设计是

    x = 3
    
    def function_1(x):
        y = x + 7
        # Do some stuff, including using function_2
        return y
    
    def function_2(value):
        # Do some stuff
        return value
    

    记住 定义 函数与 运行 它。作为推论, x 里面 功能1 X 在模块级别设置为3。

    更新您的更新

    你绝对可以 功能1 成为一个班级,并使 功能2 它的一种方法:

    class function_1:
        def __call__(self, x):
            y = x + 7
            value = self.function_2(y)
            return y, value
    
        @staticmethod
        def function_2(value):
            return value
    

    在这种情况下,您可以在其他脚本中执行以下操作:

    from test import function_1
    
    f1 = function_1()
    # Call it:
    f1(7)
    # Call function_2:
    function_1.function_2('blah')
    # Or alternatively:
    f1.function_2('foo')