💕💕💕 博主昵称:摆烂阳💕💕💕
🥰博主主页跳转链接
👩💻博主研究方向:web渗透测试 、python编程
📃 博主寄语:希望本篇文章能给大家带来帮助,有不足的地方,希望友友们给予指导
递归:如果一个函数内部调用了自己那么就叫递归。
def f():
print("你好,我叫aa")
f()
f()
1.如果要定义递归函数,必须要有出口,因为无限递归会导致内存溢出
2.设计一个出口,不断的向出口接近
def f(x):
print("你好,我叫aa")
if x == 10:
return # 结束函数
f(x + 1)
f(1)
案例:求987654321 的结果,就是9的阶乘
n! = n * (n-1)!
9的阶乘 = 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1
9的阶乘 = 9 * 8!
8的阶乘 = 8 * 7!
7的阶乘 = 7 * 6!
6的阶乘 = 6 * 5!
5的阶乘 = 5 * 4!
4的阶乘 = 4 * 3!
3的阶乘 = 3 * 2!
2的阶乘 = 2 * 1!
f(x) = x * f(x-1) # 阶乘公式
def f(x):
if x == 1:
return 1
return x * f(x - 1)
print(f(5))
f(5) = 5 * f(4)
5 * 4 * f(3)
5 * 4 * 3 * f(2)
5 * 4 * 3 * 2 * f(1) # f(1) = 1
在 Python 中,使用了 yield 的函数被称为生成器(generator)。跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。 在调用生成器运行的过程中,每次遇到yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next () 方法时从当前位置继续运行。
生成器:相当于存储一种厨师
# s = [x for x in range(10000000)]
f = (x for x in range(10))
print(next(f)) # 输出f的第1个值
print(next(f)) # 输出f的第2个值
print(next(f)) # 输出f的第3个值
....
一次性做出所有菜
for i in f:
print(i)
def f():
print("f1")
yield 1 # 挂起
print("f2")
yield 2 # 挂起
def g():
print("g1")
yield 1
print("g2")
yield 2
可以使用生成器 多个任务 交叉执行
g1 = f()
g2 = g()
next(g1)
next(g2)
next(g1)
next(g2)
# f1 g1 f2 g2
生成器的两种创建方式
1.(i for i in range(1,10))
2.yiled 关键字实现
def f():
print("f1")
yield 1 # 挂起
print("f2")
yield 2 # 挂起
print("f3")
yield 3
g = f()
迭代遍历的本质:
不断通过 i = next(g)
for i in g:
print(i)
for i in 可迭代对象
从现象来说,只要是可以for循环的都是可迭代对象
从本质来说,是内置有iter方法的是可迭代对象
能for循环是因为有一个__iter__()
方法
可迭代对象:对象拥有iter方法的
在Python中,迭代器是遵循迭代协议的对象。 使用iter ()从任何序列对象中得到迭代器(如
list, tuple, dictionary, set
等)。
生成器就是迭代器
迭代器需要满足两个条件:
1.有iter方法
2.有next方法
l = [1,2,3,4]
l.__iter__()
iter(l) # 本质上就是 l.__iter__()
iter : 返回一个迭代器对象
for循环内部本质3个事情
1.调用可迭代对象的iter方法返回一个迭代器
2.不断调用迭代器的next方法
3.处理异常
本文是本人以前笔记,博主主页跳转链接
如果有哪里不对的话欢迎各位大佬指出问题,本人也是初学python,希望可以和各位朋友一起学习进步。点击跳转到博主python专栏:
如果有喜欢web安全的朋友,请在web渗透专栏中进行查看
点击跳转到博主web渗透专栏