優先使用python3,拋棄python2python
查看python版本信息: python --versiones6
採用一致的編碼風格令代碼更加易讀,利於多人協做app
絕對應該遵照的規則ide
空格函數
(1)使用space來表示縮進,而不要使用tabui
(2)和語法相關的每一層縮進都用4個空格來表示編碼
(3)每行的字符不該超過79es5
(4)對於多行長表達式,除了首行以外的其他各行都應該在一般的縮進級別之上再加4個空格spa
(5)文件中的函數與類之間應該用兩個空行隔開3d
(6)同一個類中的兩個方法之間應該用一個空行隔開
(7)在使用下標獲取列表元素、調用函數或給關鍵字參數賦值時,不要在兩旁添加空格
(8)爲變量賦值時,賦值符號兩邊各添加一個空格
命名
(1)函數、變量及屬性應該用小寫字母來拼寫,各單詞間用下劃線鏈接,如bub_sort
(2)受保護的實例屬性,應以單下劃線開頭,如_name
(3)私有的實例屬性,應以雙下劃線開頭,如__name
(4)類與異常,應以每一個單詞首字母大寫的形式命名,如Note
(5)模塊級別的常量,應所有采用大寫字母拼寫,單詞之間用下劃線鏈接,如ERR_CODE
(6)類中實例方法的首個參數,應該命名爲self,表示該對象自身
(7)類方法的首個參數,應該命名爲cls,表示該類自身
表達式和語句
(1)採用內聯形式的否認詞,不要把否認詞放在整個表達式的前面,例如應該是 if a is not b 而不是if not a is b
(2)不要經過檢測長度的辦法,如len(list1) == 0來判斷list1是否爲[]或「」等空值,而是採用if not list1來判斷,它會假定空值將自動評估爲False
(3)檢測list1是否爲[1]或‘hi’等非空值,應用if list1語句會默認把非空的值判斷爲True
(4)不要編寫單行的if語句、for循環、while循環及except複合語句,而是應該把這些語句分紅多行來書寫,以示清晰
(5)import語句應該老是放在文件開頭
(6)引入模塊的時候,老是應該使用絕對的名稱,而不該該根據當前模塊的路徑來使用相對名稱
例如,引入bar包中的foo模塊時,應該完整的寫出from bar import foo,而不該該寫import foo
(7)若是必定要用相對名稱來編寫import語句,應該採用明確的寫法:from .import foo
(8)文件中的import語句應該按順序劃分紅三個部分,分別表示標準模塊、第三方模塊以及自用模塊。
在每個部分中,各import'語句應該按模塊的順序來排列
(1)不要寫多餘的代碼;當從索引開頭獲取元素,應把起始索引留空;當一直取到索引末尾,應把終止索引留空。
nums = [0, 1, 2, 3, 4, 5] res1 = nums[:] #[0, 1, 2, 3, 4, 5] res2 = nums[:3] #[0, 1, 2] res3 = nums[3:] #[3, 4, 5] res4 = nums[1:3] #[1, 2] res5 = nums[2:-1] #[2, 3, 4] res6 = nums[:-1] #[0, 1, 2, 3, 4] res7 = nums[-2:] #[4, 5] res8 = nums[-3:-1] #[3, 4]
(2)切片操做不計較開始索引和結束索引是否越界。
利用這一特性,咱們能夠限定輸入序列的最大長度
nums = [_ for _ in range(30)] first_ten_items = nums[:10] #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] last_ten_items = nums[-10:] #[20, 21, 22, 23, 24, 25, 26, 27, 28, 29]
(3)對列表賦值時,若是使用切片操做,會把原列表中在相關範圍內的值替換成新值,
位於切片以前和以後的值不變,列表會根據新值的個數相應的擴張和收縮。
nums = [0, 1, 2, 3, 4, 5] nums_temp = nums nums[:3] = ['a'] print(nums, nums is nums_temp) #['a', 3, 4, 5] True
來看個特殊的
nums = [0, 1, 2, 3, 4, 5] nums_temp = nums nums[:] = ['a', 'b', 'c'] print(nums, nums is nums_temp) #['a', 'b', 'c'] True
說明:把右側的新值賦值一份去替換左側列表的所有元素,但不會從新分配新的列表,這個從nums is nums_temp爲True可知。
1)range經常使用在一系列整數上的迭代
1 for i in range(10): 2 print(i)
2)對於字符串列表,可直接使用for...in迭代
1 fruits = ["apple", "banana", "pear"] 2 for ele in fruits: 3 print(ele)
3)對於迭代列表時,須要知道當前元素的索引
方式一:range
1 fruits = ["apple", "banana", "pear"] 2 for i in range(len(fruits)): 3 print("%d: %s" % (i, fruits[i]))
說明:代碼有些生硬,必須先得到序列的長度,再經過下標訪問元素,代碼不免有些臃腫
方式二:enumerate
1 fruits = ["apple", "banana", "pear"] 2 for i, ele in enumerate(fruits): 3 print("%d: %s" % (i, ele))
要點:
1.再須要用到所遍歷序列的索引時,通常用enumerate遍歷
2.enumerate可指定開始計數的索引
栗子:平行的迭代兩個長度相等的列表,並求fruits中長度最長的元素
fruits = ["apple", "banana", "pear"] letters = [len(fruit) for fruit in fruits]
方式一:經過某個列表的長度來執行循環
1 fruits = ["apple", "banana", "pear"] 2 letters = [len(fruit) for fruit in fruits] 3 4 longest_name = None 5 max_letters = 0 6 7 for i in range(len(fruits)): 8 if letters[i] > max_letters: 9 max_letters = letters[i] 10 longest_name = fruits[i] 11 12 print(max_letters) 13 print(longest_name)
方式二:經過enumerate來執行循環
1 fruits = ["apple", "banana", "pear"] 2 letters = [len(fruit) for fruit in fruits] 3 4 longest_name = None 5 max_letters = 0 6 7 for i, fruit in enumerate(fruits): 8 if letters[i] > max_letters: 9 max_letters = letters[i] 10 longest_name = fruit 11 12 print(max_letters) 13 print(longest_name)
方式三:用zip函數來執行循環
1 fruits = ["apple", "banana", "pear"] 2 letters = [len(fruit) for fruit in fruits] 3 4 longest_name = None 5 max_letters = 0 6 7 for fruit, length in zip(fruits, letters): 8 if length > max_letters: 9 max_letters = length 10 longest_name = fruit 11 12 print(max_letters) 13 print(longest_name)