函数如何访问传递给其他函数的变量?

时间:2012-02-02 22:44:15

标签: python

基本上我有一个应用程序将值发送到另一个函数(位于另一个文件中),我希望其他函数(在该文件中)能够访问该变量(如果重要的话,它的读取访问权限)。

例如:

def function1(pricelist):
     #do something

....其他功能

def fucntion200():
    #Does something else but needs to refer to that pricelist that was provided to function1

我尝试在function1中做一个pricelist = pricelist,所以也许如果我在文件中声明它会有用,但是这不起作用,当我把它全局化时,我得到一个错误,说明它的本地和全局。

我已阅读:Using global variables in a function other than the one that created them并且不认为它完全适用(或者我迄今为止无法做到)。

有什么想法吗?

谢谢!

3 个答案:

答案 0 :(得分:1)

这实际上取决于应用程序的控制流程。什么是调用function1,它是最终调用function200的那个?在最基本的层面上,你的function200也会采用一个价格表arg,并在适当的位置进行修改:

def function200(pricelist):
    pricelist[0] = 50

最理想的是让一个模块使用另一个模块作为实用程序,它可以使用它需要的参数来调用函数。无论调用function1,理论上都可以访问function200并调用它。

使用模块全局变量应该保留给常量值或者不会被一堆未知来源修改的东西,但它应该是这样的:

moduleA.py

constList = ['foo']

moduleB.py

import moduleA
print constVal
# ['foo']
constVal.append('bar')

但如果您所做的只是编写顶级函数,那么它们都应该采用参数来操作,并可选择返回新版本或进行适当修改。

答案 1 :(得分:1)

将价格表传递给第一个函数,让它以任何需要的方式修改/使用它并返回修改后的价格表。将这个新修改的价格表发送给第二个函数。

def function1(pricelist):
     #do something
     #modify pricelist somehow
     pricelist[0] = 1
     return pricelist


#pass the new modified pricelist to other function
def function200(pricelist):
    #do anything you need



#in your main() :
mypricelist = [1,2,3]
mypricelist = function1(mypricelist)
function200(mypricelist)

答案 2 :(得分:1)

  

基本上我有一个应用程序将值发送给另一个   功能...

这是一个古玩句子,因为你不能将值“发送”给一个函数,而不是常规函数。您可以将值发送到与函数不同的协程。

def grep(pattern):
    print 'Looking for %s' % pattern
    while True:
        line = (yield)
        if pattern in line:
            print line,

g = grep('python')
g.next()
g.send('python generators rock!')

在关于python生成器的这个小小的旅行之后,装饰者可以做你需要的东西,但我不明白你需要什么。

>>> def func(pricelist):
...     print(pricelist)
... 
>>> def func2(f):
...     def wrapper(pricelist):
...         pricelist.append('cucu')
...         return f(pricelist)
...     return wrapper
... 
>>> func([1, 2, 3])
[1, 2, 3]
>>> func = func2(func)
>>> func([1, 2, 3])
[1, 2, 3, 'cucu']
>>>

但请告诉我们您需要的更多信息。