iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python @ 用法
  • 895
分享到

python @ 用法

python 2023-01-31 06:01:28 895人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

最难的事情不是写代码而是看代码-.- 简单的说,@装饰器就是用来提供调用的, def funA(arg): print 'A' a=arg() @funA def funB(): print 'B'


最难的事情不是写代码而是看代码-.-


简单的说,@装饰器就是用来提供调用的,

def funA(arg):
    print 'A'
    a=arg()

@funA
def funB():
    print 'B'

输出结果为
这里写图片描述

此处的@相当于funA(funB())。


装饰器背后的主要动机源自python面向对象编程,装饰器是在函数调用之上的修饰,这些修饰仅是当声明一个函数或者方法的时候,才会应用的额外调用。
装饰器的语法以@开头,接着是装饰器韩式的名字和可选的参数。紧跟着装饰器声明的是被修饰的函数,和修饰函数的可选参数。

class MyClass(obj):
    @staticmethod
    def staticFoo():
    ...

利用staticmethod内建函数来将这个函数“转化”为静态方法,利用装饰器会很简洁。

@g
@f
def foo():
...

..与foo=g(f(foo))相同
有参数和无参数的装饰器

@deco
def foo():
pass

…非常直接
foo=deco(foo)

有参数的装饰器

@decomaker(deco_args)
deffoo():
    pass

需要自己返回以函数作为参数的装饰器,换句话说,decomaker()用deco_args做了些事情并返回函数对象,而该函数正是以foo作为其参数的装饰器,相当于:
foo=decomaker(deco_args)(foo)
多个装饰器的例子,其中一个装饰器带有一个参数:

@deco1(deco_args)
@deco2
def func():pass

等价于:
func=deco1(deco_args) (deco2(func))


什么是装饰器

现在我们知道装饰器实际上就是一个函数,我们也知道他们接受函数对象,但他们是怎么处理那些函数?当你包装一个函数的时候,你最终会调用它,最棒的是我们能够在包装的环境下在合适的时机调用它,我们在执行函数之前,可以运行那些预备代码,如 post-morren分析,也可以在执行代码之后做个清理工作,所以当你看见一个装饰器函数的时候,很可能在里面找到这样一些代码,它定义了某个函数并在定义内的某处嵌入了对目标函数的调用或者至少一些引用。从本质上看,这些特征引入了java开发者称之为AOP的概念,可以考虑在装饰器中置入通用功能的代码来降低程序复杂度。

可以用装饰器来:

  • 引入日志
  • 增加计时逻辑来检测性能
  • 给函数加入事物能力。

--结束END--

本文标题: python @ 用法

本文链接: https://www.lsjlt.com/news/189776.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python @ 用法
    最难的事情不是写代码而是看代码-.- 简单的说,@装饰器就是用来提供调用的, def funA(arg): print 'A' a=arg() @funA def funB(): print 'B'...
    99+
    2023-01-31
    python
  • python---list()用法
    list列表以后再继续完善help(list) 使用help查看listHelp on class list in module __builtin__:class list(object) |  list() -> new empt...
    99+
    2023-01-31
    python list
  • Python yield用法
    在函数中使用yield时,函数并不会返回数据,而是返回一个生成器对象(generator object),只有当循环遍历时,才会实际运行取得实际的值。示例一是我看到一本书上的例子,示例二是我将它简化后的例子,功能上没有任何区别。#示例一: ...
    99+
    2023-01-31
    Python yield
  • Python enumerate 用法
    enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。 语法: enumerate(sequence, [start=0]) 参数说明: se...
    99+
    2023-01-30
    Python enumerate
  • python sys.argv[]用法
        sys.argv变量是一个字符串的列表。特别地,sys.argv包含了命令行参数 的列表,即使用命令行传递给你的程序的参数。    这里,当我们执行python using_sys.py we are arguments的时候,我们...
    99+
    2023-01-31
    python sys argv
  • python--socket用法
    服务器端:import SocketServerimport osclass MyTCPHandler(SocketServer.BaseRequestHandler):    def handle(self):        print ...
    99+
    2023-01-31
    python socket
  • 梁 python用法
    python知识点python是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言python的特点: 1.易于学习,2.易于阅读,3.易于维护,4.一个广泛的标准库,5.互动模式,6.可移植,7.可扩展,8.数据库,9。GUI编...
    99+
    2023-01-31
    python
  • python class用法
    创建一个名为 Restaurant 的类,其方法 __init__() 设置两个属性: name 和 type  1、创建一个名为 describe_restaurant() 的方法,前者打印前述两项信息 2、创建一个名为 open_re...
    99+
    2023-01-30
    python class
  • Python Dict用法
    #字典的添加、删除、修改操作dict = {"a" : "apple", "b" : "banana", "g" : "grape", "o" : "orange"}dict["w"] = "watermelon"del(dict["a"]...
    99+
    2023-01-31
    Python Dict
  • python:__cmp__用法
    #-*- coding: utf-8 -*- class C:     def __init__(self, i):         self.i = i     def __cmp__(self, other):         retu...
    99+
    2023-01-31
    python
  • python @property用法作用
    @property广泛应用在类的定义中,可以让调用者写出简短的代码,同时保证对参数进行必要的检查,这样,程序运行时就减少了出错的可能性。详见链接:廖雪峰python3使用@property练习请利用@property给一个Screen对象加...
    99+
    2023-01-31
    作用 python property
  • [转]python-Jinja2用法
    一:渲染模版 要渲染一个模板,通过render_template方法即可。 @app.route('/about/')def about():return render_template('about.html',**{'user':'us...
    99+
    2023-01-31
    python
  • python pd.excelwriter的用法
    在Python的Pandas库中,pd.ExcelWriter是一个用于创建Excel文件并将数据写入其中的类。下面是使用pd.ExcelWriter的一般步骤: 导入必要的库: import pandas as pd 创建一个pd....
    99+
    2023-09-01
    python pandas 开发语言
  • Python and or用法
    在Python中 None,False,空字符串"",0,空列表[],空字典{},空元组()都相当于False,在布尔上下文中为假;其它任何东西都为真 or:是从左到右计算表达式,返回第一个为真的值,如果两个都是假,返回的是右边的值。an...
    99+
    2023-01-31
    Python
  • python import的用法
    1、dir(keywork)报错>>> dir(keyword) Traceback (most recent call last):   File "<stdin>", line 1, in <modu...
    99+
    2023-01-31
    python import
  • Python中flatten用法
    Python中flatten用法,有需要的朋友可以参考下。 一、用在数组  >>> a = [[1,3],[2,4],[3,5]] >>> a = array(a) >>> a.f...
    99+
    2023-01-31
    Python flatten
  • python中super用法
    目录 前言一. super是什么二.super().__ init__ ()三. 继承顺序 前言   在python继承的时候经常会遇到super这个东西,搞得不是太明白,写下这篇博文记录...
    99+
    2023-09-05
    python 开发语言
  • Python中raise用法
    Python中raise语句用于手动触发异常,通过raise语句可以在代码中显式地引发异常,从而使程序进入异常处理流程,其基本语法为“raise exception”其中exception可以是一个已经存在的异常类,也可以是一个自...
    99+
    2024-01-26
    python raise用法
  • python中import用法
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-05-15
  • python中lambda用法
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-05-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作