第一个代码块输出:
“名称错误:名称'timefloat'未定义”
而其他则按预期工作。这是为什么?
代码块 1:引发错误
def main():
time = input("Whats the time? ")
convert(time)
print(timefloat)
def convert(hour):
(h, m) = hour.split(":")
timefloat = float(h) + float(m) / 60
return timefloat
main()
代码块 2:正确工作
def main():
time = input("Whats the time? ")
newtime = convert(time)
print(newtime)
def convert(hour):
(h, m) = hour.split(":")
return(float(h) + float(m) / 60)
main()
据我非常有限的知识,“timefloat”看起来已定义,并且这两个代码应该返回相同的结果。
在Python(和大多数编程语言)中,有一个称为变量的范围的概念。它意味着在哪个代码块中可以访问变量。这就是您的“代码块 1”所发生的情况。
timefloat
变量在convert()
函数中定义,但不在main()
函数中定义。
convert()
函数返回存储在timefloat
变量中的值,但在main
函数中没有任何变量来捕获和保存convert()
函数返回的结果。一个简单的类比是“你向你的朋友扔了一个球,但他没有接住它”。
这就是你的“代码块2”起作用的原因。它捕获
convert()
函数的结果并将其保存到变量“newtime”中,该变量稍后在 main()
函数中使用
这是一个变量作用域问题,下面的代码应该可以按你想要的方式工作
timefloat = 0
def main():
global timefloat
time = input("Whats the time? ")
convert(time)
print(timefloat)
def convert(hour):
global timefloat
(h, m) = hour.split(":")
timefloat = float(h) + float(m) / 60
return timefloat
main()