具有不同文件和在函数之间传递变量的类

时间:2012-10-02 12:14:53

标签: python

如何将多个变量传递给另一个文件中的函数?

我注意到有些文件只有函数(它们被分组在单独的文件中)。例如,一个文件来控制安装(具有新安装,更新安装等功能......),另一个用于授予访问权限(创建新用户,删除用户,更新用户)。这些功能收到相当数量的变量,举个例子:

access_tool.add_user(cur,con,env,family,iserver,version,login,
                           password,prefix,proxyUser,proxyPass,
                           proxyServer,user,pass)

因此,access_tool(文件)和函数(get_add_info)从另一个文件接收这些变量,这些变量是动态的(来自数据库查询的结果)。如何优雅地将这些值传递给另一个文件中的函数?

示例:

我们有两个重要文件:

  1. a.properties - 其中包含数据库信息和凭据
  2. mainfile.py - 调用执行函数的主文件,例如:
    • add-user ENV newuser newuserpass
  3. add-user从文件access_tool.py中调用一个名为add_user的函数。

    mainfile.py的作用(对于此用户创建示例)取决于通过输入发送的环境,它将对数据库进行查询以选择要添加用户的X服务器,并将结果存储到vars(用于数组循环):

    cur,con,env,family,iserver,version,login,password,prefix,proxyUser,proxyPass,proxyServer
    

    因此,这些变量将从循环,5,10或更多服务器接收添加。唯一的静态变量是newuser和newuserpass(从输入接收)

    我唯一的问题是决定如何将变量传递(或共享)到另一个文件的函数中。

    有些人从工作中建议我将所有文件保存在同一个文件中,而不是每个类都有很多文件,只需要有一个包含所有类的文件。

3 个答案:

答案 0 :(得分:2)

Python中文件的概念含糊不清。短语'来自文件的变量'并不意味着什么。您必须了解这些变量的实例化方式以及它们的范围。

Python中的值不存在于文件中,它们存在于内存中,并且由变量指向。

对于采用大量参数的函数,通常使用命名参数:

def fun(**args):
  param1 = args.get('param1', 'default_value')
  param2 = ... # etc

fun(param1='val1', param2 = 'val2')

这可能是您正在寻找的优雅:)

所以你的代码可能如下所示:

def main():
  #initialization 
  import access_tool
  con = database_connection()
  servers = query_database_for_servers()

  for server in servers:
    #assume server is a dict of values
    access_tool.add_user ( **server )

您的add_user功能可能会被修改为:

def add_user ( **params ):
   # connect to params['server'] using params['env']
   # and add user with other params[]

答案 1 :(得分:0)

这取决于值的存储方式。如果是从配置文件中读取它们并将配置值存储为字典,您可以使用字典解压缩将值传递给方法调用。例如。 access_tool.add_user(**settings)

答案 2 :(得分:0)

如果你想在许多函数之间传递变量,我建议你看看传递对象。 See my answer here:。 如果你想做更复杂的事情,你一定要看模块ConfigParser,