Python中的「f-」字符串

2021-03-02 娜驛站
前言在Python中,字符串的列印大家都知道是用print函數,如果在字符串中嵌有其它變量的話,一般我們有兩種方式來處理,一是最原始的將字符串、變量分別作為print的參數,一一列寫;一種是將{}佔位符在字符串應該嵌入變量的位置提前插入,並用.format()格式函數將對應的變量一一附於其後,比如:
name = "小旺"print("你好!", name, "!")print("你好! {} !".format(name))

從形式上來說,format顯得更有規律一些,但對於程序中經常列印一些調試信息而言,它又過於正式而顯得有些臃腫,從Python3.6開始,Python中提供一種輕量級的格式化字符方式,由於它是以f字符開始,所以我們稱之為f-字符串。這一篇我們就來對進行介紹。
變量、表達式在字符串中的插補讓我們從一些最簡單的例子入手來看看f-字符串的簡單用法,通常要定義一個f-字符串,需要以f開頭,並將變量用一對{}框起來,比如:
name = "花花"f"你好!{name}!"
>>> 輸出:'你好!花花!'
student_id = 23f"我的學號是:{student_id}"
>>> 輸出:'我的學號是:23'

如果用.format來表示上述兩個例子,則是這樣的:
"你好!{}!".format(name)"我的學號是:{}".format(student_id)

相較之下,f-字符串比.format格式還是顯得輕盈許多,下面繼續給出例子:
fruit = ["蘋果", "香蕉", "梨子", "桃子"]f"水果:{fruit}"
>>> 輸出:"水果:['蘋果', '香蕉', '梨子', '桃子']"
grades = {"小明":100, "花花":80}f"成績:{grades}"
>>> 輸出:"成績:{'小明': 100, '花花': 80}"

從以上代碼可以看出,在f-字符串{}中的變量會將其原本的數據類型完全展現,這樣我們可以很方便地訪問其中的一個或一些數據,比如:
f"我喜歡的水果:{fruit[-1]}"
>>> 輸出:'我喜歡的水果:桃子'

number = 7f"{number}的平方是{number*number}"
>>> 輸出:'7的平方是49'

在使用python的時候,我們經常需要自定義一些類,下面我們來看看由自定義類創建的對象在f-字符串的表現:
class Student:    def __init__(self, name, age):        self.name = name        self.age = age        student = Student("小明", 10)print(f"Student: {student}")
>>> 輸出:Student: <__main__.Student object at 0x0000018B299EB160>

從上述列印結果來看,只列印了變量student是Student對象,並沒有顯示出該學生變量的名字和年齡,這不是我們想要的結果,那麼能不能不改變print語句,只修改Student類來達到我們的目的呢?答案是肯定的,下面來升級一下Student類:
class Student:    def __init__(self, name, age):        self.name = name        self.age = age            def __str__(self):        print("__str__被調用:")        return f"姓名:{self.name},年齡:{self.age}"    student = Student("小明", 10)print(f"Student: {student}")
>>> 輸出:__str__被調用:Student: 姓名:小明,年齡:10

這樣就達到了我們的目的,仔細觀察上述類,會發現我們為其增加了一個__str__方法,該方法主要是當要顯示由該類創建的對象時,自動觸發的,比如print函數是列印函數,在列印由Student類創建的對象時,__str__就被自動調用了。事實上,在內置的整數、字典等類型中,都有該方法的身影。數據轉換與__str__()功能相似的是__repr__()函數,用後者調用變量的方式叫數據轉換,__repr__或repr()是Python的內置函數,它主要是將變量轉換成可列印的字符串,通常它是用在交互式的解釋器中,比如:
ages = {"小花":10, "小明":11}ages
>>> 輸出:{'小花': 10, '小明': 11}

在這段代碼中,解釋器就調用的是__repr__來列印變量ages的,我們可以顯式調用:
repr(ages)ages.__repr__()
>>> 輸出:"{'小花': 10, '小明': 11}""{'小花': 10, '小明': 11}"

當然,在我們自定義的類中,同樣可以重載__repr__函數:
class Student:    def __init__(self, name, age):        self.name = name        self.age = age            def __str__(self):        print("__str__被調用:")        return f"姓名:{self.name},年齡:{self.age}"        def __repr__(self):        print("__repr__被調用:")        return f"姓名:{self.name},年齡:{self.age}"
student = Student("小明", 10)student
>>> 輸出:__repr__被調用:姓名:小明,年齡:10

很明顯,在我們為Student類定義了__repr__時,直接在交互式解釋器中輸入student,就可以觸發__repr__函數,否則只會列印出該對象屬於Student類。下面我們用f-字符串來調用一下這兩個重載的函數:
print(f"Student str: {student!s} Student repr: {student!r}")
>>> 輸出:__str__被調用:__repr__被調用:Student str: 姓名:小明,年齡:10 Student repr: 姓名:小明,年齡:10

同學們可能注意到,在訪問變量的__repr__時,我們用了!r,在訪問__str__時,我們用了!s,採用 這兩個特別的符號,可以訪問變量對應的函數。多行字符串我們在列印字符串時,經常會用到換行操作,通常情況下都是用\n來進行分割,f-字符串也支持這樣的操作,但也有屬於自已的獨特的三點式操作,下面展示兩種風格:
name = "花花"print(f"**********\n{name}\n**********")
>>> 輸出:**********花花**********
print(f'''**********... {name}... **********''')
>>> 輸出:**********花花**********

關於「三點」操作符是要在三引號中進行的,並且要有手動換行操作,才能實現,請同學們測試時注意。數字和字符串格式在對數字進行輸出時,經常會有一些常用的格式化操作,下面演示一下這類情況:
big_number = 987654321987612345f"{big_number:_d}"
>>> 輸出:'987_654_321_987_612_345'
more_digits = 3.1415926print(f"2位小數:{more_digits:.2f}\n4位小數:{more_digits:.4f}")
>>> 輸出:2位小數:3.144位小數:3.1416

sci_number = 0.00000043234f"number: {sci_number:e}"
>>> 輸出:'number: 4.323400e-07'

在實際列印字符串的過程中,經常會用到一些對齊操作,f-字符串同樣對這些進行了有力的支持,對於對齊操作,<、>、^分別對應了左對齊、右對齊和居中操作,下面給出一些例子:
s0, s1 = 'a', 'ab'
print(f"{s0:*<7}\n{s1:*<7}")>>> 輸出:a******ab*****
print(f"{s0:%>10}\n{s1:%>10}")>>> 輸出:%%%%%%%%%a%%%%%%%%ab
print(f"{s0:@^10}\n{s1:@^10}")>>> 輸出:@@@@a@@@@@@@@@ab@@@@

print(f"{'Hello'\n'World'}")

小結在這篇文章中,我們介紹了f-字符串操作,它是一種功能相當強大且靈活的字符串處理方式,學會使用這個方法,將使得我們在調用print時顯得相當方便。

相關焦點

  • Python 入門 – 使用字符串
    在本文中,你將學習如何:創建字符串字符串方法字符串格式化字符串連接字符串切片讓我們從學習創建字符串的不同方法開始吧!創建字符串這裡是創建字符串的一些例子:實際上,你經常會從字符串中去除行尾字符,然後對結果使用.split()來解析出子字符串。我們來做一個小練習,在這裡你將學習如何解析出一個字符串中的第二個單詞。首先,這裡有一個字符串:
  • 【語言學習】python——字符串
    字符串的基本操作圖源:清華大學公眾號•python中一共提供了2類4中字符串的表示方法,如果希望在字符串中包含雙引號或者單引號。那麼如果想表示雙引號的話,字符串就用單引號,反之亦然。     •字符串的序號有正向遞增序號和反向遞減序號•正向遞增從0開始;•反向遞減從-1開始;•索引:返回字符串中單個字符 <字符串>[M].
  • Python基礎知識點手冊——字符串方法(二)
    Example: '.'.join(['ab', 'pq', 'rs']) -> 'ab.pq.rs'返回一個由 iterable 中的字符串拼接而成的字符串。如果 iterable 中存在任何非字符串值則會引發 TypeError。調用該方法的字符串將作為元素之間的分隔。
  • 13-python中的字符串
    通過前兩天的文章12-python中的集合我們學習了有關集合的知識,今天我們將學習一下python中的字符串。(一)字符串的介紹    字符串,是python中的基本數據類型,是一個不可變的字符序列。    字符串的駐留機制,是僅保留一份相同且不可變字符串的一種方法。
  • 慢步學python,編程基礎,字符串類型例子及輸出
    想了解python的安裝及運行的可以看慢步之前寫的文章。今天繼續python編程基礎內容,字符串類型數據。python裡面主要的數據類型是數值類型和字符串類型。計算機可以進行運算的是數值,字符串不能進行數學運算,像你在閱讀的文字,可以理解為字符串的一種。
  • 奇技淫巧 - Python分割字符串的5個示例
    例如,' 1 2 3 '.split()返回['1', '2', '3']示例1:使用空格分割字符串在這個示例腳本中,我們將使用空格作為分隔符將包含字符串的句子分割成多個子字符串。如果沒有要定義的分隔符,那麼可以只提供split(),它在默認情況下將分隔符視為None。#!
  • Python字符串的45個方法詳解
    ['f_{}'.format(r) for r in list('abcde')]['f_a', 'f_b', 'f_c', 'f_d'] 18、format_map()描述:#字符串中的字母全為小寫"i love python".islower()True #字符串中的字母全為小寫,也存在非字母的字符"我愛python!".
  • Python變量,輸入和輸出,數字,字符串操作
    標示符是自己定義的,直指程式設計師的本心,就是開發人員在程序中自定義的一些符號和名稱,如變量名 、函數名等。python中推薦使用下劃線「_」來連接,但在命名時一定要注意關鍵字。什麼是python字符串:雙引號或者單引號中的數據,就是字符串a = 10000 數字類型b = 'hello world' 字符串類型
  • python基礎學習—04字符串與編碼
    三、python源文件編碼3.1  python2.x在python2.x中,python源文件默認使用ASCII碼格式編碼,因此默認情況下是不支持中文的。如果強制輸出中文編譯會報錯,這時如果想在python2.x源文件代碼中輸入中文符,需要使用UTF-8編碼,在源文件開頭處添加:或者3.2  python3.x在python3.x中,python原始碼文件默認統一使用Unicode編碼,默認以UTF-8格式編碼,就可以直接輸出中文字符,不需要在源文件開頭添加上述代碼。
  • 轉載 | 史上最全 python 字符串操作指南
    ,to learn is to better'字符串切片字符串的切片分為 long_string[start:end;step] start、end 區間為左閉右開...這個網上說的太多了,再拉出來詳細講就要挨打了...
  • Python中的字符串和字符數據(上)
    字符串切片Python中還允許一種能夠從字符串中提取子字符串索引語法形式,該操作稱為字符串切片。如果s是一個字符串,則形如s[m:n]的表達式返回s中以m位置開頭,以n位置結束(不包含該位置)的部分:向字符串中插入變量在Python 3.6中,引入了一種新的字符串格式化機制。此功能正式命名為Formatted String Literal,但更常見的是其暱稱f-string。
  • 【python速查系列】字符串系列使用速查--分割
    」字符串的分割也是我們日常生活中常用的,本篇提供一些常用方法的實例,方便大家用到的時候查詢。字符串的分割,通常有split 和partition 系列方法。split 系列split 系列方法包括split() 、rsplit() 、splitlines() 等。
  • python字符串格式化深入詳解(四種方法)
    前言:本文詳細整理了python字符串格式化的幾種方式。
  • Python的基本數據類型之二:字符串(String)(上)
    字符串類型在Python中是一種最常見,也是最常用的類型,從今天開始,我們分三個章節,儘可能詳細的對字符串進行介紹,希望朋友們多多關注我們,對我們也是一種極大的支持和鼓勵,謝謝!字符串聲明:在Python3中,字符串的聲明方法有:單引號、雙引號、三個單引號、三個雙引號;例如:>>>str1= 'hello world'>>>str2= "hello world
  • Python3的字符串類型(瘋狂Python)
    字符串可以用+運算符連接在一起,用*運算符重複。Python中的字符串有兩種索引方式,從左往右以0開始,從右往左以-1開始。Python中的字符串不能改變。raw_input()是python 2中的,相當於python 3中的inputIn [27]: i = input()1
  • Python字符串
    字符串序列用於表示和存儲文本,python中字符串是不可變對象。
  • python爬蟲-字符串
    python字符串 Python中的字符串可以使用單引號、雙引號和三引號(三個單引號或三個雙引號,可以換行的)括起來,使用反斜槓 \ 轉義特殊字符
  • python爬蟲 - 字符串
    python字符串Python中的字符串可以使用單引號、雙引號和三引號(三個單引號或三個雙引號,可以換行的)括起來,使用反斜槓 \ 轉義特殊字符Python3源碼文件默認以UTF-8編碼,所有字符串都是unicode字符串支持字符串拼接、截取等多種運算
  • 關於Python字符串,90%以上的知識點都在這裡了
    python 字符串詳解大家好,我是 Lemon 。在前不久, Lemon 將 Python 字符串相關的內容整理成一份 速查表(pdf版),有同學問有沒有文字版的內容。Python字符串速查表別小看 Python 字符串,它是 Python 最重要的基礎之一, Lemon 在整理的過程中,發現內容也不少。
  • python之字符串詳解
    學習過C/C++的同學轉寫python會很容易理解裡面的規則,從而使得代碼更加高效,優雅。下面我們總結一下python的基礎知識。C/C++標識符的命名規則:變量名只能包含字母、數字和下劃線,並且不可以以數字打頭。不可以使用C/C++的關鍵字和函數名作為變量名。