python str.format知識點備忘

来源:https://www.cnblogs.com/ytjoh/archive/2018/09/03/9581975.html
-Advertisement-
Play Games

在Python3.6.5版本測試通過 語法 str.format(*args, **kwargs) 它通過{}和:來代替%。 "映射”示例: 1.通過位置 In [1]: '{0},{1}'.format('kzc',18) Out[1]: 'kzc,18' In [2]: '{},{}'.form ...


在Python3.6.5版本測試通過

語法 str.format(*args, **kwargs)

它通過{}和:來代替%。

"映射”示例:

1.通過位置

In [1]: '{0},{1}'.format('kzc',18)
Out[1]: 'kzc,18'
In [2]: '{},{}'.format('kzc',18)
Out[2]: 'kzc,18'
In [3]: '{1},{0},{1}'.format('kzc',18)
Out[3]: '18,kzc,18'

2.通過關鍵字參數

 In[5]:'{name},{age}'.format(age=18,name='kzc')
Out[5]: 'kzc,18'

          或字典方式

In [9]: dic={'name':'ytjoh','age':48}
   ...: '{name},{age}'.format(**dic)
Out[9]: 'ytjoh,48'

list和tuple可以通過“打散”成普通參數給函數(使用*),而dict可以打散成關鍵字參數給函數(**)。所以可以輕鬆的傳個list/tuple/dict給format函數

3.通過對象屬性

In [28]: class Person:
    ...:   def __init__(self,name,age):
    ...:     self.name,self.age = name,age
    ...:   def __str__(self):
    ...:     return 'This guy is {self.name},is {self.age} old'.format(self=self)

In [29]: str(Person('ytjoh',48))
Out[29]: 'This guy is ytjoh,is 48 old'

4.通過下標

In [30]: p=['ytjoh',48]
    ...: '{0[0]},{0[1]}'.format(p)
Out[30]: 'ytjoh,48'
 
In [40]: dic={'name':'ytjoh','age':48}    
    ...: '{d[name]},{d[age]}'.format(d=dic)
Out[40]: 'ytjoh,48'

 

5.用%s和%r替換
In [35]: "repr() shows quotes: {!r}; str() doesn't: {!s}".format('test1', 'test2')
Out[35]: "repr() shows quotes: 'test1'; str() doesn't: test2"

 

格式限定符(format_spec) 它有著豐富的的“格式限定符”(語法是{}中帶:號),比如: 填充與對齊 填充常跟對齊一起使用 ^、<、>分別是居中、左對齊、右對齊,後面帶寬度 :號後面帶填充的字元,只能是一個字元,不指定的話預設是用空格填充 比如
In [31]: '{:>8}'.format('ytjoh')
Out[31]: '   ytjoh'

format_spec詳解

在這裡,我們重點看一下格式描述(format_spec)這一項。

格式描述中含有6個選項,分別是 fill、align、sign、width、precision、type。 它們的位置關係如下:

[[fill]align][sign][#][0][width][,][.precision][type]
fill 可以是任意字元,預設為空格。

align 僅當指定最小寬度時有效。

< 左對齊(預設選項)
> 右對齊
= 僅對數字有效;將填充字元放到符號與數字間,例如 +0001234
^ 居中對齊

sign 僅對數字有效

+ 所有數字均帶有符號
- 僅負數帶有符號(預設選項)
 即空格;正數前面帶空格,負數前面帶符號


'#'  只對整數有效

      自動在二進位、八進位、十六進位數值前添加對應的 0b、0o、 0x。

','  自動在每三個數字之間添加 , 分隔符。

width  十進位數字,定義最小寬度。如果未指定,則由內容的寬度來決定。

      如果沒有指定對齊方式(align),那麼可以在 width 前面添加一個0來實現自動填充0,等價於 fill 設為 0 並且 align 設為 =。

precision  用於確定浮點數的精度,或字元串的最大長度。不可用於整型數值。

type   確定參數類型,預設為 s ,即字元串。

整數輸出類型:

b:以二進位格式輸出
c:將整數轉換成對應的 unicode 字元
d:以十進位輸出(預設選項)
o:以八進位輸出
x:以十六進位小寫輸出
X:以十六進位大寫輸出
n:與 d 相同,但使用當前環境的分隔符來分隔每3位數字

十進位浮點數輸出類型:

e:指數標記;使用科學計數法輸出,用e來表示指數部分,預設 precision 為6
E:與 e 相同,但使用大寫 E 來表示指數部分
f:以定點形式輸出數值,預設 precision 為6
F:與 f 相同
g:通用格式;對於給定的 precision p >= 1,取數值的p位有效數字,並以定點或科學計數法輸出(預設選項)
G:通用格式;與 g 相同,當數值過大時使用 E 來表示指數部分
n:與 g 相同,但使用當前環境的分隔符來分隔每3位數字
%:百分比標記;使用百分比的形式輸出數值,同時設定 f 標記

 

相關函數:format : 內置函數

         用法:format(value[, format_spec])

本函數把值valueformat_spec的格式來格式化,然而函數解釋format_spec是根據value的類型來決定的,不同的類型有不同的格式化解釋。當參數format_spec為空時,本函數等同於函數str(value)的方式。

其實本函數調用時,是把format(value, format_spec)的方式轉換為type(value).__format__(format_spec)方式來調用,因此在value類型里就查找方法__format__(),如果找不到此方法,就會返回異常TypeError

 

In [36]: print('aaaa'.__format__('?>20'))
????????????????aaaa

In [36]: 

In [37]: format('aaaa','?>20')
Out[37]: '????????????????aaaa'

 

 

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、event.stopPropagation 停止事件的傳播,阻止它被分配到其它Dom節點。但是不能阻止同一Dom節點上的其它事件句柄被調用。 2、event.preventDefault 阻止與事件關聯的預設動作。 ...
  • 本文轉自:http://developer.51cto.com/art/201709/552085.htm 本文轉自:https://www.cnblogs.com/stulzq/p/8573828.html 微服務架構現在是談到企業應用架構時必聊的話題,微服務之所以火熱也是因為相對之前的應用開發方 ...
  • 不管乾什麼,設定一個目標,針對一個目標有一個核心戰略,並堅決的執行核心戰略是取得勝利的不二法寶。 舉個慄子🌰: 三國三分天下。魏蜀吳都有自己的階段性核心戰略。魏國曹操的戰略是挾天子以令諸侯。東吳孫權的戰略是依靠天險,有水做天然屏障,孫吳水師一家獨大。蜀國的戰略是東聯孫權,北拒曹操。 魏國和吳國的執 ...
  • 前言 剛從事開發那段時間不習慣輸出日誌,認為那是無用功,徒增代碼量,總認為自己的代碼無懈可擊;老大的叮囑、強調也都視為耳旁風,最終導致的結果是我加班排查問題,花的時間還挺長的,要復現問題、排查問題等,幸虧那是公司內部員工用的系統,時間長一點也沒什麼大問題,但是如果是針對客戶的,時間就代表很多東西了, ...
  • c++ move關鍵字 move的由來:在 c++11 以前存在一個有趣的現象:T& 指向 lvalue (左傳引用), const T& 既可以指向 lvalue 也可以指向 rvalue。但卻沒有一種引用類型,可以限製為只指向 rvalue。 就這麼簡單!你甚至可以暫時想像它的原型是這樣的(當然 ...
  • 定義用戶去銀行存錢,每次存100,存3次 餓漢式 懶漢式 多線程 在同一時間,做多件事情. 創建線程的方法 繼承類Thread並重寫run(),run()稱為線程體;用這種方法定義的類不能再繼承其他類。 class FirstThread extends Thread{ public void ru ...
  • 常量池: 字元串一旦被初始化就不會被改變 這段代碼看上去s的值是被改變了的,實際上123就是一個對象,他存在於常量池中,abc也是一個對象,s的值實際上是指向123或者abc的地址。 所以當我們使用String s="123";來定義字元串的時候,會先查看常量池中是否有123,有就直接賦值123的地 ...
  • 前言 從去年八月末開始工作一年了,有了大半年的java開發經驗,自認為比在大學時候編碼能力強了很多,但是基礎方面叫不准的地方感覺越來越多了 (;´д`)ゞ 所以,我準備把這些問題以及工作中遇到的問題總結,記錄下來,造福自己和大家~ヾ(o・ω・)ノ 當然,如果大家發現我哪裡寫的有錯誤,歡迎在下方評論指 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...