装饰器既然可以增加原来函数的功能,那能不能改变传给原函数的参数呢?

我们实验一下,先上代码:

 #!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Date : 2020-03-03 20:26:44
# @Author : Flyinghappy (671474@qq.com)
# @Link : https://www.cnblogs.com/flyinghappy/
# @Version : $Id$
import time
'''
装饰器的实验:
看看装饰器能否接收内部函数的参数,然后改变参数值,然后看会发生什么
'''
def decorator_funtion(func):
def inner(*args,**kwargs):
print('原函数执行前!')
args=['改变打印内容:呵呵呵']
kwargs={'name':'flyinghappy','age':40}
result=func(*args,**kwargs)
print('原函数执行后!')
return result
return inner
@decorator_funtion
def function(*args,**kwargs):
'''最原始的函数'''
print('本函数的任务是打印:',args,kwargs)
time.sleep(2) if __name__ == '__main__':
function('我是原始函数!')

看看测试结果:

从测试结果看,我们写在装饰器函数里面修改传给原函数func的参数args,kwargs都被我们修改了。

也就是我们传给funtion的参数是‘我是原始函数’被修改了。

这样的话,我们是不是可以在装饰器函数里面调用另外一个函数呢,再来看看下面代码的实验结果

 def decorator_funtion(func):
def inner(*args,**kwargs):
print('原函数执行前!')
result=func(*args,**kwargs)
print('原函数执行后!')
another_function(result)
return result
return inner
@decorator_funtion
def function(*args,**kwargs):
'''最原始的函数'''
print('本函数的任务是打印:',args,kwargs)
time.sleep(2)
return 'i am function result'
def another_function(*args,**kwargs):
print('我是另外一个函数,任务是打印',args,kwargs)
return 'i am another_function result' if __name__ == '__main__':
args=['我是原始函数',]
kwargs={'name':'flyinghappy','age':40,}
function(*args,**kwargs)

测试结果:

看到了,装饰器函数果然调用执行了another_funtion函数,并且是接收的function函数的返回值'i am function result'

那如果在 another_function上加上这装饰器的话,会发生什么。。。。。呵呵呵!自己去试试吧!

Python学习笔记--装饰器的实验的更多相关文章

  1. python学习笔记--装饰器

    1.首先是一个很无聊的函数,实现了两个数的加法运算: def f(x,y): print x+y f(2,3) 输出结果也ok 5 2.可是这时候我们感觉输出结果太单一了点,想让代码的输出多一点看起来 ...

  2. Python学习笔记: 装饰器Decorator

    介绍 装饰器是对功能函数的加强. 在原来的功能函数之外,另外定义一个装饰器函数,对原来的功能函数进行封装(wrapper)并在wrapper的过程中增加一些辅助功能. 应用场景 如下场景: 业务函数f ...

  3. python 学习分享-装饰器篇

    本篇内容为偷窃的~哈哈,借用一下,我就是放在自己这里好看. 引用地址:http://www.cnblogs.com/rhcad/archive/2011/12/21/2295507.html 第一步: ...

  4. python学习之装饰器-

    python的装饰器 2018-02-26 在了解python的装饰器之前我们得了解python的高阶函数 python的高阶函数我们能返回一个函数名并且能将函数名作为参数传递 def outer() ...

  5. python学习day14 装饰器(二)&模块

    装饰器(二)&模块 #普通装饰器基本格式 def wrapper(func): def inner(): pass return func() return inner def func(): ...

  6. Python学习 :装饰器

    装饰器(函数) 装饰器作为一个函数,可以为其他函数在不修改原函数代码的前提下添加新的功能 装饰器的返回值是一个函数对象.它经常用于有切面需求的场景,比如:插入日志.性能测试.事务处理.缓存.权限校验等 ...

  7. python学习之-- 装饰器

    高阶函数+嵌套函数 == 装饰器 什么是装饰器: 其实也是一个函数. 功能:为其他的函数添加附加功能 原则:不能修改被装饰的函数的源代码和调用方式 学习装饰器前首先要明白以下3条事项: 1:函数 即 ...

  8. 6月4日 python学习总结 装饰器复习

    1.  装饰器的原理以及为什么要使用装饰器 在代码运行期间动态增加功能的方式,称之为"装饰器"(Decorator). 在不影响原代码结构的情况下为其添加功能 2.  装饰器的基本 ...

  9. 学习笔记——装饰器模式Decorator

    装饰器模式,最典型的例子. 工厂新开了流水线,生产了手机外壳,蓝天白云花色.刚准备出厂,客户说还要印奶牛在上面,WTF…… 时间上来不及,成本也不允许销毁了重来,怎么办?弄来一机器A,专门在蓝天白云的 ...

随机推荐

  1. JacksonConfig

    package org.linlinjava.litemall.core.config; import com.fasterxml.jackson.annotation.JsonInclude; im ...

  2. PRaCtice[1]

    目录 ID-3学习 代码实现 1. 样例数据集 2.信息熵的计算 ID-3学习 代码实现 该项目采用了业界领先的 TDD(TreeNewBee-Driven Development,吹牛逼导向开发模式 ...

  3. 正则表达式awk学习(三)

    awk:格式化文本输出 gawk - pattern scanning and processing language awk:gawk的符号链接 基本用法:gawk [options] 'progr ...

  4. 金山wps的面试经历

    故事从两个月前开始说起吧. 前段时间突然想跳槽,原因也没啥,就是想折腾下,看看外面的世界?有一部分原因是想离家近一些稳定下来,博主上份工作坐标厦门,风景好的简直随便拍照就是大片. 不废话了,机缘巧合, ...

  5. EX_KMP算法总结

    EX_KMP算法总结 By viv 2014-8-9 0:30 吐槽1:字符串神马的我最讨厌了,但不学不行啊.TAT 吐槽2:写这东西差点错过CF(codeforces). 今天学了ex_kmp,故总 ...

  6. 64)PHP,变量的生命周期

    在20day  05 假如我目前在的地址是上面的那个index.php?p=back&c=Admin&a=check  这个请求里面申请的所有事 或者是你申请的所有变量或者是全局变量都 ...

  7. python-django项目-每次重启电脑需要启动的虚拟机服务_20191124

    python-django项目-每次重启电脑需要启动的虚拟机服务 看来第一步是确定虚拟机的ip问题,必须要是192.168.100.128,否则很多的配置都不能用了, 所以要配置虚拟机的ip, 第一步 ...

  8. G 小石的图形

    题目链接:https://ac.nowcoder.com/acm/contest/949/G 思路: 思路是很简单,一个小学数学题.但是n次WA后才过,重点就在pi的表示上,pi最精确的表示方式是ac ...

  9. [LC] 80. Remove Duplicates from Sorted Array II

    Given a sorted array nums, remove the duplicates in-place such that duplicates appeared at most twic ...

  10. java内部类基础知识

    一.java内部类具体分四大类 1.成员内部类 2.静态内部类 3.局部内部类 4.匿名内部类 1.成员内部类             :作为类的成员,存在于类中  //成员内部类可以调用外部类的所有 ...