Python内部函数不打印在外部函数中初始化的值
在下面的代码中,“message”变量在P1中打印了正确的值,但在P2中没有打印任何内容。我遵循了编写这段代码的教程,它看起来与他所写的非常相似。我正在使用Python 3.6。有人能解释一下原因吗?Python内部函数不打印在外部函数中初始化的值,python,python-3.x,closures,Python,Python 3.x,Closures,在下面的代码中,“message”变量在P1中打印了正确的值,但在P2中没有打印任何内容。我遵循了编写这段代码的教程,它看起来与他所写的非常相似。我正在使用Python 3.6。有人能解释一下原因吗? def outer_function(msg): message = msg print(message) #P1 def inner_function(): print(message) #P2 return inner_function() 除了不正确的缩进
def outer_function(msg):
message = msg
print(message) #P1
def inner_function():
print(message) #P2
return inner_function()
除了不正确的缩进(我认为这是一个输入错误)之外,
内部函数将永远递归地调用自己,因此我预计这里会出现堆栈溢出。除了不正确的缩进(我认为这是一个输入错误)之外,内部函数将永远递归地调用自己,所以我预计这里会出现堆栈溢出。是的,正如@see所提到的。。。除了缩进,代码还会导致堆栈溢出:
也许您的代码应该如下所示:
def outer_function(msg):
message = msg
print(message) #P1
def inner_function():
print(message) #P2
return inner_function()
outer_function("hello")
是,如@see所述。。。除了缩进,代码还会导致堆栈溢出:
也许您的代码应该如下所示:
def outer_function(msg):
message = msg
print(message) #P1
def inner_function():
print(message) #P2
return inner_function()
outer_function("hello")
试试这个:
class A:
message = None
def outer_function(self, msg):
self.message = msg
print(self.message) #P1
def inner_function(self):
print(self.message) #P2
然后在python shell中:
>>> a = A()
>>> a.inner_function()
None
>>> a.outer_function('Hello!')
Hello!
>>> a.inner_function()
Hello!
试试这个:
class A:
message = None
def outer_function(self, msg):
self.message = msg
print(self.message) #P1
def inner_function(self):
print(self.message) #P2
然后在python shell中:
>>> a = A()
>>> a.inner_function()
None
>>> a.outer_function('Hello!')
Hello!
>>> a.inner_function()
Hello!
通常闭包只是内部函数记住外部函数变量的能力,即使外部函数超出范围
所以我希望你的代码
正确缩进,使其像预期的那样工作
def outer_function(msg):
message = msg print(message) #P1
def inner_function():
print(message) #P2
return inner_function()
这里,即使外部函数超出范围,内部函数也会记住变量消息。通常,闭包只是内部函数记住外部函数变量的能力,即使外部函数超出范围
所以我希望你的代码
正确缩进,使其像预期的那样工作
def outer_function(msg):
message = msg print(message) #P1
def inner_function():
print(message) #P2
return inner_function()
在这里,内部函数会记住变量消息,即使外部函数超出范围缩进很重要。缩进很重要。我确信它会很好地工作,但我想知道为什么内部函数在教程视频中打印消息时没有打印任何内容。你发布的代码没有意义@VishwanathSeshagiri。如果调用内部函数,它将崩溃。这真的是你的代码吗?@VishwanathSeshagiri也许你想在你的内部函数中调用一个外部函数?@seesharper是的,先生。我在随后的视频中附上了代码的截屏。看看缩进@VishwanathSeshagiri!它在Python中具有重要的语义意义。你的代码缩进方式完全不同。我很确定它会很好地工作,但我想知道为什么内部函数在教程视频中打印消息时没有打印任何内容。你发布的代码没有意义@VishwanathSeshagiri。如果调用内部函数,它将崩溃。这真的是你的代码吗?@VishwanathSeshagiri也许你想在你的内部函数中调用一个外部函数?@seesharper是的,先生。我在随后的视频中附上了代码的截屏。看看缩进@VishwanathSeshagiri!它在Python中具有重要的语义意义。您的代码缩进完全不同。对不起,缩进是一个打字错误。我也考虑过,但当我调试代码时。vs代码中没有调用堆栈。此外,它还为参加教程的人打印了值。你确定吗?你能给我一个到那个教程的链接吗?你的截图和我的截图很匹配posted@RehanAzher的答案正是我们在该教程中看到的答案。这应该标记为答案@vishwanathseshagiri抱歉,缩进是一个打字错误。我也考虑过,但当我调试代码时。vs代码中没有调用堆栈。此外,它还为参加教程的人打印了值。你确定吗?你能给我一个到那个教程的链接吗?你的截图和我的截图很匹配posted@RehanAzher的答案正是我们在该教程中看到的答案。这应该标记为答案@vishwanathseshagiri抱歉,缩进是一个打字错误。我也考虑过这一点,但当我调试代码时,vs代码中没有调用堆栈。此外,它还为参加教程的人打印了值。对不起,缩进是一个打字错误。我也考虑过这一点,但当我调试代码时,vs代码中没有调用堆栈。此外,它还为参加教程的人打印了值。