Python 技巧:滿意的逗號放置

當你在 Python 中添加或刪除列表、字典或集合中的項目時,記住總是將所有行結尾加一個逗號。這是一個非常有用的技巧,可以幫助你避免一些常見的問題。

不確定我所說的什么?讓我給你一個快速示例。假設你在代碼中有一個名單列表:

>>> names  = ['Alice', 'Bob', 'Dilbert']

當你對這個名單列表進行更改時,很難通過 Git diff 等工具來確定哪個項目被修改了。因為大多數源控制系統都是基于行的,而不是基于內容的。

為了解決這個問題,你可以將列表、字典或集合常量分割成多行,如下所示:

>>> names  = [
...      'Alice',
...      'Bob',
...      'Dilbert'
...      ]

這樣,每個項目都在單獨的一行上,使得你可以很容易地確定哪個項目被添加、刪除或修改了。

但是,當你添加新的項目到列表的結尾時,或者刪除最后一個項目時,你需要手動更新逗號放置以獲取一致的格式。這可能會引起一些混亂。

例如,如果你想添加一個新的名字(Jane)到這個名單中,你需要在 Dilbert 行后加一個逗號:

>>> names  = [
...      'Alice',
...      'Bob',
...      'Dilbert' # <-- 缺失逗號!
...      'Jane'
...      ]

當你檢查列表的內容時,準備接受一個“驚喜”:

>>> names
['Alice', 'Bob', 'DilbertJane']

是的,如你所見,Python 將 Dilbert 和 Jane 兩個字符串合并成 DilbertJane。這個所謂“字符串字面連接”(string literal concatenation)是 Python 的習慣性語法行為,并且在某些情況下非常有用。但是在其他情況下,它可能會引起一些難以捕捉的錯誤。

誠然,字符串字面連接在某些情況下是一個有用的特性。例如,你可以使用它減少必要的反斜杠分隔一個長的跨行字符串:

my_str = ('This is a super long string constant ''spread out across multiple lines. ''And look, no backslash characters needed!')'This is a super long string constant spread out across multiple lines. And look, no backslash characters needed!'

那么如何修正這樣的情形?

在Dilbert后面添加一個逗號,防止兩個字符串合并成一個。

>>> names  = [
...      'Alice',
...      'Bob',
...      'Dilbert'# 添加一個逗號
...      'Jane'
...      ]

現在我們走了一圈回到最初的問題。我不得不調整為兩行為了在列表里增加一個新名字。這樣很難看懂是某人添加了一個新名字?還是某人改變Dilbert的名字?

幸運的是,Python的語法一勞永逸地解決了逗號放置的問題。你只需養成一個編碼風格,避免它在首位置。你把逗號放在在列表、字典或者集合常量的最后一項的后面。這樣,你只需記住一條:永遠用逗號結尾。如下面的例子:

>>> names = ['Alice','Bob','Dilbert',  # 逗號結尾
]

你看到了Dilbert后面的句號嗎?這樣可以方便地添加或移除新項目而不必更改句子結構位置。它保持了代碼行的一致性,使你的源控清晰,并使得代碼看著舒服。有時候神奇就在簡單的小事上體現,是不?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/10416.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/10416.shtml
英文地址,請注明出處:http://en.pswp.cn/web/10416.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

銀行家算法簡易實現

這里寫目錄標題 實驗要求內容代碼main.cppmyfunc.hmyfunc.cpp 運行結果與分析 實驗要求 程序可以針對不同進程的請求進行判斷&#xff0c;并決定是否滿足其需求。算法程序需要設計合理的數據結構&#xff0c;對資源情況、進程相關數據進行存儲。 內容 隨機生成數據, 并校驗數據…

做視頻號小店,怎么找達人合作?這里有詳細講解

大家好&#xff0c;我是電商笨笨熊 做視頻號小店是沒有自然流量的&#xff0c;這點剛入駐的新玩家還不清楚&#xff1b; 因此很多老電商玩家們還想著繼續拿其他平臺動銷自然流的玩法去做視頻號&#xff1b; 只能說這種方式在視頻號是完全行不通的&#xff0c;當下想要推廣售…

設計模式2——原則篇:依賴倒轉原則、單一職責原則、合成|聚合復用原則、開放-封閉原則、迪米特法則、里氏代換原則

設計模式2——設計原則篇 目錄 一、依賴倒轉原則 二、單一職責原則&#xff08;SRP&#xff09; 三、合成|聚合復用原則&#xff08;CARP&#xff09; 四、開放-封閉原則 五、迪米特法則&#xff08;LoD&#xff09; 六、里氏代換原則 七、接口隔離原則 八、總結 一、依賴…

Python-VBA函數之旅-setattr函數

目錄 一、setattr函數的常見應用場景 二、setattr函數使用注意事項 三、如何用好setattr函數&#xff1f; 1、setattr函數&#xff1a; 1-1、Python&#xff1a; 1-2、VBA&#xff1a; 2、推薦閱讀&#xff1a; 個人主頁&#xff1a; https://blog.csdn.net/ygb_1024?…

宏集Panorama SCADA軟件獲BACnet BTL認證

Panorama 獲得BACnet BTL認證 建筑物的組件&#xff08;空調系統、照明傳感器等&#xff09;能否使用共同通訊協議&#xff1f;這正是標準化 BACnet協議&#xff08;Building Automation and Control Networks&#xff09;所提供的功能。該協議旨在實現建筑物中各種設備和系統…

【TS】入門

創建項目 vscode自動編譯ts 生成配置文件 tsc --init 然后發現終端也改變了&#xff1a;

SOCKET編程(3):相關結構體與函數

相關結構體與函數 sockaddr、sockaddr_in結構體 sockaddr和sockaddr_in詳解 struct sockaddr共16字節&#xff0c;協議族(family)占2字節&#xff0c;IP地址和端口號在sa_data字符數組中 /* Structure describing a generic socket address. */ struct sockaddr {__SOCKADDR…

抓大鵝教程電腦端秒通關……

大家好&#xff0c;我是小黃。 最近抓大鵝小程序游戲很火&#xff0c;抓大鵝小游戲是由青島藍飛互娛科技股份有限公司開發并推出的一款休閑益智類三消游戲。在游戲中&#xff0c;玩家需要在特定的“購物籃子”背景下&#xff0c;找到三個相同的物品并將其消除。游戲的玩法簡單…

社工庫信息查詢

此網站需要注冊賬號&#xff0c;新用戶注冊送3點券&#xff0c;每日簽到可獲得1.5點券。也可通過充值來查 我這里有方法可以利用缺陷來無限獲取點券查人

Python 實戰之量化交易

1. Python 實戰之量化交易 2..Python量化交易實戰-04.量化交易系統架構的設計 Python量化交易實戰-04.量化交易系統架構的設計 - 知乎 3.Python量化交易實戰-06.通過PythonAPI獲取股票數據 Python量化交易實戰-06.通過PythonAPI獲取股票數據 - 知乎 3.Python量化交易實戰…

程序員的歸宿。。

大家好&#xff0c;我是瑤琴呀。 相信每個進入職場的人都考慮過自己的職業生涯規劃&#xff0c;在不同的年齡段可能面臨不同挑戰&#xff0c;這點對于 35 的人應該更為感同身受。 對于程序員來說&#xff0c;大部分人的職業道路主要是下面三種&#xff1a;第一條&#xff0c;…

【Delphi 爬蟲庫 6】使用正則表達式提取貓眼電影排行榜top100

正則表達式庫的簡單介紹 正則表達式易于使用&#xff0c;功能強大&#xff0c;可用于復雜的搜索和替換以及基于模板的文本檢查。這對于輸入形式的用戶輸入驗證特別有用-驗證電子郵件地址等。您還可以從網頁或文檔中提取電話號碼&#xff0c;郵政編碼等&#xff0c;在日志文件中…

人生是曠野,不是軌道

最近看到一句話&#xff0c;很喜歡&#xff0c;分享一下。"人生是曠野&#xff0c;不是軌道"。人生不是固定的方程式&#xff0c;也沒有唯一答案&#xff0c;沒有誰生來就應該是什么樣。別太被太多世俗觀念束縛住手腳&#xff0c;每個人都有權利自由生長&#xff0c;…

用友暢捷通T+ keyEdit sql注入漏洞

產品介紹 暢捷通 T 是一款靈動&#xff0c;智慧&#xff0c;時尚的基于互聯網時代開發的管理軟件&#xff0c;主要針對中小型工貿與商貿企業&#xff0c;尤其適合有異地多組織機構&#xff08;多工廠&#xff0c;多倉庫&#xff0c;多辦事處&#xff0c;多經銷商&#xff09;的…

朋友圈刷屏的粘土風格照片,你體驗過了嗎?

Remini 的粘土風格真的丑萌丑萌的&#xff01; 從去年“妙鴨相機”的走紅&#xff0c;到今年Remini的刷屏&#xff0c;其實可以看出大眾對于圖片趣玩的興趣非常大&#xff01; 一張普通的照片經過工具的處理&#xff0c;一下子變成新風格&#xff0c;讓人眼前一亮。如果你也對…

GPT-SoVits:語音克隆,語音融合

首發網站 https://tianfeng.space 前言 零樣本文本到語音&#xff08;TTS&#xff09;&#xff1a; 輸入 5 秒的聲音樣本&#xff0c;即刻體驗文本到語音轉換。少樣本 TTS&#xff1a; 僅需 1 分鐘的訓練數據即可微調模型&#xff0c;提升聲音相似度和真實感。跨語言支持&…

信息收集方法合集 第1期

前言 在工作中&#xff0c;經常被問到某個文件怎么下載&#xff0c;原文來自哪里。索性把我知道的所有信息收集方法全部整理一遍&#xff0c;希望對大家有用&#xff0c;如果有幫助到你&#xff0c;非常榮幸&#xff0c;我會堅持分享我的學習、工作經驗。 信息種類&#xff1…

如何用java編寫一個猜數字游戲

我想到用c能編出一個猜數字游戲&#xff0c;于是我就嘗試用java編寫一個 代碼如下&#xff1a; import java.util.Scanner; import java.util.Random;public class GuessTheNumber {public static void main(String[] args) {Scanner scanner new Scanner(System.in);Random…

云啟未來:“云計算與網絡運維精英交流群”與“獨家資料”等你來探索“

作者簡介&#xff1a;一名云計算網絡運維人員、每天分享網絡與運維的技術與干貨。 公眾號&#xff1a;網絡豆云計算學堂 座右銘&#xff1a;低頭趕路&#xff0c;敬事如儀 個人主頁&#xff1a; 網絡豆的主頁????? &#x1f680; 云計算與運維精英交流群誠邀您的加入…

搭建Docker私服鏡像倉庫Harbor

1、概述 Harbor是由VMware公司開源的企業級的Docker Registry管理項目&#xff0c;它包括權限管理(RBAC)、LDAP、日志審核、管理界面、自我注冊、鏡像復制和中文支持等功能。 Harbor 的所有組件都在 Dcoker 中部署&#xff0c;所以 Harbor 可使用 Docker Compose 快速部署。 …