python 运维自动化之路 Day2
學習內容:
1、模塊初識
2、Pyc是什么
3、Python數據類型
4、數據運算
5、bytes數據類型
6、列表和元組的使用
7、字符串常用操作
8、字典的使用
1、模塊初識
如果用 python 解釋器來編程,從 Python 解釋器退出再進入,那么你定義的所有的方法和變量就都消失了。
為此 Python 提供了一個辦法,把這些定義存放在文件中,為一些腳本或者交互式的解釋器實例使用,這個文件被稱為模塊。
模塊是一個包含所有你定義的函數和變量的文件,其后綴名是.py。模塊可以被別的程序引入,以使用該模塊中的函數等功能。這也是使用 python 標準庫的方法。
下面是一個使用 python 標準庫中模塊的例子。
?
import sys print(sys.path) print(sys.argv) # print(sys.argv[1]) import os os.system("dir") #調用系統命令dir,不保存結果。 print(os.popen('dir').read()) #打開總讀取當前目錄從內存地址中。 os.mkdir('new_quote3') #創建新目錄 print(os.popen('dir').read())?
執行結果如下:
C:\Users\hca006\AppData\Local\Programs\Python\Python36\python.exe "D:/python app/var/day2/sysmodel.py" ['D:\\python app\\var\\day2', 'D:\\python app\\var', 'C:\\Users\\hca006\\AppData\\Local\\Programs\\Python\\Python36\\python36.zip', 'C:\\Users\\hca006\\AppData\\Local\\Programs\\Python\\Python36\\DLLs', 'C:\\Users\\hca006\\AppData\\Local\\Programs\\Python\\Python36\\lib', 'C:\\Users\\hca006\\AppData\\Local\\Programs\\Python\\Python36', 'C:\\Users\\hca006\\AppData\\Local\\Programs\\Python\\Python36\\lib\\site-packages'] ['D:/python app/var/day2/sysmodel.py']������ D �е?��� ����������к��� 08BD-E367D:\python app\var\day2 ��??2017/04/07 20:38 <DIR> . 2017/04/07 20:38 <DIR> .. 2017/04/07 20:18 2,015 dictionary.py 2017/04/07 18:46 1,048 dictionary22.py 2017/03/28 08:19 1,819 list.py 2017/03/29 16:45 1,657 mycopy.py 2017/03/29 15:21 145 mydeepcopy.py 2017/04/07 20:35 <DIR> new_quote2 2017/03/29 20:14 1,483 shop.py 2017/04/07 20:38 312 sysmodel.py 2017/03/29 19:55 535 tmall.py 2017/04/07 15:27 741 zifucuang.py 2017/03/23 19:20 19 __init__.py 2017/03/29 15:24 <DIR> __pycache__10 ���?� 9,774 �?�4 ��?? 396,468,563,968 �����?�驅動器 D 中的卷是 工作卷的序列號是 08BD-E367D:\python app\var\day2 的目錄2017/04/07 20:38 <DIR> . 2017/04/07 20:38 <DIR> .. 2017/04/07 20:18 2,015 dictionary.py 2017/04/07 18:46 1,048 dictionary22.py 2017/03/28 08:19 1,819 list.py 2017/03/29 16:45 1,657 mycopy.py 2017/03/29 15:21 145 mydeepcopy.py 2017/04/07 20:35 <DIR> new_quote2 2017/03/29 20:14 1,483 shop.py 2017/04/07 20:38 312 sysmodel.py 2017/03/29 19:55 535 tmall.py 2017/04/07 15:27 741 zifucuang.py 2017/03/23 19:20 19 __init__.py 2017/03/29 15:24 <DIR> __pycache__10 個文件 9,774 字節4 個目錄 396,468,563,968 可用字節驅動器 D 中的卷是 工作卷的序列號是 08BD-E367D:\python app\var\day2 的目錄2017/04/07 20:38 <DIR> . 2017/04/07 20:38 <DIR> .. 2017/04/07 20:18 2,015 dictionary.py 2017/04/07 18:46 1,048 dictionary22.py 2017/03/28 08:19 1,819 list.py 2017/03/29 16:45 1,657 mycopy.py 2017/03/29 15:21 145 mydeepcopy.py 2017/04/07 20:35 <DIR> new_quote2 2017/04/07 20:38 <DIR> new_quote3 2017/03/29 20:14 1,483 shop.py 2017/04/07 20:38 312 sysmodel.py 2017/03/29 19:55 535 tmall.py 2017/04/07 15:27 741 zifucuang.py 2017/03/23 19:20 19 __init__.py 2017/03/29 15:24 <DIR> __pycache__10 個文件 9,774 字節5 個目錄 396,468,563,968 可用字節Process finished with exit code 0 View Code當解釋器遇到 import 語句,如果模塊在當前的搜索路徑就會被導入。
搜索路徑是一個解釋器會先進行搜索的所有目錄的列表。如想要導入模塊 ,需要把命令放在腳本的頂端。
2、Pyc是什么
簡述Python的運行過程
在說這個問題之前,我們先來說兩個概念,PyCodeObject和pyc文件。
我們在硬盤上看到的pyc自然不必多說,而其實PyCodeObject則是Python編譯器真正編譯成的結果。我們先簡單知道就可以了,繼續向下看。
當python程序運行時,編譯的結果則是保存在位于內存中的PyCodeObject中,當Python程序運行結束時,Python解釋器則將PyCodeObject寫回到pyc文件中。
當python程序第二次運行時,首先程序會在硬盤中尋找pyc文件,如果找到,則直接載入,否則就重復上面的過程。
所以我們應該這樣來定位PyCodeObject和pyc文件,我們說pyc文件其實是PyCodeObject的一種持久化保存方式。
.Pyc文件是存儲預編譯后的一個字節碼文件。
3、Python數據類型
1.數字
Python 數字數據類型用于存儲數值。
數據類型是不允許改變的,這就意味著如果改變數字數據類型得值,將重新分配內存空間。
Python 支持三種不同的數值類型:
- 整型(Int)?- 通常被稱為是整型或整數,是正或負整數,不帶小數點。Python3 整型是沒有限制大小的,可以當作 Long 類型使用,所以 Python3 沒有 Python2 的 Long 類型。
- 浮點型(float)?- 浮點型由整數部分與小數部分組成,浮點型也可以使用科學計數法表示(2.5e2 = 2.5 x 102?= 250)
- 復數( (complex))?- 復數由實數部分和虛數部分構成,可以用a + bj,或者complex(a,b)表示, 復數的實部a和虛部b都是浮點型。
Python 數字類型轉換
有時候,我們需要對數據內置的類型進行轉換,數據類型的轉換,你只需要將數據類型作為函數名即可。
-
int(x)?將x轉換為一個整數。
-
float(x)?將x轉換到一個浮點數。
-
complex(x)?將x轉換到一個復數,實數部分為 x,虛數部分為 0。
-
complex(x, y)?將 x 和 y 轉換到一個復數,實數部分為 x,虛數部分為 y。x 和 y 是數字表達式。
以下實例將浮點數變量 a 轉換為整數:
>>> a = 1.0 >>> int(a) 1 2.布爾值 真或假 1 或 0 3.字符串 字符串是 Python 中最常用的數據類型。我們可以使用引號('或")來創建字符串。 創建字符串很簡單,只要為變量分配一個值即可。例如: var1 = 'Hello World!' var2 = "dnvwjy"4、數據運算
算數運算:
比較運算:
賦值運算:
邏輯運算:
成員運算:
身份運算:
位運算:
?
運算符優先級:
計算機中能表示的最小單位,是一個二進制位
計算機中能存儲的最小單位,是一個二進制位(bit)
8bit = byte(字節)
1024byte = 1Kbyte
1024Kbyte = 1Mbyte
1024Mb = 1Gb
1024Gb= 1T
5、bytes數據類型
Python 3最重要的新特性大概要算是對文本和二進制數據作了更為清晰的區分。文本總是Unicode,由str類型表示,二進制數據則由bytes類型表示。Python 3不會以任意隱式的方式混用str和bytes,正是這使得兩者的區分特別清晰。你不能拼接字符串和字節包,也無法在字節包里搜索字符串(反之亦然),也不能將字符串傳入參數為字節包的函數(反之亦然)。這是件好事。
不管怎樣,字符串和字節包之間的界線是必然的,下面的圖解非常重要,務請牢記于心:
?
字符串可以編碼成字節包,而字節包可以解碼成字符串。
>>>'€20'.encode('utf-8') b'\xe2\x82\xac20' >>> b'\xe2\x82\xac20'.decode('utf-8') '€20'這個問題要這么來看:字符串是文本的抽象表示。字符串由字符組成,字符則是與任何特定二進制表示無關的抽象實體。在操作字符串時,我們生活在幸福的無知之中。我們可以對字符串進行分割和分片,可以拼接和搜索字符串。我們并不關心它們內部是怎么表示的,字符串里的每個字符要用幾個字節保存。只有在將字符串編碼成字節包(例如,為了在信道上發送它們)或從字節包解碼字符串(反向操作)時,我們才會開始關注這點。
傳入encode和decode的參數是編碼(或codec)。編碼是一種用二進制數據表示抽象字符的方式。目前有很多種編碼。上面給出的UTF-8是其中一種,下面是另一種:
>>'€20'.encode('iso-8859-15') b'\xa420' >>> b'\xa420'.decode('iso-8859-15') '€20'編碼是這個轉換過程中至關重要的一部分。離了編碼,bytes對象b'\xa420'只是一堆比特位而已。編碼賦予其含義。采用不同的編碼,這堆比特位的含義就會大不同:
>>> b'\xa420'.decode('windows-1255') '?20'三元運算:result = 值1 if 條件 else 值2
>>> a,b,c = 1,3,5 >>> a 1 >>> b 3 >>> c 5 >>> d = b if c>a else 7 >>> d 3 >>> d = b if c<a else 7 >>> d 7?
?
6、元組和列表的使用
列表是最常用的Python數據類型,它可以作為一個方括號內的逗號分隔值出現。
列表的數據項不需要具有相同的類型
# 列表、元組操作 names = ['胡漢','友蘭','姬發','明程','國梁'] print (names[1:3]) #打印names列表的值從第2個開始至第四個結束 print(names) print(names[-2:]) #打印最后兩個,-1表示最后一個。如果寫成-2:0打印為空,因為切片是從左往右切。 print (names.index('姬發')) #打印索引下標 print (names[names.index('姬發')]) #打印索引下標的值 print (names[:1]) #前面的0可以忽略 View Code執行結果如下:(Python 列表的下標從0開始)
['友蘭', '姬發'] ['胡漢', '友蘭', '姬發', '明程', '國梁'] ['明程', '國梁'] 2 姬發 ['胡漢']Process finished with exit code 0 View Code追加、修改、插入和刪除(在修改列表的時候,只能通過下標索引,不能直接寫值)
names = ['胡漢','友蘭','姬發','明程','國梁'] names.append(2001) #追加,默認追加到列表最后。 print (names) names.insert(1,2002) #在列表內1的下標位置插入值。 print (names) names[3]='宇亮' print (names) names[names.index('明程')]='江夏' #在不知道下標的情況下修改列表內的值,在修改的時候只能用下標,#如果寫成names['明程']='江夏'是錯誤的! print (names) names.remove(2002) #移除列表內的值 print (names) del names[5] #刪除列表內下標為5的值,凡是列表后面用[]括起,方法用()括起。 print (names) names.pop(1) #刪除列表內下標為1的值,等同于del names[] print (names) names.pop() #空值表示刪除最后一個值。 print (names) names2 = [1,2,3,5] del names2 #刪除變量 print (names.count('江夏')) #統計數量 names.reverse() #列表反轉 print(names) View Code執行結果如下:
['胡漢', '友蘭', '姬發', '明程', '國梁', 2001] ['胡漢', 2002, '友蘭', '姬發', '明程', '國梁', 2001] ['胡漢', 2002, '友蘭', '宇亮', '明程', '國梁', 2001] ['胡漢', 2002, '友蘭', '宇亮', '江夏', '國梁', 2001] ['胡漢', '友蘭', '宇亮', '江夏', '國梁', 2001] ['胡漢', '友蘭', '宇亮', '江夏', '國梁'] ['胡漢', '宇亮', '江夏', '國梁'] ['胡漢', '宇亮', '江夏'] 1 ['江夏', '宇亮', '胡漢']Process finished with exit code 0 View Code列表的排序和合并
a = ['abc','acb','aac','abc'] print(a) a.sort() #列表排序,默認升序。 print(a) b = [4,2,5,6,1,7] print(b) b.sort() print(b) c = ['a','B','Pang','pang'] print (c) c.sort() print (c) c.extend(b) #列表合并 print (c) View Code執行結果如下:不同類型的數據類型不能排序。
['abc', 'acb', 'aac', 'abc'] ['aac', 'abc', 'abc', 'acb'] [4, 2, 5, 6, 1, 7] [1, 2, 4, 5, 6, 7] ['a', 'B', 'Pang', 'pang'] ['B', 'Pang', 'a', 'pang'] ['B', 'Pang', 'a', 'pang', 1, 2, 4, 5, 6, 7]Process finished with exit code 0 View Code列表的copy
列表中可以包含列表,但是子列表的存在只是一個內存指針,在copy的時候只是淺copy,子列表是單獨指向的一個內存地址,修改列表1列表2也會變。
淺copy:
import copylist1 = ['zhangming','huhan',[100,200]] list2 = list1.copy() print (list1) print (list2)list1[2] = [50,300] #改列表的第一層,不影響第二層的值。此時list2的第二層還是[100,200] print (list1) print (list2) print (list1[:-1]) #列表切片,從第一個下標開始至最后一個下標,但不包含最后一個下標。 View Code結果如下:
['zhangming', 'huhan', [100, 200]] ['zhangming', 'huhan', [100, 200]] ['zhangming', 'huhan', [50, 300]] ['zhangming', 'huhan', [100, 200]] ['zhangming', 'huhan'] View Code修改子列表淺copy的列表值也會跟著改變:
import copylist1 = ['zhangming','huhan',[100,200]] list2 = list1.copy()list1[0] = 'tiezi' #改列表的第一層, print (list1) #第一層的值變了, print (list2) #淺copy內的值不會變。 list1[2][0] = 200 #如果修改列表1內子列表內的值, print (list1) #則子列表內的值會變, print (list2) #列表2子列表內的值也會變。因為子列表是單獨存在的一個內存記錄。在列表內是作為一個指針存在。 list2[2][1] = 500 print (list1) print (list2) View Code如果如下:
['tiezi', 'huhan', [100, 200]] ['zhangming', 'huhan', [100, 200]] ['tiezi', 'huhan', [200, 200]] ['zhangming', 'huhan', [200, 200]] ['tiezi', 'huhan', [200, 500]] ['zhangming', 'huhan', [200, 500]]Process finished with exit code 0 View Code深copy:
# author:dnvwjy import copylist3 = ['wangyi','chexiao','huilong',['yutong','CRT']] list4 = copy.deepcopy(list3) #深copy,就是完全克隆一份一模一樣的,而且是獨立的占一份內存地址。 print (list3) print (list4) list3[3][0] = 'HM' print (list3) print (list4) View Code執行結果如下:
['wangyi', 'chexiao', 'huilong', ['yutong', 'CRT']] ['wangyi', 'chexiao', 'huilong', ['yutong', 'CRT']] ['wangyi', 'chexiao', 'huilong', ['HM', 'CRT']] ['wangyi', 'chexiao', 'huilong', ['yutong', 'CRT']]Process finished with exit code 0 View Code列表的循環打印、切片以及步長切片:
list3 = ['wangyi','chexiao','huilong',['yutong','CRT']]for i in list3:print (i) #列表的循環打印#列表的切片 和 步長切片 print (list3[0:-1:2]) print (list3[::2]) #0和-1都可以省略。 print (list3[:]) #淺copy的三種實現形式 list5 = copy.copy(list3) list6 = list3[:] list7 = list(list3) print ('list5:',list5) print ('list6:',list6) print ('list7:',list7) list3[3][0] = 1 print ('list5:',list5) print ('list6:',list6) print ('list7:',list7) View Code結果如下:
wangyi chexiao huilong ['yutong', 'CRT'] ['wangyi', 'huilong'] ['wangyi', 'huilong'] ['wangyi', 'chexiao', 'huilong', ['yutong', 'CRT']] list5: ['wangyi', 'chexiao', 'huilong', ['yutong', 'CRT']] list6: ['wangyi', 'chexiao', 'huilong', ['yutong', 'CRT']] list7: ['wangyi', 'chexiao', 'huilong', ['yutong', 'CRT']] list5: ['wangyi', 'chexiao', 'huilong', [1, 'CRT']] list6: ['wangyi', 'chexiao', 'huilong', [1, 'CRT']] list7: ['wangyi', 'chexiao', 'huilong', [1, 'CRT']]Process finished with exit code 0 View Code元組:
元組就是列表,但是不能刪和改。元組又叫只讀列表,元組用小括號()括號,只有兩個參數(count/index),列表用中括號[]括起。
#元組--英文tuple,用小括號表示() tuple=('apple','eggs') print(tuple.count('apple')) #統計 print(tuple.index('apple')) #索引 del tuple #刪除元組 View Code7、字符串常用操作
特性:不可修改,可以切片
name.capitalize() 首字母大寫 name.casefold() 大寫全部變小寫 name.center(50,"-") 輸出 '---------------------Alex Li----------------------' name.count('lex') 統計 lex出現次數 name.encode() 將字符串編碼成bytes格式 name.endswith("Li") 判斷字符串是否以 Li結尾"Alex\tLi".expandtabs(10) 輸出'Alex Li', 將\t轉換成多長的空格 name.find('A') 查找A,找到返回其索引, 找不到返回-1 format :>>> msg = "my name is {}, and age is {}">>> msg.format("alex",22)'my name is alex, and age is 22'>>> msg = "my name is {1}, and age is {0}">>> msg.format("alex",22)'my name is 22, and age is alex'>>> msg = "my name is {name}, and age is {age}">>> msg.format(age=22,name="ale")'my name is ale, and age is 22' format_map>>> msg.format_map({'name':'alex','age':22})'my name is alex, and age is 22'msg.index('a') 返回a所在字符串的索引 '9aA'.isalnum() True'9'.isdigit() 是否整數 name.isnumeric name.isprintable name.isspace name.istitle name.isupper"|".join(['alex','jack','rain']) 'alex|jack|rain'maketrans>>> intab = "aeiou" #This is the string having actual characters. >>> outtab = "12345" #This is the string having corresponding mapping character>>> trantab = str.maketrans(intab, outtab)>>> >>> str = "this is string example....wow!!!">>> str.translate(trantab)'th3s 3s str3ng 2x1mpl2....w4w!!!'msg.partition('is') 輸出 ('my name ', 'is', ' {name}, and age is {age}') >>> "alex li, chinese name is lijie".replace("li","LI",1)'alex LI, chinese name is lijie'msg.swapcase 大小寫互換>>> msg.zfill(40) '00000my name is {name}, and age is {age}'>>> n4.ljust(40,"-") 'Hello 2orld-----------------------------' >>> n4.rjust(40,"-") '-----------------------------Hello 2orld'>>> b="ddefdsdff_哈哈" >>> b.isidentifier() #檢測一段字符串可否被當作標志符,即是否符合變量命名規則 True補充字符串操作:
name = 'tangcao' print(name.capitalize()) print(name.capitalize()) print('abc'.isalnum()) print('16AC'.isdecimal()) print('a16AC-'.isidentifier()) print('-'.join(['alum','fifle','firebord'])) print (name.ljust(30,'+')) print (name.rjust(30,'+')) print ('AAAA'.lower()) print ('aaaa'.upper()) print ('\t \nccccc\n'.lstrip()) print ('++++\t11')s=str.maketrans('abcdefg','1234567') print('my name is nana'.translate(s)) print('fuck off'.replace('f','6',1)) print('fuck off'.rfind('f')) print ('fuck off'.split('f')) print ('fu\nck of\nf'.splitlines()) print('fUCK oFF'.swapcase()) print ('dnvwjy'.zfill(30)) View Code執行結果如下:
Tangcao Tangcao True False False alum-fifle-firebord tangcao+++++++++++++++++++++++ +++++++++++++++++++++++tangcao aaaa AAAA ccccc++++ 11 my n1m5 is n1n1 6uck off 7 ['', 'uck o', '', ''] ['fu', 'ck of', 'f'] Fuck Off 000000000000000000000000dnvwjy View Code8、字典的使用
字典是一種key-value的數據類型
特性:無序,key必須是唯一的,所以天生去重!
info = {'stu1101': 'TengLan wu','stu1102': 'LongZe Luola','stu1103': 'XiaoZe Maliya', } print(info) print(info['stu1102']) info['stu1101'] = '武藤蘭' #修改字典對應key的值 info['stu1104'] = 'cangjinkong' #沒有相應的KEY就添加一條記錄。 print (info)#del info['stu1101'] #刪除字典內KEY對應的KEY和值。 #del info #刪除整個字典 DEL是Python內置的刪除通用方法。 info.pop('stu1101') #刪除 info.popitem() #隨機刪除一個 #查找 # info['stu1105'] #沒有相應的KEY就出錯啦! # print(info['stu1105']) #KeyError:'stu1105' print(info.get('stu1105')) #查找字典KEY的正確打開方式! #判斷key是否在字典內: print('stu1105'in info) #等同于PY2.X info.has_key('stu1102')#PY3.X沒有了這種方法。#返回布爾值 c = {'stu1101':'dnvwjy',1:3,2:5,} info.update(c) #更新,合并字典,有重復就替換。 print(info.items()) #把字典轉換成列表 # s = info.fromkeys({6,7,8},'test') #這里跟info沒有任何關系可以寫成dict s = dict.fromkeys([6,7,8],[2,{'name':'lexe'},444]) #fromkeys(key,values),這里的value是一個列表的數據類型 s[8][1]['name']='dbv' #[key][列表][列表下的值] s[8][2]='dccv' #[key][列表][列表下的值],共享的一個內存地址所以列表內的值全改了!如果只有一層就沒問題。print (s) print (info) #列表的循環: print (i,info(i))#TypeError: 'dict' object is not callable for i in info:print (i,info[i]) #這里不能用(),要用[]在字典內取值。for k,j in info.items(): #兩個字典循環的結果都一樣,但是上面一種更加高效,因為第二種循環需要轉換為列表,如果數據#量非常大,運行速度也會變得非常慢。print(k,j) View Code結果:
C:\Users\hca006\AppData\Local\Programs\Python\Python36\python.exe "D:/python app/var/day2/dictionary.py" {'stu1101': 'TengLan wu', 'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya'} LongZe Luola {'stu1101': '武藤蘭', 'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya', 'stu1104': 'cangjinkong'} None False dict_items([('stu1102', 'LongZe Luola'), ('stu1103', 'XiaoZe Maliya'), ('stu1101', 'dnvwjy'), (1, 3), (2, 5)]) {6: [2, {'name': 'dbv'}, 'dccv'], 7: [2, {'name': 'dbv'}, 'dccv'], 8: [2, {'name': 'dbv'}, 'dccv']} {'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya', 'stu1101': 'dnvwjy', 1: 3, 2: 5} stu1102 LongZe Luola stu1103 XiaoZe Maliya stu1101 dnvwjy 1 3 2 5 stu1102 LongZe Luola stu1103 XiaoZe Maliya stu1101 dnvwjy 1 3 2 5Process finished with exit code 0 View Code?
字典的多級嵌套
# author:dnvwjy av_catalog = {"歐美":{"www.youporn.com": ["很多免費的,世界最大的","質量一般"],"www.pornhub.com": ["很多免費的,也很大","質量比yourporn高點"],"letmedothistoyou.com": ["多是自拍,高質量圖片很多","資源不多,更新慢"],"x-art.com":["質量很高,真的很高","全部收費,屌比請繞過"]},"日韓":{"tokyo-hot":["質量怎樣不清楚,個人已經不喜歡日韓范了","聽說是收費的"]},"大陸":{"1024":["全部免費,真好,好人一生平安","服務器在國外,慢"]} } av_catalog['大陸']['1024'][0] += ',還有91pron' #修改 # print (av_catalog.values()) #打印values # print (av_catalog.keys()) #打印keys av_catalog.setdefault('taiwang',{'123':['www.baidu.com']}) #setdefault,如果字典內沒有就添加,如果有就返回,不添加。 av_catalog.setdefault('taiwang',{'456':['www.baidu.com']}) print( av_catalog.items()) # print (av_catalog) View Code C:\Users\hca006\AppData\Local\Programs\Python\Python36\python.exe "D:/python app/var/day2/dictionary22.py" dict_items([('歐美', {'www.youporn.com': ['很多免費的,世界最大的', '質量一般'], 'www.pornhub.com': ['很多免費的,也很大', '質量比yourporn高點'], 'letmedothistoyou.com': ['多是自拍,高質量圖片很多', '資源不多,更新慢'], 'x-art.com': ['質量很高,真的很高', '全部收費,屌比請繞過']}), ('日韓', {'tokyo-hot': ['質量怎樣不清楚,個人已經不喜歡日韓范了', '聽說是收費的']}), ('大陸', {'1024': ['全部免費,真好,好人一生平安,還有91pron', '服務器在國外,慢']}), ('taiwang', {'123': ['www.baidu.com']})])Process finished with exit code 0 View Code?
總結:
想學好Python一定要多動手寫代碼,要猛戮鍵盤!:P??? 不然看得再多也枉然!
鴨梨山大!
?
轉載于:https://www.cnblogs.com/dnvwjy/p/6680326.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的python 运维自动化之路 Day2的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Redis开发与运维
- 下一篇: 从bootm 命令讲起/U-boot的环