Python 中的词法范围

gk7*_*gk7 3 python scoping

我正在学习 Python,更具体地说,我正在探索范围规则。

我尝试了以下“实验”:

def increment(n): 
   n += 1 
   print(n)
   return n

n = 1 
increment(n) 
print(n) 
Run Code Online (Sandbox Code Playgroud)

这段代码输出: 2 , 1 ,既然变量 n 返回到全局环境,难道不应该输出 2, 2 吗?

您的建议将不胜感激。

bru*_*ers 5

这里有两个不同的变量(名称):一个位于全局范围内,另一个位于increment. 重新绑定本地一个increment不会影响全局一个,并且increment返回它自己的事实n对全局一个也没有影响(它们具有相同的名称这一事实无关紧要)。如果你想让全局n指向 返回的值increment(),你必须明确地重新绑定它:

n = 1
print(n)
n = increment(n)
print(n)
Run Code Online (Sandbox Code Playgroud)