【问题标题】:Pass a module to a called function in python将模块传递给python中的被调用函数
【发布时间】:2022-01-19 20:11:16
【问题描述】:

我有以下问题:

假设我有一个文件function.py,其中包含:

def get_mean(nums):
    return np.mean([nums])

以及包含以下内容的文件launcher.py

from function import get_mean

mean = get_mean([1, 2, 3])
print(mean)

现在,如果您启动 python launcher.py,它将抛出 NameError: name 'np' is not defined

我的问题是:有没有办法通过从launcher.py 调用函数get_mean 使其工作,而无需编辑文件function.py

背景故事:第三方库在此处有一个由function.py 表示的函数,但导入错误,我必须在launcher.py 表示的代码中使用该函数,我不知道该怎么做.

【问题讨论】:

    标签: python module namespaces


    【解决方案1】:

    可以通过一个奇怪的 hack 来做到这一点

    import numpy as np
    import function
    function.__dict__["np"] = np
    function.get_mean([1, 2, 3])
    

    您正在定义未定义的模块,方法是将其添加到 functions 模块的 __dict__ 中。

    这不是一种非常干净的做事方式,但这是我这边唯一可用的方法

    【讨论】:

      【解决方案2】:

      不编辑function() 是不可能的,因为文件已经有错误(np 未定义)。

      但是,你可以试试这个 function.py:

      def get_mean(nums):
          import numpy as np
          return np.mean([nums])
      

      您也可以将 np 从启动器发送到这样的功能:

      #function.py
      def get_mean(nums, np):
          return np.mean([nums])
      
      #launcher.py
      import numpy as np
      from function import get_mean
      mean = get_mean([1, 2, 3],np)
      print(mean)
      

      这两个都有这个输出:

      2.0
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-07-17
        • 2016-11-30
        • 2017-08-02
        • 1970-01-01
        • 2015-03-21
        • 1970-01-01
        • 2012-03-28
        • 2021-09-06
        相关资源
        最近更新 更多