終究還是錯付了!這2種Python寫法已經被淘汰了,你是不是還在用?

語言: CN / TW / HK

關於行程式碼的含義:0.2f,代表取小數點後2位,這個已經在群裡詳細討論過了。

我在這裡,再補充一個知識點:python裡是如何格式化字串的?實際工作中使用的是哪一種?

一、3種方式

  • %格式化
    • 已淘汰
  • format格式化(python2.6新增)
    • 不好用,處於淘汰的邊緣。
  • f-string格式化(python3.6新增)
    • 目前最常用

舉個例子,現在需要列印:你好,我是”晚楓“。 以上3種用法的程式碼如下:


# 1、%格式化
name = '晚楓'
sentence = '你好,我是%s' % (name)
# sentence = 你好,我是晚楓

# 2、format格式化(python2.6新增)
name = '晚楓'
sentence = '你好,我是{}'.format(name)
# sentence = 你好,我是晚楓

# 3、f-string格式化(python3.6新增)
name = '晚楓'
sentence = f'你好,我是{name}'
# sentence = 你好,我是晚楓

二、為什麼第3種最流行?

按照時間順序,每一種新方式的推出,都是對上一種的改進。這3種表達方式,分別改進了上一種的什麼不足呢?

原理層面的我們只說一種:每一種的程式碼執行速度,都比上一種的快。如果想詳細瞭解它們是如何提高效能的,歡迎留言討論~

這裡我們主要說一下用法上的改進:

%格式化

這種表達方式,當變數較多時,很容易混淆,假如我們想寫一句:你好,我是晚楓,今年18歲零48個月,是個程式設計師,喜歡點讚的人

使用這種方式,你將陷入百分號(%)的地獄,稍有不慎就會漏寫一個,導致程式崩潰。

sname = '晚楓'
age = '18歲零48個月'
job = '程式設計師'
hobby = '點讚的人'
sentence = '你好,我是%s,今年%s,是個%s,喜歡%s。' % (name, age, job, hobby)

format格式化

所以,為了改進上面的問題,python2.6新增了format方法。 同樣的例子,使用format方法是下面這樣的:

sname = '晚楓'
age = '18歲零48個月'
job = '程式設計師'
hobby = '點讚的人'
sentence = '你好,我是{},今年{},是個{},喜歡{}。'.format(name, age, job, hobby)
# 你還可以這樣寫
sentence = '你好,我是{name},今年{age},是個{job},喜歡{hobby}。'.format(name, age, job, hobby)

去掉了原有的%,取而代之的是{},甚至還可以把變數名稱寫進—{}裡面進行識別。

雖然比原來的%要清爽一些,但format後面還是要把一大串變數名稱重複寫一遍,是不是依然很麻煩?

f-string格式化

於是,python3.6新增了目前最常用的這種格式化方法,直接上程式碼。

sname = '晚楓'
age = '18歲零48個月'
job = '程式設計師'
hobby = '點讚的人'
sentence = '你好,我是{},今年{},是個{},喜歡{}。'.format(name, age, job, hobby)
# 你還可以這樣寫
sentence = f'你好,我是{name},今年{age},是個{job},喜歡{hobby}。

發現了嗎?你只需要在格式化的字串前面加上一個小寫字母:f,這段字串就可以自動格式化了,既沒有%的冗餘,也沒有format對變數名的重複書寫。

3、寫在最後

每次新的python版本開始研發之時,程式設計師都會高度關注新版本有哪些新特點。為什麼?

原因無它,python一直在進步,看著自己工作的工具變得越來越高階,生產效率越來越高,也是一種樂趣吧。

據說python3.11的速度將提高2倍,我是相當期待了:Python 3.11 ,更快更高更強!


相關閱讀

面試 20k 的 Python 工程師,聊了這 26 個問題,個個都是經典!