簡體   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