如何在python 3中的函数上传递变量

时间:2014-05-04 16:35:11

标签: python

#Test
def test():
    test1 = input("Type something: ")
test()
print(test1)


    print(test1)
NameError: name 'test1' is not defined
  

'test1'未定义

这困扰着我。我正在学习python并试图为练习编写一个小游戏,似乎在函数中声明的变量不会延续。有没有办法解决这个问题?我不应该使用test()来关闭函数吗?或者我应该弄清楚并使用一个班级?或许它只是一个python的怪癖?谢谢你的帮助。

2 个答案:

答案 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的函数。调用testtest())时,将运行内部的行。内部的行将输入分配给变量test1。但是test1的范围限定为test函数 - 名称test1仅存在于函数内部,因此一旦函数结束,名称就会消失。

调用函数以产生输出(或副作用,但在这种情况下,输出)。您可以使用return关键字来结束函数并返回变量。在这种情况下,您可以在函数内部return test1(技术上也可以直接return input(...),并完全跳过变量的创建)。

test()

这会调用该函数。您可以在定义函数后随时执行此操作;你不需要去做"关闭"功能。

如果您将函数修改为return一个值,那么您需要对此行的返回值执行某些操作。像result = test()这样的东西。这会将return的{​​{1}}值分配给test变量。

result

这不起作用,因为print(test1) 仅存在于函数名称空间内,并且您在函数名称空间之外调用此行。如果您已完成我上面建议的更改,则可以改为test1