亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python代碼風格與編程習慣的重要性

發布時間:2021-06-04 10:39:13 來源:億速云 閱讀:127 作者:小新 欄目:開發技術

這篇文章將為大家詳細講解有關Python代碼風格與編程習慣的重要性,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

Python代碼風格

首先我們要以 PEP8 代碼規范為標準,但也無需完全遵守。例如:一行不能超過 79 個字符等。

Python模塊模板

模塊開頭指定編碼格式

模塊文檔注釋,展示模塊的信息,信息內容自己決定,如:

  • Author,作者

  • Desc,模塊描述

  • Date,創建時間

有一個 main() 函數

有一個程序主入口 if __name__ == '__main__':

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


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


if __name__ == '__main__':
    main()

main() 函數方便用于測試當前模塊功能。

import 導入

import 導入,避免使用 from ... import * ,因為這可能導致模塊、類、變量名重復而導致錯誤。

我自己的 import 代碼風格有兩種。

由短到長

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

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

分類導入

分類導入,是分好類后在根據代碼的長度由短到長依次導入,主要有:

  • Python內置模塊

  • Python自建模塊

  • Python第三方庫

# Python內置模塊導入
import os
import sys
import time
import random
from threading import Thread
from datetime import datetime

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

導入順序依次為

Python內置模塊  -->  Python自建模塊  -->  Python第三方庫

根據自己的風格,導入的自建模塊、Python第三方庫少時可以在一起無需換行

導入的自建模塊少時可以跟Python內置模塊在一起,就是轉換成 由短到長 的風格

建議

導入模塊代碼風格無需照搬照抄地遵循,我們做任何的優化就是為了讓代碼更好看,結構清晰,無需刻意遵循死規則、爛規則,應該活學活用,創新變化,學習別人優秀的方案,總結出適合自己的。

例如:

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

import numpy as np
import multiprocessing

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

無需太過糾結、摳字眼,兩種導入風格都可以。

Django代碼范例

封裝html的url網址

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

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



# 定義視圖函數
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)

封裝注冊的提示錯誤信息

返回頁面提示的錯誤信息,統一封裝到字典中,提高代碼可讀性、擴展性。

初始版本

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')
    
    # 校驗注冊項是否有空值 
    # all()中有一個為空返回False,都有值則True
    if not all([username, password, email]):
        return render(request, UserView.REGISTER_VIEW, {'error_msg': '數據不完整'})
    
    # 校驗是否勾選(同意)用戶協議
    if allow != 'on':
        return render(request, UserView.REGISTER_VIEW, {'error_msg': '請勾選用戶協議'})
     
    # 校驗用戶名是否重復
    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')

可以看到在返回響應數據時代碼大致一樣,只有提示信息不一樣

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

return render(request, UserView.REGISTER_VIEW, {'error_msg': '請勾選用戶協議'})

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': '數據不完整',
        'user_protocol': '請勾選用戶協議',
    }
    
    # 返回頁面的數據
    data = dict()
    
    # 校驗注冊項是否有空值 
    # all()中有一個為空返回False,都有值則True
    if not all([username, password, email]):
        data['error_msg'] = error_msg['data_error']
    
    # 校驗是否勾選(同意)用戶協議
    elif allow != 'on':
        data['error_msg'] = error_msg['user_protocol']
    else:
        # 校驗用戶名是否重復
        user = User.object.filter(username=username)
            
        if user:
            data['error_msg'] = error_msg['user_error']
        else:
            pass
        
    return render(request, UserView.REGISTER_VIEW, data)
# 校驗用戶名是否重復
try   
	user = User.object.get(username=username)
except User.DoesNotExists:
    user = None

優化后

User.object.filter(username=username)

get 獲取不到數據會報異常,filter則返回一個空的 query_set 查詢結果集,去除了 try ... except 異常捕獲。讓代碼結構更清晰。

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

關于“Python代碼風格與編程習慣的重要性”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

英德市| 正阳县| 广河县| 汝阳县| 墨玉县| 泰兴市| 南投县| 扎赉特旗| 沽源县| 康马县| 大足县| 德兴市| 扎鲁特旗| 昭苏县| 临邑县| 花莲县| 龙南县| 焉耆| 潞西市| 莱州市| 洛川县| 兴安盟| 铅山县| 钦州市| 黎平县| 洛浦县| 彰化县| 普洱| 津南区| 万荣县| 孟津县| 洪泽县| 朝阳市| 白山市| 景宁| 攀枝花市| 保康县| 达拉特旗| 阿合奇县| 凭祥市| 孝义市|