生成器:

函数与yield连用,凡是函数中有yield的,调用该函数的时候均不会立即执行,而是会返回一个生成器。

生成器本质上是一个迭代器,需要通过    【生成器.__next__()】或者【next(生成器)】取值。

创建生成器的函数中的return只有终止函数的功能,不会有任何返回值。

yield:yield会保存函数的暂停状态,并返回一个生成器,以后每次执行一次yield会向生成器中增加一个值。yield一定要在函数内部定义。

yield与return的区别:

yield可以执行无数次返回多次值,return只能执行一次返回一次值。

yield和return后面返回的值可以是无限个数。返回多个值的时候,以元组的形式储存

写一个自定义的生成器,模拟内置的range()函数

再次注意:生成器本质上也是一个迭代器,也是一个可迭代对象,生成器也可以通过for循环取值

# _*_ coding: gbk _*_
# @Author: Wonder
def my_range(start, end, sep=1):
while start < end:
yield start
start += sep res = my_range(1, 10) # 生成器res,打印res获得的是内存地址
print(res) # <generator object my_range at 0x000001E3E0463CC8>
i = 0
while True:
try:
i += 1
print(f'统计次数{i}')
print(res.__next__()) # 与next(res)效果一样
print(next(res))
except StopIteration: # 取值到最后抛出异常退出
break

生成器的取值方式在上述例子中已经体现了,下面通过for循环取值

def fib(n):
a, b = 0, 1
while (n > 0):
yield b
a, b = b, a + b
n -= 1
return a
for i in fib(4): # 生成器也是可迭代的,所以可以用for循环取值
print(i)

请用自己认为通俗易懂的话简述面向过程编程思想,并列举优缺点。
面向过程编程思想就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
优点:将复杂问题流程化,简单化
缺点:扩展性差,若修改已设计的一部分功能,会影响其他功能

    

三元表达式 :条件成立的返回值 if 条件判断 else 条件不成立的返回值

# _*_ coding: gbk _*_
# @Author: Wonder
def tree(num1, num2):
res = num1 if num1 > num2 else num2
return res
print(tree(11, 12)) # 12

  

列表生成式和生成器表达式: 

可以一行生成列表  [line for line in 可迭代对象 条件判断 ]  将可迭代对象中的值依次取出,生成一个新的列表

除yield生成生成器外,还可以通过生成器表达式生成生成器,语法结构和列表生成式一样,外层将中括号换成小括号即可

generator1 = (line for line in range(10))  # 生成器表达式
print(generator1) # <generator object <genexpr> at 0x0000016448E777C8>
list3 = [line for line in range(10)] # 列表生成式
print(list3) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

  

匿名函数lambda     

表达式 lambda   参数:与参数有关的返回值,也可以是与参数无关的固定值

lambda parameters : expression 

parameters:参数,可以为空,一般提供位置参数,用逗号隔开

expression: 相当于返回值,可以是一个表达式,但不能有分支和循环,也不能出现return和yield

匿名函数要和内置函数一起使用才有意义。

# _*_ coding: gbk _*_
# @Author: Wonder
dict1 = {3: 5,
5: 2,
7: 1} # 取出value值最大的一条
print(max(dict1, key=lambda x: dict1[x])) # 取value最大的
print(max(dict1,key=lambda x:x)) # 取key最大的

  

内置函数

max( 可迭代对象,key=XXX)

sorted(可迭代对象,key==XX,reverse=XX)

CSIC_716_20191114【生成器、匿名函数、内置函数、三元表达式、列表生成式、生成器表达式】的更多相关文章

  1. Python第七天 函数 函数参数 函数里的变量 函数返回值 多类型传值 函数递归调用 匿名函数 内置函数

    Python第七天   函数  函数参数   函数里的变量   函数返回值  多类型传值     函数递归调用   匿名函数   内置函数 目录 Pycharm使用技巧(转载) Python第一天   ...

  2. 12.Python略有小成(生成器,推导式,内置函数,闭包)

    Python(生成器,推导式,内置函数,闭包) 一.生成器初始 生成器的本质就是迭代器,python社区中认为生成器与迭代器是一种 生成器与迭代器的唯一区别,生成器是我们自己用python代码构建成的 ...

  3. python 匿名函数&内置函数

    匿名函数:为了解决那些功能很简单的需求而设计的一句话函数怎么定义匿名函数: cal = lambda x : x*x # cal是函数名,lambda是定义匿名函数的关键字 冒号前面的额x是参数即函数 ...

  4. Python函数04/生成器/推导式/内置函数

    Python函数04/生成器/推导式/内置函数 目录 Python函数04/生成器/推导式/内置函数 内容大纲 1.生成器 2.推导式 3.内置函数(一) 4.今日总结 5.今日练习 内容大纲 1.生 ...

  5. python学习day11 函数Ⅲ (内置函数与lambda表达式)

    函数Ⅲ(内置函数&lambda表达式) 1.函数小高级 函数可以当做变量来使用: def func(): print(123) func_list = [func, func, func] # ...

  6. Python学习笔记014——迭代工具函数 内置函数enumerate()

    1 描述 enumerate() 函数用于将一个可遍历的数据对象(如列表.元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中. 2 语法 enumerate(sequ ...

  7. python 函数--内置函数

    一.内置函数 内置函数是python自带的一系列常用函数. 二.python3中内置函数     内置功能     abs() delattr() hash() memoryview() set() ...

  8. Python入门之三元表达式\列表推导式\生成器表达式\递归匿名函数\内置函数

    本章目录: 一.三元表达式.列表推导式.生成器表达式 二.递归调用和二分法 三.匿名函数 四.内置函数 ================================================ ...

  9. Python 函数递归-三元表达式-列表生成式-字典生成式-匿名函数-内置函数

    上节课复习: 1. 无参装饰器 def 装饰器名字(func): def wrapper(*args,**kwargs): res = func(*args,**kwargs) return res ...

  10. python之三元表达式与生成式与匿名与内置函数(部分)

    目录 三元表达式 各种生成式 列表生成式(可同样作用于集合) 字典生成式 匿名函数 重要内置函数 map() zip() filter() reduce() 常见内置函数(部分) 三元表达式 三元表达 ...

随机推荐

  1. Linux中的网络管理——网络配置及命令

    Linux网络配置 在Linux中配置IP地址的方法有以下这么几种: 图形界面配置IP地址(操作方式如Windows系统配置IP,但在实际生产中,我们并不建议在我们的服务器上安装Linux的图形界面, ...

  2. iptables默认规则

    iptables默认规则 *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [34:4104] -A INPUT -m ...

  3. BBS论坛 后台管理

    七.后台管理 后台管理页面: <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...

  4. python 对象的删除

  5. Redmine 和GitBlit仓库服务器整合

    运行环境: RedMine: 4.0.4 Git 仓库: Gitbilt V1.8.0 必须: Redmine 安装并可运行 Redmine运行的主机里面已经安装了 Git,因需要在命令行中运行 gi ...

  6. SpringBoot 之 Mybatis 逆向工程

    今天给大家介绍在 spring- boot 项目中如何使用 maven 插件逆向工程生成 Mybatis 代码. pom.xml 添加依赖和插件 <dependency> <grou ...

  7. CSS案例2(一个简单的新闻网页)

     知识点: 1.一般网页不用纯黑,用淡灰色  3c3c3c 2.text-align: center;  /*  文字水平居中 */ 3.font-weight: normal;  /* 清除加粗效果 ...

  8. 【SQL】ON DUPLICATE KEY UPDATE

    在实际应用中,经常碰到导入数据的功能,当导入的数据不存在时则进行添加,有修改时则进行更新, 在刚碰到的时候,第一反应是将其实现分为两块,分别是判断增加,判断更新,后来发现在mysql中有 ON DUP ...

  9. thinkphp读取配置

    无论何种配置文件,定义了配置文件之后,都统一使用系统提供的C方法(可以借助Config单词来帮助记忆)来读取已有的配置. 获取已经设置的参数值:C('参数名称') 例如, $model = C('UR ...

  10. 使用Sonatype Nexus搭建Maven私服后,如何添加第三方JAR包

    使用Sonatype Nexus搭建Maven私服后如何添加第三方JAR包 步骤如下 1.打开nexus地址,进行登录 2.登录Nexus后,点击右侧的“Repositories”,显示当前Nexus ...