A

ACarol

V1

2022/09/08阅读:40主题:默认主题

Python基础4

内嵌函数和闭包

  • 内嵌函数
形式上:一个函数里面又定义了一个函数
  外层的函数:外部函数
  内层的函数:内部函数
1. 内嵌函数的作用范围:同局部变量
 在作用域以外是不能被调用的
 作用范围:从代码块开始到结束
2. 内嵌函数不能执行类似于a+=1的操作
 本质:等号右边先进行使用,然后左边再进行赋值
 解决方案:nonlocal或者global
  • 闭包
全称:词法闭包 Lexical Closure
是一种编程范式:对代码进行提炼和概括,使得代码的重用性更高。
闭包的条件
1. 必须是一个内嵌函数
2. 外部函数必须返回的是内部函数的函数对象
3. 内部函数必须引用外部函数的局部变量
  • 闭包的作用
1. 可以在声明较少的参数的情况下,传递更多的参数
2. 可以使用更多的内部函数
  间接使用:通过return 返回出内部函数的函数对象(尚未被调用),然后再使用
3. 多用于集群
  • 闭包的优势
1. 避免使用全局变量
 全局变量容易出现脏读问题(不安全)
2. 提供部分的数据隐藏
 1. 隐藏了参数
 2. 隐藏了内部函数对象
3. 可以更优雅的实现面向对象
 返回了一个函数对象
  • 匿名函数
没有函数名的函数
1. 临时使用一次
2. 函数只是用一次

可以避免命名冲突
关键字:lambda
语法:
 lambda 形参:返回值
 
1. 
lambda 用于创建一个lambda函数对象
2. lambda书写的形式:lambda表达式
3. lambda表达式常常应用与泛函编程(编程范式)
4. lambda表达式是一种解析式
  通过解析来创建函数对象
  执行效率相对来说较高
5. lambda表达式的优先级最低
  • lambda表达式的作用
1. 可以避免使用函数名,使用方便,代码更加简洁,优雅
2. 代码相对简化,可以适当地提高代码的可读性

高级函数

  • 函数式编程
1. 也称之为泛函编程,是一种编程范式:
 可以将一个函数对象作为参数传递给另一个函数,被传入的函数对象的执行过程,在调用的函数中执行
2. 函数式编程的重要基础是lambda表达式
 lambda表达式可以返回一个函数对象
  • filter()
python2:函数
python3:类
filter:过滤器
filter(function or None,iterable)
function:一个函数
iterable:可迭代对象
1. 如果function给出,将可迭代对象中的每一个元素,都挨个传递给function作为参数,筛选出return为True值
2. 如果function没有给出,一定要填None,则直接返回iterable中的为True的值

真值:任何非零的值
假值:任何零、None、空
[],(),{},'',0,False,0.0,0.,.0

分类:

后端

标签:

Python

作者介绍

A
ACarol
V1