1. copy模塊中的深拷貝:
python中都是引用傳遞,所以會出現以下情況:
l1 = [1, 2]
l2 = l1
l2.append(3)
print l1
print l2
# l1 = [1, 2, 3], l2 = [1, 2, 3]
用[:]切片看似能解決,但是:
l1 = [[1, 2], 3]
l2 = l1[:]
l2.append(4)
# l1 = [[1, 2], 3], l2 = [[1, 2], 3, 4]
l2[0].append(5)
# l1 = [[1, 2, 5], 3], l2 = [[1, 2, 5], 3, 4]
copy模塊中的deepcopy可以完全複製:
import copy
l1 = [[1, 2], 3]
l2 = copy.copy(l1) #相當於切片
l3 = copy.deepcopy(l1) # 完全複製
l2.append(4)
l2[0].append(5)
l3[0].append(6)
# l1 = [[1, 2, 5], 3], l2 = [[1, 2, 5], 3, 4], l3 = [[1, 2, 6], 3]
2. collections模塊中的defaultdict函數:
參數爲list set int 等內建函數,用來決定值得類型。
類型爲list:
import collections
s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
d = collections.defaultdict(list)
for k, v in s:
d[k].append(v)
list(d.items())
類型爲int,用來做個計數:
>>> s = 'mississippi'
>>> d = defaultdict(int)
>>> for k in s:
... d[k] += 1
...
>>> d.items()
[('i', 4), ('p', 2), ('s', 4), ('m', 1)]
3. pydiction
Pydiction 由 3 個主要文件構成:
python_pydiction.vim -- 該文件爲 Vim 的 plugin 文件,實現 Python 文件的 TAB 補全功能。
complete-dict -- 該文件爲 Vim 的 dictionary 文件,其中包含 Python 關鍵字和模塊結構等信息。是 plugin 進行補全時所查找的參考文件。
pydiction.py -- (可選)該文件是 Python script 文件,用於生成 dictionary 文件。可以通過執行該腳本添加更多的可 TAB 補全模塊。
設置可以參考
# unzip pydiction-1.2.zip
# cp python_pydiction.vim /usr/share/vim/vim70/ftplugin
# mkdir /usr/share/vim/vim70/pydiction
# cp complete-dict pydiction.py /usr/share/vim/vim70/pydiction/
# vi ~/.vimrc