为了简洁起见,这是最基本的要素。我知道下面的内容是多余的,但是我离题了。
我想知道是否有一种更聪明,更简洁的方式来写这个
def create_action(context, verb, actor = None, target = None, permission_level = None):
action = Action(context = context, verb = verb, actor = actor, target = target, permission_level = permission_level)
正如您所看到的,两个必需的参数,一些(或可能更多)可选的参数被重载。
有什么更好的方式来写这个,这样我就不会围绕这些关键词了?
答案 0 :(得分:6)
def create_action(*args, **kwargs):
action = Action(*args, **kwargs)
答案 1 :(得分:5)
首先,删除默认args部分之间的空格。您也可能不需要使用关键字参数来调用Action()
例如
def create_action(context, verb, actor=None, target=None, permission_level=None):
action = Action(context, verb, actor, target, permission_level)
这是使用默认参数的传统Python风格。
坦率地说,我不明白为什么这个功能是必要的。它没有返回任何东西(我想你只是忘了返回动作,它完成的一切都应该在__init__
类的Action
方法中完成(我假设它是一个类),例如< / p>
class Action(object):
def __init__(context, verb, actor=None, target=None, permission_level=None):
# Do something
为了简洁起见,我根本不会编写该函数,只是在类的__init__
方法中使用默认参数。
答案 2 :(得分:0)
如果你想:
context
和verb
你可以这样做。
optional = ('actor', 'target', 'permission_level')
def create_action(context, verb, **opt):
args = dict([(k, opt.get(k, None) for k in optional])
action = Action(context, verb, **args)
或者如果你想将它们全部作为命名参数传递。
optional = (('actor', None), ('target', None), ('permission_level', None))
required = ('context', 'verb')
def create_action(*a, **kv):
req = zip(required, a)
opt = [(t[0], kv.get(t[0], t[1])) for t in optional]
action = Action(**dict(req + opt))