the len(function the simplest example is the len(functionwhich counts the number of items in some kind of container objectsuch as dictionary or list you've seen it beforelen([ , , , ] why don' these objects have length property instead of having to call function on themtechnicallythey do most objects that len(will apply to have method called __len__(that returns the same value so len(myobjseems to call myobj __len__(why should we use the len(function instead of the __len__ methodobviously __len__ is special double-underscore methodsuggesting that we shouldn' call it directly there must be an explanation for this the python developers don' make such design decisions lightly the main reason is efficiency when we call __len__ on an objectthe object has to look the method up in its namespaceandif the special __getattribute__ method (which is called every time an attribute or method on an object is accessedis defined on that objectit has to be called as well further__getattribute__ for that particular method may have been written to do something nastylike refusing to give us access to special methods such as __len__the len(function doesn' encounter any of this it actually calls the __len__ function on the underlying classso len(myobjmaps to myobj __len__(myobjanother reason is maintainability in the futurethe python developers may want to change len(so that it can calculate the length of objects that don' have __len__for exampleby counting the number of items returned in an iterator they'll only have to change one function instead of countless __len__ methods across the board there is one other extremely important and often overlooked reason for len(being an external functionbackwards compatibility this is often cited in articles as "for historical reasons"which is mildly dismissive phrase that an author will use to say something is the way it is because mistake was made long ago and we're stuck with it strictly speakinglen(isn' mistakeit' design decisionbut that decision was made in less object-oriented time it has stood the test of time and has some benefitsso do get used to it reversed the reversed(function takes any sequence as inputand returns copy of that sequence in reverse order it is normally used in for loops when we want to loop over items from back to front