2017-10-08 226 views
0

我有一个得到了需要一定的变数代码为喜欢分享:Python的 - 如何共享功能之间的变量(不使用全局变量)

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) 

真的想你的帮助!

+1

您只需添加另一个参数 –

+0

从'example'返回它,将它传递给'exampe2'。或者如果前者调用后者,直接传递它。 – jonrsharpe

回答

0

正如评论中所说;你可以做一个传递参数的方法which'd这样的应用:

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

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

或者,你可以很容易地整合这两个功能,你可以在exampleexample2将二者结合起来arg参数。

0

这个例子可以帮助我猜

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

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

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

> from example one 

否则你可以要求全球和使用示例2函数内这一请求varable。但是,您只需在example2之前执行example1即可。或者,您可以返回example1中的请求,并将example1返回值分配给example2中的另一个变量。

+0

如果交换函数调用,则不会运行,因为属性'example1.request'需要通过创建一个新的函数对象来实例化。另外,这是否真的是Pythonic?依赖于真正成为Python中的对象的函数看起来很复杂。 – plan

0

只要将它作为返回值和参数传递?这是一项功能,因为它可以让您尽可能保持本地化。如果你的函数需要大量的参数或者提供很多的输出,通常它可以被分解成多个函数(一个函数应该理想地做一个明显分离的东西并且被命名为这样的函数)。

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

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

注意,我返回的字典config,即使它是没有必要的,因为类型的字典在Python可变的。这只是在代码中明确表示我正在修改它。现在我们可以使用配置:

def exampe2(arg, config): 
    arg = config['arg'] 
    ...do stuff.. 
相关问题