什么是高阶函数(Python)?
高阶函数:能接收函数做参数的函数
- 变量可以指向函数
- 函数的参数可以接受变量
- 一个函数可以接收另一个函数作为参数
- 能接收函数作参数的函数就是高阶函数
函数名其实就是指向函数的变量
什么是匿名函数?
1. 所谓的匿名函数,意思为不在使用def语句这样的标准形式定义一个函数。
- lambda只是一个表达式,函数体比def简单很多
- lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去
- lambda函数拥有自己的命名空间,且不能访问自己参数列表之外或者全局命名空间里的参数
- 虽然lambda函数看起来只有一行,却不等同于C或者C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率
- 匿名函数lamdba语法:
lambda [arg1,[arg2,......argn]]:expression
# lambda 参数列表:return[表达式]变量
# 由于lambda返回的是函数对象(构建的是一个函数对象),所以需要定义一个变量去接收
3.匿名函数的优点
- 使用Python写一些脚本时,使用lambda可以省去定义函数的过程,让代码更加精简
- 对于一些抽象的,不会被别的地方再重复使用的函数,有时候函数起名字也是个难题,使用lambda不需要考虑命名的问题
- 使用lambda在某些时候能让代码更容易理解
其他的高阶函数
- map()函数
- reduce()函数
- filter()函数
- sorted()函数
闭包
def calc_sum(lst):
def lazy_sum():
return sum(lst)
return lazy_sum
上述的例子中,无法吧lazy_sum移到calc_sum外部,因为它引用了calc_sum的参数lst
.
这种内层函数引用了外层函数的变量(参数也是变量)。然后返回内层函数的情况,称为闭包。
闭包的特点是返回的函数还引用了外层函数的局部变量。所以,要正确使用闭包。就要确保引用的局部变量在函数返回后不能变.举例如下:
# 希望一次返回3个函数,分别计算1x1,2x2,3x3
def count():
fs = []
for i in range(1,4):
def f():
return i*i
fs.append(f)
return fs
f1,f2,f3 = count()
你可能认为调用f1(),f2()和f3()结果应该是1,4,9,但实际结果全部都是9
原因就是当count()函数返回了3个函数时,这3个函数所引用的变量i的值已经变成了3,由于f1,f2,f3并没有被调用,所以,此时它们并未计算i*i,当f1被调用时:
>>>f1()
9
# 因为f1现在才计算i*i,但现在i的值已经变为3
Python表达式:
典型的表达式一般由运算符和操作数/操作对象组成。
运算符:对操作数/操作对象进行运算处理的符号
操作数/操作对象:运算符处理的数据
在条件表达式中常用的运算符如下:
(1) 算术运算符:+ - * / // % ** ~
(2) 关系运算符:> < == != <> <= >=
(3) 测试运算符:in,not in,is, not is
(4) 逻辑运算符:and, or ,not
参考下面的博客
python基础表达式与选择结构
python运算符和表达式
网友评论