風(fēng)格指南
注釋
注釋解釋器不會(huì)去執(zhí)行,直接跳過
注釋的寫法
- 行注釋:以井號(hào)(#)開頭 可以單獨(dú)行,也可以在代碼后面
- 塊注釋:以三個(gè)單引號(hào)或者雙引號(hào)開頭并結(jié)束,中間可以包裹多行內(nèi)容
# 這里是行注釋,機(jī)器不會(huì)運(yùn)行
print("hello word")
"""
這里是塊注釋
可以寫很多行
...
"""
注釋原則
- 復(fù)雜代碼注釋
- 注釋不是越多越好
- 建立有效的溝通
變量
變量就是一個(gè)可以重復(fù)使用的量
變量的命名
- 變量名只能包含字母、數(shù)字和下劃線,變量名字可以使用字母或者下劃線開頭,但不可以使用數(shù)字開頭。如 1_message
- 變量名不能包含空格
- 變量名不能使用Python關(guān)鍵字、保留字、函數(shù),如print
# 查看關(guān)鍵字方法
import keyword #引入關(guān)鍵子模塊
# 打印關(guān)鍵字
print(keyword.kwlist)
- 變量名應(yīng)該簡短且具有描述性
- 不建議以下劃線開頭命名變量,因?yàn)橐韵聞澗€開頭的變量具有特殊含義
- 大小寫敏感,age 和 Age不一樣
- 可以使用中文,但強(qiáng)烈不建議使用
- 推薦使用posix命名規(guī)則
posix命名規(guī)則
- 多個(gè)單詞使用下劃線鏈接
- 單詞全部小寫
變量的賦值
常用賦值方法
# 將10 賦值給size
size = 10
print(size)
>>>10
給多個(gè)變量賦同一個(gè)值
size1 = size2 = size3 = 10
print(size1)
>>>10
print(size2)
>>>10
print(size3)
>>>10
一行代碼給多個(gè)變量賦值
size1, size2, size3 = 10, 12, 16
print(size1)
>>>10
print(size2)
>>>12
print(size3)
>>>16
變量交換
- 普通方式
a = 10
b = 20
c = a # 講a變量賦值給c, 此時(shí)c的值為10
a = b # 講b變量復(fù)制給a, 此時(shí)a的值為20
b = c # 講c變量復(fù)制給b, 此時(shí)b的值為10
通過中間變量c進(jìn)行變量的交換
- 利用python定義變量的語法實(shí)現(xiàn)
a, b = b, a
數(shù)據(jù)類型
- 六種標(biāo)準(zhǔn)數(shù)據(jù)類型
- 數(shù)字 Number
- 字符串 Str
- 列表 List
- 元祖 tuper
- 字典 dict
- 集合 set
- 布爾值 bool
- None
使用字符串時(shí)注意引號(hào)匹配
數(shù)字類型Number
整數(shù) int
沒有小數(shù)部分
包含正數(shù)、復(fù)數(shù)、0
浮點(diǎn)數(shù) float
帶小數(shù)點(diǎn)的數(shù)字稱為浮點(diǎn)數(shù)
科學(xué)計(jì)數(shù)法
科學(xué)計(jì)數(shù)法在python中的表示
a = 10e2
print(a)
>>>1000.0
復(fù)數(shù)
復(fù)數(shù)在python中的表示
python中,用j/J表示復(fù)數(shù)的虛部
a = 4+3j
b = 3j
c = (3j)
字符串 str
字符串是一系列的字符,在Python中,用引號(hào)括起來的是字符串,可以使單引號(hào),也可以是雙引號(hào)。三引號(hào)可以表示多行
字符串的表示
name = 'zhangsan'
name = "zhangsan"
name = """
zhang
san
"""
列表 list
通常用來記錄一些列數(shù)據(jù)
列表的創(chuàng)建
- 使用一對(duì)方括號(hào)來表示空列表: [] 或者是list()
- 使用方括號(hào),其中的項(xiàng)以逗號(hào)分隔: [a], [a, b, c]
- 其中的項(xiàng)成為元素
- 元素可以是其他的任意類型
>>> l1 = []
>>> print(l1, type(l1))
[] <class 'list'>
>>> l2 = list()
>>> print(l2, type(l2))
[] <class 'list'>
>>> l3 = [1, 2, 3]
>>> print(l3, type(l3))
[1, 2, 3] <class 'list'>
元組 tuple
元組是不可變序列,與列表相似,區(qū)別是其中的元素不可改變
元祖的創(chuàng)建
- 使用一對(duì)圓括號(hào)來表示空元組: ()
- 使用一個(gè)后綴的逗號(hào)來表示單元組: a, 或 (a,)
- 使用以逗號(hào)分隔的多個(gè)項(xiàng): a, b, c or (a, b, c)
- 使用內(nèi)置的 tuple(): tuple() 或 tuple(iterable)
元祖只有一個(gè)元素時(shí),最后要加一個(gè)逗號(hào)。
>>> t1 = ()
>>> t2 = 1,
>>> t3 = (1,)
>>> t4 = 1, 2, 3
>>> t5 = tuple()
>>>
>>> print(type(t1))
<class 'tuple'> <class 'tuple'> <class 'tuple'> <class 'tuple'> <class 'tuple'>
字典 dict
- 字典是用于儲(chǔ)存一組或多組的數(shù)據(jù)
- 字典是鍵值對(duì)形式
- 鍵的名字不能重復(fù),否則會(huì)覆蓋
- 鍵必須是字符串或者數(shù)字,值可以是任何類型
字典的創(chuàng)建
>>> a = dict(one=1, two=2, three=3)
>>> b = {'one': 1, 'two': 2, 'three': 3}
>>> c = dict(zip(['one', 'two', 'three'], [1, 2, 3]))
>>> d = dict([('two', 2), ('one', 1), ('three', 3)])
>>> e = dict({'three': 3, 'one': 1, 'two': 2})
>>> a == b == c == d == e
True
布爾值
- 布爾值用來表示真假
- 只有兩個(gè)值 Ture/False
- 在Python中,布爾值可以當(dāng)做數(shù)字使用:Ture = 1, False = 0
None
- 表示沒有,返回一個(gè)空
數(shù)據(jù)類型的檢測(cè)
使用type()函數(shù)進(jìn)行檢測(cè)
>>> a = 10
>>> b = True
>>> c = 'hello world'
>>> d = 1.01
>>> print(a, type(a))
10 <class 'int'>
>>> print(b, type(b))
True <class 'bool'>
>>> print(c, type(c))
hello world <class 'str'>
>>> print(d, type(d))
1.01 <class 'float'>
數(shù)據(jù)類型分類
是否可變
是否可變指內(nèi)容創(chuàng)建后,內(nèi)容是否可變
- 可變數(shù)據(jù)類型
- 列表
- 字典
- 集合
- 不可變數(shù)據(jù)類型
- 字符串
- 數(shù)字
- 元組
是否容器類
容器類型數(shù)據(jù)指此類型數(shù)據(jù)可以容納其他數(shù)據(jù)
- 容器類型數(shù)據(jù)
- 字符串
- 列表
- 元組
- 集合
- 字典
- 非容器類型數(shù)據(jù)
- 數(shù)字
- 布爾值
數(shù)據(jù)類型的轉(zhuǎn)換
數(shù)據(jù)類型轉(zhuǎn)換指的是講一種數(shù)據(jù)類型轉(zhuǎn)換為另一種數(shù)據(jù)類型,目的是解決不同數(shù)據(jù)類型之間的運(yùn)算問題。
自動(dòng)類型轉(zhuǎn)換
- 數(shù)字與布爾值運(yùn)算會(huì)將布爾值自動(dòng)轉(zhuǎn)為數(shù)字
>>> n = 1
>>> b = True
>>> print(n+b)
2
- 邏輯判斷時(shí)數(shù)字會(huì)自動(dòng)轉(zhuǎn)為布爾值
- 整數(shù)與浮點(diǎn)數(shù)運(yùn)算時(shí),整數(shù)會(huì)轉(zhuǎn)為浮點(diǎn)數(shù)
手動(dòng)類型轉(zhuǎn)換
通過特定的函數(shù),可以將一種數(shù)據(jù)類型轉(zhuǎn)為另一種數(shù)據(jù)類型
函數(shù) | 轉(zhuǎn)換后類型 | 可轉(zhuǎn)換類型 |
---|---|---|
str() | 字符串 | 所有類型都可以 |
int() | 整數(shù) | 純數(shù)字字符串、布爾值、浮點(diǎn)數(shù),其他容器類類型不能轉(zhuǎn) |
float() | 浮點(diǎn)數(shù) | 純數(shù)字字符串、布爾值、整數(shù) |
bool() | 布爾值 | 所有類型都可以 |
list() | 列表 | 字符串、數(shù)組、字典(只保留鍵)集合 |
tuple() | 元組 | 數(shù)字類型和非容器類型不能轉(zhuǎn)換、容器類型可以 |
dict() | 字典 | 只有特定的列表和元組可以轉(zhuǎn),要求列表中的每個(gè)元素都是一個(gè)只包含倆個(gè)元素的列表,其中第一個(gè)元素轉(zhuǎn)為字典的鍵,第二個(gè)為值 [[1, a], [2, b], [3, c]],元組要求類似。 |
set() | 集合 | 非容器類不可以轉(zhuǎn)換,容器類轉(zhuǎn)換后無序、去重、字典只保留鍵。 |
使用函數(shù)轉(zhuǎn)換類型
- a 為數(shù)字類型
- b經(jīng)過str()函數(shù)將a轉(zhuǎn)為字符串類型
- c經(jīng)過int()函數(shù)將b轉(zhuǎn)回?cái)?shù)字類型
>>> a = 1
>>> b = str(a)
>>> c = int(b)
>>> print(b, type(b))
1 <class 'str'>
>>> print(c, type(c))
1 <class 'int'>
運(yùn)算符
運(yùn)算符的分類
- 算術(shù)運(yùn)算符
- 比較(關(guān)系)運(yùn)算符
- 賦值運(yùn)算符
- 邏輯運(yùn)算符
- 位運(yùn)算符
- 身份運(yùn)算符
算術(shù)運(yùn)算符
假設(shè)變量a = 1, b = 2
運(yùn)算符 | 描述 | 實(shí)例 |
---|---|---|
+ | 兩個(gè)對(duì)象相加 | a + b >>>3 |
- | 兩個(gè)對(duì)象相減 | a - b >>>-1 |
* | 兩個(gè)對(duì)象相乘或者是返回若干次的字符串 | a*b >>>2 |
/ | 除法運(yùn)算 | b/a >>>2 |
// | 地板除,取整 | 9//2 >>>4 |
% | 取模(取余) | 9%2 >>>1 |
** | 冪運(yùn)算 | a**b >>>1 |
注意:Python2.x 里,整數(shù)除整數(shù),只能得出整數(shù)。如果要得到小數(shù)部分,把其中一個(gè)數(shù)改成浮點(diǎn)數(shù)即可。
>>> 1/2
0
>>> 1.0/2
0.5
>>> 1/float(2)
0.5
比較運(yùn)算符
假設(shè)變量a = 1, b = 2
運(yùn)算符 | 描述 | 實(shí)例 |
---|---|---|
== | 比較連個(gè)對(duì)象是否相等 | a == b >>>False |
!= | 比較兩個(gè)對(duì)象是否不相等 | a != b >>>True |
> | 比較x是否大于y | a > b >>>False |
< | 比較x是否小于y | a < b >>> True |
>= | 返回x是否大于等于y | a >= b >>>Flase |
<= | 返回x是否小于等于y | a <= b >>>True |
賦值運(yùn)算符
假設(shè)變量a = 1, b = 2
運(yùn)算符 | 描述 | 實(shí)例 |
---|---|---|
= | 簡單的賦值運(yùn)算 | c = a + b 將a + b 的運(yùn)算結(jié)果賦值給c |
+= | 加法賦值運(yùn)算 | c += a 等效與 c = c + a |
-+ | 減法賦值運(yùn)算 | c -= a 等效于 c = c - a |
*= | 乘法賦值運(yùn)算符 | c *= a 等效于 c = c * a |
/= | 除法賦值運(yùn)算 | c /= a 等效于 c = c / a |
%= | 取模賦值運(yùn)算 | c % a 等效于 c = c % a |
**= | 冪賦值運(yùn)算 | c **= a 等效于 c = c ** a |
//= | 地板除賦值運(yùn)算 | c //= a 等效于 c = c//a |
邏輯運(yùn)算符
運(yùn)算符 | 描述 | 實(shí)例 |
---|---|---|
and | "與"運(yùn)算,x、y全部為True返回True,否則返回Flase | True and False >>>False |
or | "或"運(yùn)算,x、y全部為Flase返回False,否則返回True | True or False >>>True |
not | "非"運(yùn)算,取反 | not False >>>True |
邏輯運(yùn)算存在短路問題,程序一旦確定邏輯運(yùn)算結(jié)果不在進(jìn)行后面的代碼
# 短路案例,由于提前確定了c的值為True,程序不在往下運(yùn)行,不在打印"b"
def a():
print("a")
return True
def b():
print("b")
return True
c = a() or b()
print(c)
>>> a
>>> True
成員運(yùn)算符
檢測(cè)一個(gè)成員是否在某個(gè)實(shí)例里面
運(yùn)算符 | 描述 | 實(shí)例 |
---|---|---|
in | 如果在序列中找到指定的值返回True,否則返回False | 1 in [1, 2, 3] >>>True |
not in | 如果在序列中沒有找到制定的值返回True,否則返回False | 1 not in [1, 2, 3] >>>False |
身份運(yùn)算符
運(yùn)算符 | 描述 | 實(shí)例 |
---|---|---|
is | 判斷兩個(gè)變量是不是引用自一個(gè)對(duì)象 | x is y, 類似 id(x) == id(y) , 如果引用的是同一個(gè)對(duì)象則返回 True,否則返回 False |
is not | 判斷兩個(gè)變量是不是引用自不同對(duì)象 | x is not y , 類似 id(a) != id(b)。如果引用的不是同一個(gè)對(duì)象則返回結(jié)果 True,否則返回 False。 |
可以簡單理解為他們指向的內(nèi)存地址是否相同
is 與 == 區(qū)別:
is 用于判斷兩個(gè)變量引用對(duì)象是否為同一個(gè)(同一塊內(nèi)存空間), == 用于判斷引用變量的值是否相等。
位運(yùn)算符
按位運(yùn)算符是把數(shù)字看作二進(jìn)制來進(jìn)行計(jì)算的
二進(jìn)制轉(zhuǎn)換
使用bin()函數(shù)可以講一個(gè)數(shù)字轉(zhuǎn)換為二進(jìn)制數(shù)字
>>> print(bin(1), '-', bin(2), '-', bin(3))
0b1 - 0b10 - 0b11
使用int()函數(shù)可以講一個(gè)二進(jìn)制轉(zhuǎn)為十進(jìn)制
>>> print(int(0b1), '-', int(0b10), '-', int(0b11))
1 - 2 - 3
二進(jìn)制位運(yùn)算
下表中變量 a 為 60,b 為 13,二進(jìn)制格式如下:
運(yùn)算符 | 描述 | 實(shí)例 |
---|---|---|
& | 按位與運(yùn)算符:參與運(yùn)算的兩個(gè)值,如果兩個(gè)相應(yīng)位都為1,則該位的結(jié)果為1,否則為0 | (a & b) 輸出結(jié)果 12 ,二進(jìn)制解釋: 0000 1100 |
| | 按位或運(yùn)算符:只要對(duì)應(yīng)的二個(gè)二進(jìn)位有一個(gè)為1時(shí),結(jié)果位就為1。 | (a | b) 輸出結(jié)果 61 ,二進(jìn)制解釋: 0011 1101 |
^ | 按位異或運(yùn)算符:當(dāng)兩對(duì)應(yīng)的二進(jìn)位相異時(shí),結(jié)果為1 | (a ^ b) 輸出結(jié)果 49 ,二進(jìn)制解釋: 0011 0001 |
~ | 按位取反運(yùn)算符:對(duì)數(shù)據(jù)的每個(gè)二進(jìn)制位取反,即把1變?yōu)?,把0變?yōu)? 。~x 類似于 -x-1 | (~a ) 輸出結(jié)果 -61 ,二進(jìn)制解釋: 1100 0011,在一個(gè)有符號(hào)二進(jìn)制數(shù)的補(bǔ)碼形式。 |
<< | 左移動(dòng)運(yùn)算符:運(yùn)算數(shù)的各二進(jìn)位全部左移若干位,由 << 右邊的數(shù)字指定了移動(dòng)的位數(shù),高位丟棄,低位補(bǔ)0。 | a << 2 輸出結(jié)果 240 ,二進(jìn)制解釋: 1111 0000 |
>> | 右移動(dòng)運(yùn)算符:把">>"左邊的運(yùn)算數(shù)的各二進(jìn)位全部右移若干位,>> 右邊的數(shù)字指定了移動(dòng)的位數(shù) | a >> 2 輸出結(jié)果 15 ,二進(jìn)制解釋: 0000 1111 |
運(yùn)算優(yōu)先級(jí)
從高到底以此為:
- 小括號(hào)內(nèi)優(yōu)先級(jí)最高
- ** 指數(shù) (最高優(yōu)先級(jí))
- ~ + - 按位翻轉(zhuǎn), 一元加號(hào)和減號(hào) (最后兩個(gè)的方法名為 +@ 和 -@)
- * / % // 乘,除,取模和取整除
- + - 加法減法
- >> << 右移,左移運(yùn)算符
- & 位 'AND'
- ^ | 位運(yùn)算符
- <= < > >= 比較運(yùn)算符
- <> == != 等于運(yùn)算符
- = %= /= //= -= += *= **= 賦值運(yùn)算符
- is is not 身份運(yùn)算符
- in not in 成員運(yùn)算符
- not and or 邏輯運(yùn)算符