Python中列表的append方法返回值问题:ll = [].append(1) 会引发什么问题?


只要打出这行,就会一直这样,然后内存也会一直增加。
Python中列表的append方法返回值问题:ll = [].append(1) 会引发什么问题?
哪位兄弟来简单解释一下原因啊,是从对象,引用,这方面分析吗,或者是文档
ll = [].append(1) 这个操作会让 ll 变成 None,而不是你期望的 [1]。
list.append() 方法会直接修改原列表,它本身不返回任何值(在Python中就是返回 None``)。所以当你把[].append(1)的结果赋值给ll时,实际上是把None赋给了ll`。
如果你想要创建包含一个元素的列表,应该分开写:
ll = []
ll.append(1)
# 或者直接 ll = [1]
这样 ll 才是 [1]。
总结:别把 append() 的返回值当列表用。
会不会是 pycharm 的问题
LL = []
LL.append(1)
print(LL)
应该是这个问题了,所以这是个错误的写法,丢人了😂
>>> ll = [1]
>>> lll = ll.append(1)
>>> lll
>>> ll
[1, 1]
愚人节?
所以内存一直增加是什么鬼👻?
愚人节
Python 函数默认返回 None,所有函数都有返回值
内存真的一直增加了,我猜是 pycharm 的问题了
这是我讨厌 ide 的原因之一。。。他们为了各种各样“方便”的功能总是在我写 code 的时候背着我做些我不知道的事情。。。
我表述有误
这跟 ide 似乎无关把 ide 也只是调用了官方的调试器等功能 本身并没有做什么 hack 操作
ide 问题 前几天我也碰到了 和代码也没什么关系
https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions
以上是文档,我们摘取 append 部分<br>list.append(x)<br>Add an item to the end of the list. Equivalent to a[len(a):] = [x].<br>
首先: 我们使用[].append 是意味着空的 list 的尾部添加 value,这个是其功能。
然后:文档中给出了样例的,使用[].append[x] 其实等于使用 a[len(a):]=[x],这个操作已经是一个语句了, 但是似乎一个语句包含另一个语句的时候, 还是合理的<br>In [14]: l = l[len(l):]=[x]<br><br>In [15]: l<br>Out[15]: [1, 1]<br>
这个现象显然不能解释,于是又看了源码(这个我以后探究一下是什么问题)<br>class list(object):<br> """<br> list() -> new empty list<br> list(iterable) -> new list initialized from iterable's items<br> """<br> def append(self, p_object): # real signature unknown; restored from __doc__<br> """ L.append(object) -> None -- append object to end """<br> pass<br><br> def clear(self): # real signature unknown; restored from __doc__<br> """ L.clear() -> None -- remove all items from L """<br> pass<br><br> def copy(self): # real signature unknown; restored from __doc__<br> """ L.copy() -> list -- a shallow copy of L """<br> return []<br><br> def count(self, value): # real signature unknown; restored from __doc__<br> """ L.count(value) -> integer -- return number of occurrences of value """<br> return 0<br><br> def extend(self, iterable): # real signature unknown; restored from __doc__<br> """ L.extend(iterable) -> None -- extend list by appending elements from the iterable """<br> pass<br><br> def index(self, value, start=None, stop=None): # real signature unknown; restored from __doc__<br> """<br> L.index(value, [start, [stop]]) -> integer -- return first index of value.<br> Raises ValueError if the value is not present.<br> """<br> return 0<br><br>
源码的中的注释很明显解释了这个问题,就是说在 list 对象中 append, extend, clear 这些方法都是在逻辑完成之后, 实际返回的都是 None。
lz 是写 js 的吧
我被反向 #想当然# 过…
你可以给 PyCharm 提 issue 了。
ide 不做额外的事情那怎么提供什么自动补全、跨文件查找等等这些功能。。。就像楼主的问题 不就是 PyCharm 更新 index 的功能有问题吗

