python - 如果 Python 中的字符串是不可变的,为什么我可以更改函数中的字符串?
问题描述
我是 Python 新手,我正在编写一个函数来更改字符串中所有字符的大小写。该函数本身称为 swapCases(),我在自己的函数中使用库函数 swapcase()。这是我用来测试我的功能的代码:
print(swapCases("HoLa"))
在第一种情况下,我的函数内容如下:
def swapCases(s):
for i in range(len(s)):
s[i] = s[i].swapcase()
return s
当我运行此代码时,我从编译器收到一条消息:“str 对象不支持项分配。” 我用谷歌搜索了这条消息,它说 Python 中的字符串是不可变的,因此无法更改。但是,当我将功能更改为此:
def swapCases(s):
s = s.swapcase()
return s
该功能完全符合我的要求,并且测试打印出“hOlA”。如果字符串在 Python 中是不可变的,那么为什么会这样呢?不可变不意味着我不能改变它们吗?
解决方案
通过将其分配给变量 s,您正在重新分配 s。这摆脱了对旧字符串“HoLa”的引用,并将其替换为对从 s.swapcases() 返回的字符串的引用
在您原来的情况下,您正试图按索引修改字符串索引。这样做会改变现有的引用,这是不允许的。这就是不可变的意思。
推荐阅读
- vb6 - VB6 无法向项目添加新表单
- sql - 如何使用 SQL 从数据库中获取一条记录并获取该记录的所有警告?
- css - GET http://localhost:8080/static/css/1.e8747c0d.chunk.css net::ERR_ABORTED 404
- vb.net - WCF 抛出 System.ServiceModel.FaultException:访问被拒绝
- pipe - 使用标准输入的交互式 shell
- sql - 01-JAN-15 00:00:00 在 SQL Developer 中使用 SQL 更改为 01-JAN-2015
- css - 在 css 中完成的元素分组,改变了基于断点分组的元素数量
- c# - 需要从存储库层访问登录用户
- java - 具有复合主键的@OneToMany 映射未按预期工作
- android - 关于Vulkan初始化/去初始化和Android App生命周期事件的问题