【问题标题】:Python callback function placeholders?Python回调函数占位符?
【发布时间】:2013-11-11 04:17:40
【问题描述】:

我想在列表中添加一个回调函数,这将导致在适当的时间使用一个参数调用回调。但是,我也希望回调也传递另一个变量。

注意:我习惯了 C++ 中的 std::bindboost::bind,所以我一直在寻找类似的东西。

注意:顺便说一下,这是在 Python 中。

碰撞问题示例:

def collision_callback(hit, hitter)
     # doing something relevant...

object = create_object()
collision_callbacks.append(collision_callback(_1, object)) # _1 is a placeholder from C++ lol.
                                                      # as you can see here _1 is expected
                                                      # to be filled in with the hit object.

【问题讨论】:

    标签: python callback blender collision


    【解决方案1】:

    你可以使用lambda:

    >>> def minus(a, b):
    ...     return a - b
    ... 
    >>> minus1 = lambda x: minus(x, 1)
    >>> minus1(3)
    2
    

    或者,您也可以使用functools.partial

    >>> minus1 = functools.partial(minus, b=1)
    >>> minus1(4)
    3
    

    但是一些内置函数不接受关键字参数。然后回退到lambda

    >>> print(operator.sub.__doc__)
    sub(a, b) -- Same as a - b.
    >>> minus1 = functools.partial(operator.sub, b=1)
    >>> minus1(5)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: sub() takes no keyword arguments
    
    >>> minus1 = lambda x: operator.sub(x, 1)
    >>> minus1(9)
    8
    

    如果您预填充前导参数(从第一个参数填充值),这无关紧要:

    >>> minus_from_10 = functools.partial(operator.sub, 10)
    >>> minus_from_10(7)
    3
    

    【讨论】:

    • 哇,太快了。谢谢你。我印象深刻。我想我必须等待 10 分钟才能接受您的回答,哈哈。顺便说一句,它就像魔术一样。
    猜你喜欢
    • 2011-07-26
    • 2014-02-05
    • 2012-08-24
    • 1970-01-01
    • 2013-09-13
    • 1970-01-01
    • 2013-10-19
    • 2023-03-13
    • 2023-03-31
    相关资源
    最近更新 更多