日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python 最佳实践

發布時間:2025/3/14 python 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python 最佳实践 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

對我來說,以前每次面試是我審視自己,檢驗自己的一種方式。每次準備面試,以及被面試官問住的時候才會發現,其實我python我學的還不夠好。工作中也是,可以從其他的同事那里獲得成長。但是我今天說的是,我也在自己總結和思考最佳實踐這件事。

我想很多人都會有意識的去讀一些PEP(Python Enhancement Proposals)。了解語言設計者當時的考慮,這些文案也是經過很長時間的討論最后才實施的。既然想用好這門語言,必然需要理解設計之美。比如我聽說gvanrossum使用emacs作為編輯器,我也使用emacs,就是希望我可以更貼近一些python。

本文根據 The Best of the Best Practices (BOBP) Guide for Python 和 Khan’s style-guides中對于開發中一些事物的理解和看法,有出至PEP,也有一些python界知名開發者,我加入了一些我自己的理解和看法。

價值觀

“Build tools for others that you want to be built for you.” – Kenneth Reitz (Requests等知名庫作者)

你自己都不想用的東西做出來有什么意義呢?

“Simplicity is alway better than functionality.” – Pieter Hintjens (ZeroMQ)

我對函數式編程的看法一直是看場景,甚至于我經常會對比性能,義無反顧的使用性能最好的,但是代碼又不難懂和繁瑣的

“Fit the 90% use-case. Ignore the nay sayers.” – Kenneth Reitz

程序員都有完美主義情懷,但是其實往往我們是在偏激的看事情 – 用戶其實不case

“Beautiful is better than ugly.” – PEP 20

開發參考

“Explicit is better than implicit” – PEP 20

不要留坑,我經常看到一些復雜的代碼,這些代碼的作者寫的時候明顯知道自己在做什么,但是別人很難維護和看懂.
所以我對自己的職業的基本要求就是: 那天我離職了,后來接手的人不會經常罵我

“Readability counts.” – PEP 20

“Anybody can fix anything.” – Khan’s style-guides

我現在更多不是代碼炫技,我經常思考的怎么讓最少的代碼,最簡單的設計結構滿足當前需求,也能給未來一段時間里也有擴展性

Fix each broken window (bad design,wrong decision,or poor code) as soon as it is discovered.

我們改bug有個原則 – 測試要覆蓋到出bug的地方。每個人內心都有很高的代碼質量的要求

“Now is better than never.” – PEP 20

明日復明日,明日何其多。我們在代碼review的時候,問題需要在提出的時候就去改,永遠不會說下一次再說,因為下一次大多時候是沒有下一次了

Test ruthlessly. Write docs for new features.

Even more important that Test-Driven Development–Human-Driven Development

一些細節

PEP8

很多人是排斥的,假如你想讓未來部門有自己的風格,習慣。讓新人馬上上手接受,PEP8是一個非常明智的選擇

文件開頭

新的文件的開頭需要加一些docstring。描述文件的作用,編輯者,修改原因和日期等幫助閱讀者的描述.

不要添加#!/usr/bin/python(除非這個文件未來是一個可執行的文件),copyright,__author__或者其他內容.

第一行建議添加# coding-utf-8

命名

  • Variables,functions,methods,packages,moduleslower_case_with_underscores
  • Classes and ExceptionsCapWords
  • Protected methods and internal functions_single_leading_underscore(self,…)
  • Private methods__double_leading_underscore(self,…)
  • ConstantsALL_CAPS_WITH_UNDERSCORES
  • Avoid one-letter variables (esp. l,O,I).永遠不要使用沒有意義的單字符作為變量名
  • PS: 這點可以折中,假如一個代碼塊代碼邏輯很清晰,而 這個短的便令也只是過程中的一個間接變量之類的情況下是可以接受的

    Good or Bad

    列舉一些正確和錯誤的用法.

    Avoid redundant labeling.

    # Good import audiocore=audio.Core() controller=audio.Controller()# Bad import audiocore=audio.AudioCore() controller=audio.AudioController()

    ?

    不要使用重復意義的標簽

    Prefer “reverse notation”.

    # Good elements=... elements_active=... elements_defunct=...# Bad elements=... active_elements=... defunct_elements...

    Avoid getter and setter methods.

    # Good person.age=42# Bad person.set_age(42)

    ?

    Indentation

    永遠不要Tab和空格混用。使用4個空格作為python縮進

    Imports

    Import entire modules instead of individual symbols within a module.

    PS: 這個時候可以參考tornado的代碼用法.

    比如現在有這樣一個包

    $tree └──canteen├──__init__.py├──sessions.py # Good import canteen import canteen.sessions from canteen import sessions# Bad from canteen import get_user # Symbol from canteen/__init__.py from canteen.sessions import get_session # Symbol from canteen/sessions.py

    ?

    PS: 除非這個第三方模塊的文檔顯式的要求這些寫

    Splitting tricky lines

    # Bad: badge_name=badges.topic_exercise_badges.TopicExerciseBadge.name_for_topic_key_name(self.key().name()) # Good: badge_name=(badges.topic_exercise_badges.TopicExerciseBadge.name_for_topic_key_name(self.key().name()))# Bad: self.redirect("/class_profile?selected_graph_type=%s

    ?

    我添加的規則

    from … import …

    # Bad from aa import alonglonglonglonglong,alonglonglonglonglonglonglonglonglong,alonglonglonglonglonglong# Good from aa import(alonglonglonglonglong,alonglonglonglonglonglonglonglonglong,alonglonglonglonglonglong) from aa import(alonglonglonglonglong,alonglonglonglonglonglonglonglonglong,alonglonglonglonglonglong,alonglonglonglonglonglonglong,alonglonglonglonglonglong2) # Good。 當引入的函數/類/變量很多時,也可以選擇空 4 個空格的方式,而不需要和首行的左括號后對齊

    相對引用(relative import) 和 絕對引用(absolute import)

    $cat xx/models/user/consts.py # 如果想引用這個變量 TMP=1$cat xx/views/user.py from xx.models.user.consts import TMP # recommended。# 假如模塊層級>=3。 比如 xx/models/user/consts.py 就在根目錄下的第 3 級。 如果其他當前目錄下源文件需要調用它的內容。 也可以選擇相對引用 $cat xx/models/user/main.py # 需要和 consts.py 在一個目錄下才可以 from consts import TMP # Bad from.consts import TMP # Good# 而且只能在包內相對引用。 包外都需要絕對引用

    ?

    轉載于:https://www.cnblogs.com/Vito2008/p/4987476.html

    總結

    以上是生活随笔為你收集整理的Python 最佳实践的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。