在Python中使用方法时,何时重新声明变量?

在Python中使用方法时,何时重新声明变量?,python,methods,Python,Methods,在研究CS时,我注意到有些方法需要您更新和保存变量,以便获得所需的效果,而其他方法只是在执行脚本时工作 设置stop_words和listlst的示例: stop_words=stop_words.remove(“whatever”)#返回类型为none的变量 stop_words.remove(“whatever”)#具有从集合中删除单词的预期效果 lst.append(2)#不更新列表 lst=lst.append(2)#更新列表。 当我使用.append()时,我必须重新声明lst变量的

在研究CS时,我注意到有些方法需要您更新和保存变量,以便获得所需的效果,而其他方法只是在执行脚本时工作

设置
stop_words
和list
lst
的示例:

stop_words=stop_words.remove(“whatever”)#返回类型为none的变量
stop_words.remove(“whatever”)#具有从集合中删除单词的预期效果
lst.append(2)#不更新列表
lst=lst.append(2)#更新列表。

当我使用
.append()
时,我必须重新声明
lst
变量的原因是什么?当我想使用
.remove()
时,我就不需要重新声明变量了。

列表是可变的,这意味着调用列表方法本身会使它发生变异。例如,每一个都将在不需要任何重新分配的情况下对列表进行变异

lst = [1, 2, 3]
print(f"Original list: {lst}")
lst.remove(1)
print(f"Updated: {lst}")
lst.append(4)
print(f"Updated: {lst}")
输出:

original list: [1, 2, 3]
Updated: [2, 3]
Updated: [2, 3, 4]
None
这些方法将返回一个
None
值(其唯一目的是改变列表),因此重新分配它是没有意义的

lst = [1, 2, 3]
lst = lst.remove(1)
print(lst)
输出:

original list: [1, 2, 3]
Updated: [2, 3]
Updated: [2, 3, 4]
None

TL;DR-仅当结果对您有用时,才将操作结果分配给变量

在python赋值中,等号右侧的表达式被完全执行并解析为一个匿名对象,然后对左侧进行赋值计算。例如,假设我在右侧执行有效操作,但在左侧执行无效操作。甚至在python意识到左侧有问题并引发异常之前,右侧的附加就已经工作了

>>> lst1 = []
>>> lst2 =[1]
>>> lst1[1] = lst2.append(2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range
>>> lst1
[]
>>> lst2
[1, 2]
这可以通过保留对要验证的对象的单独引用来证明

>>> test_set = {"whatever", "whatever 2"}
>>> stop_words = test_set
>>> stop_words = stop_words.remove("whatever")
>>> repr(stop_words)
'None'
>>> test_set
{'whatever 2'}
>>> stop_words = test_set
>>> stop_words.remove("whatever 2")
>>> stop_words
set()
>>> test_set
set()
列表也会发生同样的情况

>>> test_list = []
>>> lst = test_list
>>> lst = lst.append(2)
>>> repr(lst)
'None'
>>> test_list
[2]
>>> lst = test_list
>>> lst.append(3)
>>> lst
[2, 3]
>>> test_list
[2, 3]

你能发布一个工作示例来说明这个问题吗
lst.append(2)
会更新列表。