首页 > 编程语言 > 详细

python中函数部分简介与定义(二)

时间:2019-07-13 09:19:17      阅读:19      评论:0      收藏:0      [点我收藏+]

标签:name   n-1   大小   num   传值   函数名   urn   分享图片   nbsp   

一 闭包函数

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

 

二 装饰器:

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

遵循两个选择: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 numerate(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)  

 

python中函数部分简介与定义(二)

标签:name   n-1   大小   num   传值   函数名   urn   分享图片   nbsp   

原文:https://www.cnblogs.com/wujc3/p/11177060.html

(0)
(0)
   
举报
评论 一句话评论(0
0条  
登录后才能评论!
© 2014 bubuko.com 版权所有 鲁ICP备09046678号-4
打开技术之扣,分享程序人生!
             

鲁公网安备 37021202000002号