Python中格式化字符串輸出的4種方式小結(jié)
一、%號占位符
這是一種引入最早的一種,也是比較容易理解的一種方式.使用方式為:
1、格式化字符串中變化的部分使用占位符
2、變量以元組形式提供
3、變量與格式化字符串之間以%連接
1、格式的字符串(即%s)與被格式化的字符串(即傳入的值)必須按照位置一一對應(yīng)
ps:當(dāng)需格式化的字符串過多時,位置極容易搞混
例如
a = 'zhangsan'
b = 'lisi'
print('%s eated %s' % (a, b)) # zhangsan eated lisi
print("%s asked %s to do something" % ("zhangsan", 'lisi')) # zhangsan asked lisi to do something
2、可以通過字典方式格式化,打破了位置帶來的限制與困擾
print("我的名字是%(name)s,我的年齡是%(age)s" % {"name": 'zhangsan', "age": "list"}) ?# 我的名字是zhangsan,我的年齡是list
kwargs = {"name": "zhangsan", "age": 18}
print("my name is %(name)s, my age is %(age)s" % kwargs) ?# my name is zhangsan, my age is 18二、str.format 內(nèi)建函數(shù)
該format函數(shù)是在python2.6以后引入的,是字符呂類型的內(nèi)置方法。因為str.format的方式
比%在性能和靈活性上更好一些。
1、使用位置參數(shù)
按照位置一一對應(yīng)
print("{} and {} is good friedng".format('zhangsan', 'lisi')) # zhangsan and lisi is good friedng
2、使用索引
使用索引取對應(yīng)位置的值
print('{0}{0}{1}{0}'.format('哈哈', '隔')) # 哈哈哈哈隔哈哈
3、使用關(guān)鍵字參數(shù)or字典
可以通過關(guān)鍵字or字典方式的方式格式化,打破了位置帶來的限制與困擾
print('我的名字是 {name}, 我的年齡是 {age}.'.format(age=18, name='egon'))
kwargs = {'name': 'egon', 'age': 18}
print("my name is {name}, my age is {age}".format(age=18, name="zhangsan"))
kwargs = {'name': 'zhangsan', "age": 18}
print("my name is {name}, my age is {age}".format(**kwargs)) ?# 使用**進(jìn)行解包操作4、填充與格式化
先取到值,然后在冒號后面設(shè)定填充格式:[填充字符][對齊方式][寬度]
<20: 意思是: 左對齊,總共20個字符,不足部分用號填充
print("my name is {0:*<20},my age is {1:*<10}".format("zhangsan",
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 18)) ?# my name is zhangsan************,my age is 18********
# *>10: 右對齊,總共10個字符,不足部分用*填充
print("my name is {0:*<10}".format("zhangsan")) ?# my name is zhangsan**
# *^10: 居中,總共18個字符,不足部分用*填充
print("my name is {0:*^18}".format("zhangsan")) ?# my name is *****zhangsan*****
# ^20: 居中,總共20個字符,不足部分用空白填充
print("my name is {0:^20}".format("zhangsan")) ?# my name is ? ? ? zhangsan5、精度與進(jìn)制
print("{salary:.2f}".format(salary=123456.1234567)) # 123456.12精確到小數(shù)點后3位,四舍五入
print("{salary:.10f}".format(salary=123456.1234567)) # 123456.1234567890精確到小數(shù)點后3位,四舍五入
print("{:-^10.2f}".format(3.1415926)) # ---3.14--- 取2位小數(shù)后,居中,共10位,其余用-填充
print("{0:b}".format(123)) # 1111011 轉(zhuǎn)成二進(jìn)制
print("{0:o}".format(123)) # 173 轉(zhuǎn)成八進(jìn)制
print("{0:x}".format(123)) # 7b 轉(zhuǎn)成十六進(jìn)制
print("{0:,}".format(1234567)) # 1,234,567 千分位格式化
三、f-Strings
由python3.6版本引入的一個特性,稱之為字面量格式化字符串
以F或者f開頭,后面跟字符串,字符串中的表達(dá)式用大括號{}包起來,它會將變量或表達(dá)式計算后的值替換進(jìn)去
? f-string是以f或F開頭的字符串, 核心在于字符串中符號{}的使用
1、{}中可以是變量名
name = ‘zhangsan'
print(f"my name is {name}") # my name is zhangsan2 、{}中可以是表達(dá)式
可以在{}中放置任意合法的表達(dá)式,會在運行時計算
print(f"{3 * 3 / 2}") ?# 4.5
a = 1
b = 2
print(f"a + b = {a + b}") ?# a + b = 3比如 函數(shù)的調(diào)用
name = 'zhangsan'
print(F"my name is {name.upper()}") ?# my name is ZHANGSAN
def foo(n):
? ? print("zhangsan is beautifull")
? ? return n
print(F"{foo(10)}") ?# 10 ?執(zhí)行時打印函數(shù)的返回值
# 在{}中使用‘或者” ?保證{}內(nèi)外使用的不一樣即可,如下
print(F'test {"str"}') ?# teststr
print(F"test {'str'}") ?# teststr
# 在{}中需要同時使用'和“,則需要外部字符串使用文檔字符串符號'‘'或者”“”
name = 'zhangsan'
print(F'''it's name is "{name}" ''') ?# it's name is "zhangsan" ?注意各個'‘'是不一樣的
print(F"{'{}'}") ?# 輸出{} ?注意兩種引號不一樣
# {}中不允許出現(xiàn)\即使作為函數(shù)參數(shù);必須使用的話,可以將包含\的內(nèi)容放到一個變量里,如下
a = 'zhangsan'
b = f'my name is {a:-^10}'
print(b) ?# my name is -zhangsan-
# a = f'print the {"\t"}'
# print(a) ?# 語法錯誤
a = '\n'
print(F"print the {a}") ?# print the ? \n沒有顯示 但打印正常
# f.str 格式可用于多行字符串,有兩種方式:使用連接符\ ?和使用doc簽字串。如下
name = 'zhangsan '
age = 18
res = f'my name is {name},' \
? ? ? F"my age is {age}," \
? ? ? F"and i'm happy"
print(res) ?# my name is zhangsan ,my age is 18,and i'm happy
res = f'''my name is {name} ,my age is {age},and i'm happy,
my name is {name} ,my age is {age},and i'm happy
my name is {name} ,my age is {age},and i'm happy
my name is {name} ,my age is {age},and i'm happy'''
print(res) ?# 輸出4行文本四、string模塊的template
這是string模塊提供的一個模版類,默認(rèn)使用$ 或者 ${}(建議用這個)來占位,而不是用%
具體用法如下
from string import Template
s = 'hi ${name}'
res = Template(s).substitute(name='zhangsan') ?# substitute替代品的意思
print(res) ?# hi zhangsan
# 當(dāng)需要輸出一個$符號時,可以使用$$
s1 = f'{name}‘s salary is $$1000'
res = Template(s1).substitute(name='zhangsan')
print(res)
# Template還有一個safe_substitute函數(shù),
# 當(dāng)格式化字符串中有變量未給出值時,此函數(shù)將占位符當(dāng)成字符串輸出,
# 而substitute會報錯
name = 'zhangsan'
# s2 = f'{name} and {name2}‘s salary is $$1000'
# res = Template(s2).substitute()
# print(res) ?# ?報錯NameError: name 'name2' is not defined
#學(xué)習(xí)中遇到問題沒人解答?小編創(chuàng)建了一個Python學(xué)習(xí)交流群:725638078
s3 = 'hi ${apple}, ${peach}'
res = Template(s3).safe_substitute(apple='apple')
print(res) ?# hi apple, ${peach}五、總結(jié)四種方式的應(yīng)用場景
性能對比
from timeit import timeit
def test_s():
? ? name = 'zhangsan'
? ? age = 18
? ? return "%s:%s" % (name, age)
def test_format():
? ? name = 'zhangsan'
? ? age = 18
? ? return '{}:{}'.format(name, age)
def test_f():
? ? name = 'zhangsan'
? ? age = 18
? ? return f'{name}:{age}'
def test_t():
? ? return Template('{name}:{age}').substitute(name='zhangsan', age=18)
res1 = timeit(test_s, number = 100000)
res2 = timeit(test_format, number = 100000)
res3 = timeit(test_f, number = 100000)
res4 = timeit(test_t, number = 100000)
print(res1) ?# 0.027567900004214607
print(res2) ?# 0.03230700000131037
print(res3) ?# 0.020800700003746897
print(res4) ?# 0.0893696999992244看效率表現(xiàn),還是 最新的f.str最快
到此這篇關(guān)于Python中格式化字符串輸出的4種方式小結(jié)的文章就介紹到這了,更多相關(guān)Python 格式化字符串輸出內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
剛學(xué)完怎么用Python實現(xiàn)定時任務(wù),轉(zhuǎn)頭就跑去撩妹!
朋友問我有沒有定時任務(wù)的模塊,并且越簡單越好.剛好前今天就研究了一下定時任務(wù)模塊,于是就告訴他使用方式,令我沒有想到的是,這貨他學(xué)會了之后,居然買了一個服務(wù)器給女朋友發(fā)消息,發(fā)消息,發(fā)消息……重要的事情說三遍,需要的朋友可以參考下2021-06-06
python檢查目錄文件權(quán)限并修改目錄文件權(quán)限的操作
這篇文章主要介紹了python檢查目錄文件權(quán)限并修改目錄文件權(quán)限的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03
python web應(yīng)用程序之Django數(shù)據(jù)庫詳解
這篇文章主要介紹了python web應(yīng)用程序之Django數(shù)據(jù)庫,本文通過實例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2024-06-06
詳解pandas數(shù)據(jù)合并與重塑(pd.concat篇)
這篇文章主要介紹了詳解pandas數(shù)據(jù)合并與重塑(pd.concat篇),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
Python爬蟲的兩套解析方法和四種爬蟲實現(xiàn)過程
本文想針對某一網(wǎng)頁對 python 基礎(chǔ)爬蟲的兩大解析庫( BeautifulSoup 和 lxml )和幾種信息提取實現(xiàn)方法進(jìn)行分析,及同一網(wǎng)頁爬蟲的四種實現(xiàn)方式,需要的朋友參考下吧2018-07-07
Python range函數(shù)之生成器函數(shù)的示例
這篇文章主要介紹了Python range函數(shù)之生成器函數(shù)的示例,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-12-12

