具有已知键的字典的类型提示
- 2025-03-05 09:18:00
- admin 原创
- 66
问题描述:
我正在使用 Python 3 打字功能来实现更好的自动完成功能。
很多时候我都有返回具有特定键的键/值(字典)的函数。超级简单的例子:
def get_info(name):
name_first_letter = name[0]
return {'my_name': name, 'first_letter': name_first_letter}
我想给这个函数添加类型提示,以便告诉其他使用这个函数的人会发生什么。
我可以做类似的事情:
class NameInfo(object):
def __init__(self, name, first_letter):
self.name = name
self.first_letter = first_letter
然后将函数签名更改为:
def get_info(name) -> NameInfo:
但是每个字典都需要太多的代码。
在这种情况下,最佳做法是什么?
解决方案 1:
正如 Blckknght、您和 Stanislav Ivanov 在评论中指出的那样,您可以使用NamedTuple
:
from typing import NamedTuple
class NameInfo(NamedTuple):
name: str
first_letter: str
def get_info(name: str) -> NameInfo:
return NameInfo(name=name, first_letter=name[0])
从 Python 3.8 开始,你可以使用TypedDict
与你想要的更相似的版本:
from typing import TypedDict
class NameInfo(TypedDict):
name: str
first_letter: str
def get_info(name: str) -> NameInfo:
return {'name': name, 'first_letter': name[0]}
解决方案 2:
TypedDict
也可以使用类型名称和字典来创建,其中键是键,值是要返回的字典的值的类型get_info()
。这允许您创建使用不在中的字符的键A-Za-z0-9_
。
from typing import TypedDict
NameInfo = TypedDict('NameInfo', {'name': str, 'first-letter': str})
def get_info(name: str) -> NameInfo:
return {'name': name, 'first-letter': name[0]}
x = get_info('cottontail')
print(x['first-letter']) # c
然后在 PyCharm 上,关键提示就在那里(在 jupyter notebook 上按 tab 也可以使用)。
解决方案 3:
使用文字
我认为,更好的方法是使用简单的from typing import Literal
:
def get_info(name) -> dict[Literal["my_name", "first_letter"], str]:
name_first_letter = name[0]
return {'my_name': name, 'first_letter': name_first_letter}
编辑:感谢@mkrieger1,这Literal["my_name", "first_letter"]
意味着的子集{"my_name", "first_letter"}
。
相关推荐
热门文章
项目管理软件有哪些?
热门标签
曾咪二维码
扫码咨询,免费领取项目管理大礼包!
云禅道AD