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)  

 

posted on 2019-07-12 23:02  IT界的蜉蝣  阅读(259)  评论(0编辑  收藏  举报

导航