欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

2020-10-10

程序员文章站 2022-11-22 14:56:39
#查询student表的所有记录SELECT *FROM student;#查询student表的第2条到4条记录SELECT * fromstudent LIMIT 1, 4;#从student表查询所有学生的学号(id)、姓名(name)和院系(department)的信息SELECT id,name,department FROM student ;#从student表中查询计算机系和英语系的学生的信息SELECT * from stude......

闭包和装饰器

1、高阶函数

  • 接收函数作为参数是高阶函数
  • 将函数作为返回值返回的函数就是高阶函数

2、匿名函数

  • lambda函数(无名函数)
  • 语法:lambda 参数列表:表达式
  • filter()函数(过滤列表)
    • 第一个参数:函数
    • 第二个参数:序列

3、闭包
能够读取其他函数内部变量的函数。可以理解为函数嵌套函数,将函数内部和函数外部连接起来的桥梁。

作用:

  • 闭包可以保存外部函数的变量,不会随着外部函数调用完而销毁
  • 可以将一些私有数据藏到闭包里
  • 可以通过闭包创建一些只有当前函数能访问的变量

形成闭包的条件:

  1. 函数嵌套
  2. 将内部函数作为返回值返回
  3. 内部函数必须要使用到外部函数的变量

注意:由于闭包引用了外部函数的变量(参数),则外部函数德变量不会被释放,占用内存!

4、装饰器(Decorators)

  • 如果直接修改函数的代码来完成需求,会产生很多问题,例如:重复修改代码等
  • 装饰器的作用就是避免了修改原函数而能达到自己修改代码的需求,定义新的函数来装饰原函数,其就是一个闭包
  • 简单地说:他们是修改其他函数的功能的函数。他们有助于让我们的代码更简短

装饰器的语法糖写法(即使用更方便了),默认对下一个函数有效,最近的先起作用,@ 符号就是装饰器的语法糖,它放在函数开始定义的地方,这样就可以省略最后一步再次赋值的操作。

@fn
def speak()

这里@fn作用即为fn()传入参数speak,等于fn(speak),有了 @ ,我们就可以省去r = fn(speak)这一句了,直接调用 speak() 即可得到想要的结果。

  • @wraps接受一个函数来进行装饰,并加入了复制函数名称、注释文档、参数列表等等的功能。这可以让我们在装饰器里面访问在装饰之前的函数的属性。
  • 装饰器还有更大的灵活性,例如带参数的装饰器,*args和**kwargs
  • @functools.wraps(func),这是python提供的装饰器。它能把原函数的元信息拷贝到装饰器里面的 func 函数中。函数的元信息包括docstring、name、参数列表等等。

5、列表推导式

旧的列表 -->新的列表
语法:1.[表达式 for 变量 in 旧列表 if 条件]

res = [name for name in list if len(list)>4]

6、生成器
生成器实现方式一:通过推导式得到

generator = (i in range(100) if i%3 ==0) #generator即为生成器,特殊的迭代器
print(next(generator))  # 使用next()每次取一个符合条件的数

生成器的特性:生成器相当于一个容器,当把容器内的数据一次取出来了后容器内则没有数据了,即容器内数据为一次性

生成器实现方式二:利用函数的方式 yield

  • 当使用yield关键字后函数不再是函数,而是一个生成器
  • 当程序执行到yield的时候,程序就会停止,类似***input***
  • 生成器会记住你之前取到的元素的位置
def fn():
	print('程序被执行')
	i = 1
	while True:
		yield i
		i+=1

r = fn()
print(next(r))

本文地址:https://blog.csdn.net/qq_29529339/article/details/109004061

相关标签: 笔记