1. 語(yǔ)言特點(diǎn)
- 面對(duì)對(duì)象
- 解釋性
- 免費(fèi)開源
- 可移植性
- 膠水語(yǔ)言:可以調(diào)用C語(yǔ)言
- 豐富的庫(kù)
- 代碼規(guī)范性
- 支持函數(shù)式編程
- 動(dòng)態(tài)類型:不會(huì)檢查數(shù)據(jù)類型障簿,在變量聲明無(wú)需指定數(shù)據(jù)類型
…
2. 應(yīng)用場(chǎng)景
- 桌面應(yīng)用開發(fā):wxPython儡羔、Tkinter...
- Web應(yīng)用開發(fā):Django喇颁、Flask寸齐、Tornado...
- 自動(dòng)化運(yùn)維
- 數(shù)據(jù)可視化:Matplotlib
- 網(wǎng)絡(luò)爬蟲
- 人工智能
- 大數(shù)據(jù)
- 游戲開發(fā)
…
3. 語(yǔ)法基礎(chǔ)
3.1. 標(biāo)識(shí)符——命名規(guī)則:
- 區(qū)分大小寫
- 首字符不能是數(shù)字垮刹,可以是下劃線或字母
- 關(guān)鍵字不能作為標(biāo)識(shí)符
- 不能使用Python內(nèi)置函數(shù)作為自身標(biāo)識(shí)符
-
$
祥国、#
不能構(gòu)成標(biāo)識(shí)符:room#
铁坎、$Name
屬于非法標(biāo)識(shí)符
3.2. 關(guān)鍵字
Python語(yǔ)言中有33個(gè)關(guān)鍵字往核,只有三個(gè)首字母大寫:False
箫爷、True
和None
,其他全部小寫。
3.3. 變量和常量
Python是動(dòng)態(tài)類型語(yǔ)言虎锚,不能定義真正意義的常量硫痰。
3.4. 語(yǔ)句
- 一行代碼表示一條語(yǔ)句,語(yǔ)句結(jié)束可以加分號(hào)窜护,但沒(méi)必要
- 多個(gè)變量賦值可以用鏈?zhǔn)浇Y(jié)構(gòu):
a = b = c =10
效斑,但沒(méi)必要 -
if
、for
和while
內(nèi)代碼塊不通過(guò)大括號(hào)界定柱徙,而是通過(guò)縮進(jìn)if (a > b): print(a)
- 考慮到不同編輯器Tab鍵縮進(jìn)程度存在區(qū)別缓屠,編程規(guī)范建議采用4個(gè)空格代替Tab鍵
3.5. 模塊
-
import <模塊名>
:使用模塊元素時(shí)需加模塊名為前綴 from <模塊名> import <代碼元素>
3.6. 包(package)命名空間
- 通過(guò)目錄的方式組織眾多的模塊,用來(lái)管理和分類模塊
- 包含
__init__.py
文件(可以為空文件)护侮,闡釋該目錄文件夾屬性是包 - 同名的模塊可以放在不同的包下敌完,以避免名稱沖突
4. Python編碼規(guī)范
4.1. 命名規(guī)范
-
包名:全部小寫字母,通過(guò)點(diǎn)連接分隔羊初,不推薦使用下劃線滨溉;包名應(yīng)具有唯一性;推薦采用公司或組織域名的倒置长赞,如
com.apple.quicktime.v2
晦攒。 -
模塊名:全部小寫字母,如果是多個(gè)單詞構(gòu)成得哆,可以用下劃線隔開脯颜,如
dummy_threading
。 -
類名:采用大駝峰法命名贩据,如
SplitViewController
伐脖。 -
異常名:異常屬于類,命名同類命名乐设,但應(yīng)該使用Error作為后綴,如
FileNotError
绎巨。 - 變量名:全部小寫字母近尚,如果是多個(gè)單詞構(gòu)成,可以用下劃線隔開场勤。如果變量應(yīng)用于模塊或函數(shù)內(nèi)部戈锻,則變量名可以單下劃線開頭;如果變量類內(nèi)部私有使用變量名可以雙下劃線開頭和媳。不要命名雙下劃線開頭和結(jié)尾的變量格遭,這是Python保留的。另外留瞳,避免使用小寫L拒迅、大寫O和大寫I作為變量名。
-
函數(shù)名和方法名:同變量命名,如
balance_account
璧微、_push_cm_exit
作箍。 -
常量名:全部大寫字母,多個(gè)單詞構(gòu)成通過(guò)下劃線隔開前硫,如
YEAR
和WEEK_OF_MONTH
胞得。
4.2. 注釋規(guī)范
-
文件注釋:在每個(gè)文件開頭添加注釋,采用多行注釋屹电。通常包括:版權(quán)信息阶剑、文件名、所在模塊危号、作者信息牧愁、歷史版本信息、文件內(nèi)容和作用等葱色。(給能編輯源代碼的人看的)
# # 版權(quán)所有 2015 ****有限公司 # 許可信息查看LICENSE.txt文件 # 描述: # 實(shí)現(xiàn)日期基本功能 # 歷史版本: # 2015-7-22:創(chuàng)建 # 2015-8-20:添加socket庫(kù) # 2015-8-22:添加math庫(kù) #
-
文檔注釋:文檔字符串递宅,注釋內(nèi)容能夠生成API幫助文檔,可以使用Python官方提供的pydoc工具從Python源代碼文件中提取這些信息苍狰,也可以生成HTML文件办龄。所有公有的模塊、函數(shù)淋昭、類和方法都應(yīng)該進(jìn)行文檔注釋俐填。(生成API幫助文檔給人看)
文檔注釋推薦使用一對(duì)三重雙引號(hào)("""
)包裹起來(lái),注意不推薦使用三重單引號(hào)('''
)翔忽。 - 代碼注釋:注釋太多 = 代碼質(zhì)量差
-
TODO注釋:有些地方不能確定英融,或未完成。
# TODO 有待解決
4.3. 導(dǎo)入規(guī)范
- 導(dǎo)入語(yǔ)總是放在文件頂部歇式,位于模塊注釋和文檔注釋之后驶悟,模塊全局變量和常量之前
-
每一個(gè)導(dǎo)入語(yǔ)句只能導(dǎo)入一個(gè)模塊
推薦使用:
不推薦使用:import re import struct import binascii
但是import re, struct, binascii
from import
后面可以多個(gè)代碼元素from codeop import CommandCompiler, compile_command
-
導(dǎo)入順序:從通用到特殊,標(biāo)準(zhǔn)庫(kù)→第三方庫(kù)→自己模塊材失,每一組之間有一個(gè)空行痕鳍,且組中模塊按照英文字典順序進(jìn)行排序
Pycharm快捷鍵:Ctrl+Alt+O,可自動(dòng)識(shí)別排版# 標(biāo)準(zhǔn)庫(kù) import io import os import pkgutil import sys import time from html import unescape # 第三方庫(kù) from com.pkg1 import example # 自定義庫(kù)
4.4. 代碼排版:包括空行龙巨、空格笼呆、斷行和縮進(jìn)等
- Pycharm快捷鍵:Ctrl+Alt+L册舞,可自動(dòng)進(jìn)行格式排版
- 空行:
①import
語(yǔ)句塊前后保留兩個(gè)空行宙刘;
②函數(shù)聲明之前保留兩個(gè)空行;
③類聲明之前保留兩個(gè)空行被饿;
④方法聲明之前保留一個(gè)空行秸弛;
⑤兩個(gè)邏輯代碼塊之前應(yīng)該保留一個(gè)空行铭若。 - 空格:
①賦值符號(hào)=
前后各有一個(gè)空格洪碳;
②所有的二元運(yùn)算符都應(yīng)該使用空格與操作數(shù)分開;a = 10 c = 10
③一元運(yùn)算符:算法運(yùn)算符取反a += c + d
-
和運(yùn)算符取反~
奥喻;
④括號(hào)內(nèi)不要有空格偶宫,包括:b = 10 a = -b y = ~b
()
、[]
环鲤、{}
纯趋;
⑤不要在逗號(hào)、分號(hào)冷离、冒號(hào)前面有空格吵冒,而是要在他們后面有一個(gè)空格,除非該符號(hào)已經(jīng)是行尾西剥。doque(cat[1],{dogs:2},[]) # 推薦用法 doque(cat[ 1 ],{ dogs:2 },[ ]) # 不推薦
⑥參數(shù)列表痹栖、索引或切片的左括號(hào)前不應(yīng)有空格;# 推薦 if x == 88: print x, y x, y = y, x # 不推薦 if x == 88 : print x , y x , y = y , x
# 推薦 doque(1) dogs['key'] = list[index] # 不推薦 doque (1) dogs ['key'] = list [index]
- 縮進(jìn):4個(gè)空格常被作為縮進(jìn)排版的一個(gè)級(jí)別瞭空。默認(rèn)情況下一個(gè)制表符等于8個(gè)空格揪阿,且不同的IDE工具中一個(gè)制表符與空格對(duì)應(yīng)的個(gè)數(shù)會(huì)有不同,所以盡量不要使用制表符縮進(jìn)
- 斷行:一行代碼最多79個(gè)字符咆畏。對(duì)于文檔注釋和多行注釋時(shí)一行最多72個(gè)字符南捂,超過(guò)需斷行(若包含URL地址則不受限制)
# 在逗號(hào)后面斷開 bar = long_function_name(name1, name2, name3, name4) def long_function_name(var_one, var_two, var_three, var_four): # 在運(yùn)算符前面斷開 name1 = name2 * (name3 + name4 - name5) + 4 * name6 # 盡量不要使用續(xù)行符(\),當(dāng)有符號(hào)(包括:大括號(hào)旧找、中括號(hào)和小括號(hào))則在括號(hào)中斷開溺健,這樣可以不使用續(xù)行符。 def long_function_name(var_one, var_two, var_three, var_four): return var_one + var_two + var_three \ + var_four # 推薦加入括號(hào)換行 return (var_one + var_two + var_three + var_four)
5. 數(shù)據(jù)類型
在Python中所有的數(shù)據(jù)類型都是類钮蛛,每一個(gè)變量都是類的“實(shí)例”鞭缭。沒(méi)有基本數(shù)據(jù)類型的概念,所以整數(shù)魏颓、浮點(diǎn)和字符串也都是類岭辣。
Python有6種標(biāo)準(zhǔn)數(shù)據(jù)類型:數(shù)字、字符串甸饱、列表易结、元祖、集合和字典柜候。
5.1. 數(shù)字類型
包括整數(shù)類型、浮點(diǎn)類型躏精、復(fù)數(shù)類型和布爾類型
- 整數(shù)類型:Python中整數(shù)類型為int渣刷,范圍只受計(jì)算機(jī)硬件的限制。表示方式如下:
①二進(jìn)制數(shù):以0b或0B為前綴矗烛,注意0是阿拉伯?dāng)?shù)字
②八進(jìn)制數(shù):以0o或者0O為前綴辅柴,第一個(gè)字符是阿拉伯?dāng)?shù)字0箩溃,第二個(gè)字符是英文字母o或O
③十六進(jìn)制數(shù):以0x或0X為前綴,注意0是阿拉伯?dāng)?shù)字 - 浮點(diǎn)類型:Python中浮點(diǎn)類型為float
- 復(fù)數(shù)類型:Python中復(fù)數(shù)類型為complex碌嘀,例如
1+2j
表示的是實(shí)部1
涣旨、虛部2
的復(fù)數(shù) - 布爾類型:Python中布爾類型為bool,只有兩個(gè)值:
True
和False
任何類型數(shù)據(jù)都可以通過(guò)bool()
函數(shù)轉(zhuǎn)換為布爾值股冗,“沒(méi)有的”霹陡、“空的”值會(huì)轉(zhuǎn)換為False
,反之轉(zhuǎn)換為True
5.2. 數(shù)字類型相互轉(zhuǎn)換
-
隱式類型轉(zhuǎn)換:多個(gè)數(shù)字類型數(shù)據(jù)之間可以進(jìn)行數(shù)學(xué)計(jì)算止状,由于參與進(jìn)行計(jì)算的數(shù)字類型可能不同烹棉,此時(shí)會(huì)發(fā)生隱式類型轉(zhuǎn)換。
a = 1 + True
-
顯式類型轉(zhuǎn)換:
int()
怯疤、float()
和bool()
函數(shù)int(19.4) float(5) bool(2)
5.3. 字符串類型
-
字符串表示方式:
①普通字符串:采用單引號(hào)'
或雙引號(hào)"
包裹起來(lái)的字符串
②原始字符串:在普通字符串前加r
浆洗,字符串中的特殊字符不需要轉(zhuǎn)義,按照字符串的本來(lái)“面目”呈現(xiàn)a = "Hello \n world" print(a) a = r"Hello \n world" print(a)
③長(zhǎng)字符串:字符串中包含了換行縮進(jìn)等排版字符集峦,可以使用三重單引號(hào)
'''
或三重雙引號(hào)"""
包裹起來(lái)a = '''Hello world''' print(a)
-
字符串格式化:
format()
方法伏社,字符串格式化控制符,以及占位符{}
name = 'Mary' age = 18 money = 1234.5678 "{0}芳齡是{1:d}歲塔淤。".format(name, age) "{0}今天收入是{1:10.2f}元摘昌。".format(name, money)
-
字符串查找
str.find(sub[,start[,end]])
str.rfind(sub[,start[,end]])
source_str = "THere is a string accessing example." len(source_str) source_str.find('r') source_str.rfind('r') source_str[16]
字符串與數(shù)字相互轉(zhuǎn)換
①字符串轉(zhuǎn)換為數(shù)字
int()
和float()
②數(shù)字轉(zhuǎn)換為字符串
str()
6. 運(yùn)算符
6.1. 算數(shù)運(yùn)算符
一元運(yùn)算符:取反運(yùn)算符
-
-
二元運(yùn)算符:加減乘除、取余
%
凯沪、冪**
以及地板除法//
3 % 2 10 ** 2 3 // 2 # 比商小的最大整數(shù)第焰,此處結(jié)果為1
6.2. 關(guān)系運(yùn)算符
有6種:==
、!=
妨马、>
挺举、<
、>=
和<=
6.3. 邏輯運(yùn)算符
有3種:與and
烘跺、或or
湘纵、非not
6.4. 位運(yùn)算符
- 位反
~
:~x
:將x的值按位取反 - 位與
&
:x&y
:x與y位進(jìn)行位與運(yùn)算 - 位或
|
:x|y
:x與y位進(jìn)行位或運(yùn)算 - 位異或
^
:x^y
:x與y位進(jìn)行位異或運(yùn)算 - 有符號(hào)右移
>>
:x>>a
:x右移a位,高位采用符號(hào)位補(bǔ)位 - 左移
<<
:x<<a
:x左移a位滤淳,低位用0
補(bǔ)位
6.5. 賦值運(yùn)算符
用于簡(jiǎn)寫梧喷,主要包括:+=
、-=
脖咐、*=
铺敌、/=
、%=
屁擅、**=
偿凭、//=
、&=
派歌、|=
弯囊、^=
痰哨、<<=
和>>=
6.6. 其他運(yùn)算符
- 同一性測(cè)試運(yùn)算符:
is
和is not
注意:==
與is
區(qū)別
==
:測(cè)試兩個(gè)對(duì)象內(nèi)容是否相等
is
:測(cè)試兩個(gè)對(duì)象是否是同一個(gè)對(duì)象 - 成員測(cè)試運(yùn)算符:
in
和not in
6.7. 運(yùn)算符優(yōu)先級(jí)
7. 控制語(yǔ)句
7.1. 分支語(yǔ)句
if
結(jié)構(gòu):
-
if
結(jié)構(gòu):if 條件: 語(yǔ)句組
-
if-else
結(jié)構(gòu):if 條件: 語(yǔ)句組1 else: 語(yǔ)句組2
-
elif
結(jié)構(gòu),類似switch
語(yǔ)句:if 條件1: 語(yǔ)句組1 elif 條件2: 語(yǔ)句組2 elif 條件3: 語(yǔ)句組3 ... elif 條件n: 語(yǔ)句組n else: 語(yǔ)句組n+1
-
三元運(yùn)算符替代品——條件表達(dá)式
表達(dá)式1 if 條件 else 表達(dá)式2
7.2. 循環(huán)語(yǔ)句
while
和for
:
-
while
語(yǔ)句while 循環(huán)條件: 語(yǔ)句組 [else: 語(yǔ)句組]
-
for
語(yǔ)句for 迭代變量 in 序列: 語(yǔ)句組 [else: 語(yǔ)句組] for num in range(1, 10): print('{0} * {0} = {1}'.format(num, num * num))
7.3. 跳轉(zhuǎn)語(yǔ)句
break
匾嘱、continue
和return
:
-
break
語(yǔ)句:遇到break
跳出循環(huán)體for item in range(10): if item == 3: break print('Count is: {0}'.format(item)) # 打印 0斤斧、1、2
-
continue
語(yǔ)句:遇到continue
語(yǔ)句結(jié)束當(dāng)次循環(huán)霎烙,continue
之后的語(yǔ)句不再執(zhí)行撬讽,接著執(zhí)行下次循環(huán)for item in range(10): if item == 3: continue print('Count is: {0}'.format(item)) # 打印 0-9,除了3
-
while
和for
中的else
語(yǔ)句:while
和for
正常循環(huán)結(jié)束時(shí)走的else
語(yǔ)句while i * i < 10: i += 1 print('{0} * {0} = {1}'.format(i, i * i)) else: print('While Over!') # 打印 0-9吼过,除了3
7.4. 使用范圍
范圍在Python中類型是range
锐秦,表示一個(gè)整數(shù)序列,創(chuàng)建范圍對(duì)象使用range()
函數(shù)盗忱,range()
函數(shù)語(yǔ)法如下:
range([start,]stop[,step])
注意:start
≤整數(shù)序列取值<stop
酱床,步長(zhǎng)step
可以為負(fù)數(shù),可以創(chuàng)建遞減序列