我对以下代码的输出有疑问:
def f():
global s
print(s)
s = "That's clear."
print(s)
s = "Python is great!"
f()
print(s)
输出是这样的:
Python很棒!
很清楚。
很清楚。
我的问题是:为什么它是最后一个输出(即第三个输出)也是"那是明确的" 。
为什么第三个输出不是" Python很棒!" 。
我认为代码中的最后一个语句(即print(s))语句在函数f()之外。所以不应该在这里打印查看全局定义的s变量吗?在这种情况下,全局定义的变量s将引用值" Python很棒!",不是吗?对不起,必须有一些我不明白的概念。我是python的新手。有人可以解释这个简单的概念。
答案 0 :(得分:0)
要查看您的输出,您的代码结构必须是:
def f():
global s
print(s) # s outside the function
s = "That's clear." # new global s created
print(s) # print the new s
s = "Python is great!" # s before you call the function/get to s = "That's clear."
f() # f gets called and new global s is created
print(s) # you see the new global s created in the function
使 s 全局意味着您在f
范围之外看到它,您已经在到达最后一次打印时执行了该功能,所以现在 s 指向That's clear.
如果你想获得你想要的输出,你可以将s传递给函数而不使用global关键字,这样f
中创建的 s 只能在范围内访问功能本身。
def f(s):
print(s)
s = "That's clear."
print(s)
s = "Python is great!"
f(s)
print(s)
这应该是一个很好的教训,为什么使用 global 很少是一个好主意。
答案 1 :(得分:-1)
假设您已全局声明变量s = "Python is great!"
。
您可能没有正确缩进代码,下面的代码:
def f():
global s
print(s)
s = "That's clear."
print(s)
s = "Python is great!"
f()
print(s)
会给你输出
Python很棒!
很清楚。
Python很棒!
您编写的代码应该主要是提供无限递归,并且应该达到最大递归深度。
缩进在python中非常重要,当你缩进函数调用f()
和语句print(s)
时,python认为这两个语句都是函数f()
的一部分。当在第一次函数调用期间到达语句f()
时,python将自动再次调用该函数并重复整个过程。实际上,您永远无法达到第三份印刷声明。