當前位置 博文首頁 > 信息技術智庫:Python 編碼規范(Google) (一)

    信息技術智庫:Python 編碼規范(Google) (一)

    作者:[db:作者] 時間:2021-09-13 19:02

    Python 風格規范(Google)

    本項目并非 Google 官方項目, 而是由國內程序員憑熱情創建和維護。

    如果你關注的是 Google 官方英文版, 請移步?Google Style Guide

    以下代碼中?Yes?表示推薦,No?表示不推薦。


    分號

    不要在行尾加分號, 也不要用分號將兩條命令放在同一行。


    行長度

    每行不超過80個字符

    以下情況除外:

    1. 長的導入模塊語句
    2. 注釋里的URL

    不要使用反斜杠連接行。

    Python會將?圓括號, 中括號和花括號中的行隱式的連接起來?, 你可以利用這個特點. 如果需要, 你可以在表達式外圍增加一對額外的圓括號。

    推薦: foo_bar(self, width, height, color='black', design=None, x='foo',
                 emphasis=None, highlight=0)
    
         if (width == 0 and height == 0 and
             color == 'red' and emphasis == 'strong'):

    如果一個文本字符串在一行放不下, 可以使用圓括號來實現隱式行連接:

    x = ('這是一個非常長非常長非常長非常長 '
         '非常長非常長非常長非常長非常長非常長的字符串')

    在注釋中,如果必要,將長的URL放在一行上。

    Yes:  # See details at
          # http://www.example.com/us/developer/documentation/api/content/v2.0/csv_file_name_extension_full_specification.html
    No:  # See details at
         # http://www.example.com/us/developer/documentation/api/content/\
         # v2.0/csv_file_name_extension_full_specification.html

    注意上面例子中的元素縮進; 你可以在本文的 :ref:`縮進 <indentation>`部分找到解釋.


    括號

    寧缺毋濫的使用括號

    除非是用于實現行連接, 否則不要在返回語句或條件語句中使用括號. 不過在元組兩邊使用括號是可以的.

    Yes: if foo:
             bar()
         while x:
             x = bar()
         if x and y:
             bar()
         if not x:
             bar()
         return foo
         for (x, y) in dict.items(): ...
    No:  if (x):
             bar()
         if not(x):
             bar()
         return (foo)

    縮進

    用4個空格來縮進代碼

    絕對不要用tab, 也不要tab和空格混用. 對于行連接的情況, 你應該要么垂直對齊換行的元素(見 :ref:`行長度 <line_length>` 部分的示例), 或者使用4空格的懸掛式縮進(這時第一行不應該有參數):

    Yes:   # 與起始變量對齊
           foo = long_function_name(var_one, var_two,
                                    var_three, var_four)
    
           # 字典中與起始值對齊
           foo = {
               long_dictionary_key: value1 +
                                    value2,
               ...
           }
    
           # 4 個空格縮進,第一行不需要
           foo = long_function_name(
               var_one, var_two, var_three,
               var_four)
    
           # 字典中 4 個空格縮進
           foo = {
               long_dictionary_key:
                   long_dictionary_value,
               ...
           }
    No:    # 第一行有空格是禁止的
          foo = long_function_name(var_one, var_two,
              var_three, var_four)
    
          # 2 個空格是禁止的
          foo = long_function_name(
            var_one, var_two, var_three,
            var_four)
    
          # 字典中沒有處理縮進
          foo = {
              long_dictionary_key:
                  long_dictionary_value,
                  ...
          }

    空行

    頂級定義之間空兩行, 方法定義之間空一行

    頂級定義之間空兩行, 比如函數或者類定義. 方法定義, 類定義與第一個方法之間, 都應該空一行. 函數或方法中, 某些地方要是你覺得合適, 就空一行.


    空格

    按照標準的排版規范來使用標點兩邊的空格

    括號內不要有空格.

    按照標準的排版規范來使用標點兩邊的空格

    Yes: spam(ham[1], {eggs: 2}, [])
    No:  spam( ham[ 1 ], { eggs: 2 }, [ ] )

    不要在逗號, 分號, 冒號前面加空格, 但應該在它們后面加(除了在行尾).

    Yes: if x == 4:
             print x, y
         x, y = y, x
    No:  if x == 4 :
             print x , y
         x , y = y , x

    參數列表, 索引或切片的左括號前不應加空格.

    Yes: spam(1)
    no: spam (1)
    Yes: dict['key'] = list[index]
    No:  dict ['key'] = list [index]

    在二元操作符兩邊都加上一個空格, 比如賦值(=), 比較(==, <, >, !=, <>, <=, >=, in, not in, is, is not), 布爾(and, or, not). 至于算術操作符兩邊的空格該如何使用, 需要你自己好好判斷. 不過兩側務必要保持一致.

    Yes: x == 1
    No:  x<1

    當'='用于指示關鍵字參數或默認參數值時, 不要在其兩側使用空格.

    Yes: def complex(real, imag=0.0): return magic(r=real, i=imag)
    No:  def complex(real, imag = 0.0): return magic(r = real, i = imag)

    不要用空格來垂直對齊多行間的標記, 因為這會成為維護的負擔(適用于:, #, =等):

    Yes:
         foo = 1000  # 注釋
         long_name = 2  # 注釋不需要對齊
    
         dictionary = {
             "foo": 1,
             "long_name": 2,
             }
    No:
         foo       = 1000  # 注釋
         long_name = 2     # 注釋不需要對齊
    
         dictionary = {
             "foo"      : 1,
             "long_name": 2,
             }
    cs
程序員cxuan的個人主頁:這篇 Java 基礎,我吹不動了 小小張自由―>張有博:軟件工程――編碼、測試、維護 小小張自由―>張有博:淺談面向對象方法學 小小張自由―>張有博:UML――概述(事物、關系、圖) 小小張自由―>張有博:UML――用例圖 小小張自由―>張有博:UML――活動圖和狀態圖 小小張自由―>張有博:UML――交互圖(順序圖與協作圖) 小小張自由―>張有博:UML――實現圖(構件圖與部署圖) 小小張自由―>張有博:C#編程基礎――C#與.NET的關系 小小張自由―>張有博:C#編程基礎――數據類型 小小張自由―>張有博:C#編程基礎――常量與變量 小小張自由―>張有博:C#編程基礎――運算符與表達式 小小張自由―>張有博:C#編程基礎――循環語句 小小張自由―>張有博:C#編程基礎――跳轉語句 小小張自由―>張有博:C#編程基礎――類 小小張自由―>張有博:C#編程基礎――方法 小小張自由―>張有博:初始三層架構(超超超詳細) 小小張自由―>張有博:C#連接數據庫之Connection、Command、D 小小張自由―>張有博:System.ArgumentOutOfRangeException: 小小張自由―>張有博:機房重構之單例模式的應用 小小張自由―>張有博:機房重構之備忘錄模式的應用 小小張自由―>張有博:機房重構之職責鏈模式的應用 小小張自由―>張有博:HTML基礎――標簽 小小張自由―>張有博:div+css的入門知識 小小張自由―>張有博:CSS核心內容:標準流、盒子模型、浮動 小小張自由―>張有博:asp.net生成驗證碼并提交驗證 小小張自由―>張有博:XML基礎 小小張自由―>張有博:各種計算機語言簡短簡介 小小張自由―>張有博:2020年10月自考總結 小小張自由―>張有博:vs2019利用gitee(碼云)協作開發 小小張自由―>張有博:1024程序員節 小小張自由―>張有博:IDEA2020.3詳細安裝教程 小小張自由―>張有博:JavaWeb之Request與Response詳解 小小張自由―>張有博:JavaWeb之Filter和Listener 小小張自由―>張有博:Vue插件報錯:Vue.js is detected on t 小小張自由―>張有博:在項目中使用Spring Cloud Alibaba Sen 小小張自由―>張有博:在項目中使用OpenFeign 小小張自由―>張有博:解決idea打開Vue項目報紅 小小張自由―>張有博:CentOS7詳細安裝教程--圖文介紹超詳細 zhtbs的博客:Springboot 入門培訓 5 Thymeleaf 與 MVC項目搭建 zhtbs的博客:(Framework7 移動webapp) Springboot 入門培訓 7 zhtbs的博客:HTML+CSS+JavaScript 迷宮生成算法 【建議收藏】 zhtbs的博客:(Framework7 移動webapp) Springboot 入門培訓 8 C zhtbs的博客:Springboot 入門培訓 9 Security(一) 登錄驗證 zhtbs的博客:Springboot 入門培訓 4 WEB+JSP MVC項目搭建 zhtbs的博客:Springboot 入門培訓 10 Security(二) 數據庫DB 貓耳山在天邊:《Linux命令行與shell腳本編程大全》(第三版)讀 英雄哪里出來:??13萬字《C語言動漫對話教程(入門篇)》??(建議收 qq1113673178的博客:[學習][筆記] qt5 從入門到入墳:<12>Grap qq1113673178的博客:[學習][筆記] qt5 從入門到入墳:<13>基于 .net平臺的rabbitmq使用封裝demo詳解 C++類的特種函數生成機制詳解 Python調用百度AI實現圖片上表格識別功能 node自定義安裝更改npm全局模塊默認安裝路徑的步驟 帶你用C語言實現strtok和字符串分割函數 靜態網頁和靜態網頁性能比較 網頁標題優化原則和描述優化原則 php 怎么設置cookie記住密碼 php設置時區無效怎么辦 php __autoload 失效怎么辦 有關PHP調試的小技巧,看看吧! 從0開始:教你微信小店怎么開! 成本5元竟然賣50元 微信朋友圈賣面膜真黑啊 HashMap原理及put方法與get方法的調用過程 基于IDEA 的遠程調試 Weblogic的操作過程 UTC時間、GMT時間、本地時間、Unix時間戳的具體使用 如何利用SwiftUI實現可縮放的圖片預覽器 網站怎么利用內容更新雙重境界快速提高網站權重? php顯示繁體亂碼怎么辦 php不能開啟php_curl怎么辦
A级免费视频