递归函数:
自己调用自己的函数一般称为递归函数。
特点:
1.递归函数必须要设定终点,不设置的话会造成死循环
2.通常都会有一个入口
def sum(n):
if n == 0:
return 0
else:
return n + sum(n - 1)
print(sum(5))
# 输出结果:
15 # 15=5+4+3+2+1
生成器:generator
定义一个生成器
g = (x * 3 for x in range(8))
此时g就是一个生成器
定义生成器的方式二:借助函数完成
只要函数中出现了yield关键字,说明函数就不是函数,变成生成器了
def func():
n = 0
while True:
n += 1
print(n)
yield n # 相当于return n + 暂停
生成器方法:
g.__next_()
通过调用__next_() 方式得到元素
使用类似列表推导式 []–>()
使用变量接收 g = (x+2 for x in list)
每次调用都会产生一个新的元素 如果元素产生完毕 再次调用的话就会产生异常StopIteration
next(g)
next(生成器对象) builtins 系统内置函数
每次调用都会产生一个新的元素 如果元素产生完毕 再次调用的话就会产生异常StopIteration
send(value)
向每次生成器调用中传值
推导式:
列表推导式 :
[x for x in range(20)]s = [x for x in range(20)]
print(s)
# 输出结果:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
在列表推导式中加入条件判断if
print([(a, b) for a in range(5) for b in range(10) if a % 2 == 0 and b % 2 == 1])
print([(a, b) for a in range(5) if a % 2 == 0 for b in range(10) if b % 2 == 1])
# 输出结果:
[(0, 1), (0, 3), (0, 5), (0, 7), (0, 9), (2, 1), (2, 3), (2, 5), (2, 7), (2, 9), (4, 1), (4, 3), (4, 5), (4, 7), (4, 9)]
[(0, 1), (0, 3), (0, 5), (0, 7), (0, 9), (2, 1), (2, 3), (2, 5), (2, 7), (2, 9), (4, 1), (4, 3), (4, 5), (4, 7), (4, 9)]
在列表推导式中加入条件判断if···else···
list1 = [4000, 5000, 6000]
newlist = [i + 200 if i > 5000 else i + 500 for i in list1]
print(newlist)
# 输出结果:
[4500, 5500, 6200]
字典推导式:用法和列表推导式基本相同,需要的参数变为了两个,定义的符号从[]变为了{}
{k:v for k,v in xxx}
newdict = {value: key for key, value in dict1.items()}
集合推导式
类似列表推导式,在列表推导式的基础上添加了一个去除重复项的功能
list1 = [5,5,2,4,8,1,6,4,5]
print({x for x in list1 if x > 3})
print([x for x in list1 if x > 3])
# 输出结果:
{8, 4, 5, 6}
[5, 5, 4, 8, 6, 4, 5]
Iterable 可迭代的对象
使用Iterable需要先导入:
from collections import Iterable
判断元素是否为可迭代的:
from collections import Iterable
l = [x for x in range(6)]
print(isinstance(l, Iterable))
# 输出结果:
True
迭代是访问集合元素的一种方式
迭代器是一个可以记住遍历的位置的对象
迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退
可以被next()函数调用并不断返回下一个值的对象称为迭代器
在Python中,一边循环一边计算的机制,称为生成器:generator。生成器一定是迭代器
可迭代的 不一定是 迭代器
生成器是可迭代的也是迭代器
列表元组等 是可迭代的但不是迭代器
通过iter()函数将可迭代的变成了一个迭代器
next(iter1)
list1 = [1, 2, 3, 4, 6]
iter1 = iter(list1)