第一个问题:
在代码中调用了函数fun1(),其实是有返回值的,只是没有显示出来罢了,要把代码改成print(fun(1))才能打印出来,这是写在文件里的代码与交互器的区别,打个比方,你再文件里写个25,F5运行也是看不到任何结果的,要print打印出来才能看到,而交互界面就不一样了,你敲个25回车,直接就可以看到25(不知道这是不是int类的默认__repr__的关系)
第二个问题:
显然这个看起来才更像个闭包,闭包返回的是一个函数对象,而不是一个函数调用(个人理解,可能不对),你第一段代码返回的就是函数调用,也就是调用函数以后返回的值25,而第2短代码返回的是函数对象.可以把代码改一下,fun = fun1(),这时fun是个函数对象(确切的说是到这个函数对象的引用,如果实在太绕可以忽略这句话),要调用函数fun肯定是要加()的,打个比方abs就是个函数对象,abs()就是函数调用,可以试试,fun = abs,然后print(fun(-10)),显然想要运行函数并得到结果,肯定是要调用函数的,也就是加括号
第三个问题:
报错在这行代码:x *= x,从报错内容来看大概是说,局部变量在引用前赋了值,你可以理解成x可读,但不可写,也就是说x不能出现在=号的左边(个人理解,仅供参考)