zoukankan      html  css  js  c++  java
  • python中函数部分简介与定义(二)

    一 闭包函数

    在函数内部引用了外部函数的作用域里的函数名

    二 装饰器:

    开放封闭原则:对功能拓展,对修改封闭。

    遵循两个选择:1.不改变源代码。2.不改变原函数的调用方式。

     
    #装饰器模板
    def outter(func): def warpper(*args,**kwargs): res = func(*args,**kwargs) return res return warpper

    三 递归函数:

    分为回溯和递归:

    回溯:每次重复执行的过程是建立在下一次重复执行的基础上,然而重复的复杂度是逐渐降低的。直到有条件让循环结束。否则会无限递归。

    递归:循坏执行下去后,在一次次的往回执行,直到有结果。

    def count(n):
         if n == 1:    #给一个结束的条件
            return 22
         return count(n-1) + 2
    res = count(5)
    print(res)
            

    总结递归函数:递归函数中必须要有个结束递归的条件,否则无限递归没有任何的意义。

    四,匿名函数(lambda)

    顾名思义就式无名函数,它有以下特点:

    1.匿名函数的参数规则,作用域关系跟普通函数是一样的。

    2.匿名函数的函数体是一个表达式,这个表达式还必须有个返回值。

    3.匿名函数是临时存在的,用完就没了。

    4.匿名函数不会单独使用,一般都和内置函数配合使用

    #下面就是匿名函数与内置函数的配合使用:
    salary = {'andy':18768,
    'tank':19872,
    'egon':38461,
    'jason':28632}
    salary = sorted(salary,key= lambda x:salary[x],reverse=Ture) #求得从大到小排序, 匿名函数 lambda 与内置函数 sorted 搭配用
    print(salary)

    salary = max(salary,key= lambda x:salary[x]) #求得字典里最大值,匿名函数 lambda 与内置函数 max 搭配用
    print(salary)

    salary = min(salary,key= lambda x:salary[x]) #求得字典里最小的值,匿名函数 lambda 与内置函数 min 搭配
    print(salary)

    五,常用的内置函数

    map(映射)与  lambda 结合使用:

    l = [4,2,3,6,7,8]
    res = map(lambda x:x**2,l) #这里返回的是个迭代器
    print(list(res))

    l = ['andy','jason','egon']
    res = map(lambda x:x+'_nb',l)
    print(list(res))

    l = ['tank','egon','jason','andy']
    res = map(lambda x:x+'_nr' if x == 'andy' else x+'_nb') #结合三元表达式一起
    print(last(res))

    reduce(合并)与  lambda 结合使用::在python2中还是内置函数,但是在python3中需要导入模块

    from functools import reduce  #导入模块,使用reduce
    res = reduce(lambda x,y:x+y,range(1,889)) #用reduce和lambda 求得1到888的数之和,最后面的参数可以不用传值。
    print(res)

    l = ['my','name','is','haha'] #将列表中的字符串拼接在一起
    res = reduce(lambda x,y:''+y+'',l)
    print(res)

    filter(剥离)与  lambda 结合使用:

    l = ['lxx_sb','xx_nb','xy_sb']
    res = filter(lambda x:x.endswith('sb'),l) #判断为真就会执行,是个迭代器
    print(list(res))

    l = [1,2,3,66,99,43]
    res = filter(lambda x:x>=66,l)
    print(list(res))

    zip(拉链):

    l = ['name','jason','andy']
    l1 = ['1','2','4']
    l2 = ['a','b']
    
    print(list(zip(l,l1,l2))) # 

    六 三元表达式

    固定的表达模式如下:变量1 if 条件 else变量2

                                         如果满足条件执行变量1 

                                         否则执行变量2

    x = 22
    y = 18
    res = x if x > y else y 
    print(res)

    五 列表生成式

    l = ['andy_n','ruby_x','tank_n','egon_x','jason_n']
    res = [name for name in l if name.endswith('_n')]
    #将变量name, for循环后判断是否满足条件,如果满足则执行左边的变量name
    print(res)
    #['andy_n','tank_n',jason_n]

    六 字典生成式

    l = ['tank','andy','jason']
    res = {i:j for i,j in enumerate(l,1) if j != 'andy'}
    #用for循环在枚举后的列表中,当条件满足则执行左边的条件
    print(res) #{1:'tank',3:'jason'}

    七 算法之二分法

    容器类型里的数字必须有大小顺序。

    l = [1,2,3,4,5,6]
    def get1(l,number):
            if number not in l:
                print('None')
            l1 = l // 2         #将列表一分为二,获取中间的索引
            if number > l[l1]:
              right = l[l1+1:]   #获取列表右边的数字
              get1(right,number)
            elif number < l[l1]:  #获取列表左边的数字
               left = l[0:l1]
               get1(left,number)
            else:
               print('number')
     get1(l,6)  
  • 相关阅读:
    服务器运维
    mysq配置
    PHP-FPM进程数的设定
    vsftpd 安装配置详细教程
    php-fpm性能优化
    如果不知道MySQL当前使用配置文件(my.cnf)的路径的解决方法
    搭建linux+nginx+mysql+php环境
    PHP 页面编码声明方法详解(header或meta)
    Linux内核的一些知识。
    Connector框架笔记
  • 原文地址:https://www.cnblogs.com/wujc3/p/11177060.html
Copyright © 2011-2022 走看看