2012-10-02 61 views
1

如何將多個變量傳遞給不同文件中的函數?具有不同文件並在函數之間傳遞變量的類

我注意到有些文件只有函數(它們被分組在單個文件中)。例如,一個用於控制安裝的文件(具有新安裝,更新安裝等功能),另一個用於授予訪問權限(創建新用戶,刪除用戶,更新用戶)。並且這些功能會收到相當數量的變量中,作爲例子:

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

所以,access_tool(文件)和功能(get_add_info)接收那些VARS從另一個文件,和那些VARS是動態的(結果來自數據庫查詢)。我如何將這些值優雅地傳遞給不同文件中的函數?

例子:

我們有2個重要的文件:

  1. a.properties - 包含數據庫信息和憑據
  2. mainfile.py - 主文件,調用例如執行功能:
    • 添加用戶ENV newuser newuserpass

添加用戶從名爲add_user的文件access_tool.py中調用函數。

根據通過輸入發送的環境,mainfile.py所做的是什麼(對於用戶創建的這個示例),它將對數據庫執行查詢以選擇X服務器來添加用戶,並且它將存儲結果入VARS(要使用的成陣列循環):

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

所以,那些VARS將收到來自環,5個,10個或更多服務器來添加。靜態唯一的變量是newuser和newuserpass(接收來自輸入)

我唯一的問題是做出關於如何將變量傳遞(或共享)到另一個文件上的函數的決定。

有些工作的人建議我把所有的東西都保存在同一個文件中,而不是每個類都有很多文件,只需要一個文件包含所有的類。

+0

您的英語水平高於平均值:) – keyser

+0

@Thales,高於StackOverflow用戶的平均值。 – Oz123

+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[] 
+0

更新與更多的信息有關的問題 –

0

這取決於值的存儲方式。如果例如它們是從配置文件讀取的,並將配置值存儲爲字典,您可以使用字典解包將值傳遞到方法調用中。例如。 access_tool.add_user(**settings)

0

如果你想在許多函數之間傳遞變量,我建議你看看傳遞的對象。 See my answer here:。 如果你想做更復雜的事情,你一定要看模塊ConfigParser,