python 中的名称错误和函数
NameErrors and functions in python
我不断收到 NameError 虽然我已经定义了一个术语,但问题出在第 28 行的 "day"。
def today():
day = input("What day is it?")
if "sunday" in day:
day = 0
elif "monday" in day:
day = 1
elif "tuesday" in day:
day = 2
elif "wednesday" in day:
day = 3
elif "thursday" in day:
day = 4
elif "friday" in day:
day = 5
elif "saturday" in day:
day = 6
else:
today()
today()
days_on_vacation = int(input("How many days will you be on vacation? "))
days_to_add_to_day = days_on_vacation % 7
day += days_to_add_to_day
我已经在函数 today()
中给了 day 一个值,对吧?为什么我被告知它没有定义?
您在函数中分配的名称是 locals;它们在函数之外是不可见的。
共享该结果的最佳方法是 return 函数的值,这样您就可以将其作为调用结果分配给变量:
def today():
# ...
return day
和
result = today()
result
变量然后保存函数 returned 的值。您也可以在那里自由使用名称 day
,但那是一个独立于函数内部变量的变量。
你在这里使用递归函数调用确实使事情复杂化;然后您还需要确保沿链传递递归调用的结果:
def today():
# ...
else:
return today()
return day
不过,这里最好不要依赖递归;一个简单的无限循环会做得更好; return从函数中调用会自动结束循环:
def today():
while True:
day = input('...')
# ...
else:
# not valid input, restart the loop
continue
# input was valid, return the result
return day
我不断收到 NameError 虽然我已经定义了一个术语,但问题出在第 28 行的 "day"。
def today():
day = input("What day is it?")
if "sunday" in day:
day = 0
elif "monday" in day:
day = 1
elif "tuesday" in day:
day = 2
elif "wednesday" in day:
day = 3
elif "thursday" in day:
day = 4
elif "friday" in day:
day = 5
elif "saturday" in day:
day = 6
else:
today()
today()
days_on_vacation = int(input("How many days will you be on vacation? "))
days_to_add_to_day = days_on_vacation % 7
day += days_to_add_to_day
我已经在函数 today()
中给了 day 一个值,对吧?为什么我被告知它没有定义?
您在函数中分配的名称是 locals;它们在函数之外是不可见的。
共享该结果的最佳方法是 return 函数的值,这样您就可以将其作为调用结果分配给变量:
def today():
# ...
return day
和
result = today()
result
变量然后保存函数 returned 的值。您也可以在那里自由使用名称 day
,但那是一个独立于函数内部变量的变量。
你在这里使用递归函数调用确实使事情复杂化;然后您还需要确保沿链传递递归调用的结果:
def today():
# ...
else:
return today()
return day
不过,这里最好不要依赖递归;一个简单的无限循环会做得更好; return从函数中调用会自动结束循环:
def today():
while True:
day = input('...')
# ...
else:
# not valid input, restart the loop
continue
# input was valid, return the result
return day