首页 > 编程语言 >python中可变参数与装饰器的例子

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

时间:2023-11-14 19:55:31浏览次数:43  
标签:__ 可变 python args kwargs foo 装饰 def

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();
}

标签:__,可变,python,args,kwargs,foo,装饰,def
From: https://www.cnblogs.com/zhaoqingqing/p/17832398.html

相关文章

  • Python将目录分割成数组
    Python将目录分割成数组要将目录路径分割成数组,你可以使用Python的`os`模块中的`os.path.split()`或`os.path.split()`函数,或者使用字符串的`split()`方法。以下是使用这两种方法的示例:使用`os.path.split()`函数:```pythonimportos#目录路径directory_path='......
  • Python的运算符
    1.算数运算  +-*///%"//"除"%"余a=20b=3c=a//bd=a%b#20/3=6.....2print(c)print(d)#运行结果62 让用户输入一个数字.判断是否是35的倍数n=int(input("来个数:"))ifn%35==0:print("是35的倍数")else:pri......
  • python镜像源
    1.1清华大学https://pypi.tuna.tsinghua.edu.cn/simple1.2阿里云https://mirrors.aliyun.com/pypi/simple/1.3网易https://mirrors.163.com/pypi/simple/1.4豆瓣https://pypi.douban.com/simple/1.5百度云https://mirror.baidu.com/pypi/simple/1.6中......
  • Python学习 —— 内置数据类型
    写在前面接上文《Python学习——初步认知》,有需要请自取:Python学习——初步认知在这篇文章中,我们一起深入了解Python中常用的内置数据类型。Python是一种功能强大的编程语言,它提供了多种内置数据类型,用于存储和操作数据。这些数据类型包括数字、字符串、序列和映射等。熟练......
  • Python反转字典的key和value
    1.遍历m={'a':1,'b':2,'c':3}n={}fork,vinm.items():n[v]=kprint(n)2.字典推导式m={'a':1,'b':2,'c':3}n={v:kfork,vinm.items()}print(n)3.使用zip函数m={'a'......
  • python列表中的字符串转成整型的几种方法
    python中在不同类型数据转换方面是有标准库的,使用非常方便。但是在开发中,经常在list中字符转成整形的数据方便遇到问题。这里就记录一下常用的几种方法。方法一:最基本的方法:通过轮训整个list来实现转换,具体代码如下:test_list=['1','3','2','6','8']print("Originallistis:"+......
  • python列表中的字符串转成整型的几种方法
    python中在不同类型数据转换方面是有标准库的,使用非常方便。但是在开发中,经常在list中字符转成整形的数据方便遇到问题。这里就记录一下常用的几种方法。方法一:最基本的方法:通过轮训整个list来实现转换,具体代码如下:test_list=['1','3','2','6','8']print("Originallistis:......
  • Python中的赋值表达式
    赋值表达式(assignmentexpression)是Python3.8新引入的语法,它会用到海象操作符(walrusoperator)。这种写法可以解决某些持续已久的代码重复问题。a=b是一条普通的赋值语句,读作aequalsb,而a:=b则是赋值表达式,读作awalrusb。这个符号为什么叫walrus呢?因为把:=顺时针旋转90º......
  • 【Python&图像超分】Real-ESRGAN图像超分模型(超分辨率重建)详细安装和使用教程
    ​1前言        图像超分是一种图像处理技术,旨在提高图像的分辨率,使其具有更高的清晰度和细节。这一技术通常用于图像重建、图像恢复、图像增强等领域,可以帮助我们更好地理解和利用图像信息。图像超分技术可以通过多种方法实现,包括插值算法、深度学习等。其中,深度学习......
  • 学习随笔(设计模式:装饰模式)
    内容今天学习了新的设计模式,装饰模式。装饰模式:动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更加灵活。收获1.当我们在设计软件时,考虑使用基类和派生类的时候,就可以考虑是否可以使用装饰模式,因为装饰模式比生成子类更加灵活2.当我们对一个已有的类添......