1

如何将许多变量传递给不同文件中的函数?

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

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

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

例子:

我们有 2 个重要文件:

  1. a.properties - 包含数据库信息和凭据
  2. mainfile.py - 主文件,调用以执行功能,例如:
    • 添加用户 ENV newuser newuserpass

add-user 从文件 access_tool.py 中调用一个名为 add_user 的函数。

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

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

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

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

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

4

3 回答 3

2

Python 中文件的概念是模糊的。短语“文件中的变量”没有任何意义。您必须了解这些 var 是如何实例化的以及它们的作用域是什么。

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[]
于 2012-10-02T12:26:47.400 回答
0

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

于 2012-10-02T12:22:56.217 回答
0

如果你想在许多函数之间传递变量,我建议你看看传递对象。 在这里查看我的答案:。如果你想做更复杂的事情,你绝对应该看看模块ConfigParser 。

于 2012-10-02T12:24:06.790 回答