在Python中访问其他函数中的变量

时间:2016-04-27 17:38:04

标签: python function variables global

我是来自Java背景的python的新手,并且想知道如何在Python中从一个函数访问变量到另一个函数。从这段代码:

    def method1():
        var1 = randomArray[::2]
        var2 = randomArray[1::2]


        return var1
        return var2

    def method2():
        for i in range (len(var1)):
        print i

我会收到错误消息:

    NameError: global name 'var1' is not defined

原谅代码,我只是提供一个例子。关于如何在方法2中使用var1的任何建议都会有很大的帮助。感谢。

编辑:

class Sample:

def method1():
    randomArray = [1,2,3,4,5,6,7,8,9,10]
    var1 = randomArray[::2]
    var2 = randomArray[1::2]

    return var1, var2

def method2():
    var1, var2 = method1()   

    for i in range (len(var1)):
        print i

在method2()中调用method1()仍然是一个错误。

4 个答案:

答案 0 :(得分:1)

如果要在第一个函数中定义变量,则必须返回它们并在调用函数时保存它们。 请注意,您可以通过用逗号分隔它们来返回多个变量。

def method1():
    var1 = randomArray[::2]
    var2 = randomArray[1::2]

    return var1, var2

def method2():
    var1, var2 = method1()   

    for i in range (len(var1)):
        print i

答案 1 :(得分:1)

如错误所示,您没有名为var1的全局变量。函数中的变量是本地的。

您可以制作我不会做的变量global

或者,更轻松地返回var1var2的值,并在method2()

中使用它们

此外,您的return错了。如果你想要返回两者,你应该像return var1, var2一样返回。

e.g。 -

def method1():
    var1 = randomArray[::2]
    var2 = randomArray[1::2]
    return var1, var2

def method2():

    var1, var2 = method1()
    #Do something with var2
    for item in var1:
       print item
    #or for i in range(len(var1)): ....

答案 2 :(得分:1)

在Python中,return语句退出该函数。因此,永远不会达到您的第二行return var2代码。完成此操作的最佳方法是在调用函数时将返回值赋给变量。这是一个例子:

def method1():
    var1 = randomArray[::2]

    return var1


def method2():
    var1 = method1()
    for i in range (len(var1)):
        print i

您也可以return multiple variables,但必须打包它们,例如tuplelist

元组示例:

def method1():
    var1 = randomArray[::2]
    var2 = randomArray[1::2]

    return (var1, var2)


def method2():
    var1, var2 = method1()
    for i in range (len(var1)):
        print i

    for i in range (len(var2)):
        print i

列表示例:

def method1():
    var1 = randomArray[::2]
    var2 = randomArray[1::2]

    return [var1, var2]


def method2():
    varList = method1()
    for i in range (len(varList[0])):
        print i

    for i in range (len(varList[1])):
        print i

以下是基于更新代码的OOP示例:

class Sample:

    def method1(self):
        randomArray = [1,2,3,4,5,6,7,8,9,10]
        var1 = randomArray[::2]
        var2 = randomArray[1::2]

        return var1, var2

    def method2(self):
        var1, var2 = self.method1()   
        print var1

MySample = Sample()
MySample.method2()

答案 3 :(得分:0)

我为var2创建了一个单独的方法,因此可以返回两个方法,然后在另一个函数中调用这两个函数。这样两者都可以访问,你可以避免全局变量。

def method1():
    var1 = randomArray[::2]

    return var1

def method2():
    var2 = randomArray[1::2]

    return var2 

def method3():
    var1 = method1()
    var2 = method2()
    #var2 stuffmagic
    for i in range (len(var1)):
    print i