Python 如何限制输出类型为字典?
Python how to restrict output type as dictionary?
我找了个例子。
from typing import List
def twoSum(nums: List[int], target: int) -> List[int]:
pass
所以我试图将输入限制为整数,将输出限制为字典。 survey = {"sid": survey_id, "title": 22}
这行工作。但是,survey = [survey_id, 22]
,return类型变成list
也可以。我该如何解决?
def question(survey_id: int) -> dict:
#survey = {"sid": survey_id, "title": 22}
survey = [survey_id, 22]
return survey
question("3456")
['3456', 22]
更具体地说,我想将 return 类型限制为仅包含整数和字符串的字典。我怎样才能做到?
Python 解释器无法强制函数 returns 为特定类型。如果您想在类型未正确定义时阻止程序执行,Python 不是一个好的语言选择。
另一方面,您可以使用像 mypy
这样的静态类型检查器来确保正确观察到类型提示。这些类型提示不会在运行时强制执行,但它们可以确保对函数的修改不会引入与类型相关的错误。
是的,你可以这样做,但要稍微绕一圈。虽然这种方式在您处理任何类型的 API 时非常有用。您要做的是创建一个对象和 return 这个对象,您可以在其中强制执行数据类型。
两个最好的选择是数据类,它是标准库的一部分,因为 3.8(我认为)或者更好的选择是使用 Pydantic,它也像一个数据类,但有很多附加功能。
from pydantic import BaseModel
class Survey(BaseModel):
sid: int
title: str
def survey_result(id: int) -> Survey:
res = Survey(sid=id, title='foo')
return res
现在 Pydantic 将强制执行数据类型。例如:
>>> survey_result(11)
Out: Survey(sid=11, title='foo')
>>> survey_result('blabla')
Out:
ValidationError: 1 validation error for Survey
sid value is not a valid integer (type=type_error.integer)
Pydantic 还针对 Web APIs 进行了优化,并且可以在必要时转换数据类型。比如说,你应该有一个整数,但结果被 return 编辑为 json 并且无论出于何种原因,整数变成了一个字符串。 Pydantic 可以处理这个问题:
>>> survey_result('11')
Out: Survey(sid=11, title='foo')
我找了个例子。
from typing import List
def twoSum(nums: List[int], target: int) -> List[int]:
pass
所以我试图将输入限制为整数,将输出限制为字典。 survey = {"sid": survey_id, "title": 22}
这行工作。但是,survey = [survey_id, 22]
,return类型变成list
也可以。我该如何解决?
def question(survey_id: int) -> dict:
#survey = {"sid": survey_id, "title": 22}
survey = [survey_id, 22]
return survey
question("3456")
['3456', 22]
更具体地说,我想将 return 类型限制为仅包含整数和字符串的字典。我怎样才能做到?
Python 解释器无法强制函数 returns 为特定类型。如果您想在类型未正确定义时阻止程序执行,Python 不是一个好的语言选择。
另一方面,您可以使用像 mypy
这样的静态类型检查器来确保正确观察到类型提示。这些类型提示不会在运行时强制执行,但它们可以确保对函数的修改不会引入与类型相关的错误。
是的,你可以这样做,但要稍微绕一圈。虽然这种方式在您处理任何类型的 API 时非常有用。您要做的是创建一个对象和 return 这个对象,您可以在其中强制执行数据类型。
两个最好的选择是数据类,它是标准库的一部分,因为 3.8(我认为)或者更好的选择是使用 Pydantic,它也像一个数据类,但有很多附加功能。
from pydantic import BaseModel
class Survey(BaseModel):
sid: int
title: str
def survey_result(id: int) -> Survey:
res = Survey(sid=id, title='foo')
return res
现在 Pydantic 将强制执行数据类型。例如:
>>> survey_result(11)
Out: Survey(sid=11, title='foo')
>>> survey_result('blabla')
Out:
ValidationError: 1 validation error for Survey
sid value is not a valid integer (type=type_error.integer)
Pydantic 还针对 Web APIs 进行了优化,并且可以在必要时转换数据类型。比如说,你应该有一个整数,但结果被 return 编辑为 json 并且无论出于何种原因,整数变成了一个字符串。 Pydantic 可以处理这个问题:
>>> survey_result('11')
Out: Survey(sid=11, title='foo')