数据处理与GUI开发场景下Python常见类型错误解析与应对策略
数据处理与GUI开发场景下Python常见类型错误解析与应对策略
前言
Python 作为一种广泛应用于数据处理和 GUI 开发的高级编程语言,其动态类型特性为开发者带来了极大的灵活性,但同时也容易引发各种类型错误。在数据处理中,从数据采集、清洗到分析和可视化的每一个环节,类型错误都可能悄然出现,影响数据的准确性和处理效率。而在 GUI 开发中,类型错误可能导致界面元素无法正常显示或交互功能失效,降低用户体验。
本文将剖析这两个场景下常见的类型错误,通过实际案例展示错误的产生原因、排查方法和解决策略。
一、数据处理场景下的常见类型错误
1. “can only concatenate str (not “int”) to str”错误
案例背景
在数据处理过程中,我们经常需要将不同类型的数据组合成一个完整的字符串进行输出或存储。假设我们正在开发一个简单的日志记录程序,用于记录用户的操作信息和相关数据。以下是部分代码示例:
def log_user_action(user_id, action, amount):log_message = "User " + user_id + " performed action: " + action + " with amount: " + amountprint(log_message)
当调用log_user_action(123, "purchase", 100)
时,程序会抛出“can only concatenate str (not “int”) to str”错误。
原因分析
在Python中,字符串的拼接操作要求参与拼接的对象都必须是字符串类型。在上述案例中,user_id
和amount
是整数类型,而action
是字符串类型。直接使用+
运算符将整数和字符串进行拼接,违反了Python的类型规则,导致出现类型错误。这是由于在进行字符串拼接时,没有对非字符串类型的数据进行适当的类型转换。
排查方法
- 调试工具定位:使用PyCharm等IDE的调试功能,在
log_message
赋值语句处设置断点。当程序执行到断点时,查看user_id
、action
和amount
的类型和值,能够清晰地发现user_id
和amount
的类型与预期不符。 - 打印变量信息:在拼接语句前添加打印语句,如
print(type(user_id), type(action), type(amount))
,通过控制台输出的变量类型信息,快速定位到类型不匹配的问题。
解决方法
- 类型转换:将整数类型的
user_id
和amount
转换为字符串类型,使用str()
函数进行转换。修改后的代码如下:
def log_user_action(user_id, action, amount):log_message = "User " + str(user_id) + " performed action: " + action + " with amount: " + str(amount)print(log_message)
- 字符串格式化:使用
f-string
进行字符串格式化,它会自动处理类型转换。代码修改为:
def log_user_action(user_id, action, amount):log_message = f"User {user_id} performed action: {action} with amount: {amount}"print(log_message)
2. “TypeError: ‘int’ object is not iterable”错误
案例背景
在数据处理中,我们可能需要对一组数据进行遍历操作。假设我们要统计一个整数的各位数字之和,以下是实现该功能的代码:
def sum_of_digits(num):total = 0for digit in num:total += digitreturn total
当调用sum_of_digits(123)
时,程序会报错“TypeError: ‘int’ object is not iterable”。
原因分析
在Python中,迭代操作(如for
循环)适用于可迭代对象,如列表、元组、字符串等。整数类型不是可迭代对象,不能直接在for
循环中进行迭代。在上述案例中,错误地将整数num
当作可迭代对象使用,导致出现类型错误。这是对可迭代对象和非可迭代对象的概念理解不清所致。
排查方法
- 检查代码逻辑:仔细审查涉及迭代操作的代码部分,确认被迭代的对象是否为可迭代类型。在这个案例中,很明显传入的
num
是整数,不符合迭代要求。 - 添加日志输出:在
for
循环前添加print(type(num))
,输出变量类型,进一步确认错误根源。
解决方法
- 转换为可迭代对象:将整数转换为字符串,再对字符串进行迭代,将每个字符转换为整数后进行求和。修改后的代码如下:
def sum_of_digits(num):total = 0num_str = str(num)for digit in num_str:total += int(digit)return total
- 使用数学运算:通过数学运算来提取整数的各位数字,避免使用迭代操作。代码如下:
def sum_of_digits(num):total = 0while num > 0:digit = num % 10total += digitnum //= 10return total
3. “TypeError: unsupported operand type(s) for +: ‘list’ and ‘int’”错误
案例背景
在对一组数据进行处理时,需要将一个列表和一个整数相加。代码如下:
data_list = [1, 2, 3]
number = 4
result = data_list + number
print(result)
原因分析
Python 中 +
运算符对于列表和整数的组合是不支持的。+
运算符用于列表时,要求操作数也是列表,用于实现列表的拼接。
排查方法
- 检查操作符和操作数:确认代码中使用的操作符和操作数是否符合 Python 的语法规则。
- 打印变量类型:在相加语句前添加
print(type(data_list), type(number))
,查看变量类型。
解决方法
- 调整操作逻辑:如果需要将整数添加到列表中,可以使用
append()
方法,代码修改为:
data_list = [1, 2, 3]
number = 4
data_list.append(number)
print(data_list)
4. “TypeError: ‘numpy.ndarray’ object cannot be interpreted as an integer”错误
案例背景
在使用 NumPy 进行数据处理时,需要创建一个指定形状的数组,但错误地将一个 NumPy 数组作为形状参数传入。代码如下:
import numpy as npshape_array = np.array([3, 3])
arr = np.zeros(shape_array)
原因分析
np.zeros()
函数的 shape
参数要求是一个整数或整数元组,用于指定数组的形状。而传入的是一个 NumPy 数组,不符合参数类型要求。
排查方法
- 查看函数文档:查阅
np.zeros()
函数的官方文档,确认参数类型要求。 - 打印变量类型:在调用函数前添加
print(type(shape_array))
,明确变量类型。
解决方法
- 转换为合适的类型:将 NumPy 数组转换为元组,代码修改为:
import numpy as npshape_array = np.array([3, 3])
shape_tuple = tuple(shape_array)
arr = np.zeros(shape_tuple)
print(arr)
二、GUI开发场景下的常见类型错误
1. “TypeError: ‘function’ object is not subscriptable”错误
案例背景
在使用Tkinter库进行GUI开发时,我们可能会定义一些函数来处理用户的交互事件。假设我们要创建一个简单的按钮,点击按钮时执行一个函数,并尝试获取函数的某个“元素”。以下是代码示例:
import tkinter as tkdef button_click():print("Button clicked!")root = tk.Tk()
button = tk.Button(root, text="Click me", command=button_click)
button.pack()try:result = button_click[0]
except TypeError as e:print(f"Error: {e}")root.mainloop()
程序会抛出“TypeError: ‘function’ object is not subscriptable”错误。
原因分析
在Python中,函数是可调用对象,而不是像列表、字符串那样支持通过下标访问元素的对象。在上述案例中,错误地将函数button_click
当作具有下标访问特性的对象使用,混淆了函数和可下标对象的概念,导致出现类型错误。
排查方法
- 检查代码语法:仔细查看涉及函数使用的代码行,确认是否错误地使用了下标操作符。在这个案例中,很容易发现对函数
button_click
使用了[0]
这种不恰当的操作。 - 分析错误信息:根据报错信息“‘function’ object is not subscriptable”,明确是将函数当作不可下标的对象进行了下标操作。
解决方法
- 正确调用函数:如果想执行函数的功能,应该使用函数调用的语法,即
button_click()
。修改后的代码如下:
import tkinter as tkdef button_click():print("Button clicked!")root = tk.Tk()
button = tk.Button(root, text="Click me", command=button_click)
button.pack()button_click()root.mainloop()
- 检查代码逻辑:确认代码逻辑是否真的需要调用函数,还是原本打算使用其他可下标访问的对象。如果是后者,需要修正代码以使用正确的数据类型。
2. “TypeError: unhashable type: ‘list’”错误
案例背景
在GUI开发中,我们可能会使用集合(set)来存储一些唯一的数据。假设我们要创建一个列表,然后将其添加到集合中,以下是代码示例:
import tkinter as tkroot = tk.Tk()data_list = [1, 2, 3]
data_set = set()
try:data_set.add(data_list)
except TypeError as e:print(f"Error: {e}")root.mainloop()
程序会报错“TypeError: unhashable type: ‘list’”。
原因分析
集合是一种无序且不重复的数据结构,它要求存储的元素必须是可哈希(hashable)的。可哈希意味着对象在其生命周期内具有固定的哈希值,且能与其他对象进行比较。列表是可变对象,其内容可以在运行时改变,这导致它不具有固定的哈希值,因此不能作为集合的元素。在上述案例中,错误地将列表data_list
添加到集合data_set
中,导致出现类型错误。
排查方法
- 回顾数据结构特性:检查代码中使用集合的部分,确认添加到集合中的元素类型。在这个案例中,发现添加的
data_list
是列表类型,不符合集合对元素的要求。 - 查阅文档:查阅Python官方文档中关于集合和可哈希类型的说明,进一步确认错误原因。
解决方法
- 转换为可哈希类型:将列表转换为元组(tuple),因为元组是不可变的,是可哈希类型。修改后的代码如下:
import tkinter as tkroot = tk.Tk()data_list = [1, 2, 3]
data_tuple = tuple(data_list)
data_set = set()
data_set.add(data_tuple)root.mainloop()
- 重新设计数据结构:如果需要存储可变数据,可以考虑使用其他合适的数据结构,如列表嵌套等,而不是强行将不可哈希的列表放入集合。
3. “TypeError: ‘str’ object does not support item assignment”错误
案例背景
在 Tkinter 程序中,需要动态修改一个标签的文本内容。错误地尝试直接对字符串进行元素赋值操作。代码如下:
import tkinter as tkroot = tk.Tk()
label_text = "Initial text"
label = tk.Label(root, text=label_text)
label.pack()try:label_text[0] = 'N'
except TypeError as e:print(f"Error: {e}")root.mainloop()
原因分析
Python 中的字符串是不可变对象,不支持通过下标进行元素赋值操作。上述代码尝试修改字符串的某个字符,导致类型错误。
排查方法
- 了解数据类型特性:明确字符串是不可变对象,不支持元素赋值。
- 检查代码逻辑:查看代码中对字符串的操作,确认是否存在错误的赋值操作。
解决方法
- 重新赋值整个字符串:如果需要修改标签文本,重新为字符串变量赋值,并更新标签的文本属性。代码修改为:
import tkinter as tkroot = tk.Tk()
label_text = "Initial text"
label = tk.Label(root, text=label_text)
label.pack()label_text = "New text"
label.config(text=label_text)root.mainloop()
4. “TypeError: init() got an unexpected keyword argument ‘color’”错误
案例背景
在使用 Tkinter 创建一个按钮时,错误地使用了一个不存在的关键字参数。代码如下:
import tkinter as tkroot = tk.Tk()
button = tk.Button(root, text="Click me", color="red")
button.pack()root.mainloop()
原因分析
tk.Button()
构造函数不支持 color
这个关键字参数。传入了不被支持的参数,导致类型错误。
排查方法
- 查阅文档:查看
tk.Button()
函数的官方文档,确认支持的关键字参数列表。 - 分析错误信息:根据报错信息“init() got an unexpected keyword argument ‘color’”,明确传入了不支持的参数。
解决方法
- 使用正确的参数:如果需要设置按钮的颜色,可以使用
bg
(背景颜色)和fg
(前景颜色)参数。代码修改为:
import tkinter as tkroot = tk.Tk()
button = tk.Button(root, text="Click me", bg="red", fg="white")
button.pack()root.mainloop()
5. “TypeError: ‘NoneType’ object is not iterable”错误
案例背景
在 Tkinter 程序中,尝试对一个可能为 None
的变量进行迭代操作。代码如下:
import tkinter as tkroot = tk.Tk()
text_widget = tk.Text(root)
text_widget.pack()lines = text_widget.get("1.0", tk.END).splitlines()
if lines:for line in lines:print(line)
else:lines = Nonetry:for line in lines:print(line)
except TypeError as e:print(f"Error: {e}")root.mainloop()
原因分析
当 lines
被赋值为 None
后,尝试对其进行迭代操作。NoneType
对象不是可迭代对象,因此引发类型错误。
排查方法
- 检查变量赋值:查看代码中变量的赋值情况,确认是否存在将
None
赋值给变量的情况。 - 打印变量值:在迭代语句前添加
print(lines)
,查看变量的值。
解决方法
- 添加条件判断:在迭代之前,先检查变量是否为
None
。代码修改为:
import tkinter as tkroot = tk.Tk()
text_widget = tk.Text(root)
text_widget.pack()lines = text_widget.get("1.0", tk.END).splitlines()
if lines:for line in lines:print(line)
else:lines = Noneif lines is not None:for line in lines:print(line)root.mainloop()
总结
在数据处理和GUI开发这两个常见的Python应用场景中,我们会遇到各种各样的类型错误。这些错误的产生往往源于对Python数据类型的特性和操作规则理解不够深入。通过深入分析具体的错误案例,掌握有效的排查方法,如使用调试工具、打印变量信息、检查代码逻辑等,以及采用合适的解决策略,如类型转换、重新设计算法或数据结构、正确调用函数等,我们能够有效地识别和解决这些类型错误。
在日常编程过程中,养成良好的编程习惯,注重数据类型的一致性和操作的合理性,将有助于提高代码的质量和稳定性,使我们的Python项目更加顺利地进行。同时,不断学习和积累经验,加深对Python数据类型系统的理解,也是成为一名优秀Python开发者的必经之路。
相关文章:
数据处理与GUI开发场景下Python常见类型错误解析与应对策略
数据处理与GUI开发场景下Python常见类型错误解析与应对策略 前言 Python 作为一种广泛应用于数据处理和 GUI 开发的高级编程语言,其动态类型特性为开发者带来了极大的灵活性,但同时也容易引发各种类型错误。在数据处理中,从数据采集、清洗到…...
【论文阅读笔记】模型的相似性
文章目录 The Platonic Representation Hypothesis概述表征收敛的依据表征收敛的原因实验依据未来发展的局限性 Similarity of Neural Network Representations Revisited概述问题背景相似性度量s的性质可逆线性变换不变性正交变换不变性各向同性缩放不变性典型度量满足的性质 …...
MVC协同工作流程
1. 视图层(View)代码作用 核心代码示例(以JSP为例): <!-- register.jsp --> <form action"registerServlet" method"post">用户名: <input type"text" na…...
OpenGL shader开发实战学习笔记:第十章 法线贴图
1. 10 法线贴图 1.1. 什么是法线贴图 我们如果想要在盾牌上实现凹凸感,应该如何做?一种方法是添加更多的顶点来建模更多的细节,但是网格的顶点越多,渲染网格所需的顶点着色器计算就越多,网格占用的内存就越多。大多数…...
神经光子渲染:物理级真实感图像生成——从麦克斯韦方程到深度学习
一、技术背景与核心突破 2025年,神经光子渲染(Photonic Neural Rendering, PNR)技术通过物理光学方程与神经辐射场的深度融合,在AIGC检测工具(如GPTDetector 5.0)的识别准确率从98%降至12%。该技术突破性地…...
MCP 协议知识分享
MCP 协议知识分享 一、MCP 协议概述1.1 定义与背景1.2 核心价值1.3 与传统 API 的对比 二、技术架构与工作原理2.1 核心组件2.2 通信机制2.3 典型工作流程 三、关键技术与应用场景3.1 核心技术3.2 典型应用场景 四、与微软技术的集成4.1 Azure OpenAI 服务4.2 Playwright MCP 服…...
spring boot 文件下载
1.添加文件下载工具依赖 Commons IO is a library of utilities to assist with developing IO functionality. <dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.6</version> </depe…...
Redis --- 基本数据类型
Redis --- 基本数据类型 Redis Intro5种基础数据类型 Redis Intro Redis(Remote Dictionary Server)是一款开源的高性能键值存储系统,常用于缓存、消息中间件和实时数据处理场景。以下是其核心特点、数据类型及典型使用场景: 核心…...
随机IP的重要性:解锁网络世界的无限可能
IP地址不仅是连接互联网的“身份证”,更是企业、开发者和个人用户实现高效运营与安全防护的核心工具。然而,固定IP的局限性日益凸显——从隐私泄露到访问受限,从爬虫封禁到商业竞争壁垒,这些问题如何破解?答案就是随机…...
C#: 用Libreoffice实现Word文件转PDF
现实场景中要实现Word格式转PDF格式还是比较常见的。 如果要用开源的组件,只有用Libreoffice了。 一、下载安装Libreoffice 先进入如下链接,找到最新版本和匹配的操作系统来安装。 官网试过,下载是能下载,但安装了用不了&…...
客户验收标准模糊,如何明确
客户验收标准模糊往往会导致项目延迟、质量不符合期望或客户不满意,明确验收标准的关键在于与客户的充分沟通、制定清晰的文档、并确保双方对目标一致性达成共识。在项目的执行过程中,如果客户未能明确表达他们的验收标准,或者项目团队未能确…...
Halcon应用:九点标定-手眼标定
提示:若没有查找的算子,可以评论区留言,会尽快更新 Halcon应用:九点标定-手眼标定 前言一、Halcon应用?二、应用实战1、图形理解[eye-to-hand]:1.1、开始应用2 图形理解[eye-in-hand] 前言 本篇博文主要用…...
springboot3 cloud gateway 配置websocket代理转发教程
前言 最近微服务的项目,需要集成websocket的功能,我在其中的一个微服务模块中集成websocket代码实现,通过模块的端口测试正常,但是通过springboot cloud gateway的端口访问,连接失败!我通过各种百度、和AI…...
详解与FTP服务器相关操作
目录 什么是FTP服务器 搭建FTP服务器相关 编辑 Unity中与FTP相关的类 上传文件到FTP服务器 使用FTP服务器上传文件的关键点 开始上传 从FTP服务器下载文件到客户端 使用FTP下载文件的关键点 开始下载 关于FTP服务器的其他操作 将文件的上传,下载&…...
制作一款打飞机游戏教程8:抖动
我们讨论了爆炸效果,这是非常重要的内容。我们制作了一个可以改变大小的小圆点,并展示了一些微调,比如绘制的圆圈数量和颜色调整等。但我们也提到将要做一些重大改变,这些改变将涉及到颜色的使用方式。 颜色使用方式的改变 目前…...
Linux搭建环境:从零开始掌握基础操作(四)
您好,我是程序员小羊! 前言 软件测试第一步就是搭建测试环境,如何搭建好测试环境,需要具备两项的基础知识: 1、Linux 命令: 软件测试第一个任务, 一般都需要进行环境搭建, 一部分,环境搭建内容是在服…...
第2.4节:学会像AWK一样思考
1 第2.4节:学会像AWK一样思考 AWK的工作方式类似于工厂的流水线。文本数据就像流水线上的产品,AWK逐行读取这些文本,对每行文本进行分割处理,然后通过一系列的模式匹配和动作执行来完成特定的任务。下面我们详细介绍AWK的工作流程…...
内网穿透原理解析、使用网络场景、及如何实现公网访问步骤教程
不多废话,一文了解内网穿透原理解析、使用网络场景、及如何实现公网访问步骤教程。 一,内网穿透原理解析 内网穿透的核心原理是通过中间服务器端口数据转发或点到点技术建立端对端的直连通信通道,使外网设备能够访问内网设备和服务。 1&…...
购买电脑时,主要需要关注以下核心配置,它们直接影响性能、使用体验和价格。根据需求(办公、游戏、设计、编程等),侧重点会有所不同。看看Deepseek的建议
1. 处理器(CPU) 作用:电脑的“大脑”,影响整体运算速度和多任务处理能力。关键参数: 品牌与型号:Intel(酷睿i3/i5/i7/i9)或 AMD(锐龙R3/R5/R7/R9)。核心/线程…...
数据结构与算法[零基础]---4.树和二叉树
四、树和二叉树 (一)树 1.相关定义 树是由一个或多个结点组成的有限集T,它满足以下两个条件:第一个是有一个特定的结点,作为根结点;第二个其余的结点分成m(m>0)个互不相交的有限集T0,T1,.…...
Sklearn入门之数据预处理preprocessing
、 Sklearn全称:Scipy-toolkit Learn是 一个基于scipy实现的的开源机器学习库。它提供了大量的算法和工具,用于数据挖掘和数据分析,包括分类、回归、聚类等多种任务。本文我将带你了解并入门Sklearn下的preprocessing在机器学习中的基本用法。 获取方式…...
4.16学习总结 IO流综合练习
爬虫获取网站内的数据,获得完整姓名 网站一:姓氏 网站二:男生名字 网站三:女生名字 进行拼接,获取完整的男生女生姓名。 //导包 import org.apache.commons.io.FileUtils; import java.io.*; import java.io.IOEx…...
大模型全景解析:从技术突破到行业变革
目录 一、引言:人工智能的新纪元 二、大模型发展历史与技术演进 1. 早期探索期(2015-2017):从"人工智障"到初具规模 RNN/LSTM架构时代(2013-2017) Transformer革命(2017…...
充电宝项目中的MQTT(轻量高效的物联网通信协议)
文章目录 补充:HTTP协议MQTT协议MQTT的核心特性MQTT vs HTTP:关键对比 EMQX项目集成EMQX集成配置客户端和回调方法具体接口和方法处理处理类 补充:HTTP协议 HTTP是一种应用层协议,使用TCP作为传输层协议,默认端口是80…...
AgentOps - 帮助开发者构建、评估和监控 AI Agent
文章目录 一、关于 AgentOps二、关键集成 🔌三、快速开始 ⌨️2行代码中的Session replays 首类开发者体验 四、集成 🦾OpenAI Agents SDK 🖇️CrewAI 🛶AG2 🤖Camel AI 🐪Langchain 🦜…...
n8n 为技术团队打造的安全工作流自动化平台
AI MCP 系列 AgentGPT-01-入门介绍 Browser-use 是连接你的AI代理与浏览器的最简单方式 AI MCP(大模型上下文)-01-入门介绍 AI MCP(大模型上下文)-02-awesome-mcp-servers 精选的 MCP 服务器 AI MCP(大模型上下文)-03-open webui 介绍 是一个可扩展、功能丰富且用户友好的…...
MyBatis:SpringBoot结合MyBatis、MyBatis插件机制的原理分析与实战
🪁🍁 希望本文能给您带来帮助,如果有任何问题,欢迎批评指正!🐅🐾🍁🐥 文章目录 一、背景二、Spring Boot项目中结合MyBatis2.1 数据准备2.2 pom.xml依赖增加2.3 applicat…...
【数据结构】3.单链表专题
文章目录 单链表的实现0、准备工作1、链表的打印2、尾插3、头插4、尾删5、头删6、查找指定数据的位置7、在指定位置之前插入数据8、在指定位置之后插入数据9、删除指定位置的数据10、删除指定位置之后的数据11、单链表的销毁 单链表的实现 什么是单链表呢?单链表可…...
**Microsoft Certified Professional(MCP)** 认证考试
1. MCP 认证考试概述 MCP(Microsoft Certified Professional)是微软认证体系中的一项入门级认证,旨在验证考生在微软产品和技术(如 Windows Server、Azure、SQL Server、Microsoft 365)方面的技能。2020 年࿰…...
C++学习之游戏服务器开发git命令
目录 1.服务器需求分析 2.面向框架编程简介 3.ZINX框架初始 4.回显标准输入 5.VS结合GIT 6.完善readme范例 7.添加退出功能 8.添加命令处理类 9.添加日期前缀思路 10.添加日期前缀功能 1.服务器需求分析 zinx 描述 zinx 框架是一个处理多路 IO 的框架。在这个框架中提…...
Maven 多仓库与镜像配置全攻略:从原理到企业级实践
Maven 多仓库与镜像配置全攻略:从原理到企业级实践 一、核心概念:Repository 与 Mirror 的本质差异 在 Maven 依赖管理体系中,repository与mirror是构建可靠依赖解析链的两大核心组件,其核心区别如下: 1. Repositor…...
无锁队列--知识分享
目录 无锁队列 无锁队列是什么 为什么需要无锁队列 队列的类型 无锁队列的分类 ringbuffer(SPSC) ret_ring(MPMC) 无锁队列 无锁队列是什么 无锁队列通过原子操作来实现线程安全的队列,属于非阻塞队列 …...
Flask快速入门
1.安装 Flask 要使用 Flask,你需要先安装它。打开终端,运行以下命令: pip install flask 2.创建文件结构 3.app.py from flask import Flask:从 flask 库中导入 Flask 类。app Flask(__name__):创建一个 Flask 应…...
LeetCode -- Flora -- edit 2025-04-16
1.两数之和 1. 两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。 你可以按…...
【Unity笔记】实现可视化配置的Unity按键输入管理器(按下/长按/松开事件 + UnityEvent绑定)
【Unity笔记】实现可视化配置的Unity按键输入管理器 适用于角色控制、技能触发的Unity按键输入系统,支持UnityEvent事件绑定、长按/松开监听与启用开关 一、引言 在 Unity 游戏开发中,处理键盘输入是最常见的交互方式之一。尤其是角色控制、技能释放、菜…...
SpringMVC学习(请求与响应。常见参数类型接收与响应。@RequestParam、@RequestBody的使用)(详细示例)
目录 一、请求与响应。(RequestMapping) (1)使用注解RequestMapping对业务模块区分。 StudentController。 TeacherController。 (2)Apifox请求与响应。 "/student/login"。 "/teacher/login"。 二、常见参数…...
springboot 切面拦截自定义注解
使用切面来拦截被该注解标记的方法 依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId> </dependency>1. 定义自定义注解 import java.lang.annotation.ElementType; imp…...
QT —— 信号和槽(自定义信号和槽函数)
QT —— 信号和槽(自定义信号和槽函数) 自定义信号和槽函数一、自定义信号函数规范1. 声明位置2. 返回值与实现3. 参数与重载 二、自定义槽函数规范1. 声明位置(不同版本差异)2. 返回值与实现3. 参数与重载 三、信号发射规范1. 基…...
朋克编码以潮玩语言讲述中国文化|益民艺术馆展演东方潮力
朋克编码于广州益民艺术馆推出“艺术家潮玩”系列主题展,将传统文化元素融入 潮玩设计,并通过数字科技与空间场景创新,讲述中国故事、传递东方美学。 展览作品结合太空猿等原创 IP 与“中式元素”视觉符号,引发观众情感共鸣。“我…...
TA学习之路——2.2 模型与材质基础
1.模型基础 1.1 图形渲染管线 1.2 模型实现的原理 点连成线,线构成面,面构成模型。 1.2 UV UV例如一个正方体的纸盒展开,平铺在一个二维的坐标系中。 模型的每一个顶点在三维空间和二维空间中都能一 一对应。在二维坐标系中的顶点对应的位置就是顶点的纹理坐标。 因此…...
helm的go模板语法学习
1、helm chart 1.0、什么是helm? 介绍:就是个包管理器。理解为java的maven、linux的yum就好。 安装方法也可参见官网: https://helm.sh/docs/intro/install 通过前面的演示我们知道,有了helm之后应用的安装、升级、查看、停止都…...
Windows 图形显示驱动开发-WDDM 1.2功能—Windows 8 中的 DirectX 功能改进(一)
Windows 8包括 Microsoft DirectX 功能改进,使开发人员、最终用户和系统制造商受益。 功能改进在以下几个方面: 像素格式 (5551、565、4444) :在低功耗硬件配置下,DirectX 应用程序的性能更高。双精度着色器功能:高级…...
软件测试|App测试面试相关问题(2)
一、App 稳定怎么做的?Monkey 怎么用(App 稳定测试)? 稳定性这块,我们当时用的是SDK 自动的一个Monkey 工具进行测试的,其实Monkey工具主要通过模拟用户发送伪随机时间去操作软件,通过执行Monkey 命令,它会自动出报告ÿ…...
模拟电路需要了解的一些基础知识(部分)
基本的单路元件 1. 电阻;特性:阻碍电流流动,消耗电能并转化为热能(遵循欧姆定律)。是无源元件,应用:限流、分压、发热等; 2. 电容;特性:存储电荷和电场能&am…...
[特殊字符] MySQL MCP 开发实战:打造智能数据库操作助手
💡 简介:本文详细介绍如何利用MCP(Model-Control-Panel)框架开发MySQL数据库操作工具,使AI助手能够直接执行数据库操作。 📚 目录 引言MCP框架简介项目架构设计开发环境搭建核心代码实现错误处理策略运行和…...
软考备考(一)学习笔记
一、软考介绍 计算机软考,计算机技术与软件专业技术资格(水平)考试 一年考试两次: 一次上旬(5月底),下旬一次(11月初) 初级资格:程序员 中级资格: 软件设计师 高级资格: 系统架构设计师 初级: 科目一:计算机硬软件基础知识 150min 笔试、选择 科目二:程序设…...
Linux环境变量
目录 环境变量 基本概念 常见环境变量 查看环境变量方法 测试PATH 测试HOME 和环境变量相关的命令 环境变量的组织方式 通过代码如何获取环境变量 通过系统调用获取或设置环境变量 编辑 环境变量通常是具有全局属性的 实验 环境变量 基本概念 环境变量(environment variables…...
跨浏览器书签同步方案:WebDAV + Floccus插件实操指南
FloccusWebDAV能够帮助把多个不同浏览器书签统一私有化管理,以下是介绍: Floccus 是一个允许用户在不同浏览器和设备之间私密同步书签的扩展,开源地址:https://github.com/floccusaddon/floccusWebDAV是一种基于HTTP的协议&#…...
银河麒麟系统 达梦8 安装 dlask 框架后端环境
适配的一套环境为 dmPython2.5.8 dmSQLAlchemy1.4.39 Flask2.0.3 Flask-Cors3.0.10 Flask-SQLAlchemy2.5.1 SQLAlchemy1.4.54 Werkzeug2.2.2其中 # sqlalchemy-dm1.4.39 通过dmdbms目录内文件进行源码安装 (MindSpore) [ma-user python]$pwd /home/syl/dmdbms/drivers/python…...
代码随想录算法训练营Day31
力扣738.单调递增的数字【medium】 力扣968.监控二叉树【hard】 一、力扣738.单调递增的数字【medium】 题目链接:力扣738.单调递增的数字 视频链接:代码随想录 1、思路 先将整数转为字符串变成可迭代对象,再转为列表从后向前遍历ÿ…...