【问题标题】:subscripting python module下标python模块
【发布时间】:2011-09-24 11:54:00
【问题描述】:

我可能没有使用正确的术语,但我正在学习 python 并且我正在尝试一些我可以在 Lua 中轻松完成的事情:

def fire(self):        
    return self._loadModule()[self._entrypoint]() #subscripting the module raises an error

def _loadModule(self):
    return __import__(self._module)

我想加载模块,然后在该模块中调用任意函数。这样做的正确方法是什么?

编辑: 模块和入口点名称在运行时确定。

【问题讨论】:

  • 您是否有理由不想import modulename 然后拨打modulename.method() 电话?
  • 真正正确的,如果有时(很少)不切实际,方法是不要那个动态。您确定这是适合此类事情的少数情况之一吗?
  • @thegrinner 因为method 直到运行时才知道
  • @delnan 不,我不确定。我正在从 Lua 中移植一些代码,以相同的方式编写它比重新考虑它更容易。
  • 现在重新思考可能并不容易,但很可能会导致将来每个人都在看代码时思考更少;)请描述您想要做什么,以便我们提出更好的方法.

标签: python


【解决方案1】:

如果我理解正确的话;一个完全没用的例子:

def my_sqrt(num):
    import math #load a module
    return math.sqrt(num) #call the function

来自字符串:

>>> def f(module, function, *args):
...     return(getattr(__import__(module), function)(*args))
... 
>>> f("math", "sqrt", 2)
1.4142135623730951

【讨论】:

  • 例如,我想调用一个在参数中命名的函数。
  • 来自指定模块,还是模块也是参数?
【解决方案2】:
mod = 'os'
func = 'listdir'
m = __import__(mod)
f = getattr(m, func)

import os
assert f is os.listdir

【讨论】:

    【解决方案3】:

    __import__('math').sqrt(2) 可能吗?

    【讨论】:

      猜你喜欢
      • 2012-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-25
      • 1970-01-01
      • 1970-01-01
      • 2018-03-29
      • 1970-01-01
      相关资源
      最近更新 更多