Python第七天笔记——函数(补充)

这篇笔记深入探讨了Python编程中的高级主题,包括递归函数的使用,通过lambda关键字创建匿名函数,以及如何运用高阶函数如filter、map和reduce进行数据处理。此外,还提到了apply在pandas中的应用和zip函数的组合功能。
摘要由CSDN通过智能技术生成

递归函数

在一个函数体的内部,调用函数本身,就被称为递归函数。

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))
2def 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---->列表/元组
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内的回文数:
1def is_palindrome(n):
    palind=int(str(n)[::-1])
    if palind==n:
        return palind
print(list(filter(is_palindrome,range(1,1000))))

2print(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]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值