十. Python基础(10)--装饰器

1 ● 装饰器

A decorator is a function that take a function as an argument and return a function.

We can use a decorator to extend the functionality of an existing function without changing its source.

Decorators are syntactic sugar.

装饰器是一个函数, 它接受一个函数作为实参并且返回一个函数.

我们可以用装饰器来扩充一个已经存在的函数的功能, 但又不修改其源码.

装饰器是一种语法糖(syntactic sugar).

※ The "@" symbol indicates to the parser that we're using a decorator while the decorator function name references a function by that name.


在计算机科学中,语法糖(syntactic sugar)是指编程语言中
可以更容易地
表达
一个操作
的语法


装饰器扩展至类:

A decorator in Python is any callable Python object that is used to modify a function or a class. A reference to a function "func" or a class "C" is passed to a decorator and the decorator returns a modified function or class. The modified functions or classes usually contain calls to the original function "func" or class "C".

 

2 ● 装饰器的模板

def wrapper(func): # wrapper是装饰器的名字

    def inner(*args, **kwargs):

        print("被装饰的函数执行之前你要做的事.")

        ret = func(*args, **kwargs) # 被装饰的函数执行, 返回值为None也写出来

        print("被装饰的函数执行之后你要做的事.")

        return ret # ret有可能是None, 并且没有变量接收

    return inner

 

@wrapper # 相当于welcome = wrapper(welcome)

def welcome(name): # welcome是被装饰的函数

    print('Welcome:%s!'%name)

 

@wrapper

def home(): # home是被装饰的函数

    print('欢迎来到home页!')

 

welcome("Arroz")

print("===============================")

home()

参见: http://blog.csdn.net/qq_34409701/article/details/51589736

def wrapper(func):

    def inner(*args, **kwargs):

        print("AAAAAAA")

        print(func(*args, **kwargs))

    return inner

 

@wrapper

def f1():

    return "f1"

 

f1()

 

'''

AAAAAAA

f1

'''

 

知识补充:

1 ● eval()函数

if name in locals():

    return eval(name)(*args)

※ name是函数名, 后面的形参需要和一般函数名一样带括号(*args)

 

2 ● 斐波那契数列停止的情况:

# ① 长度小于多少

'''

l=[1,1]

while len(l) < 20:

    l.append(l[-1]+l[-2])

    print(l)

'''

# ② 最后一个数小于多少

'''

l = [1,1]

while l[-1] < 40000:

    l.append(l[-1] + l[-2])

    print(l)

'''

 

十. Python基础(10)--装饰器的更多相关文章

  1. python基础—函数装饰器

    python基础-函数装饰器 1.什么是装饰器 装饰器本质上是一个python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能. 装饰器的返回值是也是一个函数对象. 装饰器经常用于有切 ...

  2. Day11 Python基础之装饰器(高级函数)(九)

    在python中,装饰器.生成器和迭代器是特别重要的高级函数   https://www.cnblogs.com/yuanchenqi/articles/5830025.html 装饰器 1.如果说装 ...

  3. [python基础]关于装饰器

    在面试的时候,被问到装饰器,在用的最多的时候就@classmethod ,@staticmethod,开口胡乱回答想这和C#的static public 关键字是不是一样的,等面试回来一看,哇,原来是 ...

  4. 1.16 Python基础知识 - 装饰器初识

    Python中的装饰器就是函数,作用就是包装其他函数,为他们起到修饰作用.在不修改源代码的情况下,为这些函数额外添加一些功能,像日志记录,性能测试等.一个函数可以使用多个装饰器,产生的结果与装饰器的位 ...

  5. 学习PYTHON之路, DAY 5 - PYTHON 基础 5 (装饰器,字符格式化,递归,迭代器,生成器)

    ---恢复内容开始--- 一 装饰器 1 单层装饰器 def outer(func): def inner(): print('long') func() print('after') return ...

  6. 【Python基础】装饰器的解释和用法

    装饰器的用法比较简单,但是理解装饰器的原理还是比较复杂的,考虑到接下来的爬虫框架中很多用到装饰器的地方,我们先来讲解一下. 函数 我们定义了一个函数,没有什么具体操作,只是返回一个固定值 请注意一下缩 ...

  7. python基础之 装饰器,内置函数

    1.闭包回顾 在学习装饰器之前,可以先复习一下什么是闭包? 在嵌套函数内部的函数可以使用外部变量(非全局变量)叫做闭包! def wrapper(): money =10 def inner(num) ...

  8. python基础-----函数/装饰器

    函数 在Python中,定义一个函数要使用def语句,依次写出函数名.括号.括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回. 函数的优点之一是,可以将代码块与主程 ...

  9. python基础之装饰器(实例)

    1.必备 #### 第一波 #### def foo(): print 'foo' foo #表示是函数 foo() #表示执行foo函数 #### 第二波 #### def foo(): print ...

随机推荐

  1. sql 聚合函数和group by 联合使用

    原文 很多时候单独使用聚合函数的时候觉得很容易,求个平均值,求和,求个数等,但是和分组一起用就有点混淆了,好记性不如烂笔头,所以就记下来以后看看. 常用聚合函数罗列 1 AVG() - 返回平均值 C ...

  2. CF-822C Hacker, pack your bags! 思维题

    题目大意是给若干线段及其费用,每个线段权值即为其长度.要求找出两个不重合线段,令其权值和等于x且费用最少. 解法: 先分析一下题目,要处理不重合的问题,有重合的线段不能组合,其次这是一个选二问题,当枚 ...

  3. Weighted Channel Dropout for Regularization of Deep Convolutional Neural Network

    这是AAAI2019的一篇论文,主要是为了解决小数据集的过拟合问题,使用了针对于卷积层的Dropout的方法. 论文的要点记录于下: 1.在训练过程中对于卷积层的channels进行droipout, ...

  4. linux中用composer安装yii框架

    我的服务器是安装的是lanmp环境 如果环境版本比较低的话,建议升级一下版本 升级版本命令:./lanmp.sh cus 全都选择最高的.完成之后: curl -sS https://getcompo ...

  5. redis 基本指令

    redis-cli开启redis客户端 1. set key value // 设置key-value 2. get key // 获取key 3. delete key [] // 删除key 4. ...

  6. K8S各知识点整理

    一.k8s组成部分 Master 1.   kube-apiserver 封装了核心对象的增删改查操作,以REST API接口方式提供给外部和内部组件调用.它维护的REST对象将持久化到Etcd中 2 ...

  7. 【Oracle】【1】查询N分钟之前的数据

    --查询距离现在N分钟前的数据 1440:表示一天有1440分钟 SYSDATE - 10 :表示10天前 参考博客: 1,oracle 查询十分钟之前的数据 - 胡金水的博客 - CSDN博客 ht ...

  8. PAT Rational Sum

    Rational Sum (20) 时间限制 1000 ms 内存限制 65536 KB 代码长度限制 100 KB 判断程序 Standard (来自 小小) 题目描述 Given N ration ...

  9. python中eval()和json.dumps的使用

    在python中通过requests.get(url)获取json数据,此时可能需要eval进行解析. # -*- coding: utf-8 -*- import requests r = requ ...

  10. html中传递信息

    <div class="card" data-username="ArgenBarbie"> </div> JS: var userna ...