盤點: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的一種排版格式
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章