为什么在此代码中返回5而不是3?

问题描述

嘿,我对以下代码有疑问:(我使用python 3)

def foo (x):
   def bar (z,x = 0):
      return z + x
   return bar(3,x)

foo(2)

显然,返回值为5。但是无论我如何绘制框架,结果都会在纸上返回3。有人可以帮我吗?谢谢:)

解决方法

如果我正确理解了您的问题,那么您在问为什么程序返回5?

bar中的foo定义的行为就像在foo函数外部定义的一样。 x带有阴影,但它的行为完全是另一个变量。

因此,当您调用foo(2)时,它会调用bar(3,2)并返回3+2 = 5

,

格式化代码有助于理解它。

bar(3,x)在提供x的情况下返回3+x(如果未提供x,则默认为0

foo(2)返回bar(3,x),但由于x为2,则您收到5作为最终响应bar(3,2)