如何检查python函数是否使用while循环?

def foo():

    while <condition>:

        do something


def bar():

    for i in range(5):

        do something

假设我在一个文件名中定义了两个函数test.py。python 有没有办法编写具有以下行为的函数?


import test


def uses_while(fn: Callable) -> bool:

    (what goes here?)


>>> uses_while(test.foo)

True

>>> uses_while(test.bar)

False

我本质上需要以编程方式检查函数是否使用 while 循环,而不需要手动检查代码。我想过使用 pdb.getsourcelines() ,但是如果里面有注释或字符串中包含“while”一词,那么这不起作用。有任何想法吗?


慕田峪7331174
浏览 128回答 2
2回答

慕的地8271018

import astimport inspectfrom typing import Callabledef uses_while(fn: Callable) -> bool:&nbsp; &nbsp; nodes = ast.walk(ast.parse(inspect.getsource(fn)))&nbsp; &nbsp; return any(isinstance(node, ast.While) for node in nodes)在 Python 3.9+ 上,您必须将其更改为from collections.abc import Callable.

慕勒3428872

我编写了一个简单的函数,可以检查作为参数给出的函数是否包含 while 循环:import inspectdef test_while(func):&nbsp; flag = False&nbsp; body = inspect.getsourcelines(func)&nbsp; string = ''.join(body[0]).replace(' ', '')&nbsp; splited = string.split('\n')&nbsp;&nbsp;&nbsp; for chain in splited:&nbsp; &nbsp; if len(chain) > 0 and chain[0] is not '#':&nbsp; &nbsp; &nbsp; if chain.startswith('while'):&nbsp; &nbsp; &nbsp; &nbsp; flag = True&nbsp; return flag
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python