前引:

上节课思考:多个装饰器的加载和运行分析

def deco1(func1): #func1=warpper2
def wrapper1(*args,**kwargs):
print('正在运行===>deco1.wrapper1')
res1=func1(*args,**kwargs)
return res1
return wrapper1 def deco2(func2):#func2=warpper3
def wrapper2(*args,**kwargs):
print('正在运行===>deco2.wrapper2')
res2=func2(*args,**kwargs)
return res2
return wrapper2 def deco3(x):
def outter3(func3): #func3=index
def wrapper3(*args,**kwargs):
print('正在运行===>deco3.outter3.wrapper3')
res3=func3(*args,**kwargs)
return res3
return wrapper3
return outter3
@deco1
#@deco1 ==>warpper2=deco1(warpper2) ==>warpper2=warpper1
@deco2
#@deco2 ==>warpper3=deco2(warpper3) ==>warpper3=warpper2
@deco3(111)
#deco3(111)=outter3 @outter3==>index = outter3(index)==>index = warpper3
#装饰器的加载顺序,从下到上
#运行顺序,从上到下
def index(x,y):
print('from index %s:%s' %(x,y))

一、yield表达式

1 yield表达式基本用法

yield关键字只要出现在函数中,调用这个函数不会执行,会返回一个生成器(自定义迭代器),这里可以对yield传值,在函数内通过一个变量接受这个值

def func(name):
while True:
print(f"我是{name}")
x = yield
print(f"我爱吃{x}")
g = func("hz")
#给函数传参hz调用函数,此时发现函数内有yield关键字,挂起函数,函数调用的返回值是生成器
g.__next__()#执行迭代器功能查找下一个值,运行函数至yield处
g.send("水果")#给yield传值
#注意:这不是yield的返回值,返回值在函数定义的时候就写好了
g.send("巧克力")#给yield传值
>>>我是hz
>>>我爱吃水果
>>>我是hz
>>>我爱吃巧克力
>>>我是hz

二、三元表达式

三元表达式是一种代码简写的方式

语法格式:条件成立时运行的代码 if 条件 else 条件不成立时运行的代码

x= 1
y =2
if x > y :
print(x)
else:
print(y)
>>>2
print(x if x>y else y)
>>>2
print(x) if x>y else print(y)
>>>2

三、生成式

1 列表生成式

l = ["a","b","c2","adsa","z"]
#需求:把列表内长度大于1的值添加到新列表new_l中
#基础做法:
for i in l :
if len(i)>1:
new_l.append(i) #列表生成式做法:
new_l = [i for i in l if len(i)>1]

2 字典生成式

d = {"a":1,"b":2,"c":3}
#生成一个新的字典,key是d中的所有key,value为none
#基础做法:
new_d = {}
for i in d:
new_d[i] = None #字典生成式做法:
new_d = {key:None for key in d }

3 集合生成式

#生成一个含有数字1-9的集合
#基础做法:
set1 = set()
print(type(set1))
for i in range(1,10):
set1.add(i) #集合生成式做法:
s ={i for i in range(1,10)}

4 生成器表达式

#生成一个生成器
g = (i for i in range(10) if i >3)
#此刻g内部一个值都没

四、函数的递归

1 递归的定义

是函数嵌套的一种特殊形式

在调用一个函数的过程中间接或者直接调用了本身

#直接调用本身
def foo():
foo()
foo()
#间接调用本身
def f1():
f2()
def f2():
f1()
f1()

2 详解递归

如果我们执行了上述代码会发现pycharm在1000次左右递归后报错,因为递归本身是一种很危险的行为,如果我们对递归不做任何处理让他永久的调用下去会直接造成内存溢出。

#需求:生成一个含有1-10的列表
#for循环方式
l=[]
for i in range(1,11):
l.append(i)
#函数递归方式
def appen(n):
if n == 11:
return
else:
l.append(n)
n+=1
appen(n)
appen(1)

递归的两个阶段

回溯:一层一层调用下去

#运行递归函数的过程
def func ():
func()
func()

递推:满足某种结束条件,结束递归调用,然后一层一层返回

day19 生成器+函数递归的更多相关文章

  1. day19 生成器函数

    生成器总结: 语法上和函数类似:生成器函数和常规函数几乎是一样的.它们都是使用def语句进行定义,差别在于,生成器使用yield语句返回一个值,而常规函数使用return语句返回一个值. 自动实现迭代 ...

  2. python之旅:三元表达式、列表推导式、生成器表达式、函数递归、匿名函数、内置函数

    三元表达式 #以下是比较大小,并返回值 def max2(x,y): if x > y: return x else: return y res=max2(10,11) print(res) # ...

  3. python06-列表表达式、生成器表达式及其面试题、解耦简单介绍、函数递归相关

    目录: 一.列表推导式 二.生成器表达式 三.集合生成器 四.生成器面试题 五.解耦简单介绍 六.函数递归相关 一.列表推导式 需求:将[1,3,5]中的每个元素平方 正常思路: new_list = ...

  4. python之迭代器 生成器 枚举 常用内置函数 递归

    迭代器 迭代器对象:有__next__()方法的对象是迭代器对象,迭代器对象依赖__next__()方法进行依次取值 with open('text.txt','rb',) as f: res = f ...

  5. python 生成器和递归

    生成器 1.定义 问题:python会把对象放到内存中,我们每次定义变量.列表等都会在内存中占用对应的地址块,所以当内存容量一定时,列表的容量会受到内存的限制,而且假如我们创建了一个包含200万个元素 ...

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

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

  7. python中的生成器函数是如何工作的?

    以下内容基于python3.4 1. python中的普通函数是怎么运行的? 当一个python函数在执行时,它会在相应的python栈帧上运行,栈帧表示程序运行时函数调用栈中的某一帧.想要获得某个函 ...

  8. Python标准库中的生成器函数

    一.用于过滤的生成器函数 - 从输入的可迭代对象中产出元素的子集,而不修改元素本身 import itertools l1 = [1,2,3,4,5] l2 = [True,False,True,Fa ...

  9. day13-迭代器、三元表达式、列表推导式、字典生成式、生成器与递归

    目录 迭代器 可迭代对象 迭代器对象 for循环原理 三元表达式(三目表达式) 列表推导式 字典生成式 zip()方法 生成器 生成器表达式 递归 递归的两个阶段 迭代器 迭代器即迭代的工具,迭代是一 ...

随机推荐

  1. js数组的常见操作( push、pop、unshift、shift、splice、concat、 join)的用法

    1.数组添加删除 头部或尾部( push().pop().unshift().shift() ) 例2.数组尾部添加 push()方法可向数组的末尾添加一个或多个元素,并返回新的长度 语法:array ...

  2. 循环使用 v-for 指令。

    循环语句 循环使用 v-for 指令. v-for 指令需要以 site in sites 形式的特殊语法, sites 是源数据数组并且 site 是数组元素迭代的别名. v-for 可以绑定数据到 ...

  3. 探究:Adobe Premiere Pro CC 2018 导入SRT字幕显示不全问题

    问题:如果使用PR,大概率会遇到导入SRT格式的字幕文件后,PR里面显示的字幕不完整,字幕丢失的问题. 探究:字幕文件的内容正常,导入PR后字幕出现丢失. 查看字幕文件,并测试,发现如下图,如果出现字 ...

  4. springboot使用自定义异常

    sprinboot使用自定义注解 创建自定义异常类,继承RuntimeException public class MyException extends RuntimeException {   p ...

  5. api请求允许跨域的问题

    让api请求允许跨域 header("Access-Control-Allow-Origin:*");header('Access-Control-Allow-Credential ...

  6. 【 哈希和哈希表】Three Friends【进制哈希】

    Three Friends 传送门:链接 (UPC)或  链接(大视野) 题目描述 Three friends like to play the following game. The first f ...

  7. 快捷键浏览存储过程的内容(执行文中的User Store Proc,设置快捷方式的指向usp_Name)

    虽然不常用,但使用时还是在用传统方法查看存储过程的内容, sp_helptext usp_Name;下面这段执行后可设置快捷查询usp的内容(但是需要在每个数据库下都存在,不能直接在master,并且 ...

  8. SpringBoot 启动配置原理

    几个重要的事件回调机制 ApplicationContextInitializer SpringApplicationRunListener ApplicationRunner CommandLine ...

  9. Mysql Workbench中EER Diagram逆向生成表

    选择链接 选择需要生成的表

  10. 爬取B站弹幕并且制作词云

    目录 爬取弹幕 1. 从手机端口进入网页爬取找到接口 2.代码 制作词云 1.文件读取 2.代码 爬取弹幕 1. 从手机端口进入网页爬取找到接口 2.代码 import requests from l ...