[英]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對象,就像其他任何對象一樣)訪問上圖所示的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():
do something
a,b = somevalues,somevalues
return a, b
x, y = func1()
現在您可以在任何地方使用x
和y
,而無需每次都func1()
。 例如,在func2()中這樣:
def func2(a, b):
do something
然后,分別使用x和y調用func2()
:
func2(x, y)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.