On Wed, 10 Aug 2016 06:51 am, Juan Pablo Romero Méndez wrote: > 2016-08-09 13:18 GMT-07:00 Rob Gaddi <rgaddi@highlandtechnology.invalid>:
>> It's not a style, it's the absence of one. >> >> def add2list(lst, elem): >> lst.extend([elem, elem]) >> return lst >> >> I did all the type checking I needed to there; none whatsoever. If >> passed a list, or something that behaves like one, that does the >> expected thing. >> >> If passed an ExtensionLadder, it probably does the wrong thing, but that >> is no way my problem. > > So as the writer of the function you expect the user to read the function > body to determine what is safe to pass or not? No. We expect them to read the docs, which will say something like "expects a list". Anything that behaves like a list *should* do: if something behaves like a list, then it might as well be a list, regardless of whether or not it inherits from the list built-in type or not. This is called Duck Typing: "If it quacks like a duck, swims like a duck and walks like a duck, it might as well be a duck." If your function wants an object it can call extend on, then why should it demand a list? It should only care about whether or not the object has an extend method. Some functions may be stricter, either from some specific need, or just because the author is a refugee from a statically typed language who thinks that they need to type-check *everything*. (May the gods preserve us from such people.) In that case, your testing will quickly reveal that a list-like object is not good enough, only an actual list will do. -- Steve “Cheer up,” they said, “things could be worse.” So I cheered up, and sure enough, things got worse. -- https://mail.python.org/mailman/listinfo/python-list