如何找出 python 函数返回的输出数量?

kyp*_*hos 2 python function abstract-syntax-tree output

假设有两个 Python 函数:

def f1(x):
    return x

def f2(x):
    return x,x**2
Run Code Online (Sandbox Code Playgroud)

我想知道 . 返回了多少个输出f1以及 . 返回了多少个输出f2

我想避免以下解决方案:

result = f1(1)
no_outputs = len(result) if type(result) == tuple else 1
Run Code Online (Sandbox Code Playgroud)

由于当函数返回元组时此解决方案会失败。

我开始使用 python ast(抽象语法树)库,并且想知道是否有任何方法可以解析函数的语法树以计算出返回的输出数量?

大致如下:

import inspect
import ast

src = inspect.getsourcelines(f1)[0]

string = ''.join(src)
ast_   = ast.parse(string)
Run Code Online (Sandbox Code Playgroud)

我探索过ast_但无法找到回报是什么。

Jim*_*nis 6

从技术上讲,函数返回一个值。该值可能是一个元组、一本字典或任何任意复杂的对象(包括集合对象)。

多个返回值的出现仅仅是自动解包周围的一些语法糖的结果,并且 Python 中的元组运算符实际上是 , (逗号;括号在 return 语句中不是必需的,仅在以下情况下才需要) ,(逗号)会产生歧义)。

因为 Python 是动态类型的,所以函数可以根据其参数或调用时程序的全局状态返回不同类型的值(对象)。它可以在同一程序(解释器/VM)会话期间为不同的调用返回不同类型的对象。

您应该将函数的返回类型视为文档问题……任何编写良好的 Python 函数都会记录其返回类型(最好在文档字符串中)。

包裹在某些数据结构中的类方法返回self相当常见的...这允许“链式使用”模式: Foo.fiddle().faddle().spritz().output() .. .我们用一个简洁的表达式对对象执行一系列操作。