Python 随笔
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
Python的windows包:http://www.lfd.uci.edu/~gohlke/pythonlibs/#mysql-python
?
python3.4安裝mysql依賴:
安裝mysql-connector for python3.4:http://dev.mysql.com/downloads/connector/python/
下載mysqlclient預(yù)編譯文件:http://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient
升級(jí)pip:python -m pip install --upgrade pip
安裝mysqlclient:pip install mysqlclient-1.3.8-cp34-cp34m-win_amd64.whl
?
Linux下安裝Python:
1、下載python源碼包:
①通過wget命令下載
wget?https://www.python.org/ftp/python/2.7.10/Python-2.7.10.tgz(默認(rèn)下載到當(dāng)前目錄)
②Winscp發(fā)送到客戶機(jī)
2、解壓源碼包:
tar -xzf Python-2.7.3.tgz(-z)
3、執(zhí)行configure命令:
。。。。
?
查看Python版本號(hào):
①python -V
②
import platform
print platform.python_version()
③
import sys
print sys.version
print sys.version_info
?
退出python shell:Windows——Ctrl+Z或exit();unix / Linux——Ctrl+D或exit()
?
http://www.lfd.uci.edu/~gohlke/pythonlibs/
?
?
http://woodpecker4org.b0.upaiyun.com/projects/django/django-stepbystep/newtest/doc/tut07.html
http://www.itnose.net/detail/6111283.html
?
for語(yǔ)句可用來(lái)遍歷某一對(duì)象,還具有一個(gè)可選的else塊。
如果for循環(huán)未被break終止,則執(zhí)行else塊中的語(yǔ)句。
?
?
序列
序列基本操作:
len():求序列長(zhǎng)度
+:拼接兩個(gè)序列
*:重復(fù)序列元素
in:判斷元素是否在序列中
max():返回最大值
min():返回最小值
cmp(arg1,?arg2):比較兩個(gè)序列的值是否相同,若arg1>arg2,返回1;若arg1<arg2,返回-1;相等返回0
對(duì)序列進(jìn)行切片,比如
str = "abcde"
str[1:4:2]
第一個(gè)參數(shù)表示開始截取的索引,不寫默認(rèn)是0,負(fù)數(shù)表示倒數(shù)第幾個(gè);
第二個(gè)參數(shù)表示結(jié)束的索引(不包含該元素),不寫默認(rèn)截取到結(jié)尾,負(fù)數(shù)表示倒數(shù)第幾個(gè);
第三個(gè)參數(shù)表示截取的步長(zhǎng),默認(rèn)步長(zhǎng)為1,負(fù)數(shù)表示從右向左取
?
字符串
1)Python中沒有類似C語(yǔ)言中char這種類型的字符串,也就是說即使是單個(gè)字符也是字符串。
2)Python中的字符串一旦聲明,是不能進(jìn)行更改的,即可以獲取某一位置的值,但是不能對(duì)其重新賦值改變內(nèi)容。
3)Python中的字符串有兩種數(shù)據(jù)類型:str類型和unicode類型。str類型采用的ASCII編碼,也就是說它無(wú)法表示中文。
4)Python中使用正則表達(dá)式不用像Java正則表達(dá)式一樣到處轉(zhuǎn)義,因?yàn)镻ython提供了原始字符串,不對(duì)反斜杠及反斜杠后面的字符進(jìn)行轉(zhuǎn)義,聲明原始字符串的方法是在字符串前面加上'r'或者'R'
5)Python中行尾結(jié)束符始終為'\n',不用擔(dān)心因運(yùn)行環(huán)境不同引起的不兼容問題
6)Python中最常用的從鍵盤獲取輸入的函數(shù)是raw_input()和input(),前者以字符串的形式返回用戶輸入的一切內(nèi)容,后者會(huì)自動(dòng)進(jìn)行類型轉(zhuǎn)換(建議一般情況下使用raw_input()獲取輸入,避免程序中一些不必要的麻煩)
7)Python中的格式化輸出和C語(yǔ)言類似,基本格式如下:
print '....%formmat..' %(var...) ? ? ? ??當(dāng)var只有一個(gè)時(shí),括號(hào)可以省略。
8)Python把0、空字符串''和None看成 False,其他數(shù)值和非空字符串都看成 True
列表轉(zhuǎn)字符串的方法:
①不推薦
a = ['a','b','c','d']?
content = ''?
for i in a:?
content = content + i?
②
a = ['a','b','c','d']?
content = ''?
content = ''.join(a)?
③
a = ['a','b','c','d']?
content = ''?
content = '%s%s%s%s' % tuple(a)?
?
正則:
http://www.runoob.com/python/python-reg-expressions.html
http://www.crifan.com/python_re_search_vs_re_findall/
http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html
?
?
?
?
?
列表
獲取列表中某個(gè)元素的索引——列表名稱.index(元素值),如:name_list.index("陳凱")
修改某位置元素的值——列表名稱[索引值] =?元素值
在列表中的某位置插入元素——列表名稱.insert(索引值, 元素值),如name_list.insert(4, "馬云")
查詢列表中某元素的重復(fù)次數(shù)——列表名稱.count(元素值)
刪除列表中的某索引的元素——列表名稱.pop(索引值),如果不寫索引值默認(rèn)是最后一個(gè)
刪除列表中指定值得元素——列表名稱.remove(元素值)
索引迭代
for index, name in enumerate(L):
? ? print index, '-', name
?
元組
和列表最大的區(qū)別是元祖的內(nèi)容一旦生成即不可以修改
創(chuàng)建只有一個(gè)元素的元組,元素后面必須加一個(gè)逗號(hào)
?
字典
score = {"Math": 86, "English": 91, "Chinese": 77}
獲取字典的value——?score["Math"]或?score.get("Math"),前者會(huì)在字典不存在該Key時(shí)報(bào)錯(cuò),后者會(huì)返回None
字典遍歷——
1、迭代字典的key:for k in?score:?print v?或?for k in?score.keys():?print v
2、迭代字典的value:for v in?score.values():print v 或?for v in?score.itervalues():print v
values() 和itervalues() 的區(qū)別:
values()會(huì)把一個(gè) dict 轉(zhuǎn)換成了包含 value 的list,但是 itervalues() 方法不會(huì)轉(zhuǎn)換,它會(huì)在迭代過程中依次從 dict 中取出 value,所以 itervalues() 方法比 values() 方法節(jié)省了生成 list 所需的內(nèi)存
3、迭代字典的每一組鍵值對(duì)(元祖形式):for i in?score.?items():?print i?或?for k,v in?score.?items():?print k,v
items()和 values()類似,也有一個(gè)對(duì)應(yīng)的 iteritems()
判斷一個(gè)字典中是否含有某個(gè)Key——字典名稱.has_key(Key名稱),如score.has_key("English")
?
?
函數(shù):
函數(shù)形參的順序:
1、位置匹配參數(shù) func(args1,args2)
2、關(guān)鍵字匹配參數(shù)?func(args1,args2,key1=value1,key2=value2)
3、收集參數(shù)——
? ? a、元組收集?func(args1,args2,key1=value1,key2=value2,*args3)
? ? b、字典收集?func(args1,args2,key1=value1,key2=value2,*args3,**args4)
?
def myfun1(username, *keys)或def myfun2(username, **keys)等。
解釋:
* 用來(lái)傳遞任意個(gè)無(wú)名字參數(shù),這些參數(shù)會(huì)一個(gè)Tuple的形式訪問。
**用來(lái)處理傳遞任意個(gè)有名字的參數(shù),這些參數(shù)用dict來(lái)訪問。*
?
Python內(nèi)建函數(shù)
sorted():
reversed():
enumerate():
zip(seq1 [, seq2 [...]]):拉鏈方法,返回一個(gè)元祖列表?[(seq1[0], seq2[0] ...), (...)] ,每個(gè)元祖包含每個(gè)序列的第i個(gè)元素。列表的長(zhǎng)度取決于最短的序列。這個(gè)方法可以用于同時(shí)循環(huán)兩個(gè)列表,比如 for x,y in zip(list1, list2): print x,y
map(function, sequence[, sequence, ...]):
Return a list of the results of applying the function to the items of
the argument sequence(s). ?If more than one sequence is given, the
function is called with an argument list consisting of the corresponding
item of each sequence, substituting None for missing values when not all
sequences have the same length. ?If the function is None, return a list of
the items of the sequence (or a list of tuples if more than one sequence).
?
迭代器:
?
?
Pickle模塊
dumps:在內(nèi)存中序列化
dump:序列化到文件
?
Json模塊
?
文件:
?
?
類里面的方法第一個(gè)參數(shù)都是self
在類里以雙下劃線__開頭的成員變量是私有屬性,否則就是公有,但是私有屬性可以通過 instance._類名_屬性名 的方式訪問,不過只用于調(diào)試程序
系統(tǒng)在定義類時(shí)默認(rèn)添加的屬性稱為內(nèi)置屬性,由前后兩個(gè)下劃線構(gòu)成,如__dict__ ? ? __module__
成員函數(shù)如果訪問變量時(shí)不寫self.則默認(rèn)訪問全局變量
動(dòng)態(tài)方法、靜態(tài)方法、裝飾器、內(nèi)部類、魔術(shù)方法(__str__、)
?
?
?
python3 默認(rèn)就是新式類了,python要用新式類就得帶上object這個(gè)參數(shù)。 新式類 在多重繼承的時(shí)候是廣度優(yōu)先遍歷,老式類是深度優(yōu)先
?
https://news.ycombinator.com/item?id=5124804
?
http://blog.csdn.net/wanghai__/article/details/6926428
?
表示apply是一個(gè)關(guān)鍵字
?
Python自定義命令:
https://docs.python.org/2.7/library/optparse.html#optparse-standard-option-actions
?
?
列表推導(dǎo)式:http://www.jb51.net/article/63213.htm
?
enumerrate函數(shù)對(duì)一個(gè)列表或數(shù)組既要遍歷索引又要遍歷元素:http://blog.csdn.net/suofiya2008/article/details/5603861
?
OrderedDict.popitem(last=True) 。last為True是LIFO,即為堆棧,反之是FIFO,即為隊(duì)列
?
裝飾器:
http://blog.csdn.net/dreamcoding/article/details/8611578
@dec2
@dec1
def func(arg1, arg2, ...):
? ??pass
可以還原成
def func(arg1, arg2, ...):
? ??pass
func = dec2(dec1(func))
?
@decomaker(argA, argB, ...)?
def func(arg1, arg2, ...):?
? ??pass
可以還原成
func = decomaker(argA, argB, ...)(func)
?
Python下劃線與命名規(guī)范:http://www.cnblogs.com/yaksea/archive/2011/08/30/2159416.html
?
Python模塊的交叉引用問題(ImportError: cannot import name xxxxxx)
解決辦法就是不要全局導(dǎo)入,可改為局部作用域內(nèi)導(dǎo)入
轉(zhuǎn)載于:https://my.oschina.net/codingDog/blog/900706
總結(jié)
- 上一篇: Android:如何生成自己的keyst
- 下一篇: python学习笔记之常用模块用法分析