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

2024-09-29 19:08:56 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个函数:

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()


Tags: 函数绘图dosomethingfunc2func1somevalues
3条回答

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中,类是对象,就像任何其他对象一样):

class1.a
class1.func1()

你也可以为自己创造一条捷径:

func1 = class1.func1
func1()

另一种方法是制作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)

这也许就是你想要的。另外,我建议您学习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)

相关问题 更多 >

    热门问题