高阶函数(Python)

2018-10-04  本文已影响6人  Dozing

什么是高阶函数(Python)?

高阶函数:能接收函数做参数的函数

  1. 变量可以指向函数
  2. 函数的参数可以接受变量
  3. 一个函数可以接收另一个函数作为参数
  4. 能接收函数作参数的函数就是高阶函数

函数名其实就是指向函数的变量

什么是匿名函数?

1. 所谓的匿名函数,意思为不在使用def语句这样的标准形式定义一个函数。

  1. 匿名函数lamdba语法:
lambda [arg1,[arg2,......argn]]:expression
# lambda 参数列表:return[表达式]变量
# 由于lambda返回的是函数对象(构建的是一个函数对象),所以需要定义一个变量去接收

3.匿名函数的优点

其他的高阶函数

闭包

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运算符和表达式

上一篇 下一篇

猜你喜欢

热点阅读