【Python基础】内置函数

Python内置函数目录:

  • map()
  • filter()
  • reduce()
  • lambda()   

map()

num_l=[1,2,10,5,3,7]

res=map(lambda x:x+1,num_l)    ##res 得到的是 <map object at 0x000002A365360240>   map()处理得到的是一个迭代器,只能使用一次

# # for i in res:
# #     print(i)
print(list(res))

总结:

"""
总结:
map([函数],[参数])
# 函数可以是def 自定义的,也可以是lambda,参数要是可迭代对象(字符串、列表、元组、字典)
"""
# lambda x:x+1
def add_one(x):
    return x+1
#
# #lambda x:x-1
def reduce_one(x):
    return x-1
#
# #lambda x:x**2
def pf(x):
    return x**2

"""终极版本,map()函数内部机制"""
num_l=[1,2,10,5,3,7]

def map_test(func,array):     #func=lambda x:x+1    arrary=[1,2,10,5,3,7]
    ret=[]
    for i in array:
        res=func(i) #add_one(i)
        ret.append(res)
    return ret

print(map_test(lambda x:x+1,num_l))
res=map(lambda x:x+1,num_l)
print('内置函数map,处理结果',res)   #<map object at 0x000002A365360240> map()处理得到的是一个迭代器,只能使用一次
# # for i in res:
# #     print(i)
print(list(res))
print('传的是有名的函数',list(map(reduce_one,num_l)))
#
#
msg='linhaifeng'
print(list(map(lambda x:x.upper(),msg)))
map()内部原理

filter()

"""
总结:
filter(function or None, iterable) --> filter object 
#function 可以是def 自定义的函数名,也可以是lambda,符合过滤条件返回True 否则返回False ,
iterable 是可迭代对象,过滤掉可迭代对象每一项经过函数处理后的对象 返回一个列表地址,要用 list() 取出地址中的内容
"""
#终极版本
movie_people=['alex_sb','wupeiqi_sb','linhaifeng','yuanhao_sb']
def sb_show(n):
    return n.endswith('sb')
#--->lambda n:n.endswith('sb')

def filter_test(func,array):
    ret=[]
    for p in array:
        if not func(p):
               ret.append(p)
    return ret

res=filter_test(lambda n:n.endswith('sb'),movie_people)
print(res)

#---->filter()函数
movie_people=['alex_sb','wupeiqi_sb','linhaifeng','yuanhao_sb']
res = filter(lambda n:not n.endswith('sb'),movie_people)   #res 得到一个迭代器对象
print(res)      #<filter object at 0x00000164321BCDA0>
print(list(res))    ## 使用 list(res) 调用列表地址里的东西

# print(list(filter(lambda n:not n.endswith('sb'),movie_people)))
# #直接打印出来 没赋值给变量保存下来,即在内存中开辟一块地方存下来了 但没有记录门牌号 打印之后就自动清除了
movie_people=['sb_alex','sb_wupeiqi','linhaifeng','sb_yuanhao']

def filter_test(array):
    ret=[]
    for p in array:
        if not p.startswith('sb'):
               ret.append(p)
    return ret

res=filter_test(movie_people)
print(res)


movie_people=['alex_sb','wupeiqi_sb','linhaifeng','yuanhao_sb']
def sb_show(n):
    return n.endswith('sb')

def filter_test(func,array):
    ret=[]
    for p in array:
        if not func(p):
               ret.append(p)
    return ret

res=filter_test(sb_show,movie_people)
print(res)
filter()由来

reduce()

"""
总结:
reduce(function, iterable, initial=None) function 定义函数,iterable -- 可迭代对象 ,initial 初始值 默认为None
## reduce_test(func,array,init=None)  
"""
""" 终极版本 -指定一个初始值"""
num_l=[1,2,3,100]
def reduce_test(func,array,init=None):
    if init is None:
        res=array.pop(0)
    else:
        res=init
    for num in array:
        res=func(res,num)
    return res

print(reduce_test(lambda x,y:x*y,num_l,2))


"""最后 引出 reduce函数"""
from functools import reduce

def add_num(x,y):
    return x+y

num_l=[1,2,3,100]
print(reduce(lambda x,y:x+y,num_l,3))
print(reduce(add_num,num_l))
# from functools import reduce

""" 版本1:"""
# num_l=[1,2,3,100]

# res=0
# for num in num_l:
#     res+=num
#
# print(res)

# num_l=[1,2,3,100]
# def reduce_test(array):
#     res=0
#     for num in array:
#         res+=num
#     return res
#
# print(reduce_test(num_l))

"""版本2"""
num_l=[1,2,3,100]

def multi(x,y):
    return x*y
# lambda x,y:x*y

def reduce_test(func,array):
    res=array.pop(0)
    for num in array:
        res=func(res,num)
    return res

print(reduce_test(multi,num_l))
print(reduce_test(lambda x,y:x*y,num_l))

""" 终极版本 -指定一个初始值"""
num_l=[1,2,3,100]
def reduce_test(func,array,init=None):
    if init is None:
        res=array.pop(0)
    else:
        res=init
    for num in array:
        res=func(res,num)
    return res

print(reduce_test(lambda x,y:x*y,num_l,2))


"""最后 引出 reduce函数"""
from functools import reduce

def add_num(x,y):
    return x+y

num_l=[1,2,3,100]
print(reduce(lambda x,y:x+y,num_l,3))
print(reduce(add_num,num_l))

"""
总结:
reduce(function, iterable, initial=None) function 定义函数,iterable -- 可迭代对象 ,initial 初始值 默认为None
## reduce_test(func,array,init=None)  
"""
reduce()推导过程

lambda()

"""语法:
lambda [形参]:[返回值]
注意:# lambda 匿名函数如果不赋值给变量,Python运行之后内存立即清空,若赋值给变量则与普通函数相同
"""

# yy = lambda x:x**2
# print(yy(2))

# ff1 = lambda s:str(s)+"_sb"
# print(ff1("alex"))

"""一般情况下 lambda 直接使用,不赋值给变量。与其他函数混合使用"""

猜你喜欢

转载自www.cnblogs.com/XJT2018/p/10860339.html