假设有两个 Python 函数:
def f1(x):
return x
def f2(x):
return x,x**2
我想知道 f1 返回了多少输出,f2 返回了多少输出。
我想避免以下解决方案:
result = f1(1)
no_outputs = len(result) if type(result) == tuple else 1
因为当函数返回元组时此解决方案失败。
我开始使用 python ast(抽象语法树)库,想知道是否有任何方法可以解析函数的语法树以计算出返回的输出数量?
类似的东西:
import inspect
import ast
src = inspect.getsourcelines(f1)[0]
string = ''.join(src)
ast_ = ast.parse(string)
我探索了 ast_ 但无法找到返回值。
请您参考如下方法:
从技术上讲,函数返回一个值。该值可能是元组、字典或任何任意复杂的对象(包括集合对象)。
多个返回值的出现仅仅是围绕自动拆包的一些语法糖的结果,事实上 Python 中的元组运算符实际上是 ,(逗号;返回 语句,仅在 ,(逗号)不明确的情况下才需要)。
因为 Python 是动态类型的,函数可以返回不同类型的值(对象),这取决于它的参数或调用时程序的全局状态。它可以在同一个程序(解释器/VM) session 期间为不同的调用返回不同类型的对象。
您应该将函数的返回类型视为文档问题……任何编写良好的 Python 函数都会记录其返回类型(最好在文档字符串中)。
包裹在某些数据结构周围的类的方法返回self 是相当常见的......这允许“链式使用”模式:Foo.fiddle().faddle().spritz().output() ... 我们在一个简洁的表达式中对对象执行了一系列操作。
