欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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è)類、方法、函數(shù)的構(gòu)造.在這里我分享一下我自己的代碼設(shè)計(jì),編寫風(fēng)格,讓我們互相學(xué)習(xí),需要的朋友可以參考下

Python代碼風(fēng)格

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

Python模塊模板

模塊開頭指定編碼格式

模塊文檔注釋,展示模塊的信息,信息內(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ù)方便用于測試當(dāng)前模塊功能。

import 導(dǎo)入

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

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

由短到長

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

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

分類導(dǎo)入

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

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

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

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

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

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

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

建議

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

例如:

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

import numpy as np
import multiprocessing

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

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

Django代碼范例

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

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

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



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


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

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

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

初始版本

class UserView(object):
    """用戶模塊視圖類"""
    
    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)是否勾選(同意)用戶協(xié)議
    if allow != 'on':
        return render(request, UserView.REGISTER_VIEW, {'error_msg': '請(qǐng)勾選用戶協(xié)議'})
     
    # 校驗(yàn)用戶名是否重復(fù)
    try   
        user = User.object.get(username=username)
    except User.DoesNotExists:
        user = None
     
    if user:
        return render(request, UserView.REGISTER_VIEW, {'error_msg': '該用戶已存在'})

    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)勾選用戶協(xié)議'})

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

因此封裝后的版本

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': '該用戶已存在',
        'data_error': '數(shù)據(jù)不完整',
        'user_protocol': '請(qǐng)勾選用戶協(xié)議',
    }
    
    # 返回頁面的數(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)是否勾選(同意)用戶協(xié)議
    elif allow != 'on':
        data['error_msg'] = error_msg['user_protocol']
    else:
        # 校驗(yàn)用戶名是否重復(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)用戶名是否重復(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 查詢結(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+uiautomator2實(shí)現(xiàn)手機(jī)鎖屏解鎖功能

    Python+uiautomator2實(shí)現(xiàn)手機(jī)鎖屏解鎖功能

    python-uiautomator2封裝了谷歌自帶的uiautomator2測試框架,提供便利的python接口,這篇文章給大家介紹使用Python+uiautomator2實(shí)現(xiàn)手機(jī)鎖屏解鎖(期望輸入的鎖屏密碼,基于滑動(dòng)解鎖),感興趣的朋友一起看看吧
    2021-04-04
  • python排序算法之希爾排序

    python排序算法之希爾排序

    這篇文章主要介紹了python排序算法之希爾排序,希爾排序,又叫“縮小增量排序”,是對(duì)插入排序進(jìn)行優(yōu)化后產(chǎn)生的一種排序算法,需要的朋友可以參考下
    2023-04-04
  • Python學(xué)習(xí)資料

    Python學(xué)習(xí)資料

    Python學(xué)習(xí)資料...
    2007-02-02
  • python k-近鄰算法實(shí)例分享

    python k-近鄰算法實(shí)例分享

    這個(gè)算法主要工作是測量不同特征值之間的距離,有個(gè)這個(gè)距離,就可以進(jìn)行分類了。簡稱kNN。
    2014-06-06
  • python 實(shí)現(xiàn)刪除文件或文件夾實(shí)例詳解

    python 實(shí)現(xiàn)刪除文件或文件夾實(shí)例詳解

    這篇文章主要介紹了python 實(shí)現(xiàn)刪除文件或文件夾實(shí)例詳解的相關(guān)資料,這里附有實(shí)例代碼,需要的朋友可以參考下
    2016-12-12
  • python 添加用戶設(shè)置密碼并發(fā)郵件給root用戶

    python 添加用戶設(shè)置密碼并發(fā)郵件給root用戶

    這篇文章主要介紹了python 添加用戶設(shè)置密碼并發(fā)郵件給root用戶的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-07-07
  • python使用隱式循環(huán)快速求和的實(shí)現(xiàn)示例

    python使用隱式循環(huán)快速求和的實(shí)現(xiàn)示例

    這篇文章主要介紹了python使用隱式循環(huán)快速求和的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • 在Python中執(zhí)行和調(diào)用JavaScript的多種方法小結(jié)

    在Python中執(zhí)行和調(diào)用JavaScript的多種方法小結(jié)

    JavaScript(JS)是一種常用的腳本語言,通常用于網(wǎng)頁開發(fā),但有時(shí)也需要在Python中執(zhí)行或調(diào)用JavaScript代碼,本文將詳細(xì)介紹Python中執(zhí)行和調(diào)用JavaScript的多種方法,每種方法都將附有示例代碼,方便理解如何在Python中與JavaScript進(jìn)行互動(dòng),需要的朋友可以參考下
    2023-11-11
  • 通過Python使用saltstack生成服務(wù)器資產(chǎn)清單

    通過Python使用saltstack生成服務(wù)器資產(chǎn)清單

    人工去對(duì)每一臺(tái)服務(wù)器的硬件信息并記錄早已經(jīng)過去了,無論通過腳本還是自動(dòng)化工具都是可以進(jìn)行一次編寫到處抓取的,本文主要使用saltstack作為使用工具,然后利用其提供的APi編寫所需的Python腳本
    2016-03-03
  • Python Numpy學(xué)習(xí)之索引及切片的使用方法

    Python Numpy學(xué)習(xí)之索引及切片的使用方法

    數(shù)組中的元素可以通過索引以及切片的手段進(jìn)行訪問或者修改,和列表的切片操作一樣。本文將詳細(xì)為大家介紹一下Python中的科學(xué)計(jì)算庫-Numpy的索引及切片的使用方法
    2022-01-01

最新評(píng)論