strictly speakingthe parentheses are not needed on the rightbut as we noted earlierthe coding style used in this book is to omit parentheses for left-hand operands of binary operators and right-hand operands of unary statementsbut to use parentheses in all other cases we have already seen examples of sequence unpacking in the context of for in loops here is reminderfor xy in ((- )( )( - ))print(math hypot(xy)here we loop over tuple of -tuplesunpacking each -tuple into variables and named tuples | named tuple behaves just like plain tupleand has the same performance characteristics what it adds is the ability to refer to items in the tuple by name as well as by index positionand this allows us to create aggregates of data items the collections module provides the namedtuple(function this function is used to create custom tuple data types for examplesale collections namedtuple("sale""productid customerid date quantity price"the first argument to collections namedtuple(is the name of the custom tuple data type that we want to be created the second argument is string of spaceseparated namesone for each item that our custom tuples will take the first argumentand the names in the second argumentmust all be valid python identifiers the function returns custom class (data typethat can be used to create named tuples soin this casewe can treat sale just like any other python class (such as tuple)and create objects of type sale (in object-oriented termsevery class created this way is subclass of tupleobject-oriented programmingincluding subclassingis covered in here is an examplesales [sales append(sale( "" )sales append(sale( "" )here we have created list of two sale itemsthat isof two custom tuples we can refer to items in the tuples using index positions--for examplethe price of the first sale item is sales[ ][- ( )--but we can also use nameswhich makes things much clearer