Python开发【第十四篇】装饰器

装饰器

什么是装饰器?

? 装饰器是一个函数,主要作用是用来给包装另一个函数或者类

包装的目的是不改变原函数名(或类名)的情况下改变或添加被包装对象的功能

函数装饰器

是指装饰器是一个函数,传入的是一个函数,返回的也是一个函数

语法:

def 装饰器函数名(参数):
    语句块
    return 函数对象
@张诗琪函数名
def 函数名(形参列表):
    语句块

示例:

# 此示例示意装饰器函数的定义方式及装饰器来装饰另一个函数
# 的语法

def mydeco(fn):
    def fx():
        print("++++++++++++++++")
        print('----------------')
    return fx

def myfunc():
    '''此函数将作为被装饰函数'''
    print("myfunc被调用")

# 原理是让myfunc重新绑定mydeco返回回来的函数
myfunc = mydeco(myfunc)

myfunc()
myfunc()
myfunc()
# 此示例示意装饰器函数的定义方式及装饰器来装饰另一个函数
# 的语法

def mydeco(fn):
    def fx():
        print("++++++++++++++++")
        print('----------------')
    return fx

@mydeco
def myfunc():
    '''此函数将作为被装饰函数'''
    print("myfunc被调用")

# myfunc上的@mydeco 等同于在
# 此处加上 myfunc=mydeco(myfunc)

myfunc()
myfunc()
myfunc()
# 此示例示意装饰器函数的定义方式及装饰器来装饰另一个函数
# 的语法

def mydeco(fn):
    def fx():
        print("++++++++++++++++")
        fn()  # 调用以前的被装饰函数
        print('----------------')
    return fx

@mydeco
def myfunc():
    '''此函数将作为被装饰函数'''
    print("myfunc被调用")

myfunc()
myfunc()
myfunc()
# 此示例示意装饰器的用途和作用
# 模拟银行项目
#    业务: 存钱和取钱
# ----- 小李以下小写写的装饰器-----
def privileged_check(fn):
    def fx(n, yuan):
        print("正在检查权限..... OK!")
        fn(n, yuan)  # 调用被装饰函数
    return fx

def send_message(fn):
    def fy(n, x):
        fn(n, x)
        print("正在发送给...", n)
    return fy

# ------
@privileged_check
def savemoney(name, x):
    print(name, '存钱', x, "元")

@privileged_check
@send_message
def withdraw(name, x):
    print(name, "取钱", x, "元")

# ----------
savemoney("小王", 200)
savemoney("小赵", 400)

withdraw("小钱", 500)

函数的文档字符串

函数内第一次末赋值给任何变量的字符串是此函数的文档字
符串

语法:

 def 函数名(参数列表):
    '函数的文档字符串'
    语句块

示例:

def hello(name):
    '''这是一个向别人问好的函数
        name 绑定人的姓名
        '''
    pass

说明:
文档字符串通常用来说明本函数的功能的使用方法
函数的文档字符串绑定在函数对象的__doc__ 属性上

函数的 doc 属性
__doc__属性用于绑定函数的文档字符串

函数定义语句的完整的语法:
[@装饰器名1]
[@装饰器名2]
...
def 函数名([位置形参], [*元组形参], [命名关键字形参]
,[**字典形参]):
‘文档字符串‘
语句块

原文地址:https://www.cnblogs.com/pyliuwei/p/11846950.html

时间: 2024-08-20 19:13:58

Python开发【第十四篇】装饰器的相关文章

十四、装饰器

装饰器是函数,只不过该函数可以具有特殊的含义,装饰器用来装饰函数或类,使用装饰器可以在函数执行前和执行后添加相应操作. def f1(arg): arg() def func(): print ('123') f1(func) ======>f1接收的参数是一个函数 注:func返回的是内存地址,func()才是执行func这个函数 ===================================================== ============================

python开发【函数】:装饰器的诞生

计算函数的运行时间 import time def bar(): print("in the bar") time.sleep(2) def foo(func): start_time=time.time() func() end_time=time.time() print("in the foo") print("该函数运行的时间是%s"%(end_time-start_time)) foo(bar) 虽然已经实现功能,但是改变了函数bar的

Android UI开发第二十四篇——Action Bar

Action bar是一个标识应用程序和用户位置的窗口功能,并且给用户提供操作和导航模式.在大多数的情况下,当你需要突出展现用户行为或全局导航的activity中使用action bar,因为action bar能够使应用程序给用户提供一致的界面,并且系统能够很好根据不同的屏幕配置来适应操作栏的外观.你能够用ActionBar的对象的API来控制操作栏的行为和可见性,这些API被添加在Android3.0(API 级别 11)中. Action bar的主要目的是: 1.  提供一个用于识别应用

Python开发【第四篇】:Python基础之函数

三元运算 三元运算(三目运算),是对简单的条件语句的缩写. # 书写格式 result = 值1 if 条件 else 值2 # 如果条件成立,那么将 "值1" 赋值给result变量,否则,将"值2"赋值给result变量 基本数据类型补充 set set集合,是一个无序且不重复的元素集合 class set(object): """ set() -> new empty set object set(iterable) -&g

python【第十四篇】HTML基础

什么是HTML? HTML(HyperText MarkUp Language)超文本标记语言,通过使用标记来描述文档结构和表现形式的一种语言,由浏览器进行解析,然后把结果显示在网页上,通俗的讲它就是服务器发送的字符串到浏览器,通过浏览器能解析的规则用HTML来描述, 它是网页构成的基础,你见到的所有网页都离不开HTML,所以学习HTML是基础中的基础 HTML语言是一种标记语言,不需要编译,直接由浏览器执行 HTML文件是一个文本文件,包含了一些HTML元素, HTML文件是一个文本文件,包含

Python开发【第四篇】函数

函数的作用 函数可以让编程逻辑结构化以及模块化 无论是C.C++,Java还是Python,函数是必不可少的知识点,也是很重要的知识点,函数是完成一个功能的代码块,使用函数可以使逻辑结构变得更加清晰以及程序模块化设计 先来看看Python函数相关知识 1 def test(x): 2 """我是用来描述这个函数的""" 3 x += 1 4 return x 5 6 # def : 定义函数的关键字 7 # test: 函数名 8 # (): 里

Python【第十四篇续】前端之CSS

css概念 上一篇介绍HTML时,已经说了,如果把HTML比作一个裸男的话,那么CSS就是为这个裸男穿上衣服,搭配一些换看的发型. 官方的术语是,css是英文Cascading Style Sheets的缩写,称为层叠样式表,用于对页面进行美化,CSS的可以使页面更加的美观.基本上所有的html页面都或多或少的使用css. css选择器 存在的方式有三种: 元素内联(直接在标签中使用) 语法为:style='xxx:xxxxx' 页面嵌入  语法如:< style type="text/c

PowerBI开发 第十四篇:DAX 表达式(时间+过滤+关系)

DAX表达式中包含时间关系(Time Intelligence)相关的函数,用于对日期维度进行累加.同比和环比等分析.PowerBI能够创建关系,通过过滤器来对影响计算的上下文. 一,时间关系 DAX表达式有两种方式计算累加和,TOTALxTD()是DATESxTD()的语法糖,使得PowerBI对累加和的计算更加简单. 所有的时间关系函数都包含一个特殊的dates参数,该参数有三种形式: 对date/time列的引用,格式是DateTable[Date_Column] 表格表达式,返回日期/时

Python开发【第四篇】:Python基础之文件处理

一.文件处理读操作 # f=open('陈粒',encoding='utf-8') # data=f.read() # print(data) # f.close() # f=open('xxx') # data=f.read() # print(data) #r w a f=open('陈粒','r',encoding='utf-8') # data=f.read() # # print(data) # print(f.readable()) # print('第1行',f.readline(

Python(四)装饰器、迭代器&生成器、re正则表达式、字符串格式化

本章内容: 装饰器 迭代器 & 生成器 re 正则表达式 字符串格式化 装饰器 装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理等.装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用.概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能. 先定义一个基本的装饰器: ########## 基本装饰器 ########## def orter(func):    #定义装饰器     de