Python - 如何在函数之间共享变量(不使用全局变量)

时间:2017-10-08 14:25:55

标签: python python-2.7 function

我得到的代码需要共享某个变量,如:

def example(arg):
    req = urllib2.Request(r'{}'.format(arg))
    ...
def exampe2(arg):
# i need this func to access req
# i think i can't use req as a global var since the program might need to get imported and it would run from main() (which is again a function)

非常希望得到你的帮助!

3 个答案:

答案 0 :(得分:0)

如评论中所述;你可以做一个按参数传递的方法,如下所示:

def example2(arg, req):
    ....

def example(arg):
    req = urllib2.Request(r'{}'.format(arg))
    ...
    return example2(..., req)

或者您可以轻松地集成这两个功能,因为您可以合并argexample上的两个example2参数。

答案 1 :(得分:0)

这个例子可能对我有帮助

def example1(arg):
    example1.request = "from example1"
    ....

def example2(arg):
    print(example1.request)

example1("arg1")
example2("arg2")

> from example one

否则你可以将请求作为全局请求并在example2函数中使用该请求varable。但是你需要做的就是在example2之前执行example1。或者,您可以从example1返回请求,并将example1返回值分配给example2中的另一个变量。

答案 2 :(得分:0)

只是将其作为返回值和参数传递?这是一项功能,因为它允许您将内容保持在本地。如果你的函数需要大量的参数或提供大量的输出,那么它通常表明它可以被分解成多个函数(理想情况下,一个函数应该做一个明确分离的事情并且这样命名)。

在某些情况下,当然,您希望传递一些数据,例如配置选项:您可能会为此创建一些新对象,但为什么不仅仅是字典?

def make_request(arg, config):
    req = urllib2.Request(r'{}'.format(arg))
    config['req'] = req
    return config

请注意,我返回了dict config,即使它没有必要,因为dicts在Python中是可变的。这只是在代码中清楚地表明我正在修改它。现在我们可以使用config:

def exampe2(arg, config):
    arg = config['arg']
    ...do stuff..