2011-10-04 50 views
1

我正在写一个非常简单的函数,用于我的Django项目中,只有当应用程序处于调试模式时才显示多个页面。在AS3中,您可以使用该方法的调用或应用方法将方法参数应用于其他方法。让我证明:Python的ActionScript等价于apply()/ call()方法吗?

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 
+0

使用'function(* arguments)'notation – JBernardo

回答

5

当定义一个函数,你可以使用这个符号:

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

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

然后,您可以调用另一个函数,这些参数是这样的:

some_function(*args, **kwargs) 

您可以省略的*args**kwargs的,如果你不希望传递位置或关键字参数,分别。你当然可以自己创建元组/字典,他们不必来自def声明。

+1

太棒了,那就是我一直在寻找的东西。到目前为止,我一直在Python中对'*'和'**'前缀变量的功能感到困惑。 –

3

您可以使用动态参数好吧。为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)