1.什么是生成器? 生成的工具。 生成器是一个 "自定义" 的迭代器, 本质上是一个迭代器。
2.如何实现生成器 但凡在函数内部定义了的yield, 调用函数时,函数体代码不会执行, 会返回一个结果,该结果就是一个生成器。
yield: 每一次yield都会往生成器对象中添加一个值。 - yield只能在函数内部定义 - yield可以保存函数的暂停状态
yield与return: 相同点: 返回值的个数都是无限制的。
不同点: return只能返回一次值,yield可以返回多个值
迭代器对象 python内置生成的迭代器
iter_list = list1.__ iter __()
#自定义的迭代器
def func():
print('from func')
yield 'tank'
res = func()
#当我们通过__ next __取值时,才会执行函数体代码。
print(res.__ next __())
循环10次 for i in range(1,11): print(i) #1~~10 python2: range(1,5) --->[1, 2, 3, 4] python3:range(1,5) --->range对象--->生成器 ---->迭代器 res = range(1,5) print(res)#自定义range功能,创建一个自定义的生成器 #(1, 3) #start --> 1 , end --->5 , move = 2 def my_range(start,end,move = 1): while start < end yield start start += move
面向过程编程是一门编程思想。
面向 过程 编程: 核心是 '过程' 二字,过程 指的是一种解决问题的步骤,即先干什么再干什么 基于该编程思想编写程序,就好比在设计一条工厂流水线,一种机械式的思维方式。
优点:
将复杂的问题流程化,进而简单化
缺点:
若修改当前程序设计的某一部分,会导致其他部分同时需要修改,扩展性差。
三元表达式:
可以将if...else...分支变成一行。
语法:
条件成立返回左边的值 if 判断条件else 条件不成立返回右边的值
if 判断条件: 执行 else: 执行 求两个值的大小 通过if...else语法 def max(num1,num2): if num1 > num2: return num1 else: return num2 res = max(100,20) print(res) > 100
def max1(num1,num2): res = num1 if num1 > num2 else num2 return res res = max1(num1,num2) print(res)
可以一行实现生成列表。 语法: list = [取出的每一个值、任意值 for 可迭代对象中取出的每一个值 in 可迭代对象]
for的右边是循环次数,并且可以取出可迭代对象中每一个值
for的左边可以为当前列表添加值
list = [值 for 可迭代对象中取出的每一个值 in 可迭代对象]
list = [值 for 可迭代对象中取出的每一个值 in 可迭代对象 if 判断]
将list中的值,依次取出,添加到new_list中 list = [1, 2, 3, 4] new_list = [] for line in list1: new_list.append(line) print(new_list) #普通方式 new_list = [] for line in range(1,101): new_list.append(line) print(new_list) #列表生成器 list = [f'1{line}' for line in range(1,101)] print(list)
缺点:
浪费资源
生成器生成式: 若数据量过大时采用 () ---> 返回生成器 (line for line in range(1, 6)) ---> g生成器(1, 2, 3, 4, 5)
优点:
节省资源
缺点:
# 生成一个有1000个值的生成器 g = (line for line in range(1, 1000001)) # <generator object <genexpr> at 0x00000203262318E0> print(g) # 列表生成式实现 list1 = [line for line in range(1, 1000001)] print(list1)
无名字的函数
:左边是参数, 右边是返回值
lambda :
PS: 原因,因为没有名字,函数的调用 函数名 + () 匿名函数需要一次性使用。
注意: 匿名函数单独使用毫无意义,它必须配合 “内置函数” 一起使用的才有意义
def func(): return 1 print(func()) # func函数对象 + () print(func())
def (): pass () # + () lambda 匿名(): return 1 func = lambda : 1 print(func()) func = lambda : 1 print()