• 2.18周四笔记


     

    day4

    迭代器:

    1.

    li=[11,22,33,44,55,66,77]

    count =len(li)

    start = 0

    while count>start:

    print(li[start])

             start +=1

    用索引,所有语言几乎都支持while

     

    2.for循环的本质

    a.创建一个特殊的东西(迭代器 iter() )

    b.根据这个东西,去操作列表Li的内容

    c.执行迭代器会返回一个对象,对象是含有next方法

    d.一个一个的去内存取li里面的值

     

    obj = iter(li)

    while Ture:

    item = obj__next__()

    item(item)

    去完就会报stop...(for 循环不报错是因为try except Exception:

     

    3.总结:

    a.while,索引,下标取数据,随意取

    b.for, 执行迭代器iter,获取一个对像-->执行对象的next方法,按顺序拿

     

     

    生成器(非常重要)

    1.python 2.7

    range(10) —>内存立马创建0-9,如果数字大,吃内存

    xrange(10)—>内存里没有数字

    for i in xrange(10):

    内存第一次循环时先创建i= 0

    内存第二次循环内存里创建i=1

           。。。。。。。。。。。。。。

           内存第九次循环内存里创建i=9

           print (i)

     

    2.

    redis———hash(哈希)

    监控  www.baidu.com      每个时段的流量数据

    结构:hash(哈希)

    n1———k1 = v1

    n2———k11 = v11

    key          value

    服务器100G                       本地电脑10G

    dic.keys()                            #全部获取

     

    3.文件操作

    f = open(‘file.log’)

    #f.read() # 会一下子把日子读入内存

    for line in f :      #触发f的__inter__方法

    print(line) #生成器,内存消耗问题解决了

     

    def show():

    yield(line1)

    yield(line2)

    yield(line3)

    my_f = show()

    for line in my_f:

    print(line)

     

     

     

     

    4.yield 关键词

    -------------

    def show():  #函数

    return 123

    i = show()

    print(i

    输出 123

    -------------

    def show(): #生成器

      yield   123

     

    i = show()

    print(i

    输出 generator

     

    5.总结:

    def show():

    yield(line1)

    yield(line2)

    yield(line3)

    my_f = show()

    for line in my_f:

    print(line)

    ‘’’

    line1

    line2

    line3

    ’’’’

    -----运行逻辑-----

    1.如果函数返回含有yield,函数返回值特殊的东西(含有next方法;必须和for一起使用)

    2.for,函数返回特殊东西,内部执行迭代,如果遇到yield,就会把yield后面的值拿到就跳出函数的同时并记住上次

    执行的位置,同时把该值赋值给for 的i

    3.然后再继续执行函数,回到上一次执行代码的位置,继续往下执行

    -----简单理解-----

    1.生成器的返回值必须通过迭代器执行

    2.yield冻结状态,记住上一次执行的位置

     

     

    装饰器

    def login(func):     func=原来的show

    def wrapper(*arg,**kwargs):

    print(‘before’

    ret =func((*arg,**kwargs)

    print(ret)

    print(‘after’)

    return tet

    return wrapper

    def show()

    return ‘show’

    #show 内存值  show()执行函数

    new_show = login(show)

    ‘’’

    相当于

    def new_show():

    ret = show(*arg,**kwargs)

    return ret

    ‘’’

     

    --------

    @login

    def show()

    return ’show’

    功能上实现了一个嵌套

     

     

     

    递归

    正则表达式

    基础算法

    常用模块:json pickle

  • 相关阅读:
    编程之美-2.18 数组分割
    话题模型
    暂时跳过的Leetcode题目
    LDA主题模型
    二叉树非递归的统一实现
    取余和取模运算
    IDM非补丁破解方法
    两种建立堆的方法HeapInsert & Heapify
    非阻塞connect:Web客户程序
    非阻塞connect
  • 原文地址:https://www.cnblogs.com/alan-babyblog/p/5199543.html
Copyright © 2020-2023  润新知