import operator def factorial(n): """Calculate n factorial""" return reduce(operator.mul, range(2, n+1), 1) def intersection(*sets): """Get the intersection of all input sets""" return reduce(set.intersection, sets) def union(*sets): """Get the union of all input sets""" return reduce(set.union, sets) def join(*seqs): """Join any input sequences that support concatenation""" return reduce(operator.concat, seqs) """ Some usage: >>> factorial(3) 6 >>> factorial(10) 3628800 >>> a = set([1, 2, 3, 4, 5]) >>> b = set([5, 6, 3, 7]) >>> c = set([8, 7, 5]) >>> intersection(a, b, c) set([5]) >>> union(a, b, c) set([1, 2, 3, 4, 5, 6, 7, 8]) >>> join("one", "two", "three", "four") 'onetwothreefour' >>> join([1, 2, 3], [5, 6], [6, 7]) [1, 2, 3, 4, 5, 6, 7] """