Python双参数自定义数学函数运行结果为4的逻辑问题咨询
代码运行逻辑拆解
我们逐行走一遍执行流程就清楚了:
- 首先定义函数
inc,接收两个参数,第二个参数默认值为1,返回两个参数的和。 - 执行
a=inc(1):
调用函数时只传了1个参数,所以参数a=1,b取默认值1,返回结果为1+1=2,执行完这行后全局变量a的值为2。 - 执行
a=inc(a,a):
这里你理解出错的核心点是Python赋值语句永远是先计算等号右侧的所有内容,再把结果赋值给左侧的变量,不会先修改左侧变量再计算右侧。
所以调用inc(a,a)的时候,取的还是上一步得到的全局变量a的值2,两个入参分别是2和2,函数返回2+2=4,最后才把4赋值给左侧的a,覆盖之前的2。 - 最后
print(a)输出的就是4。
你之前的误解在于认为赋值时左侧的
a会先被清空/替换,导致右侧调用时取值异常,但实际上左值的绑定操作是在右侧表达式完全计算完成后才会执行的,整个右侧计算过程用的都是赋值前的旧a值,不存在未定义的问题。
内容的提问来源于stack exchange,提问作者freeSc0tt
相关产品推荐
相关产品推荐

