为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕田峪7331174 2023-07-11 10:49:13
def foo():    while <condition>:        do somethingdef bar():    for i in range(5):        do something假设我在一个文件名中定义了两个函数test.py。python 有没有办法编写具有以下行为的函数?import testdef uses_while(fn: Callable) -> bool:    (what goes here?)>>> uses_while(test.foo)True>>> uses_while(test.bar)False我本质上需要以编程方式检查函数是否使用 while 循环,而不需要手动检查代码。我想过使用 pdb.getsourcelines() ,但是如果里面有注释或字符串中包含“while”一词,那么这不起作用。有任何想法吗?
查看完整描述

2 回答

?
慕的地8271018

TA贡献1796条经验 获得超4个赞

import ast

import inspect

from typing import Callable


def uses_while(fn: Callable) -> bool:

    nodes = ast.walk(ast.parse(inspect.getsource(fn)))

    return any(isinstance(node, ast.While) for node in nodes)

在 Python 3.9+ 上,您必须将其更改为from collections.abc import Callable.


查看完整回答
反对 回复 2023-07-11
?
慕勒3428872

TA贡献1848条经验 获得超6个赞

我编写了一个简单的函数,可以检查作为参数给出的函数是否包含 while 循环:


import inspect


def test_while(func):

  flag = False


  body = inspect.getsourcelines(func)

  string = ''.join(body[0]).replace(' ', '')

  splited = string.split('\n')

  

  for chain in splited:

    if len(chain) > 0 and chain[0] is not '#':

      if chain.startswith('while'):

        flag = True


  return flag


查看完整回答
反对 回复 2023-07-11
  • 2 回答
  • 0 关注
  • 127 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信