python中函数定义包括哪几个部分_python中函数部分简介与定义(二)

一 闭包函数:

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

二 装饰器:

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

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

#装饰器模板

defoutter(func):def warpper(*args,**kwargs):

res= func(*args,**kwargs)returnresreturn warpper

三 递归函数:

分为回溯和递归:

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

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

defcount(n):if n == 1: #给一个结束的条件

return 22

return count(n-1) + 2res= 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 = 22y= 18res = xif 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]defget1(l,number):if number not inl: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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值