Python 中的局部和全局变量使用
local and global variable usage in Python
我正在测试反向功能。我的代码如下:
def deep_reverse(L):
new_list = []
for element in L:
new_list += [element[::-1]]
L = new_list[::-1]
L = [[1, 2], [3, 4], [5, 6, 7]]
deep_reverse(L)
print(L)
我希望我的输出 L 可以像 [[7, 6, 5], [4, 3], [2, 1]],但它只在我的函数中起作用。
我无法在全局变量中更改它。我怎样才能让它发生?谢谢
L
只是一个局部变量,给它赋值一个新的对象不会改变原来的列表;它所做的只是将函数中的名称 L
指向另一个对象。参见 Ned Batchelder's excellent explanation about Python names。
您可以通过分配给 [:]
标识切片来替换列表 L
引用中 中的所有元素:
L[:] = new_list[::-1]
但是,像列表这样的可变序列有一个 list.reverse()
method,因此您可以就地反转列表:
L.reverse()
对每个子列表执行相同的操作:
def deep_reverse(L):
""" assumes L is a list of lists whose elements are ints
Mutates L such that it reverses its elements and also
reverses the order of the int elements in every element of L.
It does not return anything.
"""
for element in L:
element.reverse()
L.reverse()
我正在测试反向功能。我的代码如下:
def deep_reverse(L):
new_list = []
for element in L:
new_list += [element[::-1]]
L = new_list[::-1]
L = [[1, 2], [3, 4], [5, 6, 7]]
deep_reverse(L)
print(L)
我希望我的输出 L 可以像 [[7, 6, 5], [4, 3], [2, 1]],但它只在我的函数中起作用。
我无法在全局变量中更改它。我怎样才能让它发生?谢谢
L
只是一个局部变量,给它赋值一个新的对象不会改变原来的列表;它所做的只是将函数中的名称 L
指向另一个对象。参见 Ned Batchelder's excellent explanation about Python names。
您可以通过分配给 [:]
标识切片来替换列表 L
引用中 中的所有元素:
L[:] = new_list[::-1]
但是,像列表这样的可变序列有一个 list.reverse()
method,因此您可以就地反转列表:
L.reverse()
对每个子列表执行相同的操作:
def deep_reverse(L):
""" assumes L is a list of lists whose elements are ints
Mutates L such that it reverses its elements and also
reverses the order of the int elements in every element of L.
It does not return anything.
"""
for element in L:
element.reverse()
L.reverse()