精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

格式化字符串常量f-strings一些不常見的特性

Linux愛好者 ? 來源:Python開發者 ? 作者:風草木香 ? 2022-08-15 12:00 ? 次閱讀

【導語】:本文介紹了“格式化字符串常量”f-strings一些不常見的特性,包括:格式化日期和時間、同時打印變量名和變量值等,嵌套使用f-strings等,此外與其他格式化字符串的方法相比,f-strings的速度更快,因此,學習這些新特性有助于開發者更好地處理字符串。

簡介

f-strings,也稱為格式化字符串常量(formatted string literals),是Python3.6引入的一種字符串格式化方法,它的使用方式為f'xxx',只需將要替換的字段放到{}中,就可以格式化字符串了。相信很多讀者已經使用過f-strings了。然而許多好用的特性你可能還未使用過,我們來一起學習下。Python開發者之前還分享一篇包含73個f-string例子的文章,建議收藏一起閱讀。

1. 格式化日期和時間

用f-strings格式化數字很常見,但你知道f-strings也可以用來格式化日期和時間戳字符串嗎?

importdatetime
today=datetime.datetime.today()
print(f"{today:%Y-%m-%d}")
#2022-07-04
print(f"{today:%Y}")
#2022

f-strings可以格式化日期和時間,它與datetime.strftime的功能一樣。同時,所有底層C實現所支持的格式,在Python的strftime中也可以使用。但在不同的平臺上,使用方式可能有所不同。你可以在Linux manpages[1]上查閱相關信息,例如%F相當于%Y-%m-%d%T相當于%H:%M:%S,此外%x%X分別是設置地區首選的日期和時間格式。

2. 變量名和調試

f-strings最近新增的一個特性是可以同時打印變量名和變量值(Python 3.8及之后的版本均可使用):

x=10
y=25
print(f"x={x},y={y}")
#x=10,y=25
print(f"{x=},{y=}")#更方便!(3.8+)
#x=10,y=25

print(f"{x=:.3f}")
#x=10.000

該特性被稱為“調試”,可以與其他修飾符結合使用。它還能檢測到空格,因此f"[x =]和f"[x =]"會產生不同的結果。

3. __repr__ and __str__

當輸出類的實例時,默認使用的是類的__str__方法。如果我們想將默認方法改為__repr__,可以使用!r進行轉換。

classUser:
def__init__(self,first_name,last_name):
self.first_name=first_name
self.last_name=last_name

def__str__(self):
returnf"{self.first_name}{self.last_name}"

def__repr__(self):
returnf"User'snameis:{self.first_name}{self.last_name}"

user=User("John","Doe")
print(f"{user}")
#JohnDoe
print(f"{user!r}")
#User'snameis:JohnDoe

我們也可以調用f-string內部的repr(some_var)方法,但直接使用轉化標志顯然更加方便。

4. f-strings的性能更優

通常新特性和語法糖的提出都是以犧牲性能為代價的,但f-strings成功做到了兩者兼顧:

#python-mtimeit-s'x,y="Hello","World"''f"{x}{y}"'
fromstringimportTemplate

x,y="Hello","World"

print(f"{x}{y}")#39.6納秒-最快!
print(x+""+y)#43.5納秒
print("".join((x,y)))#58.1納秒
print("%s%s"%(x,y))#103納秒
print("{}{}".format(x,y))#141納秒
print(Template("$x$y").substitute(x=x,y=y))#1.24微秒-最慢!

以上所有示例的耗費時間均是用timeit模塊測試的,例如我們想測試f-strings,就可以這樣做:python -m timeit -s 'x, y = "Hello", "World"' 'f"{x} {y}"',由測試結果可知,f-strings是所有方法中最快的,因此非常推薦使用該方法。

5. 格式化標準

f-strings支持Python的格式化標準[2],所以我們可以在修飾符中進行多種格式化操作:

text="helloworld"

#文本居中:
print(f"{text:^15}")
#'helloworld'

number=1234567890
#加入分隔符
print(f"{number:,}")
#1,234,567,890

number=123
#在起始位置補0
print(f"{number:08}")
#00000123

通過使用Python的格式化功能,不僅可以格式化數字和日期,還可以對齊或居中文本,在字符串前面添加0或者空格,添加分隔符。這些特性也可以在其他格式化方法中使用。

6. f-strings的嵌套使用

如果f-strings的基本功能不能滿足你的需求,你還可以將其嵌套使用,假如我們想在一個數字前加上$符號,可以這樣做:

number=254.3463
print(f"{f'${number:.3f}':>10s}")
#'$254.346'

如果你需要在格式符中加入變量,也可以使用嵌套的f-strings。這樣f-string的可讀性也更強:

importdecimal
width=8
precision=3
value=decimal.Decimal("42.12345")
print(f"output:{value:{width}.{precision}}")
#'output:42.1'

7. 分情況格式化字符串

在嵌套使用f-strings的基礎上,我們還可以在其內部使用三元條件操作符:

importdecimal
value=decimal.Decimal("42.12345")
print(f'Result:{value:{"4.3"ifvalue)
#Result:42.1
value=decimal.Decimal("142.12345")
print(f'Result:{value:{"4.2"ifvalue)
#Result:142

8. Lambda表達式

我們也可以在f-strings中使用lambda表達式,在如下的例子中,我們需要把lambda表達式放到括號中,否則:會被f-strings當作字符串:

print(f"{(lambdax:x**2)(3)}")
#9

結論

通過前面的使用,我們可以看到f-strings還有許多好用的特性,然而許多讀者可能沒有用過這些特性。因此在平時的學習中,我們還可以查看其他模塊的官方文檔,也許你會發現一些有趣的東西。

審核編輯:湯梓紅


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 字符串
    +關注

    關注

    1

    文章

    577

    瀏覽量

    20485
  • python
    +關注

    關注

    56

    文章

    4782

    瀏覽量

    84452

原文標題:實用!f-strings 比你想象的還要強大

文章出處:【微信號:LinuxHub,微信公眾號:Linux愛好者】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    LABVIEW中的printf函數---格式化寫入字符串函數

    `我們經常會遇到格式化字符串輸出的問題,參見下面的程序框圖。在C語言中,類似功能的函數是printf函數,該函數幾乎是C語言經典課程的第節內容,可見其用途之廣泛。C語言中實現上面程序框圖的功能非常
    發表于 11-15 10:46

    Labview格式化寫入字符串函數

    Labview格式化寫入字符串函數
    發表于 12-26 12:42

    格式化寫入字符串函數 求助

    格式化寫入字符串函數格式字符串:%6f\n%s\n%d\n%s這個怎么理解?
    發表于 07-13 13:23

    labview 的格式化字符串,請問選項的參數是0x%02x是什么意思?

    labview 的格式化字符串 選項的參數是0x%02x 是什么意思?
    發表于 07-09 18:58

    C語言技巧 sprintf()函數:將格式化的數據寫入字符串

    格式化字符串”上。printf()和sprintf()都使用格式化字符串來指定格式,在
    發表于 04-01 11:26

    2.6 python字符串格式化

    2.6 python字符串格式化格式化輸出,主要有三種方式使用 % 進行格式化使用 format 函數進行格式化使用
    發表于 02-21 16:28

    AVR入門:怎么樣使用AVR LibC's Stdio發送格式化字符串

    AVR入門:使用AVR LibC's Stdio發送格式化字符串 (#21)
    的頭像 發表于 07-09 00:02 ?3020次閱讀
    AVR入門:怎么樣使用AVR LibC's Stdio發送<b class='flag-5'>格式化</b>的<b class='flag-5'>字符串</b>?

    剖析提升字符串格式化效率的小技巧

    、前言 在嵌入式項目開發中,字符串格式化是很常見的操作,我們般都會使用 C 庫中的 sprintf 系列函數來完成
    的頭像 發表于 04-30 13:43 ?1567次閱讀
    剖析提升<b class='flag-5'>字符串</b><b class='flag-5'>格式化</b>效率的小技巧

    strtok拆分字符串

    就是字符格式。有些場景需要使用多個處理器協同工作,比如單片機+openmv,它們之間需要通信,可以采用字符格式的編碼方式。操作字符串,無非是
    發表于 01-13 15:46 ?8次下載
    strtok拆分<b class='flag-5'>字符串</b>

    python字符串格式化

    python字符串格式化 格式化輸出,主要有三種方式 使用 % 進行格式化 使用 format 函數進行格式化 使用
    的頭像 發表于 02-21 16:28 ?1549次閱讀
    python<b class='flag-5'>字符串</b><b class='flag-5'>格式化</b>

    如何把數字格式化字符串

    在嵌入式項目開發中,字符串格式化是很常見的操作,我們般都會使用 C 庫中的 sprintf 系列函數來完成格式化
    的頭像 發表于 08-04 10:35 ?1918次閱讀

    字符串格式化輸入和輸出

    字符串是內存中段連續的char空間,以’\0’(數字0)結尾。
    的頭像 發表于 02-24 14:34 ?1317次閱讀
    <b class='flag-5'>字符串</b>的<b class='flag-5'>格式化</b>輸入和輸出

    C語言字符串的引用方式

    在C語言程序中,字符串是存放在字符數組中的。 2. 用字符數組存放一個字符串,可以通過數組名和下標引用字符串中的
    的頭像 發表于 03-10 14:57 ?1844次閱讀

    java字符串轉化為日期格式

    ,并提供了一些常見的示例。 首先,我們需要明確日期的格式。在Java中,日期格式通常使用個模式字符串
    的頭像 發表于 11-17 16:38 ?2935次閱讀

    labview中常用的字符串函數有哪些?

    在LabVIEW中,常用的字符串函數廣泛覆蓋了對字符串的各種操作,包括但不限于格式化、搜索、替換、連接、計算長度等。以下是一些常用的字符串
    的頭像 發表于 09-04 15:43 ?518次閱讀