wxPython和pycairo练习记录9

3天干完6个月的活,Claude把模型搬上AMD 一条挺刺激的消息:Anthropic 给投资人的材料里有一张幻灯片,写着它的 Claude Mythos Preview 只花了大约​,就摸清了怎么让另一个 Claude 模型在 AMD 的 MI355X 上跑起来。同一处还写了个对照数字:过去给一块新芯片做推理适配,通常要几十名工程师、​。3 天对 6 个月,这个比值太扎眼,当天中文互联网上就冒出一堆「英伟达的护城河塌了」的说法。我把能翻到的材料都翻了一遍,越看越觉得,塌掉的那一小块是真的,可塌的位置和很多人想的不一样。 阅读详情

wxPython和pycairo练习记录9

9.1 键盘事件处理

想要实现的效果是,同时按下多个方向,无论松开或按下其他键,总是响应剩余最近按下的键,这里直接用列表存储处在按下状态的按键代码。

测试 wxPython 按下多个方向后松开最近按下的,之前保持按住的会失效 。那就不能靠按键直接改变坐标,只改变速度方向,然后坐标的计算移动交给定时器刷新。射击按键行为也交给定时器,只改变状态,不执行操作。

效果看起来还不错。之后可以看到,坦克和砖墙碰撞时的回弹问题也没有了。那么之前不是因为 wxPython 控件刷新用 Update 还是 Refresh 导致的,而是键盘事件处理逻辑没弄对。
在这里插入图片描述

class Player(Tank):
    def __init__(self, x, y, surface=cv.surfaces["player"], rect=(0, 0, 48, 48), fps=100):
        super(Player, self).__init__(x, y, surface, rect, fps)
        self._direction = wx.WXK_UP # 当前方向
        self._keydown = [] # 当前按下的方向键

    def OnKeyDown(self, e):
        key = e.GetKeyCode()

        # 方向控制
        if self._directions.get(key):
            self._dx = 0
            self._dy = 0
            self._direction = key
            self._directions[key]()
            if key not in self._keydown:
                self._keydown.append(key)

        # 开火
        if key == wx.WXK_SPACE and self._weapon:
            self._weapon.SetFireState(True)

    def OnKeyUp(self, e):
        key = e.GetKeyCode()

        if self._directions.get(key):
            # 按键弹起,从按下方向列表移除
            self._keydown.remove(key)
            # 重置速度方向
            self._dx = 0
            self._dy = 0
            if self._keydown:
                # 方向设为最后按键方向
                self._direction = self._keydown[-1]
                self._directions[self._direction]()
            else:
                # 按键全部弹起后,移动和动画停止
                self.Stop() # 停止动画

        # 停火
        if key == wx.WXK_SPACE and self._weapon:
            self._weapon.SetFireState(False)

    def GetDirection(self):
        return self._direction

    def UpdateXY(self):
        # 坐标移动
        self._x += self._dx * self._speed
        self._y += self._dy * self._speed

    def Update(self):
        # 交给定时器执行
        if self._dx or self._dy:
            self.UpdateXY()

        if self._weapon.IsFire():
            self._weapon.Fire()

        super().Update()

9.2 雷达

雷达主要目的是检测范围,有两个作用,一个感应进入范围,一个是感应离开范围。范围为障碍外边框到雷达最外层之间的区域,多层范围则为相应范围外边框到最外层之间的区域,相当于取两个矩形的差集。
在这里插入图片描述

碉堡是按多层感应,需要写好相应的雷达和各层范围处理函数。泥坑使用默认10像素距离的雷达检测离开行为。当然,暂时还是没解决相邻障碍作用相互影响的问题。

class Blockhouse(Obstacle):
    # 碉堡
    def __init__(self, x, y, surface=cv.surfaces["wall_blockhouse"], parentLayer=cv.layer, radius=150):
        super(Blockhouse, self).__init__(x, y, surface, parentLayer)

        self._canCross = False # 不可穿行
        self._canDestroy = True # 可打破
        self._canBulletCross = False # 子弹不可穿行
        self._buff = False # 无特殊效果
        self._radius = radius # 雷达半径
        self._direction = wx.WXK_UP # 射击方向

        # 加载武器和子弹
        self._weapon = Weapon(capacity=350, speed=1, interval=500)
        self._weapon.Loaded(self)
        self._weapon.SetFireState(True)
        for i in range(350):
            self._weapon.AddBullet(Bullet(type=3))

        # 绑定雷达
        self._radar = BlockhouseRadar(self, self._radius)

    def LoadWeapon(self, weapon):
        weapon.Loaded(self)
        self._weapon = weapon

    def GetWeapon(self):
        return self._weapon

    def GetDirection(self):
        return self._direction

    def GetRadar(self):
        return self._radar

    def Destroy(self):
        self._destroyed = True
        self._weapon.Destroy()
        self._radar.Destroy()

    def Fire(self, tank, interval):
        # 坦克进入范围射击,并调整相应开火间隔时间
        self._weapon.SetInterval(interval)
        # 向坦克调整射击方向并射击
        self._direction = self._radar.DetectDirection(tank)
        # 正方向即开火
        if self._direction:
            self._weapon.Fire()

    def Act(self, tank):
        self.Fire(tank, 100)

    def SecondAct(self, tank):
        self.Fire(tank, 500)

    def ThirdAct(self, tank):
        self.Fire(tank, 1000)


class Mud(Obstacle):
    # 泥坑
    def __init__(self, x, y, surface=cv.surfaces["wall_mud"], parentLayer=cv.layer1):
        super(Mud, self).__init__(x, y, surface, parentLayer)

        self._canCross = True # 可穿行
        self._canDestroy = False # 不可打破
        self._canBulletCross = True # 子弹可穿行
        self._buff = True # 有特殊效果

        # 绑定雷达,默认半径,用于检测离开行为
        self._radar = Radar(self)

    def GetRadar(self):
        return self._radar

    def Buff(self, tank):
        # 进入范围
        if tank.GetSpeed() > 1:
            tank.SetSpeed(1)

    def Act(self, tank):
        # 离开范围,经过默认雷达范围
        if tank.GetSpeed() == 1:
            tank.ResetSpeed()

# -*- coding: utf-8 -*-
# radar.py

import wx
import wx.lib.wxcairo
import cairo
from const import cv
from layer import Layer


class Radar:
    def __init__(self, sprite, radius=10, parentLayer=cv.layer4):
        self._sprite = sprite  # 绑定对象
        self._radius = radius  # 作用半径
        self.SetRadius(self._radius)
        self._destroyed = False  # 销毁状态

        # 默认加入默认图层
        self._layer = Layer(self)
        parentLayer.Append(self._layer)

    def GetX(self):
        return self._x

    def GetY(self):
        return self._y

    def GetRect(self):
        return wx.Rect(self._x, self._y, self._width, self._height)
    
    def GetRadius(self):
        return self._radius

    def SetRadius(self, radius):
        x, y, width, height = self._sprite.GetRect()
        self._width = width + radius * 2
        self._height = height + radius * 2
        self._x = x - radius
        self._y = y - radius

    def GetSprite(self):
        return self._sprite

    def Bind(self, sprite):
        self._sprite = sprite
        self.SetRadius(self._radius)

    def GetLayer(self):
        return self._layer

    def SetParentLayer(self, layer):
        self._layer.SetParent(layer)

    def IsDestroyed(self):
        return self._destroyed

    def Destroy(self):
        self._destroyed = True

    def DetectDirection(self, obj):
        # 识别目标是否在绑定对象正对方向
        tx, ty, tw, th = obj.GetRect()
        x, y, w, h = self._sprite.GetRect()
        direction = None  # 目标所在正方向

        if tx > x - tw and tx < x + w:
            if ty < y:
                # print("up")
                direction = wx.WXK_UP
            else:
                # print("down")
                direction = wx.WXK_DOWN

        if ty > y - th and ty < y + h:
            if tx < x:
                # print("left")
                direction = wx.WXK_LEFT
            else:
                # print("right")
                direction = wx.WXK_RIGHT
        return direction

    def InRange(self, obj, distance):
        # 判断目标是否在范围内,范围取指定范围到最外层之间的区域
        sx, sy, sw, sh = self._sprite.GetRect()
        ox, oy, ow, oh = obj.GetRect()
        left = sx - distance - ow
        right = sx + sw + distance
        up = sy - distance - oh
        down = sy + sh + distance

        if ox < left or ox > right or oy < up or oy > down:
            return True
        else:
            return False

    def CheckOptActions(self, obj):
        # 绑定雷达的对象默认需要实现可执行方法 Act,响应离开行为
        if self.InRange(obj, 0):
            return self._sprite.Act


class BlockhouseRadar(Radar):
    def CheckOptActions(self, obj):
        if self.InRange(obj, 50):
            action = self._sprite.ThirdAct
        elif self.InRange(obj, 30):
            action = self._sprite.SecondAct
        else:
            action = self._sprite.Act
        return action

9.3 单帧动画

得益于之前将 Sprite 的数据和绘制的更新都托管给 Layer ,创建基于单独一个 surface 的动画变得非常容易。

比如,创建一个用于装饰头像或物品的光线流动的线框,只需要四步:继承 Sprite ,设置绘制时需要更新的变量,绘制图像,编写变量更新规则。
在这里插入图片描述

pycairo 有专门用于设置填充模式的 Pattern ,比如之前用过的 cairo.SolidPattern 是纯色填充,另外还有线性渐变、径向渐变,有点像代码版的 photoshop 。

pycairo 绘图,找一个相似的概念应该叫矢量蒙版,设置一个底图 source ,上面可以绘制路径 path ,然后执行 stroke 、fill 或 paint 操作就得到结果图像 surface 。

class Box(Sprite):
    def __init__(self, x, y, width, height, parentLayer=cv.layer):
        self.angle = 0
        self._width = width
        self._height = height
        surface = self.Draw()
        super(Box, self).__init__(x, y, surface, parentLayer=parentLayer)

    def Draw(self):
        # 主图像,颜色需要 alpha 实现只显示绘制内容
        width = self._width
        height = self._height
        surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, width, height)
        ctx = cairo.Context(surface)

        # 设置径向渐变模式
        pattern = cairo.RadialGradient(width / 2, height / 2, 0, width / 2, height / 2, max(width, height))
        # 设置颜色渐变的起始点,有点像 CSS 的 keyframes
        pattern.add_color_stop_rgb(0, 0, 0.5, 1)
        pattern.add_color_stop_rgb(0.5, 1, 1, 0)
        pattern.add_color_stop_rgb(1, 1, 0, 0)
        ctx.set_source(pattern)
        # 绘制矩形边框路径
        ctx.rectangle(0, 0, width, height)
        ctx.set_line_width(3)
        # 绘图,相当于确定需要绘制的部分
        ctx.stroke()

        # 绘制黄色矩形线框
        surface2 = cairo.ImageSurface(cairo.FORMAT_ARGB32, width, height)
        ctx2 = cairo.Context(surface2)
        ctx2.rectangle(0, 0, width, height)
        ctx2.set_line_width(3)
        ctx2.set_source_rgb(1, 1, 0)
        ctx2.stroke()

        # 绘制夹角45度扇形,角度变量瞬时针旋转
        surface3 = cairo.ImageSurface(cairo.FORMAT_ARGB32, width, height)
        ctx3 = cairo.Context(surface3)
        # 移动到圆心,并以圆心连线弧形得到扇形
        ctx3.move_to(width / 2, height / 2)
        # 每次旋转5度
        ctx3.arc(width / 2, height / 2, max(width, height), math.pi / 36 * self.angle, math.pi / 36 * self.angle + math.pi / 4)
        ctx3.close_path()
        ctx3.fill()

        # 设置混合模式,取黄色线框与扇形相交处绘制
        ctx2.set_source_surface(surface3)
        # DEST_IN ,取交集,dest 为 surface3,in 表示显示在里面
        ctx2.set_operator(cairo.Operator.DEST_IN)
        ctx2.paint()

        # 把混合后的线框绘制到主图渐变边框上,后绘制显示在上面
        ctx.set_source_surface(surface2)
        ctx.paint()

        return surface

    def Update(self):
        # 更新变量,默认 Layer 更新数据时调用
        # 每次增加5度,最多360度
        self.angle += 1
        self.angle = self.angle % 72
        self._surface = self.Draw()

如何处理动态语言(Python / JS)的“隐形”调用链? 本文揭示动态语言(Python/JS)中静态AST解析导致调用链“断链”的核心问题,提出通过运行时追踪补全图谱的解决方案。基于Code-Graph-RAG的cgr trace机制,分别利用pytest插件与V8 Profiler捕获真实调用路径,将动态边合并至静态图谱,并在权重体系中提升动态边优先级。实践表明,该方法可显著提升图谱覆盖率,实现“结构+行为”双视角理解代码,为MCP与Rerank系统提供可靠支持。 阅读详情

相关推荐

eNSP无法启动AR报错码40,而且按照eNSP帮助手册排查都没用,我的处理方法【自己存档版】

eNSP无法启动AR报错码40,而且按照eNSP帮助手册排查都没用,我的处理方法【自己存档版】

mizhiakk的博客 8426

wxPython和pycairo练习记录8

经过障碍物的编写,发现需要停止前进并重新梳理一下。1.新的检测项加入时,已经在向混乱发展。是时候用上封装变化的编程工具,用策略模式或状态模式重写。2.显示,在基类引入层级和优先级,不同层低层级先绘制,同层高优先级先绘制。3.范围的碰撞和本身的碰撞的作用顺序。还有像已经实现的碉堡,只有一个外层碰撞区域,如果要多加几层呢,最外层出现坦克,射速为1,再近一层射速为5,最近一层射速达到20。

SmileBasic的博客 387

从网口变压器到TVS管:手把手设计通过4KV浪涌的以太网电路

本文详细解析工业级以太网接口4KV浪涌防护设计,从网口变压器选型到TVS管布局,提供通过IEC61000-4-5标准测试的完整方案。重点介绍Bob Smith电路优化和PCB设计技巧,帮助工程师有效应对雷电感应和设备开关瞬态干扰,确保工业设备稳定运行。

study的专栏 287

wxPython和pycairo练习记录18

Font.py 中 Font 类居然继承 Spritesheet 类来加载字符对应图片,还和 Sprites 类的功能差不多,总感觉哪里不太对。基本都没法写测试啊,后面待完成的是声音、鼠标键盘输入、碰撞检测、实体和主要显示类:面板、关卡、菜单、暂停画面。Camera.py 摄像机,这里的功能是记录坐标,跟随实体移动坐标。

SmileBasic的博客 396

Win11专业版破解RDP限制:实现多用户远程桌面协同办公

本文详细介绍了如何在Windows 11专业版上破解RDP限制,实现多用户远程桌面协同办公。通过使用RDPWrap工具,用户可以绕过微软的授权限制,允许多个用户同时登录同一台电脑,提高硬件利用率和团队协作效率。文章包含详细的安装配置步骤、性能优化技巧及常见问题解决方案,适用于需要远程协作的办公场景。

weixin_33806300的博客 467

5ZCM6ZGrVDllSFLkv6Hmga/ljJbnrqHnkIbns7vnu58= GetFlowDropDown SQL注入

5ZCM6ZGrVDllSFLkv6Hmga/ljJbnrqHnkIbns7vnu58=、eHR/OA一体化智慧云平台、智慧一卡通云平台、行业软件开发与定制、智慧企业管理信息化咨询与项目服务为核心业务的顾问式管理咨询和软件个性定制开发的高科技股份集团公司。同鑫T9eHR信息华管理系统存在SQL注入漏洞,攻击者可通过该漏洞上传shell。关闭互联网暴露面或接口设置访问权限。利用sqlmap进行shell。

iSee857的博客 701

本地化部署 DeepSeek,构建单细胞与空间转录组 AI 分析平台

本地化部署 DeepSeek,构建单细胞与空间转录组 AI 分析平台

weixin_53637133的博客 178

基于YOLOv11的手写数字与符号识别系统设计与实现

手写数字与符号识别系统需要丰富多样的训练数据才能达到理想的泛化性能。MNIST:包含70,000个手写数字样本(0-9),28x28灰度图像优点:干净整齐,适合初学者缺点:多样性不足,只有数字EMNIST:MNIST的扩展,包含数字、字母(大小写)和特殊符号样本量:814,255张图像覆盖62个类别(10数字+26小写字母+26大写字母)HASYv2:专门的手写符号数据集包含369个不同符号类别约168,000个标注实例包括数学符号、箭头、括号等:英文手写文本数据库。

YOLO 292

AI全栈实战 | 3.9-01 爬虫入门:requests 加 BeautifulSoup 三分钟跑通,但 90% 的人栽在这 4 个“礼貌“问题上

⚠️:本文内容仅用于。请遵守目标站点的服务条款与相关法律法规,不得对目标服务造成负担,不得采集、传播个人隐私数据。技术是中性的,边界在你手里。爬虫的入门技术(requests 发请求 + BeautifulSoup 解析)三分钟就能学会。真正区分"会用爬虫"和"会做爬虫的人"的,是这篇我们跑通"请求→解析→存储"的最小闭环,然后重点把"合规与礼貌"这根弦给你绷上。

源码获取 | 运行部署 | 定制二开修改,如果回复不及时请耐心等待,请见谅。 425

深度学习-161-Dify工具之对比使用工作流和聊天流生成图表可视化的html文件

分别使用聊天流和工作流进行数据分析结果的可视化,生成html文件。聊天流可以配置带记忆,这样就可以多次交互优化结果。

qq_20466211的博客 1709

一句话看懂 vibing-steampunk

摘要: vibing-steampunk(vsp)是一个连接SAP ABAP开发工具(ADT)与AI编码代理(如Claude、GitHub Copilot)的桥梁,通过MCP协议实现自动化代码读写、调试和部署。它利用ADT API直接访问SAP系统,绕过传统GUI操作,支持ECC和S/4HANA等环境。工具提供包分析、依赖检查、LUW行为识别等功能,显著提升ABAP项目维护效率。其创新Hyperfocused模式和方法级编辑大幅降低token消耗,而上下文压缩技术则优化了AI对ABAP代码的理解能力,特别适

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 114

从一段视频到可漫游的 4D 有声场景:思路拆解与最小复现手记

只需一段手机视频,你就能生成可"走进去"的 4D 有声场景:转头时狗叫声方向随之变化,走近时声音更清晰。本文拆解 Video-to-4DAVScene 的核心思路,手把手带你用几十行 Python 搭出最小管线,把视频中的运动物体变成带空间位置的声源,并附上三个真实踩坑的排障经验,代码可直接跑。🎧

helloagent的博客 241

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

【每天一个 Python 小案例30】Python 基础知识综合小项目:我的工具盒

作为系列收官,本篇把前 29 篇的知识点合成一个能直接用的命令行工具"我的工具盒":计算器(用 ast 解析表达式,不碰 eval)、单位换算与温度转换(一张换算表 + 特例分支)、记账与分类统计(Decimal + JSON 持久化)、以及用"字典当命令表"把菜单和业务逻辑解耦的主循环。文中对比了 eval 的安全隐患与 ast 白名单的做法,解释了 lambda 闭包在字典里的写法与晚绑定陷阱,并在最后给出整个系列的知识地图,把变量、数据结构、控制流、函数、类、异常、文件、标准库八块内容对应到具体篇目。

xinjiyaya的博客 427

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

yolo 和 deft 算法的区别

你应该是打错了:是,不是 defrat;

曾大强博客 257

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

二进制木马免杀-Python 分离免杀与 Web 挂马

二进制木马免杀-Python 分离免杀与 Web 挂马

2503_94637398的博客 269

两张表合并之后,行数悄悄多了一倍

pandas merge 行数异常膨胀源于右表键不唯一,导致数据静默复制。实测显示,未聚合的右表(756行)与左表合并后行数增至504行,合计膨胀3.5倍,但无报错。validate 参数仅在检查键唯一性时有效,one_to_one 和 many_to_one 可拦截问题,但需结合 duplicated() 前置检查。正确做法为先按键聚合右表,再合并,避免重复。建议合并前后核对行数、合计,并使用 indicator=True 排查匹配情况,确保数据一致性。

patrickstar231的博客 227

蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级 备考:莫队算法离线区间查询详解

备赛进行时:第十八届蓝桥杯软件赛报名已于 2026-10-08 10:00 开启、12-18 14:00 截止,省赛定在 2027-04-10(C/C++·Python 程序设计 9:00–13:00);中国电子学会 2026 年 12 月软件编程(C/C++ 一级至十级、Python 一级至六级)考级报名 9/23–12/2 16:00、统考 12-12;全国青少年信息素养大赛 2026—2027 赛季算法应用主题赛也已进入复盘练兵窗口。

IT_Scratch的博客 170

我用 200 行代码写了个“代码屎山检测器“,扫完公司的老项目后我沉默了

这个工具不能帮你把屎山铲平,但至少能让你知道自己面对的是多大的山,也能在代码评审时用数据说话——“这个 PR 把圈复杂度从 12 推到了 18,能不能拆一下?毕竟,不能量化的东西,就没法改进。

xixiaoyunya的博客 251

智慧农业实战:育秧车间秧盘计数与苗情分级的Python实现

首先,建立统一的数据结构,保存每盘秧苗的编号、批次、覆盖度、叶色得分和播种天数。A = "壮苗"B = "合格苗"C = "弱苗"@dataclassdays: int。

荆棘鸟智能的博客 120

智叟云集-手机证据抓取系统的工程结构与应用入口

本文系统阐述手机证据抓取系统的工程结构与应用入口,涵盖四大层面:工程目录划分(Android、Python服务、Web页面、测试与构建工具);Android组件通过Manifest声明可启动页面,主界面由MainActivity管理;Python服务通过run.py解析参数并启动FastAPI应用,支持远程访问;浏览器页面采用HTML/CSS/JS分离架构,静态资源通过路径关联,实现动态交互。各模块分工明确,协同构建可运行的采集系统。

2301_77178996的博客 237

Java Arrays.asList 常见坑详解|UnsupportedOperationException、数组联动、基本类型 bug

解析 Arrays.asList 常见开发陷阱,演示 UnsupportedOperationException、底层数组引用共享、基本类型数组问题,区分 Arrays 内部 ArrayList 与 java.util.ArrayList,给出数组转 List 的各种场景正确代码。

weixin_42617033的博客 494

【随笔】KV缓存量化:省下的显存,要付出多少数值误差

用可运行量化器解释位宽、比例信息、分组和离群值的关系,核算KV缓存实际载荷,并给出Transformers配置与容量、延迟、质量验收方法。

code2cat的博客 470

Spring Boot 自动配置原理

Spring Boot 自动配置由 @EnableAutoConfiguration 导入选择器,读取 jar 中 .imports 候选清单,经去重、排序、排除后逐类做条件判断,通过才注册 Bean。延迟导入让用户 Bean 优先,@ConditionalOnMissingBean 使默认配置让位。失效时查清单和 Negative matches。

2401_89855466的博客 393

【每天一个 Python 小案例29】Python 实现商品购物车

本篇实现一个购物车:商品目录、加入商品、修改数量、移除商品、查看小计、计算满减与 VIP 折扣、结算扣库存。核心设计是"目录与购物车分离"——目录存商品主数据,购物车只存 {商品编号: 数量};金额一律用 Decimal 并做 ROUND_HALF_UP 舍入。折扣部分讲清阶梯满减的匹配顺序(阈值从高到低、命中即停)与叠加顺序(先满减、后打折),并用一次完整结算演示 706 元如何变成 613.70 元。

xinjiyaya的博客 217

Python的字典

Python字典是存储键值对的数据结构,通过键(key)快速查找对应的值(value)。可使用{}定义,支持增删改查操作:通过dict[key]查询或修改值,get()方法安全获取并设置默认值,del dict[key]删除键值对,keys()、values()和items()用于遍历。items()结合双变量循环可高效遍历所有键值对,提升代码可读性与灵活性。

qq_43010954的博客 198
上一篇: wxPython和pycairo练习记录8
下一篇: wxPython和pycairo练习记录10
SmileBasic
博客等级 码龄5年 347粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值