在另一个函数中访问函数内部的Python变量
假设我有一个函数:在另一个函数中访问函数内部的Python变量,python,function,python-2.7,variables,Python,Function,Python 2.7,Variables,假设我有一个函数: func1(): do something a,b = somevalues,somevalues func2(): do something 现在让我们假设我有另一个函数: func1(): do something a,b = somevalues,somevalues func2(): do something 我现在想在func2中使用a,b,它们是在func1中计算的 我试着用 func1(): do
func1():
do something
a,b = somevalues,somevalues
func2():
do something
现在让我们假设我有另一个函数:
func1():
do something
a,b = somevalues,somevalues
func2():
do something
我现在想在func2中使用a,b,它们是在func1中计算的
我试着用
func1():
do something
a,b = somevalues, somevalues
func1.a = somevalues
func1.b = somevalues
func1()
func1.a
但是使用这个,我必须在使用a,b之前每次运行func1
func1还创建了一些绘图以及计算a、b
那么,是否可以在不调用func1的情况下使用func2中的a、b?这可能就是您想要的。另外,我建议您学习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)
现在,您可以在任何地方使用x和y,而无需每次调用func1。例如,在func2中,以这种方式:
def func2(a, b):
do something
然后分别用x和y调用func2:
func2(x, y)
这可能是做你想做的事情最简单的方法。下面是另一个:
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
…您可以立即访问示例a
编辑:
回答注释中的问题:如上所示,使用Python中的类本身访问func1、a或b,类是对象,就像任何其他对象一样:
class1.a
class1.func1()
你也可以为自己创造一条捷径:
func1 = class1.func1
func1()
另一种方法是创建a和b实例属性,而不是类属性,这样您就可以拥有不同版本的a和b
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.func1、obj2.func1和class1.func1都指向class1的相同方法。请注意,可以从类class1和类的实例obj1、obj2调用func1的原因是func1是一个静态方法 你能从func1返回a,b,然后将它们作为参数传递给func2吗?@robert:我不知道!!你能详细说明一下吗?你需要重新思考你的代码结构。如果需要独立于func1的a和b,则不应在其中声明它们。@MichaelRCURTIS:但我在func1中计算它们,就像在func1中的几个绘图中需要它们一样。“那么你是建议我在函数之外计算它们吗?”“是的,没错。例如,您可以将它们存储为类的成员变量,如果考虑到它们的含义,这是有意义的。但是由于func1创建了许多绘图,我不想调用func1来访问这些变量,因为我需要关闭所有绘图!那么,为什么在绘制绘图的函数中为a和b赋值呢?我现在接受这个答案!但正如@michaelccurtis所指出的,我将尝试重新构造我的代码!我现在明白了!但在这种情况下,如何调用func1?我是否需要使用该类并调用它,还是可以像func1一样直接调用它?您可以使用该类来调用它,因为它是该类的静态方法,或者您可以创建该类的实例。我会补充一些解释。@P编辑我已经在回答中回答了您的问题。谢谢您的详细解释!我将试着慢慢地理解它