没有排除类似__init__和self
时间: 2023-07-02 15:18:27 浏览: 151
__init__.pyi
是的,您说得对。在 Python 中,还有一些特殊的变量名,比如 `__init__` 和 `self`,它们虽然不是关键字,但通常也不应该被当作普通变量名来处理。为了排除这些特殊变量名,我们可以使用 Python 的命名规则,即以 `__` 开头和结尾的变量名通常是特殊变量名,不应该被当作普通变量名来处理。同样地,方法参数中的 `self` 也是一个特殊变量名,不应该被当作普通变量名来处理。
下面是修改后的示例代码:
```python
import re
import keyword
# 读取 Python 程序文件
with open("example.py", "r") as f:
lines = f.readlines()
# 获取 Python 关键字集合
keywords = set(keyword.kwlist)
# 定义正则表达式匹配变量名
pattern = re.compile(r"\b([a-zA-Z_][a-zA-Z0-9_]*)\b")
# 存储变量名及其所在行数的字典
variables = {}
# 遍历每一行
for i, line in enumerate(lines):
# 使用正则表达式匹配变量名
matches = pattern.findall(line)
# 如果有匹配到变量名,则将其存储在字典中
if matches:
for var in matches:
# 排除 Python 关键字和特殊变量名
if var not in keywords and not var.startswith("__") and var != "self":
variables[var] = i + 1
# 打印出所有变量名及其所在位置
for var, line_num in variables.items():
print(f"{var} (line {line_num})")
```
在上述代码中,我们添加了条件判断,将以 `__` 开头和结尾的变量名和 `self` 排除掉。这样就可以更准确地提取 Python 程序中的变量名了。
阅读全文