Wrapper
开放封闭原则:
- 开放对扩展
- 封闭修改源代码
- 改变了人家调用方式
装饰器结构
"""
默认结构为三层!!!每层返回下一层内存地址就可以进行执行函数,
传参:语法糖中的传参可以在地二层中进行判断传入。
第一层:传送语法糖中的参数
第二层:传送外部函数的名称
第三层:传送外部函数的参数
被装饰器装饰的函数名即使没有被调用(因为有@xxx,会触发运行装饰器),
(装饰器工厂函数)定义装饰器的代码已经运行了(最内部的那个函数并没有运行),
(把被装饰的原函数引用赋值给了装饰器内部的那个函数名),当下边通过该函数名调用时,
会调用到装饰器内部的那个函数()
装饰器:在不修改函数源代码的基础上,添加函数功能
"""
def Wrapper(*args,**kwargs): #获取`@Wrapper(args)`传入参数
def Outter(func_name): #获取装饰器所装饰函数的名称
def Inner(*args,**Kwargs): #获取`def func(*args,**kwargs):`的传入参数
ret = func_name(*args,**kwargs) #执行装饰器所装饰的函数
return ret #将返回值传给被装饰的函数
return Inner #返回`Inner`的内存地址,方便调用
return Outter #返回`Outter`的内存地址,方便调用
@Wrapper(args) #`func = Outter(func) = Wrapper(args)`装饰器进行传参
def func(*args,**kwargs): #定义被装饰函数
return func.__name__ #定义函数返回值
返回装饰器的被装饰函数名
from functools import wraps
def warpper(f):
@wraps(f) #显示被装饰的函数
def inner(*args,**kwargs):
# print(f.__name__)
print(f)
return inner #
def aa():
print(1)
aa = warpper(aa)
print(aa.__name__) # 显示被装饰的函数名
账户认证(简易版)
def Wrapper(auth_type): #默认使用Wrapper名称,获取语法糖的参数
def Outer(func_name): #获取传入参数的名称
def file(*args,**kwargs): #获取传入参数的参数
print('这是在file函数中')
ret = func_name(*args,**kwargs)
print('file函数装饰完毕')
return ret
def net(*args,**kwargs):
print('这个是在网络函数中')
ret = func_name(*args,**kwargs)
print('网络函数执行结束')
return ret
if auth_type == 'localfile': #对传入参数进行判断返回不同结果
return file
elif auth_type == 'net':
return net
else:
print('该函数没有被装饰')
return Outer
@Wrapper(auth_type='net') #语法糖进行传参
def Login(username):
print(f'Welcome {username} Login.')
Login('longlong') #大神登陆啦!
Wrapper的更多相关文章
- gradlew wrapper使用下载到本地的gradle.zip文件装配--转
原文地址:http://www.myexception.cn/mobile/1860089.html gradlew wrapper使用下载到本地的gradle.zip文件安装.使用gradlew来b ...
- Could not find or load main class org.gradle.wrapper.GradleWrapperMain解决办法
解决办法: gradlew is the gradle wrapper executable - batch script on windows and shell script elsewhere. ...
- 使用Windows Service Wrapper快速创建一个Windows Service
前言 今天介绍一个小工具的使用.我们都知道Windows Service是一种特殊的应用程序,它的好处是可以一直在后台运行,相对来说,比较适合一些需要一直运行同时不需要过多用户干预的应用程序,这一类我 ...
- Java Service Wrapper简介与使用
在实际开发过程中很多模块需要独立运行,他们并不会以web形式发布,传统的做法是将其压缩为jar包独立运行,这种形式简单易行也比较利于维护,但是一旦服务器重启或出现异常时,程序往往无法自行修复或重启.解 ...
- [转] 基于PHP Stream Wrapper开发有趣应用场景
PHP Stream Wrapper 原文:http://blog.sina.com.cn/s/blog_502c8cc40100k40e.html ,主要是基于SAE环境讲述相应的应用场景,本文经过 ...
- wrapper for lua
考虑使用已经有的dll,要写wrapper,使得在lua中能调用dll里的函数,嗯,参考<Programming in lua>,然后仿写luars232. 一.函数定义 先分析一个函数的 ...
- 使用 Java Service Wrapper 启动java后台进程服务
Java Service Wrapper (http://wrapper.tanukisoftware.com/doc/english/product-overview.html)可以很方便得在各个平 ...
- file_get_contents()获取https出现这个错误Unable to find the wrapper “https” – did
file_get_contents()获取https出现这个错误Unable to find the wrapper “https” – did 解决办法 ,如果你是用的服务器,可以参考这个办法,修改 ...
- Simplified CommonJS wrapper 与 AMD 标准定义模块差异
标准的 AMD 模块定义 一个标准的 AMD 模块看起来是这样子: define(['foo', 'foo/bar'], function (foo, bar) { return { doSometh ...
- java service wrapper 级别为info导致内存剧增直至溢出
上周,公司某一环境发生java service wrapper内存剧增导致最后被自动killed的情况,经过分析,确定导致java service wrapper(后续简称wrapper)守护进程内存 ...
随机推荐
- linux安装curl扩展
1.获得安装包,从网上直接下载或者其他途径,这里直接wget wget http://curl.haxx.se/download/curl-7.20.0.tar.gz 2.解压到当前目录(或者 htt ...
- IntelliJ Idea设置单击打开文件或者双击打开文件、自动定位文件所在的位置
- GitHub学习三-远程版本库更新与提交
1.远程版本库更新 一般来说,将本地与远程相关联之后,首先将数据从远程更新下来再上传比较好. 输入 git pull origin master 如果新建版本库的话勾选了初始化包含readme.md, ...
- SQL - 常用的特殊查询
sql 查询某字段不重复的全部记录: select * from table where fid in(Select min(fid) FROM table group by name) :
- express中app.get和app.use的解析
app.get(path,callback)中的callback只能是函数 app.use(path,callback)中的callback既可以是router对象又可以是函数 当其是router对象 ...
- 第2天【OS Linux发行版介绍、Linux系统基础使用入门、Linux命令帮助、Linux基础命令】
Logout 退出系统 Gedit 文本编辑器工具 Uname –r 查看内核版本信息,uname –a 比较详细 Cat /proc/cpuinfo 查看CPU Cat /p ...
- Python日志、序列化、正则模块
使用Python内置模块的目的:拿来别人已经写好的模块功能,直接import内置模块使用,简化程序,避免重复造轮子的过程,提示自己的开发效率: 一. loging日志模块: 1. loging模块可以 ...
- Docker 容器和镜像使用
Docker 容器使用: docker run -d -P training/webapp python app.py -d:让容器在后台运行. -P:将容器内部使用的网络端口映射到我们使用的主机上. ...
- 微信小程序 无限加载 上拉加载更多
加载更多,其实就是再次向接口发送请求,把返回的数据,追加到渲染页面的数组里的过程,具体实现实例如下: demo.js // pages/project/project.js const app = g ...
- 整合elk(1)(十二)
elk 简介 Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等. Logstash是 ...