s21day13 python笔记

一、装饰器

  1. 目的:在不改变原函数内部代码的基础上,在函数执行之前和之后自动执行某个功能

  2. 应用场景:想要为函数扩展功能时,可以选择用装饰器

  3. 装饰器基本格式:

    def func(arg):
        def inner():
            v = arg()
            return v
        return inner 
    
    # 重点:
    # 第一步:执行func函数并将下面的函数参数传递,相当于:func(index)
    # 第二步:将func的返回值重新赋值给下面的函数名。 index = func(index)
    @func
    def index():
        print(123)
        return 666
    
    print(index)
    
    # 注意:
    
  4. 总结

    • 编写格式:
    def 外层函数(参数):
        def 内层函数(*args,**kwargs)
         return 参数(*args,**kwargs)
        return 内层函数
    • 应用格式:
    @外层函数
    def index():             #要装饰的函数
        pass
    
    index()
    # 装饰器的编写
    def x(func):
        def y():
            # 前
            ret = func()
            # 后
            return ret
         return y 
    
    # 装饰器的应用
    @x
    def index():
        return 10
    
    # 执行函数,自动触发装饰器了
    v = index()
    print(v)
  5. 示例:

    def func(arg):
        def inner():
            print('before')
            v = arg()
            print('after')
            return v
        return inner 
    
    def index():
        print('123')
        return '666'
    
    # 示例一
    v1 = index() # 执行index函数,打印123并返回666赋值给v1.
    
    # 示例二
    v2 = func(index) # v2是inner函数,arg=index函数
    index = 666
    v3 = v2()
    
    # 示例三
    v4 = func(index)
    index = v4  # index ==> inner
    index()
    
    # 示例四
    index = func(index)
    index()

二、推导式

  1. 列表推导式

    # 目的:方便的生成一个列表
    # 格式:
    v1 = [i for i in 可迭代对象 ]
    v2 = [i for i in 可迭代对象 if 条件 ]      #条件为true才进行append
    # 示例:
    v1 = [ i for i in 'alex' ]
    v2 = [i+100 for i in range(10)]
    v3 = [99 if i>5 else 66  for i in range(10)]
    
    def func():
        return 100
    v4 = [func for i in range(10)]
    
    v5 = [lambda : 100 for i in range(10)]
    result = v5[9]()
    
    v6 = [lambda :i for i in range(10)]
    result = v6[5]()
    
    # 新浪微博面试题
    v7 = [lambda x:x*i for i in range(10)]
    # 1.请问 v7 是什么?
    # 2.请问 v7[0](2) 的结果是什么?
    
    # 面试题
    def num():
        return [lambda x:i*x for i in range(4)]
    # num() -> [函数,函数,函数,函数]
    print([ m(2) for m in num() ]) # [6,6,6,6]
  2. 集合推导式

    # 目的:方便的生成一个集合
    # 格式:
    v1 = { i for i in 'alex' }
  3. 字典推导式

    # 目的:方便的生成一个字典
    # 格式:
    v1 = { 'k'+str(i):i for i in range(10)}

三、模块

  1. time:时间模块

    # 计算函数执行时间
    import time
    
    def wrapper(func):
        def inner():
            start_time = time.time()
            v = func()
            end_time = time.time()
            print(end_time-start_time)
            return v
        return inner
    
    @wrapper
    def func1():
        time.sleep(2)
        print(123)
    
    func1()

s21day13 python笔记的更多相关文章

  1. Python笔记之不可不练

    如果您已经有了一定的Python编程基础,那么本文就是为您的编程能力锦上添花,如果您刚刚开始对Python有一点点兴趣,不怕,Python的重点基础知识已经总结在博文<Python笔记之不可不知 ...

  2. boost.python笔记

    boost.python笔记 标签: boost.python,python, C++ 简介 Boost.python是什么? 它是boost库的一部分,随boost一起安装,用来实现C++和Pyth ...

  3. 20.Python笔记之SqlAlchemy使用

    Date:2016-03-27 Title:20.Python笔记之SqlAlchemy使用 Tags:python Category:Python 作者:刘耀 博客:www.liuyao.me 一. ...

  4. Python笔记——类定义

    Python笔记——类定义 一.类定义: class <类名>: <语句> 类实例化后,可以使用其属性,实际上,创建一个类之后,可以通过类名访问其属性 如果直接使用类名修改其属 ...

  5. 13.python笔记之pyyaml模块

    Date:2016-03-25 Title:13.Python笔记之Pyymal模块使用 Tags:Python Category:Python 博客地址:www.liuyao.me 作者:刘耀 YA ...

  6. 8.python笔记之面向对象基础

    title: 8.Python笔记之面向对象基础 date: 2016-02-21 15:10:35 tags: Python categories: Python --- 面向对象思维导图 (来自1 ...

  7. python笔记 - day8

    python笔记 - day8 参考: http://www.cnblogs.com/wupeiqi/p/4766801.html http://www.cnblogs.com/wupeiqi/art ...

  8. python笔记 - day7-1 之面向对象编程

    python笔记 - day7-1 之面向对象编程 什么时候用面向对象: 多个函数的参数相同: 当某一些函数具有相同参数时,可以使用面向对象的方式,将参数值一次性的封装到对象,以后去对象中取值即可: ...

  9. python笔记 - day7

    python笔记 - day7 参考: http://www.cnblogs.com/wupeiqi/articles/5501365.html 面向对象,初级篇: http://www.cnblog ...

随机推荐

  1. 搜索引擎中index、attribute和summary概念

    index:倒排索引 attribute: 正排索引 summary:数据集合,用于数据结果展示.

  2. array_diff()

    array_diff()函数定义和用法 array_diff() 函数返回两个数组的差集数组.该数组包括了所有在被比较的数组中,但是不在任何其他参数数组中的键值. 在返回的数组中,键名保持不变. 提示 ...

  3. html布局(盒子)

    在body里面放置两个盒子,里面盒子设置margin-top,外层盒子生效?在里面盒子上面加一个块元素,设置高度 表单 form action="地址" method=" ...

  4. JS 打印实现部分打印

    function Print() { $.ligerDialog.confirm('确定要打印吗?', true, function (yes, value) { if (yes) { var old ...

  5. 洛谷P2886 [USACO07NOV]牛继电器Cow Relays

    题意很简单,给一张图,把基本的求起点到终点最短路改成求经过k条边的最短路. 求最短路常用的算法是dijkstra,SPFA,还有floyd. 考虑floyd的过程: c[i][j]=min(c[i][ ...

  6. Python基础-Python的三元运算符和lambda表达式

    1. Python的三元表达式: 现在大部分高级语言都支持 “?”这个三元运算符,它对应的表达式如下:condition ? value if true:value if else 但是 Python ...

  7. Android四大组件之Service --- 如何启动和停止Service?

    启动和停止方法主要是通过Intent来实现 以上一篇中的ServiceTest项目为例来启动和停止MyService这个服务 首先修改activity_main.xml中的代码,如下所示:<Li ...

  8. 解决tomcat内存溢出,java.lang.OutOfMemoryError: PermGen space

    一.通过eclipse启动tomcat. 1.选择window>>preferences 2.搜索tomcat,找到自己安装的tomcat版本对应的JDK,在Optional Java V ...

  9. SSM excel文件的导入导出

    对于excel文件的导入导出,后台接收读取和建表封存都是固定死的,所以对于excel导入时,excel文件内容必须匹配后台相关对象,不然报错. excel文件导出,用<a><a/&g ...

  10. OO第一单元作业总结之初识面向对象

    第一个单元的三次作业均为求导,循序渐进的让我们掌握如何构造类和方法,让整个代码是面向对象的设计而不是面向过程的设计.如果第一次作业和第二次作业你只是简单的对过程着手架构类,到了第三次作业就会变得格外麻 ...