python learning4 高阶应用等


 
   

#高阶函数

map/reduce

In [2]:
#我们先看map。map()函数接收两个参数,一个是函数,
#一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。
def f(x):
    return x*x
r=map(f,[1,2,3,4,5])
r
Out[2]:
<map at 0x1e74d3cf860>
In [3]:
list(r)
Out[3]:
[1, 4, 9, 16, 25]
In [4]:
#再看reduce的用法。reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,
#这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:
from functools import reduce
def add(x,y):
    return x+y
reduce(add,[1,3,5,7,9])
Out[4]:
25
In [5]:
def fn(x,y):
    return x*10+y
reduce(fn,[1,3,5,7,9])
Out[5]:
13579

filter

Python内建的filter()函数用于过滤序列。

和map()类似,filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,#然后根据返回值是True还是False决定保留还是丢弃该元素。

In [6]:
def is_odd(n):
    return n%2==1
list(filter(is_odd,[1,2,4,6,8,9]))
Out[6]:
[1, 9]
In [10]:
#把一个序列中的空字符串删掉
def not_empty(s):
    return s and s.strip()#结果必须是判断是true还是false
list(filter(not_empty,['A','','B',None,'C',' ']))
Out[10]:
['A', 'B', 'C']

sorted

排序

In [11]:
sorted([36,-5,-12,-9])
Out[11]:
[-12, -9, -5, 36]
In [12]:
sorted([36,-5,-12,15],key=abs)
Out[12]:
[-5, -12, 15, 36]
In [14]:
#返回函数,# 闭包
#返回闭包时牢记一点:返回函数不要引用任何循环变量,或者后续会发生变化的变量。

def lazy_sum(*args):
    def sum():
        ax=0
        for n in args:
            ax=ax+n
        return ax
    return sum
In [15]:
f=lazy_sum(1,3,5,7,9)
f
Out[15]:
<function __main__.lazy_sum.<locals>.sum>
In [16]:
f()
Out[16]:
25

匿名函数

In [18]:
list(map(lambda x:x*x,[1,2,3,4,5,6]))
Out[18]:
[1, 4, 9, 16, 25, 36]
In [19]:
#lambda表示匿名函数,冒号前面的x表示函数参数。
#匿名函数不用写return.返回值就是表达式的结果
#匿名函数可以把函数值赋给一个变量,再利用变量来调用该函数
f=lambda x:x*x
f
Out[19]:
<function __main__.<lambda>>
In [20]:
f(5)
Out[20]:
25
In [22]:
def build(x,y):
    return lambda:x*x+y*y
build(5,7)
Out[22]:
<function __main__.build.<locals>.<lambda>>
In [26]:
f=build(5,7)
f
Out[26]:
<function __main__.build.<locals>.<lambda>>
In [27]:
f()
Out[27]:
74
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值