【问题标题】:Why do methods on lists and strings work differently in python为什么列表和字符串上的方法在 python 中的工作方式不同
【发布时间】:2016-06-21 18:26:59
【问题描述】:

我在 Python 中注意到了一个我想了解但我不知道用什么词来描述它或查找文档的现象。

比较以下序列:

1)

a = ['my', 'nice', 'new', 'list']
a.reverse()
print(a)

>>> ['list', 'new', 'nice', 'my']

2)

b = 'my nice new string'
b.swapcase()
print(b)

>>> 'my nice new string'

为什么,对于第二个序列,为了让 print 给出“MY NICE NEW STRING”,我必须写

b = b.swapcase()
print(b)

?或者相反,为什么我不必在第一个序列中的 print(a) 之前写 a = a.reverse() ?为什么其中一些方法需要显式分配给变量而其他方法隐式存储在使用它们的变量中的原理原因是什么?

【问题讨论】:

    标签: python variables methods


    【解决方案1】:

    列表是可变数据结构的引用变量。调用它的 reverse 方法会“就地”反转列表。

    swapcase 方法返回一个新字符串,因为字符串在 Python 中是不可变的

    【讨论】:

      【解决方案2】:

      一些函数修改列表,一些返回修改后的版本。例如.reversed() 而不是.reverse() 将返回一个反向排序的列表而不是修改列表本身。对于列表、字典等可变对象,您可以选择修改对象本身。

      您不能拥有修改原始字符串的.swapcase() 版本,因为字符串是不可变的:

      https://docs.python.org/2/reference/datamodel.html

      值可以改变的对象称为可变对象;对象 值一旦创建就不可更改,称为不可变。 (这 包含对 a 的引用的不可变容器对象的值 可变对象可以随着后者的值改变而改变;然而 容器仍然被认为是不可变的,因为 它包含的对象不能更改。所以,不变性不是 与具有不可更改的值严格相同,它更微妙。) 对象的可变性由其类型决定;例如, 数字、字符串和元组是不可变的,而字典和 列表是可变的。

      【讨论】:

        猜你喜欢
        • 2013-12-23
        • 2011-02-14
        • 1970-01-01
        • 1970-01-01
        • 2023-02-25
        • 2012-12-25
        • 2021-08-03
        • 1970-01-01
        相关资源
        最近更新 更多