上节课复习:
1. 函数的递归调用
    在调用一个函数的过程中又直接或者间接地调用了函数本身称之为函数的递归
    函数的递归调用有两个明确的阶段:
      1. 回溯
        一层一层地调用本身
      注意:
        1.每一次调用问题的规模都必须有所减少
        2.必须有一个明确的结束条件或者进入递归的条件
      2. 递推
        往回一层一层的推算出结果 2. 二分法 3.三元表达式
res=条件成立情况下的返回值  if条件   else条件不成立情况下的返回值

4.列表生成式
[for i in range(10) if i > 3]

5.字典生成式
(i:i for in in range(10) if i>3)

6.匿名函数
  匿名函数的精髓在于没有名字,没有名字意味着只能调用一次就会被当做垃圾回收
lambda 参数1,参数2....:函数体代码

max([],key=lambda 参数1,参数2....:函数体代码)

理论性的知识:
1. 迭代器
  1.什么是迭代器
  迭代器指的是迭代取值的工具
  迭代是一个重复的过程,每一次重复都是基于上一次的结果而来
#单纯的重复不是迭代
 i=0
while True:
print(i)

#迭代:重复+每次重复都是基于上一次的结果而进行
 l=['a','b','c']
i = 0
while i < len(l):
print(l[i])
i+=1
2.为何要用迭代器
  迭代器提供了一种通用的且不依赖于索引的迭代取值方式 3.如何用迭代器
  1.可迭代的对象iterable: 但凡内置有__iter__方法的对象都称之为可迭代的对象
    可迭代的对象: str, list, tuple, dict, set, 文件对象
    执行可迭代对象下的__iter__方法,返回的值就是一个迭代器对象iterator
 dic={'x':1,'y':2,'z':3}
iter_dic=dic.__iter__()
print(iter_dic.__next__())
print(iter_dic.__next__())
print(iter_dic.__next__())
print(iter_dic.__next__())
2.迭代器对象
  1.内置有__next__方法的对象,执行迭代器__next__方法可以不依赖索引取值
  2.又内置有__iter__方法的对象,执行迭代器__iter__方法得到的仍然是迭代器本身
  ps:
    1.迭代器对象一定是可迭代的对象,而可迭代的对象却不一定是迭代器对象
    2.文件对象本身就是一个迭代器对象   for本质应该称之为迭代器循环
  工作原理
  1.先调用in后面那个对象的__iter__方法,将其变成一个迭代器对象
  2.调用next(迭代器),将得到的返回值赋值给变量名k
  3.循环往复直到next(迭代器)抛出异常,for会自动捕捉异常然后结束循环
  ps:从for角度,可以分辨出但凡可以被for循环循环取值的对象都是可迭代的对象
 dic={'x':1,'y':2,'z':3}
for k in dic:
print(k)
3.迭代器总结
  优点:
    1.提供一种不依赖于索引的迭代取值方式
    2.同一时刻在内存中只存在一个值,更节省内存
  缺点:
    1.取值不如按照索引的方式灵活,(不能取指定的某一个值,而且只能往后取)
    2.无法预测迭代器的长度   2.生成器(自定义的一种迭代器)
    大前提: 生成器就是一种自定义的迭代器,本质就是迭代器
    但凡函数内包含yield关键字,调用函数不会执行函数体代码,会得到一个返回值,该返回值就是生成器对象
    会触发函数的执行,直到碰到一个yield停下来,并且将yield后的值当做本次next的结果返回
    了解: yield的表达式形式的应用 x=yield
 def dog(name):
print('狗哥 %s 准备开吃' %name)
food_list=[]
while True:
food=yield food_list # food=yield='肉包子'
print('%s 吃了 %s' %(name,food))
food_list.append(food) g=dog('alex') # 强调:针对表达式形式的yield的使用,第一步必须让函数先暂停到一个yield的位置,才能进行传值操作
# next(g) # 张开狗嘴,让生成器先暂停到yield的位置,准备接收外部传进来的值
res1=next(g) #g.send(None)
# print(res1) res2=g.send('屎包子') # 1. 先为当前暂停位置的yield赋值 2. next(生成器)直到再次碰到一个yield停下来,然后其的值当做本次next的结果
# print(res2) res3=g.send('肉包子')
# print(res3) res4=g.send('泔水')
print(res4)
    总结yield: 只能在函数内使用
    1. yield提供了一种自定义迭代器的解决方案
    2. yield可以保存函数的暂停的状态
    3.yield对比return
      1.相同点: 都可以返回值,值的类型与个数都没有限制
      2.不同点: yield可以返回多次值,而return只能返回一次值函数就结束了   3. 面向过程编程:
    核心是过程二字,过程指的就是解决问题的步骤,即先干什么再干什么后干什么....
    基于该思想编写程序就好比在设计一条流水线,是一种机械式的思维方式
    优点: 复杂的问题流程化,进而简单化
    缺点: 可扩展性差 代码操作:
1. 生成器表达式 2. 内置函数:
 abs()  取绝对值,负数变正数
all() 如果迭代器内所有值为真就返回True,否则为False(如果是空列表也为True)
any() 如果可迭代对象有一个值为真就返回True
bin() 返回一个整数 int 或者长整数 long int 的二进制表示
oct() 将一个整数转换成8进制字符串
hex() 将10进制整数转换成16进制,以字符串形式表示
bool() 除了0,空,None 为False,其他都为True
bytes() 转成bytes类型
callable() 判断是否为可调用函数,可调用返回True,不可调用返回False
chr() 以十进制对应ASCII码表返回出对应的字符
ord() 以字符对应ASCII码表返回出对应的十进制
dir() 查看一个对象.有哪些属性能够引用
divmod() 取几除以几返回(商,余)
enumerate() for循环中打印出来格式 索引,值
eval() 用来执行一个字符串表达式,并返回表达式的值
set() 可变集合
frozenset() 不可变集合
help() 用于查看函数或模块用途的详细说明
pow() pow(x,y,z) (x**y)%z x的y次方除以z取余
reversed() 函数返回一个反转的迭代器
round() 返回浮点数x的四舍五入值
slice() 主要用在切片操作函数里的参数传递
zip() 用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。

Python 迭代器-生成器-面向过程编程的更多相关文章

  1. day14 迭代器 生成器 面向过程思想

    "" 迭代器 什么是迭代器(iterator) 器指的某种工具, 迭代指的是更新换代的过程,例如应用程序的版本更新从1.0 变成 1.1 再1.2 迭代的目的是要根据上一个结果,产 ...

  2. Python基础之面向过程编程

    要求:在文件里递归找到关于包含“Python”内容的文件的绝对路径并打印出来 #定义阶段 import os,time def init(func): #装饰器的作用是使下面的生成器初始化,yield ...

  3. Python函数之面向过程编程

    一.解释 面向过程:核心是过程二字,过程即解决问题的步骤,基于面向过程去设计程序就像是在设计,流水线式的编程思想,在设计程序时,需要把整个流程设计出来, 一条工业流水线,是一种机械式的思维方式 二.优 ...

  4. python基础之面向过程编程,模块

    面向过程编程 面向过程的核心是过程,指的是解决问题的步骤,即先干什么再干什么,就好像设计一条流水线. 优点:复杂的问题流程化,进而简单化 缺点:可扩展性差,修改流水线的任意一个阶段,都会牵一发而动全身 ...

  5. 匿名函数 python内置方法(max/min/filter/map/sorted/reduce)面向过程编程

    目录 函数进阶三 1. 匿名函数 1. 什么是匿名函数 2. 匿名函数的语法 3. 能和匿名函数联用的一些方法 2. python解释器内置方法 3. 异常处理 面向过程编程 函数进阶三 1. 匿名函 ...

  6. python函数:匿名函数、函数递归与二分法、面向过程编程

    今天主要讲三大部分内容: 一.匿名函数二.函数递归与二分法三.面向过程编程 一.匿名函数: """ 1. 什么时匿名函数 def定义的是有名函数:特点是可以通过名字重复调 ...

  7. day22 yield的表达式的应用,面向过程编程,内置函数前几个

    Python之路,Day10 = Python基础10 生成器表达式: (i for i in range(10) if i > 5)os.walk(r'文件路径')返回一个迭代器, 第一次ne ...

  8. PYTHON-匿名函数,递归与二分法,面向过程编程

    """匿名函数1 什么是匿名函数 def定义的是有名函数:特点是可以通过名字重复调用 def func(): #func=函数的内存地址 pass 匿名函数就是没有名字的 ...

  9. Python迭代器生成器与生成式

    Python迭代器生成器与生成式 什么是迭代 迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果.每一次对过程的重复称为一次"迭代",而每一次迭代得到的结果会作为下一次迭 ...

随机推荐

  1. 【插件开发】—— 6 SWT 复杂控件使用以及布局

    前文回顾: 1 插件学习篇 2 简单的建立插件工程以及模型文件分析 3 利用扩展点,开发透视图 4 SWT编程须知 5 SWT简单控件的使用与布局搭配 前几篇讲到了简单控件的使用,复杂控件使用原则上与 ...

  2. mac下配置nginx php

    修改 php-fpm 文件 1.执行命令: sudo cp /private/etc/php-fpm.conf.default /private/etc/php-fpm.conf 2.找到目录下的 p ...

  3. Java之简单的四则运算

    简单的四则运算 请你编写程序实现能处理两个数的+.-.*./.%的表达式程序.数据的输入/输出全部使用标准输入/输出,输入数据的第一行为你需要计算表达式的个数,从第2行开始,每一行为你计算的一个表达式 ...

  4. ATM机(非函数版)

    #include<stdio.h>#include<stdlib.h>int main(void){char zhangHao[]="123";int mi ...

  5. Webform 内置对象 Session对象、Application全局对象,ViewState

    Session 每台电脑访问服务器,都有独立的session,key值都一样,内容不一样. 1.session保存在服务器上. 2.session没有持久性,保存周期就是20分钟. 重点: sessi ...

  6. java之java.lang.UnsupportedClassVersionError:com/mysql/jdbc/Driver : Unsupported major.minor version 52.0

    问题解释:jdk版本和mysql驱动版本不兼容,比如:jdk1.7与mysql-connector-java-5.xxx兼容,但与mysql-connector-java-6.xxx及以上不兼容

  7. vue-webpack所构建好的项目中增加Eslint

    首先在package.json中配置eslint模块: 在终端运行命令:npm install 然后在build文件夹中web pack.base.conf.js配置eslint 接下来在在项目中新建 ...

  8. Redux中的异步操作

    异步操作的另一种方案就是让Action Creator返回一个Promise对象. 我们这边使用  redux-promise  中间件 import { createStore, applyMidd ...

  9. R in action 读书笔记(1)--第五章:高级数据管理

    5.2.1数学函数 函数 描述 abs(x) 绝对值 sqrt(x) 平方根 ceiling(x) 不小于x的最小整数 floor(x) 不大于x的最大整数 trunc(x) 向0的方向截取的X中的整 ...

  10. 源代码管理SVN的使用

    SVN 全称是Subversion,集中式版本控制之王者 SVN 版本控制,需要自己搭建一个管理代码的服务器,提供开发人员,上传和下载 1.基本介绍 使用环境 要想利用SVN管理源代码,必须得有2套环 ...