zoukankan      html  css  js  c++  java
  • 装饰器 内置函数

    装饰器:

       本质就是闭包

    开放封闭原则
    扩展开发,修改源代码封闭,不能修改调用方式
    在不该源代码的基础上添加功能
    @装饰器的名字   在被装饰的函数正上方  独占一行
    @语法糖  被装饰的函数名 = 装饰器的名字(被装饰的函数名)

    基本语法格式:
    1 def inner(func):
    2     def warper(*args,**kwargs):
    3         ret=func(*args,**kwargs)
    4         return ret
    5     return warper
    6 @inner
    用的时候@一下最外层函数。
    1 def inner(func):
    2     def warper(*args,**kwargs):
    3         ret=func(*args,**kwargs)
    4         return ret
    5     return warper
    6 @inner
    7 def num_sum(*args,**kwargs):
    8     print(*args)
    9 num_sum(5,4,5,6,8,2)

        执行结果:5 4 5 6 8 2

    eg:
     1 import time
     2 def inner(func):    # 闭包, func现在就是foo的内存地址
     3     x=func           # 把foo的内存地址赋值给了x
     4     def wapeer():
     5         s_time=time.time()
     6         x()          # 执行foo()
     7         ss_time=time.time()
     8         print(ss_time-s_time)
     9     return wapeer           # 返回函数,不能加() 函数名当作值返回
    10 @inner                       # 被装饰的函数正上方加一个 @+装饰器的名字
    11 def foo():
    12     print('is foo')
    13 foo()
    同一个函数被多个装饰器装饰
    @wrapper1
    @wrapper2
    @wrapper3
    def func():
    pass
    1 2 3 func 3 2 1

    匿名函数:

    lambda  匿名函数:
    lambda 参数:返回值
    匿名函数没有名字,怎么查看 函数.__name__
    匿名函数的返回值只能是一个,不能是多个
    匿名函数可不可以写到一行
    print((lambda x:x)()) 调用的时候要传参
    1 lst=[1,2,3,4]
    2 print(list(map(lambda x:x**2+1,lst)))
    
    

    内置函数:

    排序的函数:
    sorted('可迭代对象',key='函数名(函数名里写排序规则),reverse=True的时候是降序')
    1 ls=[1,2,3,4]
    2 def func(ls):
    3     lst=[]
    4     for i in ls:
    5         lst.append(i**i)
    6     return lst
    7 print(sorted(func(ls),reverse=True))


    过滤函数:
    filter() 内置函数(筛选函数|过滤函数)
    filter('写好过滤规则的函数','可迭代对象')   函数可以是匿名,也可以是定义好的
    1 def foo(x):
    2     if x['age']>15:
    3         return x
    4 dic=[{'name':'乔狗','age':19},{'name':'乔二狗','age':16}]
    5 print(list(filter(foo,dic)))
    6 print(list(filter(lambda x:x['age']>17,dic)))


    映射函数:
    map() 映射函数
    可以快速将多个元素相同的可迭代对象,进行上下累加  返回的是一个数据
    语法: map(function, iterable, ...)
    1 lst=[1,2,3,4]
    2 def func(x):
    3     return x**2
    4 print(list(map(func,lst)))


    外号:拉链函数
    zip() #拉链
    返回的是对个,如果有三个可迭代对象,就按照最短的进行输出


    累积算函数:
    reduce() 累 计算
    快速求一个可迭代对象的累计算
    reduce 函数  函数会对参数序列中元素进行累积  累计算
    语法: reduce(function, iterable[, initializer])
    function -- 函数,有两个参数
    iterable -- 可迭代对象
    initializer -- 可选,初始参数
    1 from functools import reduce
    2 lst=[2,3,4]
    3 print(reduce(lambda x,y:x**y,lst))


    枚举:
    enumerate() #枚举  将可迭代对象放到里边,默认数字是0开始,自己指定开始的数字

    四舍五入:
    round(4.44)
  • 相关阅读:
    今天又能去健身了
    今天招受情感打击
    js实现菜单命令
    爱好者
    杂七杂八
    wu
    后缀数组学习笔记——罗穗骞倍增算法代码
    POJ 3261 Milk Patterns
    URAL 1158 Censored!
    POJ 1743 Musical Theme
  • 原文地址:https://www.cnblogs.com/53Dawns/p/10277240.html
Copyright © 2011-2022 走看看