Skip to main content
 首页 » 编程设计

python之使用 var 从函数 A 到函数 B

2025年05月04日12xxx_UU

在此示例代码中,我想在函数 connect_and_query 中使用 function db_properties 上的变量。为此,我选择了 return。因此,使用该策略,代码可以完美运行。但是,在此示例中,db.properties 文件只有 4 个变量。也就是说,如果属性文件有 20 多个变量,我是否应该继续使用 return?或者是否有最优雅/更干净/正确的方法来做到这一点?

import psycopg2 
import sys 
from ConfigParser import SafeConfigParser 
 
class Main: 
 
    def db_properties(self): 
        cfgFile='c:\test\db.properties' 
        parser = SafeConfigParser() 
        parser.read(cfgFile) 
        dbHost = parser.get('database','db_host') 
        dbName = parser.get('database','db_name') 
        dbUser = parser.get('database','db_login') 
        dbPass = parser.get('database','db_pass') 
        return dbHost,dbName,dbUser,dbPass 
 
    def connect_and_query(self): 
        try: 
            con = None 
 
            dbHost=self.db_properties()[0] 
            dbName=self.db_properties()[1] 
            dbUser=self.db_properties()[2] 
            dbPass=self.db_properties()[3] 
 
            con = None 
            qry=("select star from galaxy") 
            con = psycopg2.connect(host=dbHost,database=dbName, user=dbUser, 
                                   password=dbPass) 
            cur = con.cursor() 
            cur.execute(qry) 
            data = cur.fetchall() 
            for result in data: 
                qryResult   = result[0] 
                print "the test result is : " +qryResult 
        except psycopg2.DatabaseError, e: 
                print 'Error %s' % e 
                sys.exit(1) 
        finally: 
            if con: 
                con.close() 
 
operation=Main() 
operation.connect_and_query() 

我使用的是 python 2.7 问候

请您参考如下方法:

如果有很多变量,或者你想方便地改变正在读取的变量,返回一个字典。

def db_properties(self, *variables): 
    cfgFile='c:\test\db.properties' 
    parser = SafeConfigParser() 
    parser.read(cfgFile) 
    return { 
        variable: parser.get('database', variable) for variable in variables 
    } 
 
def connect_and_query(self): 
    try: 
        con = None 
        config = self.db_properties( 
            'db_host', 
            'db_name', 
            'db_login', 
            'db_pass', 
        ) 
        #or you can use: 
        #   variables = ['db_host','db_name','db_login','db_pass','db_whatever','db_whatever2',...] 
        #   config = self.db_properties(*variables) 
        #now you can use any variable like: config['db_host'] 
        # ---rest of the function here--- 

编辑:我重构了代码,因此您可以在调用函数本身中指定要加载的变量。