Python格式化字符串的3中方式

一:%号

%号格式化字符串的方式从Python诞生之初就已经存在,时至今日,python官方也并未弃用%号,但也并不推荐这种格式化方式。

# 格式的字符串(即 %s)与被格式化的字符串(即传入的值)必须按照位置一一对应
# ps:当需格式化的字符串过多时,位置极容易搞混
print('%s love %s' % ('ys', 'yyh'))
print('%s love %s' % ('闫美婷', 'yyh'))

二:str.format

format方法是在Python 2.6中引入的,是字符串类型的内置方法。因为str.format的方式在性能和使用的灵活性上都比%号更胜一筹,所以推荐使用

# 1 使用位置参数
print('{} love {}'.format('ys','yyh'))
# 2 使用索引
print('{1} love {0}'.format('ys','yyh'))

三:f'{}'

str.format() 比 %格式化高级了一些,但是它还是有自己的缺陷。当需要传入的字符串过多时,仍然会显得非常冗长。与在Python 3.6中引入 了f-strings,不仅比str.format更简洁,性能上也更胜一筹

f-string是以f或F开头的字符串, 核心在于字符串中符号{}的使用

# 1 {}可以是变量名
name = 'ys'
age = 30
print(f'{name} {age}')
# 2 {}可以是函数调用
def f1(num):
    return num+2
print(f'{f1(2)}') # 4
# 3 {}可以是表达式
print(f'{2*5+1}') # 11

注:f'{}'这种方式性能最快,优先考虑使用

3种格式化字符串性能比较

from timeit import timeit


def test_s():
    name = 'Egon'
    age = 18
    return '%s:%s.' % (name, age)


def test_format():
    name = 'Egon'
    age = 18
    return '{}:{}.'.format(name, age)


def test_f_strings():
    name = 'Egon'
    age = 18
    return f'{name}:{age}.'


res1 = timeit(test_s, number=1000000)
res2 = timeit(test_format, number=1000000)
res3 = timeit(test_f_strings, number=1000000)
print(res1) # 0.3709844550030539
print(res2) # 0.47834375899401493
print(res3) # 0.3111891380031011, 最快