私は、このようにアクティブ化できる固定長 (今のところ) ブルート フォース ジェネレーターを作成する方法を見つけようとしています。
for i in FixedLength('abc', 3):
print(i);
i の値はジェネレータであってはなりません。これは私が持っているものです:
import sys;
class FixedLength:
def __init__(self, charset, length, code_page=sys.getdefaultencoding())
self.length=length;
self.code_page=code_page;
#basically
self.charset=bytes(charset, code_page);
self.retval=[charset[0]]*length;
def __iter__(self):
return self;
def __next__(self):
#problem line 1
self.recurse(0);
raise StopIteration;
def recurse(self, recursion_level):
if recursion_level==self.length-1:
for char in self.charset:
self.retval[recursion_level]=char;
if self.validate():
#problem line 2
yield self.output();
else:
for char in self.charset:
self.retval[recursion_level]=char;
self.recurse(recursion_level+1);
def validate(self):
return True;
def output(self):
return bytes(self.retval).decode(self.code_page);
(問題の2行目から)出力がうまく印刷されることはわかっていますが、同じ情報を得ることができません。降伏問題の行 1 は、ジェネレーターをジェネレーターにパックします。問題の行 1 を返しても、StopIteration エラーが発生しないため、機能しません。しかし、それを除けば、実際には再帰していないようです。ただし、self.recurse を繰り返し呼び出しますが、再帰レベルは 0 のままです。