具有一些强制键作为功能输入的字典

具有一些强制键作为功能输入的字典,第1张

具有一些强制键作为功能输入的字典

在python3.x中,您可以使用函数注释

>>> def foo(indict: dict(apple=None, pear=None)):...     print(indict)... >>> foo(dict()){}

您甚至可以疯狂地使用现在被口译人员接受的

Ellipsis
文字

>>> def foo(indict: dict(apple=None, pear=None, extra_items=...)) -> int:...     if any(x not in indict for x in ('apple', 'pear')):...         raise ValueError('message here...')...     print(indict)...     return 3... >>> foo({})Traceback (most recent call last):  File "<stdin>", line 1, in <module>  File "<stdin>", line 3, in fooValueError: message here...>>> foo({'apple':6, 'pear':4}){'pear': 4, 'apple': 6}3>>> foo({'apple':6, 'pear':4, 'carrot':30000}){'carrot': 30000, 'pear': 4, 'apple': 6}3

你可以从我的第一个例子中看到,注释不 执行
任何东西。您必须在函数本身中执行验证,尽管我想您可以从注解1中检查所需的键,如果您想使其保持DRY,但是仅使用2个键可能就不值得了……

在python2.x中(以及更传统的情况下),也许您只想将信息放入文档字符串中;-)-我也建议您对python3.x进行此 *** 作,因为这是查找的传统位置用于文档…

1个

keys = foo.__annotations__['indict'].keys() - {'extra_items'}

更新
请注意,现在像mypy这样的奇特事物闲坐着,这个答案可能有些过时了。您可以考虑使用

TypedDict
from进行注释
mypy_extensions
。如果您使用类似类型的检查器,那应该为您的用户设定期望,甚至可能帮助捕获一些错误
mypy

from mypy_extensions import TypedDictclass Apple:    """Represent an Apple."""class Pear:    """Represent a Pear."""# "annotation-type" for a dictionary that has an apple and pear key whose values are Apple and Pear instances.FruitBowl = TypedDict("FruitBowl": {"apple": Apple, "Pear": Pear})def foo(indict: FruitBowl) -> int:    ...


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5618128.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存