查看api文档
python -m pydoc -p xxxx
xxxx为任意端口号
数据类型
a = 1
print(type(a)) # <class 'int'>
b = 1.1
print(type(b)) # <class 'float'>
c = True #注意是大写T
print(type(c)) # <class 'bool'>
d = '12345'
print(type(d)) # <class 'str'>
e = [10, 20, 30]
print(type(e)) # <class 'list'>
f = (10, 20, 30)
print(type(f)) # <class 'tuple'>
h = {10, 20, 30}
print(type(h)) # <class 'set'>
g = {'name': 'TOM', 'age': 20}
print(type(g)) # <class 'dict'>
格式化输出
f格式化,可以用f或F
字符串末尾
输入
input() 输入得到的内容都是字符串
数据类型转换
int(原始数据)
eval的使用
运算符
以a=10,b=2为例
b/a的结果为2.0
优先级
赋值
逻辑运算符
and 逻辑与, 连接的两个条件都必须为 True,结果为 True, 一假为假
or 逻辑或, 连接的两个条件都为 False,结果为 False, 一真为真
not 逻辑非, 取反,原来是 True,变为 False,原来是 False,变为 True
if-elif
if 判断条件1:
判断条件1成立,执行的代码
elif 判断条件2:
判断条件1不成立,判断条件2 成立,会执行的代码
else:
判断条件1和判断条件2都不成立,执行的代码
三目运算符
变量 = 表达式1 if 判断条件 else 表达式2
for循环
for 变量 in 字符串:
代码
for 循环也称为 for 遍历,会将字符串中的字符全部取到
range的使用
循环else
for x in xx:
if xxx:
xx # if 判断条件成立会执行
else:
xxx # if 判断条件不成立,会执行
else:
xxx # for 循环代码运行结束,但是不是被 break 终止的时候会执行
需求:
有一个字符串 'hello python', 想要判断这个字符串中有没有包含 p 这个字符,如果包含,就输出, 包含 p, 如果没有 p ,就输出,不包含
补充:pass占位
if 判断条件:
pass # 占位,空代码 让代码不报错
elif 判断条件:
pass
else:
pass
字符串
字符串定义:单引号、双引号、三单引号、三双引号
在 python 中,字符串可以乘上一个整数字符串 * num
f-string
下标和len()
切片
[start:end:step]
切片语法: 变量[start : end : step],会得到一个新的字符串start开始位置的下标
end结束位置的下标,不包含end对应的下标
step 步长,下标之间的间隔,默认是1
至少要写一个冒号
常用:
my_str[:] 得到和原来一样的字符串
my_str[::-1] 字符串的逆置
查找
find() & rfind()
index & rindex()
区别:找不到会报错
count()
替换replace()
切割split() & rsplit()
链接join()
其他方法
列表
遍历
添加元素
append(数据)、insert(下标、数据)、extend(可迭代对象)
修改元素:通过下标修改
查询
index(角标)、count(数据)、in/not in
删除
remove(数据值)、pop(下标)、del 列表[下标]
排序和逆置
列表.sort()、sorted(列表)、列表.reverse()
嵌套列表
元组
元组不能被修改,只有count和index方法
注意!声明单元素的元组要加上一个逗号
字典
get(jey)的key值不存在,不会报错
get(key,默认值)如果不存在,返回默认值
添加和修改
注意:1和1.0在key中是等价的
删除
遍历
1.for 循环直接遍历字典, 遍历的是字典的 key 值
2.字典.keys()
3.字典.values()
4.字典.items()
enumerate函数
容器公共方法
python内置函数
+
支持 字符串、列表、元组进行操作, 得到一个新的容器* 整数
复制, 支持 字符串、列表、元组进行操作, 得到一个新的容器in/not in
判断存在或者是不存在,支持 字符串、列表、元组、字典进行操作, 注意: ==如果是字典的话,判断的是 key 值是否存在或不存在==max/min
对于字典来说,比较的字典的 key值的大小,字母按acs码比较
函数
函数的定义和调用
代码规范:在函数前后都有两个空行
文档注释
用help()打印文档注释
带参数的函数
局部变量:
局部变量的作用域(作用范围): 当前函数的内部
局部变量的生存周期:在函数调用的时候被创建,函数调用结束之后,被销毁(删除)
局部变量只能在当前函数的内部使用,不能在函数的外部使用。
全局变量:
全局变量,就是在函数外部定义的变量。
在函数内部可以访问全局变量的值,如果想要修改全局变量的值,需要使用 global 关键字声明
单个返回值
(类比其他语言)
多个返回值,默认返回元组
1. return 关键字后边可以不写数据值, 默认返回 None
def func():
xxx
return # 返回 None,终止函数的运行的
2. 函数可以不写 return,返回值默认是 None
def func():
xxx
pass
参数
函数传递参数的两种形式
缺省参数,要在最后
不定长参数,传递元组或字典
注意点: 函数定义中的 args 和 kwargs可以是任意的形参变量,不过习惯使用 args 和 kwargs.
形参的顺序
组包和拆包
注意点: 容器中元素数据的个数需要和变量的个数保持一致
传参时拆包
引用
只有赋值号会改变引用
可变与不可变类型
引用传参
匿名函数
匿名函数的使用:作为函数参数
字典排序与自定义排序
查看sort源码:根据key参数(函数)来确定排序方式,根据reverse参数确定是否逆序
传入自定义的key函数
语法
列表推导式
补充字典推导式
集合
文件
简单读文件
f.read()代表读取全部内容
read(n)以及文件指针
按行读取
readline(limit),limit代表一行中最多取几个字节
readlines(),读取每一行存放进一个列表里。注意除了最后一行的每一行末尾都有\n
去除列表结尾的\n用strip
简单写文件
默认的写入方式是gbk
encoding必须使用关键字传参
追加
读取大文件
读到文件的末尾,返回为空
法一
法二
二进制方式操作文件
文本文件: txt,.py .md能够使用记事本打开的文件
二进制文件:具有特殊格式的文件,mp3 mp4 rmvb avi png jpg等
文本文件可以使用文本方式打开文件,也可以使用二进制的方式打开文件
二进制文件,只能使用二进制的方式打开文件
二进制打开方式如下:不管读取,还是书写,都需要使用二进制的数据 rb wb ab
注意点:不能指定encoding参数
文件打开模式
注意不是文字不能decode
拷贝文件
注意用切片编辑文件名
os模块操作文件和目录
引入os模块
import os
更改文件名:
os.rename(旧的文件名,新的文件名)
删除文件:
os.remove(待删除的文件名)
创建文件夹:
os.mkdir(文件夹名)
获取当前目录:
os.getcwd()
改变默认目录:
os.chdir("../")
获取目录列表:
os.listdir("./")
删除文件夹:
os.rmdir(文件夹名)
其他方法:os.path.xxx
应用-批量操作文件
批量创建文件到test目录下
法一:
法二:
批量更改文件名
类
类的定义
PEP8代码规范:类的前后要有两个空行
创建对象
id()是查看引用地址
方法的定义和调用
属性
类外部给对象添加属性
类内部调用类外部添加的属性
魔法方法
在python中,有一类方法,这类方法以两个下划线开头,以两个下划线结尾,并且在满足某个特点条件下会自动调用,这种方法叫做魔法方法
__init__
构造方法
带参数的构造方法
__str__
类比toString方法
__del__
查看引用计数
__repr__
打印容器时,如果容器中的对象没有定义repr则打印地址。repr用于打印容器使用
继承
class Dog(Animal): #定义Dog类继承Animal类
重写
重写同Java
在子类中调用父类的被重写的方法
方法一:父类名.方法名(self,其他参数)
通过对象调用不需要给self传递实参值,通过类名调用需要手动传递self
方法二,不推荐:父类名(实参).方法名()
方法三:super(类A, self).方法名(参数)
方法四:super().方法名(参数)
,等价于super(当前类, self).方法名(参数)
重写init方法
需要调用父类init方法
多继承的继承顺序链__mro__
私有
定义时名称前加两个下划线,本质上是修改了私有属性的名字
魔法方法__dict__
定义get set方法
类属性
与Java中静态属性相似
对象(实例对象):通过class定义的类创建的,即通过类实例化来的,又称为实例,实例对象实例对象定义的属性称为是实例属性.通过实例对象(self)定义的属性都是实例属性
实例属性:每个实例对象中都存在一份,并且值可能是不一样的
类(类对象):通过class定义的,又称为类对象,是python解释器在创建类的时候自动创建的作用: 1.通过类对象,去定义实例对象2.类对象可以保存一些属性信息,称为类属性
类属性的定义:在类内部,方法外部定义的变量就是类属性
类属性,字内存中只有一份
如何确定一个属性是该定义为实例属性还是类属性?
先假设这个属性为实例属性,查看这个属性值对于不同的实例对象,属性值是否都一样,并且需要同时变化.如果是,则可以定义为类属性
如果不是,则可以定义为实例属性
访问和修改类属性:
用实例对象只可以访问类属性,不可以修改类属性
类方法
类似于Java中的静态方法
实例方法:类中默认定义的方法,就是实例方法,第一个参数为self,表示实例对象
类方法:使用@cLassmethod 装饰的方法,称为类方法,第一个参数是cls,代表的是类对象自己什么情况定义为实例方法,什么情况定义为类方法?
1.如果在方法中使用了实例属性,那么该方法必须定义为实例方法
2.前提:不需要使用实例属性.需要使用类属性,可以将这个方法定义为类方法
静态方法
使用@staticmethod 装饰的方法,称为静态方法,对参数没有特殊要求,可以有,可以没有
前提:不需要使用实例属性,同时也不需要使用类属性,此时可以将这个方法定义为静态方法
多态
和Java相同
特殊:鸭子类型:可以没有继承关系的使用多态
异常
捕获全部异常
try :
可能发生异常的代码
except: #缺点,不能获取异常的描述信息
发生异常执行的代码
==============
try:
可能发生异常的代码
except Exception as e :
发生异常执行的代码
print(e)
完整结构
try:
可能发生异常的代码
except Exception as e :
发生异常执行的代码
print(e)
else:
代码没有发生异常,会执行
finally:
一定会执行的代码
模块
制作模块
模块的使用
方法一,导入模块
方法二,导入功能
方法三,导入全部功能,不建议,因为容易覆盖
as 起别名
注意:如果使用自己制作的模块,模块应该和当前代码在同一目录,否则需要加上路径
__all__
all变量可以是元组、列表。注意必须用字符串来定义
__name__
注意:自己定义的模块名字不要和系统中你要使用的模块名字相同
搜索模块顺序sys.path
包
包:功能相近或者相似的模块放在一个目录中,并在目录中定义一个__init__.py
文件,这个目录就是包
新建一个包
json
注意:如果包含中文需要将ensure_ascii设置为False
pyecharts
https://pyecharts.org/#/zh-cn/
https://gallery.pyecharts.org/#/README
Ctrl+P查看传参提示
Comments NOTHING