Python day09

Python day09

今天学习了匿名函数,高阶函数sorted(),reduce(),filter(),map(),带参的装饰器(三层)

列表推导式

   list1 = [x for x in range(10) if x % 2 == 0]
   print(list1)#[0, 2, 4, 6, 8]
list1 = [x if x %2==0 else x+1 for x in range(10)] #如果有if else需要写在for的前面
print(list1)#[0, 2, 2, 4, 4, 6, 6, 8, 8, 10]

匿名函数

lambda(),匿名函数也可以作为函数的参数

r=lambda x :x+1    冒号前面的是参数,冒号后面的是返回值
print(r(2)) #3
r=lambda x :x+1
print(r)#<function <lambda> at 0x000001E4F78ED268>     r就是指lambda函数
********************************
list1=[('a',5),('b',3),('c',11)]
print(sorted(list1,key=lambda x :x[1]))#[('b', 3), ('a', 5), ('c', 11)]  按照第二个值升序排序
********************************
dict1={'a':10,'b':50,'c':30}
print(sorted(dict1.items(),key=lambda x :x[1]))#[('a', 10), ('c', 30), ('b', 50)],对字典进行值的升序排序

高阶函数

sorted()
filter()过滤器
map()映射
reduce()求累加和 , 需要导包from functools import reduce

*********************************************************************************************************
map()
list1=[0,1,5,8]
list2=map(lambda x:x**2,list1)    #list2是一个map的对象地址,需要用list()强转成列表 
print(list(list2))#[0, 1, 25, 64] 将后面的可迭代对象在前面的函数中执行完后映射到一个新的列表中
************
list1=[0,1,5,8]
list2=[1,2,3,4]
list3=map(lambda x,y:x+y,list1,list2)#两个列表相加到一个列表中 
print(list(list3))
*********************************************************************************************************
filter()
list1=[0,1,5,8]
list2=filter(lambda x:x%2==0,list1)  #函数中返回的必须是一个bool类型的值,即返回的是一个判断条件
print(list(list2))#[0, 8]    #list2是一个filter的对象地址,应用list()强转
*******
list1=[0,1,5,8]
list2=filter(None,list1)
print(list(list2))#[1, 5, 8]  若函数为None,则返回为真的结果,即不等于0的值
*********************************************************************************************************
from functools import reduce
list1=[0,1,5,8]
list2=reduce(lambda x,y:x+y,list1)
print(list2)#14   将前两个值的和累加起来作为x,再与后面的值y相加
***************
list2=reduce(lambda x,y:x+y,list1,1)
print(list2)#15 最后一个参数iniital为初始值,如果有值,即把这个值作为第一个x与后面的值相加 	


带参数的装饰器

带参数的装饰器为三层,最外层接受参数,中间一层接受函数,最内层接收函数
如果只有两层会报错

def hanshu(f):
    def wrapper(*args,**kwargs):
        f()
    return wrapper
@hanshu(2)
def function1():
    print('hello')#TypeError: 'int' object is not callable 因为参数传给了hanshu()的f参数,他不是一个函数是一个整形,
    #不能调用
    ************************************************
    def canshu(a):#接收参数
    def hanshu(f):#接收函数
        def wrapper(*args, **kwargs):#接收函数的参数
            print('参数是', a)
            f()

        return wrapper
    print('----->')
    return hanshu


@canshu(2)
def function1():
    print('hello')

function1()#----->
			#参数是 2
			#hello

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值