递归函数
在一个函数体的内部,调用函数本身,就被称为递归函数。
def fun(n):
if n==1 or n==2:
return 1
else:
return fun(n-1)+fun(n-2)
print(fun(10))
#输出结果:
55
匿名函数
匿名函数的关键字为lambda,冒号前面是行参,冒号后面是返回值。
格式:
lambda para1,para2,…paraN:expression using paras
f=lambda x,y,z:x+y+z
print(f(1,2,3),type(f))
f=lambda c,d:c+d
print(f("city","college"),type(f))
#输出结果:
6 <class 'function'>
citycollege <class 'function'>
高阶函数
高阶函数:把一个函数名,以实参的形式传递给这个函数的形参。
def add(a,b,func):
# return func(a)+func(b)
return func(a,b)+func(b,a)
# a_value=add(-9,1,abs)
a_pow=add(2,3,pow)
# print(a_value)
print(a_pow)
#输出结果:
10
17
##例题:
li=["Zhengjiang","University","City","College"]
def start_sr(sr):
return sr.startswith("C")
def end_sr(sr):
return sr.endswith("ty")
def test(func,para):
ret=[]
for i in para:
if not func(i):
ret.append(i)
return ret
print(test(start_sr,li))
print(test(end_sr,li))
print(test(lambda sr:sr.startswith("C"),li))
#输出结果:
['Zhengjiang', 'University']
['Zhengjiang', 'College']
['Zhengjiang', 'University']
filter函数
语法:
filter(function,sequence)
function:可以是自定义的函数,也可是匿名函数。
sequence:列表,元组,字符串
功能:过滤掉序列中不符合函数条件的元素。当序列中需要保留的元素可以用某些函数描述,就应该想到filter函数。
##例题:
li=["Zhengjiang","University","City","College"]
def end_sr(sr):
return sr.endswith("ty")
f1=filter(lambda sr : not sr.endswith("ty"),li)
print(list(f1))
#输出结果:
['Zhengjiang', 'College']
map映射
功能:求一个序列或者多个序列进行函数映射后的值。
格式:
map(function,iterable1,iterable2)
##x=[1,2,3,4,5]
##y=[2,3,4,5,6]
1、
res=map(lambda x,y:x*y+2,x,y)
print(list(res))
2、
def hh(x,y):
return x*y+2
res=map(hh,x,y)
print(list(res))
#输出结果:
[4, 8, 14, 22, 32]
[4, 8, 14, 22, 32]
reduce函数
-
功能
-
对一个序列进行压缩运算,得到一个value;
-
python2中,reduce()是内置函数,而现在python3中,他被移植到functools模块中。
-
from functools import reduce
-
-
格式
- reduce(function,iterable,[initial])
- function 必须要传入两个参数
- Iterable---->列表/元组
- reduce(function,iterable,[initial])
from functools import reduce
y=[2,3,4,5,6]
z=reduce(lambda x,y:x+y,y)
z1=reduce(lambda x,y:10*x+y,y)
#f(x+y)=x+y
#1--->f(2,3)=5--->[5,4,5,6]
#2--->f(5,4)=9--->[9,5,6]
#3--->f(9,5)=14--->[14,6]
#4--->f(14,6)=20
z2=reduce(lambda x,y:x+y,y,100) #100为初始值,放到y的第一位
print(z)
print(z1)
print(z2)
#输出结果:
20
23456
120
apply
功能
- pandas中,应用对象是pandas中的DataFrame或者Series
- 直接对DataFrame或者Series应用函数
- 对pandas中groupby之后的聚合对象应用apply
zip
功能
- 将可迭代对象作为参数,将对象中对应的元素打包成一个个元组,返回由这些元组构成的对象
- 长度不一样的时候,以长度短的为准
注:
利用\*号操作符,与zip相反,进行解压。
格式:
zip(iterable1,iterable2,…)
a=[1,2,3]
b=[4,5,6]
c=[7,8,9,4,5,6]
ziptest1=zip(a,b)
ziptest2=zip(b,a)
ziptest3=zip(b,c)
print(list(ziptest1))
print(list(ziptest2))
print(list(ziptest3)) #多余部分舍弃
#输出结果:
[(1, 4), (2, 5), (3, 6)]
[(4, 1), (5, 2), (6, 3)]
[(4, 7), (5, 8), (6, 9)]
for i in ziptest1:
print(i,end=' ')
#输出结果:
(1, 4) (2, 5) (3, 6)
star_zip=zip(*ziptest1)
print(list(star_zip))
for j in star_zip:
print(j)
#输出结果:
[(1, 2, 3), (4, 5, 6)]
zip3=zip(a,b,c)
print(list(zip3))
#输出结果:
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
a={1:11,2:22}
b={3:33,4:44}
c={5:55,6:66}
tp=tuple(c)
print(tp) #返回键
print(list(zip(a,b,c))) #返回键
#输出结果:
(5, 6)
[(1, 3, 5), (2, 4, 6)]
#例题:
##输出1-1000内的回文数:
1、
def is_palindrome(n):
palind=int(str(n)[::-1])
if palind==n:
return palind
print(list(filter(is_palindrome,range(1,1000))))
2、
print(list(filter(lambda x:str(x)==str(x)[::-1],range(1,1000))))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 22, 33, 44, 55, 66, 77, 88, 99, 101, 111, 121, 131, 141, ......, 989, 999]