python中可变参数与装饰器的例子

这篇具有很好参考价值的文章主要介绍了python中可变参数与装饰器的例子。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

python的可变参数

方法定义

#*args是可以传list类型的可变参数,**kwargs是可以传dict的可变参数
def wrapper(*args, **kwargs):

使用示例

def foo(*args, **kwargs):
    print 'args = ', args
    print 'kwargs = ', kwargs
    print '---------------------------------------'

if __name__ == '__main__':
    foo(1,2,3,4)
    foo(a=1,b=2,c=3)
    foo(1,2,3,4, a=1,b=2,c=3)
    foo('a', 1, None, a=1, b='2', c=3)

输出结果:

输出结果如下:
args =  (1, 2, 3, 4)
kwargs =  {}
---------------------------------------
args =  ()
kwargs =  {'a': 1, 'c': 3, 'b': 2}
---------------------------------------
args =  (1, 2, 3, 4)
kwargs =  {'a': 1, 'c': 3, 'b': 2}
---------------------------------------
args =  ('a', 1, None)
kwargs =  {'a': 1, 'c': 3, 'b': '2'}

例子来源《Python tips: 什么是*args和**kwargs? - MK2 - 博客园 (cnblogs.com)》


装饰器例子

搭配装饰器使用,用来判断是否为空

#定义一个函数,并进行wrapper一层,用来当作装饰器
def leftTopUICheck(func):
	def wrapper(*args, **kwargs):
		if hasattr(xxglobal.rds, 'MainPartLeftTopUI'):
			return func(*args, **kwargs)
		else:
			return
	return wrapper

@leftTopUICheck
def setLeftTopPictureFrameRes(filename):
	xxglobal.rds.MainPartLeftTopUI.setPictureFrameRes(filename)

定义

@符号是一个语法糖,当执行函数时,会把当前函数传入到@指向的函数中执行。


装饰器用途

结合项目代码来看,目前我们大多是用在前置检查,且会把装饰器函数定义在sys.path内的文件中,避免每次使用都要import。如果装饰器的函数实现在同一个文件中则不需要import。


装饰器与C#

在C#中有Attribute,写法上和装饰器一样都是在方法名的上行加上,它也可以达到装饰器的一些功能。

//MenuItem 定义:
public MenuItem(string itemName, bool isValidateFunction)
    
//用法
[MenuItem("Assets/开启XXX", false)]
public static void openXXFunc()
{

}

但是如果要实现装饰器完整的前置检查,在C#中我一般是传入一个(Action callback)来处理。文章来源地址https://www.toymoban.com/news/detail-746201.html

void Check(Action callback){
    if (not 前置检查) return;
    callback.Invoke();
}

到了这里,关于python中可变参数与装饰器的例子的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • CBV添加装饰器的三种方式

    2024年02月08日
    浏览(37)
  • python函数装饰器参数统计调用时间和次数

    python在函数装饰器外层定义一个函数生成封闭作用域来保存装饰器入参,供装饰器使用。 描述 通过类的可调用实例装饰器来统计函数每次调用时间和总调用时间,以及调用次数。 (1) time.perf_counter()获取当前时间,单位秒; (2) 调用函数func前和后的时间差,为func的执行

    2024年02月01日
    浏览(85)
  • Python 知识体系补全(闭包、装饰器、关键字参数**kwargs,位置参数*args)

    闭包:     什么是闭包,一句话,在函数中再嵌套一个函数,并且引用外部函数的变量,这就是一个闭包了     一般外部函数的返回值为内部函数      def outer(x):          def inner(y):              return x + y         return outer     # 外部函数的返回值,是内部函数     

    2024年02月06日
    浏览(41)
  • CocosCreator3.8研究笔记(六)CocosCreator 脚本装饰器的理解

    一、什么是装饰器? 装饰器是TypeScript脚本语言中的概念。 TypeScript的解释:在一些场景下,我们需要额外的特性来支持标注或修改类及其成员。装饰器(Decorators)为我们在类的声明及成员上通过元编程语法添加标注提供了一种方式。 在TypeScript中,装饰器分为:类装饰器、属

    2024年02月09日
    浏览(42)
  • Python数据分析实战-*和**实现可变多参数的传入或变量的拆解(附源码和实现效果)

    实现功能 *和**实现多参数的传入或变量的拆解 实现代码 实现效果   本人读研期间发表5篇SCI数据挖掘相关论文,现在某研究院从事数据挖掘相关科研工作,对数据挖掘有一定认知和理解,会结合自身科研实践经历不定期分享关于python机器学习、深度学习、数据挖掘基础知识

    2024年02月12日
    浏览(51)
  • CSS:选择器的各种类型和用法(含有例子和部分动态效果)

    元素选择器 E{} 如: 特殊的 * 所有元素选择器 如: 一般加不明显的样式 如: 属性选址器 E[attr]{} 根据属性有没有进行区分 可以用属性值作为限制,也可用属性值的位置作为限制如用有无id区分: 或者根据id属性值区分: ^以xx开头的: $ 以xx结尾的: 只要包含xx: 当然也可以

    2024年02月12日
    浏览(53)
  • Python笔记2(函数参数、面向对象、装饰器、高级函数、捕获异常、dir)

    Python笔记1(赋值、浅拷贝和深拷贝、字符串日期转换、argparse、sys、overwrite、eval、json.dumps/json.loads、os.system(cmd)、zfill、endswith、open) 参数定义 在python中定义函数的时候,函数名后面的括号里就是用来定义参数的,如果有多个参数的话,那么参数之间直接用逗号, 隔开。 定义

    2024年02月08日
    浏览(52)
  • Next.js使用装饰器decorator 解决[作为表达式调用时,无法解析类修饰器的签名。]

    Next.js 会自动检测 jsconfig.json 或 tsconfig.json 中的 experimentalDecorators 。 tsconfig.json 然后重启服务 否则装饰器无法识别 不声明的话vscode 执行 ts检测 也会报错 作为表达式调用时,无法解析类修饰器的签名。 支持的四种装饰器 类装饰器 也可以这样写 下方写法可以将属性写在当前

    2024年02月14日
    浏览(48)
  • 可变参数(c/c++)

             目录 一、C语言版本  二、C++的实现方法 2.1数据包 2.2sizeof...运算符 2.3可变参数模板的使用 2.4emplace_back()         有时候我们在编写函数时,可能不知道要传入的参数个数,类型 。比如我们要实现一个叠加函数,再比如c语言中的printf,c++中的emplace_last()。 那么

    2024年02月20日
    浏览(31)
  • 【预处理】——获取可变参数宏的参数数量

    用于获取可变参数宏实际传递了多少个参数。 COUNT_ARGS(1, 2, 3) ,填入了 3 个参数,返回值就是 3 COUNT_ARGS(\\\"Hello\\\", \\\'a\\\', 3.14, 4) ,填入了 4 个 参数,返回值就是 4 COUNT_ARGS(1) ,我们填入了 1 个参数,返回值就是 1 __COUNT_ARGS 宏定义了一个带有多个参数的宏,其中 _0 到 _20 是占位符参

    2024年02月15日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包