def multiply2(x): """Multiply by two""" return x * 2 def divide(numerator, denominator): pass multiply2(4) divide(1, 0) is None def func0(x): return def func1(x): return None def func2(x): y = x**x x = 2 print func0(x) == func1(x) == func2(x) == None def add(a, b): return a + b def fun(a, b, func): return func(a, b) fun('c','d', add) def divide(numerator, denominator): pass divide(4, 2) # return 2 divide(4, 0) # print Divide a number with 0 is not a valid operation! divide(1,'a') # print Not a valid parameter! def summatory(*args): result = 0 for num in args: result += num return result summatory(1, 2, 3, 4, 5) summatory(*range(1, 6)) range(1, 6) # start, stop, step def multiply(number, mult=2): return number * mult multiply(4) multiply('a') multiply('a', 6) multiply('a', mult=8) def contact(**kargs): for key, val in kargs.items(): print "%s => %r" % (key, val) contact(pietro=33312388, john=2345678) args_kargs(1,2,'a',[1,2,3], key='value', other='ciao') def args_kargs(*args, **kargs): pass def summ_mult(list_of_tuple): # define a new function inside def summ(tupl): res = 0 for x in tupl: res += x return res result = 1 for el in list_of_tuple: result *= summ(el) return result summ_mult([(1,2,3), (4,5,6)]) def use_yield(*args): for a in args: yield a * 2 use_yield(1, 2, 3, 4, 'a') [i for i in use_yield(1, 2, 3, 4, 'a')] usy = use_yield(1, 2, 3, 4, 'a') usy.next() str(2.8) range(1,10,2) xrange(1,10,2) [i for i in xrange(1,10,2)] len([1, 2, 3, 4]) # return the lenght of an object names = ['one', 'two', 'three', 'four', 'five'] values = [1, 2, 3, 4, 5] zip(names, values) # return a list of pairs for name, value in zip(names, values): print '%5s = %d' % (name, value) dir('a') # return all the attributes of an object VERBOSE = True def verbose(func): def wrapper(*args): if VERBOSE: print "Before to execute: %s" % func.func_name result = func(*args) if VERBOSE: print "After the execution: %s" % func.func_name return result return wrapper verbose(multiply2)(1) VERBOSE = True # try to change @verbose def mult(*args): result = args[0] for i in args[1:]: result *= i return result mult(1, 2, 3, 4) import time def timeit(function): def timed(*args, **kargs): # do something before time_start = time.time() # execute the function result = function(*args, **kargs) # do something after time_end = time.time() print 'name=%r (args=%r, kargs=%r) processing time=%10.8f sec' % (function.__name__, args, kargs, time_end - time_start) return result return timed timeit(multiply2)(2) @timeit def mult(*args): result = 1 for a in args: result *= a return result mult(1,2,3,4)