百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

初学者都在坑里!不要在Python中使用“+”来连接字符串

off999 2024-09-26 16:13 29 浏览 0 评论

全文共1611字,预计学习时长6分钟



很多初学者都像我一样,最开始使用Python时,会不自觉地使用“+”来连接字符串,就像在许多其他编程语言(比如Java)中那样,因为这样既直观又容易。


但我很快意识到成熟的开发人员似乎更喜欢使用.join()来连接字符串,而不是“+”。


你现在一定像我刚知道这一点时一样困惑。本文中,我将告诉你这两种方法之间的区别,以及为什么不应该使用“+”。


开始


作为一名初学者,或者刚从使用“+”连接字符串的其他编程语言切换过来的人,很顺手地就会写出这样的代码:



str1 =“I love”
str2 =“Python.” print(str1 + str2)


但时间久了,你或许或许就会发现,别人都是这样写的:


str1 =“I love”
str2 =“Python.” print(''.join([str1,str2]))


实话说,当我第一次看到上述方法时,我认为这既不直观也不美观。


连接多个字符串


转折发生在不久之后,有一次我需要连接列表中的多个字符串。


strs = ['Life','is','short','I','use','Python']


最初,我是这样做的:


strs = ['Life', 'is', 'short,','I', 'use', 'Python']def join_strs(strs):
    result = ''
    for s in strs:
        result += ' ' + s
    return result[1:]join_strs(strs)


我必须编写一个for循环来逐个连接字符串。另外,结果字符串前需要删除我在开头添加的空格,因为所有字符串都需要在前面添加空格,而不是单是开头。


或许你有其他解决方案,例如将索引添加到for循环中,这样就不应将index=0处的字符串添加到此空格处。无论如何,你仍然需要使用此for循环并为空格做些什么。



这时,我回想起以前曾经看过.join()方法,灵光乍现,也许这正是我需要使用它的时候!


超轻松解决了!一行代码可以完成所有工作。由于.join()方法是由字符串对象调用的,该字符串对象将用于连接列表中的每个字符串,因此你无需担心开头的空格。


但这不是我们需要使用join()而不是“+”方法的唯一原因。


join()方法背后的逻辑


让我们来比较一下这两种方法的性能,使用Jupyter Notebook的魔术方法%timeit来对其进行评估。


上面显示的性能基于10万条路径,结果是非常可信且显而易见的。使用join()方法可能比使用“+”来连接列表中的字符串快4倍。


这是为什么呢?看看我绘制的概念图,用于演示使用“+”连接字符串的方法:



这显示了for循环和“+”运算符的作用:


1. 对于每个循环,都可以从列表中找到字符串

2.对于每个循环,执行程序将需要申请两次内存地址,一次用于空格,另一次用于字符串。

3.Python执行程序解释表达式result + =''+s并为空格申请内存地址。

4.然后,执行程序意识到空格需要与字符串连接,因此它将为字符串s申请内存地址,这是第一个循环“life”。

5.其中还存在12次内存分配。


那么,使用join()方法发生了什么?



1.执行程序将计算列表中有多少个字符串。这里有6个。

2.这意味着用于连接列表的字符串需要重复6-1 =5次。

3.这里总共需要11个内存空间,因此所有的这些空间将被立即应用并被预先分配。

4.然后按顺序排列字符串,再返回结果页面。


很明显,主要的区别在于内存分配的次数,这就是提高性能的主要原因。想象一下,使用join()方法将6个字符串连接在一起,速度已经快了4倍。如果我们连接了大量的字符串呢?它将发生更大的变化!


在Python中连接字符串时,显然,考虑到其性能,join()方法是首选。



通常来说,学习一门编程语言需要很长的时间。但是初学者上手Python的时间相对较短,这是它的优势之一。但我们不应止步于此并满足于现在可以使用Python所做的事情。


毕竟,平凡和卓越之间的差距可能正来自于一些小细节。


留言点赞关注

我们一起分享AI学习与发展的干货

如转载,请后台留言,遵守转载规范

相关推荐

Nginx合集-高可用(Keepalived)_高可用 nginx

Keepalived简介Keepalived是Linux下一个轻量级别的高可用解决方案。高可用:广义来讲,是指整个系统的高可用行;狭义的来讲就是主机的冗余和接管。它与HeartBeat实现类似的功能,...

Nginx 笔记_nginx最全教程

gcc#可能需要安装C++yum-yinstallgcc-c++installnginxbybashcd/usr/local/src##@seehttp://nginx...

JAVA面试|nginx如何解决跨域问题_nginx解决跨域问题原理

核心思想:跨域问题是浏览器的安全限制,不是服务器本身拒绝通信。Nginx作为强大的反向代理服务器,可以通过在响应中添加特定的HTTP头信息(CORS头),告诉浏览器:“这个跨域请求是我允许的,你可...

Nginx主从架构详解(图文全面总结)

Nginx是大型架构的必备技能,下面我重点详解Nginx主从架构@mikechen文章来源:mikechen.ccNginx主从在大规模Web应用和高可用部署中,Nginx作为高性能反向代理与负...

Nginx动静分离详解(原理+配置+实战)

Nginx动静分离是一种常见的Web服务优化技术,Nginx动静分离可以更好的提升性能@mikechen文章来源:mikechen.ccNginx动静分离动静分离,顾名思义,就是将Web应用中...

大文件传不动?WinRAR/7-Zip 入门到高手,这 5 个技巧让你效率翻倍

“这200张照片怎么传给女儿?微信发不了,邮箱附件又超限……”62岁的张阿姨对着电脑犯愁时,儿子只用了3分钟就把照片压缩成一个文件,还教她:“以后用压缩软件,比打包行李还方便!”职场人更懂这...

电脑解压缩软件推荐——7-Zip:免费、高效、简洁的文件管理神器

在日常工作中,我们经常需要处理压缩文件。无论是下载软件包、接收文件,还是存储大量数据,压缩和解压缩文件都成为了我们日常操作的一部分。而说到压缩解压软件,7-Zip绝对是一个不可忽视的名字。今天,我就来...

设置了加密密码zip文件要如何打开?这几个方法可以试试~

Zip是一种常见的压缩格式文件,文件还可以设置密码保护。那设置了密码的Zip文件要如何打开呢?不清楚的小伙伴一起来看看吧。当我们知道密码想要打开带密码的Zip文件,我们需要用到适用于Zip格式的解压缩...

大文件想要传输成功,怎么把ZIP文件分卷压缩

不知道各位小伙伴有没有这样的烦恼,发送很大很大的压缩包会受到限制,为此,想要在压缩过程中将文件拆分为几个压缩包并且同时为所有压缩包设置加密应该如何设置?方法一:使用7-Zip免费且强大的文件管理工具7...

高效处理 RAR 分卷压缩包:合并解压操作全攻略

在文件传输和存储过程中,当遇到大文件时,我们常常会使用分卷压缩的方式将其拆分成多个较小的压缩包,方便存储和传输。RAR作为一种常见的压缩格式,分卷压缩包的使用频率也很高。但很多人在拿到RAR分卷...

2个方法教你如何删除ZIP压缩包密码

zip压缩包设置了加密密码,每次解压文件都需要输入密码才能够顺利解压出文件,当压缩包文件不再需要加密的时候,大家肯定想删除压缩包密码,或是忘记了压缩包密码,想要通过删除操作将压缩包密码删除,就能够顺利...

速转!漏洞预警丨压缩软件Winrar目录穿越漏洞

WinRAR是一款功能强大的压缩包管理器,它是档案工具RAR在Windows环境下的图形界面。该软件可用于备份数据,缩减电子邮件附件的大小,解压缩从Internet上下载的RAR、ZIP及其它类...

文件解压方法和工具分享_文件解压工具下载

压缩文件减少文件大小,降低文件失效的概率,总得来说好处很多。所以很多文件我们下载下来都是压缩软件,很多小伙伴不知道怎么解压,或者不知道什么工具更好,所以今天做了文件解压方法和工具的分享给大家。一、解压...

[python]《Python编程快速上手:让繁琐工作自动化》学习笔记3

1.组织文件笔记(第9章)(代码下载)1.1文件与文件路径通过importshutil调用shutil模块操作目录,shutil模块能够在Python程序中实现文件复制、移动、改名和删除;同时...

Python内置tarfile模块:读写 tar 归档文件详解

一、学习目标1.1学习目标掌握Python内置模块tarfile的核心功能,包括:理解tar归档文件的原理与常见压缩格式(gzip/bz2/lzma)掌握tar文件的读写操作(创建、解压、查看、过滤...

取消回复欢迎 发表评论: