Python个人笔记(全)

发布于 2022-08-11  62 次阅读


查看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'>

格式化输出

image-20220709192104100

image-20220709123013570

image-20220709173245222

f格式化,可以用f或F

image-20220709180552084

字符串末尾

image-20220709174008002

输入

input() 输入得到的内容都是字符串

image-20220709174141824

数据类型转换

int(原始数据)

image-20220709174654824

eval的使用

image-20220709174743419

运算符

以a=10,b=2为例

b/a的结果为2.0

image-20220709175244065

优先级

image-20220709175356894

赋值

image-20220709175723104

逻辑运算符

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的使用

image-20220709182915507

循环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

字符串

字符串定义:单引号、双引号、三单引号、三双引号

image-20220709185917883

在 python 中,字符串可以乘上一个整数字符串 * num

image-20220709190021465

f-string

image-20220709190525701

下标和len()

image-20220709190930556

切片

[start:end:step]

切片语法: 变量[start : end : step],会得到一个新的字符串start开始位置的下标

end结束位置的下标,不包含end对应的下标

step 步长,下标之间的间隔,默认是1

至少要写一个冒号

image-20220709192150489

常用:

my_str[:]  得到和原来一样的字符串
my_str[::-1]  字符串的逆置

查找

find() & rfind()

image-20220709193203187

index & rindex()

区别:找不到会报错

image-20220709193233769

count()

image-20220709193450978

替换replace()

image-20220709195025964

切割split() & rsplit()

image-20220709195117031

链接join()

image-20220712164738200

其他方法

image-20220712165032819

image-20220712165048714

image-20220712165223583

image-20220712165250170

image-20220712165303734

image-20220712165326059

image-20220712165433527

image-20220712165414396

image-20220712165456253

image-20220712165512212

image-20220712165621380

image-20220712165636544

image-20220712165654036

image-20220712181717661

image-20220712181811376

image-20220712181911335

image-20220712181929550

image-20220712181946568

image-20220712181958609

image-20220712182100826

image-20220712182116129

image-20220712182131365

image-20220712182207168

image-20220712182221018

列表

image-20220712182704624

遍历

image-20220712182926698

添加元素

append(数据)、insert(下标、数据)、extend(可迭代对象)

image-20220712183417274

修改元素:通过下标修改

查询

index(角标)、count(数据)、in/not in

image-20220712183942110

删除

remove(数据值)、pop(下标)、del 列表[下标]

image-20220712184313260

排序和逆置

列表.sort()、sorted(列表)、列表.reverse()

image-20220712185226203

嵌套列表

image-20220712185940216

元组

元组不能被修改,只有count和index方法

注意!声明单元素的元组要加上一个逗号

image-20220712200233568字典

get(jey)的key值不存在,不会报错

get(key,默认值)如果不存在,返回默认值

image-20220712200944596

添加和修改

注意:1和1.0在key中是等价的

image-20220712201715339

删除

image-20220712202041084

遍历

1.for 循环直接遍历字典, 遍历的是字典的 key 值

image-20220712212700419

2.字典.keys()

image-20220712212739974

3.字典.values()

image-20220712212759874

4.字典.items()

image-20220712212832876

enumerate函数

image-20220713095702694

容器公共方法

image-20220713095910307

python内置函数

image-20220713100144170

  • + 支持 字符串、列表、元组进行操作, 得到一个新的容器
  • * 整数 复制, 支持 字符串、列表、元组进行操作, 得到一个新的容器
  • in/not in 判断存在或者是不存在,支持 字符串、列表、元组、字典进行操作, 注意: ==如果是字典的话,判断的是 key 值是否存在或不存在==
  • max/min 对于字典来说,比较的字典的 key值的大小,字母按acs码比较

函数

函数的定义和调用

image-20220713101338674

代码规范:在函数前后都有两个空行

文档注释

用help()打印文档注释

image-20220713102141635

带参数的函数

image-20220713102442364

局部变量:

局部变量的作用域(作用范围): 当前函数的内部

局部变量的生存周期:在函数调用的时候被创建,函数调用结束之后,被销毁(删除)

局部变量只能在当前函数的内部使用,不能在函数的外部使用。

全局变量:

全局变量,就是在函数外部定义的变量。

在函数内部可以访问全局变量的值,如果想要修改全局变量的值,需要使用 global 关键字声明

image-20220713102910315

单个返回值

(类比其他语言)

多个返回值,默认返回元组

image-20220713103921728

1. return 关键字后边可以不写数据值, 默认返回 None
def func():
    xxx
    return   # 返回 None,终止函数的运行的

2. 函数可以不写 return,返回值默认是 None

def func():
    xxx
    pass

参数

函数传递参数的两种形式

image-20220713110134011

缺省参数,要在最后

image-20220713110441281

不定长参数,传递元组或字典

注意点: 函数定义中的 args 和 kwargs可以是任意的形参变量,不过习惯使用 args 和 kwargs.

image-20220713110950527

形参的顺序

image-20220713111803157

组包和拆包

注意点: 容器中元素数据的个数需要和变量的个数保持一致

image-20220713112624529

image-20220713112652388

传参时拆包

image-20220713180048395

引用

只有赋值号会改变引用

image-20220713114235003

可变与不可变类型

image-20220713173717173

引用传参

image-20220713174623543

匿名函数

image-20220730112951533

image-20220730113021602

匿名函数的使用:作为函数参数

image-20220730113846731

字典排序与自定义排序

查看sort源码:根据key参数(函数)来确定排序方式,根据reverse参数确定是否逆序

image-20220730115656768

传入自定义的key函数

image-20220730115520448

语法

image-20220730120133342

列表推导式

image-20220730120532578

image-20220730120759604

补充字典推导式

image-20220730121139663

集合

image-20220808075327196

文件

简单读文件

f.read()代表读取全部内容

image-20220808080202048

read(n)以及文件指针

image-20220808081508728

按行读取

readline(limit),limit代表一行中最多取几个字节

readlines(),读取每一行存放进一个列表里。注意除了最后一行的每一行末尾都有\n

image-20220808082611788

去除列表结尾的\n用strip

image-20220808083533942

简单写文件

默认的写入方式是gbk

encoding必须使用关键字传参

image-20220808080421066

追加

image-20220808080845942

读取大文件

读到文件的末尾,返回为空

法一

image-20220808084031593

法二

image-20220808084415055

二进制方式操作文件

文本文件: txt,.py .md能够使用记事本打开的文件
二进制文件:具有特殊格式的文件,mp3 mp4 rmvb avi png jpg等
文本文件可以使用文本方式打开文件,也可以使用二进制的方式打开文件
二进制文件,只能使用二进制的方式打开文件
二进制打开方式如下:不管读取,还是书写,都需要使用二进制的数据 rb wb ab
注意点:不能指定encoding参数

文件打开模式

image-20220808085836495

image-20220808085149874

注意不是文字不能decode

image-20220808085640696

拷贝文件

注意用切片编辑文件名

image-20220808095716020

os模块操作文件和目录

引入os模块

import os

更改文件名:

os.rename(旧的文件名,新的文件名)

删除文件:

os.remove(待删除的文件名)

创建文件夹:

os.mkdir(文件夹名)

获取当前目录:

os.getcwd()

改变默认目录:

os.chdir("../")

获取目录列表:

os.listdir("./")

删除文件夹:

os.rmdir(文件夹名)

其他方法:os.path.xxx

应用-批量操作文件

批量创建文件到test目录下

法一:

image-20220808101414860

法二:

批量更改文件名

类的定义

image-20220808213531769

image-20220808213726500

PEP8代码规范:类的前后要有两个空行

创建对象

id()是查看引用地址

image-20220808214030457

方法的定义和调用

image-20220808214437771

属性

类外部给对象添加属性

image-20220809123427146

类内部调用类外部添加的属性

image-20220809124252839

魔法方法

在python中,有一类方法,这类方法以两个下划线开头,以两个下划线结尾,并且在满足某个特点条件下会自动调用,这种方法叫做魔法方法

__init__

构造方法

image-20220809131124487

带参数的构造方法

image-20220809131333279

__str__

类比toString方法

image-20220809155818631

__del__

image-20220809160719924

查看引用计数

image-20220809162111215

__repr__

打印容器时,如果容器中的对象没有定义repr则打印地址。repr用于打印容器使用

image-20220809163129034

继承

class Dog(Animal): #定义Dog类继承Animal类

重写

重写同Java

在子类中调用父类的被重写的方法

方法一:父类名.方法名(self,其他参数)

通过对象调用不需要给self传递实参值,通过类名调用需要手动传递self

方法二,不推荐:父类名(实参).方法名()

方法三:super(类A, self).方法名(参数)

方法四:super().方法名(参数),等价于super(当前类, self).方法名(参数)

image-20220810170615523

重写init方法

需要调用父类init方法

image-20220810180146604

多继承的继承顺序链__mro__

image-20220810181009476

私有

定义时名称前加两个下划线,本质上是修改了私有属性的名字

魔法方法__dict__

image-20220810184814801

定义get set方法

image-20220810185315638

类属性

与Java中静态属性相似

image-20220810191646858

对象(实例对象):通过class定义的类创建的,即通过类实例化来的,又称为实例,实例对象实例对象定义的属性称为是实例属性.通过实例对象(self)定义的属性都是实例属性
实例属性:每个实例对象中都存在一份,并且值可能是不一样的

类(类对象):通过class定义的,又称为类对象,是python解释器在创建类的时候自动创建的作用: 1.通过类对象,去定义实例对象2.类对象可以保存一些属性信息,称为类属性
类属性的定义:在类内部,方法外部定义的变量就是类属性
类属性,字内存中只有一份

如何确定一个属性是该定义为实例属性还是类属性?
先假设这个属性为实例属性,查看这个属性值对于不同的实例对象,属性值是否都一样,并且需要同时变化.如果是,则可以定义为类属性
如果不是,则可以定义为实例属性

访问和修改类属性:

image-20220810191511397

用实例对象只可以访问类属性,不可以修改类属性

类方法

类似于Java中的静态方法

实例方法:类中默认定义的方法,就是实例方法,第一个参数为self,表示实例对象
类方法:使用@cLassmethod 装饰的方法,称为类方法,第一个参数是cls,代表的是类对象自己什么情况定义为实例方法,什么情况定义为类方法?

1.如果在方法中使用了实例属性,那么该方法必须定义为实例方法
2.前提:不需要使用实例属性.需要使用类属性,可以将这个方法定义为类方法

image-20220810192137234

静态方法

使用@staticmethod 装饰的方法,称为静态方法,对参数没有特殊要求,可以有,可以没有

前提:不需要使用实例属性,同时也不需要使用类属性,此时可以将这个方法定义为静态方法

image-20220810192756566

多态

和Java相同

特殊:鸭子类型:可以没有继承关系的使用多态

异常

image-20220810203022807

捕获全部异常

try :
    可能发生异常的代码
except:  #缺点,不能获取异常的描述信息
    发生异常执行的代码
==============
try:
    可能发生异常的代码
except Exception as e :
    发生异常执行的代码
    print(e)

完整结构

try:
    可能发生异常的代码
except Exception as e :
    发生异常执行的代码
    print(e)
else:
    代码没有发生异常,会执行
finally:
    一定会执行的代码

模块

image-20220810205242541

image-20220811092753471

制作模块

image-20220811100101910

模块的使用

方法一,导入模块

image-20220811100150675

方法二,导入功能

image-20220811102156299

方法三,导入全部功能,不建议,因为容易覆盖

image-20220811102500634

as 起别名

image-20220811102641140

注意:如果使用自己制作的模块,模块应该和当前代码在同一目录,否则需要加上路径

__all__

all变量可以是元组、列表。注意必须用字符串来定义

image-20220811103646211

__name__

image-20220811104048237

注意:自己定义的模块名字不要和系统中你要使用的模块名字相同

搜索模块顺序sys.path

image-20220811104512352

包:功能相近或者相似的模块放在一个目录中,并在目录中定义一个__init__.py文件,这个目录就是包

新建一个包

image-20220811141138928

image-20220811141403822

image-20220811141538417

image-20220811141720917

json

image-20220811142143973

image-20220811142211557

image-20220811142428066

image-20220811142441336

注意:如果包含中文需要将ensure_ascii设置为False

pyecharts

https://pyecharts.org/#/zh-cn/

https://gallery.pyecharts.org/#/README

image-20220811145024868

image-20220811145112675

image-20220811145157566

Ctrl+P查看传参提示

image-20220811145719490