如何将变量从一个函数赋给另一个函数

时间:2013-11-10 22:32:09

标签: python function variables global-variables

我有这段代码:

def dataExtractor():
    # ***
    # some code here
    # ***
    for tr in rows:
        cols = tr.findAll('td')
        if 'cell_c' in cols[0]['class']:
            # ***
            # some code here
            # ***
            stringed_list_of_params = [str(i) for i in (listOfParams[1],listOfParams[3])]
            numerical_list_of_codes_units = [int(i) for i in (listOfParams[0],listOfParams[2])]
            numerical_list_of_rates = [float(i) for i in (listOfParams[4])]

我需要构建这个函数:

def calc():
    oneCurrency = (
            #digital_code[0]
            numerical_list_of_codes_units[0],
            #letter_code[1]
            stringed_list_of_params[0],
            #units[2]
            numerical_list_of_codes_units[1],
            #name[3]
            stringed_list_of_params[1],
            #rate[4]
            numerical_list_of_rates
            )
 # ***
 # some code
 # ***

但我无法访问numerical_list_of_codes_units[0]等, 如何将变量从一个函数赋予其他函数?

2 个答案:

答案 0 :(得分:1)

你不是“给变量”,你要么:

  1. (即对象)作为参数传递并返回;或

  2. 通常通过将函数收集到一个类中来共享变量。

  3. 以下是1的例子:

    def dataExtractor():
        return somevalue
    
    def calc(value):
        pass # do something with value
    
    calc(dataExtractor())
    

    这是2。:

    class DataCalc(object):
        def dataExtractor(self):
            self.value = somevalue
    
        def calc(value):
            return self.value*2    
    calc = DataCalc()
    calc.dataExtractor()
    calc.calc()
    

答案 1 :(得分:-1)

您可以使用global关键字。但是,你应该几乎总是避免使用它。当您将某个变量声明为global时,该代码中的任何函数都可以访问它。例如 -

def f():
    global a
    a = 2

f()
print a

输出

2

在您的情况下,您应该在生成列表的函数的开头声明要用作全局的列表。以下应该这样做。

def dataExtractor():
    global numerical_list_of_codes_units, stringed_list_of_params, numerical_list_of_rates
    # ***
    # some code here
    # ***
    for tr in rows:
    # rest of the code