翼度科技»论坛 编程开发 python 查看内容

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

5

主题

5

帖子

15

积分

新手上路

Rank: 1

积分
15
python的可变参数

方法定义
  1. #*args是可以传list类型的可变参数,**kwargs是可以传dict的可变参数
  2. def wrapper(*args, **kwargs):
复制代码
使用示例
  1. def foo(*args, **kwargs):
  2.     print 'args = ', args
  3.     print 'kwargs = ', kwargs
  4.     print '---------------------------------------'
  5. if __name__ == '__main__':
  6.     foo(1,2,3,4)
  7.     foo(a=1,b=2,c=3)
  8.     foo(1,2,3,4, a=1,b=2,c=3)
  9.     foo('a', 1, None, a=1, b='2', c=3)
复制代码
输出结果:
  1. 输出结果如下:
  2. args =  (1, 2, 3, 4)
  3. kwargs =  {}
  4. ---------------------------------------
  5. args =  ()
  6. kwargs =  {'a': 1, 'c': 3, 'b': 2}
  7. ---------------------------------------
  8. args =  (1, 2, 3, 4)
  9. kwargs =  {'a': 1, 'c': 3, 'b': 2}
  10. ---------------------------------------
  11. args =  ('a', 1, None)
  12. kwargs =  {'a': 1, 'c': 3, 'b': '2'}
复制代码
例子来源《Python tips: 什么是*args和**kwargs? - MK2 - 博客园 (cnblogs.com)

装饰器例子

搭配装饰器使用,用来判断是否为空
  1. #定义一个函数,并进行wrapper一层,用来当作装饰器
  2. def leftTopUICheck(func):
  3.         def wrapper(*args, **kwargs):
  4.                 if hasattr(xxglobal.rds, 'MainPartLeftTopUI'):
  5.                         return func(*args, **kwargs)
  6.                 else:
  7.                         return
  8.         return wrapper
  9. @leftTopUICheck
  10. def setLeftTopPictureFrameRes(filename):
  11.         xxglobal.rds.MainPartLeftTopUI.setPictureFrameRes(filename)
复制代码
定义

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

装饰器用途

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

装饰器与C#

在C#中有Attribute,写法上和装饰器一样都是在方法名的上行加上,它也可以达到装饰器的一些功能。
  1. //MenuItem 定义:
  2. public MenuItem(string itemName, bool isValidateFunction)
  3.    
  4. //用法
  5. [MenuItem("Assets/开启XXX", false)]
  6. public static void openXXFunc()
  7. {
  8. }
复制代码
但是如果要实现装饰器完整的前置检查,在C#中我一般是传入一个(Action callback)来处理。
  1. void Check(Action callback){
  2.     if (not 前置检查) return;
  3.     callback.Invoke();
  4. }
复制代码
来源:https://www.cnblogs.com/zhaoqingqing/p/17832398.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具