gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 07:10:38 25 4
gpt4 key购买 nike

在此示例代码中,我想在函数 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---

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

关于python - 使用 var 从函数 A 到函数 B,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12730524/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com