我希望找到所有返 echo 式元组的函数. 例如,

    ...
    return x, y

会很流行,但是

    ...
    return {"x":x, "y":y}

将不存在,因此regexp搜索return .*,将返回太多的误报.

我怀疑pylint/astroid可能会做我想要的事情,但我对all条建议持开放态度.

PS.没有类型注释--我宁愿让某个东西自动生成它们,就像在ocaml中一样.

推荐答案

这是一个可以做你想做的事情的Pylt插件.

from astroid import nodes

from pylint.checkers import BaseChecker


class TupleReturnChecker(BaseChecker):
    msgs = {
        "W5100": (
            "Tuple in return %s",
            "tuple-in-return",
            "Raised when a tuple is returned.",
        )
    }

    def visit_return(self, node: nodes.Return) -> None:
        if isinstance(node.value, nodes.Tuple):
            self.add_message("tuple-in-return", args=node.as_string())

但在这个简单的例子中,你不需要使用星体,ast.NodeVisitor看起来会很相似.

import ast

class TupleDetector(ast.NodeVisitor):
   def visit_Return(self, node: ast.Return) -> None:
       if isinstance(node.value, ast.Tuple):
            print(f"{node} is a tuple")

detector = TupleDetector()
with open(code_path) as f:
    detector.visit(ast.parse(f.read()))

如果您有一些东西可能返回一个元组,并且您需要进行推理,则pylint将非常有用.

Python相关问答推荐

如何使用上下文管理器创建类的实例?

如何使用没有Selenium的Python在百思买着陆页面上处理国家/地区 Select ?

Pythind 11无法弄清楚如何访问tuple元素

如何使用pandasDataFrames和scipy高度优化相关性计算

由于NEP 50,向uint 8添加-256的代码是否会在numpy 2中失败?

如何比较numPy数组中的两个图像以获取它们不同的像素

如何让程序打印新段落上的每一行?

从一个系列创建一个Dataframe,特别是如何重命名其中的列(例如:使用NAs/NaN)

迭代嵌套字典的值

Python脚本使用蓝牙运行在Windows 11与raspberry pi4

Flash只从html表单中获取一个值

matplotlib图中的复杂箭头形状

python中csv. Dictreader. fieldname的类型是什么?'

基于Scipy插值法的三次样条系数

使用Openpyxl从Excel中的折线图更改图表样式

如何按row_id/row_number过滤数据帧

Polars Group by描述扩展

当HTTP 201响应包含 Big Data 的POST请求时,应该是什么?  

如何获得满足掩码条件的第一行的索引?

在matplotlib中重叠极 map 以创建径向龙卷风图