NameError:变量未定义,即使它定义了

问题描述 投票:0回答:2

第一个代码块输出:

“名称错误:名称'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 function return
2个回答
0
投票

在Python(和大多数编程语言)中,有一个称为变量的范围的概念。它意味着在哪个代码块中可以访问变量。这就是您的“代码块 1”所发生的情况。

timefloat
变量在
convert()
函数中定义,但不在
main()
函数中定义。

convert()
函数返回存储在
timefloat
变量中的值,但在
main
函数中没有任何变量来捕获和保存
convert()
函数返回的结果。一个简单的类比是“你向你的朋友扔了一个球,但他没有接住它”。

这就是你的“代码块2”起作用的原因。它捕获

convert()
函数的结果并将其保存到变量“newtime”中,该变量稍后在
main()
函数中使用


0
投票

这是一个变量作用域问题,下面的代码应该可以按你想要的方式工作

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()
© www.soinside.com 2019 - 2024. All rights reserved.