首页 > 编程问答 >在文档字符串中使用类型别名

在文档字符串中使用类型别名

时间:2024-07-30 14:21:15浏览次数:13  
标签:python python-typing docstring

是否有在文档字符串中使用类型别名或 typing 对象的最佳实践?

这个问题可能会吸引基于意见的答案。但也可能是 对于特定解决方案有广泛接受的约定或外部工具支持。

相关问题


示例:函数返回带有字符串键和值的字典。您将在“返回”部分下的文档字符串中放入什么类型? (我正在使用 pandas风格的文档字符串

选项1 :只是说它是一个字典。

import typing

strstrdict = typing.Dict[str, str]

def foo() -> strstrdict:
    '''
    bla bla

    Returns
    -------
    dict
        A dictionary with string keys and values that represents ...
    '''
    # code

选项2 :使用类型别名。

import typing

strstrdict = typing.Dict[str, str]

def foo() -> strstrdict:
    '''
    bla bla

    Returns
    -------
    strstrdict
        A dictionary with string keys and values that represents ...
    '''
    # code

选项3| ||:将 放入文档字符串中。 "typing.Dict[str, str]" 选项 4

import typing

strstrdict = typing.Dict[str, str]

def foo() -> strstrdict:
    '''
    bla bla

    Returns
    -------
    typing.Dict[str, str]
        A dictionary with string keys and values that represents ...
    '''
    # code

:其他内容? 编辑 1

“我正在使用 pandas 样式文档字符串”您是否正在寻找此样式或中的答案一般?

我想最佳答案将尽可能涵盖一般情况和具体情况。我提到

样式是为了明确为什么有“Returns”部分并且没有像“:param:”这样的指令。我对答案的风格并没有死心塌地。 pandas 您实际上在文档中包含别名吗,即用户可以发现别名

是什么吗? strstrdict 当前没有关于别名的文档。用户可以查看

我愿意在这里接受建议。 themodule.strstrdict 编辑 2

我链接到的样式指南巧合地提到了一个带有字符串键和值的字典。我正在寻找的答案也应该涵盖这样的情况:

The style guide I linked to coincidentally mentions a dict with string keys and values. The answer I am looking for should also cover cases like this:

from typing import Any, Callable, ContextManager, Iterable

ContextCallables = ContextManager[Iterable[Callable[[int, int], Any]]]

def foo() -> ContextCallabes:
    '''
    bla bla
    
    Returns
    -------
    ???
           some description
    '''
    # code

我将把我的意见和其他人的意见集中在一起,提出我认为是 Python 文档字符串中类型提示的最佳实践:

一般来说,在文档字符串中尽量使用简单易懂的类型描述。

  • 文档字符串面向的是 用户 ,他们可能不熟悉或不需要你的代码库中使用的特定类型别名。 重点应该放在传达 是什么 类型的信息,而不是它在你的代码中是如何表示的。
  • dict list str 这样的简单类型通常就足够了。
  • 对于更复杂的类型,请使用简洁的描述。例如,不要使用 typing.Dict[str, typing.Tuple[int, int]] ,而应使用 "一个字典,将字符串键映射到表示坐标的整数元组"。

什么时候在文档字符串中使用类型别名:

  • 当类型别名是公开 API 的一部分并且有文档记录时。 在这种情况下,用户可以通过查看别名的文档来了解有关该类型的更多信息。然后,你可以在文档字符串中链接到别名。
  • 当类型特别复杂并且简短描述不足以解释时。 即使在这种情况下,你也可以考虑在文档字符串中添加对类型别名的解释。

回到你的例子:

我会选择选项 1 或其变体:

import typing

strstrdict = typing.Dict[str, str]

def foo() -> strstrdict:
    '''
    bla bla

    Returns
    -------
    dict
        A dictionary with string keys and string values that represents ...
    '''
    # code
  • 它清楚地传达了返回类型,而不会用不必要的细节使用户感到困惑。
  • 如果 strstrdict 有文档记录并且是你的公共 API 的一部分,你可以在 "Returns" 部分添加一个指向它的链接。

对于像 ContextCallables 这样的更复杂的例子,简洁和清晰是关键:

from typing import Any, Callable, ContextManager, Iterable

ContextCallables = ContextManager[Iterable[Callable[[int, int], Any]]]

def foo() -> ContextCallabes:
    '''
    bla bla

    Returns
    -------
    ContextManager
        A context manager that yields an iterable of callables. 
        Each callable takes two integers as arguments and returns Any.
    '''
    # code

请记住,目标是让你的文档对使用你的代码的人来说易于理解和使用。如果对类型提示有疑问,最好是错误地更详细而不是更简洁。

标签:python,python-typing,docstring
From: 61006975

相关文章

  • 如何测试 python 类型协议是另一个协议的子类?
    该问题的明显解决方案是使用issubclass,但这会引发TypeError(使用Python3.6.7),例如>>>fromtyping_extensionsimportProtocol>>>classProtoSubclass(Protocol):...pass...>>>issubclass(ProtoSubclass,Protocol)Traceback(mos......
  • Python:指定与继承一起使用的类方法的返回类型
    我一直在尝试了解如何在Python中指定类方法的返回类型,以便即使对于子类也能正确解释它(例如在我的Sphinx文档中)。假设我有:classParent:@classmethoddefa_class_method(cls)->'Parent':returncls()classChild(Parent):pass什么如......
  • python使用SMTP功能发送邮件
    网页格式发送for_email.html<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title><style>h1{color:brown;}p{margin:5px;color:purple......
  • python之代码简化式(列表、字典生成式,递归函数,迭代器(iter)和生成器(yield)、匿名函数(
    文章目录前言1、列表、字典生成式2、递归函数2.1python中代码的递归深度(扩展)3、拓展:迭代器和生成器3.1迭代器(iter)3.2生成器(yield)4、匿名函数(lambda)4.1map函数4.2reduce函数(较少使用)4.3filter函数前言本文主要讲解一些简化代码格式的一些方法,方便大家更好的......
  • Python:在 Protocol 和 TypedDict 之间共享类型注释
    举这个简单的例子:from__future__importannotationsimporttypingastclassMyType:def__init__(self,s:str,i:int)->None:self.s=sself.i=iclassMyProto(t.Protocol):s:stri:intclassMyDict(t.TypedDict):......
  • PIL 和 python 静态类型
    我有一个函数参数,它可以接受图像的多种类型:defsomefunc(img:Union[np.array,Image,Path,str]):PILImage在这种情况下抛出以下异常:TypeError:Union[arg,...]:eachargmustbeatype.Got<module'PIL.Image'from...进一步检查图像对象后这才有......
  • 学会用Python爬取小说网站,想看什么就爬什么,广告也不用看了~
    今天以爬取笔趣阁小说网站为例,练习Python爬虫技术。通过这个爬虫,可以完成批量爬取一本小说的所有章节,并将所有章节内容按顺序保存到一个txt文档内,下面我们就开始吧。首先,百度搜索“笔趣阁”,发现有很多网站都叫笔趣阁。我们可以随便挑选一个网站尝试,本文我以‘https://......
  • 计算机毕业设计django+vue《Python数据分析》的教学系统【开题+论文+程序】
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景在当今数字化时代,数据分析已成为各行各业不可或缺的技能之一,而Python作为数据分析领域的首选语言,其重要性日益凸显。然而,传统的教学模式在......
  • 如何将多个变量分配给 python 函数中的单个参数?
    我正在尝试编写一个程序,如果可能的话,它需要一个三项式并对其进行因式分解。每当用户输入A、B和C时,三项式应该通过Factor(product,summation)函数获取,但我似乎无法弄清楚如何将A和C分配给乘积arg,将B分配给我尝试在函数外部声明不同的变量,product=(a*c)和summati......
  • python - 从文本生成音乐
    请给我一些建议为了解释一下,我输入“深度睡眠的睡眠音乐”,它将返回一个wav文件:https://www.youtube.com/watch?v=1wAdQhFJy54或者我给出一个wav文件,它会返回相同的现在这是我尝试过的:https://github.com/facebookresearch/audiocraft......