gpt4 book ai didi

python - 从 web.py 解压参数列表和实例化 WTForms 对象

转载 作者:行者123 更新时间:2023-11-28 23:00:20 24 4
gpt4 key购买 nike

经过一些搜索,我发现可以使用以下代码在 web.py 中实例化 WTForms 对象:

form = my_form(**web.input())

web.input() 返回一个“类似字典”的 web.storage 对象,但没有双星号 WTForms 将引发异常:

TypeError: formdata should be a multidict-type wrapper that supports the 'getlist' method

从 Python 文档中我了解到这两个星号用于解压命名参数的字典。也就是说,我仍然对到底发生了什么感到困惑。是什么让 web.input() 返回的 web.storage 对象足够“像字典”以至于它可以被 ** 解包,但不是“像字典”以至于它可以作为-传递是 WTForms 构造函数?

我知道这是一个非常基本的问题,但如果有任何有助于新手程序员的建议,我们将不胜感激!

最佳答案

参见 the documentation .不同之处在于执行 func(someDict) 传递一个参数,即字典。执行 func(**someDict) 解压字典并将每个键/值对作为单独的关键字参数传递。

区别与“足够像字典”或不同程度的类似字典无关。 (它也与 web.py 或 WTForms 无关。)这两个选项只是编写函数以接受不同类型参数的两种不同方式,以及传递这些参数的两种相应方式争论。示例:

>> def oneArg(d):
... print d
>>> def manyArgs(**d):
... print d
>>> d = {'a': 1, 'b': 2}
>>> oneArg(d)
{'a': 1, 'b': 2}
>>> manyArgs(**d)
{'a': 1, 'b': 2}
>>> manyArgs(a=1, b=2)
{'a': 1, 'b': 2}

最后两个例子特别展示了**d 的作用。使用 **d 传递字典与将每个键/值对作为单独的关键字参数传递相同。

关于python - 从 web.py 解压参数列表和实例化 WTForms 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12172452/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com