在另一个函数中访问函数内部的Python变量

时间:2015-09-21 12:31:31

标签: python function python-2.7 variables

我们说我有一个功能:

func1():
    do something
    a,b = somevalues,somevalues

现在让我们说我有另一个功能:

func2():
    do something

我现在想在a,b func2()中使用func1() func1(): do something a,b = somevalues, somevalues func1.a = somevalues func1.b = somevalues func1() func1.a

我尝试使用

func1()

但是使用此功能,我必须在使用a,b之前每次都运行func1()

a,b还会创建一些图表并计算a,b

那么可以在func2()中使用func1()而无需调用typebox.innerHTML += "<div class='typebox'><img id='typeImg' width='30px' height='30px' src="+d[o].src+"></div>"; 吗?

3 个答案:

答案 0 :(得分:5)

这可能就是你想要的。另外,我建议你通过一个介绍性的Python教程。

func1():
    #do something
    a,b = somevalues, somevalues
    return a, b

func2(a, b):
    #do something on a and b

a, b = func1()
func2(a, b)

答案 1 :(得分:2)

answer by robert可能是做你想要的最简单的方法。这是另一个:

class class1():
    a,b = somevalues, somevalues
    @staticmethod
    def func1():
        do something

func2(class1.a, class1.b)
class1.func1()

这种方法起作用并且你的方式不起作用的原因与Python处理函数和类的方式有关。

在第一次调用函数之前,函数体不会被执行。所以当你有:

def func1():
    func1.a = somevalue

...在您func1.a被调用至少一次之前,您无法访问func1,正如您已经发现的那样。

但是,对于类,类的主体在编译代码时运行。所以当你这样做时:

class example:
    a = somevalue

...您可以立即访问example.a

编辑:

回答评论中的问题:使用类本身访问func1ab,如上所示(在Python中,类ARE对象,就像任何其他对象一样) :

class1.a
class1.func1()

您也可以为自己创建一个快捷方式:

func1 = class1.func1
func1()

另一种做事方式 - 使您可以拥有ab的不同版本 - 是使ab实例属性而不是类属性。

class class1:
    def __init__(self, a, b):
        self.a, self.b = a, b
    @staticmethod
    def func1():
        dosomething

obj1 = class1(somevalue1A, somevalue1B)
obj2 = class1(somevalue2A, somevalue2B)
func2(obj1.a, obj1.b)
func2(obj2.a, obj2.b)
obj1.func1()
obj2.func1()
class1.func1()

最后三行都调用相同的函数,因为obj1.func1obj2.func1class1.func1都指向class1的相同方法。请注意,您可以从类(func1)和类的实例(class1obj1)调用obj2的原因是func1是静态方法。

答案 2 :(得分:0)

func1():
    do something
    a,b = somevalues,somevalues
    return a, b

x, y = func1()

现在,您可以在任何地方使用xy,而无需每次都使用callin func1()。例如在func2()中这样:

def func2(a, b):
    do something

然后分别使用x和y调用func2()

func2(x, y)