相关疑难解决方法(0)

已知密钥键入的Python 3字典

我正在使用python3输入功能来获得更好的自动完成功能.

很多时候,我有使用特定键返回键/值(字典)的函数.超级简单的例子:

def get_info(name):
    name_first_letter = name[0]
    return {'my_name': name, 'first_letter': name_first_letter}
Run Code Online (Sandbox Code Playgroud)

我想在此函数中添加类型提示,以告诉使用此函数的其他人期待什么.

我可以这样做:

 class NameInfo(object):
     def __init__(self, name, first_letter):
         self.name = name
         self.first_letter = first_letter
Run Code Online (Sandbox Code Playgroud)

然后将函数签名更改为:

def get_info(name) -> NameInfo:
Run Code Online (Sandbox Code Playgroud)

但它需要为每个字典提供太多代码.

在这种情况下,最佳做法是什么?

python dictionary type-hinting python-3.x

19
推荐指数
2
解决办法
5278
查看次数

如何在python中键入提示具有不同类型值的字典

在将字典声明为文字时,有没有办法输入提示我期望特定键的值?

然后,讨论:在python中有关于字典输入的指导原则吗?我想知道在词典中混合类型是否被认为是不好的做法.

这是一个例子:

考虑在类中声明字典__init__:

(免责声明:我在实例中意识到,某些.elements条目可能更适合作为类属性,但这是为了示例).

class Rectangle:
    def __init__(self, corners: Tuple[Tuple[float, float]], **kwargs):
        self.x, self.z = corners[0][0], corners[0][1]
        self.elements = {
            'front': Line(corners[0], corners[1]),
            'left': Line(corners[0], corners[2]),
            'right': Line(corners[1], corners[3]),
            'rear': Line(corners[3], corners[2]),
            'cog': calc_cog(corners),
            'area': calc_area(corners),
            'pins': None
        }


class Line:
    def __init__(self, p1: Tuple[float, float], p2: Tuple[float, float]):
        self.p1, self.p2 = p1, p2
        self.vertical = p1[0] == p2[0]
        self.horizontal = p1[1] == p2[1]
Run Code Online (Sandbox Code Playgroud)

当我键入以下类型

rec1 = Rectangle(rec1_corners, show=True, name='Nr1')
rec1.sides['f...
Run Code Online (Sandbox Code Playgroud)

Pycharm会建议'front' 我.更好的是,当我这样做时

rec1.sides['front'].ver... …
Run Code Online (Sandbox Code Playgroud)

python dictionary typing type-hinting pycharm

6
推荐指数
2
解决办法
4787
查看次数

Python类型提示字典的特定值

我是粉丝,mypy我想在具有不同类型值的字典上添加一些类型提示.

我的字典如下 {'name':'John', 'age':136, 'hobbies':['Python', 'cooking', 'reading']}

我想到的当前打字是: Dict[str, Union[str, int, List[str]]

有没有办法指定它name是一个字符串,age是一个整数,并且hobbies是一个列表(进一步特定的类型检查mypy)?

注意:此数据来自包含此类对象列表的外部源.我对它有一个有限的控制,除了循环元素并转换它们.

谢谢

python python-3.x mypy

1
推荐指数
1
解决办法
439
查看次数

标签 统计

python ×3

dictionary ×2

python-3.x ×2

type-hinting ×2

mypy ×1

pycharm ×1

typing ×1