當前位置:首頁 » 編程語言 » python編碼規范pdf

python編碼規范pdf

發布時間: 2023-07-08 02:08:53

Ⅰ 「python編程規范」為Python代碼添加註釋

功能要求

為Python代碼添加註釋,對Python程序代碼進行說明。

實例代碼

'''多行注釋開始

下面的代碼根據變數x的值計算y

注意代碼中使用縮進表示代碼塊

多行注釋結束'''

x = 5

if x > 100:

y = x * 5 - 1 # 單行注釋:x>100時執行該語句

else:

y = 0 # x <= 100時執行該語句

print(y) # 輸出y

運行結果

知識說明

注釋用於為程序添加說明性的文字,幫助程序員更好的閱讀和理解程序代碼。Python解釋器會忽略注釋的內容,即注釋的內容不會被Python解釋器執行。

Python注釋分為單行注釋和多行注釋。

單行注釋以符號「#」開始,當前行中符號「#」及其後的內容為注釋語句。單行注釋可以獨佔一行,也可放在語句末尾。 說明: 在Pycharm中使用「ctrl + /」可以添加/取消單行注釋。

多行注釋是用3個英文單引號「'''多行注釋文本'''」或3個雙引號「"""注釋文本"""」進行注釋。 注意: 由一對三個單引號或一對三個雙引號括起來的內容被認為是注釋,但不能由三個單引號和三個雙引號混合使用。

Ⅱ 如何提升Python編程能力

一、Python之禪(The Zen of Python)
The Zen of Python是Python語言的指導原則,遵循這些基本原則,你就可以像個Pythonista一樣編程。具體內容你可以在Python命令行輸入import this看到:
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
# 優美勝於醜陋(Python以編寫優美的代碼為目標)

Explicit is better than implicit.
# 明了勝於晦澀(優美的代碼應當是明了的,命名規范,風格相似)

Simple is better than complex.
# 簡潔勝於復雜(優美的代碼應當是簡潔的,不要有復雜的內部實現)

Complex is better than complicated.
# 復雜勝於凌亂(如果復雜不可避免,那代碼間也不能有難懂的關系,要保持介面簡潔)

Flat is better than nested.
# 扁平勝於嵌套(優美的代碼應當是扁平的,不能有太多的嵌套)

Sparse is better than dense.
# 間隔勝於緊湊(優美的代碼有適當的間隔,不要奢望一行代碼解決問題)

Readability counts.
# 可讀性很重要(優美的代碼是可讀的)

Special cases aren't special enough to break the rules.
Although practicality beats purity.
# 即便假借特例的實用性之名,也不可違背這些規則(這些規則至高無上)

Errors should never pass silently.
Unless explicitly silenced.
# 不要包容所有錯誤,除非你確定需要這樣做(精準地捕獲異常,不寫except:pass風格的代碼)

In the face of ambiguity, refuse the temptation to guess.
# 當存在多種可能,不要嘗試去猜測

There should be one-- and preferably only one --obvious way to do it.
# 而是盡量找一種,最好是唯一一種明顯的解決方案(如果不確定,就用窮舉法)

Although that way may not be obvious at first unless you're Dutch.
# 雖然這並不容易,因為你不是 Python 之父(這里的Dutch是指Guido)
Now is better than never.
Although never is often better than *right* now.
# 做也許好過不做,但不假思索就動手還不如不做(動手之前要細思量)
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
# 如果你無法向人描述你的方案,那肯定不是一個好方案;反之亦然(方案測評標准)
Namespaces are one honking great idea -- let's do more of those!
# 命名空間是一種絕妙的理念,我們應當多加利用(倡導與號召)

這首特別的「詩」開始作為一個笑話,但它確實包含了很多關於Python背後的哲學真理。Python之禪已經正式成文PEP 20,具體內容見:PEP 20
二、PEP8: Python編碼規范(PEP8: Style Guide for Python Code)
Abelson & Sussman在《計算機程序的構造和解釋》一書中說道:程序是寫來給人讀的,只是順帶讓機器執行。所以,我們在編碼時應該盡量讓它更易讀懂。PEP8是Python的編碼規范,官方文檔見:PEP 8,PEP是Python Enhancement Proposal的縮寫。PEP8包括很多編碼的規范,下面主要介紹一下縮進和命名等內容。
空格和縮進(WhiteSpace and Indentation)
空格和縮進在Python語言中非常重要,它替代了其他語言中{}的作用,用來區分代碼塊和作用域。在這方面PEP8有以下的建議:
1、每次縮進使用4個空格
2、不要使用Tab,更不要Tab和空格混用
3、兩個方法之間使用一個空行,兩個Class之間使用兩個空行
4、添加一個空格在字典、列表、序列、參數列表中的「,「後,以及在字典中的」:「之後,而不是之前
5、在賦值和比較兩邊放置一個空格(參數列表中除外)
6、緊隨括弧後面或者參數列表前一個字元不要存在空格

Python命名
命名規范是編程語言的基礎,而且大部分的規范對於高級語言來說都是一樣的,Python的基本規范如下:
1、方法 & 屬性:joined_lower
2、常量:joined_lower or ALL_CAPS
3、類:StudlyCaps
4、類屬性:interface, _internal, __private
5、camelCase only to conform to pre-existing conventions

以上內容只是對PEP8做了非常簡單的介紹,由於今天的主題不在於此,所以就不在這里多講。想要更加深入的了解Python編碼規范,可以閱讀PEP8官方文檔和Google Python編碼規范等內容。
三、交換變數值(Swap Values)
在其他語言中,交換兩個變數值的時候,可以這樣寫:
temp = a
a = b
b = temp

在Python中,我們可以簡單的這樣寫:
b, a = a, b

可能你已經在其他地方見過這種寫法,但是你知道Python是如何實現這種語法的嗎?首先,逗號(,)是Python中tuple數據結構的語法;上面的語法會執行一下的操作:
1、Python會先將右邊的a, b生成一個tuple(元組),存放在內存中;
2、之後會執行賦值操作,這時候會將tuple拆開;
3、然後將tuple的第一個元素賦值給左邊的第一個變數,第二個元素賦值給左邊第二個變數。
再舉個tuple拆分的例子:
In [1]: people = ['David', 'Pythonista', '15145551234']

In [2]: name, title, phone = people

In [3]: name
Out[3]: 'David'

In [4]: title
Out[4]: 'Pythonista'

In [5]: phone
Out[5]: '15145551234'

這種語法在For循環中非常實用:
In [6]: people = [['David', 'Pythonista', '15145551234'], ['Wu', 'Student', '15101365547']]

In [7]: for name, title, phone in people:
...: print name, phone
...:
David 15145551234
Wu 15101365547

PS:在使用這種語法時,需要確保左邊的變數個數和右邊tuple的個數一致,否則,Python會拋出ValueError異常。
更多tuple的例子:
>>> 1,
(1,)
>>> (1,)
(1,)
>>> (1)
1
>>> value = 1,
>>> value
(1,)

我們知道:逗號(,)在Python中是創建tuple的構造器,所以我們可以按照上面的方式很方便的創建一個tuple;需要注意的是:如果聲明只有一個元素的tuple,末尾必須要帶上逗號,兩個以上的元素則不需要。聲明tuple的語法很簡單,但同時它也比較坑:如果你發現Python中的變數不可思議的變成了tuple,那很可能是因為你多寫了一個逗號。。
四、Python控制台的"_"(Interactive "_")
這是Python中比較有用的一個功能,不過有很多人不知道(我也是接觸Python很久之後才知道的)。。在Python的互動式控制台中,當你計算一個表達式或者調用一個方法的時候,運算的結果都會放在一個臨時的變數 _ 裡面。_(下劃線)用來存儲上一次的列印結果,比如:
>>> import math
>>> math.pi / 3
1.0471975511965976
>>> angle = _
>>> math.cos(angle)
0.50000000000000011
>>> _
0.50000000000000011

PS:當返回結果為None的時候,控制台不會列印,_ 裡面存儲的值也就不會改變。
五、合並字元串(Building Strings from Sub strings)
假如現在有一個list,裡面是一些字元串,你現在需要將它們合並成一個字元串,最簡單的方法,你可以按照下面的方式去處理:
colors = ['red', 'blue', 'green', 'yellow']

result = ''
for s in colors:
result += s

但是,很快你會發現:這種方法非常低效,尤其當list非常大的時候。Python中的字元串對象是不可改變的,因此對任何字元串的操作如拼接,修改等都將產生一個新的字元串對象,而不是基於原字元串。所以,上面的方法會消耗很大的內存:它需要計算,存儲,同時扔掉中間的計算結果。正確的方法是使用Python中的join方法:
result = ','.join(colors)

當合並元素比較少的時候,使用join方法看不出太大的效果;但是當元素多的時候,你會發現join的效率還是非常明顯的。不過,在使用的時候請注意:join只能用於元素是字元串的list,它不會進行任何的強制類型轉換。連接一個存在一個或多個非字元串元素的list時將拋出異常。

Ⅲ Python源碼是什麼意思

源代碼是指原始代碼,可以是任何語言代碼。Python源碼就是指編寫的最原始程序的代碼。運行的軟體是要經過編寫的,程序員編寫程序的過程中需要他們的「語言」。

Ⅳ 怎麼在Python里使用UTF-8編碼

概述

在python代碼即.py文件的頭部聲明即可

解析

py文件中的編碼

Python 默認腳本文件都是 ANSCII 編碼的,當文件 中有非 ANSCII 編碼范圍內的字元的時候就要使用"編碼指示"來修正一個 mole 的定義中,如果.py文件中包含中文字元(嚴格的說是含有非anscii字元),則需要在第一行或第二行指定編碼聲明:

# -*- coding=utf-8 -*-

#coding=utf-8

# 以上兩種選其一即可

其他的編碼如:gbk、gb2312也可以;否則會出現:

SyntaxError: Non-ASCII character 'xe4' in file test.py on line 3, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

python中的編碼與解碼

先說一下python中的字元串類型,在python中有兩種字元串類型,分別是 str 和 unicode,他們都是basestring的派生類;

str類型是一個包含Characters represent (at least) 8-bit bytes的序列;

unicode 的每個 unit 是一個 unicode obj;

在str的文檔中有這樣的一句話:

    The string data type is also used to represent arrays of bytes, e.g., to hold data read from a file.

也就是說在讀取一個文件的內容,或者從網路上讀取到內容時,保持的對象為str類型;如果想把一個str轉換成特定編碼類型,需要把str轉為Unicode,然後從unicode轉為特定的編碼類型如:utf-8、gb2312等。

拓展內容

utf-8編碼

UTF-8(8-bit Unicode Transformation Format)是一種針對Unicode的可變長度字元編碼,也是一種前綴碼。它可以用來表示Unicode標准中的任何字元,且其編碼中的第一個位元組仍與ASCII兼容,這使得原來處理ASCII字元的軟體無須或只須做少部分修改,即可繼續使用。因此,它逐漸成為電子郵件、網頁及其他存儲或發送文字的應用中,優先採用的編碼。

UTF-8使用一至六個位元組為每個字元編碼(盡管如此,2003年11月UTF-8被RFC 3629重新規范,只能使用原來Unicode定義的區域,U+0000到U+10FFFF,也就是說最多四個位元組):

1、128個US-ASCII字元只需一個位元組編碼(Unicode范圍由U+0000至U+007F)。

2、帶有附加符號的拉丁文、希臘文、西里爾字母、亞美尼亞語、希伯來文、阿拉伯文、敘利亞文及它拿字母則需要兩個位元組編碼(Unicode范圍由U+0080至U+07FF)。

3、其他基本多文種平面(BMP)中的字元(這包含了大部分常用字,如大部分的漢字)使用三個位元組編碼(Unicode范圍由U+0800至U+FFFF)。

4、其他極少使用的Unicode輔助平面的字元使用四至六位元組編碼(Unicode范圍由U+10000至U+1FFFFF使用四位元組,Unicode范圍由U+200000至U+3FFFFFF使用五位元組,Unicode范圍由U+4000000至U+7FFFFFFF使用六位元組)。

對上述提及的第四種字元而言,UTF-8使用四至六個位元組來編碼似乎太耗費資源了。但UTF-8對所有常用的字元都可以用三個位元組表示,而且它的另一種選擇,UTF-16編碼,對前述的第四種字元同樣需要四個位元組來編碼,所以要決定UTF-8或UTF-16哪種編碼比較有效率,還要視所使用的字元的分布范圍而定。不過,如果使用一些傳統的壓縮系統,比如DEFLATE,則這些不同編碼系統間的的差異就變得微不足道了。若顧及傳統壓縮演算法在壓縮較短文字上的效果不大,可以考慮使用Unicode標准壓縮格式(SCSU)。

互聯網工程工作小組(IETF)要求所有互聯網協議都必須支持UTF-8編碼。互聯網郵件聯盟(IMC)建議所有電子郵件軟體都支持UTF-8編碼。

Ⅳ python3.4 編碼有哪些

Python3中的編碼問題前,第一個段落對位元組、ASCII與Unicode與UTF-8等進行基本介紹,如果不對這幾種編碼犯頭暈,可直接跳過。
ASCII與Unicode與UTF-8與GBK

首先從老大哥說起。跟很多人一樣,大學讀了這么久,久仰ASCII編碼的大名。要說這個老大哥,我們再先從位元組說起。一個位元組包括八個比特位,每個比特位表示0或1,一個位元組即可表示從00000000到11111111共2^8=256個數字。一個ASCII編碼使用一個位元組(除去位元組的最高位作為作奇偶校驗位),ASCII編碼實際使用一個位元組中的7個比特位來表示字元,共可表示2^7=128個字元。比如那時寫C語言的程序,就經常要背下ASCII編碼中的01000001(即十進制的65)表示字元『A』,01000001加上32之後的01100001(即十進制的97)表示字元『a』。現在打開Python,調用chr和ord函數,我們可以看到Python為我們對ASCII編碼進行了轉換。

第一個00000000表示空字元,因此ASCII編碼實際上只包括了
字母、標點符號、特殊符號等共127個字元。因為ASCII是在美國出生的,對於由字母組成單詞進而用單詞表達的英文來說也是夠了。但是中國人、日本人、
韓國人等其他語言的人不服了。中文是一個字一個字,ASCII編碼用上了渾身解數256個字元都不夠用。

因此後來出現了Unicode編碼。Unicode編碼通常由兩個位元組組成,共表示256*256個字元,即所謂的UCS-2。某些偏僻字還會用到四個位元組,即所謂的UCS-4。也就是說Unicode標准也還在發展。但UCS-4出現的比較少,我們先記住:最原始的ASCII編碼使用一個位元組編碼,但由於語言差異字元眾多,人們用上了兩個位元組,出現了統一的、囊括多國語言的Unicode編碼。

在Unicode中,原本ASCII中的127個字元只需在前面補一個全零的位元組即可,比如前文談到的字元『a』:01100001,在Unicode中變成了00000000 01100001。不久,美國人不開心了,吃上了世界民族之林的大鍋飯,原本只需一個位元組就能傳輸的英文現在變成兩個位元組,非常浪費存儲空間和傳輸速度。

人們再發揮聰明才智,於是出現了UTF-8編碼。因為針對的是空間浪費問題,因此這種UTF-8編碼是可變長短的,從英文字母的一個位元組,到中文的通常的三個位元組,再到某些生僻字的六個位元組。解決了空間問題,UTF-8編碼還有一個神奇的附加功能,那就是兼容了老大哥的ASCII編碼。一些老古董軟體現在在UTF-8編碼中可以繼續工作。

注意除了英文字母相同,漢字在Unicode編碼和UTF-8編碼中通常是不同的。比如漢字的『中』字在Unicode中是01001110
00101101,而在UTF-8編碼中是11100100 10111000
10101101。

我們祖國母親自然也有自己的一套標准。那就是GB2312和GBK。當然現在挺少看到。通常都是直接使用UTF-8。記得我唯一一次看到GB編碼的網頁,是一個成人網站。

Python3中的默認編碼

Python3中默認是UTF-8,我們通過以下代碼:

import sys

sys.getdefaultencoding()

可查看Python3的默認編碼。

Python3中的encode和decode

Python3中字元編碼經常會使用到decode和encode函數。特別是在抓取網頁中,這兩個函數用的熟練非常有好處。我的理解,encode的作用,使我們看到的直觀的字元轉換成計算機內的位元組形式。decode剛好相反,把位元組形式的字元轉換成我們看的懂的、直觀的、「人模人樣」的形式。如下圖。

\x表示後面是十六進制,\xe4\xb8\xad即是二進制的11100100 10111000
10101101。也就是說漢字『中』encode成位元組形式,是11100100 10111000
10101101。同理,我們拿11100100
10111000 10101101也就是\xe4\xb8\xad來decode回來,就是漢字『中』。完整的應該是b'\xe4\xb8\xad',在Python3中,以位元組形式表示的字元串則必須加上前綴b,也就是寫成上文的b'xxxx'形式。

前文說的Python3的默認編碼是UTF-8,所以我們可以看到,Python處理這些字元的時候是以UTF-8來處理的。因此從上圖可以看到,就算我們通過encode('utf-8')特意把字元encode為UTF-8編碼,出來的結果還是相同:b'\xe4\xb8\xad'。

明白了這一點,同時我們知道UTF-8兼容ASCII,我們可以猜想大學時經常背誦的『A』對應ASCII中的65,在這里是不是也能正確的decode出來呢。十進制的65轉換成十六進制是41,我們嘗試下:

b'\x41'.decode()

結果如下。果然是字元『A』

Python3中的編碼轉換

據說字元在計算機的內存中統一是以Unicode編碼的。只有在字元要被寫進文件、存進硬碟或者從伺服器發送至客戶端(例如網頁前端的代碼)時會變成utf-8。但其實我比較關心怎麼把這些字元以Unicode的位元組形式表現出來,露出它在內存中的廬山正面目的。這里有個照妖鏡:

xxxx.encode/decode('unicode-escape')

輸出如下

b'\\u4e2d'還是b'\u4e2d,一個斜杠貌似沒影響。同時可以發現在shell窗口中,直接輸'\u4e2d'和輸入b'\u4e2d'.decode('unicode-escape')是相同的,都會列印出漢字『中』,反而是'\u4e2d'.decode('unicode-escape')會報錯。說明說明Python3不僅支持Unicode,而且一個『\uxxxx』格式的Unicode字元可被辨識且被等價於str類型。

如果我們知道一個Unicode位元組碼,怎麼變成UTF-8的位元組碼呢。懂了以上這些,現在我們就有思路了,先decode,再encode。代碼如下:

xxx.decode('unicode-escape').encode()

測試如下:

可以看到最後輸出的UTF-8位元組與上面的相同。嘗試成功。所以其他的編碼之間的轉換,大概也是如此。

最後的擴展

還記得剛剛那個ord嗎。時代變遷,老大哥ASCII被人合並,但ord還是有用武之地。試試ord('中'),輸出結果是20013。20013是什麼呢,我們再試試hex(ord('中')),輸出結果是'0x4e2d',也就是20013是我們在上文見面了無數次的x4e2d的十進制值。這里說下hex,是用來轉換成十六進制的函數,學過單片機的人對hex肯定不會陌生。

最後的擴展,在網上看到的他人的問題。我們寫下類似於'\u4e2d'的字元,Python3知道我們想表達什麼。但是讓Python讀取某個文件的時候出現了'\u4e2d',是不是計算機就不認識它了呢?後來下文有人給出了答案。如下:

import codecs

file = codecs.open( "a.txt", "r", "unicode-escape" )

u = file.read()

print(u)

Ⅵ ASN.1語法以及在python中如何編碼解碼



ASN.1的文章本來是免費的,但是有的人一定要搞小動作,咱惹不起就只能躲著了,做了一些修改後,改為付費文章



應用程序在網路協議的應用層對payload數據,多使用ASN.1標准進行處理

ASN.1

ASN.1



Abstract Syntax Notation One,抽象語法標記,ASN.1是描述數據格式的標准方法, 它不管語言是如何執行、這些數據具體指什麼、用什麼類型的編碼規則 ,是一種抽象的語法



ASN.1由兩部分組成:

一部分描述信息內數據,數據類型及序列格式

另一部分描述如何將各部分組成消息

語法

例如

Report ::= SEQUENCE {

author OCTET STRING,

title OCTET STRING,

body OCTET STRING,

biblio Bibliography



Report是結構體名稱

SEQUENCE表示消息是由許多數據單元構成的

中括弧{}裡面是各種類型的數據單元

前三個數據單元author/title/body的類型是OCTET STRING

最後一個數據單元biblio的類型是另一個ASN.1結構體

Bibliography ::= SEQUENCE {

author OCTET STRING

title OCTET STRING

publisher OCTET STRING

year OCTET STRING



數據類型

類型含義

NULL空

BOOLEAN布爾類型

INTEGER整型

REAL實數類型

BIT STRING比特串

OCTEC STRING位元組串

OBJECT IDENTIFIER實體標識符

ENUMERATED枚舉類型

SEQUENCE序列

SEQUENCE OF類型的序列

SET集合

SET OF類型的集合

CHOICECHOICE類型

...STRING(有很多就不一一列舉)字元串類型

UTCTime時間類型

GeneralizedTime時間類型

ASN.1文件結構

例如

Foo DEFINITIONS ::= BEGIN

    Question ::= SEQUENCE {

        id        INTEGER,

        question  IA5String

    }

    Answer ::= SEQUENCE {

        id        INTEGER,

        answer    BOOLEAN

    }

END 

解析上面的ASN.1文件的結構

ASN.1支持的編碼規則

基本編碼規則(BER)

規范編碼規則(CER)

識別名編碼規則(DER)

壓縮編碼規則(PER)

XML編碼規則(XER)

python如何對ASN.1結構的信息編碼和解碼

如果我們想用python對信息進行編碼,需要明確幾點:

提供的ASN.1格式的數據

更多內容,請參考公-中-號, 汽車網路診斷通信

Ⅶ python程序有哪些編碼規范

編碼格式聲明
通常,編碼格式聲明是必需的。如果 python 源碼文件沒有聲明編碼格式,python 解釋器會默認使用 ASCII 編碼,一旦源碼文件包含非ASCII編碼的字元,python 解釋器就會報錯。以 UTF-8 為例,以下兩種編碼格式聲明都是合乎規則的。
縮進
統一使用 4 個空格進行縮進。絕對不要用tab, 也不要tab和空格混用。對於行連接的情況,我一般使用4空格的懸掛式縮進。例如:
引號
自然語言使用雙引號
機器標識使用單引號
正則表達式使用雙引號
空行
編碼格式聲明、模塊導入、常量和全局變數聲明、頂級定義和執行代碼之間空兩行
頂級定義之間空兩行,方法定義之間空一行
在函數或方法內部,可以在必要的地方空一行以增強節奏感,但應避免連續空行
導入模塊
導入總應該放在文件頂部,位於模塊注釋和文檔字元串之後,模塊全局變數和常量之前。導入應該按照從最通用到最不通用的順序分組,分組之間空一行
標准庫導入
第三方庫導入
應用程序指定導入
命名規范
模塊盡量使用小寫命名,首字母保持小寫,盡量不要用下劃線
類名使用駝峰(CamelCase)命名風格,首字母大寫,私有類可用一個下劃線開頭
函數名一律小寫,如有多個單詞,用下劃線隔開
私有函數可用一個下劃線開頭
變數名盡量小寫, 如有多個單詞,用下劃線隔開
常量採用全大寫,如有多個單詞,使用下劃線隔開

熱點內容
c上機編程題 發布:2025-02-09 08:17:18 瀏覽:318
顯示語法錯誤編譯不出來 發布:2025-02-09 08:17:09 瀏覽:284
酒店配置什麼滅火系統 發布:2025-02-09 08:06:37 瀏覽:773
java至尊 發布:2025-02-09 08:03:23 瀏覽:558
pythonwith 發布:2025-02-09 08:00:25 瀏覽:172
Ftp打開文件是只讀模式 發布:2025-02-09 07:40:55 瀏覽:504
androidlistview點擊事件 發布:2025-02-09 07:25:52 瀏覽:171
targz解壓縮 發布:2025-02-09 06:59:19 瀏覽:311
wpsphp 發布:2025-02-09 06:58:41 瀏覽:962
視易鋒雲系統如何架設輔助伺服器 發布:2025-02-09 06:47:08 瀏覽:770