如何學習Python
- 一定要動手編寫和調試書上的代碼,踏踏實實把基礎掌握好再有針對性地學習自己需要的擴展庫溅蛉,切忌只看不練。
- 多看他宛,多想船侧,多交流。
- 理解的越多厅各,需要記憶的就越少镜撩。
- 切不可把全部精力放在 Python 語言本身的學習上,而是要把主要精力放到自己的專業(yè)和知識學習上队塘,最終再用 Python 把自己的思想或算法準確地表達出來袁梗。
Python 基礎
Python 是一種什么樣的語言
- 當較新的 Python 版本推出之后,不要急于趕時髦憔古,看到別人用高版本的 Python 也不用自卑遮怜,而是應該在確定自己必須使用的擴展庫也推出了與之匹配的新版本之后再一起進行更新。
Python 開發(fā)環(huán)境
- 一般來說鸿市,建議在運算符兩側和逗號后面加一個空格锯梁,在不同功能的代碼塊之間增加一個空行即碗。
- 交互模式一般用來實現(xiàn)一些簡單的業(yè)務邏輯,或者驗證某些功能陌凳。
- Python 文件擴展名為
.py
剥懒,GUI 程序可以保存為.pyw
- 為提高代碼運行速度,同時也對 Python 源代碼進行保密合敦,可以在命令提示符環(huán)境中使用
python -OO -m py_compile file.py
將 Python 程序file.py
偽編譯成為.pyc
文件初橘。 - 命令提示符
cls
清屏燎窘。
變量宋彼、運算符與表達式
標準庫是 Python 默認安裝的,但需要導入后才能使用其中的對象阳懂。擴展庫則需要手動安裝裸准,然后導入之后才能使用其中的對象展东。
不需要事先聲明變量名及其類型,并且變量的類型是可以隨時發(fā)生改變的炒俱。
Python 字符串對象提供了一個方法
isidentifier()
可以用來判斷指定字符串是否可以作為變量名盐肃、函數(shù)名、類名等標識符权悟。-
Python 內置對象
- 數(shù)字
- 字符串
- 列表
- 字典
- 元組
- 文件
f = open(file.txt)
- 集合
set('abc')砸王,{'a', 'b', 'c'}
- 布爾型
True,F(xiàn)alse
- 空
None
- 編程單元
函數(shù)(def)峦阁,類(class)
可以通過內置函數(shù)
help()
查看某個函數(shù)的使用幫助谦铃。可以導入 sys 模塊后使用
print(sys.builtin_moudle_names)
查看 Python 所有內置模塊名稱。可以使用
help('moudles')
查看本機所有可用模塊的名稱榔昔。-
Python 常用內置函數(shù)
-
進制轉換
-
bin()
二進制 -
oct()
八進制 -
int()
十進制 -
hex()
十六進制
-
-
Unicode
-
ord()
字符串轉為 Unicode -
chr()
Unicode 轉為字符串
-
-
變量類型轉換
bool()
float()
int()
str()
-
計算
-
abs()
返回絕對值或復數(shù)的模 max()
min()
sum()
-
-
其他
help()
查看指定方法的使用幫助dir()
-
查看對象的所有成員
- `dir(math)` 查看模塊中可用對象
- `dir('')` 查看字符串類型成員
- `dir(3+4j)` 查看復數(shù)類型成員
- `type(3)` 查看類型
- `isinstance(3, init)` 判斷類型
- `import this` Python 之禪
-
Python 運算符
-
+
加法驹闰,列表、元組撒会、字符串合并 -
-
減法嘹朗,集合差集 -
*
乘法,序列重復 -
/
真除法 -
//
整商 -
-
相反數(shù) -
%
余數(shù)诵肛,字符串格式化 -
**
冪 -
<
<=
>
>=
大小比較屹培,集合的包含關系比較 -
==
!=
相等、不等比較 -
or
and
not
或怔檩,與褪秀,非 -
in
not in
成員測試 -
&
|
^
集合的交集、并集薛训、對稱差集 -
@
矩陣相乘
-
-
print(value, ..., sep='', end='\n', file=sys.stout, flush=False)
-
sep
指定數(shù)據(jù)之間的分隔符溜歪,默認為空格。 -
file
參數(shù)用于指定輸出位置许蓖,默認為標準控制臺蝴猪,也可以重定向輸出到文件调衰。
-
模塊的安裝和使用
- 常用 pip 命令
-
pip install Package
安裝模塊 -
pip list
列出已安裝的所有模塊 -
pip install -upgrade Package
升級模塊 -
pip uninstall Package
卸載模塊
-
- pip 可執(zhí)行程序在 Python 安裝目錄的 Scripts 文件夾下。
Python 序列
列表與列表推導式
-
可以用
list()
函數(shù)將元組自阱、range 對象嚎莉、字符串、字典沛豌、集合或其他類型的可迭代對象類型的數(shù)據(jù)轉換為列表趋箩。需要注意的是,把字典轉換為列表時默認是將字典的“鍵”轉換為列表加派,如果想把字典的元素轉換為列表叫确,需要使用字典對象的items()
方法明確說明。>>> list({'a':3, 'b':9, 'c':78}) ['a', 'b', 'c'] >>> list({'a':3, 'b':9, 'c':78}.items()) [('a', 3), ('b', 9), ('c', 78)]
工廠函數(shù):
list()
芍锦,tuple()
竹勉,set()
,dict()
娄琉。-
可以使用
del
將對象刪除次乓,適用于所有的 Python 對象。也可以用del
命令刪除可變序列中的部分元素孽水。>>> a = [1, 2, 3] >>> del a[0] >>> a [2, 3]
-
常用的列表對象方法
list.list.append(x)
將元素 x 添加至列表 list 尾部list.extend(L)
將列表 L 中的所有元素添加至列表 list 尾部list.insert()
在列表指定位置插入元素list.remove()
刪除在列表中首次出現(xiàn)的元素list.pop(x)
刪除并返回下標為 x 的元素票腰,x 默認為-1list.clear()
刪除列表中的所有元素list.index(x)
返回列表中第一個值為 x 的元素的下標list.count()
返回指定元素在列表中出現(xiàn)的次數(shù)list.reverse()
倒序list.sort(key=None, reverse=False)
排序
- `sort()`和`reverse()`是對列表進行原地排序。如果不想丟掉原來的順序可以用內置函數(shù)`sorted()`和 `reversed()`女气。
list.copy()
淺復制成員測試運算符
in
也可以測試列表中是否存在某個元素杏慰。-
zip()
函數(shù)用于將多個列表中元素重新組合為元組并返回包含這些元組的 zip 對象。>>> x = list(range(5)) >>> x [0, 1, 2, 3, 4] >>> list(zip(x, [0]*5)) [(0, 0), (1, 0), (2, 0), (3, 0), (4, 0)]
-
enumerate()
函數(shù)返回包含若干下標和值的迭代對象炼鞠。>>> list(enumerate(x)) [(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)]
-
map()
可以將一個函數(shù)依次作用到一個序列上缘滥,并返回一個 map 對象作為結果。>>> def add5(v): ... return v+5 ... >>> add5(1) 6 >>> list(map(add5, range(5))) [5, 6, 7, 8, 9] >>>
filter()
將一個單參數(shù)函數(shù)作用到一個序列上簇搅,返回該序列中使得該函數(shù)返回值為 True 的那些元素組成的 filter 對象完域,如果指定函數(shù)為 None软吐,則返回序列中等價于 True 的元素瘩将。-
[表達式 for 變量 in 序列或迭代對象]
列表推導式在邏輯上相當于一個循環(huán),只是形式更加簡潔凹耙。>>> [x*x for x in range(10)] [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
切片返回的是列表元素的淺復制姿现,與列表對象的直接輔助并不一樣。
元組與生成器推導式
元組是不可變序列肖抱。
-
生成器推導式的結果是一個生成器對象备典,不是列表,也不是元組意述√嵊叮可以根據(jù)需要將其轉化為元組或列表吮蛹,也可以使用生成器對象的
__next__()
方法或者內置函數(shù)
next()
進行遍歷,或者直接將其作為迭代器對象來使用拌屏。當所有元素訪問結束以后潮针,如果需要訪重新問其中的元素,必須重新創(chuàng)建該生成器對象倚喂。
>>> g = (i*i for i in range(10)) # 返回的是生成器對象 >>> g <generator object <genexpr> at 0x00000158DCB9A620> # 轉為元組 >>> tuple(g) (0, 1, 4, 9, 16, 25, 36, 49, 64, 81) # 生成器對象已遍歷結束每篷,沒有元素了 >>> list(g) [] # 重新生成 >>> g = (i*i for i in range(10)) >>> g.__next__() 0 >>> next(g) 1
字典
字典中的鍵不允許重復,值可以重復端圈。
-
dict()
可以通過已有數(shù)據(jù)創(chuàng)建字典焦读。>>> keys = ['a', 'b', 'c'] >>> values = [1, 2, 3] >>> dictionary = dict(zip(keys, values)) >>> dictionary {'a': 1, 'b': 2, 'c': 3}
-
dict()
可以根據(jù)給定的“鍵:值”來創(chuàng)建字典。>>> dict(name='Cat', age=5) {'name': 'Cat', 'age': 5}
-
dict()
可以給定鍵舱权,創(chuàng)建值為空的字典矗晃。>>> dict.fromkeys(['name', 'age']) {'name': None, 'age': None}
dict.update()
將 B 字典的鍵值對都添加到 A 字典,如果有鍵重復會用 B 字典的值覆蓋刑巧。dict.get()
返回字典里指定鍵的值喧兄,如果鍵不存在返回指定值。dict.setdefault()
返回指定鍵對應的值啊楚,不過不存在就添加一個鍵并設置對應值吠冤。內置函數(shù)
globals()
和locals()
分別返回包含當前作用域內所有全局變量和局部變量的名稱及值的字典。其他對象方法參考 list恭理。
集合
- 同一個集合內每一個元素都是唯一的拯辙,不允許重復。
-
set()
將可迭代對象轉為集合颜价,如果有重復值則只保留一個涯保。 - 集合只能包含數(shù)字、字符串周伦、元組等不可變類型(或者說可哈希)的數(shù)據(jù)夕春。
-
set.add()
添加新元素,如果已存在則忽略专挪。 -
set.update()
合并集合及志。 -
set.pop()
隨機刪除并返回一個元素。 -
set.remove()
刪除指定元素寨腔,如果不存在則報錯速侈。 -
set.discard()
刪除指定元素,如果不存在則忽略迫卢。 - 其他對象方法參考 list倚搬。
序列解包
-
可以使用序列解包功能對多個變量同時賦值。
x, y, z = 1, 2, 3
-
很方便地同時遍歷多個序列
keys = ['a', 'b', 'c'] values = [1, 2, 3] for k, v in zip(keys, values): print(k, v)
-
其他
>>> print(* [1, 2, 3], 4, * (5, 6)) 1 2 3 4 5 6