Как заставить функции знать друг о друге при вызове, например, при использовании пакета ElementTree - PullRequest
0 голосов
/ 02 мая 2020

Если заглавный вопрос не сформулирован четко, приведенный ниже код объяснит это лучше. Этот код работает нормально:

#!/usr/bin/python3
import sys
import os
import xml.etree.ElementTree as ET
from xml.etree.ElementTree import *

country_arg = 'usa'
transport_name_arg = 'train'
route_data = "some route"

world = ET.Element('world')
country = ET.SubElement(world, 'country')
country.text = country_arg
event = ET.SubElement(world, 'event')
transport = ET.SubElement(event, 'transport')
transport.set('name',transport_name_arg)
route = ET.SubElement(event, 'route')

comment = Comment(route_data)
route.append(comment)
c = ET.SubElement(event, 'c')

tree = ET.ElementTree(world)
tree.write("filename.xml")

Однако мне нужно создавать и использовать функции, вызывающие их в разных местах моего реального сценария. Я думал, что когда функция запускается, то же самое, что и блок кода, который она представляет. Однако, похоже, что результаты function_1 не хранятся в памяти? Здесь тот же сценарий, что и выше, но код разделен на две функции, и он не работает, как будто результаты function_1 теряются при вызове function_2:

#!/usr/bin/python3
import sys
import os
import xml.etree.ElementTree as ET
from xml.etree.ElementTree import *

country_arg = 'usa'
transport_name_arg = 'train'
route_data = "some route"

def function_1():
    world = ET.Element('world')
    country = ET.SubElement(world, 'country')
    country.text = country_arg
    event = ET.SubElement(world, 'event')
    transport = ET.SubElement(event, 'transport')
    transport.set('name',transport_name_arg)
    route = ET.SubElement(event, 'route')

def function_2():
    comment = Comment(route_data)
    route.append(comment)
    c = ET.SubElement(event, 'c')

function_1()
function_2()

tree = ET.ElementTree(world)
tree.write("filename.xml")

Ошибка:

Traceback (most recent call last):
  File "test-WITH-functions-xml.py", line 26, in <module>
    function_2()
  File "test-WITH-functions-xml.py", line 22, in function_2
    route.append(comment)
NameError: name 'route' is not defined

1 Ответ

0 голосов
/ 02 мая 2020

Этот код работает, спасибо всем, хороший опыт обучения:

#!/usr/bin/python3
import sys
import os
import xml.etree.ElementTree as ET
from xml.etree.ElementTree import *

country_arg = 'usa'
transport_name_arg = 'train'
route_data = "some route"

def function_1():
    global world
    global country
    global event
    global transport
    global route
    world = ET.Element('world')
    country = ET.SubElement(world, 'country')
    country.text = country_arg
    event = ET.SubElement(world, 'event')
    transport = ET.SubElement(event, 'transport')
    transport.set('name',transport_name_arg)
    route = ET.SubElement(event, 'route')

def function_2():
    global comment
    global c
    comment = Comment(route_data)
    route.append(comment)
    c = ET.SubElement(event, 'c')

function_1()
function_2()

tree = ET.ElementTree(world)
tree.write("filename.xml")
...