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

本文为作者原创,转载请注明出处:https://www.cnblogs.com/zhaoqingqing/p/17832398.html



python的可变参数#

方法定义#

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

使用示例#

Copy
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)

输出结果:

Copy
输出结果如下: 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)


装饰器例子#

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

Copy
#定义一个函数,并进行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,写法上和装饰器一样都是在方法名的上行加上,它也可以达到装饰器的一些功能。

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

但是如果要实现装饰器完整的前置检查,在C#中我一般是传入一个(Action callback)来处理。

Copy
void Check(Action callback){ if (not 前置检查) return; callback.Invoke(); }
作者:赵青青   一名在【网易游戏】做游戏开发的程序员,擅长Unity3D,游戏开发,.NET等领域。
本文版权归作者和博客园共有,欢迎转载,转载之后请务必在文章明显位置标出原文链接和作者,谢谢。
如果本文对您有帮助,请点击【推荐】您的赞赏将鼓励我继续创作!想跟我一起进步么?那就【关注】我吧。
posted @   赵青青  阅读(87)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10亿数据,如何做迁移?
· 推荐几款开源且免费的 .NET MAUI 组件库
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 易语言 —— 开山篇
· Trae初体验
CONTENTS
点击右上角即可分享
微信分享提示