Python 相当于 ActionScript 的 apply()/call() 方法?



我正在编写一个非常简单的函数,用于我的Django项目中,仅当应用程序处于调试模式时才显示一些页面。在AS3中,您实际上可以使用该方法的调用或apply方法将方法参数应用到另一个方法。我来演示一下:

public function secureCall(...arguments):void {
    if (SECURE == true) {
        // reference the 'call' method below
        call.apply(this, arguments);
    } else {
        throw new IllegalAccessError();
    }
}
public function call(a:String, b:int, ...others):void {
    // do something important
} 

在Python中有办法做到这一点吗?我基本上想做以下事情:

from django.views.generic.simple import direct_to_template
def dto_debug(...args):
    if myapp.settings.DEBUG:
        direct_to_tempate.apply(args)
    else:
        raise Http404

在定义函数时,可以使用以下表示法:

def takes_any_args(*args, **kwargs):
    pass

args将是位置参数的元组,kwargs关键字参数字典

你可以用这些参数调用另一个函数,像这样:

some_function(*args, **kwargs)

如果不想分别传递位置参数或关键字参数,可以省略*args**kwargs中的任何一个。当然,您可以自己创建tuple/dict,它们不必来自def语句。

你可以使用动态参数。direct_to_template的函数签名为:

def direct_to_template(request, template, extra_context=None, 
                       mimetype=None, **kwargs):

你可以这样调用它:

args = (request, template)
kwargs = {
    'extra_content': { 'a': 'b' },
    'mimetype': 'application/json',
    'additional': 'another keyword argument'
}
direct_to_template(*args, **kwargs)

最新更新