Updated March 29, 2018
官網:https://www.python.org/
pypi倉庫: https://pypi.org/
程序語言排行榜:https://www.tiobe.com/tiobe-index/
pep8編碼規(guī)范: https://www.python.org/dev/peps/pep-0008/
pycharm使用教程
官網:http://www.jetbrains.com/pycharm/
快捷鍵設置
[File] [Settings] 搜索keymap 將Default改為Eclipse
ctrl+d 刪除當前行
ctrl+/ 注釋/取消注釋
ctrl+z 取消上一步操作
ctrl+alt+l 自動將代碼格式化
shift+tab 取消縮進
shift+enter 跳到下一行
自定義快捷鍵
[File] [Settings] keymap 搜索點擊increase font size
更換python解釋器
File Settings 搜索interpreter
自定義python模板文件
File Settings Editor File and Code Templates
設置文件編碼
File Settings Editor File Encoding
設置制表符為縮進符
File Default Settings Editor Code Style Python 勾選use tab character
關閉單詞拼寫檢查
File Settings Code Style Inspections Spelling 不勾選Typo
設置最大行寬
File Settings Code Style Hard wrap at 72 columns
python解釋器
CPython寇蚊,官方解釋器队他,用C語言開發(fā)
IPython暴心,基于CPython的交互式解釋器
PyPy珠增,采用JIT技術,對Python代碼進行動態(tài)編譯葬馋,可以顯著提高Python代碼的執(zhí)行速度
JPython卖鲤,運行在java平臺上的Python解釋器
python字節(jié)碼
pyc文件是在程序運行時由python的虛擬機來執(zhí)行的字節(jié)碼指令.
python將源代碼編譯為一組虛擬機指令, python解釋器就是該虛擬機的一個具體體現(xiàn). 這種跑在虛擬機內部的中間格式被稱為字節(jié)碼.
數(shù)據(jù)類型
可變數(shù)據(jù)類型
列表
list1=["this",2,3,4]
list2=["a","b","c","d"]
list1.insert(1,1)
list1.append(5)
快速合并兩個列表
list1.extend(list2)
list3 = [*list1, *list2]
刪除
list1.remove("this")
list2.pop(2)
del list1
list1.index("this")
list1[2]="2"
list1[:]=list2
list1[1:-1:1]=list2
排序
list1.sort() 元素按照大小排序, 等價于sorted(list1)
sorted(list1, key=(lambda x: abs(x))) 元素按照絕對值大小排序
list1.count("this")
列表生成式
[x*x for x in range(100)]
切片
[0:-1:2]
li=[11,22,33,44,55,66]
for i in li:
if i ==33 or i==44:
li.remove(i)
print(li)
集合
set1={1,2,3,4} 去重
set2={3,4,5,6}
set1.add(5)
set1.remove(3)
set3=set1&set2
set3=set1|set2
字典
dict1={'name':'alex','age':12,'sex':'male'}
del dict1['name']
del dict1
dict1.get('name','wrong') 找鍵名對應的值,找不到就返回第二參數(shù)
dict1.setdefault('name','lema') 查找該鍵畴嘶,找不到則插入該鍵值對
快速合并兩個字典
dict1.update(dict2) 將dict2插入dict1中
dict3 = {**dict1, **dict2}
dict1.items() 列表形式返回
dict1.keys()
dict1.values()
不可變數(shù)據(jù)類型
元組
tup1=("this",,2,3,4)
del tup1
a=[1,2,3]
b=[1,2,3]
c=(a,b)
a.append(4)
print(c)
數(shù)字, 字符串
str1='abcdefg'
str2='h|i|j|k|l'
str1.capitalize()
str1.upper()
str1.lower()
str1.find(str2,2,5) # 在str1中從序號2位置開始找str2扫尖,直到序號5位置結束查找
str1.center(20,'*')
str1.startswith('ab')
str1.endswith('ef')
'-'.join(['2018','1','1'])
str2.split("|",3)
str1.replace('a','A',1)
str1.strip()
連接字符串時可用join, 也可以用+, 那這兩種方法在性能上有什么區(qū)別呢?
字符串屬于不可變數(shù)據(jù)類型, 當用操作符+連接字符串時, 每執(zhí)行一次+都會申請一塊新的內存, 然后復制上一個+操作的結果和本次操作到這塊內存空間, 因此用+連接字符串時會涉及多次內存申請與復制.
而join在連接字符串的時候, 會先計算需要多大的內存存放結果, 然后一次性申請所需內存并將字符串復制過去, 所以join性能優(yōu)于+
可迭代對象
可以直接作用于for循環(huán)的對象統(tǒng)稱為可迭代對象(Iterable).
可以被next()函數(shù)調用并不斷返回下一個值的對象稱為迭代器(Iterator).
所有的Iterable均可以通過內置函數(shù)iter()來轉變?yōu)镮terator.
g=(x*x for x in range(1000))
next(g)
for _ in g:
print(_)
通過列表生成式我們可以直接創(chuàng)建一個列表, 但是如果創(chuàng)建一個包含100萬個元素的列表, 會占用很大的存儲空間.
生成器可以按照某種算法把列表元素推算出來, 在循環(huán)過程中不斷推算出后續(xù)的元素, 不必創(chuàng)建完整的列表, 從而節(jié)省大量的空間.
生成器其實是一種特殊的迭代器, 只需要一個yield關鍵字
def func():
print('step 1')
yield 1
print('step 2')
yield 2
print('step 3')
yield(3)
f=func()
next(f)
for _ in f:
print(_)
文件操作
r 只讀模式
w 新建或覆蓋源文件模式
a 追加模式
r+ 讀寫模式
b
with open('test.txt','rb+',encoding='utf-8') as f:
f.write()
f.writelines()
for line in f:
pass
f.read(10) 一次性讀取當前光標后的10個字符
f.tell() 獲取當前光標
f.seek(0) 光標回到最開始的地方
異常處理
python內置多種異常, 同時也可以創(chuàng)建自定義異常
當某種條件滿足時, 我們可以使用raise來拋出異常, 實現(xiàn)自定義異常
a = 10
if a>5:
raise Exception('error')
try塊中的代碼只要遇到異常就會停止,
except塊的代碼如果沒有執(zhí)行, 就會執(zhí)行else塊中的代碼
finally塊中的代碼一定會執(zhí)行
try塊和except塊中執(zhí)行continue, break或return語句之前, finally語句會先執(zhí)行
不推薦在finally塊中使用return語句
try:
pass
except IndexError as e:
pass
except Exception as e:
print("未知錯誤")
else:
try:
pass
except:
pass
finally:
print("不管結果,照常執(zhí)行")
traceback模塊
使用traceback模塊可以直觀地進行調試, 可以看到是哪個函數(shù)哪一行出現(xiàn)錯誤
import traceback
try:
pass
except Exception as e:
traceback.print_exc()
python中下劃線的用法
單下劃線
單下劃線用來表示某個臨時變量
單前綴下劃線
以單個下劃線開頭的變量或方法僅供內部訪問, 而這僅僅只是一個約定
如果使用通配符從模塊中導入所有名稱, 則python不會導入帶有單前導下劃線的名稱
單末尾下劃線
單末尾下劃線用來避免與關鍵字發(fā)生命名沖突, 這也是一個約定
雙前綴下劃線
雙前綴下劃線會導致python解釋器重寫名稱.
解釋器更改變量的名稱, 以便在類被擴展的時候不容易產生命名沖突
雙前綴末尾下劃線
表示特殊函數(shù), 特殊變量
軟件目錄結構規(guī)范
Foo
bin 存放一些項目的可執(zhí)行文件
一鍵啟動.py
core 存放項目的所有源代碼
tests 存放單元測試代碼
__init__.py
test_main.py
__init__.py
main.py
docs 存放一些文檔
conf.py
abc.rst
setup.py 安裝掠廓,部署,打包的腳本
requirements.txt 存放軟件依賴的外部python包列表
README 項目說明文件
1.軟件定位甩恼,軟件的基本功能
2.運行代碼的方法蟀瞧,安裝環(huán)境,啟動命令等
3.簡要的使用說明
4.代碼目錄結構說明
5.常見問題說明
virtualenv
virtualenv用來為每一個應用創(chuàng)建一個隔離的python運行環(huán)境, 解決不同應用間版本沖突的問題
pip install virtualenv
mkdir myblog
cd ./myblog
virtualenv --no-site-packages blogvenv
cd ./blogvenv/Scripts
activate 進入環(huán)境
deactivate 退出環(huán)境