python格式化字符串的三種方法(%,format,f-string)

DAY 7. 格式化字符串

到目前為止,我所知道的,python格式化字符串有三種方法,第一是早期就有的%,其次是2.5之后的format(),還有就是3.6添加的f字符串調試

7.1 %格式化字符串

%格式化字符串是python最早的,也是能兼容所有版本的一種字符串格式化方法,在一些python早期的庫中,建議使用%格式化方式,他會把字符串中的格式化符按順序后面參數替換,格式是

"xxxxxx %s xxxxxx" % (value1, value2)
  • 其中 %s就是格式化符,意思是把后面的值格式化為字符類型,類似的格式化符還有%d,%f等,具體參考文章Python字符串格式化
  • 后面的value1,value2就是要格式化的值,不論是字符還是數值,都會被格式化為格式化符對應的類型
  • 當然可以不用以元組的形式傳值,你可以直接寫這樣:"xxxxx %s" % value,不過不建議這樣寫,一是應為這樣只能傳遞一個參數,二是如果value是元組或列表等類型,這樣會觸發TypeErrer
  • 如果只傳一個參數,并且很確定參數類型不會觸發異常,可以使用上面的寫法,否則,我建議你提供一個單元素元組,就像"xxxx %s " % (value,)
value1 = (7, 8)
value2 = [9, 0]
print("DAY %s 格式化字符串 %s " % (value1,value2))
value3 = 1
s = "xxxix %s" % value3  # 不推薦
print(s)
s1 = "xxxx %s " % value1
print(s1)  # TypeError: not all arguments converted during string formatting

7.2 format()

%雖然強大,但用起來難免有些麻煩,代碼也不是特別美觀,因此,在python 2.5 之后,提供了更加優雅的str.format()方法。

    def format(self, *args, **kwargs): # known special case of str.format"""S.format(*args, **kwargs) -> strReturn a formatted version of S, using substitutions from args and kwargs.The substitutions are identified by braces ('{' and '}')."""pass
  • format()的常用用法
# 使用名稱占位符
s2 = "xxxx {age} xxxx {name}".format(age=18, name="hangman")
print(s2)  # xxxx 18 xxxx hangman# 使用序號占位符,為空默認從左到右01234.。。
s3 = "xxxx {1} xxx{0}".format(value1,value2)
print(s3)  # xxxx [9, 0] xxx(7, 8)# 也可以混合使用
s4 = "xxxx {} XXX {name} xxx {}".format(value2,value1,name="s4")
print(s4)  # xxxx [9, 0] XXX s4 xxx (7, 8)

7.3 f-string

f-string是2015年python 3.6 根據PEP 498新添加的一種字符串格式化方法,f-string實際上是在運行時計算的表達式,而不是常量值。在Python源代碼中,f-string是一個文字字符串,前綴為’f’,其中包含大括號內的表達式。表達式會將大括號中的內容替換為其值。例如

import datetime
name = "zings"
age = 17
date = datetime.date(2019,7,18)
print(f'my name is {name}, this year is {date:%Y},Next year, I\'m {age+1}')  # my name is zings, this year is 2019,Next year, I'm 18

7.3.2 格式規范迷你語言

“格式規范”用于格式字符串中包含的替換字段中,以定義各個值的顯示方式

標準格式說明符的一般形式是:

format_spec     ::=  [[fill]align][sign][#][0][width][grouping_option][.precision][type]
fill            ::=  <any character>
align           ::=  "<" | ">" | "=" | "^"
sign            ::=  "+" | "-" | " "
width           ::=  digit+
grouping_option ::=  "_" | ","
precision       ::=  digit+
type            ::=  "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"
(1) 對齊 align
align(對齊方式)作用
<左對齊(字符串默認對齊方式)
>右對齊(數值默認對齊方式)
=填充時強制在正負號與數字之間進行填充,只支持對數字的填充
^居中
  • 除非定義了最小字段寬度,否則字段寬度將始終與填充它的數據大小相同,因此在這種情況下,對齊選項沒有意義。
  • 如果指定了align值,則可以在其前面加上可以是任何字符的填充字符,如果省略則默認為空格。 無法使用文字大括號(“{”或“}”)作為格式化字符串文字中的填充字符或使用str.format()方法。 但是,可以插入帶有嵌套替換字段的大括號。
print(f'{name:^18}')  # |      zings     |
(2) sign

sign只對數字起作用

sign作用
+強制對數字使用正負號
-僅對負數使用前導負號(默認)
空格對正數使用一個’ ‘作前導,負數仍以’-'為前導
print(f'{money:+}')  # +19999999877
(3) #選項

'#'選項使“替代形式”用于轉換。 對于不同類型,替代形式的定義不同。 此選項僅對integer,float,complex和Decimal類型有效。 對于整數,當使用二進制,八進制或十六進制輸出時,此選項將前綴“0b”,“0o”或“0x”添加到輸出值。 對于浮點數,復數和十進制,替換形式會導致轉換結果始終包含小數點字符,即使后面沒有數字也是如此。 通常,只有在跟隨數字的情況下,這些轉換的結果中才會出現小數點字符。 此外,對于“g”和“G”轉換,不會從結果中刪除尾隨零。

(4) ,選項

','被用來對數字整數部分進行千分位分隔

描述符作用
,使用,作為千位分隔符
_使用_作為千位分隔符
  • , 僅適用于浮點數、復數與十進制整數:對于浮點數和復數,, 只分隔小數點前的數位。
  • _ 適用于浮點數、復數與二、八、十、十六進制整數:對于浮點數和復數,_ 只分隔小數點前的數位;對于二、八、十六進制整數,固定從低位到高位每隔四位插入一個 _(十進制整數是每隔三位插入一個 _)。
print(f'{money:,}')  # 19,999,999,877
(5) width

width是定義最小字段寬度的十進制整數。 如果未指定,則字段寬度將由內容確定。

當然,format還有很多彪悍的特性,還可以看這位大佬的文章:Python字符串格式化

(6) .precision

.precision對于數字對象,用來指定數字的小數位數,如果有小數;對于非數字對象,用來指定最終返回的格式化字符的最大長度,即格式化完成后,以這個precision參數對結果進行截取

(7) type

[外鏈圖片轉存失敗(img-AtydwvFj-1563463465332)(…/…/image/python_總結_01.png)]

**注意:**格式規范迷你語言對format一樣適用(本來就是format的)

7.4 總結

python最先的格式化字符串方法是%,但他的致命缺點是支持的類型有限,只支持int,str,double,其他所有類型只能轉換為這幾個類型,還有如果傳遞的是元組,那么必須還要傳入一個單值元組,為此,添加了str.format()以解決%-formatting中的一些問題,特別是,它使用普通函數調用語法(并因此支持多個參數),并且可以通過__format __()方法在被轉換為字符串的對象上進行擴展。但str.format()又存在代碼冗余的問題,例如

v = 6*8
print("the value is {}".format(v))

而使用f-string只需要

print(f'the value is{6*8}')

F字符串提供了一種簡潔易讀的方式,可以在字符串中包含Python表達式的值。包括lambda表達式(要放在括號里)

參考文章

PEP 498

python doc

Python字符串格式化

Python格式化字符串f-string概覽

GitHub python 面試題

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/457592.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/457592.shtml
英文地址,請注明出處:http://en.pswp.cn/news/457592.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Android App 優化之 ANR 詳解

為了便于閱讀, 應邀將Android App性能優化系列, 轉移到掘金原創上來.掘金的新出的"收藏集"功能可以用來做系列文集了. 今天先來聊聊ANR. 1, 你碰到ANR了嗎 在App使用過程中, 你可能遇到過這樣的情況: 恭喜你, 這就是傳說中的ANR. 1.1 何為ANR ANR全名Application Not…

微信高級群發接口正文亂碼解決方案

content里面的內空如果含有html標簽的話&#xff0c;需要對內容進行一下轉義。如果里面含有style".."類似于這樣的帶""號的內容的話&#xff0c;就更需要注意了。 foreach ($news as &$item) {foreach ($item as $key > $val){if ($key content){$…

python *args和**kwargs以及序列解包

DAY 8. *args和**kwargs *args&#xff1a;多值元組&#xff0c;**kwargs多值字典&#xff0c;他們是python函數傳參時兩個特殊的參數&#xff0c;args和kwargs并不是強制的&#xff0c;但習慣使用這兩個&#xff0c;如果在函數參數列表中聲明了*args&#xff0c;則允許傳遞任…

解讀直播連麥與點播加密

近年來&#xff0c;直播熱潮持續升溫。有需求就會有變革&#xff0c;直播的相關技術也在不斷更新&#xff0c;為直播行業帶來更好地服務。如&#xff1a;直播連麥與點播加密技術等。 直播連麥&#xff0c;即主播與連麥者通過互動直播中心進行實時互動&#xff0c;信息在云端混流…

血紅蛋白判斷access程序答案_普渡大學開發智能手機應用程序 幫助評估貧血癥情況...

醫生診斷貧血疾病的方法之一&#xff0c;就是通過觀察患者的眼皮&#xff0c;判斷眼皮是否發紅&#xff0c;從而判斷紅細胞的數量。但對醫生來說&#xff0c;面臨的挑戰是&#xff0c;這種簡單的測試不夠精確&#xff0c;無法不從患者身上抽取血樣就能給出診斷。美國普渡大學的…

學習筆記:AC自動機

話說AC自動機有什么用......我想要自動AC機 AC自動機簡介&#xff1a; 首先簡要介紹一下AC自動機&#xff1a;Aho-Corasick automation&#xff0c;該算法在1975年產生于貝爾實驗室&#xff0c;是著名的多模匹配算法之一。一個常見的例子就是給出n個單詞&#xff0c;再給出一段…

python閉包和裝飾器

DAY 9. 閉包和裝飾器 9.1 閉包 閉包就是內部函數對外部函數作用域內變量的引用 可以看出 閉包是針對函數的&#xff0c;還有兩個函數&#xff0c;內部函數和外部函數閉包是為了讓內部函數引用外部函數作用域內的變量的 我們先寫兩個函數 def fun1():print("我是fun1&q…

學歷是銅牌,能力是銀牌,人脈是金牌,思維是王牌

有人工作&#xff0c;有人上學&#xff0c;大家千萬不要錯過這篇文章&#xff0c;能看到這篇文章也是一種幸運&#xff0c;真的受益匪淺&#xff0c;對我有很大啟迪&#xff0c;這篇文章將會改變你我的一生&#xff0c;真的太好了&#xff0c;希望與有緣人分享&#xff0c;也希…

石頭剪刀布python編程_《python核心編程第二版》練習題——游戲:石頭剪刀布

習題里比較有意思的一個題目&#xff0c;實現石頭剪刀布這個游戲&#xff0c;起初設計的時候走彎路了(主要時被習題里那個“盡量少用if判斷”給整暈了)&#xff0c;想的太復雜&#xff0c;后來發現其實非常簡單&#xff0c;完全可以不寫if語句。還是枚舉法&#xff1a;#! /usr/…

SpringMvc面試題

f-sm-1. 講下SpringMvc和Struts1,Struts2的比較的優勢 性能上Struts1>SpringMvc>Struts2 開發速度上SpringMvc和Struts2差不多,比Struts1要高f-sm-2. 講下SpringMvc的核心入口類是什么,Struts1,Struts2的分別是什么 SpringMvc的是DispatchServlet,Struts1的是ActionServl…

python 鴨子類型

DAY 10. 鴨子類型 這個概念來源于美國印第安納州的詩人詹姆斯惠特科姆萊利&#xff08;James Whitcomb Riley,1849-1916&#xff09;的詩句&#xff1a;”When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck.”…

thinkphp一句話疑難解決筆記

URL_PATHINFO_DEPR, depr表示 網頁路徑"分隔符",用"-", 有利于seo,注意是從 sername/index.php(開始的)/home-user-login-var-value開始的,pathinfo也支持普通的參數傳值(僅僅支持參數...). 在thinkphp中,有兩個地方使用depr,另一個就是tpl的文件目錄組織分…

python選取特定行_pandas.DataFrame選取/排除特定行的方法

pandas.DataFrame選取特定行使用Python進行數據分析時&#xff0c;經常要使用到的一個數據結構就是pandas的DataFrame&#xff0c;如果我們想要像Excel的篩選那樣&#xff0c;只要其中的一行或某幾行&#xff0c;可以使用isin()方法&#xff0c;將需要的行的值以列表方式傳入&a…

學校選址_洛谷U3451_帶權中位數

題目描述 在一條大路一旁有許多棟樓&#xff0c;每棟樓里有許多小學生&#xff08;哈哈哈一波小學生來襲&#xff01;&#xff09;。但是這條路上沒有小學&#xff01;&#xff01;&#xff01;&#xff01;所以唯恐世界不亂的牛A打算在路上&#xff08;汽車什么的都不敢來這個…

python 重載的實現(single-dispatch generic function)

DAY 11. python 重載 函數重載是指允許定義參數數量或類型不同的同名函數&#xff0c;程序在運行時會根據所傳遞的參數類型選擇應該調用的函數 &#xff0c;但在默認情況下&#xff0c;python是不支持函數重載的&#xff0c;定義同名函數會發生覆蓋 def foo(a:int):print(fin…

SQL中的多表查詢,以及JOIN的順序重要么?

說法是&#xff0c;一般來說&#xff0c;JOIN的順序不重要&#xff0c;除非你要自己定制driving table。 示例&#xff1a; SELECT a.account_id, c.fed_id, e.fname, e.lname-> FROM account AS a INNER JOIN customer AS c-> ON a.cust_id c.cust_id-> INNER JOIN …

python可變對象 不可變對象_【Python】可變對象和不可變對象

在 Python 中一切都可以看作為對象。每個對象都有各自的 id, type 和 value。id: 當一個對象被創建后&#xff0c;它的 id 就不會在改變&#xff0c;這里的 id 其實就是對象在內存中的地址&#xff0c;可以使用 id() 去查看對象在內存中地址。type: 和 id 一樣當對象唄創建之后…

MySQL 調優基礎(三) Linux文件系統

Linux的文件系統有點像MySQL的存儲引擎&#xff0c;它支持各種各樣的文件系統。它最上層是通過 virtual files system虛擬文件系統作為一個抽象接口層來對外提供調用的。然后下層的各種文件系統實現這些調用接口就行了。 1. Linux 中的 日志文件系統和非日志文件系統 文件內容的…

python 經典類和新式類

DAY 12. python新式類和舊式類 繼承自object基類的類叫做新式類&#xff0c;否則叫做舊式類&#xff0c;python3中的類默認是新式類&#xff0c;之前版本默認是舊式類 rootkail:~# python python 2.7.15 (default,Jul 28 2018,11:29:29) [GCC 8.1.0] on linux2 Type "he…

Why does pthread_cond_signal not work?【轉】

轉自&#xff1a;http://stackoverflow.com/questions/16819169/why-does-pthread-cond-signal-not-work# 0 down vote favorite I am currently learing all around POSIX threads (pthread). I now have created a simple program which increased a shared value by 7 until…