当前位置: 首页 > 科技观察

Python编程:关于函数对装饰器的再认知

时间:2023-03-16 20:02:32 科技观察

装饰器(Decorators)是Python中非常好用的工具。装饰器是一个函数,它将另一个函数作为参数并扩展其功能而不显式修改它。它允许我们修改函数或类的行为,而无需触及其源代码。换句话说,装饰器包装一个函数是为了扩展它的行为,而不是永久地修改它。从这里开始,让我们探索装饰器是什么以及它们在Python中的工作方式。1.1关于函数为了理解装饰器是如何工作的,我们需要回顾一下Python中关于函数的一些重要概念。始终意识到在Python中,函数是一等公民,因此应牢记以下概念:ü函数可以赋值给常规变量;ü函数可以作为参数传递给其他函数;ü函数可以返回函数;ü函数体中可以有其他函数(内部函数)。让我们看一下关于这些点的示例函数。1.1.1Example-1:Assignmenttoregularvariables#Assignfunctionstoregularvariables:#定义一个简单函数defsayHi(name:str):return"Hi"+name+"."#Application:functionassignmenttovariablehi=sayHiprint(hi("SoloCui"))#输出结果HiSoloCui。在代码中,我们将函数定义为sayHi。然后将这个函数赋值给一个名为hi的局部变量。这个变量hi也是一个函数——在这种情况下,分配的变量可以被认为是函数的别名。下一步是使用变量hi作为函数调用:hi("SoloCui")。1.1.2Example-2:传递一个函数作为参数代码清单如下:#传递一个函数作为参数defprintHello(name):print("Hello,",name)#AfunctionthattakesafunctionasaparameterdefhiWithFunction(func,xname):func(xname)#CallthefunctionhiWithFunction(printHello,'上官婉儿')withfunctionasparameterFunctionswithfunctionparameters1.1.3Example-3:函数代码清单返回函数如下:#例3:返回函数的函数defreturnXFunction():returnsayHi#例1定义的函数可以自己定义其他函数#callFunctionxHi=returnXFunction()print(xHi("BirdMan"))这里定义了一个简单的返回另一个函数的函数,即returnXFunction(),调用这个函数,将返回值赋给一个变量xHi,然后根据变量名xHi执行返回函数的函数即可.1.1.4Example-4:FunctionBody内置函数就是在函数体内定义一个函数。请看代码:#例子4:函数体中没有taxdefouterXFunction(msg):'''外部函数'''#代码...#定义内部函数definnerXFunc():'''内部函数'''print(msg,'fromthebuilt-infunction.')#在函数体中调用内置函数innerXFunc()#调用外部函数outerXFunction("FireKylin")我在函数内部定义了一个innerXFunc函数outerXFunction,并在外部函数体内调用内嵌函数,这样在调用外部函数时内嵌函数就可以执行了。如代码所示,在调用外部函数时,将字符串“Fireunicorn”传递给参数msg。输出“Fireunicorn来自内置函数。”由内置函数完成。这里需要注意的是,innerXFunc使用的msg变量并没有定义在它自己的函数体中。也就是说,它使用的变量来自于它的父作用域——这就是Python中闭包的概念。关于Python闭包的简要说明:闭包是一个函数对象,它会记住父对象范围内的值,并可用于在函数和一组“私有”变量之间创建关联。这些私有变量能够在对给定函数的多次调用中保持它们的持久性。