簡體   English   中英

在函數與全局變量之間傳遞變量

[英]Pass variables between functions vs global variables

我有一個定義了幾個函數的代碼,這些代碼是從主容器代碼中調用的。 每個新函數都使用從先前函數獲得的變量,因此看起來像這樣:

import some_package
import other_package

import first_function as ff
import secon_function as sf
import third_function as tf
import make_plot as mp

# Get values for three variables from first function
var_1, var_2, var_3 = ff()

# Pass some of those values to second function and get some more
var4, var5 = sf(var_1, var_3)

# Same with third function
var_6, var_7, var_8, var_9 = tf(var_2, var_4, var_5)

# Call plotting function with (almost) all variables
mp(var_1, var_2, var_3, var_5, var_6, var_7, var_8, var_9)

這比使用全局變量更具Python性嗎? 這種方法的問題在於,如果我從給定的函數中添加/刪除新變量,我將不得不修改四個地方:函數本身,在主代碼中make_plot函數的調用,對代碼中make_plot函數的調用。 main和make_plot函數本身。 是否有更好或更推薦的方法來做到這一點?

將它們放在課堂上怎么樣?

class Foo(object):
    def ff(self):
        self.var_1, self.var_2, self.var_3 = ff()
    def sf(self):
        self.var_4, self.var_5 = sf(self.var_1, self.var_2)
    def tf(self):
        self.var_6, self.var_7, self.var_8, self.var_9 = tf(self.var_2, self.var_4, self.var_5)
    def plot(self):
        mp(self.var_1, self.var_2, self.var_3, 
           self.var_5, self.var_6, self.var_7, self.var_8, self.var_9)

foo = Foo()
foo.ff()
foo.sf()
foo.tf()
foo.plot()

也許其中一些方法應該是采用Foo實例的模塊級函數,也許其中一些屬性應該是分別傳遞的變量,也許這里實際上有2個,甚至4個不同的類,而不是1個,等等。想法-您已將9件事替換為1或2。

我建議您想要的是一個數據結構,該數據結構由各種函數填充,然后最后傳遞給make_plot 這在很大程度上適用於您使用的任何語言。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM