|
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)来处理。- void Check(Action callback){
- if (not 前置检查) return;
- callback.Invoke();
- }
复制代码 来源:https://www.cnblogs.com/zhaoqingqing/p/17832398.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作! |
|