Python學習第十八篇——低耦合函數設計思想

來源:互聯網
上載者:User

標籤:span   擴充   pytho   列表   json格式   編碼   ack   完成   函數返回   

 1 import json 2  2 def greet_user(filename): 3  3     try: 4  4         with open(filename) as f_obj: 5  5             username = json.load(f_obj) 6  6     except FileNotFoundError: 7  7         username = input("what is your name?") 8  8         with open(filename,‘w‘) as f_obj: 9  9             json.dump(username,f_obj)10 10             print("we‘ll remember you when you come back, "+username+"!")11 11     else:12 12         print("hello,"+username+".;")13 13     14 14 greet_user("username.json")

這段代碼1描述了這樣一個功能,開啟“username.json”檔案夾,該檔案夾中儲存了使用者姓名,如果不存在該檔案夾,可以建立該檔案夾,並且這裡建立了一個函數來描述這件事情:

該程式碼片段實際上完成了兩個功能:1 讀取"username.json"檔案夾。2 建立“username.json”檔案。

    實際上,在代碼設計的時候,我們通常應該具有這樣的思想:將我們要做的工作,劃分為具體的代碼函數塊,使得函數看起來更加簡潔,擴充性也越強,在編寫程式的時候,我們應該具備這樣的意識。

下面,將上述的的代碼拆成兩部分功能,代碼2如下:


 1 import json


 2 def get_stored_username():


 3     filename = "username.json"


 4     try:


 5         with open(filename) as f_obj:


 6             username = json.load(f_obj)


 7     except FileNotFoundError:


 8         return None


 9     else:


10         return username


11        


12 def greet_user():


13     username = get_stored_username()


14     if username:


15         print("hello,"+username+".")


16     else:


17         username = input("what is your name?")


18         filename = "username.json"


19         with open(filename,"w") as f_obj:


20             json.dump(username,f_obj)


21             print("we‘ll remember you when you come back, "+username+"!")


22 greet_user()


上述程式碼完成了函數1的功能。但是函數的耦合程度降低了,因此,寫代碼的時候,需要注意自己的代碼風格,盡量養成低耦合代碼的習慣。

在此,總結一下上述代碼中的一些知識點:

1 json模組非常好用,首先明確一個重要的概念:json是一種資料交換格式,即本質是資料格式的轉換, 這種格式方便我們資訊。

2 json.dump()用於將Python對象編碼成json字串

3 json.load()將json格式轉化成python對象

將上述2抽象一下,變成我們將我們Python中的比如字串,整型數,字典,列表,這些儲存在一個檔案在.json的檔案類型中

將3抽象一下,變成,將.json類型的檔案載入成字串,整型數等等。

如果不考慮資料的本質,我們可以認為,這就是簡單的寫檔案和讀檔案的操作

4 代碼2中的第八的return None,None是一個關鍵字(姑且這麼叫),我們再看代碼2中第十四行代碼 if username,可以發現,可以感覺username,None來判斷邏輯值,實際上:

 python 中,None,空列表[],空字典{},空元組(),0都一系列代碼空和無的對象都會被轉化成Flase,其他表示1,真,有的對象被轉化成True

5 代碼2中的第10行代碼,表示Python中的函數傳回值類型可以是任意你想要的值,包括數值,字串,列表,字典等,因此在寫函數的時候,要注意靈活使用。

Python學習第十八篇——低耦合函數設計思想

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.