私はスコープの問題、おそらく名前空間と呼ばれるものがあると思います。あまりにも私はPythonに新しいです。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をインポートする必要がありますか?それは現在のもので見つからない場合は、他のスコープを介してpythonの検索をしないので、私はそうは思わないでしょうか?
私はあなたの助けに感謝し、この検索を行うより良い方法があるなら私は知りたいと思うでしょう。 、
import re
class ....
プログラムとして実行したときにのみ、再モジュールをインポートしていない:ありがとう