import types def esegui (a): if type(a)!=types.ListType: return a f=a[0] if type(f)!=types.FunctionType: # f non e' una funzione. return map(esegui,a) return apply(f,map(esegui,a[1:])) def somma (*a): s=0 for x in a: s+=x return s def prodotto (*a): p=1 for x in a: p*=x return p programma = [somma,5,[prodotto,2,3,7],8] print esegui(programma) # 55 --------------------------------------- def fatt (n): if n==0: return 1 else: return n*fatt(n-1) --------------------------------------- sys.setrecursionlimit(2000) print fatt(1998) # Funziona. --------------------------------------- print sys.getrecursionlimit() # 1000 (se non reimpostato) --------------------------------------- def lineare (a): v=[] for x in a: if isinstance(x,(list,tuple)): v.extend(lineare(x)) else: v.append(x) return v --------------------------------------- a=[(1,3),5,[6,[8,1,2],5],8] print lineare(a) # [1, 3, 5, 6, 8, 1, 2, 5, 8] --------------------------------------- def sottodizionario (diz,chiavi): return dict([(x,diz.get(x)) for x in chiavi]) --------------------------------------- diz=dict(a=7,b=3,c=4,d=5,e=11) sd=sottodizionario(diz,['a','e']) print sd # {'a': 7, 'e': 11} --------------------------------------- def divmin (n): r=int(math.sqrt(n)) for d in xrange(2,r+1): if n%d==0: return d else: return n print divmin(323) # 17 print divmin(31) # 31 --------------------------------------- if n==0: return 2 if n==1 or n==-1: return None --------------------------------------- diz = {'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'x' : 5, 'y' : 6, 'z' : 7} print diz.values() # [1, 3, 2, 4, 6, 5, 7] --------------------------------------- def fib (n): v=[0,1] for i in xrange(n-1): v.append(v[-2]+v[-1]) return v --------------------------------------- import os os.system('rm *.pyc')