Я полагаю, что у меня есть то, что называется проблемой объема, возможно, пространством имен.Не слишком уверен, что я новичок в Python.
Я пытаюсь создать модуль, который будет искать в списке с помощью регулярных выражений.Я уверен, что есть лучший способ сделать это, но эта ошибка вызывает у меня ошибку, и я хочу понять, почему.
вот мой код:
class relist(list):
def __init__(self, l):
list.__init__(self, l)
def __getitem__(self, rexp):
r = re.compile(rexp)
res = filter(r.match, self)
return res
if __name__ == '__main__':
import re
listl = [x+y for x in 'test string' for y in 'another string for testing']
print(listl)
test = relist(listl)
print('----------------------------------')
print(test['[s.]'])
КогдаЯ запускаю этот код через командную строку, он работает так, как я ожидаю;Однако, когда я запускаю его в интерактивном режиме Python, я получаю сообщение об ошибке
>>> test['[s.]']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "relist.py", line 8, in __getitem__
r = re.compile(rexp)
NameError: global name 're' is not defined
. В интерактивном режиме я импортирую re и могу использовать функции re, но по какой-то причине, когда пытаюсьчтобы выполнить модуль, он не работает.
Нужно ли импортировать re в область действия класса?Я бы так не думал, потому что Python не выполняет поиск по другим областям, если он не найден в текущей?
Я ценю вашу помощь, и если есть лучший способ сделать этот поиск, мне было бы интереснов знании.Спасибо