前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python 编程技巧之字符串拼接

Python 编程技巧之字符串拼接

作者头像
arcticfox
发布2019-07-10 09:58:48
6320
发布2019-07-10 09:58:48
举报
文章被收录于专栏:编程之路的专栏
  • 字符串的拼接
    • 最简单的`+`号拼接
    • 使用`%`号进行元组拼接
    • 使用格式化方法拼接
    • 使用3.6.2新特性`F-strings`拼接
    • 使用列表`join`实现拼接
    • 总结

字符串的拼接

当我们使用Python时,字符串是最经常打交道的数据类型,要提升Python的编程技巧,首先从字符串的拼接开始吧

当我们编写爬虫时,经常遇到类似如下URL

http://192.168.0.1:1024

其中ip和端口都是变量,通常python的初学者会使用+连接符进行拼接

代码语言:javascript
复制
1url = "http://" + ip + ":" + port

这样写不仅代码不好看,而且性能也不高。实际上,在Python中,字符串的拼接有多种实现方法,这里就一一介绍一下,并简单的测试其性能

最简单的`+`号拼接

这里我们各进行一百万次拼接用于测试

代码语言:javascript
复制
 1import time
 2
 3def test1_str():
 4    for i in range(1000000):
 5        "start:" + str(i) + " end:" + str(i + 1)
 6
 7# 测试代码,这里乘以1000,将结果精确到毫秒
 8start = time.time()
 9test1_str()
10print((time.time() - start) * 1000)

打印结果(毫秒值):

代码语言:javascript
复制
1749.0429878234863

使用`%`号进行元组拼接

将字符串与元组用%连接,使用元组中的元素替换占位符 如:greet = "hello,%s" % ("Alex",),等结果为"hello,Alex"

这里的占位符主要来自C语言,常用的如下

代码语言:javascript
复制
 1import time
 2
 3def test2_str():
 4    for i in range(1000000):
 5        "start:%d end:%d" % (i, i + 1)
 6
 7
 8start = time.time()
 9test2_str()
10print((time.time() - start) * 1000)

打印结果(毫秒值):

代码语言:javascript
复制
1483.02769660949707

使用格式化方法拼接

这是一种相对而言比较灵活的方式,这里使用花括号代表占位符,然后用format方法中的参数替换掉花括号。

如:

代码语言:javascript
复制
1# 结果:Name:Alice, Age:18
2"Name:{}, Age:{}".format("Alice", 18)

除了按顺序替换,更灵活的用法是使用参数命名来替换

代码语言:javascript
复制
1# 结果:Name:Alice, Age:18
2"Name:{name}, Age:{age}".format(name="Alice", age=18)

由此,可以引出使用字典进行替换拼接

代码语言:javascript
复制
1# 定义一个字典
2girl = {"name": "Alice", "age": 18}
3
4# 结果:Name:Alice, Age:18
5"Name:{name}, Age:{age}".format(**girl)

了解了format方法的特点,再来测试一下它的性能

代码语言:javascript
复制
1import time
2
3def test3_str():
4    for i in range(1000000):
5        "start:{} end:{}".format(i, i + 1)
6
7start = time.time()
8test3_str()
9print((time.time() - start) * 1000)

打印结果(毫秒值):

代码语言:javascript
复制
1573.0326175689697

使用3.6.2新特性`F-strings`拼接

这是python3.6.2版本才引入的新特性,低版本不支持。但是这个特性非常强大,比上面的format方法更加灵活,更加简洁。只有极少的编程语言,才有这种强大的类似于插值表达式的语法。

代码语言:javascript
复制
1name = "Bob"
2age = "28"
3
4# 在字符串前加f前缀,即可在花括号中直接引用变量
5print(f"Name:{name}, Age:{age}")
6
7# 打印: Name:Bob, Age:28

除了直接在花括号引用变量,还可以在花括号中调用方法、做运算

代码语言:javascript
复制
1# 对字符串'ai'调用upper方法,变大写
2print(f"Name:{'ai'.upper()}")
3
4# 打印:Name:AI
代码语言:javascript
复制
 1import time
 2
 3# python3.6.2 F-strings
 4def test4_str():
 5    for i in range(1000000):
 6        j = i + 1
 7        f"start:{i} end:{j}"
 8
 9start = time.time()
10test4_str()
11print((time.time() - start) * 1000)

打印结果(毫秒值):

代码语言:javascript
复制
1404.0234088897705

使用列表`join`实现拼接

这种方法,就是将需要拼接的字符串放到一个列表,最后调用join方法,将整个列表元素合并转为一个字符串。

代码语言:javascript
复制
 1import time
 2
 3def test5_str():
 4    s = ["start:", '', " end:", '']
 5    for i in range(1000000):
 6        j = i + 1
 7        s[1], s[3] = str(i), str(j)
 8        "".join(s)
 9
10start = time.time()
11test5_str()
12print((time.time() - start) * 1000)

打印结果(毫秒值):

代码语言:javascript
复制
1803.0459880828857

总结

以上几乎是Python目前所支持的字符串拼接的全部方法了,可以很显著的发现,3.6.2的新特性是字符串拼接方面性能、灵活、简洁等方面最好的方式。在不考虑低版本兼容时,最推荐的方式。当需要考虑低版本兼容时,则推荐使用%号进行元组拼接

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-06-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 编程之路从0到1 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 字符串的拼接
    • 最简单的`+`号拼接
      • 使用`%`号进行元组拼接
        • 使用格式化方法拼接
          • 使用3.6.2新特性`F-strings`拼接
            • 使用列表`join`实现拼接
              • 总结
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档