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调用







     

     


     
  • 相关阅读:
    hadoop 2.5 hdfs namenode –format 出错Usage: java NameNode [-backup] |
    自己动手编译hadoop-2.5.2源码
    CentOS Linux解决Device eth0 does not seem to be present
    Liz Murray成功故事的偶然与必然(转)
    【BZOJ4242】水壶(克鲁斯卡尔重构树,BFS)
    【BZOJ3551】Peaks加强版(Kruskal重构树,主席树)
    【agc023E】Inversions(线段树,动态规划)
    【CF183D】T-shirt(动态规划,贪心)
    【BZOJ2423】最长公共子序列(动态规划)
    【BZOJ2118】墨墨的等式(最短路)
  • 原文地址:https://www.cnblogs.com/qianyuyu/p/9708880.html
Copyright © 2011-2022 走看看