1.今日内容

  • 迭代器(3*)
  • 生成器(4*)
  • 装饰器(5*)
  • 项目结构
  • logging模块

2.内容回顾 & 作业

2.1 内容回顾

2.1.1 函数(内置/自定义)

  • 基本函数结构

    def func(a1,a2):
    pass
    • 参数
    • 返回值
    • 执行函数
  • 函数小高级

    • 函数做变量
    • 函数做参数
  • 函数中高级

    • 函数做返回值
    • 函数的嵌套
  • 装饰器 & 闭包

  • 递归

  • 匿名函数

  • 内置函数

2.1.2 模块(内置/第三方/自定义)

  • 定义模块

    • 内置:time/json/datetime/os/sys ... 【re模块】
    • 第三方:
      • 安装:

        • pip包管理工具: pip install xlrd
        • 源码安装:
          • 下载源码包:压缩文件。
          • 解压文件
          • 打开cmd窗口,并进入此目录:cd C:\Python36\Lib\site-packages
          • 执行:python36 setup.py build
          • 执行:python36 setup.py install
      • 安装路径:C:\Python36\Lib\site-packages
      • 你了解的第三方模块:
        • xlrd,xlwd#excel的读写
        • requests
    • 自定义
      • py文件
      • 文件夹 __init__.py#py2中必须要有
  • 调用模块

    • import

      • import 模块1 模块1.函数()
      • import 模块1.模块2.模块3 模块1.模块2.模块3.函数()
    • from xx import xxx

      • from 模块.模块 import 函数 函数()
      • from 模块.模块 import 函数 as f f()
      • from 模块.模块 import * 函数1() 函数2()
      • from 模块 import 模块 模块.函数()
      • from 模块 import 模块 as m m.函数()
    • 特殊情况:

      • import 文件夹 默认加载__init__.py

        调用的是--init--.py文件中内容。

      • from 文件 import *

        可以直接使用文件中函数。

2.1.3 其他

  • 两个值数据交换
  • 推导式
    • 列表(*)
    • 字典
    • 集合

3.今日内容

类和对象

3.1 迭代器

自己不会写迭代器,只用。

任务:请展示列表中所有的数据。

  • while + 索引 + 计数器

  • 迭代器,对 某种对象(str/list/tuple/dict/set类创建的对象)-可迭代对象 中的元素进行逐一获取,表象:具有__next__方法且每次调用都获取可迭代对象中的元素(从前到后一个一个获取)。

    • 列表转换成迭代器:

      • v1 = iter([11,22,33,44])
      • v1 = [11,22,33,44].__iter__()
    • 迭代器想要获取每个值:反复调用 val = v1.__next__()

      v1 = [11,22,33,44]
      
      # 列表转换成迭代器
      v2 = iter(v1)
      result1 = v2.__next__()
      print(result1)
      result2 = v2.__next__()
      print(result2)
      result3 = v2.__next__()
      print(result3)
      result4 = v2.__next__()
      print(result4)
      result5 = v2.__next__()
      print(result5)
      """
      # v1 = "alex"
      # v2 = iter(v1)
      # while True:
      # try:
      # val = v2.__next__()
      # print(val)
      # except Exception as e:
      # break
    • 迭代至最后,直到报错:StopIteration错误,表示已经迭代完毕。

    • 如何判别一个对象是否是迭代器:内部是否有__next__方法

  • for循环

    v1 = [11,22,33,44]
    
    # 1.内部会将v1转换成迭代器
    # 2.内部反复执行 迭代器.__next__()
    # 3.取完不报错
    for item in v1:
    print(item)

3.2 可迭代对象

  • 内部具有 __iter__() 方法且返回一个迭代器。(*)

    v1 = [11,22,33,44]
    result = v1.__iter__()
  • 可以被for循环

3.3 生成器(函数的变异)

# 函数
def func():
return 123
func()
# 生成器函数(内部是否包含yield)
def func():
print('F1')
yield 1
print('F2')
yield 2
print('F3')
yield 100
print('F4')
# 函数内部代码不会执行,返回一个 生成器对象 。
v1 = func()
# 生成器是可以被for循环,一旦开始循环那么函数内部代码就会开始执行。
for item in v1:
print(item)
def func():
count = 1
while True:
yield count
count += 1 val = func() for item in val:
print(item)

总结:函数中如果存在yield,那么该函数就是一个生成器函数,调用生成器函数会返回一个生成器,生成器只有被for循环时,生成器函数内部的代码才会执行,每次循环都会获取yield返回的值。不惯for循环是否可以读到yield(如:yield在return前)。

def func():
count = 1
while True:
yield count
count += 1
if count == 100:#终止条件设置
return val = func()
for item in val:#item只取yield中的值。
print(item)

示例:读文件(以下按页读取文件,每页10行)

def func():
"""
分批去读取文件中的内容,将文件的内容返回给调用者。
:return:
"""
cursor = 0
while True:
f = open('db', 'r', encoding='utf-8')# 通过网络连接上redis
# 代指 redis[0:10]
f.seek(cursor)
data_list =[]
for i in range(10):
line = f.readline()
if not line:
return
data_list.append(line)
cursor = f.tell()
f.close() # 关闭与redis的连接 for row in data_list:
yield row for item in func():
print(item)
其他知识:
  • yeild from关键字【欠】
  • 生成器推导式【欠】

总结

  • 迭代器,对可迭代对象中的元素进行逐一获取,迭代器对象的内部都有一个 __next__方法,用于以一个个获取数据。

  • 可迭代对象,可以被for循环且此类对象中都有 __iter__方法且要返回一个迭代器(生成器)。

  • 生成器,函数内部有yield则就是生成器函数,调用函数则返回一个生成器,循环生成器时,则函数内部代码才会执行。

    特殊的迭代器(**):

    def func():
    yield 1
    yield 2
    yield 3 v = func()
    result = v.__next__()
    print(result)
    result = v.__next__()
    print(result)
    result = v.__next__()
    print(result)
    result = v.__next__()
    print(result)

    特殊的可迭代对象:

    def func():
    yield 1 v = func()
    result = v.__iter__()
    print(result)

python笔记17的更多相关文章

  1. Python笔记 #17# Pandas: Merge

    10 Minutes to pandas Concat df = pd.DataFrame(np.random.randn(10, 4)) print(df) # break it into piec ...

  2. golang学习笔记17 爬虫技术路线图,python,java,nodejs,go语言,scrapy主流框架介绍

    golang学习笔记17 爬虫技术路线图,python,java,nodejs,go语言,scrapy主流框架介绍 go语言爬虫框架:gocolly/colly,goquery,colly,chrom ...

  3. python笔记 - day5

    python笔记 - day5 参考: http://www.cnblogs.com/wupeiqi/articles/5484747.html http://www.cnblogs.com/alex ...

  4. guxh的python笔记一:数据类型

    1,基本概念 1.1,数据类型 基本数据类型:字符串,数字,布尔等 引用数据类型:相对不可变(元组),可变(列表,字典,集合等) 基本数据类型存放实际值,引用数据类型存放对象的地址(即引用) ==:判 ...

  5. python笔记-1(import导入、time/datetime/random/os/sys模块)

    python笔记-6(import导入.time/datetime/random/os/sys模块)   一.了解模块导入的基本知识 此部分此处不展开细说import导入,仅写几个点目前的认知即可.其 ...

  6. python笔记(2)--字符串

    一.字符串 字符串是不可变序列,具有序列的公共操作方法,具体操作见python笔记(1)--序列(列表 元组 range) 1.创建字符串 单引号:'Hello , I am Logan ! ' 双引 ...

  7. Python笔记之不可不练

    如果您已经有了一定的Python编程基础,那么本文就是为您的编程能力锦上添花,如果您刚刚开始对Python有一点点兴趣,不怕,Python的重点基础知识已经总结在博文<Python笔记之不可不知 ...

  8. boost.python笔记

    boost.python笔记 标签: boost.python,python, C++ 简介 Boost.python是什么? 它是boost库的一部分,随boost一起安装,用来实现C++和Pyth ...

  9. 20.Python笔记之SqlAlchemy使用

    Date:2016-03-27 Title:20.Python笔记之SqlAlchemy使用 Tags:python Category:Python 作者:刘耀 博客:www.liuyao.me 一. ...

随机推荐

  1. Educational Codeforces Round 65 (Rated for Div. 2)B. Lost Numbers(交互)

    This is an interactive problem. Remember to flush your output while communicating with the testing p ...

  2. fastadmin选择下拉框

    fastadmin中要做下拉框的效果如下: 数据库中数据: 在对应model中添加一个方法: 控制器中添加一行: 在目录lang/zh-cn中找到你控制器名称所对应的文件添加配置: 在add.html ...

  3. HDU 4544 湫湫系列故事——消灭兔子 (优先队列)

    湫湫减肥  越减越肥!    最近,减肥失败的湫湫为发泄心中郁闷,在玩一个消灭免子的游戏.  游戏规则很简单,用箭杀死免子即可.  箭是一种消耗品,已知有M种不同类型的箭可以选择,并且每种箭都会对兔子 ...

  4. python package install error and little code bugs

    When you install packages using setup.py, the error: (py37) C:\Users\weda\Phd\python packages\visibi ...

  5. [Note]prufer

    [Note]Prufer编码 实现 不断删除度数为\(1\)的最小序号的点,并输出与其相连的节点的序号,直至树中只有两个节点. 性质 任何一棵\(n\)节点的树都可以唯一的用长度为\(n-2\)的pr ...

  6. Spring Boot2 快速入门教程-到上手

    Spring Boot2 教程合集 入门 纯 Java 代码搭建 SSM 环境 创建一个 Spring Boot 项目的三种方法 理解 Spring Boot 项目中的 parent 基础配置 配置文 ...

  7. Hackintosh相关资源站

    猫叔博客 https://www.maoshu.cc/ 大神RehabMan https://bitbucket.org/RehabMan/ dsdt/ssdt打补丁译文 https://blog.c ...

  8. mybatis-plus - buildSqlSessionFactory()

    一. buildSqlSessionFactory() mybatis-plus 同样的是调用  factory.getObject() 方法来进行 SqlSessionFactory 创建的. 然后 ...

  9. react 实现圆环进度条

    import React, { useState, useEffect } from "react" import { css } from "emotion" ...

  10. python算术

    ''' 1.对每个数进行平方, 2.求和 ''' print(sum(x ** 2 for x in range(4)))