python的入门7

1.闭包

1.闭包的定义

定义:如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure).在这里插入图片描述
结合这段简单的代码和定义来说明闭包:
如果在一个内部函数里:funY(y)就是这个内部函数,
对在外部作用域(但不是在全局作用域)的变量进行引用:x就是被引用的变量,x在外部作用域funX里面,但不在全局作用域里,
则这个内部函数funY就是一个闭包。

2.闭包的使用

1在这里插入图片描述在这里插入图片描述
输出结果为:
在这里插入图片描述
说明在使用闭包的时候,需要对i进行调用多次。在只调用一次的情况下,i的类型为function。
注:也不能在外部函数的外边对内部函数进行调用。

2.闭包中是不能修改外部作用域的局部变量的
错误案例:
在这里插入图片描述
这样的输出结果就会报错。
因为funY这个内部函数是不能调用外部函数里面的变量。

解决方法

1.容器类方法来解决

只要将x设定为一个容器就可以了。因为容器是被存放在栈里的。在这里插入图片描述

输出结果为:

25

2.nonlocal关键字

作用:用来修改局部变量

nonlocal 修改局部变量时,采用LEGB原则
1.跳出当前函数这一层空间,到上一层寻找
2.如果上一层不存在该变量,继续向上一层寻找
3.如果最顶级也找不到了,直接报错

在这里插入图片描述
输出结果为:

25

2.匿名函数lambda

匿名函数lambda:是指一类无需定义标识符(函数名)的函数或子程序。所谓匿名函数,通俗地说就是没有名字的函数,lambda函数没有名字,是一种简单的、在同一行中定义函数的方法。

lambda函数一般功能简单单行expression决定了lambda函数不可能完成复杂的逻辑,只能完成非常简单的功能。由于其实现的功能一目了然,甚至不需要专门的名字来说明。

lambda 函数可以接收任意多个参数 (包括可选参数) 并且返回单个表达式的值。

lambda表达式只允许包含一个表达式,不能包含复杂语句,该表达式的运算结果就是函数的返回值。

lambda函数实际生成了一个lambda对象。

lambda表达式的基本语法如下:

lambda arg1,arg2,arg3… :<表达式>
arg1/arg2/arg3为函数的参数(函数输入)
表达式相当于函数体,运算结果是表达式的运算结果。

lambda x, y: xy;函数输入是x和y,输出是它们的积xy

lambda:None;函数没有输入参数,输出是None

lambda *args: sum(args); 输入是任意个数的参数,输出是它们的和(隐性要求是输入参数必须能够进行加法运算)

lambda **kwargs: 1;输入是任意键值对参数,输出是1

在这里插入图片描述
相当于下面这个函数:
在这里插入图片描述
1.将lambda函数赋值给一个变量,通过这个变量间接调用该lambda函数。
例如,执行语句add=lambda x, y: x+y,定义了加法函数lambda x, y: x+y,并将其赋值给变量add,这样变量add便成为具有加法功能的函数。例如,执行add(1,2),输出为3。

add=lambda x, y: x+y
add(1,2)
输出结果为:
3

3.特殊的内置函数

1.filert()

filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用 list() 来转换

该接收两个参数,第一个为函数也可以为none,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回 True 或 False最后将返回 True 的元素放到新列表中。

在这里插入图片描述
输出结果为:

[1,3,5,7,9]

相当于

print(list(filter(lambda x:x%2,range(10))))

2.map

1.map()的使用

map是python内置函数,会根据提供的函数对指定的序列做映射。

map()函数的格式是:

map(function,iterable,…)

第一个参数接受一个函数名,后面的参数接受一个或多个可迭代的序列,返回的是一个集合。

把函数依次作用在list中的每一个元素上,得到一个新的list并返回。注意,map不改变原list,而是返回一个新list。

def square(x):
return x ** 2
print(list(map(square,[1,2,3,4,5])))
输出结果为:
[1,4,9,16,25]

通过使用lambda匿名函数的方法使用map()函数:

map(lambda x, y: x+y,[1,3,5,7,9],[2,4,6,8,10])
输出结果为:
[3,7,11,15,19]

2.通过map实现类型转换

通过map还可以实现类型转换

将元组转换为list:
print(list(map(int,(1,2,3))))
输出结果为:
[1,2,3]

将字符串转换为list:
print(list(map(int,‘1234’)))
#输出结果为:
[1,2,3,4]

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值