在python中,将一个方法(带参数)传递给另一个方法的最佳方法是什么

2024-09-28 12:12:38 发布

您现在位置:Python中文网/ 问答频道 /正文

将方法和方法参数传递给另一个方法的最佳方法是什么?在

有没有更好的方法来做下面的事情?在

def method1(name)
    return 'Hello ' + name

def method2(methodToCall, methodToCallParams, question):
    greetings = methodToCall(methodToCallParams)
    return greetings + ', ' + question

method2(method1, 'Sam', 'How are you?')

Tags: 方法namehelloreturnsamdef事情are
3条回答

你可以这样做:

def method1(name):
    def wrapper():
        return 'Hello ' + name
    return wrapper

def method2(method, question):
    output = method()
    return output + ', ' + question

method2(method1(name = 'Sam'), 'How are you?')

当然,也可以在method()调用中传递一些变量:

^{pr2}$

您可以使用functools.partial来执行此操作,例如jkp pointed out

但是,functools在Python2.5中是新的,所以在过去我使用了以下代码(这段代码在functools.partial事实上)。在

# functools is Python 2.5 only, so we create a different partialfn if we are
# running a version without functools available
try:
    import functools
    partialfn = functools.partial
except ImportError:
    def partialfn(func, *args, **keywords):
        def newfunc(*fargs, **fkeywords):
            newkeywords = keywords.copy()
            newkeywords.update(fkeywords)
            return func(*(args + fargs), **newkeywords)
        newfunc.func = func
        newfunc.args = args
        newfunc.keywords = keywords
        return newfunc

如果要一次性打包调用,可以使用functools模块:

from functools import partial

def some_function(param_one, param_two):
    print "Param One: %s" % param_one
    print "Param Two: %s" % param_two

def calling_function(target):
    target()

calling_function(partial(some_function, "foo", "bar"))

你能做得更好functools.partial另外,比如只绑定一些参数,给你留下一个带有新签名的函数。在很多情况下使用它是过度的杀伤力,但它确实有它的位置。在

相关问题 更多 >

    热门问题