最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python3.8中使用f-strings調(diào)試

 更新時間:2019年05月22日 16:51:50   作者:小明明S  
這篇文章主要介紹了Python3.8中使用f-strings調(diào)試的相關知識,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下

前言

我日常開發(fā)大概有98%的情況下會使用print來調(diào)試(別說pdb之類的, 根本不實用),通過在合適的位置插入print語句打印出要跟蹤的表達式或者變量的值來確認問題。f-string讓格式化這件事變得美觀簡單,但是依然對調(diào)試毫無幫助。

我舉個例子:

s = 'A string'
value = 123

如果你想看運行時s和value的值分別是多少(PS: 這里演示的是常量,在實際代碼執(zhí)行中可能他們是表達式或者函數(shù)調(diào)用計算出來的,那時它們就是動態(tài)的了),可以在代碼中加一行print打印一下它們:

s = 'A string'
value = 123
print(s, value) # 新插入的行

這樣就能通過日志或者終端知道s和value是什么了。不過,這樣做的問題是,通過輸出對應s和value是不明確的,你需要非常清晰的了解代碼邏輯;如果代碼中有多個print,每個print都是2個參數(shù),就麻煩了:

s = 'A string'
value = 123
print(s, value)
o = 'Other String'
rv = 234
print(o, rv) # 另外一個print

你還得用某種方法區(qū)分他們都是從哪行打印出來的:

s = 'A string'
value = 123
print(s, value, 'S')
o = 'Other String'
rv = 234
print(o, rv, 'Other')

這是我常用的方案,多加一個參數(shù),通過第三項幫你確認分別是哪行打印出來的。

好的寫法需要明確你要跟蹤的變量和值的對應關系。可以這樣寫:

>>> print(f's={s!r}, value={value}')
s='A string', value=123
>>> print(f'o={o!r}, rv={rv}')
o='Other String', rv=234

大括號里面的除了有變量,后面還加個 !r ,它是一個轉(zhuǎn)換標志(conversion flag),在過去的format格式化方法中也有。一共有三種轉(zhuǎn)換標志,另外2個分別是 !a 和 !s ,我們感受一下:

>>> '{!a}'.format('哈哈') # 相當于 ascii('哈哈')
"'\\u54c8\\u54c8'"
>>> '{!s}'.format('哈哈') # 相當于 str('哈哈')
'哈哈'
>>> '{!r}'.format('哈哈') # 相當于 repr('哈哈')
"'哈哈'"

上面的例子中, {s!r} 就是對變量s執(zhí)行 str(s) ,不用(不應該)這樣寫:

>>> print(f's={s}')
s=A string # 注意,沒有引號,空格把值分開了,有多個值的話就不容易辨識
>>> print(f's="{s}"') # 不用`!r`需要手動加引號
s="A string"

不管怎么說,這樣其實已經(jīng)算不錯的了,雖然當要打印的變量比較多的時候print語句非常長...

Python 3.8中f-strings的'='

這個功能還是看PyCON2019的閃電演講看到的,f-strings的作者Eric V. Smith接受了Larry Hastings的意見實現(xiàn)了f-string的調(diào)試功能。本來是想另外一個轉(zhuǎn)換標識 !d ,效果大概是這樣:

value = 10
s = 'a string!'
print(f'{value!d}')
print(f'next: {value+1!d}')
print(f'{s!d}')
print(f'{s!d:*^20}')
print(f'*{value!d:^20}*')
# 輸出
value=10
next: value+1=11
s='a string!'
'****s="A string"****'
*   value=10   *

也就是說,f-strings自動添加 變量名 + = ,而且支持補齊空位還能做表達式求值,如上例, {value+1!d} 表示計算 value+1 再打印出來。

不過后來作者和Guido討論,改用了更靈活的 = ?,F(xiàn)在已經(jīng)合并到Python3.8,我們可以真實的試用了:

❯ ./python.exe
Python 3.8.0a4+ (heads/master:2725cb01d7, May 22 2019, 10:29:22)
...
>>> print(f'{s=}, {value=}')
s='A string', value=123
>>> print(f'{o=}, {rv=}')
o='Other String', rv=234
>>> print(f'{value / 3 + 15=}')
value / 3 + 15=56.0
>>> print(f'{s=:*^20}')
s=******A string******
>>> print(f'*{s=:^20}*')
*s=   A string   *

為啥我說用 = 更靈活呢,再看幾個混合轉(zhuǎn)換標識的例子:

>>> x = '哈哈'
>>> f'{x=}'
"x='哈哈'"
>>> f'{x=!s}'
'x=哈哈'
>>> f'{x=!r}'
"x='哈哈'"
>>> f'{x=!a}'
"x='\\u54c8\\u54c8'"
>>> f'{x=!s:^20}'
'x=     哈哈     '

就是說,DEBUG模式可以和轉(zhuǎn)換標識一起用!

學到了吧?開始期待Python3.8了~

PS: 如果你看了PyCON的那個「Easier debugging with f-strings」的演講(延伸閱讀鏈接2),其中還是說用 !d ,其實演講后第二天就改成了 = 了,要注意哈~

總結(jié)

以上所述是小編給大家介紹的Python3.8中使用f-strings調(diào)試,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的!

相關文章

  • python的三目運算符和not in運算符使用示例

    python的三目運算符和not in運算符使用示例

    這篇文章主要介紹了python的三目運算符和not in運算符使用示例,需要的朋友可以參考下
    2014-03-03
  • 3種Python 實現(xiàn)酷炫進度條的實用方法

    3種Python 實現(xiàn)酷炫進度條的實用方法

    這篇文章主要介紹了3種Python 實現(xiàn)酷炫進度條的實用方法,文章圍繞Python的相關資料展開對實現(xiàn)進度條的介紹,需要的小伙伴可以參考一下
    2022-04-04
  • Python四大模塊文件管理介紹

    Python四大模塊文件管理介紹

    我們可以使用python來操作文件,比如讀取文件內(nèi)容、寫入新的內(nèi)容等,本文主要介紹了Python IO文件管理的具體使用,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • 基于Python實現(xiàn)自制CV剪貼板功能

    基于Python實現(xiàn)自制CV剪貼板功能

    云桌面的win10不能調(diào)出剪貼板,對于CV工程師來說十分不方便,所以這篇文章主要介紹了如何使用Python實現(xiàn)一個CV剪貼板,提升常用語句的復制粘貼效率,感興趣的可以了解下
    2024-02-02
  • selenium獲取元素定位的方法總結(jié)(動態(tài)獲取元素)

    selenium獲取元素定位的方法總結(jié)(動態(tài)獲取元素)

    要想操作一個元素,首先應該識別這個元素,人有各種的特征(屬性),可以通過其特征找到人,同理,界面的某個元素會有各種的特征(屬性),可以通過這個屬性找到這對象,本文給大家介紹了python?selenium獲取元素定位的8種方法,需要的朋友可以參考下
    2024-02-02
  • Python可以實現(xiàn)棧的結(jié)構嗎

    Python可以實現(xiàn)棧的結(jié)構嗎

    在本篇文章里小編給各位整理的是關于Python實現(xiàn)棧的結(jié)構的條件的相關知識點,有需要的朋友們可以學習下。
    2020-05-05
  • Python配置文件yaml的用法詳解

    Python配置文件yaml的用法詳解

    YAML是一種直觀的能夠被電腦識別的的數(shù)據(jù)序列化格式,容易被人類閱讀,并且容易和腳本語言交互。本文將詳細介紹一下Python中yaml文件的用法,需要的可以參考一下
    2022-03-03
  • Python 跨文件夾導入自定義包的實現(xiàn)

    Python 跨文件夾導入自定義包的實現(xiàn)

    有時我們自己編寫一些模塊時,跨文件夾調(diào)用會出現(xiàn)ModuleNotFoundError: No module named 'XXX',本文就來介紹一下解決方法,感興趣的可以了解一下
    2023-11-11
  • 在python3.64中安裝pyinstaller庫的方法步驟

    在python3.64中安裝pyinstaller庫的方法步驟

    這篇文章主要介紹了在python3.64中安裝pyinstaller庫的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-06-06
  • python實現(xiàn)微信防撤回神器

    python實現(xiàn)微信防撤回神器

    這篇文章主要為大家詳細介紹了python實現(xiàn)微信防撤回神器,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-04-04

最新評論

西华县| 呼伦贝尔市| 柘城县| 惠东县| 灵山县| 合山市| 五峰| 加查县| 大城县| 丹江口市| 锦屏县| 松滋市| 盐亭县| 涿鹿县| 旬阳县| 河源市| 饶平县| 定结县| 思茅市| 上虞市| 四平市| 平远县| 通化市| 广丰县| 广平县| 鹤峰县| 安西县| 湘西| 哈尔滨市| 祥云县| 深州市| 浦北县| 二连浩特市| 兴义市| 左贡县| 台中市| 康乐县| 芮城县| 涿州市| 荃湾区| 呼图壁县|