python基礎知識需注意的知識點
函數
- round()函數是圓整到最接近的整數,當兩個整數一樣接近時候圓整到偶數。
>>> round(1.5)
2
>>> round(2.5)
2
>>> round(1.3)
1
>>> round(-1.3)
-1
>>> round(-1.3)
-1
模塊
1.cmath和複數
如果要進行復數計算,需要引用cmath庫
>>> import cmath
>>> cmath.sqrt(-1)
1j
>>> import math
>>> math.sqrt(-1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: math domain error
需要注意的是:math庫中和cmath庫中都有sqrt的同名函數,所以在進行庫的引用的時候,儘量使用 import module 的形式,避免使用from module import function
2.str和repr的區別
函數str( )將其轉化成爲適於人閱讀的前端樣式文本,而repr(object)就是原本未處理的用於編譯器閱讀的後臺底層代碼
>>> a
'hello, world!\n' #輸出的a本來的模樣
>>> print(a) #對a經過編譯後的樣式文本輸出,將轉義字符進行轉義
hello,world!
>>> print(str(a)) #可以看到對str返回的值進行print處理,這將與直接print(a)得到相同的結果
hello,world!
>>> repr(a) #獲得的是a原始輸入的存在於存儲器中用於機器底層編譯的代碼
"'hello, world!\n'"
>>> print(repr(a)) #對於repr返回的值進行print處理,可以看到這與直接在終端輸入a,得到的是相同的結果 'hello,world!\n'
'hello, world!\n'
3.長字符串和原始字符串
- 長字符串
表示和長的字符串可以用三個單引號或三個雙引號
>>> print("""What's your name?
He said "My name is cheng."
haha,hello,cheng.""")
What's your name?
He said "My name is cheng."
haha,hello,cheng.
使用長字符串的好處,可以跨多行,可以隨便使用單引號和雙引號,無須使用反斜槓進行轉義。
- 語句過長需要換行的可以在末尾加上\
>>> print('hello,\
world')
hello,world
>>> 1 + 3 + 5 + 6 + 7\
+8
30
- 原始字符串(不以特殊方式處理反斜槓\)
在字符串前面加上r,該字符串中反斜槓不表示轉義
但字符串結尾不能以\進行結尾,否則會報錯
>>> print('c:\name')
c:
ame
>>> print(r'c:\name')
c:\name
>>> print(r"c:\name")
c:\name
>>> print(r'c:\name\')
SyntaxError: EOL while scanning string literal
遇到字符串結尾以\進行結尾的可以這麼處理
>>> print(r'c:\name''\\')
c:\name\
>>> print(r'c:\name'+'\\')
c:\name\
3.編碼和解碼
- 使用encode 和decode
python中默認編碼格式是UTF-8
>>> text = '武漢加油!'
>>> text.encode()
b'\xe6\xad\xa6\xe6\xb1\x89\xe5\x8a\xa0\xe6\xb2\xb9\xef\xbc\x81'
>>> b_text = text.encode()
>>> b_text.decode()
'武漢加油!'
也可以使用UTF-32進行編碼
>>> b_text = text.encode('UTF-32')
>>> b_text.decode('UTF-32')
'武漢加油!'
- 直接創建bytes和str對象(這種方法更通用一些)
>>> text = '武漢加油!'
>>> b_text = bytes(text, encoding='UTF-8')
>>> b_text
b'\xe6\xad\xa6\xe6\xb1\x89\xe5\x8a\xa0\xe6\xb2\xb9\xef\xbc\x81'
>>> str(b_text, encoding='UTF-8')
'武漢加油!'
- bytearray(bytes的可變版本)
可以替換數據流中的字符,要插入字符必須使用ord獲取其序數值
>>> str(b_text, encoding='UTF-8')
'武漢加油!'
>>> x = bytearray(b_text)
>>> x
bytearray(b'\xe6\xad\xa6\xe6\xb1\x89\xe5\x8a\xa0\xe6\xb2\xb9\xef\xbc\x81')
>>> x[0] = ord(b'c')
>>> x
bytearray(b'c\xad\xa6\xe6\xb1\x89\xe5\x8a\xa0\xe6\xb2\xb9\xef\xbc\x81') # 將第一個編碼變爲了c
列表
1.給切片賦值
在不替換原有元素的情況下插入新元素
>>> ls = [1, 2, 3, 4, 5, 6]
>>>> ls[1:1] = 'c'
>>> ls
[1, 'c', 2, 3, 4, 5, 6]
使用切片賦值刪除切片
>>> numbers = [1, 2, 3, 4, 5]
>>> numbers[1:4] = []
>>> numbers
[1, 5]
2.列表方法
- append
將一個對象附加到列表末尾,直接修改舊列表
>>> lst = [1, 2, 3]
>>> lst.append(4)
>>> lst
[1, 2, 3, 4]
>>> lst = [1, 2, 3]
>>> lst.append([1, 2])
>>> lst
[1, 2, 3, [1, 2]]```
- clear
**就地**清空列表的內容
```python
>>> lst
[1, 2, 3, 4]
>>> lst.clear()
>>> lst
[]
- copy
複製列表,建立副本
普通複製只是將另外一個名稱關聯到表
>>> lst = [1, 2]
>>> ls = lst
>>> ls[1] = 3
>>> lst
[1, 3]
>>> lst = [1, 2]
>>> ls = lst.copy()
>>> ls[1] = 3
>>> lst
[1, 2]
- count
計算指定的元素在列表中出現了多少次
>>> ls = [1, 2, 3, 5, [1, 2, 3]]
>>> ls.count(1)
1
>>> ls.count([1, 2, 3])
1
>>>
- extend
同時將多個值附加到列表末尾
注意append和extend的區別
>>> lst = [1, 2, 3]
>>> lst.append([1, 2])
>>> lst
[1, 2, 3, [1, 2]]
>>> lst = [1, 2, 3]
>>> lst.extend([1, 2])
>>> lst
[1, 2, 3, 1, 2]
- index
在列表中查找指定值第一次出現的索引
搜索不到會出現異常
>>> a
['h', 'e', 'l', 'l', 'o']
>>> a.index('l')
2
>>> a.index(1)
Traceback (most recent call last):
File "<pyshell#48>", line 1, in <module>
a.index(1)
ValueError: 1 is not in list
>>>
- insert
將一個對象插入列表
>>> a
['h', 'e', 'l', 'l', 'o']
>>> a.insert(2, 'a')
>>> a
['h', 'e', 'a', 'l', 'l', 'o']
>>> a.insert(2, [1, 2])
>>> a
['h', 'e', [1, 2], 'a', 'l', 'l', 'o']
- pop 從列表中刪除一個元素,並返回這個元素
默認刪除最後一個元素
pop可以實現一種常見的數據結構–棧
>>> a
['h', 'e', [1, 2], 'a', 'l', 'l', 'o']
>>> a.pop()
'o'
>>> a
['h', 'e', [1, 2], 'a', 'l', 'l']
>>> a.pop(2)
[1, 2]
>>> a
['h', 'e', 'a', 'l', 'l']
- remove刪除第一個爲指定值的元素
找不到要刪除的值會報錯
>>> a
['h', 'e', 'a', 'l', 'l']
>>> a.remove('a')
>>> a
['h', 'e', 'l', 'l']
>>> a.remove('b')
Traceback (most recent call last):
File "<pyshell#59>", line 1, in <module>
a.remove('b')
ValueError: list.remove(x): x not in list
- reverse按相反順序排列的列表元素
修改列表但不返回任何值
reversed函數返回一個迭代器
>>> a
['h', 'e', 'l', 'l']
>>> a.reverse()
>>> a
['l', 'l', 'e', 'h']
- sort對列表就地排序
sort排序會對原列表進行修改
>>> a
['l', 'l', 'e', 'h']
>>> a.sort()
>>> a
['e', 'h', 'l', 'l']
不改變原來的序列排序
>>> b = [5, 1, 4, 3, 2]
>>> c = b.copy()
>>> c.sort()
>>> c
[1, 2, 3, 4, 5]
>>> b
[5, 1, 4, 3, 2]
獲取排序後的列表副本,使用sorted()函數
>>> b
[5, 1, 4, 3, 2]
>>> d = sorted(b)
>>> d
[1, 2, 3, 4, 5]
- sort高級排序
sort方法有兩個參數(key,reverse)
reverse=True是倒序
>>> ls
['p', 'y', 't', 'h', 'o', 'n']
>>> ls.sort(reverse=True)
>>> ls
['y', 't', 'p', 'o', 'n', 'h']
key=len表示用長度排序
>>> text = ['abcd', 'aa', 'abc']
>>> text.sort(key=len)
>>> text
['aa', 'abc', 'abcd']
3.元組:不可修改的序列
元組的創建:值用逗號分隔
>>> 3 * (4 + 3)
21
>>> 3 * (4 + 3),
(21,)
>>> 3 * (4 + 3,)
(7, 7, 7)
>>> 1,
(1,)
>>> 1, 2, 3
(1, 2, 3)