python高阶函数-11

递归

在一个函数内调用本身

def new(num):
    if num==1 or num==2:
        return 1
    else:
        return new(num-1)+new(num-2)

print(new(10))

匿名函数

格式

#lambda para1,para2,....,paraN:expression using paras

f = lambda a,b,c:a+b+c
print(f(1,2,3))

高阶函数

把一个函数名,以实参的形式,传递给这个函数的形参,这个函数就称为高阶函数。

def add(a,b,c):
    return c(a)+c(b)
a_va=add(-9,1,abs)
print(a_va)

举例:

li1=['zhjiang','college','university']
def start_s(s,c):
    return s.startswith(c)
def end_s(s,c):
    return s.endswith(c)
def one(lis,st,a):
    li=[]
    for i in lis:
        if not a(i,st):
            li.append(i)
    return li
print(one(li1,'c',start_s))
print(one(li1,'ty',end_s))

filter函数

功能:

  • 过滤序列中不符合函数条件的元素。当序列中需要保留的元素可以用某些函数时。就应该想到filter函数。

  • 调用格式

    filter(function,sequence)

    • function —>可以是自定义的函数,也可以匿名函数
    • sequence —>列表,元组,字符串
li1=['zhjiang','college','university']
f=filter(lambda sr:not sr.endswith('ty'),li1)
print(list(f))

map函数 映射

功能:

  • 求一个序列或者多个序列进行函数映射后的值。(用list()强转)

格式:

  • ‘map(function,iterable1,iterable2)’
    • function 参数可不止一个
    • iterable1,iterable2就是传入function的参数
li=[1,2,3,4,5]
res=map(lambda x:x+1,li)
print(list(res))
#[2, 3, 4, 5, 6]

x=[1,2,3,4]
y=[5,4,3,2]
def f(x,y):
    return x+y
r=map(f,x,y)
print(list(r))
#[6, 6, 6, 6]

reduce函数

  • 功能
    • 对序列压缩运算,得到一个value
    • python2里,reduce为内置函数,而现在,py3中,他被移到fuctools模块中
    • from funtools import reduce
  • 格式
reduce(function,iterable,[inital])
	function必须要传两个参数
    iterable--->列表元组
from functools import  reduce
li=[1,2,3,4,5,6]
t=reduce(lambda x,y:x+y,li)
print(t)
#1--->f(1,2)--->[3,3,4,5,6]
#2--->f(3,3)--->[6,4,5,6]
#3--->f(6,4)--->[10,5,6]
#....
#21

li=[1,2,3,4,5,6]
t=reduce(lambda x,y:10*x+y,li,100)
print(t)
#100123456

apply

功能

  • pandas中,应用对象是pandas中的DataFrame或者Series
  • 直接对DataFrame或者Series应用函数
  • 对pandas中gropby之后的聚合对象应用apply
import  numpy as np
import pandas as pd

a=np.random.randint(low=0,high=4,size=(2,4))
print(a)

data=pd.DataFrame(a)
print(data)

tim=data.apply(lambda x:x*10)
print(tim)
'''
[[3 3 1 1]
 [1 1 1 0]]

   0  1  2  3
0  3  3  1  1
1  1  1  1  0

    0   1   2   3
0  30  30  10  10
1  10  10  10   0

zip

功能

  • 将可迭代对象作为参数,将对象中对应的元素打包成一个个元组,返回由这些元组构成的对象
  • 长度不一样的时候,以长度短的为准

注:

  • 利用\*号操作符,与zip相反,进行解压

格式

zip(iterable1,it2,it3…)

  • iterable—>两个或者多个可迭代序列(字符串,列表,元组,字典)
    • py2
    • py3
a=[1,2,3]
b=[4,5,6,7]
zipt=zip(b,a)
print(list(zipt))
#[(4, 1), (5, 2), (6, 3)]

start_zipt=zip(*zipt)
print(list(start_zipt))
#[(4, 5, 6), (1, 2, 3)]

a={'name':'sheep'}
b=[4,5,6,7]
c={'id':666}
zip_1=zip(a,b,c)
print(list(zip_1))
#[('name', 4, 'id')]

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值