Python 编程技巧之字符串拼接

字符串的拼接

当我们使用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的新特性是字符串拼接方面性能、灵活、简洁等方面最好的方式。在不考虑低版本兼容时,最推荐的方式。当需要考虑低版本兼容时,则推荐使用%号进行元组拼接。

欢迎关注我的公众号:编程之路从0到1

编程之路从0到1

猜你喜欢

转载自blog.csdn.net/yingshukun/article/details/94004510
今日推荐