python常见问题详解
Python
python 没有多态,而是鸭子类型
多继承,没有接口,可通过语法糖实现接口的作用
lambda中只能有一句
"/"表示之前的参数是必须是位置参数,”**“表示是后面的必须是关键字参数
Python多进程

Python 多线程是伪多线程
多线程子线程会随着主线程结束而中断,因此一般在主线程中调用thread.join()
线程方法
import threading t = thread.Thread() t.start(); # 没有返回值,若需要返回值可继承该类,在类中保存计算结果,用以获取 # 或者传入全局结果参数,
import thread # threading 封装了thread
import threadpool # 三方库
import threading
t = thread.Thread()
t.start();
# 没有返回值,若需要返回值可继承该类,在类中保存计算结果,用以获取
# 或者传入全局结果参数,
import thread # threading 封装了thread
import threadpool # 三方库
# 线程池
import asyncio
async def coro(i):print("core start",i)ret = await get(i) # 此处为耗时的io等操作print("core end",i)return ret
async def get(i):await asyncio.sleep(5)return i
loop = asyncio.get_event_loop()
a = [asyncio.ensure_future(coro(i)) for i in range(10)]
loop.run_until_complete(asyncio.wait(a))
loop.close()
print([i.result() for i in a])import concurrent.futures
with concurrent.futures.ThreadPoolExecutor() as pool:results = pool.map(function,args) # 注意此处是任务提一提交完,args为参数列表的列表# result 线程的结果# 或者future = pool.submit(function,args) # 每次提交一个future.result() # 结果for futures in futures: # 顺序执行xxxxfor futures in concurrent.futures.as_completed(futures): # 不会按照顺序执行,那个线程先结束先执行那个xxxx
Python协程
单线程的IO多路复用,使用了单线程中IO阻塞的那一段时间,但其实还是顺序执行,按照IO阻塞切换,因此不会出现协程安全问题,可以说是异步操作,开销小,切换容易。

GIL锁:全局解释器锁,Cython
cpu计算时线程需要获取GIL锁,只有一个,因此多核cpu也只有一个线程可以执行,主要防止多线程垃圾回收不安全
GIL只保证有一个线程运行,但不保证线程何时切换,因此还有线程安全问题。
程序代码现线程安全问题还是要加LOCK
import threading
lock = threading.Lock()
lock.acquire()
lock.release()
# 或者
with lock:xxxx
执行IO操作时会释放锁,因此对于IO密集型任务,可以用多线程,计算密集型,不能发挥多核,多线程作用。
引用计数法+循环检测:GC
面向对象
类中的变量是静态变量,方法通过@staticmethod修饰,是静态,self.xxx=yy 实例变量
WWW
import urllib.request
if __name__ == '__main__':data = urllib.parse.urlencode({'wd':'python'}).encode("utf8")request = urllib.request.urlopen("http://baidu.com",data=data)with request:msg,hd = request.read(),request.info()print(msg)print(hd)
SMTP
# smtplib email 配合使用
# 或是unix系统中的sendmail命令
SOCKET
# 旧版本异步通信
import asyncore
class HTTPClient(asyncore.dispatcher):def __init__(self,host):# 初始化父类asyncore.dispatcher.__init__(self)# 创建一个socket对象self.create_socket()# 连接服务器端self.connect((host,80))#发送优化self.buffer = b'GET /HTTP/1.1\r\nHost: www.baidu.com\r\n\r\n'def handle_connect(self):print('服务器连接成功')def handle_close(self):print('服务器连接断开')self.close()def readable(self):return Truedef handle_read(self):# 指定一次读取1024个字节,如果一次没有读完的话,那么事件循环会分多次把内容读完为止print(self.recv(1024).decode())def writable(self):return (len(self.buffer)>0)def handle_write(self):sent = self.send(self.buffer)self.buffer = self.buffer[sent:]
if __name__ == '__main__':HTTPClient('www.baidu.com')asyncore.loop()import asyncore
import socketclass EchoHandler(asyncore.dispatcher_with_send):def handle_read(self):data = self.recv(8192)if data:self.send("hello".encode('utf8')+data)
class EchoServer(asyncore.dispatcher):def __init__(self, host, port):asyncore.dispatcher.__init__(self)self.create_socket(socket.AF_INET, socket.SOCK_STREAM)self.set_reuse_addr()self.bind((host, port))self.listen(5)def handle_accept(self):pair = self.accept()if pair is not None:sock, addr = pairprint('Incoming connection from %s' % repr(addr))handler = EchoHandler(sock)
if __name__ == '__main__':server = EchoServer('10.101.33.82', 8080)asyncore.loop()
import asyncio
async def handle_echo(reader, writer):while True:data = await reader.read(100)message = data.decode("gbk")addr = writer.get_extra_info('peername')print(f"Received {message!r} from {addr!r}")if message == '-1':writer.write("将会结束!".encode("gbk"))else:writer.write(message.encode("gbk"))await writer.drain()if message == '-1':writer.close()break
async def main():server = await asyncio.start_server(handle_echo, '10.101.33.82', 8080)addr = server.sockets[0].getsockname()print(f'Serving on {addr}')async with server:await server.serve_forever()asyncio.run(main())
编码
# 编码,utf8
#3字节 1110xxxx 10xxxxxx 10xxxxxx 中文:"中"
# utf8--> 4e2d -》0100 1110 0010 1101
b'\xe4\xb8\xad'.decode('utf8') # “中“
# 与上边组 1110 0100 10111000 10101101 -》就是 e4b8ad
b’xxxxx’ xxxx 应该是字节数,例如ascii中的,或者是用16进制表示的汉字。
b’a’ == b’\x61’。
b’\e4\xb8\xad’ 按照utf8解码后就是‘中’。
图形界面
Python3 Tkinter Qt
wxwidgets,Kivy,Fltk
相关文章:
python常见问题详解
Python python 没有多态,而是鸭子类型 多继承,没有接口,可通过语法糖实现接口的作用 lambda中只能有一句 "/"表示之前的参数是必须是位置参数,”**“表示是后面的必须是关键字参数 Python多进程 Python 多线程是伪多线…...
MyBatis-常用SQL操作
一、动态SQL 1.概述】 1.1动态SQL: 是 MyBatis 的强大特性之一,解决拼接动态SQL时候的难题,提高开发效 1.2分类: if choose(when,otherwise) trim(where,set) foreach 2.if 2.1 做 where 语句后面条件查询的,if 语句是可以…...
DSPE-PEG-TCO;磷脂-聚乙二醇-反式环辛烯科研用化学试剂简介
中文名称 磷脂-聚乙二醇-反式环辛烯 英文名称 DSPE-PEG-TCO 外观:粉末或半固体,取决于分子量。 溶剂:溶于大部分有机溶剂,如:DCM、DMF、DMSO、THF等等。在水中有很好的溶解性 稳定性:冷藏保存ÿ…...
华为OD机试真题Java实现【最小施肥机能效】真题+解题思路+代码(20222023)
最小施肥机能效 某农场主管理了一大片果园,fields[i]表示不同果林的面积,单位:( m 2 m^2 m2),现在要为所有的果林施肥且必须在 n 天之内完成,否则影响收成。 小布是果林的工作人员,他每次选择一片果林进行施肥,且一片果林施肥完后当天不再进行施肥作业。 假设施肥机的…...
【问题记录】【排查问题的方法总结】vue3中数据失去响应式?为什么数据变了,视图只更新了一次就不再更新了?
一、问题概述: 持续请求的数据变动之后,控制台输出绑定的响应式变量 mapObj 的确变了,但是视图上只更新了一次,后续就不再更新了。 二、排查过程: PC上用定时器setInterval模拟数据(全是小于0的数据)更新࿰…...
基于遗传算法的柔性生产调度研究(Matlab代码实现)
👨🎓个人主页:研学社的博客💥💥💞💞欢迎来到本博客❤️❤️💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密…...
Heroku的12条准则
I. Codebase One codebase tracked in revision control, many deploys 要有代码仓库,多版本控制,如使用git来管理代码仓库。 II. Dependencies Explicitly declare and isolate dependencies 明确声明依赖,隔离依赖。强依赖往往会导致连…...
Qt图片定时滚动
目录参考结构PicturePlay.promain.cpppictureplay.hpictureplay.cpppictureplay.ui效果参考 Qt图片浏览器 QT制作一个图片播放器 Qt中自适应的labelpixmap充满窗口后,无法缩小只能放大 可以显示jpg、jpeg、png、bmp。可以从电脑上拖动图到窗口并显示出来或者打开文件…...
深度学习引言
动手学深度学习pytorch版-笔记原文链接日常生活中的机器学习机器学习中的关键组件数据模型目标函数优化算法各种机器学习问题监督学习回归分类标记问题搜索推荐系统序列学习无监督学习与环境互动强化学习特点小结原文链接 动手学深度学习pytorch中文版 日常生活中的机器学习 …...
ESP32 WIFI使用介绍
ESP32 WIFI 概述 WIFI 库支持配置及监控 ESP32 WIFI 连网功能。支持配置 station 模式(即 STA 模式或 WIFI 客户端模式),此时 ESP32 连接到接入点(AP)。AP 模式(即 soft-AP 模式或接入点模式)&…...
JavaEE简单实例——MyBatis的一对一映射的嵌套查询的简单介绍和基础配置
简单介绍: 在前一章我们介绍了关于MyBatis的多表查询的时候的对应关系,其中有三种对应关系,分别是一对一,一对多,多对多的关系。如果忘记了这三种方式的对应形式可以去前面看看,一定要记住这三种映射关系的…...
详解指针(进阶版)(1)
前言:总篇章分为(1)和(2),本篇内容包括:指针数组,数组指针,&数组名与数组名的区分 数组传参 ,函数指针,函数指针数组 part 1:指…...
【OJ】盐荒子孙
📚Description: 盐体图 盐是对人类生存具有重要意义的物质之一。当中国古人从肉食为主转向谷食为主的时候,吃盐的需求就发生了,因为动物血肉里面包含有足够人体所需的盐分,而谷 物本身不包含盐分。在长达几十万年的旧石器时代&…...
Java数据结构 —— 手写线性结构(稀疏数组、栈、队列、链表)
目录 稀疏数组 顺序表 链表 单向顺序链表 双向链表 双向循环链表求解约瑟夫环(Joseph) 栈 顺序栈 队列 顺序队列 顺序循环队列 稀疏数组 当一个数组中大部分值为0,或者相同时,可以采用稀疏数组的方式来保存,从而节约存储…...
docker部署gitlab过程中遇到的一些问题记录
文章目录用nginx代理docker部署的gitlab服务密码重置docker0网卡异常离线安装apt的包用nginx代理docker部署的gitlab服务 一般咱们不会去暴露很多端口给外面,所以部署完gitlab后,我希望能够用nginx来代理我们的gitlab服务。 gitlab的docker部署参考这个…...
数组的定义与使用
文章目录 数组的基本概念数组的基本用法数组与方法互操作一、数组的基本概念 数组:可以看成是相同类型元素的一个集合。在内存中是一段连续的空间。 注意:1. 数组中存放的元素其类型相同 2. 数组的空间是连在一起的 3. 每个空间有自己的编号࿰…...
SAP ABAP用程序删除开发KEY
在BASISI系统管理中,用户的开发Key存储在DEVACCESS表中,如果由于审计需要删除一些用户的开发Key,而系统有限制SM30, SE16 or SE16N 等事务码的使用,你就可以通过一个小程序去删除开发Key。 代码如下: REPORT ZBCDEV…...
安卓设备TF卡概率性无法识别问题
现象 使用t卡的设备出货前检测是正常的,放在仓库中或出货后再开机,有概率的机器无法识别,重新插拔或重启无效,拔下来放pc电脑上识别后再插回设备则恢复正常能识别。 设备信息 系统: Android 8.1.0 数量:抽检有12%的设备无法识别 TF卡:SanDisk Ultra 64GB 10 A1 microS…...
linux安装nodejs和微信小程序自动化部署操作
一.运行环境安装 Node.js 并且版本大于 8.0基础库版本为 2.7.3 及以上开发者工具版本为 1.02.1907232 及以上安装node.js(1).下载node包官网地址:https://nodejs.org/en/download/如果英文不好的,可以看中文网站:https://nodejs.org/zh-cn/download/点击上面的进行下载,当然,也…...
JavaScript高级 Proxy Reflect
1. Proxy 1. 监听对象的变化 有一个对象,我们希望监听这个对象中的属性被设置或获取的过程 我们可以通过 Object.defineProperty 来实现 const obj {name: "why",age: 18,height: 1.88 }// 需求: 监听对象属性的所有操作 // 监听属性的操作 // 1.针对…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案
JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停 1. 安全点(Safepoint)阻塞 现象:JVM暂停但无GC日志,日志显示No GCs detected。原因:JVM等待所有线程进入安全点(如…...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...
安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...
基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...
Java求职者面试指南:计算机基础与源码原理深度解析
Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...
DingDing机器人群消息推送
文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人,点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置,详见说明文档 成功后,记录Webhook 2 API文档说明 点击设置说明 查看自…...
