假期补习补习Python,防止以后用到炸锅。
闭包
在Python语言中,一切皆对象。
闭包:一个函数定义中引用了函数外定义的变量,并且该函数可以在其定义环境外被执行。
闭包 = 函数 + 环境变量
1 | def curve_pre(): |
1 | def f1(): |
上述例子并不是闭包,因为a并不是环境变量了,而是变成了局部变量。
匿名函数
语法: lambda 参数列表 : 表达式
1.使用lambda关键字创建匿名函数。
2.所谓匿名函数,就是没有名字的函数。
3.匿名函数冒号后面的表达式有且只能有一个,注意:是表达式,而不是语句。
4.匿名函数自带return,而return的结果就是表达式的计算后的结果。
1 | def add(x, y): |
在进行匿名函数调用的时候,直接将函数赋值给一个变量即可
1 | f = lambda x, y: x + y |
匿名函数中常用三元表达式进行相关功能实现。Python中的三元表达式
其他语言中如C,C++,java的三元表达式:
1 | x > y ? x : y |
Python中的三元表达式:
条件为真时的结果 if 条件判断 else 条件为假时的返回结果
1 | f = lambda x, y: x if x > y else y |
(1) map() 会根据提供的函数对指定序列做映射。
1 | l = [1, 2, 3, 4, 5] |
map与lambda:
上述代码可改变为:
1 | l = [1, 2, 3, 4, 5] |
注意:map与lambda并不能提高代码运行上的效率,只是使得代码更加简洁。
(2) reduce:
在Python 3.x,reduce已不在全局命名空间内,所以想要使用需要先引入
reduce() 函数会对参数序列中元素进行累积。
函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。
1 | from functools import reduce |
(3) filter:
filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。
该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
1 | l = [1, 0, 0, 1, 0, 2] |
该函数特别适合做集合的过滤
高阶函数
高阶函数:map、reduce、filter
高阶函数就是一个函数可以用来接收另一个函数作为参数
装饰器
框架中普遍大量使用装饰器,所以装饰器很重要。装饰器是一种设计模式,类似于Java中的注解
提高可扩展性,不改变原有函数而增加新的功能
1 | import time |
语法糖:@符
语法糖(Syntactic sugar),也译为糖衣语法,是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语,指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会。
解决调用时复杂的问题。
装饰器不需要改变调用
1 | import time |
可变参数问题:
使用*args定义可变参数
1 | import time |