• Python3.5 学习四


    装饰器

    定义:本质是函数,装饰其他函数,即为其他函数添加附加功能的

    原则:  1  不能修改被装饰函数的源代码

         2  不能改变被装饰函数的调用方式(对于被装饰函数来说完全透明,不会受影响)

    实现装饰器功能的知识储备:

      1  函数即变量

          匿名函数 calc=lambda x:x*3 使用完即回收

      2  高阶函数

        定义:a 把一个函数名当做实参传给另一个函数  (满足装饰器原则1)

             b 返回值中包含函数名 (返回值中包含函数名)

         举例:请见pycharm的练习代码

      3  嵌套函数

        在一个函数体内用def去声明另一个函数,而不是仅仅去调用另一个函数

      4  高阶函数+嵌套函数实现装饰器的功能

        思考:用以上两个知识点,怎么写一个装饰器 

        示例:import timedef timer(func):

        def deco(*args,**kwargs):
    start_time = time.time()
    func(*args,**kwargs)
    end_time = time.time()
    print("the func run time is %s" % (end_time - start_time), "s")
    return deco

    @timer #= test1=timer(test1) deco=test1 deco(*args,**kwargs)=test1(*args,**kwargs)
    def test1():
    time.sleep(3)
    print("in the test1")
    @timer #= test2=timer(test2) deco=test2 deco(*args,**kwargs)=test2(*args,**kwargs)
    def test2(name):
    time.sleep(3)
    print("in the test2,the name is %s" % name)

    test1()
    test2("huhu")


    如果装饰器声明需要有一个参数作为变量分类,则装饰器代码的外层再嵌入一层,传参func,装饰器的实参对应的是声明时的值即可。

    协程并发 消费者生产者模型实例,详见Pycharm代码

    我们已经知道,可直接作用于for循环的数据类型有:
    A  list、tuple、dict、set、str
    B  generator  包括生成器和带yield的generator function
    这些可直接作用于for循环的对象,统称为可迭代对象:Iterable
    可以使用Instanse()方法判断一个对象是否是Iterable对象
    而生成器,不但可以被for循环,还可以被next()对象不断循环返回下一个值

    迭代器
    定义:可以被next()调用并不断返回下一个值的对象,我们叫做迭代器:Iterator
    生成器都是Iterator对象,而list、tuple、dict、str等都不是Iterator对象
    使用iter()可以变为迭代器

    小结:
    1  凡是可作用于for循环的对象,都是可迭代对象
    2  凡是可作用于next()的对象,都是迭代器
    3  非迭代器的可迭代对象,都可以通过iter()函数将其变为迭代器对象
    4  Python3,本质上for循环的实现,其实本质就是一个迭代器,通过不断调用next()来实现的
      文件的读取,for line in f:也是一种迭代器的实现方式,如果用f.readlines()则生成一个list,占用大量系统资源
      而Python2里,f.xreadlines()和xrange(10)都是一种迭代器,只能用next()方法调用而动态计算生成下一个的值。

    内置方法:
    abs  取绝对值
    all  判断可迭代对象中的每个元素,只要有一个为False,则返回False,否则返回True
    any  同上,相反只要有一个为True,则返回True,否则返回False
    ascii 列表转字符串
    bin  数字转二进制
    bool  判断真假
    bytearray  字节数组格式,可单字节修改
    bytes    字节格式
    callable  判断是否可被当做方法调用
    chr  返回ascII对应的值
    compile  将字符串编译成指定执行格式的代码
    complex  复数
    dict  字典
    dir  看对象有什么方法
    divmod  返回商和余数
    enumerate  枚举
    eval  简单的字符串公式计算得出结果,即为取字符串的引号之间的内容并简化计算。
        复杂的只能用exec计算
    fliter    filter(lambda n:n>5,range(10))
    (匿名函数:只支持三元运算等简单函数的写法)
    map      map(lambda n:n*2,range(10))
    reduce    详见代码
    float  浮点
    format  格式化
    frozenset  不可变集合
    getattr   (面向对象时再讲)
    gloables  返回当前程序中所有变量的字典

    hash  散列值 后台有一种映射关系,将无序数据存成有序映射,便于快速折半查找检索方式的适用,字典的检索就是这种方式
    这种映射关系叫做HASH.md5也是一种较复杂的hash算法
    比较两个文件是否内容相同,最快的方式是转成md5,然后比较md5,也是用hash方式快速比较

    help  方法的帮助
    hex  数字转16进制
    input
    int
    isinstance
    issubclass
    len
    locals  本地变量的字典形式
    max
    min
    next  相当于迭代器中的__next__
    oct  转8进制
    open
    ord
    pow
    range
    repr  用字符串表示对象
    reversed  反转
    round  保留小数
    set  集合
    setattr  面向对象会讲
    slice  切片
    sorted  排序
    字典按照默认key排序:sorted(a.items())
    指定按照value排序:sorted(a.items(),key=lambda x:x[1])
    staticmethod
    str
    sum
    super
    tuple
    type  python数据类型的祖师爷
    vars  返回一个对象的属性名
    zip  一一对应组合两个列表    zip按数量少的进行对应,map按数量多的进行对应

    #import decorator等效于下列方法:
    __import__('decorator')


    json序列化:
    Json用于所有开发语言之间的数据对接
    默认只支持简单的数据类型的转换

    pickle:
    可支持所有类型的转换
    其转换成二进制,请注意。
    dumps()
    loads()

    注意:永远只Dump一次;只Load一次
    每次都分开生成一次的记录文件

    软件目录结构规范
    /bin
    /conf
    /core
    /doc

    作业《购物商城+ATM》太难,以后再做吧~~~
  • 相关阅读:
    理解oracle中连接和会话
    探索 Java 热部署
    [转载]如何解决failed to push some refs to git
    Intellij IDEA调试
    一次完整的HTTP请求所经历的7个步骤
    git查看本地和创建分支、上传分支、提交代码到分支、删除分支等,git分支、git查看本地和创建分支以及上传分支到服务器
    静态方法中不能new内部类的实例对象的总结
    [git] warning: LF will be replaced by CRLF | fatal: CRLF would be replaced by LF
    【转】TCP/IP协议栈及OSI参考模型详解
    InputStream、InputStreamReader和Reader的关系
  • 原文地址:https://www.cnblogs.com/HU-HU/p/9391683.html
Copyright © 2020-2023  润新知