请帮助我,因为我是新当我调用这个函数的list1
的原始值更改到Python
def mystery(list1):
list1[0] , list1[1] = list1[1], list1[0]
list1 = [7,82,44,23,11]
mystery(list1)
print(list1) #prints [82, 7, 44, 23, 11]
它如何改变全球list1
的价值,如果我改变我的功能
def mystery(list1):
list1 = list1 + list1[2:5]
然后我得到list1
的全球价值,而不是更新的一个。
究其原因列表1正在发生变化是因为你实际上是修改函数内的列表对象。
这真的有全局/局部变量什么待办事项,如果你改名为参数的函数里面别的东西,并在列表1还通过了,列表1将被修改。
如果你想返回一个新的列表,你需要首先创建列表的副本,有很多方法可以做到这一点。 list(list1)
是单向的。然后return
在函数的最后名单。
如果我理解你的问题,你需要一些更多的价值实际上追加到列表中的传递,使用qazxsw POI添加到列表的末尾。
既然你正在修改的列表本身,它会在更大的范围内改变。
但它仍然没有使用全球范围内,因为你仅仅使用与在本地范围相同名称的变种。
也许只是返回列表?
list1.append(...)
列表是在Python可变对象,所以如果你传递给一个函数列表,你对函数内部的名单将处处体现的所有更改/全球
如果你传递一个可变对象进入的方法,该方法获取对同一对象的引用,你可以把它发生变异,你的心脏的喜悦,但如果你重新绑定方法中的引用,外部范围将对此一无所知,并经过大功告成,外部引用仍然指向原来的对象。
如果传递不可变的对象的方法,仍不能重新绑定外部引用,并且可以甚至不发生变异的object.def mystery(list1):
return list1 + list1[2:5]
list1 = [7,82,44,23,11]
list1 = mystery(list1)
print(list1)
在python,将值分配给像[more details here]可变装置正在创建在存储器中的对象的值5。现在a = 5
是该对象保持5的链路(通俗地说)。如果您现在更改a
,说a
,这为在内存别处串a = "something else"
一个新的对象,现在"something else"
指向这一点。这就是为什么你会得到改变蟒蛇变量的数据类型。
当你传递的东西一个Python函数,该链接是通过在一个。所以,当你调用a
,原链接mystery(list1)
传递。因此改变在list1
元素意味着你分配一个新的价值,在原有list1
特定元素。不管你是在这种情况下,内部或功能list1
之外,因为你将使用您创建访问内部mystery()
元素原始链接去改变它。变化发生在list1
内; list1
没有得到重新分配。
然而,当你做你的list1
功能list1 = "something new"
里面,要创建哪些是本地函数的函数内一个新的变量mystery()
。你是不是改变原有list1
。
通过可变对象成一个函数,然后修改该对象的函数内部将具有直接修改对象相同的效果。
list1
这是因为直接运行list1 = [1,2,3]
def func(list1):
list1[0] = 5
>>>list1
[5,2,3]
同样有效
然而,如果你传递一个不可变对象到一个函数,如元组,它不会支持项目assignement list1[0] = 5
。所以,你需要建立一个新的不可变对象,并将其返回。
TypeError: 'tuple' object does not support item assignment
把它在功能上,
>>> tup1 = (1,2,3) # doing tup1[0] = 5 will cause TypeError
>>> tup2 = tup1 + (5,)
>>> tup2
(1, 2, 3, 5)