如何访问存储在函数中的变量?

时间:2014-04-23 22:49:26

标签: python

def func():
    number = 1
def func2():
    print number

为什么这段代码不能打印" 1"?(除了我没有调用这些函数的事实?)

5 个答案:

答案 0 :(得分:2)

以下是我认为您正在尝试做的事情。我的魔法水晶球生锈了。

def func1():
    user_input = raw_input("prompt")
    return user_input
def func2(the_input):
    print the_input

that_same_input = func1()
func2(that_same_input)

如果您使用的是Python3,则将input("prompt")替换为raw_input("prompt"),将print(the_input)替换为print the_input

函数执行以下两项操作之一。它们要么进行计算并返回输出,要么将某些结构变为您想要的结构。如果他们做了除此之外的任何事情你应该(通常)重构。现在你正试图让你的func1设置一个全局变量,然后从其他地方调用它。好吧,有点。

您真正要做的是使用func1进行一组计算。您希望它获得一些用户输入,然后报告该用户输入的内容。在您的原始示例中,您尝试将其保存到变量中,但由于函数内部的变量没有全局范围,因此不适合您。让我们返回该值,并将其保存到函数OUTSIDE的变量中。

一旦我们完成了这个,我们就可以让另一个函数接受它作为PARAMETER,并将变量传递给它!看到?变异,或计算并返回。这些是你的选择。

答案 1 :(得分:2)

你回来了

def func(n):
    number = n+1
    return number

something = func(n)

答案 2 :(得分:0)

number中定义func时,它不是全局名称;它位于func的本地。当您致电func2时,您在number中定义的func不存在。您可以创建一个新的,但它与另一个函数的number没有任何关系。实际上,此代码将抛出NameError,因为number中没有名为func2的变量。

答案 3 :(得分:0)

如评论中所述,您可以使用global关键字,这是一个简短的示例:

def func():
    global number
    number = 1
def func2():
    print number

现在,如果在func2来电之后调用func,则会按照您的预期打印1。

然而,全局变量完全是最佳做法,除非你绝对需要,否则你应该使用它们,在这种情况下,上面的代码应该有所帮助。

您还可以查看有关该主题的python docs部分:https://docs.python.org/2/faq/programming.html#why-am-i-getting-an-unboundlocalerror-when-the-variable-has-a-value,可能会有所帮助。

答案 4 :(得分:0)

为什么需要定义“number = 1”?只是做

    number = 1
    def func2():
        print number