zoukankan      html  css  js  c++  java
  • PythonPP+lambda:示例


        直接上代码。 python PP 下载, 可以到官网下载 Python PP 下载 

        lambda 能做的, 基本上普通函数都可以做到。 lambda 的主要作用是简化表达式, 并且似乎尤其适合于表达科学计算公式。 结合 map, reduce 等函数,可以获得更强大而“优雅”的表达能力。 这里的“优雅”并不一定表示易理解性,而常常是因为一句短小精炼的代码使得人眼前一亮。   

        以下代码演示 lambda 的用法及 python 并发编程。    

     

    import pp
    from multiprocessing import Process, Pool, Pipe
    
    def addNFunc(n):
        return lambda x:x+n
    
    def fac(n):
        if n <= 1:
            return 1
        return reduce(lambda x,y: x*y, map(addNFunc(1), range(n)))
    
    def computingFacOfRange(begin, end):
        for i in map(addNFunc(begin), range(end-begin+1)):
            print i, '! =', fac(i)
    
    def another():
        print 'another quick job'
     
    def  QuadraticSum(n, m):
        ''' compute 1^m + 2^m + ... + n^m '''
        if n <= 1:
            return 1
        return reduce(lambda x,y: x+y**m, map(addNFunc(1), range(n)))
    
    def expressQS(n,m):
        if n <= 1:
            return '1'
        return reduce(lambda x,y: "%s+%s" %(str(x),str(y)+'^'+str(m)), map(addNFunc(1), range(n)))
    
    def obtainQuadraticSum(n, m):
        return "%s=%s" % (expressQS(n, m), QuadraticSum(n,m))
    
    def obtainQuadraticSumByPipe(conn, n, m):
        conn.send(obtainQuadraticSum(n, m))
    
    def printQuadraticSum(n, m):
        print obtainQuadraticSum(n, m)
    
    def testQuadraticSum():
        for n in [1,2,3,4,5]:
            for m in [-1,1,2,3]:
                printQuadraticSum(n, m)
                      
    def usingPP():
        ''' using pp module for python concurrent programming '''
        nworkers = 10
        ppservers = ()
        job_server = pp.Server(nworkers, ppservers=ppservers)
    
        print "Starting pp with", job_server.get_ncpus(), "workers"
    
        jobs = []
        for i in range(nworkers):
            jobs.append(job_server.submit(computingFacOfRange, (i*10+1, (i+1)*10), (fac,addNFunc,)))
    
        jobs.append(job_server.submit(another, ()))
    
        for job in jobs:
            job()
        
        job_server.print_stats()
        
    
    def usingMultiprocess():
        ''' using multiprocessing module for python concurrent programming '''
        num = 100
        processes = []
    
        print '************ using original process ***********'
        input_conn, output_conn = Pipe()
        for m in [-1,1,2,3]:
            p = Process(target=obtainQuadraticSumByPipe, args=(input_conn, num,m,))
            p.start()
            print output_conn.recv()
    
        print '------------- using Pool -------------'
        pool = Pool(processes=4)
        for m in [-1,1,2,3]:
            pool.apply(printQuadraticSum, (num,m))
           
    
    if __name__ == '__main__':
        testQuadraticSum()
        usingPP()
        usingMultiprocess()
  • 相关阅读:
    An impassioned circulation of affection(尺取+预处理)
    旅游(CSUST省赛选拔赛2+状压dp+最短路)
    Islands and Bridges(POJ2288+状压dp+Hamilton 回路)
    Travelling(HDU3001+状压dp+三进制+最短路)
    Hie with the Pie(POJ3311+floyd+状压dp+TSP问题dp解法)
    hash(2018年CSUST省赛选拔赛第一场B题+hash+字典树)
    Everything Has Changed(HDU6354+圆交+求周长)
    [iOS Animation]-CALayer 图层几何学
    [iOS Animation]-CALayer 显示方式
    [iOS Animation]-CALayer 图层树
  • 原文地址:https://www.cnblogs.com/lovesqcc/p/4037665.html
Copyright © 2011-2022 走看看