|
发表于 2024-1-24 23:29:51
|
显示全部楼层
本帖最后由 jackz007 于 2024-1-24 23:57 编辑
first 是一个闭包
- #first
- def outer(func):
- def inner():
- . . . . . .
- return inner # 因为函数 outer() 返回的是 内嵌函数 inner() 的调用句柄。
- . . . . . .
- f = outer() # 变量 f 接收到内嵌函数的调用句柄
- f() # 调用 outer() 的内嵌函数 inner()
复制代码
second 是一个装饰器
- #second
- def outer(func): # 函数 outer() 用于对函数 say() 进行装饰器包装,以便在 say() 被调用的时候获得控制
- def inner(*args,**kwargs): # 当对 say(* args , ** kwargs) 进行调用时,实际上是 outer() 的内嵌函数 inner(* args , ** kwargs) 被调用
- print('*' * 50) # 先连续打印 50 个 '*'
- return func(*args,**kwargs) # 再返回对被装饰函数 say(* args , ** kwargs) 的调用结果
- return inner
- @outer # 声明函数 say() 被 outer() 函数装饰,此后,凡是对 say() 函数的调用都转向到对 outer()
- # 的内嵌函数 inner() 的调用,并在 inner() 中完成对被装饰函数 say() 的调用
- def say(name,age):
- print('my name is %s, I am %d years old ' % (name,age))
- return 'aaaa'
- # say('sunck',19)
- l = say('sunck',19) # 实际调用的是 inner('sunck' , 19)
- # 先执行 print('*' * 50)
- # 再返回对函数 say('sunck' , 19) 的调用结果
复制代码
二者是完全不同的两个概念,所以,二者的运行结果毫无可比性,这是正常的结果。 |
|