python基礎學習筆記
阿新 • • 發佈:2017-05-29
好的 留下 path false 找到 __name__ ems 單詞 ups
1 #!/usr/bin/env python 2 #coding=utf-8 3 4 def login(username): 5 if username==‘bill‘: 6 return 1 7 else: 8 return 0 9 10 def detail(user): 11 print ‘我是%s‘%user 12 13 if __name__==‘__main__‘: 14 user=raw_input(‘請輸入你的名字:‘) 15 if login(user) == 1:16 print ‘登陸成功‘ 17 if raw_input(‘是否顯示詳細y/n‘) == ‘y‘: 18 detail(user) 19 else: 20 print ‘ok‘ 21 else: 22 print ‘登陸失敗‘
函數的默認參數,如果默認沒有賦值,則會只是默認值,如果給具體的某個鍵,就要加上具體的鍵
1 def foo(name,action=‘砍柴‘,where=‘上海‘): 2 print name,‘去‘,action,where3 4 if __name__==‘__main__‘: 5 foo(‘zhangsan‘) 6 foo(‘lili‘,‘chipi‘) 7 foo(‘adf‘,where=‘北京‘)
以鍵值形式存儲
1 def foo(**item): 2 for i in item.items(): 3 print i 4 5 6 foo(name=‘a‘,age=‘b‘)
如果此時是字典要存入,則需要使用一下模式
1 def foo(**item): 2 for i in item.items():3 print i 4 5 a={‘name‘:‘weiwei‘,‘age‘:‘18‘} 6 7 foo(**a)
以列表形式存儲
1 def foo(*item): 2 for i in item: 3 print i 4 5 6 foo(‘a‘,‘b‘,‘23‘)
xrange與range readlines()與xreadlines()區別就是沒有x的是一次性向內存開辟空間,而有x的則是使用一個開辟一個空間
1 yield的返回值是一個生成器,只有遍歷的時候才會返回值 2 def foo(): 3 yield 1 4 5 a=foo() 6 for i in a: 7 print i 8 叠代器和生成器的區別,叠代器會有一個next()方法,一直向下執行,生成器會將數據記錄為一個快照,暫時不開辟內存空間,等到有for循環打印出來的時候就需要開辟內存空間了
1 文件的自動關閉 2 with open(‘D:/tmp.txt‘,‘r‘) 3 print ‘xxx‘ 4 執行結束之後自動關閉文件
1 三元運算式 2 result=‘ge‘ if 1<3 else ‘it‘ 3 print result 4 結果ge 5 6 num=lambda x,y:x+y#lambda關鍵字 7 8 print num(4,10) 9 結果14,三個參數也可以,參數由自己設定
1 內置函數: 2 print bool(1)#布爾值 3 print abs(-9) 4 print divmod(1,9)#求模 5 6 print max(11,22) 7 print min(11,22) 8 print sum([11,22]) 9 print pow(2,10) 10 11 a=[1] 12 print len(a) 13 #如果a是文字,則此時就是字節的長度,不是字符的長度 14 15 print all([1,2,3,4,1]) 16 print any([2,3,4,1,23]) 17 any(iterable)說明:參數iterable:可叠代對象; 18 如果當iterable所有的值都是0、‘‘或False時,那麽結果為False,如果所有元素中有一個值非0、‘‘或False,那麽結果就為True 19 如果iterable的所有元素不為0、‘‘、False或者iterable為空,all(iterable)返回True,否則返回False; 20 21 print chr(66)#ASCII對應的數據 22 print ord(‘a‘)#打印對應的95 23 24 print hex(2)#轉換成16進制 25 print bin(2)#轉換成2進制 26 print oct(2)#轉換成8進制 27 28 li=[‘手表‘,‘起床‘,‘房‘]#enumerate會將數組或列表組成一個索引序列,2是起始的序號,可隨意修改 29 for item in enumerate(li,2): 30 print item[0],item[1] 31 0 one 32 1 two 33 2 three 34 35 s=‘i am {0} {1}‘ 36 print s.format(‘bill‘,‘jj‘)
對序列裏面的每個元素操作
li=[11,22,33] print map(lambda arg:arg+100,li) [111, 122, 133]
對序列過濾,返回結果為true的留下,false的顧慮掉,接收值是bool
1 li=[11,22,33] 2 3 4 def foo(arg): 5 if arg<22: 6 return True 7 else: 8 return False 9 10 tmp=filter(foo,li) 11 print tmp
累加
1 li=[11,22,33] 2 3 print reduce(lambda x,y:x+y,li) 4 5 6 li=[11,22,33] 7 y=[1,2,3] 8 print zip(li,y) 9 [(11, 1), (22, 2), (33, 3)]
強制類型轉換,我給的是字符串,但是需要計算8*8的值
1 a=‘8*8‘ 2 b=a.split(‘*‘) 3 4 for i in b: 5 c=int(i) 6 print c,type(c)
1 a=‘8*8‘ 2 print eval(a)#簡單版
導入模塊的另一種方法,反射,通過字符串的形式導入模塊,並以字符串的模式執行函數
1 temp=‘sys‘ 2 3 mode=__import__(temp) 4 5 print mode.path 6 ------------------------------------------//使用以下方法時需要在同一個目錄下,貌似不可以跨越文件夾 7 temp = ‘12‘#模塊的名字 8 fuc=‘foo‘#函數的名字 9 model=__import__(temp) 10 11 a=getattr(model,fuc)#查找該模塊中是否有這個函數,函數部分不可以直接寫foo 12 print a()#獲取的是函數,所以需要使用對象
1 import random 2 #print random.random()#生成0-1之間的隨機數 3 #print random.randint(1,5)#生成1-5之間的隨機數 4 print random.randrange(1,3)#1<=x<3 5 6 print chr(random.randint(65,90))#獲取隨機字母 7 8 9 生成一個隨機的驗證碼 10 import random 11 array=[] 12 for i in range(6): 13 if i==random.randint(1,5): 14 array.append(str(i)) 15 else: 16 array.append(chr(random.randint(65,90))) 17 18 print ‘‘.join(array)#Python的格式化操作,拼接字符串,並且用這種方法效率高拼接字符串,並且用這種方法效率高
1 MD5加密 2 import hashlib 3 hash=hashlib.md5() 4 hash.update(‘admin‘) 5 print hash.hexdigest()
序列化與反序列化,pick可以常規類型也可以序列化類,序列化後不可讀
1 #為什麽要序列化?兩個python程序內存之間的交互,保存到硬盤上 2 3 import pickle#python與python之間的文件的傳輸,可以共享文件,相互讀 4 li=[‘nima‘,1,2,3,‘2432‘,123,4,‘1‘] 5 dumpsed=pickle.dumps(li)#dumps將所傳入的變量的值序列化為一個bytes,然後,就可以將這個bytes寫入磁盤或者進行傳輸。 6 print dumpsed 7 print type(dumpsed) 8 9 loadsed=pickle.loads(dumpsed)#loads當我們要把對象從磁盤讀到內存時,可以先把內容讀到一個bytes,然後用loads方法反序列化出對象,也可以直接用load方法直接反序列化一個文件。 10 print loadsed 11 print type(loadsed) 12 13 pickle.dump(li,open(‘D:/nima.pk‘,‘w‘))#dump則更加一步到位,在dump中可以傳入兩個參數,一個為需要序列化的變量,另一個為需要寫入的文件。 14 15 result=pickle.load(open(‘D:/nima.pk‘,‘r‘)) 16 print result
#pickle與python的區別,json只能序列化常規的數據類型,字典、列表,集合,序列化之後可讀 如果我們要在不同的編程語言之間傳遞對象,就必須把對象序列化為標準格式, 比如XML,但更好的方法是序列化為JSON,因為JSON表示出來就是一個字符串, 可以被所有語言讀取,也可以方便地存儲到磁盤或者通過網絡傳輸。 JSON不僅是標準格式,並且比XML更快,而且可以直接在Web頁面中讀取,非常方便。
1 正則表達式 2 re模塊用於對python的正則表達式的操作。 3 4 字符: 5 6 . 匹配除換行符以外的任意字符 7 \w 匹配字母或數字或下劃線或漢字 8 \s 匹配任意的空白符 9 \d 匹配數字 10 \b 匹配單詞的開始或結束 11 ^ 匹配字符串的開始 12 $ 匹配字符串的結束 13 14 次數: 15 16 * 重復零次或更多次 17 + 重復一次或更多次 18 ? 重復零次或一次 19 {n} 重復n次 20 {n,} 重復n次或更多次 21 {n,m} 重復n到m次 22 23 import re 24 25 hh1=re.match(‘\d+‘,‘123ajfdiosaj12321j4lklnljj432ojoij‘)#該函數是匹配開頭,如果在開頭的位置找到就返回找到的值,反之就返回None 26 if hh1: 27 print hh1.group() 28 else: 29 print ‘nothing‘ 30 31 32 hh2=re.search(‘\d+‘,‘ajfdiosaj12321j4lklnljj432ojoij‘)#該函數是開頭開始找,但是它是一直向後找,直到找到了,才返回值 33 if hh2: 34 print hh2.group() 35 36 ---------------------------------------------------------------------有多少數字取多少數字 37 38 import re 39 hh3=re.findall(‘\d+‘,‘aodijfjoj1324joijoij12joi‘) 40 print hh3 41 42 [‘1324‘, ‘12‘] 43 ---------------------------------------------------------------------先編譯,再執行 44 import re 45 46 com=re.compile(‘\d+‘) 47 print com.findall(‘adfoiqe213324joijoij234‘)
1 ---------------------------------------------------------------------group與groups 2 import re 3 4 result=re.search(‘(\d+)ojoijlo(\d+)‘,‘oijoij24324ojoijlo643‘) 5 print result.group() 6 print result.groups() 7 8 24324ojoijlo643 9 (‘24324‘, ‘643‘)
1 import time 2 3 #print time.time() 4 #print time.strftime(‘%Y-%m-%d %H:%M:%S‘) 5 #print time.strptime(‘2014-11-11‘, ‘%Y-%m-%d‘) 6 print time.mktime(time.localtime()) 7 print time.localtime()
1 反射器的各種應用 2 #!/usr/bin/env python 3 #coding:utf-8 4 5 data=raw_input(‘Please input your address:‘) 6 array=data.split(‘/‘) 7 8 username=__import__(‘backend.‘+array[0])#可以實現不同頁面之間的跳轉,節約代碼量 9 10 model=getattr(username,array[0])#將其理解成先進入文件夾 11 func=getattr(model,array[1])#然後進入模塊調用相應的方法 12 func()
python基礎學習筆記