Python書寫規范


 PEP8代碼風格

PEP8是Python對於代碼的風格指南,給出了Python代碼組成的編碼約定。我們每個人都會形成自己的編碼風格,但我們應盡量的參考此指南來編寫Python代碼,致力於代碼更加規范化,這樣才能顯現出上文提到過的Python優點嘛。

簡單說下幾個重要的語法規范吧:

縮進規范:不允許tab和空格混用

Python是一門用空格縮進來區分代碼層次的語言,其實Python並沒有強制要求你用Tab縮進或者用空格縮進,甚至空格按幾個都沒有強制要求。但PEP8規范建議四個空格為語句的縮進塊。用縮進來控制不同的語句塊是Python的一大特色,縮進也讓Python的代碼更優美,簡潔。
在日常編輯中,當代碼量增多,邏輯語句復雜時。因為縮進造成的bug層出不窮,比如造成邏輯判斷的報錯,造成程序的異常退出等,都是需要我們注意的。一般的,引起這些錯誤的原因,可能是Tab鍵和空格鍵在不同的編輯環境混用造成的,也可能是你邏輯判斷時忘了縮進,或者多了一個縮進,不過沒關系,只要我們在敲代碼時,注意點,並且PyCharm在縮進錯誤時,會有提示的(一般為飄紅)。
這里需要的注意的是:這個四個空格,可以手動敲4下空格鍵(廢話!),也可以用鍵盤的Tab鍵(別問在哪,Q鍵左邊,Capslock鍵上邊)。但是,千萬不要Tab和空格鍵混用,因為不同的編輯器對Tab鍵的解釋是不同的,有的是默認4個空格,有的是8個。但空格永遠是一致的!Python中不提倡用Tab來處理縮進,但一般編輯器的Tab都是4個空格,我們也能設置嘛!反正要是讓灑家一直咔咔咔咔咔咔敲空格,還不如去搬磚(我擦,貌似暴露了什么)....
ps:如果要是想讓代碼往右側縮進4個,就Tab一次就行了;要是讓代碼往左側縮進4個空格,就Shift + Tab就完了。如果是整個代碼塊,選中所有即可。

不允許使用";"

不少有別的語言經驗的大佬來學習Python時。每當敲完一行代碼后。姿態非常優美的敲個分號作為結束!比如:

print('hello world');    # ×
print('hello world')    # √

Python不建議使用分號!除此之外,也不要用分號連接兩條語句:

x = 3;print('hello world')

為了Python代碼更加優美、簡潔,請忘記分號吧!

不允許兩個邏輯行寫到物理行上

```python
x =5;print(111)    雖然語法正確,但是語法規范上算是錯誤寫法。最好還是每行只寫一句,這樣代碼更易讀。
```

那么,你可能會說,這個一行萬一放不下怎么辦?那就用到了行連接\符號,如:

>>> name =  "I'm oldboy, I love pyt\  
... hon"  
>>> name  
"I'm oldboy, I love python"  

一行不要超過80個字符

一般的,每行不超過80個字符,但也有例外:

  • 長的導入模塊語句
  • 注釋里的URL
  • 不要使用反斜杠連接行

Python會將 圓括號, 中括號和花括號中的行隱式的連接起來 , 你可以利用這個特點. 如果需要, 你可以在表達式外圍增加一對額外的圓括號:

if (width == 0 and height == 0 and
         color == 'red' and emphasis == 'strong'):pass

如果一個文本字符串在一行放不下, 可以使用圓括號來實現隱式行連接:

x = ('This will build a very long long '
     'long long long long long long string')

注釋!很重要,是給人看的,就寫好注釋。你的弱雞代碼只想給一眼就能望穿代碼的大佬看,那我服你。。。

在Python中注釋分為兩種方式:

  • 單行注釋(#號表示,快捷鍵為Ctrl+?):一般用來對一行代碼或者幾行代碼進行注釋
  • 多行注釋(三對引號表示):一般用與對較多的代碼行或代碼塊進行注釋,或者對整個文件進行描述,下圖演示了單行注釋和多行注釋在實際編寫代碼中的示例。

別忘了,我們寫的代碼是給誰看的?你可能會說是給計算機?CPU?是個鬼鬼!是給人看的!

我們要在一些重要的地方加上一些注釋,讓別人一眼就知道是干啥用的。就像產品的說明書一樣。該有的不能少!

但也不能滿篇都是注釋!這就顯得low了。要顯得恰如其分,起到畫龍點睛的作用!給人一種一看就有一種:我x,大佬啊,這應該裱起來帖床頭,時時瞻仰啊!不能讓人家一看:我x,這是什么?dogshit

ps :不管是多少個引號,只在一行時只是被當做引號使用,並沒有注釋的用意

關於引號

在Python中,單引號和雙引號都能用來表示一個字符串,比如:

str1 = 'oldboy'  
str2 = "oldboy" 

在Python中,str1和str2是沒有區別的,但是在有些情況下,卻要注意的,例如你如何定義:I’m oldboy,這時候就要單雙引號搭配使用了,如:

str3 = "I'm oldboy"  

這也是Python人性化的方面之一,至於復雜的用法,我們后面講字符串的時候再說。

空行

頂級定義之間空兩行, 方法定義之間空一行。
頂級定義之間空兩行, 比如函數或者類定義. 方法定義, 類定義與第一個方法之間, 都應該空一行. 函數或方法中, 某些地方要是你覺得合適, 就空一行。

最重要的一點:就算是喝假酒上頭,你也要保證你敲得符號都是英文狀態下的

你敲別的錯誤還能肉眼檢查出來,你敲幾個中文符號.....呵呵,就等着變熊貓吧!!!!!

最后多說一條:在pycharm中,直接如下圖點擊,可自動將全文不復返輸入進行規范化較正。

變量與“常量”

簡介:

我們通過一個名字,指向一個人,或者指向一個具體的事物。這在Python中是同樣適用。Python中,這個名字稱為變量,而指向的對象為一串字符串,一個具體的數值等等。變量也是可變狀態的、對內存地址一種抽象。

變量賦值具體方式可查看https://www.cnblogs.com/Neeo/articles/10522363.html

我對Python變量的理解就是:它和其他語言例如shell,php等等語言的變量是一樣的,知識書寫方式與調用方式有點細微差別。都是給一個可能不斷改變的數據定義一個固定的變量名,以便於調取使用!

但是需要注意的是:Python屬於強類型的語言。如果定義了一個字符串類型的a。如果不經過強制轉換,那么它就永遠是字符串類型的了,程序根本不可能把它當做整形來處理。所以,Python也是類型安全的語言。

說到變量,那就不得不說一下常量。一般的來說,變量,就是代指不斷變化的量,而常量指(Python在語法上並沒有定義常量,盡管PEP8規范定義了常量的命名規范為全部大寫字母和下划線組成),基本上定義了之后不怎么變化的變量。比如我們保存一段信息:

IP = "127.0.0.1"

最后小結一下變量與常量的書寫規范吧:

Python雖然沒有常量,但還是會吧非特殊情況不更改的變量叫做常量。常量用全大寫字母表示

Python變量一般用駝峰或者111_2312格式

變量引用與刪除:

沒有被引用的變量會被自動清理掉

引用變量:直接引用

刪除變量:del x

輸入與輸出

屏幕輸出流:print('ashfqel')

輸入流(但是不打印):input('>>>: ')

輸入后打印到屏幕:

```python
result=input(''>>>: ')
print(result)
```

運算符與表達式

具體可參考https://www.cnblogs.com/Neeo/articles/10522370.html。這里就不講那么多啦

表達式

大多數的邏輯行都包含表達式,如計算面積就是一個簡單的表達式,表達式可以分解為運算符(操作符)與操作數,運算符是為了完成某個功能,它們由如+-這樣的符號或者其它特定的關鍵字表示,運算符需要數據來進行計算,這樣的數據被稱為操作數。

主要有:算數運算符,比較運算符,賦值運算符,邏輯運算符,成員運算符,身份運算符,位運算符...

算數運算符

算數運算符和我們數學上計算的符號使用是一致的,Python支持的算數運算符,如下表所示:

運算符 描述
+ 加,兩數相加
- 減,得到負數或者一個數減去另一個數
* 乘,兩數相乘或者返回一個被重復若干次的字符串
/ 除,兩個數相除
// 取整除
% 取模,返回除法的余數
** 冪,返回x的y次方

比較運算符

比較運算符通常用來比較兩個變量的關系:

運算符 描述
== 等於,比較兩個對象是否相等
!= 不等於,比較兩個數是否不相等
> 大於
< 小於
>= 大於等於
<= 小於等於

賦值運算符

前文中所講賦值操作,如x = 3,即將一個整形數字3賦值給變量x,其中=就是賦值運算符,另外,Python中還有其他的賦值運算符,如下表所示:

運算符 描述
= 簡單的賦值運算符
+= 加法賦值運算符
-= 減法賦值運算符
*= 乘法賦值運算符
/= 除法賦值運算符
%= 取模賦值運算符
**= 冪賦值運算符
//= 取整除賦值運算符

邏輯運算符

復制代碼
>>> 2 < 3 and 3 == 3    # 邏輯運算符 and  
True  
>>> 2 < 3 or 3 != 3     # 邏輯運算符 or  
True  
>>> not 1 > 2           # 邏輯運算符 not  
True  
復制代碼

成員運算符

我們很多時候,都會做這樣的判斷,王二狗子在家嗎?小李同學不在班里嗎?小芳的手機號我存在手機聯系人中了嗎?等等等等。Python中也存在這種在不在的關系判斷。並由具體的運算符來完成這樣的運算,我們稱這樣的運算符為成員運算符,如下表所示:

運算符 描述
in 如果在指定的序列找到值則返回True,否則返回False
not in 如果在指定的序列內沒找到值返回True,否則返回False
>>> 'a' in 'abcd'       # 成員運算符 in  
True  
>>> 'a' not in 'abcd'   # 成員運算符 not in  
False  

身份運算符

身份運算符用於比較兩個對象的存儲關系

復制代碼
>>> a = 'abcd'  
>>> b = a  
>>> c = a  
>>> b is a         # 身份運算符 is  
True  
>>> b is c  
True  
>>> c is not a     # 身份運算符 is not  
False  
復制代碼

運算符的優先級

那么,這么多運算符在參與運算時,誰先參與計算?誰后計算?比如數學運算中先算乘除,后算加減一樣,Python中也有規則,稱之為運算符優先級。下表總結了Python中的運算符優先級,從最低優先級(最少綁定)到最高優先級(最多綁定)。同一框中的運算符具有相同的優先級。除非明確給出語法,否則運算符是二進制的。運算符在同一框中從左到右分組(除從右到左分組的求冪運算外)。
請注意,比較、成員測試和身份測試都具有相同的優先級,並且具有比較部分中描述的從左到右的鏈接特性。

具體查看官網:https://docs.python.org/3/reference/expressions.html#operator-precedence

流程控制語句

和其他語言一樣,流程控制語句在Python中也包括三個部分。順序執行語句、分支執行語句(或稱條件語句if/else)和循環語句(for/while),如下圖所示:

 簡單的if邏輯語句:

復制代碼
user= input('user: ')
pwd = input('pwd: ')
if user == "dazhu" and pwd == "123":
print('ok')
else:
print('no')
復制代碼

if嵌套語句:

復制代碼
score = int(input("enter score:"))  
  
if score > 100 or score < 0:  
    print('你可能輸入了一個來自火星的成績 %s'%score)  
elif score >= 90:  
    print('成績優秀')  
elif score >= 75:  
    print('成績良好')  
elif score >= 60:  
    print('馬馬虎虎吧')  
else:  
    print('成績不合格')  
復制代碼
復制代碼
num = int(input(">>>"))  
if num < 10:  
    if num == 3:  
        print('輸入正確')  
    else:  
        print('再接再厲')  
else:  
    print('輸入錯誤')  
復制代碼
復制代碼
source = input('輸入成績: ')
if source.isdigit():  # 判斷字符串內的字串是否為整形,如果是,則返回true,否則返回false
    source = int(source)  # 將字符串轉換為整形術
    if 90 <= source <= 100:
        print('優秀')
    elif 80 <= source < 90:
        print('還行吧')
    elif source > 100 or source < 0:
        print('滾')
    elif 0 <= source < 60:
        print('加油,努力,奮斗')
else:
        print('輸入的是什么?心里沒數嗎??', source)
復制代碼

注意:if語句的嵌套不易過多,這樣會降低代碼的可讀性。

循環語句之while循環

先來看while循環,其語法基本形式如下。

while 表達式:  
    循環體  

實例:

復制代碼
count = 0   # 循環中的變量
sum = 0   # 用於求和
while count < 100:  # 當count小於100的時候,while循環執行(起到循環作用)
    count = count + 1#起到維持和終結循環作用
    # print(count)  #每次count值都會加一
    sum = sum + count  # sum都會加上count值
print(sum)
# 或者簡寫為下面這種方式
count = 0
sum = 0
while count < 100:
    count += 1
    sum += count
print(sum)
復制代碼

注意:如果運行下例代碼,就會發現程序是不是停不下來了?沒錯,這就是死循環(因為只有循環體呀)。我們在編寫代碼的時候后,如無必要,應注意避免死循環的產生。

while True:  
    print('ok')  

循環語句之for循環

Python的for循環可以遍歷任何序列類型

for循環的基本形式為:

for 變量(i) in 可迭代對象:  
    循環體  

關鍵點:循環次數取決於迭代對象內有多少元素。

有了for循環,我們在處理序列類型的數據就方便多了,比如循環打印一串字符串的每個字符。

str1 = 'dazhuisstrongman'  
for i in str1:  
    print(i)  

循環嵌套

在Python中,我們可以在while循環中嵌套while循環,也可嵌套for循環。反之,我們也可以在for循環中嵌套for循環,也可以嵌套while循環。

復制代碼
count = 0
while count < 3:
    num = 0
    while num <= 3:
        print('*' * num)
        num += 1
    count += 1
復制代碼

break語句

break語句用來終止循環語句,即使循環條件依然成立,碰到break語句也會終止循環。

break語句用在for和while循環中,如果當前的循環是嵌套類型的循環,break語句將停止執行包含break語句的循環,直接開始執行當前循環之外的下個Python語句。

示例,打印字符串,遇到h時終止循環。

復制代碼
for i in 'python':
    if i == 'h':
        print(i)
        break
    print(i)
復制代碼
復制代碼
count = 0
while count < 3:
    for i in 'python':
        if i == 'h':
            print(i)
            break
        print(i)
    if count == 2:
        break
    count += 1

"""
p
y
t
h
p
y
t
h
p
y
t
h
"""
復制代碼

continue語句

break語句結束所在循環,而continue語句則是結束當前循環執行的剩下的代碼,繼續執行下次循環。continue語句在for和while循環中都適用。

for i in 'python':
    if i == 'h':
        continue
    print(i)

ps:如果continue之前沒有對應的結束條件:x = x + 1。則會進入本次循環的死循環。

復制代碼
num = 1
while num <= 10:     # 維持循環的條件
     if num == 7:
         # num = num + 1
         num += 1
         continue
     else:
         print(num)
         # 結束循環的條件
         num = num + 1
 print('循環結束,當前的num是: ', num)
復制代碼

pass語句

復制代碼
i = 0  
while i < 10:  
    if i == 3:  
        pass  
    print(i)  
    i += 1  
復制代碼

上面的代碼示例中,pass語句這個代碼塊,意思就是我還沒想好要干啥,但什么都不寫程序不完整,無法執行,


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM