注:工作之餘,學習一門腳本語言,選擇了當下火熱的Python。2020-05-27日開始學習Python基礎語法,期間參考《Python編程從入門到實踐——Eric Matthes著》一書,對書中涉及的部分語法、python關鍵字、內置函數、庫等進行試驗,在此做一簡單記錄,以備往後溫故知新。在函數/函數參數中,[]表示可選;<>表示必選;xxx.fun()表示對象方法;fun()表示內置函數。
目錄
【2】2020-05-27:My First Logic Test
【4】2020-05-28:列表簡介與列表元素增、刪、改、排序測試
【5】2020-05-29:列表遍歷、for循環、range()內置函數、列表解析、切片、深淺拷貝、元組
【6】2020-05-29:對於【2】遍歷IP地址的代碼重構
【7】2020-05-30:對於if條件語句以及相關關鍵字的使用
【8】2020-05-30:字典定義與遍歷、增刪改查、字典與列表嵌套
【9】2020-05-30:while、continue、break的使用,input()的使用以及字典的鞏固
【10】2020-05-30:python函數、模塊、參數列表、以及相關內置函數的使用
【11】2020-05-31:基於前面所學,編寫的基礎版本圖書管理系統
【13】2020-05-30:文件讀寫、try...except異常處理,JSON文件操作
【14】2020-06-01:測試代碼,主要是Python的測試類簡單使用瞭解
【15】Python的常用方法、函數、庫、類等總結(時常更新):
【1】2020-05-27:Hellow Python
github: hello_python.p
涉及:print()內置函數的使用。
【2】2020-05-27:My First Logic Test
github: ip_addr_loop.py
涉及:import time、while循環、time.sleep()、str()內置函數的使用。
【3】2020-05-28:簡單數據類型
github: test_03_str_int_float.p
涉及:字符串的定義('',“”,'\'三符號在字符串表達中的使用方式);string.title()、string.upper()、string.lower()的使用;字符串的拼接“+”的使用;刪除多餘空白方法lstrip()、rstrip()、strip()的使用;+、-、*、/、**(乘方)、%運算符的使用;浮點數、整數、字符串的混合使用與運算等,以及python之禪。
【4】2020-05-28:列表簡介與列表元素增、刪、改、排序測試
github: test_04_list_operator_1.py
涉及:列表的格式與定義;list.append([data])、list.reverse()、list.insert([index], <data>)、list.pop([index])、list.remove([data])、list.sort([reverse=True])方法的使用;len(<list>)、sorted(<list>, [reverse=True])內置函數的使用;del、while、if、or等關鍵字的使用。
【5】2020-05-29:列表遍歷、for循環、range()內置函數、列表解析、切片、深淺拷貝、元組
github: test_04_list_operator_2.py
涉及:二維列表的格式與定義、訪問;全局變量和局部變量的使用以及注意點描述;def、global、if、is、“for ... in ... :”、關鍵字使用;list()、range(start, end [,step])、min()、max()、sum()、id()、hex()等內置函數的使用;列表切片list[start:end]、list[start:]、list[:end]、list[:]以及列表解析:list = [(value ** 2) for value in range(1,20,2)]、for value in list[-10:]的靈活應用;列表的引用(淺拷貝)和副本(深拷貝)測試;元組和局部變量賦值的差異以及id()查看差異的方法測試。
【6】2020-05-29:對於【2】遍歷IP地址的代碼重構
github: test_04_list_ip_addr_loop.py
涉及:for value in range():在【2】例程代碼重構中的使用。
【7】2020-05-30:對於if條件語句以及相關關鍵字的使用
github:test_05_if_elif_else.py
涉及:if、if ... elif ... else語句的簡單測試,關於in、not in在if語句中的使用,以及in配合for循環的使用;is 、 and 、 not ... is ...測試以及is和==的區別(is表示判斷對象id是否相等,==表示判斷對象值是否相等),對應的 not ... is ... 和 != 也有類似區別;Ture和Flase的測試以及其對象類型爲BOOL,不像C中BOOL其實就是整型數據。
【8】2020-05-30:字典定義與遍歷、增刪改查、字典與列表嵌套
github:test_06_dictionary.py 【2020年6月1日00:02:55使用json進行優化】
涉及:字典的語法,key-value格式,key是唯一的,而value是不唯一的,不同key可能有同一個value,key一般取整數、字符串等,而value可以是任何對象類型(數字、字符串、列表、字典等);字典的遍歷:dict.items()、key的遍歷:dict.keys()、value的遍歷dict.values()、由於value涉及重複,因此會用set()內置函數剔除重複元素,而字典是無序的,可以通過sorted()內置函數對dict.keys()進行排序等操作,基本操作如下(詳細測試見github):
#***********************************************************************
#字典索引: dict[key]
#字典遍歷:
# 遍歷key-vlaue鍵值對--> for k,v in dict.items():
# 遍歷key--> for k in dict.keys():
# 遍歷value--> for v in set(dict.values()):
#我們可以用
# if xxx not in dict.keys():
# if xxx in dict.keys():
# 來確定某個key是否在字典的現有key裏
# 因爲dict.keys()、dict.values()實際上都是獲取一個列表
#set()內置函數用來提供一個集合,集合中所有元素都是唯一的,即剔除重複值
#***********************************************************************
【9】2020-05-30:while、continue、break的使用,input()的使用以及字典的鞏固
github:test_07_while_input.py
涉及:while、continue、break的相關關鍵字(基本沒啥看的,只是和其他語言的格式不一樣罷了),input()獲取用戶輸入的函數測試,input([User input information])函數用於獲取用戶輸入,返回值爲用戶輸入string,括號內可以輸出提示信息,提示信息後爲用戶輸入空間,回車結束,直接回車則返回""。此外涉及int()、float()、long()等內置函數。這一節主要是一些結構:列表、字典、循環、遍歷等的綜合應用,鞏固了之前所學。
【10】2020-05-30:python函數、模塊、參數列表、以及相關內置函數的使用
github:test_08_function.py
涉及:python函數與def、return等 關鍵字,模塊導出與import、as等關鍵字;默認形參、可變參數列表、制度參數列表(通過完全副本實現,導致效率低下,所以一般由函數自行保證內部只讀); isinstance(<value>, <type>)和type(<value>, <type>)的區別與使用等。
#-----------------------------------------------------------------------
#可變個數參數列表
#通過"*para_list"來實現,通過元組將可變參數列表封裝並傳遞
#判斷參數類型的內置函數:
# isinstance(<value>, <type>)
# type(<value>, <type>)
# 如:isinstance(10,int)判斷10是否是int的整數,返回True
# isinstance和type的區別在:
# 1、type是用來獲取類型的,isinstance是用來判斷類型的;
# 2、type() 不會認爲子類是一種父類類型,不考慮繼承關係,
# 而isinstance() 會認爲子類是一種父類類型,考慮繼承關係
#-----------------------------------------------------------------------
#-----------------------------------------------------------------------
#模塊導入、函數導入:
# 有一個文件:module_name.py
# "import module_name" 即可導入該文件(模塊)
# "module_name.function()"來使用其中的函數
# 要是指向導入部分函數,則可以使用:
# "from import module_name fun1, fun2, fun3, ..."
# 按如上方式導入個別函數,則可以直接使用函數名,不需要"module_name."
# 若導入個別函數與本文件函數名衝突,
# 可在導入的時候用as關鍵字爲該導入的函數指定別名,
# 如果不想用"module_name."調用函數,但是所有函數都要導出,
# 不可能一個個導出,則使用:"import module_name *"來導出所有函數
# 同樣可以給模塊指定別名,以更合適的名字來操作模塊中的函數
# 指定別名後,原名字不能直接使用,除非重新導入原名字
# 規範:import儘量放在文件開頭(不包括開頭註釋等)
#-----------------------------------------------------------------------
【11】2020-05-31:基於前面所學,編寫的基礎版本圖書管理系統
github:test_08_book_management.py
涉及:①函數/方法:前面所學print()、input()、int()、float()、str()、abs()、sleep()、isinstance()、str.strip()、str.upper()、dict.keys()、dict.items()、dict.values()、value.isdigit()等系統內置函數/方法、庫函數、以及自定義函數;②關鍵字:if、elif、else、for、in、while、return、def、continue、break、not、or、and、False、True、as、import、del、from、is、try、except等關鍵字;③數據類型:整數、浮點數、字符串、列表、字典、以及多種數據結構的嵌套使用;④知識點:主要是列表、字典的結構組織方式、操作方法以及函數的定義與使用。
【12】2020-05-31:Python中類的使用
github:test_09_class.py、test_09_class_equip.py、test_09_class_role.py
涉及:Python2.7和Python3.8中關於父類、子類的定義與使用,包括__init__()初始化函數、self的使用,子類繼承父類,子類重寫父類方法、基於模塊化的類,類的import和標準類庫collections.OrderedDict的使用等。
#-----------------------------------------------------------------------
#類的繼承:
# 1、B繼承A則必須保證A在B之前聲明
# 2、父類A也稱爲超類(supercalss),因此在子類的__init__()中,
# 應該調用super().__init__()先完成對父類的初始化,再初始化子類自己
# 3、類名用駝峯命名法,函數用下劃線命名法
#
# 4、python3.8父類和子類創建語法:
# class Father():
# def __init__(self, pa, pb, pc)
# ......
# class Son(Father):
# def __init__(self, pa, pb, pc, pd, pe)
# super().__init__(pa, pb, pc)
# ......
#
# 5、python2.7父類和子類創建語法:
# (創建子類會給父類傳遞self,幫助python把父子類關聯起來):
# class Father(object):
# def __init__(self, pa, pb, pc)
# ......
# class Son(Father):
# def __init__(self, pa, pb, pc, pd, pe)
# super(Son, self).__init__(pa, pb, pc)
# ......
#-----------------------------------------------------------------------
【13】2020-05-30:文件讀寫、try...except異常處理,JSON文件操作
github:文件打開讀寫操作、異常處理、JSON數據dump和load操作
涉及:①文件的打開、關閉、讀寫等操作:open()、close()、read()、write()、readline()、readlines();文件路徑注意點(對於Windows中的路徑符號'\'可能會被識別爲轉義符號,因此可能需要自行對'\'進行轉義);關於"with open() as obj"操作的使用,replace()函數的使用、read()和readlines()的區別,前者返回字符串,後者返回列表,對於字符串可用split()函數,對於列表就用不了了。②異常的處理,包括try、except、else、pass的使用,split()函數的使用,以及常見異常:FileNotFoundError、ZeroDivisionError、TypeError、NameError、ValueError等;③基於JSON類庫的dump和load操作,可以用來保存數據到文件中,或者從文件中解析數據。保存是帶格式的,解析要格式對應。
優化以往代碼(在退出時使用json類保存書店的字典信息,在啓動時從保存的json文件中再按字典將歷史數據讀取出來,注意保存和讀取時指定編碼方式,此外讀取時先讀取到字符串中,再解析字符串):
#-----------------------------------------------------------------------
#功能函數:退出書店,系統總入口
#-----------------------------------------------------------------------
def book_quit_sys(customer_name, file_name):
global g_book_set
book_set = g_book_set
try:
with open(file_name, 'w', encoding='utf-8') as file_object:
print("-------------------------------------")
print(customer_name + "正在退出圖書管理系統,請稍等!")
json.dump(book_set, file_object)
print("-------------------------------------")
print("json dump dictionary to " + file_name + " succeed!")
except FileNotFoundError:
print(file_name + "file or dirctory is not exist")
#-----------------------------------------------------------------------
#功能函數:進入書店,初始化系統總入口
#-----------------------------------------------------------------------
def book_system_init(customer_name='', file_name=''):
global g_book_set
try:
with open(file_name, 'r', encoding='utf-8') as file_object:
print("-------------------------------------")
print(customer_name + "正在初始化圖書管理系統,請稍等!")
print("-------------------------------------")
json_str = file_object.read()
if len(json_str) > 0:
g_book_set = json.loads(json_str)
print("json load dictionary to " + file_name + " succeed!")
else:
print("沒有庫存數據!!")
except FileNotFoundError:
print(file_name + "file or dirctory is not exist")
【14】2020-06-01:測試代碼,主要是Python的測試類簡單使用瞭解
github:基於圖書管理系統的python測試類簡單使用
涉及:Python的unittest類的使用。
#-----------------------------------------------------------------------
#圖書管理系統的簡單測試用例
#覈實結果爲 a == b :assertEqual(a,b)
#覈實結果爲 a != b :assertNotEqual(a,b)
#覈實結果爲 True :assertTrue(a)
#覈實結果爲 False :assertFalse(a)
#覈實item在list中 :assertIn(item,list)
#覈實item不再list中 :assertNotIn(item,list)
#每一個函數都可以創建多個用例,避免程序修改後需要手動一個個去測試
#但是這種測試方法是白盒測試,針對函數/類,可以直接訪問程序的數據
#-----------------------------------------------------------------------
Python基礎語法已經學習完畢(2020年6月1日22:52:48)
【15】Python的常用方法、函數、庫、類等總結(時常更新):
1、常見字符串類型判斷方法:
s.isalnum() #所有字符都是數字或者字母,爲真返回 Ture,否則返回 False。
s.isalpha() #所有字符都是字母,爲真返回 Ture,否則返回 False。
s.isdigit() #所有字符都是數字,爲真返回 Ture,否則返回 False。
s.islower() #所有字符都是小寫,爲真返回 Ture,否則返回 False。
s.isupper() #所有字符都是大寫,爲真返回 Ture,否則返回 False。
s.istitle() #所有單詞都是首字母大寫,爲真返回 Ture,否則返回 False。
s.isspace() #所有字符都是空白字符,爲真返回 Ture,否則返回 False。
2、需求驅動學習之子串判斷:
#需求驅動學習:
#1、查找字符串裏是否存在指定子串,如果指定begin和end範圍,則檢查是否包含在指定範圍內,
#如果包含子字符串返回開始的索引值,否則返回-1。這個會在刪除指定串開始到指定串之間的文本時會用到
#(比如最近項目需求刪除源文件中函數頭部統一格式的註釋信息,只保留對外頭文件的一份註釋,
#由於適配層文件較多,這種情況就可以寫個腳本批量操作,節省許多不必要的時間),雖然正則可能會更方便,
#但是暫時不熟悉正則~.~,改天做個學習專題。
import string
string.find(str, beg=0, end=len(str))
3、需求驅動學習之迭代器:
#2、迭代器模塊( 爲高效循環而創建迭代器的函數)
#全排列和全組合函數
from itertools import permutations
from itertools import combinations
應用參見:基於撲克的24算式
關於itertools的更詳細描述與使用參見:itertools --- 爲高效循環而創建迭代器的函數
4、Pygame遊戲庫
#-----------------------------------------------------------------------
#前期工作:確保python安裝、pygame安裝
#升級pip(不升級也可以,只要確保安裝了pip即可)
# python -m pip install --upgrade pip
#查看version
# python -m pip --version
#執行下載安裝pygame模塊操作
# python -m pip install pygame
#關於pygame的使用可參考:
# https://www.pygame.org/
#-----------------------------------------------------------------------
相關資料:GITHUB 、 Pygame DOCS
《Python編程從入門到實踐》遊戲練習:alien_invasion
5、Matplotlib數學繪圖庫、Pygal繪圖庫
#-----------------------------------------------------------------------
#前期工作:確保python安裝、matplotlib、pygal安裝
#升級pip(不升級也可以,只要確保安裝了pip即可)
# python -m pip install --upgrade pip
#查看version
# python -m pip --version
#執行下載安裝matplotlib、pygal模塊操作
# python -m pip install matplotlib
# python -m pip install pygal
#
#關於matplotlib的、pygal使用可參考:
# https://matplotlib.org
# https://matplotlib.org/contents.html
# https://http://www.pygal.org
#-----------------------------------------------------------------------
相關資料:matplotlib官網學習資料、pygal官網學習資料(例程)
《Python編程從入門到實踐》相關練習:data_view