我正在看这个猜谜游戏的教程,遇到了我认为很奇怪的东西。在第18行,我调用了guess变量,尽管它是在其上方创建的for循环下的Local变量,但让我像调用它一样是Global。但是,如果在函数或循环中声明了var,则会使它成为本地变量。有人可以帮我解释一下吗。
import random
print("Hello what is your name?")
name = input()
print("Well " + name + " I am thinking of a number between 1 and 20")
secretNumber = random.randint(1,20)
for guessesTaken in range(1, 7):
print("Take a guess.")
guess = int(input())
if guess < secretNumber:
print("Sorry to low")
elif guess > secretNumber:
print("Sorry to high")
else:
break
if guess == secretNumber:
print("Great job " + name + ". You guessed my number in " + str(guessesTaken) + " moves.")
else:
print("Sorry the number I was thinking of is " + str(secretNumber))
答案 0 :(得分:1)
来自另一个answer:来自python语言,这似乎是一个设计决策。函数仍然具有局部变量,但是for循环不会创建局部变量。
先前的使for循环变量位于循环本地的建议已偶然发现了现有代码的问题,该代码依赖循环变量在退出循环后保持其值,这似乎被认为是理想的功能。 / p>
http://mail.python.org/pipermail/python-ideas/2008-October/002109.html
答案 1 :(得分:0)
块是作为单元执行的一段Python程序文本。 以下是块:模块,函数体和类 定义。交互键入的每个命令都是一个块。脚本文件 (作为标准输入提供给解释器或指定为 解释程序的命令行参数)是一个代码块。剧本 命令(在解释器命令行上用 “ -c”选项)是一个代码块。字符串参数传递给 内置函数eval()和exec()是代码块。
并且:
作用域定义了块中名称的可见性。如果是当地人 变量在一个块中定义,其范围包括该块。如果 定义发生在功能块中,范围扩展到任何块 包含在定义中,除非包含一个包含的块 名称的其他绑定。
在代码块中使用名称时,将使用最接近的名称进行解析 封闭范围。代码块可见的所有此类范围的集合是 称为街区的环境。
局部变量在同一代码块中的任何位置都可见。 for
循环从定义上来说不是代码块,因此,for
循环中定义的局部变量在循环之后仍在同一模块内可见。