异常的传递性
传递性示例:
def func1():
print("func1 begin")
num = 1/0
print("func1 end")
def func2():
print("func2 begin")
func1()
print("func2 end")
def main():
func2()
main()
'''
func2 begin
func1 begin
Traceback (most recent call last):
File "d:\CODE\testproject\test230227\chuandixing.py", line 11, in <module>
main()
File "d:\CODE\testproject\test230227\chuandixing.py", line 10, in main
func2()
File "d:\CODE\testproject\test230227\chuandixing.py", line 7, in func2
func1()
File "d:\CODE\testproject\test230227\chuandixing.py", line 3, in func1
num = 1/0
~^~
ZeroDivisionError: division by zero
'''
可捕获:
def func1():
print("func1 begin")
num = 1/0
print("func1 end")
def func2():
print("func2 begin")
func1()
print("func2 end")
def main():
try:
func2()
except Exception as e:
print(f"已捕获,错误是:"{e})
#可见,捕获一个bug并不需要真正深入程序内部
模块的概念和深入
是什么:一个python代码文件,内含类、函数、变量等,我们可以导入进行使用
如何导入:[中括号表示可选内容]
[from模块名] import [模块|类|变量|函数|*][as别名]
示例:
# import module
import time# 导入python内置的time模块,ctrl+鼠标左键点击time,可进入time文件
print("1")
time.sleep(3) # 这个点表示sleep函数属于time,,通过.可以使用模块内的所有功能
print("2")
# from module import class\args\func
from time import sleep# 只从time导入sleep函数
print("1")
sleep(3) # 直接使用sleep
print("2")
# from module import *
from time import *# 从time全部导入,使用上和import time无异
print("1")
sleep(3)
print("2")
# import module as nickname
import time as t
print("1")
t.sleep(3)
print("2")
# from module import func as nickname
from time import sleep as sl
print("1")
sl(3)
print("2")
注意:
from可以省略,直接import即可
as 别名可以省略
通过"."来确定层级关系
模块的导入一般写在开头
自定义模块
如何自定义模块并导入:
在python代码文件中正常写代码即可,通过import、from关键字,和导入python内置模块一样导入即可使用
main变量的功能:
if__main__=="_main_"
#表示,只有当程序是直接执行的才会进入if内部,如果是被导入的,则无法进入if内部
注意:
不同模块,同名的功能,如果都被导入,那么后倒入的会覆盖先导入的
all变量可以控制*所代表的是哪些功能
示例:
# 导入自定义模块使用
import mymodule
mymodule.test(2,3)
# 导入不同模块的同名功能
from mymodule import test
from newmodule import test
test(3,2)#结果是3-2=1,表明导入同名模块时新的会覆盖旧的
# main变量
from mymodule import test#结果是3,当我们import的时候,实际上已经执行了一遍
'''但当模块页变成
if __name__ == "__main__":
test(1, 2)
之后,在这里调用不会再自动执行
'''
# all变量,是一个列表,写在模块页,控制导入的内容(此时,在newmodule.py写入__all__=="test_a")
from newmodule import *
test_a(1, 2)#只有test_a被导入
from newmodule import test_b#再次手动写导入可以把b函数导入,如果只用*,就会限制只导入a函数
test_b(1, 2)
自定义python包
是什么:包是一个文件夹,里面可以存放许多python的模块(代码文件),通过包,在逻辑上将一批模块归结为一类,方便使用
init文件的作用:通过这个文件来表示一个文件夹是python的包,而非普通的包,在init中用all规定能导入的内容
all变量作用:控制import* 能够导入的内容
第三方包
是什么:第三方开发的包,同类型功能集合体
如何安装:
python命令提示符:pip install 包名
同上,但:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 包名
vscode/pycharm
综合案例:自定义工具包
Chap10 python基础综合案例—折线图
案例介绍
内容:利用pyecharts包,完成对世界疫情情况的可视化
目标:通过案例,回忆巩固python基础的语法
锻炼编程能力,熟练语法的使用
json数据格式的转换
是什么:一种轻量级的数据交互格式,可以按照json指定的格式去组装和封装数据,作为一种中转的数据格式,在不同语言之间相互的传递数据
json格式(json格式本质上是字符串str):
字典:{xxx}
内嵌字典的列表:[{xxx}{xxx}]
python数据和json数据的相互转化示例:
# 导入json模块
import json
# 准备符合json格式要求的python数据
data = [{"name": "xiaoming", "age": 20}, {"name": "xiaowang", "age": 18}]
# 通过json.dumps(data)方法把python数据转化为json数据
json_str = json.dumps(data, ensure_ascii=False)
print(json_str)
print(type(json_str)) # 是字符串
# 通过json.loads(data)方法把json数据转化为python数据
s = '[{"name": "xiaoming", "age": 20}, {"name": "xiaowang", "age": 18}]'# 外侧单引号,内部双引号
s = json.loads(s)
print(s)
print(type(s)) # 是字符串
注意:json_str = json.dumps(data,ensure_ascii=False)这一行中,使参数ensure_ascii等于False可以使内容不用ascii转换,而是直接输出出去,从而中文字符不会被转换成unicode字符,确保中文正常转换
pyecharts模块简介
开发可视化图表使用的技术栈是:Echarts框架的python版本:pyecharts包
安装:cmd>pip install pyecharts
pyecharts快速入门
构建一个基础折线图
from pyecharts.charts import Line#导包
line = Line()#调用Line函数
line.add_xaxis(["China", "US", "UK"])#横坐标
line.add_yaxis("GDP", [30, 20, 10])#y轴坐标名称、y值
#render将代码生成图像,括号中填写路径信息(具体到生成文件的名称)
line.render(r"D:\CODE\testproject\test230227\可视化\折线图\test_pyecharts.html")
路径有转义符问题:
![](https://img-blog.csdnimg.cn/img_convert/7695cb71cb7234613b25f4bc215b63de.png)
使用全局配置项设置属性
全局配置项可通过 set_global_opts 方法设置,标题、图例、移动效果、工具栏等等等等
![](https://img-blog.csdnimg.cn/img_convert/2c8c64f36a9982bd8fa5732df7ffee27.png)
![](https://img-blog.csdnimg.cn/img_convert/6fc0d8a42c1f3598af9a20e1df5f1f60.png)
# 导包:图表中的折线图
from pyecharts.charts import Line
# 导包:options中的一大堆功能
from pyecharts.options import TitleOpts, LegendOpts, ToolboxOpts, VisualMapOpts
line = Line()
line.add_xaxis(["China", "US", "UK"])
line.add_yaxis("GDP", [30, 20, 10])
line.set_global_opts( # 对set_global_opts提供的选项进行自由调整
title_opts=TitleOpts(title="GDP展示", pos_left=100, pos_bottom="90%"),
legend_opts=LegendOpts(is_show=True),
toolbox_opts=ToolboxOpts(is_show=True),
visualmap_opts=VisualMapOpts(is_show=True)
)
# render将代码生成图像
line.render(r"D:\CODE\testproject\test230227\可视化\折线图\test_pyecharts.html")