zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    slots属性(省内存,限制属性的定义)
    自定制格式化方式format
    改变对象的字符串显示__str__repr
    __getattribute__和item系列
    授权(类似)
    双下划线开头的attr方法
    动态导入模块
    反射
    python的单下划线和双下划线
    在子类中调用父类的方法
  • 原文地址:https://www.cnblogs.com/zhaoyang1997/p/10473333.html
Copyright © 2011-2022 走看看