溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python中格式化字符串輸出的方式有哪些

發(fā)布時間:2023-03-10 10:38:58 來源:億速云 閱讀:135 作者:iii 欄目:開發(fā)技術(shù)

本篇內(nèi)容介紹了“Python中格式化字符串輸出的方式有哪些”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

    一、%號占位符

    這是一種引入最早的一種,也是比較容易理解的一種方式.使用方式為:

    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

    二、str.format 內(nèi)建函數(shù)

    該format函數(shù)是在python2.6以后引入的,是字符呂類型的內(nèi)置方法。因為str.format的方式
    比%在性能和靈活性上更好一些。

    1、使用位置參數(shù)
    按照位置一一對應

    print("{} and {} is good friedng".format('zhangsan', 'lisi'))  # zhangsan and lisi is good friedng

    2、使用索引
    使用索引取對應位置的值

    print('{0}{0}{1}{0}'.format('哈哈', '隔'))  # 哈哈哈哈隔哈哈

    3、使用關鍵字參數(shù)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精確到小數(shù)點后3位,四舍五入
    print("{salary:.10f}".format(salary=123456.1234567))  # 123456.1234567890精確到小數(shù)點后3位,四舍五入
    print("{:-^10.2f}".format(3.1415926))  # ---3.14--- 取2位小數(shù)后,居中,共10位,其余用-填充
    print("{0:b}".format(123))  # 1111011 轉(zhuǎn)成二進制
    print("{0:o}".format(123))  # 173 轉(zhuǎn)成八進制
    print("{0:x}".format(123))  # 7b 轉(zhuǎn)成十六進制
    print("{0:,}".format(1234567))  # 1,234,567 千分位格式化

    三、f-Strings

    由python3.6版本引入的一個特性,稱之為字面量格式化字符串
    以F或者f開頭,后面跟字符串,字符串中的表達式用大括號{}包起來,它會將變量或表達式計算后的值替換進去

    f-string是以f或F開頭的字符串, 核心在于字符串中符號{}的使用

    1、{}中可以是變量名

    name = ‘zhangsan'
    print(f"my name is {name}") # my name is zhangsan

    2 、{}中可以是表達式

    可以在{}中放置任意合法的表達式,會在運行時計算

    print(f"{3 * 3 / 2}")  # 4.5
    
    a = 1
    b = 2
    print(f"a + b = {a + b}")  # a + b = 3

    比如 函數(shù)的調(diào)用

    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  執(zhí)行時打印函數(shù)的返回值
    
    # 在{}中使用‘或者”  保證{}內(nèi)外使用的不一樣即可,如下
    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"{'{}'}")  # 輸出{}  注意兩種引號不一樣
    
    # {}中不允許出現(xiàn)\即使作為函數(shù)參數(shù);必須使用的話,可以將包含\的內(nèi)容放到一個變量里,如下
    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模塊的template

    這是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函數(shù),
    # 當格式化字符串中有變量未給出值時,此函數(shù)將占位符當成字符串輸出,
    # 而substitute會報錯
    
    name = 'zhangsan'
    
    # s2 = f'{name} and {name2}‘s salary is $$1000'
    # res = Template(s2).substitute()
    # print(res)  #  報錯NameError: name 'name2' is not defined
    #學習中遇到問題沒人解答?小編創(chuàng)建了一個Python學習交流群:725638078
    
    s3 = 'hi ${apple}, ${peach}'
    res = Template(s3).safe_substitute(apple='apple')
    print(res)  # hi apple, ${peach}

    五、總結(jié)四種方式的應用場景

    性能對比

    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

    看效率表現(xiàn),還是 最新的f.str最快

    “Python中格式化字符串輸出的方式有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識可以關注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

    向AI問一下細節(jié)

    免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI