24-Python函数4

1.闭包

	概念
		在函数嵌套的前提下
		内层函数引用了外层函数的变量(包括参数)
		外层函数, 又把 内层函数 当做返回值进行返回
		这个内层函数+所引用的外层变量, 称为 "闭包"
	标准格式
		def test1(a):
			b = 10
			其他函数定义代码
			def test2():
				print(a)
				print(b)
			return test2
	应用场景
		外层函数, 根据不同的参数, 来生成不同作用功能的函数
	案例
		根据配置信息, 生成不同的分割线函数
	注意事项
		1. 闭包中, 如果要修改引用的外层变量
			需要使用  nonlocal 变量  声明
			否则当做是闭包内, 新定义的变量
		2. 当闭包内, 引用了一个, 后期会发生变化的变量时, 一定要注意
			函数, 是被调用时, 才去确定变量标识所对应的值

###2.装饰器

	作用
		在函数名以及函数体不改变的前提下, 给一个函数附加一些额外代码
	语法
		@装饰器
def 被装饰函数():
	code
	案例
		发说说, 发图片
			附加
				身份验证 操作
		"开放封闭"原则
			已经写好的代码, 尽可能不要修改
			如果想要新增功能, 在原先代码基础上, 单独进行扩展
		单一职责
	注意
		装饰器的执行时间, 是立即执行
	进阶
		装饰器叠加
			从上到下装饰
			从下到上执行
		对有参函数进行装饰
			无论什么场景, 保证函数调用参数个数一致
			为了通用, 可以使用不定长参数, 结合 拆包操作进行处理
		对有返回值的函数进行装饰
			无论什么场景, 保证函数返回值一致
		带有参数的装饰器
			通过@装饰器(参数)的方式, 调用这个函数, 并传递参数; 并把返回值, 再次当做装饰器进行使用
			先计算 @ 后面的内容, 把这个内容当做是装饰器

3.生成器

	生成器
		是一个特殊的迭代器(迭代器的抽象层级更高)
		所以, 拥有迭代器的特性
			惰性计算数据, 节省内存
			能够记录状态, 并通过next()函数, 访问下一个状态
			具备可迭代特性
		但是, 如果打造一个自己的迭代器, 比较复杂
			需要实现很多方法
				后续在"面向对象"编程中会进行讲解
			所以, 就有一个更加优雅的方式 "生成器"
	创建方式
		生成器表达式
			把列表推导式的[] 修改成  ()
			(i for i in range(1, 10000000) if i % 2 == 0)
		生成器函数
			函数中包含  yield语句
			这个函数的执行结果就是 "生成器"
	产生数据的方式
		生成器具备可迭代特性
		next()函数
			等价于
				生成器.__next__()
		for in
	send() 方法
		send方法有一个参数,指定的是上一次被挂起的yield语句的返回值
		相比于.__next__()
			可以额外的给yield 语句 传值
		注意第一次调用
			t.send(None)
	关闭生成器
		g.close()
		后续如果继续调用, 会抛出StopIteration异常提示
	注意
		如果碰到return
			会直接终止, 抛出StopIteration异常提示
		生成器只会遍历一次

学习地址:

撩课-Python大数据+人工智能1
撩课-Python大数据+人工智能2
撩课-Python大数据+人工智能3
撩课-Python大数据+人工智能4
撩课-Python大数据+人工智能5
撩课-Python大数据+人工智能6
撩课-Python-GUI编程-PyQt5

猜你喜欢

转载自blog.csdn.net/lkitlike/article/details/85044002
今日推荐