我不是一个经验丰富的Python程序员,但我觉得我对这个问题的解决方案不对,我认为Python中有更好的方法来处理这个问题。
在本例中,使用 Hug API但这可能基本上是无关紧要的。
假设代码如下:
@hug.get_post('/hello')
def hello (name)
print(type(name))
return name
当使用 name
参数的一个实例发送请求时,hello
函数会获取一个 str
- 如下所示:
POST /hello?name=Bob
但是,如果请求发送了多个 name
参数,则该方法会收到一个 list
字符串,如下所示
POST /hello?name=Bob&name=Sally
如果我编写如下方法:
@hug.get_post('/hello')
def hello (name: list)
print(type(name))
return name
然后单个参数就变成了字符列表。 IE。 ['B', 'o', 'b']
。但如果 name
参数有多个实例(例如 ['Bob', 'Sally']
),则效果很好
所以我现在解决这个问题的方法是添加以下代码:
@hug.get_post('/hello')
def hello (name)
names=list()
if type(name) != 'list'
names.append(name)
else:
names=name
return names
这可行,但感觉不对。我认为有更好的方法来做到这一点,但我目前无法弄清楚。
最佳答案
Hug 为此提供了一个类型:hug.types.multiple
import hug
from hug.types import multiple
@hug.get()
def hello(name: multiple):
print(type(name))
return name
现在 /hello?name=Bob
返回 ['Bob']
并且 /hello?name=Bob&name=Sally
返回 ['鲍勃','莎莉']
。
如果您想验证内部元素,您可以创建一个自定义类型,如下所示:
import hug
from hug.types import Multiple, number
numbers = Multiple[number]()
@hug.get()
def hello(n: numbers):
print(type(n))
return n
在本例中 /hello?n=1&n=2
返回 [1, 2]
和 /hello?n=1&n=a
结果出现错误:
{"errors": {"n": "Invalid whole number provided"}}
关于python - 处理 Python 中可以 str 或 list 的函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58703401/