在线转格式网站怎么做,wordpress 二级导航制作,wordpress怎么在底部调用友情链接,网站免费优化1 函数装饰器基础
1.1 函数调用
描述
根据之前文章《python函数属性和注解》得知#xff0c;python函数定义时生成函数对象并赋值给了函数名。
调用方式#xff1a;
#xff08;1#xff09;直接调用方式为#xff1a;通过函数名圆括号()调用函数#xff0c;比如f1(…1 函数装饰器基础
1.1 函数调用
描述
根据之前文章《python函数属性和注解》得知python函数定义时生成函数对象并赋值给了函数名。
调用方式
1直接调用方式为通过函数名圆括号()调用函数比如f1()。
2将函数名赋值给一个变量后通过变量名()进行间接调用。
3将函数作为入参传给另一个函数后在另一个函数内部调用。
示例 def echo(msg):print(msg)#直接调用函数 echo(直接调用)
直接调用
#赋值给其他变量,间接调用cechoc(间接调用)
间接调用def indirect(func,arg):func(arg)
#作为入参 indirect(echo,作为函数入参调用)
作为函数入参调用1.2 嵌套函数
描述
函数f1内部定义函数f2这就定义了一个嵌套函数。
通过之前文章《python作用域基础知识》得知函数外是不可直接访问函数内部的变量的(因为函数执行完后函数内部变量就释放消失了)所以如果需要调用内部函数f2则需要将f2返回。
def f1():def f2():passreturn f2示例1
函数外不可访问函数内变量 def f1():X梯阅线条def f2():print(X)f1.f2
Traceback (most recent call last):File pyshell#2, line 1, in modulef1.f2
AttributeError: function object has no attribute f2f1().f2
Traceback (most recent call last):File pyshell#3, line 1, in modulef1().f2
AttributeError: NoneType object has no attribute f2示例2
函数内部调用嵌套的内部函数。 def f1():X梯阅线条def f2():print(X)f2()f1()
梯阅线条示例3
返回内部函数后在外面调用内部函数。 def f1():X梯阅线条def f2():print(X)return f2f3f1()f3()
梯阅线条1.3 函数装饰器基础
用法
# 定义一个嵌套函数(闭包函数)
def my_decorator(func): # 将被装饰的函数作为入参def my_wrapfunc(*args,**kargs):pass # 做一些额外逻辑处理进行装饰func(*args,**kargs) # 调用被装饰的函数pass # 做一些额外逻辑处理进行装饰return my_wrapfunc # 返回内部函数供外面继续调用被装饰的函数
def f1(msg):pass
# 调用
f1my_decorator(f1)
f1(msg)描述
函数装饰器也是一个函数它对被装饰的函数进行调用并且做一些额外的逻辑处理。不改变被装饰函数的原有逻辑。
函数装饰器是一个嵌套函数
1定义一个入参用于接收被装饰的函数
2定义一个内部函数并且返回这个内部函数供外面函数调用
3内部函数实现额外逻辑处理并且调用被装饰函数的函数
示例 def my_decorator(func):def my_wrapfunc(*args,**kargs):print(装饰器例子)func(*args,**kargs)return my_wrapfunc def f1(msg):print(msg)f1my_decorator(f1)f1(梯阅线条)
装饰器例子
梯阅线条1.4 函数装饰器使用
用法
# 定义一个嵌套函数(闭包函数)
def my_decorator(func): # 将被装饰的函数作为入参def my_wrapfunc(*args,**kargs):pass # 做一些额外逻辑处理进行装饰func(*args,**kargs) # 调用被装饰的函数pass # 做一些额外逻辑处理进行装饰return my_wrapfunc # 返回内部函数供外面继续调用被装饰的函数
my_decorator # 相当于 f1my_decorator(f1)
def f1(msg):pass
# 调用
f1(msg)描述
直接在函数定义def上面一行用“装饰器函数名”即可。
比如
my_decorator
def f1**(msg):pass**
相当于 f1my_decorator(f1)
调用时直接调用被装饰函数名即可。
示例 def my_decorator(func):def my_wrapfunc(*args,**kargs):print(装饰器例子)func(*args,**kargs)return my_wrapfuncmy_decorator
def f1(msg):print(msg)f1(梯阅线条)
装饰器例子
梯阅线条