我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python中字符串的修改及传参详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python中字符串的修改及传参详解

发现问题

最近在面试的时候遇到一个题目,选择用JavaScript或者Python实现字符串反转,我选择了Python,然后写出了代码(错误的):


#!/usr/bin/env python
#-*-coding:utf-8-*-
__author__ = 'ZhangHe'
def reverse(s):
 l = 0
 r = len(s) - 1
 while l < r:
  s[l],s[r] = s[r],s[l]
  l += 1
  r -= 1
 return s

然后面试官问了两个问题:

(1)可以这样修改字符串的值吗?【我回答的,可以】【回答错误】

(2)传入的参数是地址?还是副本?【我回答的,传值。数字,字符串,元组传值(immutable);list和dict传引用(mutable);】【回答传值,可以直接修改】【回答错误,正确的是传值,immutable】

思考如下

虽然经常使用字符串,但是还真没有研究过这个问题,于是上网搜了一下资料:

Python中的字符串是不可变类型,就是说改变一个字符串的元素需要新建一个新的字符串。

字符串是由独立的字符组成的,也是一种序列,序列的通用操作方法也适用于字符串。

例如:

通过切片操作顺序地访问子串;

通过len()求字符串的长度等;

通过in或not in操作符判断字符串中是否存在某个字符。

Python里面没有字符这个类型,而是用长度为1 的字符串来表示这个概念,当然,这其实也是一个子串。

访问字符串举例:


1 aString = 'Hello World!'
2 print(aString[0])
3 print(aString[1:5])
4 print(aString[6:])

输出:


H
ello
World!

那么如何改变一个字符串呢?

可以通过给一个变量赋值(或者重赋值)的方式“更新”一个已有的字符串。新的值可能与原有值差不多,也可能跟原有串完全不同。

例如:


1 aString = 'Hello World!'
2 aString = aString[:6] + 'Python!'
3 print(aString)
4 aString = 'different string altogether'
5 print(aString)

输出:


Hello Python!
different string altogether

那么如何删除一个字符或字符串呢?

再重复一遍,字符串是不可变的,所以不能仅仅删除一个字符串里的某个字符,你能做的是清空一个空字符串,或者是把剔除了不需要的部分后的字符串组合起来形成一个新串。

假设您想要从“Hello World!”里面删除小写的“l”,那么您需要这样做:


1 aString = 'Hello World!'
2 aString = aString[:3] + aString[4:]
3 print(aString)

输出:


Helo World!

通过赋一个空字符串或者使用del 语句来清空或者删除一个字符串。不过,在大部分应用程序里,没有必要显式的删除字符串。定义这个字符串的代码最终会结束,那时Python 会自动释放这些字符串。

所以,我写的反转字符串代码是有问题的,正确的代码应该是:


#!/usr/bin/env python
#-*-coding:utf-8-*-
__author__ = 'ZhangHe'
def reverse(s):
 t = ''
 r = len(s) - 1
 while r>=0:
  t = t + s[r]
  r -= 1
 return t
s = 'abcd'
print reverse(s)

那么传入的形参s和实参s到底是不是同一个对象呢?可以用id函数来验证,先来看下id函数的官方解释。

查看图片

也就是说,id(obj)函数返回对象obj在其生命周期内位于内存中的地址,id函数的参数类型是一个对象(Python中一切对象,变量中存放的是对象的引用)

我们可以用下边的代码验证:


#!/usr/bin/env python
#-*-coding:utf-8-*-
__author__ = 'ZhangHe'
def reverse(s):
 print id(s)
 t = ''
 r = len(s) - 1
 while r>=0:
  t = t + s[r]
  r -= 1
 return t
s = 'abasdfasdfcdabasdfasdfcd'
print id(s)
print reverse(s)

输出:


38264224
38264224
dcfdsafdsabadcfdsafdsaba

可以看出传入的参数实际上是字符串对象的地址,如果把参数换成list或dict,那么输出的id还是一样的,所以所,Python中传参的方式都是传入对象的地址,只不过数字,字符串和tuple是不可直接修改,而list和dict是可以直接修改。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python中字符串的修改及传参详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python中字符串的修改及传参详解

发现问题 最近在面试的时候遇到一个题目,选择用JavaScript或者Python实现字符串反转,我选择了Python,然后写出了代码(错误的):#!/usr/bin/env python #-*-coding:utf-8-*- __aut
2022-06-04

python怎么修改字符串的值

在Python中,字符串是不可变的,这意味着一旦创建了一个字符串,就无法直接修改其值。但是,我们可以通过重新赋值来间接修改字符串的值。以下是几种常见的方法来修改Python字符串的值:使用字符串连接操作符(+)将两个字符串连接起来:st
2023-10-26

Python中的字符串及用法

字符串是 Python 中最常用的数据类型1.#字符串的定义a = 'westos'b = "what's"c = """用户管理管理系统1.添加用户2.删除用户3.显示用户....."""print(a)print(b)print(c)2
2023-01-31

详解为什么说Golang中的字符串类型不能修改

在接触Go这么语言,可能你经常会听到这样一句话。对于字符串不能修改,可能你很纳闷,日常开发中我们对字符串进行修改也是很正常的,为什么又说Go中的字符串不能进行修改呢?本文就来通过实际案例给大家演示一下
2023-03-06

java 中HttpClient传输xml字符串实例详解

java 中HttpClient传输xml字符串实例详解介绍:我现在有一个对象page,需要将page对象转换为xml格式并以binary方式传输到服务端其中涉及到的技术点有:1、对象转xml流2、输出流转输入流3、httpClient发送
2023-05-31

Python 基础之字符串string详解及实例

Python字符串(string) 详解 及 代码 Python的字符串可以使用单引号('), 双引号("), 三引号('''); 三引号(''')里面, 可以添加单引号和双引号, 也可以通过转义序列()添加; 字符串放在一起自动连接成为一
2022-06-04

详解Python的字符串格式化

这篇文章主要介绍了Python的字符串格式化,python的format函数怎么用,这篇文章向大家介绍format函数用法,需要的朋友可以参考下
2023-05-16

Golang 字符串修改详解:动态调整和可变性

golang 中的字符串虽然不可变,但可通过以下技术动态修改:使用字符串连接符连接字符串。使用字符串格式化创建新字符串。修改字符串底层字节切片。使用第三方库提供的可变字符串类型。GoLang 字符串修改详解:动态调整和可变性引言在 Go
Golang 字符串修改详解:动态调整和可变性
2024-04-08

详解Python字符串对象的实现

PyStringObject 结构体 Python 中的字符串对象在内部对应一个名叫 PyStringObject 的结构体。“ob_shash” 对应字符串经计算过的 hash值, “ob_sval” 指向一段长度为 “ob_size”
2022-06-04

Python中的字符串操作和编码Unicode详解

本文主要给大家介绍了关于 Python中的字符串操作和编码Unicode的一些知识,下面话不多说,需要的朋友们下面来一起学习吧。 字符串类型str:Unicode字符串。采用''或者r''构造的字符串均为str,单引号可以用双引号或者三引号
2022-06-04

python字符串切片及常用方法示例详解

这篇文章主要介绍了python字符串切片及常用方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-05-15

详解Python中神奇的字符串驻留机制

字符串驻留机制是Python针对字符串对象采取的一种内存优化技术。其目标是减少内存使用并提高程序的性能。这篇文章主要介绍了字符串驻留机制的简单应用,需要的可以参考一下
2023-05-14

怎么修改JSON字符串中的敏感信息

这篇文章主要介绍了怎么修改JSON字符串中的敏感信息,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。修改JSON字符串中的敏感信息项目要求把json字符串里面的敏感信息加密比如
2023-06-22

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录