修改父函数参数时带有嵌套函数的UnboundLocalError

UnboundLocalError with nested function when modifying parent function argument

我是 python 的新手,我想了解这些 hello world 示例之间的区别

def hello(hi):

    def world(obj):
        return hi + ', ' + obj + '!'

    return world


world = hello('Hello')
print(world('World'))

Hello, World!
def hello(hi):

    def world(obj):
        hi = hi + ', ' + obj + '!'
        return hi

    return world


world = hello('Hello')
print(world('World'))

      2 
      3     def world(obj):
----> 4         hi = hi + ', ' + obj + '!'
      5         return hi
      6 

UnboundLocalError: local variable 'hi' referenced before assignment

为什么第二个例子失败了?

第二段代码失败,因为 hihello 函数范围内的参数,但它在 world 函数中再次赋值