【问题标题】:How pass an argument as method of a module如何将参数作为模块的方法传递
【发布时间】:2011-02-18 16:53:20
【问题描述】:

嗨,我想打电话给f('append','more','arguments',a=1,b=2)

但是 append 是pyquery 模块的方法(函数)

所以arg[0]是我的方法

我想做

    e.arg[0]('<div id="cool"></div>') run like e.append('<div id="cool"></div>')

-- 所以我想将“append”作为参数传递

    import pyquery
    d = pq('<div id="guido"></div>')
    d.append('<div id="cool"></div>')
    str(d)

    def f (*arg,**kargs):
        e = pq('<div id="guido"></div>')
        e.arg[0]('<div id="cool"></div>') # <== HERE
        return str(e)

    f('append','more','arguments',a=1,b=2)

所以 f('append','more','arguments',a=1,b=2) 必须返回

    '<div id="guido"><div id="cool"/></div>'

【问题讨论】:

  • 您的问题不清楚。你能改写一下并添加更多上下文吗?
  • 您能否重新表述您的问题以明确放慢速度:(1)pyquery 的作用,(2)您如何尝试使用它,以及(3)您为什么尝试以这种方式使用它?
  • pyquery 什么都没有。它是关于传递参数并将此参数用作模块的方法。所以 d.append('
    ') 可以正常工作,但现在我想将 'append' 传递给函数 f(),例如 f('append') 好的,我的函数 f () 实例一个像 e = pq('
    ') 这样的模块,现在我想使用 arg[0] {可以是 (append, after, before, appendTo, clone..) } in e.arg[0]('...') like e.append('...'),所以我希望 e.arg[0]('..') 像 e.append('. ..')

标签: python argument-passing


【解决方案1】:

如果可以避免,我建议不要在字符串中传递方法名称(而是传递对方法本身的引用),但如果不能,你想要的是getattr(),一个获取属性的函数通过包含在字符串中的名称来描述对象。这将使您获得对所需方法的引用,然后您可以照常调用它。

def f (*arg, **kargs):
    e = pq('<div id="guido"></div>')
    getattr(e, arg[0])('<div id="cool"></div>')
    return str(e)

【讨论】:

  • 好的,谢谢。工作正常。对不起,我不能投票,我提出的每一个问题都会让我失去分数。 :(
【解决方案2】:

传递 d.append 作为第一个参数。函数是一流的对象!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-10
    • 2015-01-22
    相关资源
    最近更新 更多