导学

python官网:https://www.python.org

简单使用py(单行):win+R打开cmd,输入python出现三个方向标即可

cmd中可以用python打开文本:pyhton+(空格)+文件绝对路径

PyCharm下载:www.jetbrains.com

基础知识

字符串需要用双引号包住

字面量

代码中,被卸载代码中的固定值,称之为字面量

注释

单行注释 # ;多行注释 ### 。。。 ### (代码规范上,注释符号#后需空格一个)

print

想要输出多个内容时,用逗号,隔开

如 print(“hello”,”world”,3)

数据类型

变量是没有类型的,但是变量存储的内容有类型。

**type( )**可以查看某个变量或者字面量的数据类型,可以用其他变量接收type( )函数结果,如 name_type = type(“zhw”)。

类型转换

其他类型都可以转字符串,但是想将字符串转成数字要求字符串内容都是数字

浮点转整数会丢失精度!!!

标识符

编写代码时,对变量、类、方法等编写的名字,叫做标识符。

命名规则:1.内容限定,仅允许英文、中文、数字、下划线(_)

另外数字不可开头;

2.大小写敏感 ;

3.不可使用关键字:

运算符
字符串拓展

实际上可以使用单引号(‘ ‘)、双引号(“ “)、三引号(‘’’ ‘’’)

三引号如果没有变量接收,就是注释

引号内部可以嵌套,双引号内部嵌套单引号,单引号内部嵌套双引号,也可以使用\转义

字符串拼接用 + 拼接,如print(“我是” + name),如果用逗号隔开,会有个空格。

!!!不能将其他类型(如数字)和字符串用 + 拼接,会报错

字符串格式化

占位符还有%d,%f分别表示整数和浮点数

!!注意拼接的字符串别忘了要加引号,否则如name = zhw会报错,判定zhw为一个变量而不是字符串

如果是多个变量的话,需后置( ),如:

1
2
3
name = "zhw"
major = "计算机科学与技术"
out="我的名字是%s,我的专业是%s" % (name,major)

当然也可以用Python的格式化字符串(f-string)方法,在字符串前加一个 fF 前缀,然后用 花括号 {} 包裹变量名或表达式,如:

1
2
3
name = "zhw"
major = "计算机科学与技术"
out = f"我的名字是{name},我的专业室{major}"

这种方法不用分辨变量类型,但不能控制精度。两个方法可以搭配混合使用

如果m<len(本身),那么不会生效。

数据输入

input( ) ,需要用变量接收,无论输入什么,都按照字符串存储

可以用int(input( ))来转换为整数及其他

Python判断语句

布尔类型(bool)实质存储是1/0

1
2
3
4
5
age = 19
if age >= 18:
print("我已经成年了\n即将步入大学生活")

print("时间过得真快")

循环语句

while语句

九九乘法表:

1
2
3
4
5
6
7
8
i = 1
while i <= 9:
j = 1
while j <= i:
print(f"{i}*{j}={i*j}\t", end="")
j += 1
i += 1
print()

与while不同,for无法定义循环条件

1
2
for 临时变量 in 待处理数据集(序列):
满足时执行代码

只能从处理的数据集中,依次取出内容进行处理!!!

理论上,py中for循环不会无限,因为数据集不会无限

临时变量规范上不能在循环外使用,但是实际上可能可以访问到

break/continue

range

语法1:range(num)得到[0,1,2,…,num-1]

语法2:range(num1,num2)得到左闭右开,如range(5,10)为[5,6,7,8,9]

语法3:range(num1,num2,step),step默认为1

函数(function)

1
2
3
def 函数名(传入参数):
函数体
return 返回值

若没有申明返回值,则返回内容是 None,类型是 NoneType,表示空的、无意义的

在 if 判断上,None等同于False

函数说明文档

多行注释,包括函数说明,形参说明,return说明

变量作用域

全局变量/局部变量

函数内部直接操作全局变量会生成一个局部变量,不会对全局变量产生影响

如果需要影响全局变量,则需要 global 声明,如:

1
2
3
4
num=1
def nihao():
globle num
num=2

返回值

1
2
3
4
5
6
#支持多个返回值,多个数据类型
def test_return():
return 1,2
x,y = test_return()
print(x) #结果1
print(y) #结果2

传参

可以将函数作为参数传入函数,此时为传入计算逻辑并非传入数值

lambda匿名函数

只能临时使用一次

数据容器(对应数据结构相关内容)

一个可以容纳多份数据的数据类型,没份数据数据类型可以不同

列表 (list)

1
2
3
变量名称 = [元素1,元素2,元素3]
list = [ ]
list = list()

下标索引从左到右是0,1,2…

从右到左是-1,-2,-3…

存储有上限2**63 -1即 9223372036854775807个

查询功能(方法)
1
2
mylist = ['nihao','woshi','zhw']
index = mylist.index('zhw')
修改功能(方法)

pop实际上是将元素取出,可以赋值给变量

列表的遍历

通过while遍历

1
2
3
4
index = 0
while index < len(list):
#取list[index]
index += 1

通过for遍历

1
2
3
list = [1,2,3,4,5]
for element in list:
print(element)
sort方法

元组 (tuple)

与列表不同的是,元组元素一旦定义无法修改,无法增删,操作会报错

但如果元组中有列表元素,列表里的元素可以修改

!!注意:如果元组只有一个元素,数据后面要添加逗号,如

1
t1 = ("hello",)
元组相关操作

!!index查不了嵌套里的元素

字符串(str)

同元组一样,是无法修改的数据容器

如果必须修改,只能得到新字符串,老字符串无法修改

index方法

与上述同

replace方法
split方法
strip方法

无传入值时默认移除收尾空白字符,包括空格(),制表符(\t),换行符(\n),回车符(\r),垂直制表符(\v),换页符(\f)

count、len方法,同

序列

内容连续、有序、可使用下表索引的一类数据容器,包括但不限于列表、元组、字符串

切片操作(取出子序列)
1
str[::-1][9:14] 不等价于 str[14:9:-1]

集合(set)

特征:内部无序,元素不重复(即便定义时有重复内容,输出时会自动去重,且不支持下标所以访问),允许修改

add方法
1
set.add("python") #加入python元素,本身被修改
remove方法
1
set.remove("python") #移除,本身被修改
pop方法
1
set.pop() #随机取出一个元素,本身被修改
clear方法
1
set.clear() #清空
difference方法
union方法
len方法
1
num = len(set) #统计集合中元素数量
遍历

不支持下标索引,故不能用while循环

但可以用for循环

字典(dict)

类似struct结构体

和集合一样,不可用下标索引,且不可重复定义,重复则输出后面的key对应的value,相当于重新赋值

字典的key和value可以为任意数据类型(key不能为字典)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#定义嵌套字典
score_dict = {
"林俊杰":{
"语文":50,
"数学":60
},
"周杰伦":{
"语文":60,
"数学":50
},
"张宏伟":{
"语文":100,
"数学":100
}
}
#读取时用score = score_dict["张宏伟"]["数学"]
字典修改操作
pop方法
1
score = score_dict.pop("周杰伦") #通过key移出value
keys方法
1
keys = score_dict.keys() #获取全部key
字典遍历
1
2
3
for key in score_dict:
print(f"字典的key是:{key}")
print(f"字典的value是:{score_dict[key]}")

数据容器总结

5类数据容器都支持for循环遍历

列表、元组、字符串支持while循环,集合、字典不支持(无法下标索引)

字符串转列表、元组会把每个字符都作为一个元素

字典转列表、元组则把每个key作为元素

所有容器转列表时都是字面量加左右双引号

转集合时元素会 <u>无序 </u>

reverse默认为false,从小到大(升序)排序,若给定true则从大到小(降序)

但排完序后是新生成一个列表对象

文件操作

文件编码

一种规则集合,记录内容和二进制建进行转换的逻辑

最常用的,默认用UTF-8格式进行文件编码

文件读取

open()打开函数

!!!注意此处encoding不是第三位,需要用键值对传参

常用三种读取模式

读操作相关方法

注意多次调用read时,会从上次调用read内容后开始输出

同时num单位是字符数不是字节

1
2
3
4
5
6
line1=f.readline()
line2=f.readline()
line3=f.readline()
print(f"每一行数据是:{line1}")
print(f"每一行数据是:{line2}")
print(f"每一行数据是:{line3}")

close()方法

打开文件后需要关闭,否则会一直占用

文件写入

close方法内置了flush功能的,同样会将内容写入磁盘中

注意如果用w模式打开文件,则会创建/重置一个新文件进行

a模式可以为文件追加内容

文件备份

1
2
3
4
5
6
7
8
9
10
fr = open("file address","r",encoding="UTF-8")
fw = open("file address","w",encoding="UTF-8")
for line in fr:
line = line.strip()
if line.split(",")[4] == "测试":
continue
fw.write(line)
fw.write("\n")
fr.close()
fw.close()

异常(bug)

异常处理(捕获异常)

提前假设某处会出现异常,做好提前准备,当真的出现异常时可以有后续手段

1
2
3
4
5
#捕获指定单个异常:
try:
print("name")
except NameError as e:
print("name变量名称未定义错误")
1
2
3
4
5
#捕获多个异常,可定义元组
try:
print("name")
except (NameError,ZeroDivisionError) as e:
print("name变量名称未定义错误")
1
2
3
4
5
6
#捕获所有异常,对象是Excepetion,是最顶级的异常,包含所有异常
try:
1 / 0
print("name")
except Exception as e:
print(f"出现异常了,异常信息是{e}")

else是except情况不满足就会做的,与try不冲突,并行

else和finally是选写的,try和except是绑定的

异常是具有传递性的,函数内部出现异常会在主函数显示

模块(Module)

实际是个python文件,以,py结尾,能定义函数,类和变量,模块里也能包含可执行代码,一般在开头导入

按住CTRL+左键点击模块可进入代码,按CTRL+F可检索内容

1
2
3
import time
time.sleep(5) #单位为秒 (s)
#若from time import sleep则能且仅能直接用sleep()

*是全部的意思

1
2
from time import *
#这样可以直接用函数,不用(time.)

自定义模块

自己写一个py文件,import导入即可,注意文件名称规范

1
2
if __name__ == "__main__":
#有定义name变量时不会在导入模块时直接运行模块内容

all变量相当于模块文件内有公开与不公开的内容,import * 会作用在all内的全部内容,但此时手动导入非all内的内容也是允许的,all仅影响import *。

python包

物理上是个文件夹,逻辑上还是个模块

导入包与导入模块相似,可导入包(不建议),子模块,子模块内的函数

在init文件内可以定义al l变量,也可以在init文件内导入子模块内的函数

安装第三方包

1
2
3
pip install 包名称 #此时是国外官方源,下载可能比较慢
pip install -i+指定网站+包名称
https://pypi.tuna.tsinghua.edu.cn/simple

自定义包

详见my_utils文件夹

案例开发

Json

json格式数据转化

可以看做python的列表或者字典,如果是列表,里面需要嵌套字典

1
2
#注意直接用dumps会使中文编码错误,需加ensure_ascii参数,表示不用ASCII码,直接输出
data = json.dumps(data,ensure_ascii=False)

转换为json数据后为字符串对象

pyecharts模块

Echarts框架下针对python开发的

官网:pyecharts - A Python Echarts Plotting Library built with love.

画廊网站(图表模版):中文简介 - Document

三个学习案例(本地文件)

2020年美日印三国确诊人数对比折线图

全国疫情地图

柱状图构建

所用数据在可视化案例数据

入门

可设置全局配置项

Json格式化工具链接:懒人工具-json在线解析-在线JSON格式化工具-json校验-程序员必备

(劣,无视图)https://www.lazytools.com.cn/tool/jsonformat.html

创建时间线

1
from pyecharts.charts import Timeline

每个时间点需要提供一个图表对象