zoukankan      html  css  js  c++  java
  • python 第四天

    1、生成器

    1.1、c = ( i*2 for i in range(10))   #用括号括起来,就变成一个生成器generator,生成器其实是一个内存的起始点
    print(c.__next__()) #生成器只能用__next__()一个一个调用出来
    for i in c: #可以通过for语句进行输出生成器的元素,c是可以进行迭代的对象
      print(i)
    1.2、通过yield关键字,可以让一个函数变成生成器
    def fib(max):
        n,a,b = 0,0,1
    
        while n < max:
            #print(b)
            yield  b
            a,b = b,a+b
    
            n += 1
    
        return 'done'
    data = fib(10)
    print(data.__next__) #遇到yield直接打断程序的执行,直接返回一个b=1的值
    print(data.__next__)  #再次执行时候,从a,b = b,a+b开始执行,此句意思是
    tuple = (a,a+b)
    a= tuple(0) b = tuple(a+b),此时 a=0,b=1
    然后n=1,继续执行while语句,都yield程序中断,返回b=1
    print(data.__next__) #再次执行,此时从a=tuple(0)=1, b=tuple(1)=2,到yield程序中断,返回值b=2

    因为生成器是一个可以迭代的对象,所以可以用for循环:
    for i in fib(6):
      print(i)
    1.3、生成器并行
    def consumer(name):
    print("%s 准备吃包子啦!" %name)
    while True:
    baozi = yield #直接中断生成器
    print("包子[%s]来了,被[%s]吃了!" %(baozi,name))

    c = consumer("ChenRonghua") #变成生成器
    c.__next__() #只是唤醒生成器,不做任何传值操作
    b1 = "韭菜馅"
    c.send(b1) #即做唤醒又传值


    2、装饰器
    2.1、高阶函数:把函数当成参数传递的一种函数
    def add(x,y,f):
      return f(x) + f(y)
    print(add(-8,11,abs)) #abs是取绝对值
    python内置的高阶函数:
    map()函数:它接收一个函数f和一个list,并且把list的元素以此传递给函数f,然后返回一个函数f处理完所有list元素的列表
    def f2(x):
      return x*x
    l = [1,2,3,4]
    print(map(f2,l))
    执行结果:[1,4,9,16]
    2.2、实现装饰器知识储备:
    1、函数即“变量”
    2、高阶函数
    3、嵌套函数
    高阶函数 + 嵌套函数 = 装饰器
    装饰器:
    定义:本质是函数,(装饰其它函数)就是为其他函数添加附加功能
    原则:1、不能修改被装饰的函数的源代码
    2、不能修改被装饰的函数的调用方式
    def timer(func):  #timer(test1) func=test1
        def deco(*args,**kwargs): #可以是无数变量和字典
            start_time = time.time()
            func(*args,**kwargs) #相当于执行的test1()
            stop_time = time.time()
            print("the func run time is %s" %(stop_time - start_time))
        return deco
    @timer #test1=timer(test1),因为timer(test1)执行之后会返回deco的内存地址
    def test1():
        time.sleep(3)
        print('in the test1')
    test1() #相当于执行的deco()

    3、匿名函数
    add = lambda x, y : x+y
    add(1,2)  # 结果为3


    4、JSON序列化和反序列化
    4.1、JSON序列化:
    import json

    info = {
    'name':'alex',
    'age':22,
    }

    f = open("test.text","w")
    f.write(json.dumps(info))
    f.close()



    info是字典,如果存起来之后,只能以字符串存储,如果想要拿出来只能是字符串了,不能是字典格式了,json是一种中间格式,
    可以将info以字典格式放到json文件中

    4.2、JSON反序列化

    import json


    f = open("test.text","r")
    data = json.loads(f.read())
    print(data["age"])
    print(data["name"])

    JSON反序列化自后,就变成字典格式了,而且可以对字典格式的数据进行KEY调用







     

     


     
  • 相关阅读:
    centos7.6 安装与配置 MongoDB yum方式
    MongoDB 介绍
    centos 关闭selinux
    前端 HTML标签属性
    前端 HTML 标签嵌套规则
    前端 HTML 标签分类
    前端 HTML body标签相关内容 常用标签 表单标签 form里面的 input标签介绍
    前端 HTML body标签相关内容 常用标签 表单标签 form 表单控件分类
    前端 HTML form表单标签 select标签 option 下拉框
    POJ 1426
  • 原文地址:https://www.cnblogs.com/qianyuyu/p/9708880.html
Copyright © 2011-2022 走看看