【发布时间】:2019-07-24 15:46:46
【问题描述】:
我有两组代码用于获取列表 A=[1,2,3] 并将 A 更改为 [1,2,3,4]。
这是第一个代码,然后是打印的内容。
A=[1,2,3]
A.append(4)
print(type(A))
print(A)
<class 'list'>
[1, 2, 3, 4]
第一个代码有效。
这是第二个代码,然后是它打印的内容。
A=[1,2,3]
A=A.append(4)
print(type(A))
print(A)
<class 'NoneType'>
None
第二个代码返回无。
- 对此有何解释以及为什么第二个代码“错误”?
- 如果 f 是一个函数,似乎 x=f(x,y) 没问题,但 x=x.method(y) 完全不同。
例如,假设我想将“不不不”变成“是的,是的”:
text='no no no'
text=text.replace('no','yeah')
text
'yeah yeah yeah'
text='no no no'
text.replace('no','yeah')
text
'no no no'
所以现在情况发生了逆转。所以你只需要了解哪种方法对每种方法都是正确的吗?
【问题讨论】:
-
.append()是就地操作。它修改原始列表并返回None。 -
我认为“就地”是我不太了解的东西,虽然我以前听说过这个词。
-
“就地”操作基本上定义为修改调用方法的原始对象的操作。将此与类似
.replace()字符串的方法进行对比,后者返回修改后的str对象,而不是更改原始对象。 -
所以如果方法是.replace,那second风格的代码是正确的,而第一种风格的代码什么都不做?
标签: python python-3.x methods