您好,登錄后才能下訂單哦!
本篇內容介紹了“Python中格式化字符串輸出的方式有哪些”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
這是一種引入最早的一種,也是比較容易理解的一種方式.使用方式為:
1、格式化字符串中變化的部分使用占位符
2、變量以元組形式提供
3、變量與格式化字符串之間以%連接
1、格式的字符串(即%s)與被格式化的字符串(即傳入的值)必須按照位置一一對應
ps:當需格式化的字符串過多時,位置極容易搞混
例如
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
該format函數是在python2.6以后引入的,是字符呂類型的內置方法。因為str.format的方式
比%在性能和靈活性上更好一些。
1、使用位置參數
按照位置一一對應
print("{} and {} is good friedng".format('zhangsan', 'lisi')) # zhangsan and lisi is good friedng
2、使用索引
使用索引取對應位置的值
print('{0}{0}{1}{0}'.format('哈哈', '隔')) # 哈哈哈哈隔哈哈
3、使用關鍵字參數or字典
可以通過關鍵字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)) # 使用**進行解包操作
4、填充與格式化
先取到值,然后在冒號后面設定填充格式:[填充字符][對齊方式][寬度]
<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 zhangsan
5、精度與進制
print("{salary:.2f}".format(salary=123456.1234567)) # 123456.12精確到小數點后3位,四舍五入 print("{salary:.10f}".format(salary=123456.1234567)) # 123456.1234567890精確到小數點后3位,四舍五入 print("{:-^10.2f}".format(3.1415926)) # ---3.14--- 取2位小數后,居中,共10位,其余用-填充 print("{0:b}".format(123)) # 1111011 轉成二進制 print("{0:o}".format(123)) # 173 轉成八進制 print("{0:x}".format(123)) # 7b 轉成十六進制 print("{0:,}".format(1234567)) # 1,234,567 千分位格式化
由python3.6版本引入的一個特性,稱之為字面量格式化字符串
以F或者f開頭,后面跟字符串,字符串中的表達式用大括號{}包起來,它會將變量或表達式計算后的值替換進去
f-string是以f或F開頭的字符串, 核心在于字符串中符號{}的使用
name = ‘zhangsan' print(f"my name is {name}") # my name is zhangsan
可以在{}中放置任意合法的表達式,會在運行時計算
print(f"{3 * 3 / 2}") # 4.5 a = 1 b = 2 print(f"a + b = {a + b}") # a + b = 3
比如 函數的調用
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 執行時打印函數的返回值 # 在{}中使用‘或者” 保證{}內外使用的不一樣即可,如下 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"{'{}'}") # 輸出{} 注意兩種引號不一樣 # {}中不允許出現\即使作為函數參數;必須使用的話,可以將包含\的內容放到一個變量里,如下 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模塊提供的一個模版類,默認使用$ 或者 ${}(建議用這個)來占位,而不是用%
具體用法如下
from string import Template s = 'hi ${name}' res = Template(s).substitute(name='zhangsan') # substitute替代品的意思 print(res) # hi zhangsan # 當需要輸出一個$符號時,可以使用$$ s1 = f'{name}‘s salary is $$1000' res = Template(s1).substitute(name='zhangsan') print(res) # Template還有一個safe_substitute函數, # 當格式化字符串中有變量未給出值時,此函數將占位符當成字符串輸出, # 而substitute會報錯 name = 'zhangsan' # s2 = f'{name} and {name2}‘s salary is $$1000' # res = Template(s2).substitute() # print(res) # 報錯NameError: name 'name2' is not defined #學習中遇到問題沒人解答?小編創建了一個Python學習交流群:725638078 s3 = 'hi ${apple}, ${peach}' res = Template(s3).safe_substitute(apple='apple') print(res) # hi apple, ${peach}
性能對比
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
看效率表現,還是 最新的f.str最快
“Python中格式化字符串輸出的方式有哪些”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。