文章目录
字符串的拼接
当我们使用Python时,字符串是最经常打交道的数据类型,要提升Python的编程技巧,首先从字符串的拼接开始吧
当我们编写爬虫时,经常遇到类似如下URL
http://192.168.0.1:1024
其中ip和端口都是变量,通常python的初学者会使用+
连接符进行拼接
url = "http://" + ip + ":" + port
这样写不仅代码不好看,而且性能也不高。实际上,在Python中,字符串的拼接有多种实现方法,这里就一一介绍一下,并简单的测试其性能
最简单的+
号拼接
这里我们各进行一百万次拼接用于测试
import time
def test1_str():
for i in range(1000000):
"start:" + str(i) + " end:" + str(i + 1)
# 测试代码,这里乘以1000,将结果精确到毫秒
start = time.time()
test1_str()
print((time.time() - start) * 1000)
打印结果(毫秒值):
749.0429878234863
使用%
号进行元组拼接
将字符串与元组用%
连接,使用元组中的元素替换占位符
如:greet = "hello,%s" % ("Alex",)
,等结果为"hello,Alex"
这里的占位符主要来自C语言,常用的如下
格式 | 描述 |
---|---|
%% | 用两个表示一个百分号标记 |
%s | 字符串 |
%d | 整数(十进制) |
%o | 整数(八进制) |
%x | 整数(十六进制) |
%E | 浮点数字(科学计数法,用E代替e) |
%f | 浮点数字(用小数点符号) |
import time
def test2_str():
for i in range(1000000):
"start:%d end:%d" % (i, i + 1)
start = time.time()
test2_str()
print((time.time() - start) * 1000)
打印结果(毫秒值):
483.02769660949707
使用格式化方法拼接
这是一种相对而言比较灵活的方式,这里使用花括号代表占位符,然后用format
方法中的参数替换掉花括号。
如:
# 结果:Name:Alice, Age:18
"Name:{}, Age:{}".format("Alice", 18)
除了按顺序替换,更灵活的用法是使用参数命名来替换
# 结果:Name:Alice, Age:18
"Name:{name}, Age:{age}".format(name="Alice", age=18)
由此,可以引出使用字典进行替换拼接
# 定义一个字典
girl = {"name": "Alice", "age": 18}
# 结果:Name:Alice, Age:18
"Name:{name}, Age:{age}".format(**girl)
了解了format
方法的特点,再来测试一下它的性能
import time
def test3_str():
for i in range(1000000):
"start:{} end:{}".format(i, i + 1)
start = time.time()
test3_str()
print((time.time() - start) * 1000)
打印结果(毫秒值):
573.0326175689697
使用3.6.2新特性F-strings
拼接
这是python3.6.2
版本才引入的新特性,低版本不支持。但是这个特性非常强大,比上面的format
方法更加灵活,更加简洁。只有极少的编程语言,才有这种强大的类似于插值表达式的语法。
name = "Bob"
age = "28"
# 在字符串前加f前缀,即可在花括号中直接引用变量
print(f"Name:{name}, Age:{age}")
# 打印: Name:Bob, Age:28
除了直接在花括号引用变量,还可以在花括号中调用方法、做运算
# 对字符串'ai'调用upper方法,变大写
print(f"Name:{'ai'.upper()}")
# 打印:Name:AI
import time
# python3.6.2 F-strings
def test4_str():
for i in range(1000000):
j = i + 1
f"start:{i} end:{j}"
start = time.time()
test4_str()
print((time.time() - start) * 1000)
打印结果(毫秒值):
404.0234088897705
使用列表join
实现拼接
这种方法,就是将需要拼接的字符串放到一个列表,最后调用join
方法,将整个列表元素合并转为一个字符串。
import time
def test5_str():
s = ["start:", '', " end:", '']
for i in range(1000000):
j = i + 1
s[1], s[3] = str(i), str(j)
"".join(s)
start = time.time()
test5_str()
print((time.time() - start) * 1000)
打印结果(毫秒值):
803.0459880828857
总结
以上几乎是Python目前所支持的字符串拼接的全部方法了,可以很显著的发现,3.6.2的新特性是字符串拼接方面性能、灵活、简洁等方面最好的方式。在不考虑低版本兼容时,最推荐的方式。当需要考虑低版本兼容时,则推荐使用%
号进行元组拼接。