首页
关于
留言
友情链接
推荐
粽子SHOP
Search
1
粽子SHOP即时到账 微信插件(MyWechat)
4,850 阅读
2
PS人像美颜插件 DR5.0增强版 一键人像磨皮/美白/高低频
4,077 阅读
3
彩虹聚合登录API源码/上元二开 QQ互联分发
2,915 阅读
4
Windows Navicat Premium16.3.2 免安装 绿色汉化版
2,745 阅读
5
LayuiTable导出所有数据,无需修改后端代码
2,435 阅读
程序源码
PHP源码
HTML源码
精品程序
易语言源码
活动资讯
技术分享
实用代码
实用工具
学习笔记
PHP笔记
前端笔记
uniapp
Python
逆向
docker
thinkPHP
登录
Search
标签搜索
python
typescript
swoole
docker
thinkphp6
php
composer
composer命令
tp6
tp中间件
vue
node.js
粽子shop
thinkSwoole
timi
王者荣耀
王者荣耀ios扫码
layer
layer图片预览
layer图片
烂掉的ay
累计撰写
92
篇文章
累计收到
939
条评论
首页
栏目
程序源码
PHP源码
HTML源码
精品程序
易语言源码
活动资讯
技术分享
实用代码
实用工具
学习笔记
PHP笔记
前端笔记
uniapp
Python
逆向
docker
thinkPHP
页面
关于
留言
友情链接
推荐
粽子SHOP
搜索到
19
篇与
python
的结果
2024-09-30
WxPython可视化编辑器1.3 免安装桌面开发工具
介绍WxPython可视化编辑器是一款可视化的Python桌面应用开发工具,界面风格类似易语言。拖拽控件就可以实现页面布局,还能实时查看源代码。展示源代码:写过易语言的是不是很熟悉。这个工具不需要安装,解压即用,用来辅助开发还是很香的。下载地址(附带1.2版本和1.3版本)隐藏内容,请前往内页查看详情
2024年09月30日
12 阅读
1 评论
0 点赞
2023-04-18
Mac下 Python 使用Py2app编译wxpthon程序
介绍Py2app是一个用于将Python脚本转换为可执行应用程序的工具,可用于Mac OS 操作系统上它允许您将Python应用程序和所有依赖项捆绑在一起,创建一个独立的应用程序,而无需安装Python或任何其他库.使用Py2app,您可以将Python编写的应用程序转换为Mac应用程序,这样用户就可以像使用其他应用程序一样使用您的应用程序安装pip3 install py2app可能下载其它依赖包,如:altgraph>=0.17.3, modulegraph>=0.19.3,以及macholib>=1.16.2和setuptools等使用py2applet --make-setup 1.py1.py 是你的程序文件import wx class MyFrame(wx.Frame): def __init__(self, parent, title): wx.Frame.__init__(self, parent, title=title, size=(300, 200)) self.panel = wx.Panel(self) self.button = wx.Button(self.panel, label="Click Me") self.Bind(wx.EVT_BUTTON, self.on_button_click, self.button) self.Show(True) def on_button_click(self, event): wx.MessageBox('Hello wxPython', 'Message', wx.OK | wx.ICON_INFORMATION) app = wx.App(False) frame = MyFrame(None, 'Hello wxPython') app.MainLoop()这时,控制台会出现 Wrote setup.py 。这就代表.py文件的设置文件写成功了目录下出现 setup.py 编译python3 setup.py py2app -A成功后会出现 build 和 dist 文件夹打开 dist 文件夹,即可看到我们的程序 1.app 。双击运行就可以了运行成功
2023年04月18日
125 阅读
0 评论
0 点赞
2023-04-05
Python 闭包函数与装饰器
闭包函数''' 闭包函数是函数内部定义函数 构成条件 1 函数中嵌套一个函数 2 内存嵌套函数 对外部作用域有一个非全局变量的引用 3 外出函数的返回值是内层函数的函数名 作用 保证局部信息不被销毁 数据的安全性 应用 1 保存一些非全局变量 但是不易被销毁、改变的数据 2 装饰器 3 实现数据锁定 ''' # def outF(): # sum = 2 # 定一个非全局变量 # def inF(n): # return sum+1 # # #外出函数返回值是内层函数的函数名 # return inF # def outer(): # n = 10 # def inner(): # n = 20 # print("in",n) # print("ou",n) # inner() # outer() # 闭包函数 def outer(m): n = 10 def inner(): print("in",(n+m)) return inner ot = outer(9) # 调用 ot() #>>> in 19 def a(a): def b(): nonlocal a # 给外层函数变量声明 a += 1 print(a) return b fn_a = a(20) fn_a() #>>> 21 装饰器{tabs}{tabs-pane label="装饰器"} ''' 装饰器的功能 1 函数执行时间统计 2 可以用在框架的路由传参上 3 插入日志 4 事物处理 5 权限娇艳 6 缓存 ''' ''' 装饰器的使用方法 1 先定一个装饰函数(帽子) 2 再定义一个业务函数(类) 3 把帽子带上 装饰器的语法糖用法: @装饰器名称 @intro 相当于 hello = intro(eat) 为eat函数装饰并返回 ''' # 标准装饰器模版 def wrapper(func): # func 业务函数 def inner(*args,**kwargs): res = func(*args,*kwargs) return res return inner{/tabs-pane}{tabs-pane label="使用装饰器(1)"}# 装饰器 def logger(func): def wrapper(*args): print('我准备开始计算{}函数了'.format(func.__name__)) # 真正执行的业务函数 func(*args) print("计算完类") return wrapper # 第一种方法 def add(x,y): print("{} + {} = {}".format(x,y,x+y)) # 使用装饰器来装饰函数 # 把函数名add作为参数传入装饰器 fun = logger(add) fun(1,2) ''' >>> 我准备开始计算add函数了 1 + 2 = 3 计算完类 '''{/tabs-pane}{tabs-pane label="使用装饰器(2)"}# 装饰器 def logger(func): def wrapper(*args): print('我准备开始计算{}函数了'.format(func.__name__)) # 真正执行的业务函数 func(*args) print("计算完类") return wrapper # 第二种方法 # 使用语法糖 @logger def add(x,y): print("{} + {} = {}".format(x,y,x+y)) add(11,4) ''' >>> 我准备开始计算add函数了 11 + 4 = 15 计算完类 ''' {/tabs-pane}{/tabs}
2023年04月05日
90 阅读
0 评论
0 点赞
2023-04-05
Python 安装使用Django创建项目
1. 安装Djangopip install Django -i https://pypi.tuna.tsinghua.edu.cn/simple/2.1 使用Pycharm创建项目2.2 使命令创建项目(不推荐)django-admin startproject test3. 编辑一个路由在 urls.py 文件中添加一个路由# urls.py # ... from django.shortcuts import HttpResponse def login(request): return HttpResponse("test4 login") urlpatterns = [ path('admin/', admin.site.urls), path('login/', login), ] 4. 启动运行1.点击右上角的运行按钮 运行 manage.py 2.访问 http://127.0.0.1:8000 可以访问到项目首页3.访问 http://127.0.0.1:8000/login/ 可以访问到自定义的路由5. 在项目中创建APP一个项目中不能的功能区分,可以创建不能的Apppython manage.py startapp app名称 python manage.py startapp admin python manage.py startapp user python manage.py startapp buy文件目录解析├── app │ ├── __init__.py │ ├── admin.py 内置后台管理的配置 │ ├── apps.py App的名字 不要动 │ ├── migrations 迁移记录 自动生成 │ ├── models.py 数据库 类-〉Sql【经常使用】 │ ├── tests.py 单元测试 │ └── views.py 视图函数【经常使用】 ├── db.sqlite3 ├── manage.py 项目管理文件 ├── templates └── test4 ├── __init__.py ├── asgi.py 异步运行项目 ├── settings.py 项目配置文件 ├── urls.py 根路由 URL和函数对应关系 └── wsgi.py 同步运行项目{lamp/}
2023年04月05日
90 阅读
0 评论
0 点赞
2023-04-05
Python 进程
''' 进程之间相对独立,不共享全局变量 进程常用方法 start() 启动进程实例 is_alive() 判断子进程是否活着 True/False join([timeout]) 是否等待子进程结束(阻塞主进程) timeout = 时间 terminate() 立即终止子进程 进程与线程对比 进程能够完成多任务,如一台电脑可以运行多个软件 线程能够完成多任务,如一个软件打开多个窗口 1。进程资源不共享,线程资源可共享 2。一个程序至少有一个进程,一个进程至少有一个线程 3。线程的划分尺度小于进程,多线程程序并发性高 4。进程在执行过程中拥有独立的内存单元 5。线程不能独立执行 必须依赖在进程中 6。线程执行开销小,但不理由资源的管理和保护。进程相反 计算密集型 计算量比较大时,用多进程 IO密集型 如爬虫、文件读写 用多线程 ''' import os from multiprocessing import Process # print( os.getpid() ) # 查看当前进程 # print( os.getppid() ) # 查看当前进程父进程 def one(): print("one 子进程ID:%s,父进程id:%s" % (os.getpid(),os.getppid())) def two(): print("two 子进程ID:%s,父进程id:%s" % (os.getpid(),os.getppid())) if __name__ == '__main__': # 创建子进程 p1 = Process(target=one) p2 = Process(target=two) # 启动进程 p1.start() p2.start() # 修改进程名称 p1.name = "亦" p2.name = "尔" print("主进程ID:%s,父进程id:%s" % (os.getpid(), os.getppid())) ''' >>> 主进程ID:12834,父进程id:2918 one 子进程ID:12836,父进程id:12834 two 子进程ID:12837,父进程id:12834 '''
2023年04月05日
105 阅读
0 评论
0 点赞
2023-04-05
Python 多线程 互斥锁
{tabs}{tabs-pane label="使用Lock 互斥锁解决共享资源"}''' 1. threading 模块中定义 Lock() 锁 2. acquire 加锁 release 释放锁 3. 如果在调用acquire方法时,其他线程已经使用六这个互斥锁,那么此时acquire方法会堵塞,知道这个互斥锁释放后才能再次上锁 4. Lock有 acquire() 和 release()。成对出现, 先释放锁后才能加锁 否则会造成死锁 ''' from threading import Thread,Lock a = 0 b = 1000000 #创建全局互斥锁 lock = Lock() def sum1(): for i in range(b): global a a += 1 print("第1次:",a) def sum2(): for i in range(b): global a a += 1 print("第2次:",a) def sum3(): lock.acquire() for i in range(b): global a a += 1 print("第1次:",a) lock.release() def sum4(): lock.acquire() for i in range(b): global a a += 1 print("第2次:",a) lock.release() if __name__ == '__main__': # 没有加互斥锁 # t1 = Thread(target=sum1) # t2 = Thread(target=sum2) ''' 第1次: 1348006 第2次: 1522249 ''' # 加 互斥锁 t1 = Thread(target=sum3) t2 = Thread(target=sum4) ''' 第1次: 1000000 第2次: 2000000 ''' t1.start() t2.start(){/tabs-pane}{tabs-pane label="阻塞主线程,实现同步"} from threading import Thread a = 0 b = 1000000 def sum1(): for i in range(b): global a a += 1 print("第1次:",a) def sum2(): for i in range(b): global a a += 1 print("第2次:",a) if __name__ == '__main__': # 没有加互斥锁 t1 = Thread(target=sum1) t2 = Thread(target=sum2) t1.start() t1.join() # 阻塞主线程,等待子线程执行完 t2.start() ''' 第1次: 1000000 第2次: 2000000 '''{/tabs-pane}{/tabs}
2023年04月05日
100 阅读
0 评论
0 点赞
2023-04-05
Python 多线程
模拟10个人吃饭需要多少时间{tabs}{tabs-pane label="单线程"}import time t1 = time.time() def eat(name): print("%s 吃饭" % str(name)) time.sleep(1) if __name__ == '__main__': # 模拟10个人吃饭 for i in range(10): # 单线程调用 eat(i) t2 = time.time() print('执行的时间:',t2-t1) #>>> 执行的时间: 10.00459885597229 ''' 等上一个人吃完饭,下一个才能吃 '''{/tabs-pane}{tabs-pane label="多线程"}import time t1 = time.time() def eat(name): print("%s 吃饭" % str(name)) time.sleep(1) if __name__ == '__main__': # 模拟10个人吃饭 for i in range(10): #多线程调用 t = threading.Thread(target=eat,args=(i,)) t.start() # 启动线程 t2 = time.time() print('执行的时间:',t2-t1) #>>> 执行的时间: 0.0031862258911132812 ''' 10个人可以同时吃饭 '''{/tabs-pane}{/tabs}多线程 线程守护与阻塞import time from threading import Thread def funa(): print("学习") time.sleep(1) print("看鲁迅的书呢") def funb(): print("休息") time.sleep(2) print("闭目养神呢") if __name__ == '__main__': f1 = Thread(target=funa) f2 = Thread(target=funb) # 守护线程 f1.daemon = True f2.daemon = True # 开启子线程 f1.start() f2.start() # 阻塞主线程 等待子线程执行完 f1.join() f2.join() print("这是主线程") ''' >>> 学习 休息 看鲁迅的书呢 闭目养神呢 这是主线程 如果没有 join() 阻塞主线程 >>> 学习 休息 这是主线程 '''线程封装 , start()和run()的区别''' 1. 继承Thread 2. 重构run方法 线程执行是 无序的,他是有cpu来决定的。 start() 启动线程。声明子线程的函数已经就绪,等待被cpu执行 run() 允许线程。执行到这个子线程时,自动调用的方法 ''' import threading from threading import Thread import time class Ourthrad(Thread): # 重构run方法 def run(self): print(f"当前线程 {threading.current_thread().name}") #time.sleep(2) #print("啦啦啦") if __name__ == '__main__': # 创建线程实例 t1 = Ourthrad() t2 = Ourthrad() t1.start() #>>> 当前线程 Thread-1 t2.start() #>>> 当前线程 Thread-2 t1.run() #>>> 当前线程 MainThread t2.run() #>>> 当前线程 MainThread
2023年04月05日
91 阅读
0 评论
0 点赞
2023-04-05
Python 中间件
定义中间件在 根目录 下,创建 midd文件夹,在 midd文件夹 下创建 md.py 文件,写入 类为 MyMd 的中间件''' 自定义一个中间件 继承 MiddlewareMixin ''' from django.utils.deprecation import MiddlewareMixin class MyMd(MiddlewareMixin): def process_request(self, request): ''' 前置中间件 :param request: 请求数据 :return: 无发返回值或返回None,放行 不放行 返回 redirect、render、http... ''' # 【例如】如果是登录页面放行,不是登录页面判断cookie if request.path_info == '/login/': return else: pass print("前置中间件") pass def process_response(self, request, response): ''' 后置中间件 :param request: 请求数据 :param response: 响应返回数据 :return: ''' print("后置中间件") return response注册中间件在配置文件中的 settings.py 中 注册中间件# 中间件 按顺序执行 MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', # csrf认证 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', # 自定中间件 'midd.md.MyMd' ] 执行结果先执行 前置中间件 ,再执行 业务代码 ,最后执行 后置中间件前置中间件 index 后置中间件
2023年04月05日
80 阅读
0 评论
0 点赞
2023-04-05
Python 网络通讯 使用socket接收和发送信息
发送消息 ''' 发送消息 ''' # 1. 导入内置socket import socket # 2. 创建套接字对象 udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 3. 指定发送地址 ''' ip port ''' dest_address = ('192.168.0.197', 8080) # 4. 创建要发送的信息 send_message = input("请输入要发送的消息") # 5. 通过socket对象将消息发送 # 需要对字符进行编码 udp_socket.sendto(send_message.encode("utf-8"),dest_address) # 6. 关闭 udp_socket.close()接收消息 ''' 接收消息 ''' # 1. 导入内置socket import socket # 2. 创建套接字对象 udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 3.绑定本机消息 ''' 如果IP地址为空,默认为本机的ip ''' localhost_address = ('',7788) udp_socket.bind(localhost_address) # 4. 等待接收消息 ''' 接收的消息是一个元组 第一个元素 是 消息内容 第二个元素 是 当前发送方的地址 ''' recv_msg = udp_socket.recvfrom(1024); # 1024 本次能够接收的最大消息字节数 # 5. 显示消息 print(recv_msg[0].decode("utf-8")) # 内容解码 print(recv_msg[1]) # 6. 关闭 udp_socket.close() print(",,,")DEMO import socket def send(udp_socket): msg = input("请输入要发送的消息") dest_address = ('192.168.0.197', 8080) udp_socket.sendto(msg.encode("utf-8"), dest_address) def recv(udp_socket): recv_msg = udp_socket.recvfrom(1024); # 1024 本次能够接收的最大消息字节数 msg = recv_msg[0].decode("utf-8") recv_IP = recv_msg[1] print(f'消息:{msg} 来自 {recv_IP}') def main(): # 创建 udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 绑定本机消息 udp_socket.bind( ('',7788) ) # 死循环 保证程序一直运行 while True: print('=' * 30) print("1.发送消息") print("2.接收消息") print("3.结束聊天") print("=" * 30) op_num = input("请输入操作序号") if op_num == '1': # 发送消息 send(udp_socket) pass elif op_num == '2': # 接收消息 recv(udp_socket) pass elif op_num == '3': # 结束聊天 break else: print("输入有误") udp_socket.close() print("关闭聊天") if __name__ == '__main__': main()
2023年04月05日
168 阅读
0 评论
0 点赞
2023-04-05
Python ORM数据库操作
创建数据库::(灯泡) 使用工具或者命令 自己创建一个数据库项目连接数据库首先确保已经安装了支持MySQL的Python驱动。可以使用pip命令来安装:pip install mysqlclientpip install pymysql打开项目的settings.py文件,并添加如下配置信息到DATABASES字典中:DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': '<database_name>', # MySQL数据库名称 'USER': '<username>', # MySQL登录用户名 'PASSWORD': '<password>', # MySQL登录密码 'HOST': '<host>', # MySQL服务器地址(默认为localhost) 'PORT': '<port>', # MySQL服务器端口号(默认为3306) } }创建表::(灯泡) 去app下的models.py中创建指定的类 + 命令,自动创建表from django.db import models # Create your models here. class UserInfo(models.Model): # id = models.AutoField(primary_key=True) #会自动创建 name = models.CharField(max_length=30, verbose_name='姓名') #varchar password = models.CharField(max_length=30, verbose_name='密码') #varchar age = models.IntegerField(verbose_name='年龄') # int email = models.EmailField(verbose_name='邮箱',max_length=45) #varchar ::(灯泡) 命令''' 必须先在settings.py中注册app,否则无法创建 ''' ''' 读取所有已注册的App中的models.py文件,根据类生成配置文件并放到app下的migrations目录 ''' python manage.py makemigrations ''' 根据配置文件自动生成相应的SQL语句 ''' python manage.py migrate 修改、新增 表修改 models.py 后 重新执行命令class UserInfo(models.Model): # id = models.AutoField(primary_key=True) #会自动创建 name = models.CharField(max_length=30, verbose_name='姓名') #将 password字段 改成 pwd pwd = models.CharField(max_length=30, verbose_name='密码') age = models.IntegerField(verbose_name='年龄') # int email = models.EmailField(verbose_name='邮箱',max_length=45) # 添加一列 qq = models.CharField(max_length=11, verbose_name='QQ',null=True,blank=True) # 添加一列 null=True,blank=True 表示可以为空,否则会报错 wx = models.CharField(max_length=20, verbose_name='微信',default="") # 添加一列default="" 设置默认值 # 新增一个表 class Departmert(models.Model): title = models.CharField(max_length=32, verbose_name='标题') 数据操作 增删改查::(灯泡) 新增# 第一种方式 models.UserInfo.objects.create(name="张三", password="12344556", age=18, email="123@qq.com") # 第二种方式 models.UserInfo.objects.create(**{"name":"李四", "password":"123456", "age":18, "email":"456@qq.com"})::(灯泡) 查询#查询所有 【返回 列表】 res = models.UserInfo.objects.all() # 查询 张三且18岁 【返回 列表】 res = models.UserInfo.objects.filter(name="张三",age=18) # 查询 张三且18岁 【返回 一行对象】 取一条数据 res = models.UserInfo.objects.filter(name="张三",age=18).frist() ''' 未查询数据时返回 None ''' #查询 排序 res = models.UserInfo.objects.all().order_by("id") # asc res = models.UserInfo.objects.all().order_by("-id") # desc::(灯泡) 修改''' 修改 在查询条件后面加上 update() ''' # 把所有年龄改成 19 models.UserInfo.objects.all().update(age=19) # 把id=20的用户年龄改成 19 models.UserInfo.objects.filter(id=10).update(age=20)::(灯泡) 删除''' 删除 在查询条件后面加上 delete() ''' # 删除所有用户 models.UserInfo.objects.all().delete() # 删除张三18岁的用户 models.UserInfo.objects.filter(name="张三",age=18).delete(){lamp/}使用在 web/ views.py 中写入数据库操作代码, 并在 urls.py 中配置好路由,访问不同的路由实现对应的功能from web import views urlpatterns = [ path('admin/', admin.site.urls), path('login/', views.login), path('index/', views.index), path('adduser/', views.addUser), path('updateuser/', views.updateUser), path('deleteuser/', views.deleteUser), ] from django.shortcuts import render,redirect from django.shortcuts import HttpResponse from web import models # 导入models import random # 新增用户 def addUser(request): username = "sss %s" % str(random.random()); models.UserInfo.objects.create(name = f"张{username}", password="123456", age=18, email="123@qq.com") return HttpResponse("添加成功") # 修改用户 def updateUser(request): models.UserInfo.objects.filter(id=1).update(age=15) return HttpResponse("修改成功") # 删除用户 def deleteUser(request): models.UserInfo.objects.filter(age=18).delete() return HttpResponse("删除成功")创建带外键的表from django.db import models class Dept(models.Model): title = models.CharField(verbose_name='名称',max_length=32) class User(models.Model): name = models.CharField(verbose_name='姓名',max_length=12) age = models.IntegerField(verbose_name='年龄') salary = models.FloatField(verbose_name='工资') # dept_id = models.IntegerField(verbose_name='部门ID') # 只是创建了一个字段,没有关联 # 关联外键 ''' dept 创建的时候会创建 dept_id to_field="id" 可以不写,默认是id on_delete=models.CASCADE 级联删除 on_delete=models.SET_NULL 设置为空,但是必须允许字段为空 null=True,blank=True on_delete=models.SET_DEFAULT 设置为默认值 加上 default=1 ''' # dept = models.ForeignKey(verbose_name='关联部门',to='Dept',to_field="id",on_delete=models.CASCADE) # dept = models.ForeignKey(verbose_name='关联部门',to='Dept',on_delete=models.SET_NULL,null=True,blank=True) dept = models.ForeignKey(verbose_name='关联部门', to='Dept', on_delete=models.SET_DEFAULT, default=1) ''' 有外键表的数据操作 ''' ''' 新增 ''' # 创建数据时,使用 dept_id = 部门id models.User.objects.create(name = '张三',age = 22,salary = 3000, dept_id = 1) # 创建数据时,也可以使用 dept = 部门对象 deptObj = models.Dept.objects.filter(id=1).first() models.User.objects.create(name = '张三',age = 22,salary = 3000, dept = deptObj) ''' 查询 ''' # 使用部门ID models.User.objects.filter(dept_id = 1) # 通过部门名称搜索用户 dept__name 双下划线。 models.User.objects.filter(dept__name = '开发部') # 获取用户的部门名称 UserObj = models.User.objects.filter(id=1).first() UserObj.dept.name 报错{message type="error" content=" Django提示mysql版本过低:django.db.utils.NotSupportedError: MySQL 8 or later is required (found 5.7.26)."/}{x} 因为mysql5.7及以下是免费的数据库,8.0之后是收费的。使用免费的数据库更放心,使用上没有什么区别。这个提示只是Django的版本检测提示,把它注释掉就好了。 项目\venv\Lib\site-packages\django\db\backends\base\base.py 中 找到 check_database_version_supported() 函数 ,注释掉。
2023年04月05日
116 阅读
0 评论
0 点赞
1
2