zoukankan      html  css  js  c++  java
  • 神奇语言 python 装饰器 内置函数

    装饰器(Decorators)是 Python 的一个重要部分。简单地说:他们是修改其他函数的功能的函数。他们有助于让我们的代码更简短,也更Pythonic(Python范儿)。大多数初学者不知道在哪儿使用它们,所以我将要分享下,哪些区域里装饰器可以让你的代码更简洁。 首先,让我们讨论下如何写你自己的装饰器。

    这可能是最难掌握的概念之一。我们会每次只讨论一个步骤,这样你能完全理解它。

    import time
        #定义一个函数
        x=func#把foo的内存地址富裕给了x  x就是foo 的内存地址
        #把func 形参赋值给x变量
    
        def wapeer():
            #定义个函数
            s_time=time.time()
            x()#就是执行foo()
            ss_time=time.time()
            print(ss_time-s_time)
        return wapeer #定义函数的时候,西边的代码睡返回的内存地址
            #把函数名 当做值返回
    @inner #foo= inner(foo)#被装饰的函数正上方加一个装饰器的名字
    def foo():
        print("is ")
    foo()

    @ 语法糖

    如果你接触 Python 有一段时间了的话,想必你对 @ 符号一定不陌生了,没错 @ 符号就是装饰器的语法糖,它放在函数开始定义的地方,这样就可以省略最后一步再次赋值的操作。
    def use_logging(func):
    
        def wrapper():
            logging.warn("%s is running" % func.__name__)
            return func()
        return wrapper
    
    @use_logging
    def foo():
        print("i am foo")
    
    foo()

    如上所示,有了 @ ,我们就可以省去foo = use_logging(foo)这一句了,直接调用 foo() 即可得到想要的结果。你们看到了没有,foo() 函数不需要做任何修改,只需在定义的地方加上装饰器,调用的时候还是和以前一样,如果我们有其他的类似函数,我们可以继续调用装饰器来修饰函数,而不用重复修改函数或者增加新的封装。这样,我们就提高了程序的可重复利用性,并增加了程序的可读性。

    装饰器在 Python 使用如此方便都要归因于 Python 的函数能像普通的对象一样能作为参数传递给其他函数,可以被赋值给其他变量,可以作为返回值,可以被定义在另外一个函数内。

    内置函数:

    
    
    print(abs(-10))#绝对值
    print(all([1,2,3,]))#检验迭代对象 都为真的时候才为真
    print(any[0,0,0,1,]) #有一个为真的时候就为真
    print(ascii("aelx"))#在ascii码中原生显示
    b=bytearray("meet",encoding="utf-8")
    print(b[0])
    sorted 排序
    例题:
    dic= {1:2,3:4}
    ls=[1,2,3,4,5]
    def func(ls):
        lst=[]
        for i in  ls:
            lst.append(i**i)
        return lst
    print(sorted(func(ls),reverse=True))
    print(sorted(dic.values(),reverse=True))
    print(sorted({1:2,3:4},reverse=True))
    filter 过滤:
    例题:
    dic = [{"name":"alex","age":17},{"name":"aqwe","age":19}]
    print(list(filter(lambda x:x["age"]>17,dic)))
     map  () 映射函数  可以快速将多个元素相同的可迭代对象进行上下累加=返回的是一个数据
    lst=[11,200,300,400,505]
    def func(x):
        return x**2
    print(list(map(func,lst)))
    reduce# 快速求一个可迭代对象的累计算
    round # 四舍五入


  • 相关阅读:
    去掉字幕文件里的时间轴信息
    Git常用命令笔记
    VMware machine里的文件
    C# Inventor二次开发—004—创建二维草图(2)
    C# Inventor二次开发—003—创建二维草图
    C# Inventor二次开发—002—启动Inventor及零部件创建和打开
    C# Inventor二次开发—001—准备工作
    UTF-8 BOM编码格式文件对SSI的影响
    滚动到顶部
    如何理解 “私有成员只有在声明它们的类和结构体中才是可访问的” ?
  • 原文地址:https://www.cnblogs.com/zhangguangpei/p/10272470.html
Copyright © 2011-2022 走看看