小编lev*_*eer的帖子

python - 如何docstring kwargs及其预期类型

在docstring中表达关键字参数的预期类型的​​传统方法是什么?

或者这是否是我不应该做的事情的原则?谷歌在这个问题上毫不怀疑.

(我感兴趣的是因为我发现跟踪所有变量的预期类型非常有用,因为我编码.我使用PyCharm,当参数有意外类型时,或者当自定义类属性可能未解决时,它会发出警告)

但是,我发现有时可能的keywrord参数列表列为

def foo(bar, parameter_1: int=1, paramter_2: str='', ...etc )
Run Code Online (Sandbox Code Playgroud)

会变得漫长而难以理解..

请考虑以下代码

class Person:
    def __init__(self, id: int, **kwargs):
        """
        :param id: social security number
        :type id: int
        :param **name: person's first name
        :type **name: str
        :param **age: person's age in years, rounded down
        :type **age: int
        """
        self.data = kwargs


bob = Person(123456568, name='Bob', age=48)
sally = Person(1245654568, name='Sally', age='22')
Run Code Online (Sandbox Code Playgroud)

我想使用docstring来声明预期的类型.而且我希望PyCharm警告我,莎莉的年龄是错误的.当然,我不知道PyCharm是否有能力"理解"文档字符串中的详细程度.不过我想知道传统方法是做什么的.

关于kwargs和docstrings的其他意见和建议也欢迎.

python types docstring type-hinting kwargs

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

如何避免由python中的指针属性的类型提示引起的循环依赖

考虑两个模块(在同一文件夹中):

首先,person.py

from typing import List
from .pet import Pet


class Person:
    def __init__(self, name: str):
        self.name = name
        self.pets = [] # type: List[Pet]

    def adopt_a_pet(self, pet_name: str):
        self.pets.append(Pet(pet_name))
Run Code Online (Sandbox Code Playgroud)

然后是pet.py

from .person import Person


class Pet:
    def __init__(self, name: str, owner: Person):
        self.name = name
        self.owner = owner
Run Code Online (Sandbox Code Playgroud)

由于循环依赖,上述代码无法正常工作。您会得到一个错误:

ImportError: cannot import name 'Person'
Run Code Online (Sandbox Code Playgroud)

使其工作的一些方法:

  1. 将类Person和Pet的定义保存在同一文件中。
  2. 删除pet.owner属性(方便使用的指针)
  3. 不要在会引起循环引用的地方使用type-hinting / annotation:

例如:

class Pet:
    def __init__(self, name: str, owner):
Run Code Online (Sandbox Code Playgroud)

到目前为止,我列出的所有选项中都有一些缺点。

还有另一种方法吗?一个让我能够

  • 将类拆分为不同的文件
  • 将类型注释与指针结合使用,如图所示

或者:是否有充分的理由改而采用我已经列出的解决方案之一?

python annotations circular-dependency type-hinting cross-reference

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

如何在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
查看次数

Numpy 数组与自定义类的列表

我理解为什么“标准”类型的 numpy 数组几乎总是比包含相同类型数据的列表更有效。因此,最好养成使用 numpy 数组来做简单事情的习惯,是吗?

但是,我想知道与使用列表相比,使用 numpy 数组“存储”自定义类实例的优点和缺点是什么。

考虑

import numpy as np

class Foo:
    def __init__(self, name):
        self.name = name

class Bar:
    def __init__(self, name):
        self.name = name
        self.myFoos = np.zeros(0, dtype = Foo)

    def add_foo(self, some_foo):
        self.myFoos = np.append(self.myFoos, some_foo)
Run Code Online (Sandbox Code Playgroud)

我可以用做的很好

self.myFoos = []
Run Code Online (Sandbox Code Playgroud)

做出这个决定时我应该记住什么?

Foo 类的复杂性有很大区别吗?(在我的用例中,它可能包含 20 或 30 个标准类型、一两个固定大小的整数数组,然后是大约 10 个简单方法。)

myFoos 中的 Foos 数量通常会产生影响吗?(在我的用例中,它将是 0 到 10)

myFoos 被处理的次数有影响吗?(在我的实际用例中,在用户操作之间可能会调用 10 到 20 次。)

Ps 虽然代码工作正常,但 pyCharm 不喜欢最后一个附加语句,它警告我

Expected type 'Union[ndarray, iterable]' got 'Foo' instead.
Run Code Online (Sandbox Code Playgroud)

提前致谢!

python arrays numpy class list

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

json 中集合的最佳实践:数组与 dict/map

我需要使用 json 格式通过 api 调用将 python 后端中的数据传递到前端。在python后端,数据是字典结构,我可以轻松直接将其转换为json。但我应该吗?

我的前端开发人员认为答案是否定的,原因与最佳实践相关。

但我对此提出质疑:

最好像在 python 中一样构建 json,还是应该将其转换为其他形式,例如几个数组(如下面我的示例案例中所必需的)?

或者,换句话说:

通过 json 连接信息的集合/字典/映射/数组相关的管理原则应该是什么?

我已经用谷歌搜索了一些答案,但我没有找到太多直接解决这个问题的答案。链接将不胜感激。

(请注意下面的示例:当然,如果数据写入数据库,前端直接访问数据库可能是最有意义的,但我们假设情况并非如此)

例子:

在后端有一个名为 的对象集合pets:集合中的每个项目都有一个唯一的pet_id、一些非可选属性,例如namedate_of_birth、一些可选属性 registration_certificate_nradopted_from_kennel、一些列表(如 )siblingschildren一些对象(如 )medication

假设前端在某个时候需要所有这些信息,它可能是

{
  "pets": {
    "17-01-24-01": {
      "name": "Buster",
      "date_of_birth": "04/01/2017",
      "registration_certificate_nr": "AAD-1123-1432"
    },
    "17-03-04-01": {
      "name": "Hooch",
      "date_of_birth": "05/02/2015",
      "adopted_from_kennel": "Pretoria Shire",
      "children": [
        "17-05-01-01",
        "17-05-01-02",
        "17-05-01-03"
      ]
    },
    "17-05-01-01": {
      "name": "Snappy",
      "date_of_birth": "17-05-01",
      "siblings": [
        "17-05-01-02", …
Run Code Online (Sandbox Code Playgroud)

python json

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

ui:如何更改列表中的fontSize?

我正在使用React js和Material UI创建一些表单。我想使某些列表上的字体大小变小,以便获得更紧凑的显示效果,但是无论我在哪个级别添加代码,fontSize={10}它似乎都无效。

如何更改fontSize?

这是一些示例代码,这些代码是我从Material UI文档上的Sandbox获得的。

const styles = theme => ({
  root: {
    width: '100%',
    maxWidth: 360,
    backgroundColor: theme.palette.background.paper,
  },
});

function FolderList(props) {
  const { classes } = props;
  return (
    <div className={classes.root}>
      <List>
        <ListItem>
          <ListItemText primary="Photos" secondary="Jan 9, 2014" />
        </ListItem>
        <ListItem>
          <ListItemText primary="Work" secondary="Jan 7, 2014" />
        </ListItem>
      </List>
    </div>
  );
}
Run Code Online (Sandbox Code Playgroud)

javascript list reactjs material-ui

2
推荐指数
3
解决办法
3489
查看次数