我正在为学生处理python问题的数据集。该数据集包含如下问题:
下面Python代码的输出是什么?
x = 50 def func(): global x print('x is', x) x = 2 print('Changed global x to', x) func() print('Value of x is', x)
注意:我以这种方式格式化了问题,但在数据集中,整个问题是一个大字符串,代码和文本部分不是分开的
我必须生成一个列表,其中包含数据集中给出的问题中存在的所有内置python函数和方法。一个像这样只有一个元素的列表["print()"]应为上述问题返回。我必须将所有问题数据集中使用的所有唯一函数组合到一个列表中。
我必须使用这个函数列表来计算列表中所有函数在数据集的一个问题中出现的频率。我将循环遍历整个数据集,以获取数据集中每个问题的信息。
这是我面临的问题。
-
如果我使用正则表达式在文本中查找函数,我也会得到函数func()在问题中是用户定义的,但是在数据集中的每个问题中,首先使用def定义自定义函数。关键字。我如何利用这一点,从内置函数中过滤出用户定义的函数?
-
我是regex的新手,因此我无法想到如何编写一个强大的regex函数,将从文本返回所有内置函数和方法。(注意:当函数在新行中调用或在前面加空格时,方法是这样调用的:list.append('a'). 这里我需要正则表达式只识别append()作为方法而不是list.append().
-
正如评论中建议的那样,您可以使用
__builtins__
。dir(__builtins__)
将为您提供所有内置对象的名称列表。您将需要该列表的较低部分,这是函数所在的位置。 -
对于正则表达式…您可以按照(1)中的建议构建一个内置列表,然后像这样在正则表达式中使用它:
import re
rex = re.compile(f"({'|'.join(builtins)})s*(")
使用了函数名后面必须后跟左括号的事实。您可以稍后在构建结果列表时添加右括号。