#Test
def test():
test1 = input("Type something: ")
test()
print(test1)
print(test1)
NameError: name 'test1' is not defined
'test1'未定义
这困扰着我。我正在学习python并试图为练习编写一个小游戏,似乎在函数中声明的变量不会延续。有没有办法解决这个问题?我不应该使用test()来关闭函数吗?或者我应该弄清楚并使用一个班级?或许它只是一个python的怪癖?谢谢你的帮助。
答案 0 :(得分:1)
默认情况下,函数定义中指定的所有名称都放在本地范围内(
与函数调用相关联的命名空间)。如果您需要指定一个名称
生活在包含该功能的模块的顶层,您可以通过声明来实现
它在函数内部的全局语句中。如果您需要指定名称
它位于一个封闭的def
中,从Python 3.X开始,你可以通过声明它来实现
nonlocal
声明。
阅读本文:https://docs.python.org/3.4/tutorial/classes.html#python-scopes-and-namespaces
您需要返回值并存储返回值才能打印它。
def test():
test1 = input("Type something: ")
return test1
a = test()
print(a)
一般来说,函数应该依赖参数和返回值而不是全局。
答案 1 :(得分:1)
def test():
test1 = input("Type something: ")
这两行定义了一个名为test
的函数。调用test
(test()
)时,将运行内部的行。内部的行将输入分配给变量test1
。但是test1
的范围限定为test
函数 - 名称test1
仅存在于函数内部,因此一旦函数结束,名称就会消失。
调用函数以产生输出(或副作用,但在这种情况下,输出)。您可以使用return
关键字来结束函数并返回变量。在这种情况下,您可以在函数内部return test1
(技术上也可以直接return input(...)
,并完全跳过变量的创建)。
test()
这会调用该函数。您可以在定义函数后随时执行此操作;你不需要去做"关闭"功能。
如果您将函数修改为return
一个值,那么您需要对此行的返回值执行某些操作。像result = test()
这样的东西。这会将return
的{{1}}值分配给test
变量。
result
这不起作用,因为print(test1)
仅存在于函数名称空间内,并且您在函数名称空间之外调用此行。如果您已完成我上面建议的更改,则可以改为test1
。