On Fri, Jan 26, 2018 at 08:56:31PM -0600, boB Stepp wrote: > ... they are not designed to explicitly return something else?
Yes. In the absence of an explicit return, all Python functions will return None. > The reason I ask is that I almost fell into the following trap: > > <GCE trap> > py3: a_lst = [0, 1, 2] > py3: b_lst = a_lst.append(3) > py3: a_lst, b_lst > ([0, 1, 2, 3], None) > > Instead of "None" I was expecting "[0, 1, 2, 3]". Obviously I have a > GCE (Gross Conceptual Error). > </GCE trap> > > I almost sent the above as my question, but then I realized (Finally!) > that lst.append() performs an append operation on lst and returns > None. Just like print() returns None. > > So my actual question is: For these types of methods/functions, is > Python Both versions 2 and 3) consistent throughout and *always* > returns None? Mostly. Python's policy is that functions and methods which operate by side-effect, or modify the object in place (such as list.append, insert, sort, reverse, etc, or dict.update, clear etc), return None. That is to prevent the sort of error where you do this: alist = [4, 1, 2, 5, 3] blist = alist.sort() assert blist == [1, 2, 3, 4, 5] assert alist == [4, 1, 2, 5, 3] # this will fail thinking that list.sort returns a copy. So in general, such functions all return None. However, there have been a few changes, such as file.write method, which used to return None in Python 2 but in Python 3 returns the number of characters actually written. -- Steve _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor