Python 格式化輸出技巧


建立時間: 2022年10月16日 01:54
更新時間: 2023年1月18日 10:08

說明

分享一些常見、實用的輸出技巧,學會了可以大大節省寫程式的時間。

基本

我們先看最基本的字串串連,沒有比較,沒有傷害。
寫出來讓讀者們比較差異性。

hello = 'Hello'
world = 'World'
print(hello + ' ' + world)

# 輸出: Hello World

格式化的字串文本 (Formatted String Literals)

這個是我最愛的方式
格式化的字串文本 aka f-字串

hello = 'Hello'
world = 'World'
print(f'{hello} {world}')

# 輸出: Hello World

四捨五入

import math

print(f'The value of pi is approximately {math.pi:.3f}.')

# 輸出: The value of pi is approximately 3.142.

在格式化前先將值轉換過

!s 會套用 str()

from enum import IntEnum


class Numbers(IntEnum):
    ONE = 1
    TWO = 2
    THREE = 3


three = Numbers.THREE
print(f'{three}')
print(f'{three!s}')

輸出

3
Numbers.THREE

!r 會套用 repr()

animals = 'eels'
print(f'My hovercraft is full of {animals}.')
print(f'My hovercraft is full of {animals!r}.')

輸出

My hovercraft is full of eels.
My hovercraft is full of 'eels'.

物件輸出

這是預設輸出物件的內容

class Greeting:
    def __init__(self, name: str = ''):
        self._name = name


greeting = Greeting('Enjoy')
print(greeting)

# 輸出: <__main__.Greeting object at 0x100000000>

假如我想讓 greeting 輸出時顯示的是 Hello World
那麼可以修改 __str__ 方法

再進階一點我想自訂格式
例如上述的四捨五入那樣 print(f'{math.pi:.3f}.')
那麼可以修改 __format__ 方法

class Greeting:
    def __init__(self, name: str = ''):
        self._name = name

    def __format__(self, __format_spec: str) -> str:
        if __format_spec == 'name':
            return f'Hello {self._name}'

        return 'Hello'

    def __str__(self):
        return 'Hello World'


greeting = Greeting('Enjoy')
print(greeting)  # Hello World
print(f'{greeting:name}')  # Hello Enjoy
print(f'{greeting:names}')  # Hello

print(greeting) 直接輸出 __str__ 方法的內容

print(f'{greeting:name}') 使用 __format__ 方法
參數 __format_specname

print(f'{greeting:names}') 同上
但因為沒有特別處理 names,所以直接回傳 Hello

參考

觀看次數: 2081
formatprintpythonstrstring
按讚追蹤 Enjoy 軟體 Facebook 粉絲專頁
每週分享資訊技術

一杯咖啡的力量,勝過千言萬語的感謝。

支持我一杯咖啡,讓我繼續創作優質內容,與您分享更多知識與樂趣!