Python 编程技巧之字符串拼接

  • 字符串的拼接
    • 最简单的`+`号拼接
    • 使用`%`号进行元组拼接
    • 使用格式化方法拼接
    • 使用3.6.2新特性`F-strings`拼接
    • 使用列表`join`实现拼接
    • 总结

字符串的拼接

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

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

http://192.168.0.1:1024

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

1url = "http://" + ip + ":" + port

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

最简单的`+`号拼接

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

 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)

打印结果(毫秒值):

1749.0429878234863

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

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

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

 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)

打印结果(毫秒值):

1483.02769660949707

使用格式化方法拼接

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

如:

1# 结果:Name:Alice, Age:18
2"Name:{}, Age:{}".format("Alice", 18)

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

1# 结果:Name:Alice, Age:18
2"Name:{name}, Age:{age}".format(name="Alice", age=18)

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

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

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

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)

打印结果(毫秒值):

1573.0326175689697

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

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

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

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

1# 对字符串'ai'调用upper方法,变大写
2print(f"Name:{'ai'.upper()}")
3
4# 打印:Name:AI
 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)

打印结果(毫秒值):

1404.0234088897705

使用列表`join`实现拼接

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

 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)

打印结果(毫秒值):

1803.0459880828857

总结

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

原文发布于微信公众号 - 编程之路从0到1(artofprogram)

原文发表时间:2019-06-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券