gpt4 book ai didi

python - 在python中的函数中声明全局变量

转载 作者:行者123 更新时间:2023-11-28 23:00:59 25 4
gpt4 key购买 nike

我创建的程序将用于解析 xml 文件并将解析数据放入数据库中。虽然我的代码现在可以正常运行,但我的讲师在我的代码中有评论,顺便说一句,这是我的代码:

import os
import time
import MySQLdb
import ConfigParser
import elementtree.ElementTree as ET


def update_database(article_code, date_received, s100rsd, remark_text, db):
cur = db.cursor()
try:
cur_query = cur.execute("""INSERT INTO tblS100CurrentListing """
"""(article_Code, dateReceived, s100RSD, remarks) VALUES (%s, %s, %s, %s) """
"""ON DUPLICATE KEY UPDATE revisedRSD = %s, remarks = %s """,
(article_code, date_received, s100rsd, remark_text, s100rsd, remark_text))
db.commit()
except MySQLdb.Error, e:
print "An error has been passed %s" %e
db.rollback
rows_affected = cur.rowcount
if rows_affected > 0:
print "Changes made in the database"
else:
print "Nothing is change in the database"


def parse_xml(source_path, xml_file):
# Alvin: !!! globals?
global article_code
global date_received
global s100rsd
global remark_text
article_code = xml_file.split('.')[0]
tree = ET.parse(xml_file)
root = tree.getroot()
order = root.find('order')
order_time = order.find('time')
year = order_time.attrib['yr']
month = order_time.attrib['month']
day = order_time.attrib['day']
hour = order_time.attrib['hr']
min = order_time.attrib['min']
sec = order_time.attrib['sec']
date_received = year + month + day + hour + min + sec
due_date = order.find('due-date')
due_date_time = due_date.find('time')
yr = due_date_time.attrib['yr']
month = due_date_time.attrib['month']
day = due_date_time.attrib['day']
s100rsd = "%s-%s-%s" %(yr, month, day)
item_info = order.find('item-info')
item_remarks = item_info.find('item-remarks')
item_remark_list = item_remarks.findall('item-remark')
item_remark_len = len(item_remark_list) - 1
item_remark = item_remark_list[item_remark_len]
remark = item_remark.find('remark')
remark_text = remark.text


def main():
config = ConfigParser.ConfigParser()
config.readfp(open('part4b.ini'))
server = config.get('main', 'Server')
port = config.get('main', 'Port')
port = int(port)
schema = config.get('main', 'Schema')
table = config.get('main', 'Table')
user = config.get('main', 'User')
password = config.get('main', 'Password')
source_path = config.get('main', 'filepath')

db = MySQLdb.connect(server, user, password, schema, port)
xml_list = os.listdir(source_path)
for xml_file in xml_list:
if xml_file.endswith('.xml'):
parse_xml(source_path, xml_file)
update_database(article_code, date_received, s100rsd, remark_text, db)

db.close()

print "This will close after 2 seconds . ."
time.sleep(2)


if __name__ == '__main__':
main()

在 parse_xml 函数中,他不希望我在其中使用全局变量。如何在不将其声明为全局变量的情况下在 main 中使用这些变量?

感谢您的帮助。

最佳答案

从函数中返回它们

例如

return article_code, date_received, s100rsd, remark_text

这实际上是返回一个包含 4 个项目的元组

你可以像这样在另一端提取它们

article_code, date_received, s100rsd, remark_text = parse_xml(...)

关于python - 在python中的函数中声明全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11465186/

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