python高阶函数

1、nonlocal 语句
  作用:

    告诉解释器,nonlocal声明的变量不是局部变量,也不是全局变量,而是外部嵌套函数内的变量

  语法:
    nonlocal 变量名1, 变量名2, ...

  说明:
    nonlcal 语句只能在被嵌套函数内部进行使用对nonlocal变量进行赋值将对外部嵌套函数作用域内的变量进行操作
    当有两层或两层以上函数嵌套时,访问nonlocal变量只对最近一层变量进行操作
    nonlocal 语句的变量列表里的变量名,不能出现在此函数的形参列表中
View Code

2、lambda 表达式

  作用:

    创始一个匿名函数对象

    同 def 类似,但不提供函数名

    语法格式:
      lambda [函数形参列表]: 表达式

  说明:
    lambda 表达式创建的函数只能包含一条表达式
    lambda 比函数简单且可以随时创建和销毁,有利于减少程序的偶合度
View Code

3、eval()和exec()函数

  eval(source, globals=None, locals=None) 把一个字符串
    source 当成一个表达式来执行,返回表达式执行后的结果
  exec(source, globals=None, locals=None) 把一个字符串
    source 当成程序来执行

4、函数式编程

  函数式编程是指用一系列函数解决问题
    说明:
    用每一个函数完成细小功能,有系列函数的任意组合可以解决大问题
    函数仅接收输入并产生输出,不包含任何能影响输出的内部状态

5、函数的可重入性:
  当一个函数没有访问除局部变量以外的变量,则此函数为可重入函数

  说明:
    可重入函数,输入一定。结果必须一定

  可重入函数:

    def myadd(x, y):
      return x + y
    print(myadd(100, 200)) # 300
    print(myadd(100, 200)) # 300

  不可重入函数:

     s = 0

    def myadd(x,y):

      global s 

      s += x +y

      return s

    print(myadd(100,200)) #300

    print(myadd(100,200)) #600
View Code

6、高阶函数 High Order Function

  什么是高阶函数:
    满足下列条件之一的函数即为高阶函数
      1. 函数接收一个或多个函数作为参数传入
      2. 函数返回一个函数

  map函数:
    map(func, iter1, iter2, ....) # 返回一个可迭代对象,
      此可迭代对象对iter1, iter2中的每一个元素计算得到结果并返回,当最短的一个函数结束时生成结束
  参数说明:
    func 对可迭代对象处理的函数,函数的参数个数必须与可迭代对象人个数相同
    iter1, iter2, 为func提供数据,iter1, iter2, 可以有一个或多个,但至少要有一个

7、filter 函数

  格式:
    filter(func, iterable)
  作用:
  筛选可迭代对象iterable中的数据,返回一个可迭代对象,此可迭代对象只返回iterable提供的数据中满足条件的数据
  说明:
    func 含有一个形参的数据处理函数,此函数传入值为iterable中提供的数据,此函数func将对iterable中的每个元素进行求布尔值,返回True则保留此数据,返回False则将此数据丢弃
    iterable 为可迭代对象,此可迭代对象提供的数据将传入到func进行判断后将定能否提供给调用者

8、sorted函数

  作用:
    将原可迭代对象的数据进行排序,生成排序后的列表
  格式:
    sorted(iterable, key=None, reverse=False)
  说明:
    iterable 可迭代对象
    key 函数是用来提供一个值,这个值将作为排序的依据

    reverse 标志用来设置是否降序排序

  示例:
    L = [5, -2, -4, 0, 3, 1]
    L2 = sorted(L)
    L3 = sorted(L, reverse=True)
    L4 = sorted(L, key=abs) # L4=[0, 1, -2, 3, -4, 5]
    L5 = sorted(L, key=abs, reverse=True)
    names = ['Tom', 'Jerry', 'Spike', 'Tyke']
    L6 = sorted(names) # ['Jerry', 'Spike', 'Tom', 'Tyke']
    L7 = sorted(names, key=len) #['Tom', 'Tyke', ....]
View Code
  注:
    key绑定的函数的语法规则:
    def getvalue(x):
      return 依据
    如:
      names = ['Tom', 'Jerry', 'Spike', 'Tyke']
      def get_key(x):
        print("x=", x)
        return len(x)

      L8 = sorted(names, key=get_key)
View Code

  函数直接或间接的调用自身

  示意:
    直接调用自身:
      def f():
       f()
      f()
    间接调用自身:
      def fa():
       fb()
      def fb():
       fa()
      fa()
View Code

  递归说明:
    递归一定要控制递归的层数,当符合某一条件时要终止递归调用几乎所有的递归都能用while循环来代替
  实现方法:
    先假设此函数已经实现
  递归的优缺点:
    优点:
      递归可以把问题简单化,让思路使为清淅,代码更简洁
    缺点:
      递归因系统环境影响大,当递归深度太大时,可能会得到不可预知的结果

  示例:
  递归求和:
    def mysum(n):
     '''返回0 + 1 + 2 + 3 + 4 + ..... + n 的和'''
     if n == 0:
      return 0
     return n + mysum(n-1)

    print(mysum(100)) # 5050
    print(mysum(900)) # 没错
    print(mysum(1000)) # 程序崩溃
View Code
原文地址:https://www.cnblogs.com/zhaoyang1997/p/10473333.html