Ok a little more investigation has found the follwing work but there not as tidy. I'd still really appreciate someone explaing why this behaves like this!
class A: def break_down(self, value, base, broken_list=[]): power = len(broken_list) digit = (value % (base ** (power + 1))) / (base ** power) value -= digit * (base**power) broken_list.append(digit) if value != 0: return self.break_down(value, base, broken_list=broken_list) else: return broken_list if __name__ == '__main__': a = A() d_list_1 = a.break_down(34567, 256, []) print d_list_1 a2 = A() d_list_2 = a2.break_down(34567, 256, []) print d_list_2 ......OR: class A: def break_down(self, value, base, broken_list=None): if broken_list == None: broken_list = [] power = len(broken_list) digit = (value % (base ** (power + 1))) / (base ** power) value -= digit * (base**power) broken_list.append(digit) if value != 0: return self.break_down(value, base, broken_list=broken_list) else: return broken_list if __name__ == '__main__': a = A() d_list_1 = a.break_down(34567, 256) print d_list_1 a2 = A() d_list_2 = a2.break_down(34567, 256) print d_list_2 Yours Faithfully, Wesley Brooks On 3 August 2010 11:02, Wesley Brooks <wesbro...@gmail.com> wrote: > Dear Python Users, > > I'm having real difficulty understanding why the following is not > working and hoped I've either missed something obvious of I'm doing > something wrong! > > class A: > def break_down(self, value, base, broken_list=[]): > power = len(broken_list) > digit = int((value % (base ** (power + 1))) / (base ** power)) > value -= digit * (base**power) > broken_list.append(digit) > if value != 0: > return self.break_down(value, base, broken_list=broken_list) > else: > return broken_list[:] > > if __name__ == '__main__': > a = A() > d_list_1 = a.break_down(34567, 256) > print d_list_1 > a2 = A() > d_list_2 = a2.break_down(34567, 256) > print d_list_2 > > When the above runs it fails with the error "RuntimeError: maximum > recursion depth exceeded while calling a Python object". > > The following also does not work: > > if __name__ == '__main__': > a = A() > digit_list_1 = a.break_down(34567, 256) > print digit_list_1 > del digit_list_1, usc > a2 = A() > digit_list_2 = a2.break_down(34567, 256) > print digit_list_2 > > but the following two do work: > > if __name__ == '__main__': > a = A() > digit_list_1 = a.break_down(34567, 256) > print digit_list_1 > #a2 = A() > #digit_list_2 = a2.break_down(34567, 256) > #print digit_list_2 > > if __name__ == '__main__': > #a = A() > #digit_list_1 = a.break_down(34567, 256) > #print digit_list_1 > a2 = A() > digit_list_2 = a2.break_down(34567, 256) > print digit_list_2 > > I'm a little stumped as I don't think I'm using any global or class > variables? Any help would be much appreciated. > > Yours Faithfully, > > Wesley Brooks > _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor