如何像React那样在Python中反构造变量?

如何像React那样在Python中反构造变量?,python,local-variables,destructuring,Python,Local Variables,Destructuring,我正在使用Flask创建API。 对于每个请求,我必须验证request.args或request.json,并在查询参数或请求正文具有意外形式或不同的数据类型或无时抛出错误 然后从请求正文或查询参数中取出一些项。有许多这样的API,我需要从查询参数或请求主体中提取一些项目,并使用这些值执行数据库功能,如执行SQL查询并从请求主体或查询参数传递数据 每次在API视图函数中,我都必须对许多变量执行request.args.get或request.json.get 我只是在想,是否有更好的方法使这些

我正在使用Flask创建API。 对于每个请求,我必须验证request.argsrequest.json,并在查询参数或请求正文具有意外形式或不同的数据类型时抛出错误

然后从请求正文查询参数中取出一些项。有许多这样的API,我需要从查询参数请求主体中提取一些项目,并使用这些值执行数据库功能,如执行SQL查询并从请求主体查询参数传递数据

每次在API视图函数中,我都必须对许多变量执行request.args.getrequest.json.get

我只是在想,是否有更好的方法使这些项在内存中可用,而不必显式地从字典中取出它们(类似于React中的去结构化)

我搜索了一下,发现确实有一种方法是不可取的。


我只是想知道是否有更好的方法来做这件事。

操作符.itemgetter
,它可以让你一次检索多个项目。(从语义上讲,它仍然从
dict
中提取每个值;但从语法上讲,它只是一个操作。)


如果您想使代码更简洁,而不是从
dict
中逐个获取每个值,那么不要将同一个键键入两次以使其作为变量使用-然后创建一些辅助函数,将需要的值解包为函数参数或关键字参数(取决于它们是必需的还是可以有默认值)并保持静止状态为
**kwargs

params = {c: i for i, c in enumerate('abcd')}

def get_abcx_sum_and_rest(a, b, c=1, x=2, **kwargs):
    return sum((a,b,c,x)), kwargs

abcx_sum, rest_dct = get_abcx_sum_and_rest(**params)

Js es6语法很好,但遗憾的是在python中不可用。我认为,如果您需要使用dict的某些键执行某些操作,那么您可能应该将这些操作包含在单独的函数中并命名。

python不支持字典解构之类的操作。只需自己执行是最好的方法。请注意,python不支持字典解构在链接的答案是不正确的。在什么上下文中解构?你可以用*语法将字典或元组作为函数参数传递给解包,这类似于解构。我假设你是指JS中的对象解构,比如
{a,b}={a:1,b:2,c:3}
。但是,是的,Python不支持这一点。在Python中,您必须执行类似
a=my_dict['a'];b=my_dict['b']
是的。这就是我所指的。对象分解。对您来说,一个好的选择可能是“pydantic”项目-您可以创建一个带有参数的类,该类将使用最小模糊度,并将json传递给它,以获得易于使用的经过验证的Python对象。-或者您自己编写一个基类,以及带有所需字段的实例类-这非常简单。
params = {c: i for i, c in enumerate('abcd')}

def get_abcx_sum_and_rest(a, b, c=1, x=2, **kwargs):
    return sum((a,b,c,x)), kwargs

abcx_sum, rest_dct = get_abcx_sum_and_rest(**params)