首页 > 解决方案 > 函数中未赋值的表达式

问题描述

我正在阅读 Beazley 和 Jones 的“Python Cookbook”,我遇到了以下代码:

# Token processing functions
def t_NUM(t):
 r'\d+'
 t.value = int(t.value)
 return t

我不明白的目的是什么r'\d+'。上面的示例是我不希望任何人深入研究的较大代码的一部分。因此,请考虑以下 MRE:

def func():
    1

这似乎是一个合法的功能,即使1没有分配。那么,函数内部的这种语法/语句的意义何在?

标签: pythonpython-3.x

解决方案


我不明白 r'\d+' 的目的是什么。

正如其他人所提到的,一般来说它是一个docstring,字符串附加到函数对象上,并且可以通过pydoc/之类的工具或Sphinxhelp之类的文档系统显示。

顾名思义,它是一个文档字符串,内容通常是对函数的目的和接口(输入/输出/异常)的解释,例如标准库中的这个示例

文档字符串可以定义为 a classor的第一个语句function,位于模块的顶部(这些规则有点复杂),或者在一些赋值之后(“属性文档字符串”),尽管大多数工具在最后一个有问题一。

但是在这种特定情况下

上面的示例是较大代码的一部分 [...]

非常相关:这是一个使用ply的解析器示例 ,它利用文档字符串作为标记化模式

使用函数时 [nb: tp 指定令牌],正则表达式规则在函数文档字符串中指定。该函数始终采用单个参数,它是 LexToken 的一个实例。

因此,对于这个特定的 Cookbook 片段,目的r'\d+'不是文档,而是定义将哪种输入视为NUM令牌。


推荐阅读