如果Python中的字符串是不可变的,为什么我可以更改函数中的字符串?

2024-09-27 00:22:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Python新手,正在编写一个函数来更改字符串中所有字符的大小写。函数本身称为swapcase(),我在自己的函数中使用库函数swapcase()。下面是我用来测试函数的代码:

print(swapCases("HoLa"))

在第一种情况下,我的函数是:

def swapCases(s):
    for i in range(len(s)):
        s[i] = s[i].swapcase()
    return s

当我运行这段代码时,我从编译器得到一条消息:“str object不支持item赋值。”我搜索了这条消息,它说Python中的字符串是不可变的,因此不能更改。但是,当我将函数更改为:

def swapCases(s):
    s = s.swapcase()
    return s

这个函数正是我想要的,测试输出“hOlA”。如果字符串在Python中是不可变的,为什么这样做呢?不变不意味着我不能改变它们吗?你知道吗


Tags: 函数字符串代码消息returndef情况字符
2条回答

函数没有修改字符串对象。它正在修改分配给它的名称。当你直接赋值时,像这样

s = "abc"
s[2] = "z"

…您说的是“将这个字符串对象中的第三个字符改为'z'。另一方面,如果赋值两次,就像这样

s = "abc"
s = "abz"

…您说的是“更改名称,s,以引用一个新的字符串对象。”这适用于它是作为局部变量(如上所述)还是作为函数参数创建的。你知道吗

通过将它赋给变量s,就是在重新赋s。这样就消除了对旧字符串“HoLa”的引用,并用对从s.swapcases()返回的字符串的引用来替换它

在原来的例子中,您试图逐个索引修改字符串索引。这样做将改变现有的引用,这是不允许的。这就是不变的含义。你知道吗

相关问题 更多 >

    热门问题