如何将多个变量传递给另一个文件中的函数?
我注意到有些文件只有函数(它们被分组在单独的文件中)。例如,一个文件来控制安装(具有新安装,更新安装等功能......),另一个用于授予访问权限(创建新用户,删除用户,更新用户)。这些功能收到相当数量的变量,举个例子:
access_tool.add_user(cur,con,env,family,iserver,version,login,
password,prefix,proxyUser,proxyPass,
proxyServer,user,pass)
因此,access_tool(文件)和函数(get_add_info)从另一个文件接收这些变量,这些变量是动态的(来自数据库查询的结果)。如何优雅地将这些值传递给另一个文件中的函数?
示例:
我们有两个重要文件:
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(从输入接收)
我唯一的问题是决定如何将变量传递(或共享)到另一个文件的函数中。
有些人从工作中建议我将所有文件保存在同一个文件中,而不是每个类都有很多文件,只需要有一个包含所有类的文件。
答案 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,。