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

Python代碼風(fēng)格與編程習(xí)慣重要嗎?

 更新時(shí)間:2021年06月03日 11:48:59   作者:憶想不到的暉  
實(shí)現(xiàn)高內(nèi)聚,低耦合、結(jié)構(gòu)清晰不臃腫、可讀性高、數(shù)據(jù)冗余性低、高復(fù)用、易擴(kuò)展的代碼,并非易事.上到設(shè)計(jì)模式,下到某個(gè)類(lèi)、方法、函數(shù)的構(gòu)造.在這里我分享一下我自己的代碼設(shè)計(jì),編寫(xiě)風(fēng)格,讓我們互相學(xué)習(xí),需要的朋友可以參考下

Python代碼風(fēng)格

首先我們要以 PEP8 代碼規(guī)范為標(biāo)準(zhǔn),但也無(wú)需完全遵守。例如:一行不能超過(guò) 79 個(gè)字符等。

Python模塊模板

模塊開(kāi)頭指定編碼格式

模塊文檔注釋?zhuān)故灸K的信息,信息內(nèi)容自己決定,如:

  • Author,作者
  • Desc,模塊描述
  • Date,創(chuàng)建時(shí)間

有一個(gè) main() 函數(shù)

有一個(gè)程序主入口 if __name__ == '__main__':

#!/usr/bin/python3
# -*- coding:utf-8 -*-
# @Author: Hui
# @Desc: { 項(xiàng)目主入口模塊 }
# @Date: 2020/05/21 13:04


def main():
    print('Hello Python')


if __name__ == '__main__':
    main()

main() 函數(shù)方便用于測(cè)試當(dāng)前模塊功能。

import 導(dǎo)入

import 導(dǎo)入,避免使用 from ... import * ,因?yàn)檫@可能導(dǎo)致模塊、類(lèi)、變量名重復(fù)而導(dǎo)致錯(cuò)誤。

我自己的 import 代碼風(fēng)格有兩種。

由短到長(zhǎng)

根據(jù)代碼的長(zhǎng)度由短到長(zhǎng)依次導(dǎo)入,import 過(guò)度到 from ... import ... ,換行分割可有可無(wú),我是根據(jù) from ... import ... 前面的 import 的數(shù)量和整體美觀來(lái)決定要不要換行。

import os
import sys
import time
import random
import config
import pygame
import requests
import numpy as np

from PIL import Image
from threading import Thread
from datetime import datetime

分類(lèi)導(dǎo)入

分類(lèi)導(dǎo)入,是分好類(lèi)后在根據(jù)代碼的長(zhǎng)度由短到長(zhǎng)依次導(dǎo)入,主要有:

  • Python內(nèi)置模塊
  • Python自建模塊
  • Python第三方庫(kù)
# Python內(nèi)置模塊導(dǎo)入
import os
import sys
import time
import random
from threading import Thread
from datetime import datetime

# Python自建模塊、第三方庫(kù)導(dǎo)入
import config
import pygame
import requests
import numpy as np
from PIL import Image

導(dǎo)入順序依次為

Python內(nèi)置模塊  -->  Python自建模塊  -->  Python第三方庫(kù)

根據(jù)自己的風(fēng)格,導(dǎo)入的自建模塊、Python第三方庫(kù)少時(shí)可以在一起無(wú)需換行

導(dǎo)入的自建模塊少時(shí)可以跟Python內(nèi)置模塊在一起,就是轉(zhuǎn)換成 由短到長(zhǎng) 的風(fēng)格

建議

導(dǎo)入模塊代碼風(fēng)格無(wú)需照搬照抄地遵循,我們做任何的優(yōu)化就是為了讓代碼更好看,結(jié)構(gòu)清晰,無(wú)需刻意遵循死規(guī)則、爛規(guī)則,應(yīng)該活學(xué)活用,創(chuàng)新變化,學(xué)習(xí)別人優(yōu)秀的方案,總結(jié)出適合自己的。

例如:

假如import 導(dǎo)入語(yǔ)句比 from 導(dǎo)入語(yǔ)句更長(zhǎng),要遵循或者糾結(jié) import 是要在 from 導(dǎo)入語(yǔ)句前面還是由短到長(zhǎng)排放呢?

import numpy as np
import multiprocessing

from PIL import Image
import numpy as np
from PIL import Image
import multiprocessing

無(wú)需太過(guò)糾結(jié)、摳字眼,兩種導(dǎo)入風(fēng)格都可以。

Django代碼范例

封裝html的url網(wǎng)址

渲染 html 頁(yè)面,把 html 的存放路徑總體封裝到一個(gè)類(lèi)里面。

class BookView(object):
    """圖書(shū)模塊視圖類(lèi)"""
	
    # 圖書(shū)首頁(yè)
    INDEX_VIEW = 'book/index.html'
	
    # 圖書(shū)信息頁(yè)
    BOOK_INFO_VIEW = 'book/book_info.html'
	
    # 英雄信息頁(yè)
    HERO_INFO_VIEW = 'book/hero_info.html'



# 定義視圖函數(shù)
def index(request):
    """
    圖書(shū)首頁(yè)
    """
    data = {
        'content': 'hello world',
        'list': list(range(1, 10)),
    }
    return render(request, BookView.INDEX_VIEW, data)


def show_book(request):
    """
    展示圖書(shū)信息界面
    """
    book_list = BookInfo.objects.all()
    data = {
        'book': book_list
    }
    return render(request, BookView.BOOK_INFO_VIEW, data)

封裝注冊(cè)的提示錯(cuò)誤信息

返回頁(yè)面提示的錯(cuò)誤信息,統(tǒng)一封裝到字典中,提高代碼可讀性、擴(kuò)展性。

初始版本

class UserView(object):
    """用戶(hù)模塊視圖類(lèi)"""
    
    LOGIN_VIEW = 'user/login.html'
	
    REGISTER_VIEW = 'user/register.html'
	
    USER_CENTER_VIEW = 'user/user_center.html'
    
    
def register(request):
    username = request.get('username')
    password = request.get('password')
    email = request.get('email')
    allow = request.get('allow')
    
    # 校驗(yàn)注冊(cè)項(xiàng)是否有空值 
    # all()中有一個(gè)為空返回False,都有值則True
    if not all([username, password, email]):
        return render(request, UserView.REGISTER_VIEW, {'error_msg': '數(shù)據(jù)不完整'})
    
    # 校驗(yàn)是否勾選(同意)用戶(hù)協(xié)議
    if allow != 'on':
        return render(request, UserView.REGISTER_VIEW, {'error_msg': '請(qǐng)勾選用戶(hù)協(xié)議'})
     
    # 校驗(yàn)用戶(hù)名是否重復(fù)
    try   
        user = User.object.get(username=username)
    except User.DoesNotExists:
        user = None
     
    if user:
        return render(request, UserView.REGISTER_VIEW, {'error_msg': '該用戶(hù)已存在'})

    return render(request, 'register.html')

可以看到在返回響應(yīng)數(shù)據(jù)時(shí)代碼大致一樣,只有提示信息不一樣

return render(request, UserView.REGISTER_VIEW, {'error_msg': '數(shù)據(jù)不完整'})

return render(request, UserView.REGISTER_VIEW, {'error_msg': '請(qǐng)勾選用戶(hù)協(xié)議'})

return render(request, UserView.REGISTER_VIEW, {'error_msg': '該用戶(hù)已存在'})

因此封裝后的版本

def register(request):
    username = request.get('username')
    password = request.get('password')
    email = request.get('email')
    allow = request.get('allow')
    
    error_msg = {
        'email_error': '郵箱格式不正確',
        'user_exists': '該用戶(hù)已存在',
        'data_error': '數(shù)據(jù)不完整',
        'user_protocol': '請(qǐng)勾選用戶(hù)協(xié)議',
    }
    
    # 返回頁(yè)面的數(shù)據(jù)
    data = dict()
    
    # 校驗(yàn)注冊(cè)項(xiàng)是否有空值 
    # all()中有一個(gè)為空返回False,都有值則True
    if not all([username, password, email]):
        data['error_msg'] = error_msg['data_error']
    
    # 校驗(yàn)是否勾選(同意)用戶(hù)協(xié)議
    elif allow != 'on':
        data['error_msg'] = error_msg['user_protocol']
    else:
        # 校驗(yàn)用戶(hù)名是否重復(fù)
        user = User.object.filter(username=username)
            
        if user:
            data['error_msg'] = error_msg['user_error']
        else:
            pass
        
    return render(request, UserView.REGISTER_VIEW, data)
# 校驗(yàn)用戶(hù)名是否重復(fù)
try   
	user = User.object.get(username=username)
except User.DoesNotExists:
    user = None

優(yōu)化后

User.object.filter(username=username)

get 獲取不到數(shù)據(jù)會(huì)報(bào)異常,filter則返回一個(gè)空的 query_set 查詢(xún)結(jié)果集,去除了 try ... except 異常捕獲。讓代碼結(jié)構(gòu)更清晰。

我們把 if、if.. 改成了 if elif else ,把 render(request, 'register.html', data) 抽到外面去了,并不需要在每一個(gè) if 里面 return 響應(yīng)。把錯(cuò)誤信息封裝在 error_msg 字典中,下次想再添加一些錯(cuò)誤提示信息或者想修改錯(cuò)誤提示信息可以在 error_msg 字典中添加、修改,這樣易維護(hù)、擴(kuò)展,也更加明確有哪些錯(cuò)誤信息。

到此這篇關(guān)于Python代碼風(fēng)格與編程習(xí)慣重要嗎?的文章就介紹到這了,更多相關(guān)Python編程規(guī)范內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python數(shù)據(jù)分析?Numpy?的使用方法

    Python數(shù)據(jù)分析?Numpy?的使用方法

    這篇文章主要介紹了Python數(shù)據(jù)分析?Numpy?的使用方法,Numpy?是一個(gè)Python擴(kuò)展庫(kù),專(zhuān)門(mén)做科學(xué)計(jì)算,也是大部分Python科學(xué)計(jì)算庫(kù)的基礎(chǔ),關(guān)于其的使用方法,需要的小伙伴可以參考下面文章內(nèi)容
    2022-05-05
  • python裝飾器原理源碼示例分析

    python裝飾器原理源碼示例分析

    本文由淺入深介紹了python的裝飾器,并且通過(guò)代碼展現(xiàn)了如何自己手寫(xiě)裝飾器函數(shù)和類(lèi)裝飾器,有需要的朋友可以參考下,希望可以有所幫助
    2021-09-09
  • Python增強(qiáng)賦值和共享引用注意事項(xiàng)小結(jié)

    Python增強(qiáng)賦值和共享引用注意事項(xiàng)小結(jié)

    這篇文章主要給大家介紹了關(guān)于Python增強(qiáng)賦值和共享引用注意事項(xiàng)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Python OpenCV讀取視頻報(bào)錯(cuò)的問(wèn)題解決

    Python OpenCV讀取視頻報(bào)錯(cuò)的問(wèn)題解決

    大家好,本篇文章主要講的是Python OpenCV讀取視頻報(bào)錯(cuò)的問(wèn)題解決,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話(huà)記得收藏一下
    2022-01-01
  • python opencv通過(guò)按鍵采集圖片源碼

    python opencv通過(guò)按鍵采集圖片源碼

    OpenCV是一個(gè)基于BSD許可(開(kāi)源)發(fā)行的跨平臺(tái)計(jì)算機(jī)視覺(jué)和機(jī)器學(xué)習(xí)軟件庫(kù),可以運(yùn)行在Linux、Windows、Android和Mac OS操作系統(tǒng)上,本文給大家分享python opencv通過(guò)按鍵采集圖片源碼,感興趣的朋友一起看看吧
    2021-05-05
  • 基于python實(shí)現(xiàn)語(yǔ)音錄入識(shí)別代碼實(shí)例

    基于python實(shí)現(xiàn)語(yǔ)音錄入識(shí)別代碼實(shí)例

    這篇文章主要介紹了如何通過(guò)python實(shí)現(xiàn)語(yǔ)音錄入識(shí)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • Python爬蟲(chóng)實(shí)例——爬取美團(tuán)美食數(shù)據(jù)

    Python爬蟲(chóng)實(shí)例——爬取美團(tuán)美食數(shù)據(jù)

    這篇文章主要介紹了Python爬蟲(chóng)如何爬取美團(tuán)美食數(shù)據(jù),文中講解非常詳細(xì),代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • python如何獲取服務(wù)器硬件信息

    python如何獲取服務(wù)器硬件信息

    這篇文章主要為大家詳細(xì)介紹了python獲取服務(wù)器硬件信息的相關(guān)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • python枚舉類(lèi)型定義與使用講解

    python枚舉類(lèi)型定義與使用講解

    在python中枚舉是一種類(lèi)(Enum,IntEnum),存放在enum模塊中。枚舉類(lèi)型可以給一組標(biāo)簽賦予一組特定的值,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-10-10
  • Python中提取人臉特征的三種方法詳解

    Python中提取人臉特征的三種方法詳解

    這篇文章主要和大家分享三個(gè)Python中提取人臉特征的方法,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定的幫助,需要的可以參考一下
    2022-05-05

最新評(píng)論

长宁区| 京山县| 泸西县| 巴南区| 贡觉县| 正镶白旗| 抚顺市| 屯门区| 夏邑县| 三亚市| 沭阳县| 略阳县| 新密市| 凌海市| 仁怀市| 仁布县| 禄丰县| 札达县| 子洲县| 高清| 甘德县| 修文县| 博客| 固镇县| 田东县| 东阿县| 轮台县| 宜城市| 客服| 唐山市| 碌曲县| 西充县| 普安县| 望谟县| 色达县| 永安市| 谷城县| 淮阳县| 沾化县| 北流市| 武冈市|