美文网首页程序员
Python3函数式编程习题解析

Python3函数式编程习题解析

作者: 阿Q说代码 | 来源:发表于2018-07-09 09:12 被阅读0次

            Hello,大家好,小编最近在学习廖雪峰老师官网的Python3,想通过解答每节知识点后的练习题的的方式来检验自己的学习成果,也希望能帮助和小编一样的小白解决心中的疑惑,大家共同进步。

    (1)返回函数:

            利用闭包返回一个计数器函数,每次调用它返回递增整数:

    代码部分:

        第一种:在python3之前没有直接的解决办法,只能间接地通过容器类型来解决,因为容器类型不是存放在栈空间的。

    def createCounter():

        s = [0]

        def counter():

            s[0] = s[0]+1

            return s[0]

        return counter

        第二种:python3中通过nonlocal关键字来解决,该语句显示的指定x不是闭包的局部变量。

    def createCounter():

        x =0

        def counter():

            nonlocal x         # 把x声明为非局部变量

            x=x+1

            return x

        return counter

    # 测试:

    counterA = createCounter()

    print(counterA(), counterA(), counterA(), counterA(), counterA())# 1 2 3 4 5

    注意:如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包。return返回的变量指向内部函数,所以调用的时候实际上是调用的内部函数。

    (2)匿名函数:

        请用匿名函数改造下面的代码:

    def is_odd(n):

        return n % 2 == 1

    L = list(filter(is_odd, range(1, 20)))

    修改之后:

    L =list(filter(lambda x:x%2==1,range(1,20)))

    (3)装饰器:

            请设计一个decorator,它可作用于任何函数上,并打印该函数的执行时间:

    代码部分:

    def metric(fn):

        def  wrapper(*args, **kw):  #可接受任意参数

            t1 = time.time()

            r = fn(*args, **kw)  #r指向被metric装饰的函数

            print('%s excute in %s ms' % (fn.__name__,1000 * (time.time() - t1)))

            return r   

        return wrapper

    调用时用@metric

            综上这就是在廖雪峰老师的官网Python3中的函数式编程练习题了。大家有什么不懂得地方欢迎留言,如果小编哪里写错了或者您有更好的解决方案,请联系小编吧!小编期望与您共同进步。

    相关文章

      网友评论

        本文标题:Python3函数式编程习题解析

        本文链接:https://www.haomeiwen.com/subject/zinvuftx.html