gpt4 book ai didi

Python 检查函数是否有返回语句

转载 作者:行者123 更新时间:2023-11-28 19:38:44 25 4
gpt4 key购买 nike

例如

def f1():
return 1

def f2():
return None

def f3():
print("Hello")

函数 f1()f2() 返回一些东西,但 f3() 没有。

a = f2()
b = f3()

这里 a 等于 b 所以我不能只比较函数的结果来检查是否有 return

最佳答案

我喜欢@st0le 检查源代码的想法,但您可以更进一步,将源代码解析为源代码树,这消除了误报的可能性。

import ast
import inspect

def contains_explicit_return(f):
return any(isinstance(node, ast.Return) for node in ast.walk(ast.parse(inspect.getsource(f))))

def f1():
return 1

def f2():
return None

def f3():
print("return")

for f in (f1, f2, f3):
print(f, contains_explicit_return(f))

结果:

<function f1 at 0x01D151E0> True
<function f2 at 0x01D15AE0> True
<function f3 at 0x0386E108> False

当然,这仅适用于具有用 Python 编写的源代码的函数,并非所有函数都适用。例如,contains_explicit_return(math.sqrt) 会给你一个 TypeError。

此外,这不会告诉您有关函数的任何特定执行是否命中返回语句的任何信息。考虑功能:

def f():
if random.choice((True, False)):
return 1

def g():
if False:
return 1

contains_explicit_return 将给出 True 这两个,尽管 f 在其执行的一半中没有遇到返回,并且 g 从未遇到过返回

最后,它不会区分是函数有return语句还是函数内部定义的函数有return语句:

def f():
def g():
return 5

在这种情况下,contains_explicit_return(f) 将返回 True,即使 f 永远不会返回任何内容,因为函数 g 里面包含一个明确的返回。

关于Python 检查函数是否有返回语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48232810/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com