盤點:python中容易犯的若干錯誤
1. 切片與索引
>>> s = '012345678'
>>> s[-1]
'8'
>>> s[0:-1]
'01234567'
可見,當索引時,-1指的是最後一個元素,而在切片時,不包括-1這個元素
2. 多行語句
Python 通常是一行寫完一條語句,但如果語句很長,我們可以使用反斜槓(‘\’)來實現多行語句。
在 [], {}, 或 () 中的多行語句,不需要使用反斜槓(‘\’)
此外‘\n’表示換行,‘\t’表示製表符(水平)‘\v’表示指標法(垂直)
3. 浮點數的相加
浮點數在超過15位數字計算中產生的誤差與計算機內部採用二進制運算有關,使用浮點數無法進行極高精度的數學運算。
由於Python語言能夠支持無限制且準確的整數計算,因此,如果希望獲得精度更高的計算結果,往往採用整數而不直接採用浮點數。
>>> print(0.1+0.2==0.3)
False
>>> 0.1+0.2
0.30000000000000004
如果想得到高精度的計算,可以有兩種方法,一是使用decimal庫或者是使用math庫,這樣就可以得到高精度的浮點數運算。
>>> import decimal
>>> a = decimal.Decimal('0.1')
>>> b = decimal.Decimal('0.2')
>>> a+b
Decimal('0.3')
另外decimal庫可以通過getcontext().prec=n(n爲精度)定義小數點後面的位數,主要用於兩個浮點數相乘的時候。
>>> import math
>>> math.fsum([0.1,0.2,0.3])
0.6
math庫在使用fsum函數時,0.1+0.2的結果依舊是0.30000000000000004。
原因如下:
輸入math.fsum是包含值的列表0.1000000000000000055511151231257827021181583404541015625
,並0.200000000000000011102230246251565404236316680908203125
。這兩個值的精確和爲0.3000000000000000166533453693773481063544750213623046875
,而與該精確和最接近的可表示的IEEE 754 binary64浮點數爲0.3000000000000000444089209850062616169452667236328125
,這就是您得到的。
4. 運算符的優先程度
1.指數 (最高優先級)
2.按位翻轉, 一元加號和減號 (最後兩個的方法名爲和)
3.乘,除,求餘數和取整除
4. 加法減法
5.右移,左移運算符
6.位 ‘AND’
7.位運算符
8.比較運算符
9.等於運算符
10.賦值運算符
11.身份運算符
12.成員運算符
13.邏輯運算符
5. 內置字符串的處理方法
方法 | 描述 |
---|---|
str.lower() | 返回字符串str的副本,全部字符小寫 |
str.upper() | 返回字符串str的副本,全部字符大寫 |
str.islower() | 當str所有字符都是小寫時,返回True,否則返回False |
str.isprintable() | 當str所有字符都是可打印的,返回True,否則返回False |
str. isnumeric() | 當str所有字符都是數字時,返回True,否則返回False |
str.isspace() | 當str所有字符都是空格,返回True,否則返回False |
str.split(sep=None, maxsplit=-1) | 返回一個列表,由str根據sep被分隔的部分構成 |
str.count(sub[,start[,end]) | 返回str[start: end]中sub子串出現的次數 |
str.replace(old, new[, count]) | 返回字符串str的副本,所有old子串被替換爲new,如果count給出,則前count次old出現被替換 |
str.strip([chars]) | 返回字符串str 的副本,在其左側和右側去掉chars中列出的字符 |
str.zfill(width) | 返回字符串str的副本,長度爲width,不足部分在左側添0 |
str.center( width[, fillchar]) | 字符串居中函數 |
str. format() | 返回字符串str的一種排版格式 |