你的log函数根本没有返回值
你用myfunc去接它的返回值,那myfunc不是None吗
你执行None(),能不报错吗
执行函数就是要加括号,不加括号那就不是在执行函数
问题是你函数执行之前,你总得确定它是个函数吧
不要把变量名定义的很函数名一样
搞的自己都不知道它到底是个什么玩意了
主要你令myfunc = log(myfunc)后,myfunc就不再是个函数了,是一个数值类型,你再myfunc()肯定会报错
你如果想可以正常调用就
a = log(myfunc)
myfunc()
你这么学会把自己搞晕的, 你看看你加上括号不就等于log(myfunc)()
【温馨提示:若能帮到您,望给个采纳该答案,谢谢!】
1、原因如下
因为myfunc是一个noneTyep,不是任何一种类型,改变了自己本身的函数的情况
2、修改如下
在赋值的时候,log方法必须返回一个值,比如:函数值,即可当做方法再次使用
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
def log(func):
print("代码运行开始...")
func()
print("代码运行结束...")
return myfunc
def myfunc():
print("Python装饰器...")
myfunc=log(myfunc)
print(type(log))
print(type(myfunc))
myfunc()
看你倒数第二句代码
加括号是直接调用执行该函数,不加括号是用于将该函数作为参数传入其他函数,在其他函数里面将该函数作为回调,在js中这种方式用于同步执行js