昨日回顾

  1. 可迭代对象:

    • 可以更新迭代的实实在在的值。
    • 内部含有'__iter__'方法。
    • str、tuple、dict、set、range
    • 优点:操作方法多,灵活直观
    • 缺点:占用内存。
  2. 迭代器:

    • 可以更新迭代的一个工具(数据结构)
    • 内部含有'__iter__'并且含有'__next__'方法。
    • 文件句柄
    • 优点:节省内存,惰性机制
    • 缺点:不直观,速度相对慢,操作方法单一,不走回头路。
  3. 格式化输出

  4. 函数名的运用:就是个变量

  5. 作用域的坑

  6. 练习题

    #看代码写结果
    def func1():
    print('in func1') def func2(x):
    print('in func2')
    return x def func3(y):
    print('in func3')
    return y ret=func2(func1)
    ret()
    ret2=func3(func2)
    ret3=ret2(func1)
    ret3()
    '''
    in func2
    in func1
    in func3
    in func2
    in func1
    '''
    #看代码写结果
    def func():
    for item in range(10):
    pass
    print(item)
    func()
    '''
    9
    '''
    #看代码写结果
    l1=[]
    def func4(args):
    l1.append(args)
    return l1
    print(func4(1))
    print(func4(2))
    print(func4(3))
    '''
    [1]
    [1,2]
    [1,2,3]
    '''

    #写函数计算阶乘
    def cal(num):
    count=1
    for i in range(num,0,-1):
    count = count * i
    return count
    print(cal(3))

今日内容

  1. 生成器

    #吃包子,5000个,函数剩下没吃完不好算
    def func1():
    l1=[]
    for i in range():
    l1.append(f'{i}号包子')
    return l1
    ret=func()
    print()#就是个可迭代对象 #吃包子,吃一个做一个,生成器
    def gen_func1():
    for i in range(1,5001):
    yield f'{i}号包子'
    ret=gen_func1()
    for i in range(200):
    print(next(ret)) ##next一次做一个包子
    #就是个迭代器
    • 什么是生成器:生成器和迭代器可以看作一种,生成器的本质就是迭代器。

    • 生成器迭代器区别:生成器是我们自己用python代码构建的数据结构。而迭代器都是提供或转换来的。

    • 获取方式

      • 生成器函数

        #以往见到的函数
        def func():
        print(111)
        print(222)
        return 3
        ret=func()
        print(ret)
        '''
        111
        222
        3
        ''' #生成器函数
        def func():
        print(111)
        print(222)
        yield 3
        yield 4
        yield 5
        ret=func()
        print(ret) #<generator object func at 0x000002B0868AB0F8>
        print(next(ret)) #一个next对应一个yield
        # 111
        # 222
        # 3
        print(next(ret)) # 4
        print(next(ret)) # 5
      • 生成器表达式

      • python内部提供的一些

    • yield

    • yield、return对比

      • yield:函数中有yield就一定式生成器函数而不是函数了。生成器函数可存在多个yield,yield不结束生成器函数。
      • return:函数中只存在一个return,结束函数返回值。
    • yield from

      #yield from
      def func2():
      l1=[1,2,3,4,5]
      yield from l1
      ##这样会从列表中拿出单一的元素,将l1这个列表变成了一个迭代器
      ret=func2()
      print(next(ret))
  2. 生成器表达式、列表推导式

    • 列表推导式:用一行代码构建一个比较复杂有规律的列表。

      l1=[i for i in range(1,11)]
      • 列表推导式分两类:

        • 循环模式:

          [变量(加工后的变量)for 变量 in iterable]

        • 筛选模式:

          #30以内能被3整除的数
          l1=[i for i in range(1,31) if i%3==0]
          #过滤长度小于3的字符串列表,并将剩下的转换成大写
          l1=['sadjiwqf','sd','a','dqwdj','asd','wqewr','henri']
          print([i.upper() for i in l1 if len(i)>=3])
    • 生成器表达式:与列表推导式的写法几乎一样,把[]变成()就变成了生成器表达式,非常节省内存,也有筛选模式和循环模式。

      obj=(i for i in range(1,11))
      next(obj)
    • 小结:

      • 列表推导式:

        • 缺点:有毒,列表推导式只能构建比较有规律的列表。超过三层循环才能构建成功的不建议用,另外debug模式查找错误不行。

        • 优点:简单、装逼。

          #装逼
          #构建一个列表[2,3,4,5,6,7,8,9,10,'J','Q','K','A']
          l1=[i for i in range(2,11)]+list('JQKA')
          print(l1)
      • 列表推导式与生成器表达式区别

        • 写法上:[],()
        • iterable、iterator
      • (了解)还有字典推导式、集合推导式,都是一行构建

  3. 内置函数I

    python提供了68个内置函数

    今天的这部分大部分了解即可。

    • eval()剥去字符串的外衣,运算里面的代码。最好不要使用

      #eval
      s1='1+3'
      print(eval(s1)) #4
    • exec():与eval()几乎一样,但是是处理代码流的。

    • hash():获取一个对象的哈希值。int str bool等

    • help():获取对象的使用方法

    • callable():判断对象是否可调用

今日总结

  1. 生成器:我们用python代码自己构建的
  2. 生成器函数yield
  3. yield与return区别、yield from
  4. 列表推导式、生成器表达式
  5. 内置函数:学了一些了解即可的

明天学习

  1. lambda表达式
  2. 内置函数II
  3. 闭包

代码总行数1752+135=1887行

python12day的更多相关文章

随机推荐

  1. 【LeetCode】844. Backspace String Compare 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 字符串切片 栈 日期 题目地址:https://le ...

  2. 1108 - Instant View of Big Bang

    1108 - Instant View of Big Bang   PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limi ...

  3. 【因果推断经典论文】Direct and Indirect Effects - Judea Pearl

    Direct and Indirect Effects Author: Judea Pearl UAI 2001 加州大学洛杉矶分校 论文链接:https://dl.acm.org/doi/pdf/1 ...

  4. 【项目管理】《IT项目管理》Kathy Schwalbe 第2章 IT项目管理和IT背景

    1.对项目管理采取系统的观点有何意义?如何在项目管理中采用系统的观点? 意义:有效处理复杂的环境 采用系统方法,系统分析,系统管理.2.解释组织的四个框架.他们是如何帮助项目经理理解项目的组织环境的? ...

  5. Limitations of the Lipschitz constant as a defense against adversarial examples

    目录 概 主要内容 Huster T., Chiang C. J. and Chadha R. Limitations of the lipschitz constant as a defense a ...

  6. BBN+

    目录 motivation settings results motivation 观测用BBN的模式训练出来的模型, 配上不同的\(\alpha\), 结果会如何. settings Attribu ...

  7. Linux的基本目录结构

  8. c++—通讯录管理系统

    一.运用所学的结构体.地址指针等基础知识,完成通讯录管理系统 二.系统主要有以下6个功能: 1.添加联系人2.显示联系人 3.删除联系人 4.查找联系人5.修改联系人 6.清空联系人 1 #inclu ...

  9. Java初学者作业——编写 Java 程序,让用户输入指定数字实现产生随机数。

    返回本章节 返回作业目录 需求说明: 编写 Java 程序,让用户输入指定数字实现产生随机数.运行效果如下: 实现思路: 定义两个变量start和end来保存起始和结束值. 通过结束值减起始值得到变化 ...

  10. css中cursor(光标类型)

    值 描述 url 需使用的自定义光标的 URL. 注释:请在此列表的末端始终定义一种普通的光标,以防没有由 URL 定义的可用光标. default 默认光标(通常是一个箭头) auto 默认.浏览器 ...