学习python第十天
生活随笔
收集整理的這篇文章主要介紹了
学习python第十天
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這么算起來,學習 python 可不止用了十天,接下來還有 python 的高級部分,加油~
?1、異常(重點)
1.1 捕獲異常
簡單的捕獲異常語法
try:# 提示用戶輸入一個數字num = int(input("請輸入數字:")) except:print("請輸入正確的數字")- try嘗試,下方編寫要嘗試代碼,不確定是否能夠正常執行的代碼
- except如果不是,下方編寫嘗試失敗的代碼
錯誤類型捕獲
在程序執行時,可能會遇到?不同類型的異常,并且需要?針對不同類型的異常,做出不同的響應,這個時候,就需要捕獲錯誤類型了
- 當?Python?解釋器?拋出異常?時,最后一行錯誤信息的第一個單詞,就是錯誤類型
捕獲未知錯誤
- 在開發時,要預判到所有可能出現的錯誤,還是有一定難度的
- 如果希望程序?無論出現任何錯誤,都不會因為?Python?解釋器?拋出異常而被終止,可以再增加一個?except
異常捕獲完整語法
-
else?只有在沒有異常時才會執行的代碼
-
finally?無論是否有異常,都會執行的代碼
1.2 異常的傳遞
- 異常的傳遞?—— 當?函數/方法?執行?出現異常,會?將異常傳遞?給 函數/方法 的?調用一方
- 如果?傳遞到主程序,仍然?沒有異常處理,程序才會被終止
提示:(主函數調用其他函數,其他函數出現異常,只要在主函數中捕獲異樣就行)
- 在開發中,可以在主函數中增加?異常捕獲
- 而在主函數中調用的其他函數,只要出現異常,都會傳遞到主函數的?異常捕獲?中
- 這樣就不需要在代碼中,增加大量的?異常捕獲,能夠保證代碼的整潔
def demo2():return demo1()try:print(demo2()) except ValueError:print("請輸入正確的整數") except Exception as result:print("未知錯誤 %s" % result)
1.3 拋出 raise 異常
應用場景
- 在開發中,除了?代碼執行出錯?Python?解釋器會?拋出?異常之外
- 還可以根據?應用程序?特有的業務需求?主動拋出異常
示例
- 提示用戶?輸入密碼,如果?長度少于 8,拋出?異常
拋出異常
- Python?中提供了一個?Exception?異常類
- 在開發時,如果滿足?特定業務需求時,希望?拋出異常,可以:
- 創建?一個?Exception?的?對象
- 使用?raise?關鍵字?拋出?異常對象
2、模塊
2.1 模塊的概念
模塊是 Python 程序架構的一個核心概念
- 每一個以擴展名?py?結尾的?Python?源代碼文件都是一個?模塊
- 模塊名?同樣也是一個?標識符,需要符合標識符的命名規則
- 在模塊中定義的?全局變量?、函數、類?都是提供給外界直接使用的?工具
- 模塊?就好比是?工具包,要想使用這個工具包中的工具,就需要先?導入?這個模塊
2.2 模塊的兩種導入方式
1)import 導入
- 在導入模塊時,每個導入應該獨占一行
- 導入之后,通過?模塊名.?使用?模塊提供的工具?——?全局變量、函數、類
- 如果模塊的名字太長,可以使用?as?指定模塊的名稱,以方便在代碼中的使用(別名符合大駝峰命名法)
2)from...import 導入
- 如果希望?從某一個模塊?中,導入?部分?工具,就可以使用?from ... import?的方式
- import 模塊名?是?一次性?把模塊中?所有工具全部導入,并且通過?模塊名/別名?訪問
- 導入之后,不需要?通過?模塊名,可以直接使用?模塊提供的工具?——?全局變量、函數、類
3)特別注意!!
如果?兩個模塊,存在?同名的函數,那么?后導入模塊的函數,會?覆蓋掉先導入的函數
- 開發時?import?代碼應該統一寫在?代碼的頂部,更容易及時發現沖突
- 一旦發現沖突,可以使用?as?關鍵字?給其中一個工具起一個別名
2.3 模塊的搜索順序 [擴展]
Python?的解釋器在?導入模塊?時,會:
2.4 原則 —— 每一個文件都應該是可以被導入的
- 一個?獨立的?Python?文件?就是一個?模塊
- 在導入文件時,文件中?所有沒有任何縮進的代碼?都會被執行一遍!
實際開發場景
- 在實際開發中,每一個模塊都是獨立開發的,大多都有專人負責
- 開發人員?通常會在?模塊下方增加一些測試代碼
- 僅在模塊內使用,而被導入到其他文件中不需要執行
__name__?屬性
- __name__?屬性可以做到,測試模塊的代碼?只在測試情況下被運行,而在?被導入時不會被執行!
- __name__?是?Python?的一個內置屬性,記錄著一個?字符串
- 如果?是被其他文件導入的,__name__?就是?模塊名
- 如果?是當前執行的程序?__name__?是?__main__
在很多?Python?文件中都會看到以下格式的代碼:
# 在代碼的最下方 def main():# ...pass# 根據 __name__ 判斷是否執行下方代碼 if __name__ == "__main__":main()3、包(Package)
3.1 概念
- 包?是一個?包含多個模塊?的?特殊目錄
- 目錄下有一個?特殊的文件?__init__.py(即只有是源文件夾才能被導入)
- 包名的?命名方式?和變量名一致,小寫字母?+?_
3.2 好處
- 使用?import 包名?可以一次性導入?包?中?所有的模塊
?4、文件
4.1 文件的基本操作
在?計算機?中要操作文件的套路非常固定,一共包含三個步驟:
- 讀?將文件內容讀入內存
- 寫?將內存內容寫入文件
1)操作文件的函數/方法
- 在?Python?中要操作文件需要記住 1 個函數和 3 個方法
| 01 | open | 打開文件,并且返回文件操作對象 |
| 02 | read | 將文件內容讀取到內存 |
| 03 | write | 將指定內容寫入文件 |
| 04 | close | 關閉文件 |
- open?函數負責打開文件,并且返回文件對象
- read/write/close?三個方法都需要通過?文件對象?來調用
2)read 方法 —— 讀取文件
- open?函數的第一個參數是要打開的文件名(文件名區分大小寫)
- 如果文件?存在,返回?文件操作對象
- 如果文件?不存在,會?拋出異常
- read?方法可以一次性?讀入?并?返回?文件的?所有內容
- close?方法負責?關閉文件
- 如果?忘記關閉文件,會造成系統資源消耗,而且會影響到后續對文件的訪問
- 注意:read?方法執行后,會把?文件指針?移動到?文件的末尾
- 在開發中,通常會先編寫?打開?和?關閉?的代碼,再編寫中間針對文件的?讀/寫?操作!
3)文件指針(知道)
- 文件指針?標記?從哪個位置開始讀取數據
- 第一次打開?文件時,通常?文件指針會指向文件的開始位置
- 當執行了?read?方法后,文件指針?會移動到?讀取內容的末尾
- 默認情況下會移動到?文件末尾
- 如果執行了一次?read?方法,讀取了所有內容,那么再次調用?read?方法,不能再讀取內容了(文件指針指向了末尾)
4)打開文件的方式
- open?函數默認以?只讀方式?打開文件,并且返回文件對象
- 頻繁的移動文件指針,會影響文件的讀寫效率,開發中更多的時候會以?只讀、只寫?的方式來操作文件
| r | 以只讀方式打開文件。文件的指針將會放在文件的開頭,這是默認模式。如果文件不存在,拋出異常 |
| w | 以只寫方式打開文件。如果文件存在會被覆蓋。如果文件不存在,創建新文件 |
| a | 以追加方式打開文件。如果該文件已存在,文件指針將會放在文件的結尾。如果文件不存在,創建新文件進行寫入 |
| r+ | 以讀寫方式打開文件。文件的指針將會放在文件的開頭。如果文件不存在,拋出異常 |
| w+ | 以讀寫方式打開文件。如果文件存在會被覆蓋。如果文件不存在,創建新文件 |
| a+ | 以讀寫方式打開文件。如果該文件已存在,文件指針將會放在文件的結尾。如果文件不存在,創建新文件進行寫入 |
# 打開文件 f = open("README", "w")f.write("hello python!\n") f.write("今天天氣真好")# 關閉文件 f.close()
?5)按行讀取文件內容
- read?方法默認會把文件的?所有內容一次性讀取到內存
- 如果文件太大,對內存的占用會非常嚴重
讀取大文件的正確姿勢
# 打開文件 file = open("README")while True:# 一次讀取一行內容text = file.readline()# 判斷是否讀到內容if not text:break# 每讀取一行的末尾已經有了一個 `\n`print(text, end="")# 關閉文件 file.close()6)文件讀寫案例 —— 復制文件
# 一次性全部讀取(適合復制小文件) def test01():# 1. 打開文件file_read = open("README")file_write = open("README[復件]", "w")# 2. 讀取并寫入文件text = file_read.read()file_write.write(text)# 3. 關閉文件 file_read.close()file_write.close()# 一行一行讀取(適合復制大文件) def test02():# 1. 打開文件file_read = open("README")file_write = open("README[復件]", "w")# 2. 讀取并寫入文件while True:# 每次讀取一行text = file_read.readline()# 判斷是否讀取到內容if not text:breakfile_write.write(text)# 3. 關閉文件 file_read.close()file_write.close()
4.2 文件/目錄的常用管理操作
- 在?終端?/?文件瀏覽器、 中可以執行常規的?文件?/?目錄?管理操作,例如:
- 創建、重命名、刪除、改變路徑、查看目錄內容、……
- 在?Python?中,如果希望通過程序實現上述功能,需要導入?os?模塊
文件操作
| 01 | rename | 重命名文件 | os.rename(源文件名, 目標文件名) |
| 02 | remove | 刪除文件 | os.remove(文件名) |
目錄操作
?
| 01 | listdir | 目錄列表 | os.listdir(目錄名) |
| 02 | mkdir | 創建目錄 | os.mkdir(目錄名) |
| 03 | rmdir | 刪除目錄 | os.rmdir(目錄名) |
| 04 | getcwd | 獲取當前目錄 | os.getcwd() |
| 05 | chdir | 修改工作目錄 | os.chdir(目標目錄) |
| 06 | path.isdir | 判斷是否是文件 | os.path.isdir(文件路徑) |
4.3 文本文件的編碼格式(科普)
ASCII?編碼
- 計算機中只有?256?個?ASCII?字符
- 一個?ASCII?在內存中占用?1 個字節?的空間
- 8?個?0/1?的排列組合方式一共有?256?種,也就是?2 ** 8
?
UTF-8?編碼格式
- 計算機中使用?1~6 個字節?來表示一個?UTF-8?字符,涵蓋了?地球上幾乎所有地區的文字
- 大多數漢字會使用?3 個字節?表示
- UTF-8?是?UNICODE?編碼的一種編碼格式
?Ptyhon 2.x 中如何使用中文
- Python 2.x 默認使用?ASCII?編碼格式
- Python 3.x 默認使用?UTF-8?編碼格式
- 在 Python 2.x 文件的?第一行?增加以下代碼,解釋器會以?utf-8?編碼來處理 python 文件
unicode 字符串(注意注意!!!)
- 在?Python 2.x?中,即使指定了文件使用?UTF-8?的編碼格式,但是在遍歷字符串時,仍然會?以字節為單位遍歷?字符串
- 要能夠?正確的遍歷字符串,在定義字符串時,需要?在字符串的引號前,增加一個小寫字母?u,告訴解釋器這是一個?unicode?字符串(使用?UTF-8?編碼格式的字符串)
5、eval?函數
eval()?函數十分強大 ——?將字符串?當成?有效的表達式?來求值 并?返回計算結果
# 基本的數學計算 In [1]: eval("1 + 1") Out[1]: 2# 字符串重復 In [2]: eval("'*' * 10") Out[2]: '**********'# 將字符串轉換成列表 In [3]: type(eval("[1, 2, 3, 4, 5]")) Out[3]: list# 將字符串轉換成字典 In [4]: type(eval("{'name': 'xiaoming', 'age': 18}")) Out[4]: dict5.1 案例 - 計算器
input_str = input("請輸入一個算術題:")print(eval(input_str))5.2 不要濫用?eval
在開發時千萬不要使用?eval?直接轉換?input?的結果
__import__('os').system('ls')- 等價代碼
- 執行成功,返回 0
- 執行失敗,返回錯誤信息
如果濫用eval(),輸入__import__('os').system('ls'),會顯示當前系統文件,那么如果我是刪除系統文件呢,不安全咯!
input_str = input("請輸入str:") print(eval(input_str))?
轉載于:https://www.cnblogs.com/tangxlblog/p/9879419.html
總結
以上是生活随笔為你收集整理的学习python第十天的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SDWebImage 加载Https自签
- 下一篇: Centos7之Gcc安装