Python在PHP中是否有类似的引用?

Python在PHP中是否有类似的引用?,python,Python,我想从XML中获取一些数据,并将其返回到同一个变量中,因此在返回之前我会这样做: for element in response: document = parseString(element) try: element = { 'scopes': document.getElementsByTagNameNS('*', 'Scopes')[0].firstChild.nodeValue, 'address':

我想从XML中获取一些数据,并将其返回到同一个变量中,因此在返回之前我会这样做:

for element in response:
    document = parseString(element)

    try:
        element = {
            'scopes':  document.getElementsByTagNameNS('*', 'Scopes')[0].firstChild.nodeValue,
            'address': document.getElementsByTagNameNS('*', 'XAddrs')[0].firstChild.nodeValue
        }
    except:
        element = False

return response

但是响应仍然包含原始xml数据,而不是解析结果。。。基本上,我希望
元素=…
值返回到
响应
值。

编辑:根据delnan和jonrsharpe改进答案

代码的问题在于,当您循环

for element in response
在每次迭代中,
元素
将指向一个新创建的对象,因为行:

element = {
            'scopes':  document.getElementsByTagNameNS('*', 'Scopes')[0].firstChild.nodeValue,
            'address': document.getElementsByTagNameNS('*', 'XAddrs')[0].firstChild.nodeValue
        }
它所指向的物体仍然是一样的。你可以试试这个

for index,element in enumerate(response):
    document = parseString(element)

    try:
        response[index]= {
            'scopes':  document.getElementsByTagNameNS('*', 'Scopes')[0].firstChild.nodeValue,
            'address': document.getElementsByTagNameNS('*', 'XAddrs')[0].firstChild.nodeValue
        }
    except:
         response[index]= False

return response

假设响应是一个字符串列表,并且您希望用解析的元素dict…替换这些字符串,这很容易。因为列表是可变的容器,所以可以在运行时替换元素。不需要返回列表。。。你传进来的那个已经换了

def convert_response_to_elements(response):
    for index, element_str in enumerate(response):
        document = parseString(element_str)
        try:
            element = {
                'scopes':  document.getElementsByTagNameNS('*', 'Scopes')[0].firstChild.nodeValue,
                'address': document.getElementsByTagNameNS('*', 'XAddrs')[0].firstChild.nodeValue
        }
        except:
            element = False
        response[index] = element

因为响应是一个列表,所以我会使用python。这将创建新列表而不修改旧列表

new_response = [modify_element(element) for element in response]
稍后,如果要删除等于
False
的元素,可以使用函数:

without_false = filter(lambda element: bool(element), new_response)

什么是响应类型?@aisbaa是一个简单的数组
[1,2,3,4,5]
相关,但可能不是重复的:因此,我打赌响应不是一个整数数组。你是说响应是一个字符串列表,你想用dict从字符串中构建的元素替换每个字符串吗?小心!你(和许多其他Python人)称为引用与计算机科学家、C++人和PHP人称为引用无关。语义非常不同。在PHP中,您可以简单地传递值,如
foreach($response as&$element)
,并且不需要任何索引。
element
不会是副本。在每次迭代中,
元素将“指向”列表的当前索引指向的同一对象
response[index]=
然后将列表索引指向一个新对象。如果您使用
enumerate()
?@2rs2ts对其进行迭代,我假设编辑
response
是安全的。它之所以有效,是因为它只改变了已经迭代过的元素。只有当您更改了尚未迭代的内容(例如,删除一个项目,意味着您更改了索引)时,您才会遇到麻烦。简单地替换一个已经迭代过的元素不会破坏列表的迭代。