CSIC_716_20191114【生成器、匿名函数、内置函数、三元表达式、列表生成式、生成器表达式】
生成器:
函数与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)
最新文章
- 有意思的Console
- Concurrency vs. Parallelism
- css伪类的展现
- linux下的crontab服务
- hdu3228Island Explorer
- mysql主从复制配置(精简版)
- 24、jQuery常用AJAX-API/Java调用MySQL / Oracle过程与函数
- MySQL在ROW模式下通过binlog提取SQL语句
- SSIS 学习(4):变量和表达式【转】
- Android:Xml(读取与存储)
- ERwin 连接 mysql
- Apache benchmark 压力测试工具
- (转)PHP函数set_magic_quotes_runtime()的作用
- Javascript基础Function
- EDStarRating(IOS星级评定)
- 关于 js 中的 call 和 apply使用理解
- .NET源码
- 关于extjs表单布局的几种方式
- CS Round#50 D min-races
- 从Cell类型转变成数据型