Python - 生成exe程序
一、打包步骤1、安装pyinstaller库
2、准备好.py文件,cmd打开控制台,使用cd命令进入到文件所在路径
3、使用命令:pyinstaller -F 文件名.py,打包成功后如下
4、在.py文件的同级目录下,会生成两个文件夹和一个.spec文件
5、在dist文件夹内找到.exe文件,双击运行即可(若运行出现问题如:闪退等,可以用cmd命令打开文件,能看到具体报错内容)
二、可能出现的问题1. 运行过程中提示缺少模块
问题:报错 No module named 'matplotlib.backends. backend_svg'
解决方案:打包的时候在命令后面加上 --hidden-import 包名称,在这里也就是pyinstaller -F 文件名.py --hidden-import matplotlib.backends. backend_svg
2. 运行过程中提示找不到文件路径
问题:报错 [WinError 3] 系统找不到指定的路径。: '../数据'
原因:我的.py代码运行中需要导入文件,但是打包之后的.exe文 ...
Python - 生成器
一、生成器的创建方式生成器:根据算法生成数据的一种机制,每次调用生成器只生成一个值,可以节省大量内存
1. 生成器推导式
与列表推导式类似,只不过生成器推导式使用小括号
1234567891011121314151617181920212223# 创建生成器my_generator = (i * 2 for i in range(5))print(my_generator)# next获取生成器下一个值value = next(my_generator)print(value)value = next(my_generator)print(value)print('----------')# 遍历生成器for value in my_generator: print(value)# <generator object <genexpr> at 0x100cc7990># 0# 2# ----------# 4# 6# 8
2. yield 关键字
只要在def函数里面看到有 yield 关键字那么就是生成器
123456789 ...
Python - 深拷贝&浅拷贝
一、相关模块和方法
模块:copy
拷贝方式
区别
方法
浅拷贝
最多拷贝对象的一层
copy(拷贝对象)
深拷贝
可能拷贝对象的多层
deepcopy(拷贝对象)
二、浅拷贝
不可变类型进行浅拷贝不会给拷贝的对象开辟新的内存空间,而只是拷贝这个对象的引用
1234567891011121314151617181920212223242526272829303132import copy # 使用浅拷贝需要导入copy模块# 不可变类型有: 数字、字符串、元组a1 = 123123b1 = copy.copy(a1)# 查看内存地址print(id(a1))print(id(b1))print("-" * 10)a2 = "abc"b2 = copy.copy(a2)# 查看内存地址print(id(a2))print(id(b2))print("-" * 10)a3 = (1, 2, ["hello", "world"])b3 = copy.copy(a3)# ...
Python - 面向对象
一、类和对象类和对象的关系:⽤类去创建⼀个对象,类是对⼀系列具有相同特征和⾏为的事物的统称,是⼀个抽象的概念,不是真实存在的事物,对象是类创建出来的真实存在的事物
1. 定义类
类名要满⾜标识符命名规则,同时遵循⼤驼峰命名习惯
语法
12class 类名(): 代码
1234# 例:定义类class A(): def test(self): print('hello world')
1、理解self
self指的是调⽤该函数的对象,打印对象和self得到的结果是⼀致的,都是当前对象的内存中存储地址
1234567891011class TestClass(): def test1(self): print('hello world') print(self)testclass= TestClass()print(testclass)testclass.test1()# <__main__.Washer object at 0x000001C1820D1850># hello world# <__main_ ...
Python - 连接Redis
一、模块导入
安装第三方包redis,然后导入StrictRedis模块
12# 导入模块from redis import StrictRedis
二、创建StrictRedis对象
StrictRedis对象:⽤于连接redis服务器,并按照不同类型提供了不同⽅法,进⾏交互操作
创建对象:指定参数与指定的服务器和端⼝连接
host:默认为localhost
port:默认为6379
db:默认为0
12# 简写 sr=StrictRedis()sr = StrictRedis(host='192.168.241.128', port=6379, db=0)
三、StrictRedis对象的实例方法
根据不同的类型,拥有不同的实例⽅法可以调⽤,与redis命令对应,⽅法需要的参数与命令的参数⼀致
string
keys
hash
list
set
zset
set
exists
hset
lpush
sadd
zadd
setex
type
hmset
rpush
smembers
zrange
mset
delete
hk ...
Python - 连接MySQL
一、模块导入
安装第三方模块pymysql,然后导入
12# 导入 pymysqlimport pymysql
二、创建连接对象1234567891011121314# 创建connect()对象conn = pymysql.connect( host = 'localhost', port = 3306, user = 'root', password = 'root', database = 'mysql', charset = 'utf8')# 参数host:连接的mysql主机,如果本机是'localhost'# 参数port:连接的mysql主机的端口,默认是3306# 参数user:连接的用户名# 参数password:连接的 ...
Python - 多任务
一、多任务开发1、概念:同一时间内执行多个任务
2、优点:充分利用CPU资源,提高程序的执行效率
3、执行方式
并发:在一段时间内交替执行任务
并行:始终有多个软件一起执行(多核 CPU)
4、实现方式
多进程开发
多线程开发
可以用多核
不能使用多核
资源开销大
资源开销小
稳定性强
稳定性弱
进程和线程的关系:
进程:操作系统进行资源分配的基本单位
线程:CPU 资源调度的最小单位
程序运行至少有一个进程,一个进程默认有一个线程,进程里可以创建多个线程,线程依附进程
二、多进程开发1. 创建子进程实例对象
创建子进程实例对象:multiprocessing.Process(target=执行任务名)
创建实例对象常用参数
参数
说明
group
指定进程组,默认为None,且目前不支持修改
target
执行任务名
name
进程名
args
以元组方式给执行任务传参,需要和执行任务形参的顺序保持一致
kwargs
以字典方式给执行任务传参,key值需要和形参名保持一致
获取当前进程名:multiprocessing ...
Python - 闭包和装饰器
一、闭包1. 闭包的概念与使用
定义:在函数嵌套的前提下,内部函数使用了外部函数的变量,并且外部函数返回了内部函数,我们把这个使用外部函数变量的内部函数称为闭包
作用:可以保存外部函数内的变量,不会随着外部函数调用完而销毁
优点:提高代码的可重用性,不需要再手动定义额外的功能函数
缺点:由于闭包引用了外部函数的变量,则外部函数的变量没有及时释放,消耗内存
形成条件
在函数嵌套(函数里面再定义函数)的前提下
内部函数使用了外部函数的变量(还包括外部函数的参数)
外部函数返回了内部函数
1234567891011121314151617181920212223242526272829303132333435363738394041# 外部函数 def test1(a): b = 10 # 内部函数 def test2(): # 内部函数使用了外部函数的变量或者参数 print(a, b) # 返回内部函数, 这里返回的内部函数就是闭包实例 return test2# 定义一个外部函数def fun ...
Python - with语句&上下文
一、with语句背景:文件使用完后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的
1. 原始方式打开文件
问题:文件读写时都有可能产生IOError,一旦出错,后面的f.close()就不会调用(风险写法)
解决方式:添加try-except-finally语句(安全写法)
缺点:代码过于冗长
123456789101112131415161718 # 1、以读的方式打开文件 f = open("1.txt", "r") # 2、读取文件内容 f.write("hello world") # 3、关闭文件 f.close()try: # 1、以读的方式打开文件 f = open("1.txt", "r") # 2、读取文件内容 f.write("xxxxx")except IOError as e: print("文件操作出错", e)finally: # 3、关闭文 ...
Python - property属性
一、property属性
作用:把类方法当做属性来使用
优点:简化代码使用
二、定义property属性的方式1. 装饰器方式
@property:修饰获取值的方法,表示把方法当做属性使用,当获取属性时会执行下面修饰的方法
@方法名.setter:修饰设置值的方法,表示把方法当做属性使用,当设置属性时会执行下面修饰的方法
12345678910111213141516171819202122232425262728class Person(object): def __init__(self): self.__age = 0 # 装饰器方式的property, 把age方法当做属性使用, 表示当获取属性时会执行下面修饰的方法 @property def age(self): return self.__age # 把age方法当做属性使用, 表示当设置属性时会执行下面修饰的方法 @age.setter def age(self, new_age): if new_age >= 150: ...