|
发表于 2020-8-3 16:24:07
|
显示全部楼层
根据你的第一个实例,这是作用域的问题
我给你一段代码:
- def fun1():
- x=5
- def fun2():
- print(x)
- fun2()
- print(x)
- fun1()
复制代码
它会打印两个5,那个x被定义在外面的那层函数fun1当中,但是可以被内层的fun2函数访问
第二个示例:
- def fun1():
- x=5
- def fun2():
- print(x)
- x=4
- fun2()
- print(x)
- fun1()
复制代码
这段代码会报错,x原本属于fun1,虽然fun2可以访问读取x,但是不能修改
所以:
你的第一个示例不报错是因为fun2(x)
意思是fun2也有个和第一个fun1名字相同的变量x,但是他们是两个所属不同函数的变量,x-=1其实访问的是fun2的变量
你的第二个示例中,因为fun2()
所以fun2没有变量x,这个时候调用x-=1其实是调用fun1的x,根据刚刚我的两个示例已经证明,这是不可取的
你的第三个示例,因为return x-1,这一步只能算是对x的值进行读取并进行减一运算,没有对fun1的x进行修改,所以不报错
还有就是python对于缩进比较敏感,我刚刚将你的代码复制到我的编辑器当中总是报错,最终发现是缩进问题,我的编辑器自动将缩进换成4个空格,而你的是tab,因此报错
|
|