关于 Python 中的字符串,我在补充两点,滚雪球学 Python

举报
梦想橡皮擦 发表于 2021/07/30 17:25:53 2021/07/30
【摘要】 橡皮擦,一个逗趣的互联网高级网虫,新的系列,让我们一起 Be More Pythonic。 三、Python 里面的字符串知识补充Python 中最高频被使用的一个数据类型,就是字符串,本篇博客不在讨论字符串的基本使用,哪些在第一遍滚雪球的时候就已经被强调了,这次在增加 2 个细节的知识点 3.1 字符串是不可变的字符串是不可变的,对此有一个疑问是下述代码,貌似字符串变量 my_str 发生...

橡皮擦,一个逗趣的互联网高级网虫,新的系列,让我们一起 Be More Pythonic

三、Python 里面的字符串知识补充

Python 中最高频被使用的一个数据类型,就是字符串,本篇博客不在讨论字符串的基本使用,哪些在第一遍滚雪球的时候就已经被强调了,这次在增加 2 个细节的知识点

3.1 字符串是不可变的

字符串是不可变的,对此有一个疑问是下述代码,貌似字符串变量 my_str 发生了改变,但是你可以修改代码,获取一下代码的内存地址,会发现下述代码,其实是新创建了一个同名的字符串。

my_str = "hello "
my_str += "world"
print(my_str)

比较内存地址。

my_str = "hello "
print(id(my_str))
my_str += "world"
print(id(my_str))
print(my_str)

运行结果如下:

30801624
42418864
hello world

3.2 字符串拼接效率问题

对比下述几段代码比较字符串拼接的效率问题。

import time

# += 写法
def m0():
    s = ' '
    for n in range(0, 100000):
        s += str(n)

# join 写法
def m1():
    l = []
    for n in range(0, 100000):
        l.append(str(n))
    s = ' '.join(l)

# pythonic 写法
def m2():
    s = ' '.join(map(str, range(0, 100000)))

start_time = time.perf_counter()
m0()
end_time = time.perf_counter()
print("代码运行时间为:", end_time-start_time)

在循环 100000 次的情况下,前 2 份代码消耗时间差异不大,但是 m2 效率高了一些,随着循环次数增大,会发现 m2 逐渐拉开差距,甚至数据到一千万的时候,m0 没有计算出结果,因为电脑原因,卡住了。

  • m0:代码运行时间为: 0.026987474000000004
  • m1:代码运行时间为: 0.025112976000000002
  • m2:代码运行时间为: 0.019118731

从字符串这种数据类型本身出发,join 函数比 += 快,最后一种写法,其实是 map 遍历提高的效率,这点需要注意下,不过第三种写法确实比较 pythonic

3.3 这篇博客的总结

这篇博客,咱们对字符串稍微补充了一点点探索性的知识,简单实用,连续高频学习,适当的休息一下,下篇博客见。

博主 ID:梦想橡皮擦,希望大家点赞评论收藏

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。