编写此函数声明的更多pythonic方法是什么

M. *_*yan 0 python django

为简洁起见,这是最基本的要素.据我所知,下面写的多余,但我离题了.

我想知道是否有更聪明,更简洁的方式来写这个

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)
Run Code Online (Sandbox Code Playgroud)

如您所见,两个必需参数,一些(或可能更多)可选的参数重载.

什么是更好的方式来写这个,以便我不是围绕这些关键字?

Art*_*par 6

使用参数解压缩:

def create_action(*args, **kwargs):
    action = Action(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)


Raf*_*ler 5

首先,删除默认args部分之间的空格.您也可能不需要使用关键字参数来调用Action()例如

def create_action(context, verb, actor=None, target=None, permission_level=None):
    action = Action(context, verb, actor, target, permission_level)
Run Code Online (Sandbox Code Playgroud)

这是使用默认参数的传统Python风格.

坦率地说,我不明白为什么这个功能是必要的.它没有返回任何东西(我猜你只是忘了返回动作,它完成的一切都应该__init__Action类的方法中完成(我假设它是一个类),例如

class Action(object):
    def __init__(context, verb, actor=None, target=None, permission_level=None):
        # Do something
Run Code Online (Sandbox Code Playgroud)

为简洁起见,我根本不会编写函数,只是__init__在类的方法中使用默认参数.