1. 程式人生 > 其它 >python程式設計從入門到實踐(第一版)讀書筆記(一)

python程式設計從入門到實踐(第一版)讀書筆記(一)

1列表

本章節中例子列表為: motorcycles = ['honda', 'yamaha', 'suzuki']

1.1從列表中刪除元素

1.1.1按位置刪除

  • del語句

    del motorcycles [x] #x為列表元素索引值

  • pop()方法

    popped_motorcycle = motorcycles.pop(x) #方法pop()可刪除列表末尾的元素,並讓你能夠接著使用它。x仍為元素索引值

1.1.2按值刪除

motorcycles.remove(value) #value為列表中的某個值

注:方法remove()只刪除第一個指定的值。如果要刪除的值可能在列表中出現多次,就需要使用迴圈來判斷是否刪除了所有這樣的值。

1.2列表排序

motorcycles.sort() #永久排序

如果你要按與字母順序相反的順序顯示列表,可向函式sort()傳遞引數reverse=True

sorted(motorcycles) #臨時排序,也可傳遞引數reverse=True

motorcycles.reverse() #反轉列表元素的排列順序

len(motorcycles) #獲取列表長度

1.3操作列表

1.3.1list()方法轉換為列表

for value in range(1,5):

   print(value) #列印1~4

list(range(1,6)) #轉為列表

1.3.2列表解析

語法:

  [expression for iter_val in iterable]

  [expression for iter_val in iterable if cond_expr]

1.3.3切片

負數索引返回離列表末尾相應距離的元素,如 'suzuki'=motorcycles[-1]

1.3.4複製列表

list_copy=list[ : ] #這種方式會變成兩個列表

list_copy=list #這種語法實際上是讓Python將新變數friend_foods關聯到包含my_foods中的列表,因此這兩個變數都指向同一個列表。即操作任意一個,另一個也會被改。

1.3.5元組

元組是不可改的列表,使用()表示。

雖然不能修改元組的元素,但可以給儲存元組的變數賦值。例如:

dimensions = (200, 50)

dimensions = (400, 100)

2if語句

Python title() 方法返回"標題化"的字串,就是說所有單詞都是以大寫開始,其餘字母均為小寫。

Python並不要求if-elif結構後面必須有else程式碼塊。

if lista: #lista不為空返回True

3字典

alien_0 = {'color': 'green', 'points': 5}

print(alien_0['color'])

alien_0['x_position'] = 0 #新增值對

注意:鍵值對的排列順序與新增順序不同。Python不關心鍵值對的新增順序,而只關心鍵和值之間的關聯關係。

alien_0['color'] = 'yellow' #修改值對

del alien_0['points'] #刪除值對

3.1遍歷字典

user_0 = {

'username': 'efermi',

'first': 'enrico',

'last': 'fermi',

}

for key, value in user_0.items() #對於這兩個變數,可使用任何名稱。

注意,即便遍歷字典時,鍵值對的返回順序也與儲存順序不同。Python不關心鍵值對的儲存順序,而只跟蹤鍵和值之間的關聯關係。

3.1.1遍歷字典中的所有鍵

user_0 .keys()

遍歷字典時,會預設遍歷所有的鍵,因此,如果將for name in favorite_languages.keys():替換為for name in favorite_languages:,輸出將不變。

3.1.2順序遍歷字典中的所有鍵

favorite_languages = { 'jen': 'python', 'sarah': 'c', 'edward': 'ruby', 'phil': 'python', }

for name in sorted(favorite_languages.keys()):

  print(name.title() + ", thank you for taking the poll."

3.1.3遍歷字典中的所有值

favorite_languages = { 'jen': 'python', 'sarah': 'c', 'edward': 'ruby', 'phil': 'python', }

print("The following languages have been mentioned:")

for language in favorite_languages.values():

  print(language.title())

這種做法提取字典中所有的值,而沒有考慮是否重複。涉及的值很少時,這也許不是問題,但如果被調查者很多,最終的列表可能包含大量的重複項。為剔除重複項,可使用集合(set)。集合類似於列表,但每個元素都必須是獨一無二的:

 favorite_languages = { 'jen': 'python', 'sarah': 'c', 'edward': 'ruby', 'phil': 'python', }

print("The following languages have been mentioned:")

for language in set(favorite_languages.values()):

  print(language.title()

3.2巢狀

字典列表、字典中儲存列表、字典中儲存字典

4while迴圈

要立即退出while迴圈,不再執行迴圈中餘下的程式碼,也不管條件測試的結果如何,可使用break語句。

continue是忽略該語句後面的語句,返回到迴圈開頭。

5函式

5.1傳遞列表

將列表傳遞給函式後,函式就可對其進行修改。在函式中對這個列表所做的任何修改都是永久性的。

如果不想修改原列表,可向函式傳遞列表的副本,比如:function_name(list_name[:])

5.2傳遞任意數量的實參

def funciton(*toppings)

形參名*toppings中的星號讓Python建立一個名為toppings的空元組,並將收到的所有值都封裝到這個元組中。函式體內的print語句通過生成輸出來證明Python能夠處理使用一個值呼叫函式的情形,也能處理使用三個值來呼叫函式的情形。它以類似的方式處理不同的呼叫,注意,Python將實參封裝到一個元組中,即便函式只收到一個值也如此。

注意:如果要讓函式接受不同型別的實參,必須在函式定義中將接納任意數量實參的形參放在最後。Python先匹配位置實參和關鍵字實參,再將餘下的實參都收集到最後一個形參中。

5.2.1使用任意數量的關鍵字實參

有時候,需要接受任意數量的實參,但預先不知道傳遞給函式的會是什麼樣的資訊。在這種情況下,可將函式編寫成能夠接受任意數量的鍵值對——呼叫語句提供了多少就接受多少。一個這樣的示例是建立使用者簡介:你知道你將收到有關使用者的資訊,但不確定會是什麼樣的資訊。在下面的示例中,函式build_profile()接受名和姓,同時還接受任意數量的關鍵字實參:

def build_profile(first, last, **user_info):
    """建立一個字典,其中包含我們知道的有關使用者的一切"""
    profile = {}
    profile['first_name'] = first
    profile['last_name'] = last
    for key, value in user_info.items():
        profile[key] = value
        return profile
user_profile = build_profile('albert', 'einstein',location='princeton',field='physics')
print(user_profile)

函式build_profile()的定義要求提供名和姓,同時允許使用者根據需要提供任意數量的名稱值對。形參**user_info中的兩個星號讓Python建立一個名為user_info空字典,並將收到的所有名稱值對都封裝到這個字典中。在這個函式中,可以像訪問其他字典那樣訪問user_info中的名稱值對。build_profile()的函式體內,我們建立了一個名為profile的空字典,用於儲存使用者簡介。在處,我們將名和姓加入到這個字典中,因為我們總是會從使用者那裡收到這兩項資訊。在處,我們遍歷字典user_info中的鍵值對,並將每個鍵值對都加入到字典profile中。最後,我們將字典profile返回給函式呼叫行。

5.3將函式儲存在模組中

5.3.1匯入整個模組

要讓函式是可匯入的,得先建立模組。模組模組是副檔名為.py的檔案,包含要匯入到程式中的程式碼。

pizza.py

def make_pizza(size, *toppings):    
"""概述要製作的比薩"""    
    print("\nMaking a " + str(size) + "-inch pizza with the following toppings:")    
    for topping in toppings:        
        print("- " + topping)       

making_pizzas.py

import pizza
pizza.make_pizza(16, 'pepperoni') 
pizza.make_pizza(12, 'mushrooms', 'green peppers', 'extra cheese')

Python讀取這個檔案時,程式碼行import pizzaPython開啟檔案pizza.py,並將其中的所有函式都複製到這個程式中。你看不到複製的程式碼,因為這個程式執行時,Python在幕後複製這些程式碼。你只需知道,在making_pizzas.py中,可以使用pizza.py中定義的所有函式。

5.3.2匯入特定的函式

你還可以匯入模組中的特定函式,這種匯入方法的語法如下:from module_name import function_name

通過用逗號分隔函式名,可根據需要從模組中匯入任意數量的函式:from module_name import function_0, function_1, function_2

from pizza import make_pizza
make_pizza(16, 'pepperoni')

5.3.3使用as給函式指定別名給函式指定別名

下面給函式make_pizza()指定了別名mp()。這是在import語句中使用make_pizza as mp實現的,關鍵字as將函式重新命名為你提供的別名:

from pizza import make_pizza as mp
mp(16, 'pepperoni')
mp(12, 'mushrooms', 'green peppers', 'extra cheese')

5.3.4使用as給模組指定別名給模組指定別名

import pizza as p
p.make_pizza(16, 'pepperoni')
p.make_pizza(12, 'mushrooms', 'green peppers', 'extra cheese')

5.3.5匯入模組中的所有函式

使用星號(*)運算子可讓Python匯入模組中的所有函式:

from pizza import *
make_pizza(16, 'pepperoni')
make_pizza(12, 'mushrooms', 'green peppers', 'extra cheese')

import語句中的星號讓Python將模組pizza中的每個函式都複製到這個程式檔案中。由於匯入了每個函式,可通過名稱來呼叫每個函式,而無需使用句點表示法。然而,使用並非自己編寫的大型模組時,最好不要採用這種匯入方法:如果模組中有函式的名稱與你的專案中使用的名稱相同,可能導致意想不到的結果:Python可能遇到多個名稱相同的函數或變數,進而覆蓋函式,而不是分別匯入所有的函式。最佳的做法是,要麼只匯入你需要使用的函式,要麼匯入整個模組並使用句點表示法。這能讓程式碼更清晰,更容易閱讀和理解。