python复习笔记

Python中常用的六种数据类型

查看数据类型信息:type(),变量无类型,type(变量)查看的是变量存储的数据的类型

数字(Number)

  • 整数/int
  • 浮点数/float
  • 复数/complex :eg.4+3j,以j结尾的为复数
  • 布尔/bool

字符串(String)

  • 文本

  • 只读,不可修改

    str.replace(str1,str2,count)

    • 将str中的所有str1,替换为str2,此过程不是对str的修改,而是新生成一个字符串。count用于计数,替换次数。

    str.split(分割符字符串)

    • 分割符字符串将字符串分割为多个字符串,并存放入列表中,返回列表。

    str.strip()

    • 不传入参数则去除字符串首尾空格及换行符
    • 如果传入参数,如12,则去除字符串中的1,2,会将字符串中的每一个元素都去除。

    count与len同其他

列表(List)

  • 有序的可变序列。

  • 定义:name_list = [] 或者name_list = list()

  • 存储上限为2**63-1

  • 同时存储不同类型元素

  • 元素可重复

  • 可修改

    列表的方法

    list.index(元素)

    • 查询元素的下标索引。
    • 如果列表中无此元素,则报错。

    list.insert(下表,元素)

    • 将元素插入到指定位置。

    list.append(元素)

    • 将指定元素追加到列表尾部。

    list.extend(其他数据容器)

    • 将其他数据容器的内容取出,依次追加到列表尾部。

    list.pop(下标)

    • 删除指定下标的元素。
    • 同时将删除的元素返回。

    del list[下标]

    • 删除指定下标的元素

    list.remove(元素)

    • 删除列表中第一个匹配的元素。

    list.clear

    • 清空列表。

    list.count(元素)

    • 统计指定元素的数量。

    len(列表)

    • 返回列表长度。

元组(Tuple)

  • 有序的不可变序列

  • 定义:name = ()或者name = tuple()

  • 元组中如果只有一个数据,那么定义时需要加一个逗号,t2 = ('hello',)

  • 可嵌套

  • 不可修改

  • 如果元组中嵌套了list,则list中的元素可以修改

    tuple.index(元素)

    • 查询元素

    tuple.count(元素)

    • 统计指定元素数量

    len(tuple)

    • 计算元组长度

集合(Set)

  • 无序不重复集合(可自动去重)。

  • 定义:name = {}或者name = set{}。

  • 不支持下标索引。

  • 可以用for element in set:对集合进行遍历,不能用while。

    set.add(元素)

    • 添加新元素

    set.remove(元素)

    • 移除指定元素

    set.pop()

    • 随机取出一个元素,取出后原集合中该元素不存在

    set.clear()

    • 清空

    set.difference(set1,set2)

    • 取set1,set2的差集,即1中有而2中没有的元素,返回一个新的set,原set1,set2不变。

    set1.diffreence_update(set2)

    • 消除两个集合的差集,在集合1内删除与集合2相同的元素,1变2不变。

    set1.union(set2)

    • 将两个集合合并并去重,得到新集合,原1,2不变。

字典(Dictionary)

  • 无序Key-Value集合。

  • 定义:name = {}或者name = dict()。

  • Key不可重复。重复时后面的Key的值会将前面的覆盖掉。

  • Key不可为字典,可以是list等,value则完全不受限,可嵌套字典。

  • Key不可修改,只能修改value,如果Key不存在则新增此键值对。

  • for key in dict:遍历字典。

  • 将字典转换成字符串可以保留键值对,转换成其他类型只能保留值key丢失。

    dict.pop(Key)

    • 删除Key对应的键值对,并返回删除的Value。

    dict.clear

    • 清空字典。

    dict.keys()

    • 获取字典的所有key。

序列切片

  • 序列[起始下标:结束下标:步长],起始结束为空则表示从头到尾,步长为空则默认为1,步长为1,则是一个个取,2则间隔一个取一个,负数也可以,返回的是新序列,不影响原序列。

数据类型转换

  • int(x)
  • float(x)
  • str(x)

排序

  • sorted(容器,[reverse = True])默认从小到大,reverse为true时则从大到小,返回的结果为列表。

运算符

算术运算符

  • + 加
  • - 减
  • * 乘
  • / 除
  • // 取整
  • % 取余
  • ** 指数

复合赋值运算符

c+=a 等效于 c=c+a

  • +=
  • -=
  • *=
  • /=
  • %=
  • **=
  • //=

字符串

转义字符

\" ->在字符串中显示为 " 输出

字符串拼接

  • str + str
  • str + str(int)

字符串格式化

在字符串的位置放置表达式(如1+1)也可进行格式化。

占位符

  • %s-字符串
  • %d-整数:%5d->将整数的宽度控制在5位,11输出为:空空空11。
  • %f-浮点数:%5.2f->将宽度设置为5,精度设置为2,保留两位小数,四舍五入。
  • eg. massage = "Python大数据学科,北京%s期,毕业平均工资:%s" % (class_num, avg_salary)

快速格式化

  • 语法:f"内容{变量}",eg.(f"我是{name},我成立于{set_up_year}")
  • 特点:不理会类型,不做精度控制。

数据输入

input

  • 输入的类型为string

循环

range

range(起始,结束,步长)

  • range(5)取0,1,2,3,4
  • range(5,10)取5,6,7,8,9
  • range(5,10,2)取5,7,9,

函数

  • 组织好的,可重复使用的,用来实现特定功能的代码段。

返回值

  • 如果函数没有return,但是仍然会返回值,返回为None,类型为NoneType,且在if判断中None等同于Flase。

全局变量与局部变量

num = 200

def test_a():

	print(f"a:{num}")

def test_b():

	print(f"b:{num}")

test_a()

test_b()

print(num)

输出结果为200,200,200

num = 200

def test_a():

	print(f"a:{num}")

def test_b():

	num = 500 # 此处为局部变量,与上方的num无关,

	print(f"b:{num}")

test_a()

test_b()

print(num)

输出结果为:200,500,200

num = 200

def test_a():

	print(f"a:{num}")

def test_b():

	global num # 声明此num为上方全局变量的num

	num = 500 

	print(f"b:{num}")

test_a()

test_b()

print(num)

输出结果为200,500,500

函数参数

位置参数

  • 传递的参数和定义的参数的顺序及个数必须一致。

    def user_info(name,age,gender)print(xxx)
    
    user_info('TOM',20,'男')
    #位置一一对应
    

关键字参数

  • 调用函数时通过键=值(形参=实参)的形式传参,参数顺序可以打乱,也可以与位置参数混用,但是必须将位置参数放到关键字参数前面。user(name = 'TOM',age = 20, gender = '男')

缺省参数

  • 提供默认值参数,在调用函数时如果传参则可以被覆盖,默认参数必须放在最后面。def user_info(name, age, gender = '男')

不定长参数

  • (一个***)位置传递不定长:def user_info(*args):根据传进来的参数位置合并为一个元组**。
  • (两个****)关键字传递不定长:def user_info(**kwargs):参数是键值对的形式,将所有参数组成字典**。

函数作为参数传递

  • 计算逻辑的传递而非数据的传递。
def test_func(computer):
	result = computer(1, 2)
	print(result)
def computer(x, y):
	return x + y

test_func(computer)

匿名函数

  • def关键字,可以定义带有名称的函数,可基于名称重复使用。

  • lambda关键字,可以定义匿名函数(无名称),只可临时使用一次。

    定义

    • 传入参数:函数体(一行代码)

      • test_func(lambda x, y: x + y)默认return,无法二次使用。

        def test_func(computer):
        	result = computer(1, 2)
        	print(result)
        
        test_func(lambda x, y : x + y)
        

文件操作

打开

open()函数

  • open(name, mode, ecncoding),name文件名,mode打开方式,encoding编码格式
  • mode有r,w,a三种模式,r只读,w写入,如果文件已存在,则原内容被删除,并从头开始写入,如果不存在则创建新文件。a追加,如果文件已存在,则追加写入新内容,如果不存在也会新建。

关闭

close()函数

  • 如果文件没有关闭,且程序没有结束,那么文件将一直被程序占用。内置了flush功能刷新。

文件对象的方法

read()

  • f.read(num),num表示要从文件读取的数据的长度,单位是字节,如果没有传入num,那么表示读取文件所有内容。
  • 如果在一个程序中多次调用read,那么上一个read结束的地方就是下一个read开始读取的地方。readlines也会受到影响。

readlines()

  • 按照行的方式一次性读取所有内容,返回一个列表,其中每一行的数据为一个元素。

with open()

  • with open(“python.txt”,“r”) as f:操作完成后自动关闭文件。

write()

  • f.write(写入内容)

flush()

  • 内容刷新,f.flush()

异常

捕捉常规异常

tey:
	可能发生错误的代码
except:
	如果出现异常执行的代码

#捕获指定的异常,如下只捕获NameError异常
try:
	xxx
except NameError as e:# 有异常则执行except下的内容
	xxx
else: # 可选项,如果没有异常,则执行else下的代码
	xxx
finally# 可选,无论是否有异常,都会执行finally下的内容
-
  • 如果是except Exception则捕获全部异常。

异常的传递

  • main函数中调用func1,而func1中调用了func2,当func2发生异常时,会将异常传递到main中。

模块

__all__

__all__ = ['test_A']#all为列表

def test_A:
	xxx
def test_B:
	xxx

当其他文件调用这个模块时如果写成from mode import * ,则表示调用mode模块中的所有,即all内的所有方法。但B不在all内,所以无法使用B。

自定义包

  • 只有package中有__init__.py才算是包,否则就是文件夹。init文件中可以放入上面提到的all列表
  • 引用的方法:from package import def(使用时:module.def)或者import package.module(使用时:package.module.def)

python数据与json数据转换

  • json即列表内嵌字典的数据类型——tyoe为字符串。

python转json

  • json = json.dumps(python)
  • 转成了字符串。

json转python

  • python = json.loads(json)
  • 转成了字典或者多条数据时是列表内嵌字典。

pyecharts模块

全局配置项

文档:全局配置项 - pyecharts - A Python Echarts Plotting Library built with love.

set_global_opts()函数可设置配置项如下:

  • title_opts——标题
  • legend_opts——图例
  • tooltip_opts——​提示框
  • toolbox_opts——工具箱
  • brush_opts——区域选择组件
  • xaxis_opts——​X轴
  • yaxis_opts——Y轴
  • visualmap_opts——视觉映射
  • datazoom_opts——​区域缩放
  • graphic_opts——原生图形元素组件

类与对象

  • 定义一个类:class 类名:

类的定义

class class_name:
	# 类的属性:即类中定义的变量

	# 类的方法,即类中定义的函数

# 创建类对象的方法
# 对象 = 类名称()

self参数

  • def 方法体(self, 形参1, 形参2, ...)

  • self关键字是成员方法定义的时候必须填写的。

  • 它用来表示类对象自身的意思

  • 当我们使用类对象调用方法的时候,self会被自动传入

    • 在方法内部想要访问类的成员变量必须使用self,否则在方法内无法使用成员变量。

      class Student:
      	bame = None
      	age = None
      	def say_hi(self):
      		print(f"大家好,我是{self.name}")
      

构造方法__init__()

  • 在创建类对象(构造类)的时候,会自动执行。

    • 在创建类对象(构造类)的时候,将传入参数自动传递给__init__**()**用。

      class Student:
      	bame = None
      	age = None
      	tel = None
      	# 上面三个可以不写,如果写了,下面的就是在赋值,如果没写,下面就是声明并赋值
      	def __init__(self, name, age, tel):
      		self.name = name
      		self.age = age
      		self.tel = tel
      		print("student类创建了一个对象")
      
      stu = Student('周杰伦', 31, '12323534667')
      

面向对象的三大主要特征

封装

  • 封装的概念:将现实世界事物在类中描述为属性和方法,即为封装。
  • 私有成员的实际意义:在类中提供仅供内部使用的属性和方法,而不对外开放。

私有成员变量及私有成员方法

  • 定义:在私有成员变量或方法的名称前加上__即可。
  • __current_voltage = None
  • def __keep_single_core(self):
  • 调用私有成员变量不报错也不生效。但如果print则也会报错。
  • 调用私有成员方法会报错没有这个方法。
  • 私有成员无法被类对象直接使用,但是可以被类中的其他成员使用。

继承

  • 单继承:class 类名(父类名):
  • 继承分为单继承和多继承。
  • 继承表示将从父类那里继承(复制),来成员变量与成员方法(不包含私有
  • 多继承:class 类名(父类1,父类2,父类3...):
  • 多个父类中如果有同明成员,那么默认以继承顺序从左到右为优先级,左边高于右边。
  • 即先继承的被保留,后继承的被覆盖。

复写

  • 在子类中直接重新赋值或者重新定义即可。

    调用父类同名成员
    • 方式1:父类名.成员变量以及父类名.成员方法(self)
    • 方式2:super().成员变量以及super().成员方法()

类型注解

# 基础数据类型注解
var_1: int = 10
var_2: str = 'zifuchuan'
var_3: bool = True
# 变量名:类型 = 赋的值

# 类对象类型注解
class Student:
	pass
stu: Student = Student()
#类对象: 类名 = 类名()

# 基础容器类型注解
my_list: list = [1,2,3]
my_tuple: tuple = (1,2,3)
my_dict: dict = {'ex':123}
# 容器类型详细注解
my_list: list[int] = [1,2,3]
my_tuple: tuple[int, str, bool] = (1,'zifuchuan',True)# 元组设置类型详细注解时需要将每一个元素都标记出来
my_dict: dict[dict, int] = {'ex':123}

# 在注释中进行类型注解
class Studentpass

var_1 = random.randint(1, 10)	# type: int 
var_2 = json.loads(data)	# type: dict[str, int]
var_3 = func()	# type: Student

# 类型注解的限制
# 类型仅仅是提示性的而非决定性的
var_1: int = 'zifuchuan'# 这样的注解并不会报错。

函数(方法)的类型注解

  • def 函数/方法名 (形参名:类型,形参名:类型):
  • def add(x:int, y:int):
  • def func(data:list):

函数(方法)的返回值类型注解

  • def 函数/方法名(形参名:类型,形参名:类型)-> 返回值类型:
  • def func(data:list) ->list:

Union联合类型注解

from typing import Union
my_list:list[Unon[str, int]] = [1, 2, 'zifuchuan1', 'zifuchuan2']
my_dict:dict[str, Union[str, int]] = {'name':"zifuchuan", "age":31}
def func(data:Union[int, str]) ->Union[int, str]:
	pass

多态

  • 多种状态,即完成某个行为时,使用不同的对象会得到不同的状态。

  • 以父类做定义声明

    • 以子类做实际工作

      class Animal:
      	def speak(self):
      		pass
      class Dog(Animal):
      	def speak(self):
      		print('汪汪汪')
      class Cat(Animal):
      	def speak(self):
      		print('喵喵喵')
      
      def make_noise(animal: Animal):
      	animal.speak()
      
      
      dog = Dog()
      cat = Cat()
      make_noise(dog)# 输出汪汪汪
      make_noise(cat)# 输出喵喵喵
      

抽象类/接口

  • 包含抽象方法的类,称之为抽象类或者接口,抽象方法指没有具体实现的方法(pass)称之为抽象方法。

    class Animal:		# 抽象类:含有抽象方法的类称为抽象类。
    	def speak(self):
    		pass		# 抽象方法:方法体是空实现的(pass)称之为抽象方法。
    class Dog(Animal):
    	def speak(self):
    		print('汪汪汪')
    class Cat(Animal):
    	def speak(self):
    		print('喵喵喵')
    

抽象类的作用

  • 多用于顶层设计(设计标准),以便子类做具体实现。也是对子类的一种软性约束,要求子类必须复写/实现父类一些方法。

闭包

  • 定义双层嵌套函数,内层函数可以访问外层函数的变量。内层函数即闭包函数。

    • 将内层函数作为外层函数的返回,此内层函数就是闭包函数。

      def outer(logo):
      	def inner(msg):
      		print(f"<{logo}>{msg}<{logo}>")
      	return inner
      fn1 = outer("外层logo参数")#此处返回的是inner函数,fn1type为func
      fn1("内层msg参数")
      

好处与缺点

  • 优点:不定义全局变量,也可以让函数持续访问和修改一个外部变量。
  • 优点:闭包函数引用的外部变量,是外层函数的内部变量。作用域难以被误操作修改。
  • 缺点:额外的内存占用。

nonlocal关键字

def outer(num1):
	def inner(num2):
		nonlocal num1
		num1+=num2
		print(num1)
	return inner

fn = outer(10)
fn(10)		# 输出20
fn(10)		# 输出30

装饰器

  • 装饰器就是使用创建一个闭包函数,在闭包函数内调用目标函数。
  • 可以达到不改动目标函数的同时,增加额外的功能。

装饰器的一般写法(闭包写法)

def outer(func):
	def inner():
		print("我要睡觉了")
		func()		# 此处调用了传入的参数函数sleep
		print("我起床了")
	return inner
def sleep():
	import random
	import time
	print("睡眠中")
	time.slepp(random.randint(1, 5))

fn = outer(sleep)
fn()

装饰器的语法糖写法

def outer(func):
	def inner():
		print("我要睡觉了")
		func()		# 此处调用了传入的参数函数sleep
		print("我起床了")
	return inner

@outer
def sleep():
	import random
	import time
	print("睡眠中")
	time.slepp(random.randint(1, 5))

sleep()#直接调用sleep函数,结果与上方一般写法一致

设计模式

  • 待完善

多线程并行执行

  • 待完善

网络编程

  • 待完善
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值