今天的主要內容是:html
Python的強大之處在於他有很是豐富和強大的標準庫和第三方庫,幾乎你想實現的任何功能都有相應的Python庫支持,先來介紹2個簡單的。python
sysgit
import sys print(sys.path)#打印環境變量
輸出結果爲:api
os數組
import os os.mkdir("dir_mk")
此代碼段含義爲,在當前目錄下新建一個文件夾,輸出結果爲:服務器
文件夾下出現了新建的dir_mk文件夾:app
import os cmd_res = os.system("dir") #執行命令,但不保存結果
dir:查看當前路徑下的文件,但此時輸出結果有亂碼,能夠換爲:ide
cmd_res = os.popen("dir").read() #read方法把它取出來
print("-->",cmd_res) #把它輸出
這樣輸出結果以下:函數
簡單明瞭測試
就以以前寫的登陸程序爲例,將其複製更名爲login,而後在調用這個模塊
1 _username = 'lym' 2 _password = 'abc123' 3 username = input("username:") 4 #password = getpass.getpass("password:") 5 password = input("password:") 6 if _username == username and _password == password: 7 print("Welcome user {name} login...".format(name=username)) 8 else: 9 print("Invalid username or password!")
而後調用
import login
結果以下
接着手動輸入用戶名密碼
這樣一個簡單的建立模塊就建立好了,固然上面本身寫的login.py模塊只能在當前目錄下導入,若是想在系統的何何一個地方都使用怎麼辦呢? 此時你就要把這個login.py放到python全局環境變量目錄裏啦,基本通常都放在一個叫作 python/lib/site-packages 的文件夾目錄下,這個目錄在不一樣的OS裏放的位置不同,用 print(sys.path) 能夠查看python的環境變量列表
1.數字
int(整型)
在32位機器上,整數的位數爲32位,取值範圍爲-2**31~2**31-1,即-2147483648~2147483647
在64位系統上,整數的位數爲64位,取值範圍爲-2**63~2**63-1,即-9223372036854775808~9223372036854775807
long(長整型)
跟C語言不一樣,Python的長整數沒有指定位寬,即:Python沒有限制長整數數值的大小,但實際上因爲機器內存有限,咱們使用的長整數數值不可能無限大。
注意,自從Python2.2起,若是整數發生溢出,Python會自動將整數數據轉換爲長整數,因此現在在長整數數據後面不加字母L也不會致使嚴重後果了。
float(浮點型)
浮點數用來處理實數,即帶有小數的數字。相似於C語言中的double類型,佔8個字節(64位),其中52位表示底,11位表示指數,剩下的一位表示符號。
complex(複數)
複數由實數部分和虛數部分組成,通常形式爲x+yj,其中的x是複數的實數部分,y是複數的虛數部分,這裏的x和y都是實數。
注:Python中存在小數字池:-5 ~ 257
2.布爾值
真或假
0或1
3.字符串
"hello world"
1 name = "lym" 2 print "i am %s " % name 3 #輸出: i am lym
PS: 字符串是 %s;整數 %d;浮點數%f
4.列表(開發中最經常使用的其中一種)
1 print("----------------------") 2 names = "LiangFF Guoy LiuZY XinY" 3 names = ["LiangFF","Guoy","LiuZY","XinY"] 4 names.append("GouJ")#添加到最後 5 names.insert(1,"GeD")#插入 6 names[2] = "WuX"#替換 7 8 print(names) 9 print(names[0],names[1]) 10 print(names[1:4])#切片,顧頭不顧尾,因此打印的值爲,第2,3,4個值,第5個值不打印(即names[4]),這就是顧頭不顧尾,用數學符號表示即[ ) 11 print(names[-2:-1])#不能爲[-1:-2],由於順序是從左往右 12 print(names[-2:]) 13 print(names[0:3]) 14 print(names[:3]) 15 print("----------------------") 16 #刪除 17 names.remove("WuX") 18 del names[2]#刪除第三個值 19 names.pop()#刪掉最後一個 20 print(names) 21 print("----------------------") 22 names.reverse()#反轉 23 print(names) 24 print("----------------------") 25 names.sort()#排序 26 print(names) 27 print("----------------------") 28 print(names.index("GeD"))#查詢值所在位置 29 print(names[names.index("GeD")]) 30 print(names.count("GeD"))#查詢有幾個GeD值 31 print("----------------------") 32 names.clear()#清空 33 print(names) 34 print("----------------------") 35 names = ["LiangFF","Guoy","LiuZY","XinY"] 36 names2 = [1,2,3,4] 37 names.extend(names2)#names2合併到names中 38 print(names,names2)
基本操做:
1 import copy 2 3 names = ["LiangFF","Guoy","LiuZY",["jack","mike"],"XinY"] 4 names2 = copy.deepcopy(names) #names2 = copy.copy(names) 此爲淺copy 5 print(names[0:-1:2]) 6 print(names[::2])#0或-1能夠省略 7 # for i in names: 8 # for j in names2: 9 # print(i,j) 10 11 print(names) 12 print(names2) 13 14 names[2] = "劉澤宇" 15 print(names) 16 print(names2) 17 18 names[3][0] = "JACK" 19 print(names) 20 print(names2)
輸出結果爲:
以上結果爲深度Copy的結果,即names2將names的值徹底copy下來,並且徹底不作改動,具體有什麼區別,上面的代碼段中有淺copy的代碼,你們能夠試一試看看有什麼區別,在這裏就不作演示了
但還要補充2個額外的淺copy寫法,代碼以下:
names2 = names[:]
或者是
names2 = list(names)
這兩種寫法,和淺copy names2 = copy.copy(names) 是同樣的做用,你們有興趣能夠嘗試
其中
print(names[0:-1:2])
這段代碼意思是,輸出names中從的第一個值,到最後一個值,並且步數爲2(隔一個輸出一個值),也能夠寫爲
print(names[::2])#0或-1能夠省略
但第二種寫法 print(names[::2]) 較好,由於若是值是五個的話,用第一種寫法 print(names[0:-1:2]) ,第五個是輸出不了的,能夠先看一下輸出的結果
第二種就能夠把第1,3,5的值都輸出,第一種則不行,若是值的個數爲6,即有6個值,那麼這兩種寫法都會輸出1,3,5這三個值,即上下輸出結果是同樣的,本質上這兩種寫法的含義是相同的,可能第二種寫法的排異性會好些,建議寫第二種
補充Copy的用法—建立聯合帳號
1 #淺Copy用處用來建立聯合帳號 2 person = ["name",["saving",100]] 3 4 p1 = person[:] 5 p2 = person[:] 6 7 p1[0] = "lym" 8 p2[0] = "ym" 9 10 p1[1][1]=50 11 12 print(p1) 13 print(p2)
輸出結果爲:
當我修改了P1中第二個數組中的第二個數爲50時,輸出時,P2當中第二個數組的第二個數也變爲了50
1 names = ('lff','ged') 2 names.append('guoy') 3 print(names)
結果是報錯的:
說明上面的代碼只是演示了爲何元組只能查不能添加
它只有2個方法,一個是count,一個是index,完畢。
練習:寫出購物車程序
需求:
1 person = {"name": "mr.wu", 'age': 18} 2 或 3 person = dict({"name": "mr.wu", 'age': 18})
經常使用操做:
比較運算:
賦值運算:
邏輯運算:
成員運算:
身份運算:
位運算:
運算符優先級:
1 a = 10 2 b = 5 3 c = 4 4 d = a if a > b else c 5 print("d =",d)
輸出結果爲:
若是條件爲真:d = a
1 msg = "我愛你" 2 print(msg) 3 print(msg.encode(encoding = "utf-8"))#字符串轉成byte類型 4 print(msg.encode(encoding = "utf-8").decode(encoding="utf-8"))#再轉回來
1 #!/usr/bin/env.python 2 # -*- coding: utf-8 -*- 3 """ 4 ------------------------------------------------- 5 File Name: string 6 Description : 7 Author : lym 8 date: 2018/2/27 9 ------------------------------------------------- 10 Change Activity: 11 2018/2/27: 12 ------------------------------------------------- 13 """ 14 __author__ = 'lym' 15 16 name = "lym is a good boy" 17 print(name.capitalize())#首字母大寫 18 print(name.count("l"))#統計l出現次數 19 print(name.casefold())#大寫所有變小寫 20 print(name.center(50,"-"))#輸出輸出 '---------------------lym----------------------' 21 print(name.encode())#將字符串編碼成bytes格式 22 print(name.endswith("m"))#判斷字符串是否以m結尾 23 print( "lym\tlff".expandtabs(10))#輸出"lym lff", 將\t轉換成多長的空格 24 print(name.find('a'))#查找m,找到返回其索引,找不到返回-1 25 print(name[name.find('a'):])#字符串切片 輸出 a good boy 26 27 name = "my name is {name},and i am {age} years old" 28 print(name.format(name = "lym",age = 22)) #格式化輸出,可參考Day1格式化輸出內容 29 print(name.format_map({'name':'lym','age':22}))#字典 30 print('ab123'.isalnum())#包含全部的英文字符+阿拉伯數字 返回True 31 print('ab123\f'.isalnum())#如有特殊字符則返回False 32 print('abc'.isalpha())#包含全部的英文,包括大寫英文 33 print('1A'.isalpha())#十進制返回True,其餘返回False 34 print('12'.isdigit())#是否是一個整數 35 print('a123'.isidentifier())#判斷是否爲一個合法的標識符,若開頭爲數字,則返回False 36 print('A23'.islower())#判斷首字母是否爲小寫,若爲小寫則返回True 37 print('A23'.isnumeric())#是否只有數字在裏面,如果則返回True 38 print('A23'.isspace())#是不是一個空格 39 print('My Name Is Lym'.istitle())#每一個單詞開頭是否爲大寫,如果則返回True 40 print('My Name Is Lym'.isprintable())#是否是能夠打印的,好比 ttf.file,drive file是不可打印的,用途較少 41 print('My Name Is Lym'.isupper())#是否都爲大寫,如果則返回True 42 print('My Name Is Lym'.join("==")) 43 print('+'.join(['1','2','3','4'])) 44 print(name.ljust(50,'*'))#內容加在‘*‘左邊 45 print(name.rjust(50,'~'))#內容加在‘~’右邊 46 print('Lym'.lower()) 47 print('Lym'.upper()) 48 print('\nLym\n'.lstrip())#去除左邊的空格 49 print('----------') 50 print('\nLym\n'.rstrip())#去除右邊的空格 51 print('----------') 52 print('\nLym\n'.strip())#左右空格都去掉 53 print('----------') 54 print('Lym'.strip()) 55 56 p = str.maketrans("abcdefli",'123$@456') 57 print("yiming liang".translate(p) ) 58 59 print('yiming liang'.replace('l','L',1))#替換 60 print('yiming liang'.rfind('l'))#找從左往右數最右邊的l的索引值 61 print('1+2+3+4'.split('+'))#把字符串按照+號分紅一個列表,+號能夠用其字符串中的任意值代替,就按你代替的值來分 62 print('1+2\n+3+4'.splitlines())#按換行來分 63 print('yiming LIAng'.swapcase())#大小寫反轉 64 print('yiming liang'.title())#每一個單詞開頭字幕大寫 65 print('yiming liang'.zfill(50))#在最前面加50個0 66 67 print( '---')
1 #key-value 鍵—值 2 info = { 3 '204': "ym", 4 '205': "zq", 5 '206': "aq", 6 } 7 print(info) 8 #字典是無序的,字典不須要下標,經過key查找 9 print(info["204"]) 10 11 info["204"]="lp"#若是存在,則將204裏的值ym替換爲lp 12 print(info) 13 info["207"]="zr"#若是字典中不存在207,則添加一個新的 14 print(info) 15 16 #delete 17 del info["207"]#刪除207 18 print(info) 19 20 info.pop("205")#刪除205 21 print(info) 22 info.popitem()#隨便刪一個 23 print(info) 24 #--------------------查----------------------------- 25 info = { 26 '204': "ym", 27 '205': "zq", 28 '206': "aq", 29 } 30 print(info.get("205")) 31 print('204' in info)#info.has_key("205") 這個在py2.x py3裏沒有了 32 #--------------------update------------------------ 33 info = { 34 '204': "ym", 35 '205': "zq", 36 '206': "aq", 37 } 38 b = { 39 '204':'haa', 40 1:3, 41 2:4 42 } 43 info.update(b) 44 print(info) 45 #合併兩個字典,有交叉就覆蓋,無交叉就建立 ;204 ym替換haa;1:3 2:4加入info 46 print(info.items())#字典轉爲列表 47 #--------------------初始化一個新的字典------------------------ 48 c = dict.fromkeys([6,7,8],"asd")#儘可能別用 49 print(c)
字典的特性:
1 #!/usr/bin/env.python 2 # -*- coding: utf-8 -*- 3 """ 4 ------------------------------------------------- 5 File Name: more_dictionary 6 Description : 7 Author : lym 8 date: 2018/3/2 9 ------------------------------------------------- 10 Change Activity: 11 2018/3/2: 12 ------------------------------------------------- 13 """ 14 __author__ = 'lym' 15 16 #目錄 17 av_catalog = { 18 "歐美":{ 19 "www.youporn.com": ["不少免費的,世界最大的","質量通常"], 20 "www.pornhub.com": ["不少免費的,也很大","質量比yourporn高點"], 21 "letmedothistoyou.com": ["可能是自拍,高質量圖片不少","資源很少,更新慢"], 22 "x-art.com":["質量很高,真的很高","所有收費,屌比請繞過"] 23 }, 24 "日韓":{ 25 "tokyo-hot":["質量怎樣不清楚,我的已經不喜歡日韓範了","據說是收費的"] 26 }, 27 "大陸":{ 28 "1024":["所有免費,真好,好人一輩子平安","服務器在國外,慢"] 29 } 30 } 31 av_catalog["大陸"]["1024"][1] = "啊哈哈哈哈哈" 32 33 av_catalog.setdefault("臺灣",{"1025":["臺灣小姐姐美","美若天仙的臺灣小姐姐"]})#若是沒有臺灣,則添加臺灣,若是字典中有臺灣,則不變 34 35 for k in av_catalog: 36 print(k,av_catalog[k])#打印 key ,value 37 print("--------------打印values的值-------------") 38 print(av_catalog.values()) 39 print("--------------打印key的值-------------") 40 print(av_catalog.keys())
循環格式:
1 for k in av_catalog: 2 print(k,av_catalog[k])#打印 key ,value
另一種循環格式,先將字典轉成列表,在循環,不建議用:
b = { '204':'haa', 1:3, 2:4 } for k in b: print(k,b[k])#建議用 for k,v in b.items():#不建議用 print(k,v)
以上內容包含了字典中因此函數方法,包括增刪改查循環還有多級字典等,你們能夠把代碼拷貝到本身的編譯器中運行如下便可明白
集合是一個無序的,不重複的數據組合,它的主要做用以下:
集合常識:
1 #!/usr/bin/env.python 2 # -*- coding: utf-8 -*- 3 """ 4 ------------------------------------------------- 5 File Name: 集合 6 Description : 7 Author : lym 8 date: 2018/3/5 9 ------------------------------------------------- 10 Change Activity: 11 2018/3/5: 12 ------------------------------------------------- 13 """ 14 __author__ = 'lym' 15 #集合也是無序的 16 list_1 = [1,4,6,8,6,9,2,3,4] 17 #變成集合 set 數據類型是集合<class 'set'> 18 list_1 = set(list_1) 19 20 print(list_1,type(list_1)) 21 22 list_2 = set([2,6,88,0,6,7,3]) 23 print(list_1,list_2) 24 25 #list_1.intersection(list_2)--交集 26 print(list_1.intersection(list_2)) 27 28 #list_1.union(list_2)--並集 29 print(list_1.union(list_2)) 30 31 #list_1.difference(list_2)--差集 = 1裏有的2裏沒有的 32 print(list_1.difference(list_2)) 33 #list_2.difference(list_1)--差集 = 2裏有的1裏沒有的 34 print(list_2.difference(list_1)) 35 36 # 37 list_3 = set([2,3,6]) 38 print(list_3.issubset(list_2)) 39 print(list_1.issuperset(list_3)) 40 41 #對稱差集,將兩個集合中互相沒有的取出=把交集去掉 42 print(list_1.symmetric_difference(list_2)) 43 44 print("這是一條分割線".center(50,'-')) 45 46 list_4 = set([1,5,7]) 47 print(list_3.isdisjoint(list_4))#3與4是否有交集,如有爲True,若無爲False
其餘知識:
s = set([3,5,9,10]) #建立一個數值集合 t = set("Hello") #建立一個惟一字符的集合 a = t | s # t 和 s的並集 b = t & s # t 和 s的交集 c = t – s # 求差集(項在t中,但不在s中) d = t ^ s # 對稱差集(項在t或s中,但不會同時出如今兩者中) 基本操做: t.add('x') # 添加一項 s.update([10,37,42]) # 在s中添加多項 使用remove()能夠刪除一項: t.remove('H') len(s) set 的長度 x in s 測試 x 是不是 s 的成員 x not in s 測試 x 是否不是 s 的成員 s.issubset(t) s <= t 測試是否 s 中的每個元素都在 t 中 s.issuperset(t) s >= t 測試是否 t 中的每個元素都在 s 中 s.union(t) s | t 返回一個新的 set 包含 s 和 t 中的每個元素 s.intersection(t) s & t 返回一個新的 set 包含 s 和 t 中的公共元素 s.difference(t) s - t 返回一個新的 set 包含 s 中有可是 t 中沒有的元素 s.symmetric_difference(t) s ^ t 返回一個新的 set 包含 s 和 t 中不重複的元素 s.copy() 返回 set 「s」的一個淺複製
運用上方的知識,利用運算符將集合常識中代碼簡化:
1 #!/usr/bin/env.python 2 # -*- coding: utf-8 -*- 3 """ 4 ------------------------------------------------- 5 File Name: 集合簡化 6 Description : 7 Author : lym 8 date: 2018/3/5 9 ------------------------------------------------- 10 Change Activity: 11 2018/3/5: 12 ------------------------------------------------- 13 """ 14 __author__ = 'lym' 15 16 list_1 = set([1,4,6,8,6,9,2,3,46]) 17 list_2 = set([2,6,88,0,6,7,3]) 18 print(list_1) 19 print(list_2) 20 21 #交集 22 print(list_1 & list_2) 23 #並集 24 print(list_1 | list_2) 25 #差集 26 print(list_1 - list_2)#在1不在2 27 print(list_2 - list_1)#在2不在1 28 #對稱差集 29 print(list_1 ^ list_2) 30 31 print("這是一條分割線".center(50,'-')) 32 33 #添加一項 34 list_1.add(666) 35 print(list_1) 36 #添加多項 37 list_1.update([68,89,99]) 38 print(list_1) 39 #刪除 40 print(list_1.pop()) 41 list_1.remove(46)#刪除一項 42 print(list_1)
以上就是本講的所有內容