protocol)the function can process them that isif the objects passed into function have the expected methods and expression operatorsthey are plug-and-play compatible with the function' logic even in our simple times functionthis means that any two objects that support will workno matter what they may beand no matter when they are coded this function will work on two numbers (performing multiplication)or string and number (performing repetition)or any other combination of objects supporting the expected interface--even class-based objects we have not even imagined yet moreoverif the objects passed in do not support this expected interfacepython will detect the error when the expression is run and raise an exception automatically it' therefore usually pointless to code error checking ourselves in factdoing so would limit our function' utilityas it would be restricted to work only on objects whose types we test for this turns out to be crucial philosophical difference between python and statically typed languages like +and javain pythonyour code is not supposed to care about specific data types if it doesit will be limited to working on just the types you anticipated when you wrote itand it will not support other compatible object types that may be coded in the future although it is possible to test for types with tools like the type built-in functiondoing so breaks your code' flexibility by and largewe code to object interfaces in pythonnot data types of coursesome programs have unique requirementsand this polymorphic model of programming means we have to test our code to detect errorsrather than providing type declarations compiler can use to detect some types of errors for us ahead of time in exchange for an initial bit of testingthoughwe radically reduce the amount of code we have to write and radically increase our code' flexibility as you'll learnit' net win in practice second exampleintersecting sequences let' look at second function example that does something bit more useful than multiplying arguments and further illustrates function basics in we coded for loop that collected items held in common in two strings we noted there that the code wasn' as useful as it could be because it was set up to work only on specific variables and could not be rerun later of coursewe could copy this polymorphic behavior has in recent years come to also be known as duck typing--the essential idea being that your code is not supposed to care if an object is duckonly that it quacks anything that quacks will doduck or notand the implementation of quacks is up to the objecta principle which will become even more apparent when we study classes in part vi graphic metaphor to be surethough this is really just new label for an older ideaand use cases for quacking software would seem limited in the tangible world (he saysbracing for emails from militant ornithologists function basics