繁体   English   中英

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

[英]Access a Python variable which is inside a function, in another function

假设我有一个函数:

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

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

func2():
    do something

我现在想在func2()中使用在func1()内部计算的a,b

我尝试使用

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

func1()
func1.a

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

func1()还会创建一些图以及计算a,b

那么有可能在func2()利用a,b而不调用func1()吗?

这可能就是您想要的。 另外,我建议您阅读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)

罗伯特答案可能是您想要做的最简单的方法。 这是另一个:

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至少一次,您才能访问func1.a

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

class example:
    a = somevalue

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

编辑:

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

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的相同方法。 请注意,您可以同时从类( class1 )和实例( obj1obj2 )调用func1的原因是func1是静态方法。

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

x, y = func1()

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

def func2(a, b):
    do something

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

func2(x, y)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM