1 2 3 4 1

函数【七】高阶函数/内置函数

python函数式编程

 

高阶函数:就是把函数当成参数传递的一种函数

1、函数名可以进行赋值;

2、函数名可以作为函数参数,还可以作为函数的返回值;

a、函数是第一类对象

b、函数可以被赋值

c、可以被当做参数

d、可以当做返回值

e、可以作为容器类型的元素

def f(n):
    return n*n
def foo(a,b,func):
    ret = func(a) + func(b)
    return ret
foo(1,2,f)
print(foo(1,2,f))
#传入参数a=1,b=2,func=f;
#ret = f(1) + f(2);
#f(1)=1,f(2)=4此时调用f函数;
#ret=5;

map函数:

描述

map() 会根据提供的函数对指定序列做映射。

第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。

语法

map() 函数语法:

1
map(function, iterable, ...)

参数

  • function -- 函数
  • iterable -- 一个或多个序列

返回值

Python 2.x 返回列表。

Python 3.x 返回迭代器。

实例

1
2
3
4
5
6
7
8
9
10
11
>>>def square(x) :            # 计算平方数
...     return ** 2
...
>>> map(square, [1,2,3,4,5])   # 计算列表各个元素的平方
[1491625]
>>> map(lambda x: x ** 2, [12345])  # 使用 lambda 匿名函数
[1491625]
  
# 提供了两个列表,对相同位置的列表数据进行相加
>>> map(lambda x, y: x + y, [13579], [246810])
[37111519]
msg = [1,12,33,42,15,16]
#需求自增1
def add_one(x):
    return x+1
#需求自减1
def reduce(x):
    return x-1
#需求平方
def pf(x):
    return x**2
#实现逻辑
def fangfa(func,red):
    ret = []
    for i in red:
        res = func(i)
        ret.append(res)
    return ret
print(fangfa(add_one,msg))
print(fangfa(reduce,msg))
print(fangfa(pf,msg))

print(fangfa(lambda x:x+1,msg)) #用lambda函数替换add_one函数
print(fangfa(lambda x:x-1,msg)) #用lambda函数替换requce函数
print(fangfa(lambda x:x**2,msg))#用lambda函数替换pf函数

print(list(map(lambda x:x+1,msg))) #map处理的结果是一个可迭代对象,python3中需用list转换;
print(list(map(lambda x:x-1,msg))) #map的第一个参数是逻辑,第二个参数是可迭代对象;
print(list(map(lambda x:x**2,msg)))

 filter函数:

描述

filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。

该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。

语法

以下是 filter() 方法的语法:

1
filter(function, iterable)

参数

  • function -- 判断函数。
  • iterable -- 可迭代对象。

返回值

返回列表

实例

以下展示了使用 filter 函数的实例:

1
2
3
4
5
6
7
def is_odd(n):
    return % 2 == 1
  
newlist = filter(is_odd, [12345678910])
print(newlist)
 
[13579]
lise_l = ["sb_asd","sb_we","sb_ig","rng"]
#需求去掉开头是sb的
def sh_show(n):
    return n.startswith("sb")
#实现逻辑
def filter_test(func,array):
    red = []
    for i in array:
        if not sh_show(i):
            red.append(i)
    return red
print(filter_test(sh_show,lise_l))

print(filter_test(lambda n:n.startswith("sb"),lise_l))#lambda

print(list(filter(lambda n:not n.startswith("sb"),lise_l)))#filter

 reduce函数

描述

reduce() 函数会对参数序列中元素进行累积。

函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。

在 Python3 中,reduce() 函数已经被从全局名字空间里移除了,它现在被放置在 fucntools 模块里,如果想要使用它,则需要通过引入 functools 模块来调用 reduce() 函数:

1
from functools import reduce
1
2
3
4
5
6
7
from functools import reduce
 
def add(x,y):
    return + y
 
print (reduce(add, range(1101)))
  

语法

reduce() 函数语法:

1
2
reduce(function, iterable[, initializer])
  

参数

  • function -- 函数,有两个参数
  • iterable -- 可迭代对象
  • initializer -- 可选,初始参数

返回值

返回函数计算结果。

实例

以下实例展示了 reduce() 的使用方法:

1
2
3
4
5
6
7
>>>def add(x, y) :            # 两数相加
...     return + y
...
>>> reduce(add, [1,2,3,4,5])   # 计算列表和:1+2+3+4+5
15
>>> reduce(lambda x, y: x+y, [1,2,3,4,5])  # 使用 lambda 匿名函数
15

 python的内置函数

  内置函数  
abs() divmod() input() open() staticmethod()
all() enumerate() int() ord() str()
any() eval() isinstance() pow() sum()
basestring() execfile() issubclass() print() super()
bin() file() iter() property() tuple()
bool() filter() len() range() type()
bytearray() float() list() raw_input() unichr()
callable() format() locals() reduce() unicode()
chr() frozenset() long() reload() vars()
classmethod() getattr() map() repr() xrange()
cmp() globals() max() reverse() zip()
compile() hasattr() memoryview() round() __import__()
complex() hash() min() set()  
delattr() help() next() setattr()  
dict() hex() object() slice()  
dir() id() oct() sorted() exec 内置表达式
 

 

 内置函数用法

 

max和min高级用法:

用法

1、max进行比较时传入的数据类型必须是可迭代对象(基本原理就是一个for循环依次取出可迭代对象中的每一个元素进行比较);

2、比较时从第一个元素进行比较(按ascii码进行排序),如果第一个元素分出大小则后面就不进行比较了;

1
2
3
ll = ["10a","A20","A10"]
print(max(ll))
A20

 

1
2
3
msg = {"age1":18,"age2":20}
print(max(zip(msg.values(),msg.keys())))
(20'age2')

 

1
2
3
4
5
6
7
people = [
    {"name":"alex","age":70},
    {"name":"wpq","age":100},
    {"name":"lhf","age":30},
    {"name":"lw","age":50}
]
print(max(people,key=lambda dic:dic["age"])) #传入key参数

 

posted @ 2019-09-07 14:32  初级炼药师  阅读(103)  评论(0编辑  收藏  举报