黑马程序员最新Python教程——第一阶段(3)第二阶段(1)
黑馬程序員最新Python教程——第一階段(3)第二階段(1)
- 第一階段——第八章
- 01-文件編碼概念
- 02-文件的讀取操作
- 03-文件讀取的課后練習
- 04-文件的寫出操作
- 05-文件的追加寫入操作
- 06-文件的綜合案例
- 第一階段——第九章
- 01-了解異常
- 02-異常的捕獲
- 03-異常的傳遞性
- 04-模塊的概念和導入
- 05-自定義模塊并導入
- 06-自定義Python包
- 07-安裝第三方包
- 08-異常-模塊-包-綜合案例講解
- 第一階段——第十章
- 01-案例介紹
- 02-JSON數據格式的轉換
- 03-pyecharts模塊簡介
- 04-pyecharts的入門使用
- 05-數據準備
- 06-生成折線圖
- 第一階段——第十一章
- 01-數據可視化案例
- 02-全國疫情地圖構建
- 03-河南省疫情地圖繪制
- 第一階段——第十二章
- 01-基礎柱狀圖構建
- 02-基礎時間線柱狀圖繪制
- 03-動態GDP柱狀圖繪制
- 第二階段——第一章
- 01-初始對象
- 02-類的成員方法
- 03-類和對象
- 04-構造方法
- 05-魔術方法
- 06-封裝
- 07-封裝的課后練習題講解
- 08-繼承的基礎語法
- 09-復寫父類成員和調用父類成員
- 10-變量的類型注解
- 11-函數和方法類型注解
- 12-Union聯合類型注解
- 13-多態
- 14-數據分析案例步驟-文件讀取
- 15-數據分析案例步驟-數據計算
- 16-數據分析案例步驟-可視化開發
這是這個筆記的第三篇。
第一篇為黑馬程序員最新Python教程——第一階段(1)
第二篇為黑馬程序員最新Python教程——第一階段(2)
歡迎大家批評指正。
第一階段——第八章
01-文件編碼概念
思考:計算機只能識別: 0和1,那么我們豐富的文本文件是如何被計算機識別,并存儲在硬盤中呢?
答案:使用編碼技術(密碼本)將內容翻譯成0和1存入。
不同的編碼,將翻譯成二進制也是不同的。
1.什么是編碼?
編碼就是一種規則集合,記錄了內容和二進制間進行相互轉換的邏輯。編碼有許多中,我們最常用的是UTF-8編碼。
2.為什么需要使用編碼?
計算機只認識0和1,所以需要將內容翻譯成0和1才能保存在計算機中。同時也需要編碼,將計算機保存的0和1,反向翻譯回可以識別的內容。
02-文件的讀取操作
什么是文件?
內存中存放的數據在計算機關機后就會消失。要長久保存數據,就要使用硬盤、光盤、U盤等設備。為了便于數據的管理和檢索,引入了“文件”的概念。
一篇文章、一段視頻、一個可執行程序,都可以被保存為一一個文件,并賦予一一個文件名。操作系統以文件為單位管理磁盤中的數據。一般來說,文件可分為文本文件、視頻文件、音頻文件、圖像文件、可執行文件等多種類別。
文件操作包含哪些內容呢?
在日常生活中,文件操作主要包括打開、關閉讀、寫等操作。
文件的操作步驟
想想我們平常對文件的基本操作,大概可以分為三個步驟(簡稱文件操作三步走) :
open()打開函數
mode常用的三種基礎訪問模式
讀操作相關方法
測試案例:
readlines的方法
if __name__ == '__main__':#打開文件f= open("測試.txt","r",encoding="UTF-8")# 讀取文件- readLines()lines = f.readlines()# 讀取文件的全部行,封裝到列表中print(f"lines對象的類型: {type(lines)}") #<class 'list'>print(f"lines對象的內容是: {lines}") #這次就可以了 \n是換行符f.close()readline的方法
if __name__ == '__main__':#打開文件f= open("測試.txt","r",encoding="UTF-8")# 讀取文件- readline()line1 = f.readline()line2 = f.readline()line3 = f.readline()print(f"第一行數據是:{line1}")print(f"第二行數據是:{line2}")print(f"第三行數據是:{line3}")f.close()'''第一行數據是:黑馬程序員是傳智教育旗下高端IT教育品牌第二行數據是:成立至今以高品質教學質量贏得好口碑第三行數據是:為企業輸送了大批優質IT人才'''for循環讀取
if __name__ == '__main__':#打開文件f= open("測試.txt","r",encoding="UTF-8")# 讀取文件- readline()# for循環讀取文件行for line in f:print(f"每一行數據是:{line}")f.close()'''每一行數據是:黑馬程序員是傳智教育旗下高端IT教育品牌每一行數據是:成立至今以高品質教學質量贏得好口碑每一行數據是:為企業輸送了大批優質IT人才每一行數據是:致力于培養高級軟件I程師每一行數據是:現已開設10余個精品熱]學科每一行數據是:20所直營分校遍布全國每一行數據是:學Python來黑馬, 月薪過萬。'''為什么要關閉文件
利用with open語句 自動運行close 以免忘寫
03-文件讀取的課后練習
if __name__ == '__main__':f = open("word.txt","r",encoding="UTF-8")nums = 0for line in f:nums+=line.count("itheima")print("里面有 ",nums," 個itheima")04-文件的寫出操作
if __name__ == '__main__':f = open("123.txt","w",encoding="UTF-8")#當文件不存在時。它會給我自動創建#write寫入f.write("Helloworld!")#flush刷新f.flush()#close內置了flush的功能f.close()05-文件的追加寫入操作
if __name__ == '__main__':f = open("1234.txt","a",encoding="UTF-8")#當文件不存在時。它會給我自動創建#write寫入f.write("Helloworld!")#flush刷新f.flush()#close內置了flush的功能f.close()06-文件的綜合案例
需求分析:
第一階段——第九章
01-了解異常
什么是異常
當檢測到一個錯誤時,Python解釋 器就無法繼續執行了,反而出現了一些錯誤的提示,這就是所謂的“異常”,也就是我們常說的BUG
異常演示
02-異常的捕獲
為什么要捕獲異常
世界上沒有完美的程序,任何程序在運行的過程中,都有可能出現:異常,也就是出現bug導致程序無法完美運行下去。
我們要做的,不是力求程序完美運行。而是在力所能及的范圍內,對可能出現的bug,進行提前準備、提前處理。這種行為我們稱之為:異常處理(捕獲異常)
當我們的程序遇到了BUG,那么接下來有兩種情況:
①整個程序因為一個BUG停止運行
②對BUG進行提醒,整個程序繼續運行中
顯然在之前的學習中,我們所有的程序遇到BUG就會出現①的這種情況,也就是整個程序直接奔潰。
但是在真實工作中,我們肯定不能因為一個小的BUG就讓整個程序全部奔潰,也就是我們希望的是達到②的這種情況。
那這里我們就需要使用到捕獲異常。
捕獲異常的作用在于:提前假設某處會出現異常,做好提前準備,當真的出現異常的時候,可以有后續手段。
基本語法: 可以捕獲所有的異常!!!
try:可能發生錯誤的代碼 except:如果出現異常執行的代碼
由于不同類型的異常,處理方法可以不同。所以,我們可以捕獲不同類型的異常。
捕獲多個異常:
try:print(1/0) except (NameError, ZeroDivisionError):#元組print('ZeroDivision錯誤... if __name__ == '__main__':try:# 1/0print(name)except (NameError,ZeroDivisionError) as e:print("出現了變量未定義或者除以0的異常錯誤")'''出現了變量未定義或者除以0的異常錯誤'''異常的finally
03-異常的傳遞性
04-模塊的概念和導入
什么是模塊
Python模塊Modle),是一一個Python文件,以.py結尾、模塊能定 義函數,類和變量,模塊里也能包含可執行的代碼.
模塊的作用:python中有 很多各種不同的模塊,每- -個模塊都可以幫助我們快速的實現一些功能,比如實現和時間相關的功能就可以使用time模塊我們可以認為一個模塊就是一個工具包,每一個工具包中都有各種不同的工具供我們使用進而實現各種不同的功能。
大白話:模塊就是一個Python文件,里面有類、函數、變量等,我們可以拿過來用(導入模塊去使用)
模塊的導入方式
模塊在使用前需要先導入導入的語法如下:[from模塊名] import [模塊|類|變量|函數|*] [as別名]
常用的組合形式如:
05-自定義模塊并導入
再同級文件下創建my_modle1.py
在main.py中寫如下:
if __name__ == '__main__':# import my_modle1# my_modle1.add(1,2)# from my_modle1 import add# add(1,2)from my_modle1 import add as asdfasdasdasdfasdasd(1,2)
注意,__all__是列表!!!類似可以公開與不公開。但是它只會限制*的引用,如果你直接引用,也可以正常引用,所以最好不要類比public與private
06-自定義Python包
什么是Python包?
從物理上看,包就是一個文件夾,在該文件夾下包含了一個__init__ .py 文件,該文件夾可用于包含多個模塊文件
從邏輯上看,包的本質依然是模塊
包的作用:
當我們的模塊文件越來越多時,包可以幫助我們管理這些模塊,包的作用就是包含多個模塊,但包的本質依然是模塊。
你可以認為__init__.py是一個標志,當你創建一堆文件放到文件夾中,不放入__init__.py,他就是裝著各種.py的文件夾。如果包含__init__.py,說明該文件夾是一個包!
所以
當Python Package時,pycharm會新建功能模塊,自動創建__init__.py。
導入包
仔細看,LOGO不同。
07-安裝第三方包
我們知道,包可以包含一堆 的Python模塊,而每個模塊又內含許多的功能。
所以,我們可以認為:一個包,就是一堆同類型功能的集合體。
在Python程序的生態中,有許多非常多的第三方包(非Python官方),可以極大的幫助我們提高開發效率,如:
這些第三方的包,極大的豐富了python的生態。
但是由于是第三方,所以Python沒有內置,所以我們需要安裝它們才可以導入使用哦。
安裝第三方包- pip
第三方包的安裝非常簡單,我們只需要使用Python內置的pip程序即可。
打開我們許久未見的:命令提示符程序,在里面輸入:
pip install包名稱
即可通過網絡快速安裝第三方包
推薦直接安裝Anaconda 史上最全最詳細的Anaconda安裝教程
你可以理解成Anaconda 是一個環境,這個環境里面包含了絕大多數我們要的包 不用自己一個個下載。
怎么配置環境,大家可以查看這個大佬的文章介紹超詳細~Windows下PyCharm配置Anaconda環境教程
或者自己一個一個在pycharm里面找,為什么要在紅框位置輸入這個網站,因為這些第三方包都是國外的,下載會超級慢,所以我們加一個網站(鏡像源)到國內下載就快了。
08-異常-模塊-包-綜合案例講解
案例要求:
main.py
str_util.py
def str_reverse(s):s = s[::-1]return sdef substr(s,x,y):s_list = s[x:y]return s_listfile_util.py
def print_file_info(file_name):f = Nonetry:f = open(file_name,"r",encoding="UTF-8")for line in f:print(line)except:print("文件不存在")finally:if f:f.close()def append_to_file(file_name,data):f = open(file_name,"a",encoding="UTF-8")f.write(data)f.close()第一階段——第十章
01-案例介紹
02-JSON數據格式的轉換
什么是json
主要功能: json就是 一種在各個編程語言中流通的數據格式,負責不同編程語言中的數據傳遞和交互、類似于:
json有什么用
各種編程語言存儲數據的容器不盡相同,在Python中有字典dict這樣的數據類型,而其它語言可能沒有對應的字典
為了讓不同的語言都能夠相互通用的互相傳遞數據,JSON就是一種非常良好的中轉數據格式。如下圖,以Python和C語言互傳數據為例:
03-pyecharts模塊簡介
pyecharts模塊 :如果想要 做出數據可視化效果圖,可以借助pyecharts模塊來完成
概況:
Echarts是個由百度開源的數據可視化,憑借著良好的交互性,精巧的圖表設計,得到了眾多開發者的認可.而Python是門富有表達力的語言,很適合用于數據處理.當數據分析遇上數據可視化時pyecharts誕生了。
pyecharts.org
還有一個畫廊功能:gallery.pyecharts.org
pyecharts模塊的安裝:pip install pyecharts
04-pyecharts的入門使用
from pyecharts.charts import Line if __name__ == '__main__':# 導包,導入Line功能構建折線圖對象# 得到折線圖對象line = Line()# 添加x軸數據line.add_xaxis(["中國","美國","英國"])# 添加y軸數據line.add_yaxis("GDP", [30,20,10])# 生成圖表line.render()'''
pyecharts有哪些配置選項
pyecharts模塊中有 很多的配置選項,常用到2個類別的選項:
全局配置選項
系列配置選項
想要一個好看的圖?復制粘貼吧!
05-數據準備
鏈接:https://pan.baidu.com/s/1fP4riRd3k_J6NQFwIznxeQ
提取碼:xq8g
06-生成折線圖
""" 演示可視化需求1:折線圖開發 """ import json from pyecharts.charts import Line from pyecharts.options import TitleOpts, LabelOpts# 處理數據 f_us = open("D:/美國.txt", "r", encoding="UTF-8") us_data = f_us.read() # 美國的全部內容f_jp = open("D:/日本.txt", "r", encoding="UTF-8") jp_data = f_jp.read() # 日本的全部內容f_in = open("D:/印度.txt", "r", encoding="UTF-8") in_data = f_in.read() # 印度的全部內容# 去掉不合JSON規范的開頭 us_data = us_data.replace("jsonp_1629344292311_69436(", "") jp_data = jp_data.replace("jsonp_1629350871167_29498(", "") in_data = in_data.replace("jsonp_1629350745930_63180(", "")# 去掉不合JSON規范的結尾 us_data = us_data[:-2] jp_data = jp_data[:-2] in_data = in_data[:-2]# JSON轉Python字典 us_dict = json.loads(us_data) jp_dict = json.loads(jp_data) in_dict = json.loads(in_data)# 獲取trend key us_trend_data = us_dict['data'][0]['trend'] jp_trend_data = jp_dict['data'][0]['trend'] in_trend_data = in_dict['data'][0]['trend']# 獲取日期數據,用于x軸,取2020年(到314下標結束) us_x_data = us_trend_data['updateDate'][:314] jp_x_data = jp_trend_data['updateDate'][:314] in_x_data = in_trend_data['updateDate'][:314]# 獲取確認數據,用于y軸,取2020年(到314下標結束) us_y_data = us_trend_data['list'][0]['data'][:314] jp_y_data = jp_trend_data['list'][0]['data'][:314] in_y_data = in_trend_data['list'][0]['data'][:314]# 生成圖表 line = Line() # 構建折線圖對象 # 添加x軸數據 line.add_xaxis(us_x_data) # x軸是公用的,所以使用一個國家的數據即可 # 添加y軸數據 line.add_yaxis("美國確診人數", us_y_data, label_opts=LabelOpts(is_show=False)) # 添加美國的y軸數據 line.add_yaxis("日本確診人數", jp_y_data, label_opts=LabelOpts(is_show=False)) # 添加日本的y軸數據 line.add_yaxis("印度確診人數", in_y_data, label_opts=LabelOpts(is_show=False)) # 添加印度的y軸數據# 設置全局選項 line.set_global_opts(# 標題設置title_opts=TitleOpts(title="2020年美日印三國確診人數對比折線圖", pos_left="center", pos_bottom="1%") )# 調用render方法,生成圖表 line.render() # 關閉文件對象 f_us.close() f_jp.close() f_in.close()第一階段——第十一章
01-數據可視化案例
""" 演示地圖可視化的基本使用 """ from pyecharts.charts import Map from pyecharts.options import VisualMapOpts# 準備地圖對象 map = Map() # 準備數據 data = [("北京", 99),("上海", 199),("湖南", 299),("臺灣", 399),("廣東", 499) ] # 添加數據 map.add("測試地圖", data, "china")# 設置全局選項 map.set_global_opts(visualmap_opts=VisualMapOpts(is_show=True,is_piecewise=True,pieces=[{"min": 1, "max": 9, "label": "1-9", "color": "#CCFFFF"},{"min": 10, "max": 99, "label": "10-99", "color": "#FF6666"},{"min": 100, "max": 500, "label": "100-500", "color": "#990033"}]) )# 繪圖 map.render()02-全國疫情地圖構建
""" 演示全國疫情可視化地圖開發 """ import json from pyecharts.charts import Map from pyecharts.options import *# 讀取數據文件 f = open("D:/疫情.txt", "r", encoding="UTF-8") data = f.read() # 全部數據 # 關閉文件 f.close() # 取到各省數據 # 將字符串json轉換為python的字典 data_dict = json.loads(data) # 基礎數據字典 # 從字典中取出省份的數據 province_data_list = data_dict["areaTree"][0]["children"] # 組裝每個省份和確診人數為元組,并各個省的數據都封裝入列表內 data_list = [] # 繪圖需要用的數據列表 for province_data in province_data_list:province_name = province_data["name"] # 省份名稱province_confirm = province_data["total"]["confirm"] # 確診人數data_list.append((province_name, province_confirm))# 創建地圖對象 map = Map() # 添加數據 map.add("各省份確診人數", data_list, "china") # 設置全局配置,定制分段的視覺映射 map.set_global_opts(title_opts=TitleOpts(title="全國疫情地圖"),visualmap_opts=VisualMapOpts(is_show=True, # 是否顯示is_piecewise=True, # 是否分段pieces=[{"min": 1, "max": 99, "lable": "1~99人", "color": "#CCFFFF"},{"min": 100, "max": 999, "lable": "100~9999人", "color": "#FFFF99"},{"min": 1000, "max": 4999, "lable": "1000~4999人", "color": "#FF9966"},{"min": 5000, "max": 9999, "lable": "5000~99999人", "color": "#FF6666"},{"min": 10000, "max": 99999, "lable": "10000~99999人", "color": "#CC3333"},{"min": 100000, "lable": "100000+", "color": "#990033"},]) ) # 繪圖 map.render("全國疫情地圖.html")03-河南省疫情地圖繪制
""" 演示河南省疫情地圖開發 """ import json from pyecharts.charts import Map from pyecharts.options import *# 讀取文件 f = open("D:/疫情.txt", "r", encoding="UTF-8") data = f.read() # 關閉文件 f.close() # 獲取河南省數據 # json數據轉換為python字典 data_dict = json.loads(data) # 取到河南省數據 cities_data = data_dict["areaTree"][0]["children"][3]["children"]# 準備數據為元組并放入list data_list = [] for city_data in cities_data:city_name = city_data["name"] + "市"city_confirm = city_data["total"]["confirm"]data_list.append((city_name, city_confirm))# 手動添加濟源市的數據 data_list.append(("濟源市", 5))# 構建地圖 map = Map() map.add("河南省疫情分布", data_list, "河南") # 設置全局選項 map.set_global_opts(title_opts=TitleOpts(title="河南省疫情地圖"),visualmap_opts=VisualMapOpts(is_show=True, # 是否顯示is_piecewise=True, # 是否分段pieces=[{"min": 1, "max": 99, "lable": "1~99人", "color": "#CCFFFF"},{"min": 100, "max": 999, "lable": "100~9999人", "color": "#FFFF99"},{"min": 1000, "max": 4999, "lable": "1000~4999人", "color": "#FF9966"},{"min": 5000, "max": 9999, "lable": "5000~99999人", "color": "#FF6666"},{"min": 10000, "max": 99999, "lable": "10000~99999人", "color": "#CC3333"},{"min": 100000, "lable": "100000+", "color": "#990033"},]) )# 繪圖 map.render("河南省疫情地圖.html")第一階段——第十二章
01-基礎柱狀圖構建
""" 演示基礎柱狀圖的開發 """ from pyecharts.charts import Bar from pyecharts.options import LabelOpts # 使用Bar構建基礎柱狀圖 bar = Bar() # 添加x軸的數據 bar.add_xaxis(["中國", "美國", "英國"]) # 添加y軸數據 bar.add_yaxis("GDP", [30, 20, 10], label_opts=LabelOpts(position="right")) # 反轉x和y軸 bar.reversal_axis() # 繪圖 bar.render("基礎柱狀圖.html")# 反轉x軸和y軸# 設置數值標簽在右側02-基礎時間線柱狀圖繪制
""" 演示帶有時間線的柱狀圖開發 """ from pyecharts.charts import Bar, Timeline from pyecharts.options import LabelOpts from pyecharts.globals import ThemeTypebar1 = Bar() bar1.add_xaxis(["中國", "美國", "英國"]) bar1.add_yaxis("GDP", [30, 30, 20], label_opts=LabelOpts(position="right")) bar1.reversal_axis()bar2 = Bar() bar2.add_xaxis(["中國", "美國", "英國"]) bar2.add_yaxis("GDP", [50, 50, 50], label_opts=LabelOpts(position="right")) bar2.reversal_axis()bar3 = Bar() bar3.add_xaxis(["中國", "美國", "英國"]) bar3.add_yaxis("GDP", [70, 60, 60], label_opts=LabelOpts(position="right")) bar3.reversal_axis()# 構建時間線對象 timeline = Timeline({"theme": ThemeType.LIGHT}) # 在時間線內添加柱狀圖對象 timeline.add(bar1, "點1") timeline.add(bar2, "點2") timeline.add(bar3, "點3")# 自動播放設置 timeline.add_schema(play_interval=1000,is_timeline_show=True,is_auto_play=True,is_loop_play=True )# 繪圖是用時間線對象繪圖,而不是bar對象了 timeline.render("基礎時間線柱狀圖.html") """ 擴展列表的sort方法 在學習了將函數作為參數傳遞后,我們可以學習列表的sort方法來對列表進行自定義排序 """# 準備列表 my_list = [["a", 33], ["b", 55], ["c", 11]]# 排序,基于帶名函數 # def choose_sort_key(element): # return element[1] # # my_list.sort(key=choose_sort_key, reverse=True) # 排序,基于lambda匿名函數 my_list.sort(key=lambda element: element[1], reverse=True)print(my_list)03-動態GDP柱狀圖繪制
""" 演示第三個圖表:GDP動態柱狀圖開發 """ from pyecharts.charts import Bar, Timeline from pyecharts.options import * from pyecharts.globals import ThemeType# 讀取數據 f = open("D:/1960-2019全球GDP數據.csv", "r", encoding="GB2312") data_lines = f.readlines() # 關閉文件 f.close() # 刪除第一條數據 data_lines.pop(0) # 將數據轉換為字典存儲,格式為: # { 年份: [ [國家, gdp], [國家,gdp], ...... ], 年份: [ [國家, gdp], [國家,gdp], ...... ], ...... } # { 1960: [ [美國, 123], [中國,321], ...... ], 1961: [ [美國, 123], [中國,321], ...... ], ...... } # 先定義一個字典對象 data_dict = {} for line in data_lines:year = int(line.split(",")[0]) # 年份country = line.split(",")[1] # 國家gdp = float(line.split(",")[2]) # gdp數據# 如何判斷字典里面有沒有指定的key呢?try:data_dict[year].append([country, gdp])except KeyError:data_dict[year] = []data_dict[year].append([country, gdp])# print(data_dict[1960]) # 創建時間線對象 timeline = Timeline({"theme": ThemeType.LIGHT}) # 排序年份 sorted_year_list = sorted(data_dict.keys()) for year in sorted_year_list:data_dict[year].sort(key=lambda element: element[1], reverse=True)# 取出本年份前8名的國家year_data = data_dict[year][0:8]x_data = []y_data = []for country_gdp in year_data:x_data.append(country_gdp[0]) # x軸添加國家y_data.append(country_gdp[1] / 100000000) # y軸添加gdp數據# 構建柱狀圖bar = Bar()x_data.reverse()y_data.reverse()bar.add_xaxis(x_data)bar.add_yaxis("GDP(億)", y_data, label_opts=LabelOpts(position="right"))# 反轉x軸和y軸bar.reversal_axis()# 設置每一年的圖表的標題bar.set_global_opts(title_opts=TitleOpts(title=f"{year}年全球前8GDP數據"))timeline.add(bar, str(year))# for循環每一年的數據,基于每一年的數據,創建每一年的bar對象 # 在for中,將每一年的bar對象添加到時間線中# 設置時間線自動播放 timeline.add_schema(play_interval=1000,is_timeline_show=True,is_auto_play=True,is_loop_play=False ) # 繪圖 timeline.render("1960-2019全球GDP前8國家.html")第二階段——第一章
01-初始對象
首先,我們為什么要引入對象呢? 讓我們發現痛點!!
使用變量記錄數據太亂了。如果程序中也和生活中一樣,可以設計表格,可以將設計的表格打印出來,可以將打印好的表格供人填寫內容,那么數據的組織就非常方便了。
我們知道了這個痛點,那么好,我們引入對象,使用對象來組織數據!
02-類的成員方法
類的定義和使用
在上一節中,我們簡單了解到可以使用類去封裝屬性,并基于類創建出一一個個的對象來使用。
現在我們來看看類的使用語法:
●class是關鍵字, 表示要定義類了
●類的屬性,即定義在類中的變量(成員變量)
● 類的行為, 即定義在類中的函數(成員方法)
創建類對象的語法對象=類名稱()
類內部的函數叫(成員)方法,不叫函數。
成員方法的定義語法
可以看到,在傳入參數的時間,self是透明的,可以不用理會他。
if __name__ == '__main__':# 1.設計一個類(類比生活中:設計一張登記表)class Student:name = None # 記錄學生姓名def say_hi(self):print("he",self.name)s1 = Student()s1.name = "wnm"s1.say_hi()#he wnm03-類和對象
基于類創建對象的語法:對象名=類名稱()
為什么非要創建對象才能使用呢?
類只是一種程序內的“設計圖紙”,需要基于圖紙生產實體(對象),才能正常工作,面向對象編程!!!!
設計類——就是讓類干活!
下面代碼有聲音歐 耳機黨小心!!!!!
04-構造方法
構造方法:
當寫了構造函數:可以下面:
05-魔術方法
__ str __
__ le __ (小于等于) 和__ eq __(等于)類似
06-封裝
面向對象的三大特性
面向對象編程,是許多編程語言都支持的一種編程思想。
簡單理解是:基于模板(類)去創建實體(對象) ,使用對象完成功能開發。
面向對象包含3大主要特性:
?封裝
?繼承
?多態
封裝
所以會有平果越獄和俺卓root的行為,我們想獲取他不想讓我們看到的東西。
1.封裝的概念是指?
將現實世界事物在類中描述為屬性和方法,即為封裝。
2.什么是私有成員?為什么需要私有成員?
現實事物有部分屬性和行為是不公開對使用者開放的。同樣在類中描述
屬性和方法的時候也需要達到這個要求,就需要定義私有成員了
3.如何定義私有成員?
成員變量和成員方法的命名均以__作為開頭即可
4.私有成員的訪問限制?
類對象無法訪問私有 成員
類中的其它成員可以訪問私有成員
07-封裝的課后練習題講解
案例分析:
08-繼承的基礎語法
繼承的引出:
單繼承:
其中pass關鍵字是補全語法。讓語法補充,避免錯誤。當輸出同名屬性時,以前面為準,聽大爸的。
09-復寫父類成員和調用父類成員
什么是復寫
調用父類的同名成員
10-變量的類型注解
11-函數和方法類型注解
函數和方法的形參類型注解語法:
同時,函數(方法)的返回值也是可以添加類型注解的。
12-Union聯合類型注解
Union類型
使用Union[類型,類型…]
13-多態
抽象類可以理解成標準(框架。提出的要求)!什么意思?就是告訴人們,我有這個功能,自己(父類)不實現,但是他的子類必須實現,要不這個要求就是沒有實現。
14-數據分析案例步驟-文件讀取
鏈接:https://pan.baidu.com/s/1Up95mikhWrB_ubBE_uxToA
提取碼:qli8
大家先下載數據再測試案例嗷!
文件截圖如下:
data_ define.py
file_ define.py
import jsonfrom data_define import Recordclass FileReader:def read_data(self) :passclass TextFileReader(FileReader):def __init__(self,path):self.path = pathdef read_data(self):f = open(self.path,"r",encoding="UTF-8")record_list = []for line in f.readlines():line = line.strip() #消除反斜杠ndata_list = line.split(",")record= Record(data_list[0],data_list[1],int (data_list[2]),data_list[3])record_list.append(record)f.close()return record_list #list[Record]class JsonFileReader(FileReader):def __init__(self,path):self.path = pathdef read_data(self) :f = open(self.path,"r",encoding="UTF-8")record_list = []for line in f.readlines():data_dict = json.loads(line)record = Record(data_dict["date"],data_dict["order_id"],int(data_dict["money"]),data_dict["province"])record_list.append(record)#list[Record]f.close()return record_listif __name__ == '__main__':text_file_reader = TextFileReader("2011年1月銷售數據.txt")json_file_reader = JsonFileReader("2011年2月銷售數據JSON.txt")list1 = text_file_reader.read_data()list2 = json_file_reader.read_data()for l in list1:print(l)for l in list2:print(l)15-數據分析案例步驟-數據計算
main.py
from file_define import FileReader,TextFileReader,JsonFileReader from data_define import Recordtext_file_reader = TextFileReader("2011年1月銷售數據.txt") json_file_reader = JsonFileReader("2011年2月銷售數據JSON.txt")jan_data = text_file_reader.read_data() #list[Record] feb_data = json_file_reader.read_data()#list[Record]all_data = jan_data+feb_data #list[Record]data_dict = {} for record in all_data:if record.date in data_dict.keys():# 當前日期已經有記錄了,所以和老記錄做累加即可data_dict[record.date] += record. moneyelse:data_dict[record.date] = record. money print(data_dict)16-數據分析案例步驟-可視化開發
from file_define import FileReader,TextFileReader,JsonFileReader from data_define import Record from pyecharts.charts import Bar from pyecharts.globals import ThemeType from pyecharts.options import TitleOptstext_file_reader = TextFileReader("2011年1月銷售數據.txt") json_file_reader = JsonFileReader("2011年2月銷售數據JSON.txt")jan_data = text_file_reader.read_data() #list[Record] feb_data = json_file_reader.read_data()#list[Record]all_data = jan_data+feb_data #list[Record]data_dict = {} for record in all_data:if record.date in data_dict.keys():# 當前日期已經有記錄了,所以和老記錄做累加即可data_dict[record.date] += record. moneyelse:data_dict[record.date] = record. moneybar = Bar()bar.add_xaxis(list(data_dict.keys())) bar.add_yaxis("銷售額",list(data_dict.values())) bar.set_global_opts(title_opts = TitleOpts(title="每日銷售額") ) bar.render("每日銷售額柱狀圖.html")
main.py
總結
以上是生活随笔為你收集整理的黑马程序员最新Python教程——第一阶段(3)第二阶段(1)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: figma下载_迁移至Figma
- 下一篇: 前端学习(2911):cdn的加速策略