【问题标题】:Variables becoming Type:None in Python变量变为类型:Python 中的无
【发布时间】: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


【解决方案1】:

当您输入A=A.append(4) 时,您将A.append(4) 的返回值分配给变量A,即None

append() 函数是一个就地函数,这意味着它会在您调用它时修改您的原始列表 - 它不会返回修改后的列表。

更准确地说,当你执行A=A.append(4)这一行时,

  1. 调用append(4)函数,A的值为[1, 2, 3, 4]
  2. ...然后append(4) 返回的值(none)立即分配给 A。

append() 对您的列表所做的任何事情都将被丢弃,因为该行最终计算结果为 A=None

这与replace() 不同,后者确实返回字符串的新修改值。要回答您的问题,是的,您只需要逐个查看文档以了解每个功能的正确用法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-15
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    相关资源
    最近更新 更多