当前位置: 首页 > article >正文

C语言操作MySQL从入门到精通

大家好,我是 V 哥。今天给大家整理的内容是关于使用 C 语言操作 MySQL 数据库的详细介绍,从入门到精通,并配有案例代码和注释,帮助小白快速上手。

基本操作

1. 环境准备

在开始之前,你需要安装 MySQL 数据库和 MySQL Connector/C 开发库。以 Ubuntu 系统为例,可以使用以下命令进行安装:

sudo apt-get update
sudo apt-get install mysql-server libmysqlclient-dev

2. 入门:连接到 MySQL 数据库

以下是一个简单的 C 语言程序,用于连接到 MySQL 数据库:

#include <mysql/mysql.h>
#include <stdio.h>int main() {// 初始化 MySQL 连接对象MYSQL *conn = mysql_init(NULL);if (conn == NULL) {// 初始化失败,输出错误信息fprintf(stderr, "mysql_init() failed\n");return 1;}// 尝试连接到 MySQL 数据库if (mysql_real_connect(conn, "localhost", "your_username", "your_password", "your_database", 0, NULL, 0) == NULL) {// 连接失败,输出错误信息fprintf(stderr, "mysql_real_connect() failed: %s\n", mysql_error(conn));// 关闭连接mysql_close(conn);return 1;}printf("Connected to MySQL successfully!\n");// 关闭连接mysql_close(conn);return 0;
}

代码解释

  • mysql_init(NULL):初始化一个 MySQL 连接对象。
  • mysql_real_connect():尝试连接到指定的 MySQL 数据库。需要提供主机名、用户名、密码、数据库名等信息。
  • mysql_error(conn):获取 MySQL 操作的错误信息。
  • mysql_close(conn):关闭 MySQL 连接。

3. 执行 SQL 查询语句

以下是一个执行简单 SQL 查询语句的示例:

#include <mysql/mysql.h>
#include <stdio.h>int main() {MYSQL *conn = mysql_init(NULL);if (conn == NULL) {fprintf(stderr, "mysql_init() failed\n");return 1;}if (mysql_real_connect(conn, "localhost", "your_username", "your_password", "your_database", 0, NULL, 0) == NULL) {fprintf(stderr, "mysql_real_connect() failed: %s\n", mysql_error(conn));mysql_close(conn);return 1;}// 定义要执行的 SQL 查询语句const char *query = "SELECT * FROM your_table";// 执行 SQL 查询语句if (mysql_query(conn, query) != 0) {// 查询失败,输出错误信息fprintf(stderr, "mysql_query() failed: %s\n", mysql_error(conn));mysql_close(conn);return 1;}// 获取查询结果集MYSQL_RES *result = mysql_store_result(conn);if (result == NULL) {// 获取结果集失败,输出错误信息fprintf(stderr, "mysql_store_result() failed: %s\n", mysql_error(conn));mysql_close(conn);return 1;}// 获取结果集中的行数和列数int num_fields = mysql_num_fields(result);MYSQL_ROW row;// 遍历结果集while ((row = mysql_fetch_row(result))) {for(int i = 0; i < num_fields; i++) {// 输出每一行的每一列数据printf("%s ", row[i] ? row[i] : "NULL");}printf("\n");}// 释放结果集mysql_free_result(result);// 关闭连接mysql_close(conn);return 0;
}

代码解释

  • mysql_query(conn, query):执行指定的 SQL 查询语句。
  • mysql_store_result(conn):将查询结果存储在内存中,并返回一个结果集对象。
  • mysql_num_fields(result):获取结果集中的列数。
  • mysql_fetch_row(result):从结果集中获取下一行数据。
  • mysql_free_result(result):释放结果集占用的内存。

4. 插入数据

以下是一个向数据库中插入数据的示例:

#include <mysql/mysql.h>
#include <stdio.h>
#include <string.h>int main() {MYSQL *conn = mysql_init(NULL);if (conn == NULL) {fprintf(stderr, "mysql_init() failed\n");return 1;}if (mysql_real_connect(conn, "localhost", "your_username", "your_password", "your_database", 0, NULL, 0) == NULL) {fprintf(stderr, "mysql_real_connect() failed: %s\n", mysql_error(conn));mysql_close(conn);return 1;}// 定义要插入的数据const char *name = "John Doe";int age = 30;// 构建插入 SQL 语句char query[256];snprintf(query, sizeof(query), "INSERT INTO your_table (name, age) VALUES ('%s', %d)", name, age);// 执行插入操作if (mysql_query(conn, query) != 0) {fprintf(stderr, "mysql_query() failed: %s\n", mysql_error(conn));mysql_close(conn);return 1;}printf("Data inserted successfully!\n");// 关闭连接mysql_close(conn);return 0;
}

代码解释

  • 使用 snprintf() 函数构建插入 SQL 语句。
  • mysql_query(conn, query):执行插入 SQL 语句。

5. 更新和删除数据

更新数据
#include <mysql/mysql.h>
#include <stdio.h>
#include <string.h>int main() {MYSQL *conn = mysql_init(NULL);if (conn == NULL) {fprintf(stderr, "mysql_init() failed\n");return 1;}if (mysql_real_connect(conn, "localhost", "your_username", "your_password", "your_database", 0, NULL, 0) == NULL) {fprintf(stderr, "mysql_real_connect() failed: %s\n", mysql_error(conn));mysql_close(conn);return 1;}// 构建更新 SQL 语句char query[256];snprintf(query, sizeof(query), "UPDATE your_table SET age = 31 WHERE name = 'John Doe'");// 执行更新操作if (mysql_query(conn, query) != 0) {fprintf(stderr, "mysql_query() failed: %s\n", mysql_error(conn));mysql_close(conn);return 1;}printf("Data updated successfully!\n");// 关闭连接mysql_close(conn);return 0;
}
删除数据
#include <mysql/mysql.h>
#include <stdio.h>
#include <string.h>int main() {MYSQL *conn = mysql_init(NULL);if (conn == NULL) {fprintf(stderr, "mysql_init() failed\n");return 1;}if (mysql_real_connect(conn, "localhost", "your_username", "your_password", "your_database", 0, NULL, 0) == NULL) {fprintf(stderr, "mysql_real_connect() failed: %s\n", mysql_error(conn));mysql_close(conn);return 1;}// 构建删除 SQL 语句char query[256];snprintf(query, sizeof(query), "DELETE FROM your_table WHERE name = 'John Doe'");// 执行删除操作if (mysql_query(conn, query) != 0) {fprintf(stderr, "mysql_query() failed: %s\n", mysql_error(conn));mysql_close(conn);return 1;}printf("Data deleted successfully!\n");// 关闭连接mysql_close(conn);return 0;
}

6. 错误处理和资源管理

在实际开发中,需要更加完善的错误处理和资源管理机制。例如,可以将数据库连接和操作封装成函数,方便复用和管理。

#include <mysql/mysql.h>
#include <stdio.h>
#include <string.h>// 连接到 MySQL 数据库
MYSQL* connect_to_mysql() {MYSQL *conn = mysql_init(NULL);if (conn == NULL) {fprintf(stderr, "mysql_init() failed\n");return NULL;}if (mysql_real_connect(conn, "localhost", "your_username", "your_password", "your_database", 0, NULL, 0) == NULL) {fprintf(stderr, "mysql_real_connect() failed: %s\n", mysql_error(conn));mysql_close(conn);return NULL;}return conn;
}// 执行 SQL 查询语句
int execute_query(MYSQL *conn, const char *query) {if (mysql_query(conn, query) != 0) {fprintf(stderr, "mysql_query() failed: %s\n", mysql_error(conn));return 1;}return 0;
}int main() {MYSQL *conn = connect_to_mysql();if (conn == NULL) {return 1;}const char *query = "SELECT * FROM your_table";if (execute_query(conn, query) != 0) {mysql_close(conn);return 1;}MYSQL_RES *result = mysql_store_result(conn);if (result == NULL) {fprintf(stderr, "mysql_store_result() failed: %s\n", mysql_error(conn));mysql_close(conn);return 1;}int num_fields = mysql_num_fields(result);MYSQL_ROW row;while ((row = mysql_fetch_row(result))) {for(int i = 0; i < num_fields; i++) {printf("%s ", row[i] ? row[i] : "NULL");}printf("\n");}mysql_free_result(result);mysql_close(conn);return 0;
}

通过以上步骤,你可以逐步掌握使用 C 语言操作 MySQL 数据库的基本方法,从连接数据库、执行查询、插入数据到更新和删除数据,并且学会了基本的错误处理和资源管理。

在C语言中,如何处理MySQL数据库连接错误?

在 C 语言中使用 MySQL 数据库时,数据库连接可能会因为各种原因失败,如网络问题、用户名密码错误、数据库服务未启动等。以下是详细介绍如何处理 MySQL 数据库连接错误的方法,并配有示例代码。

1. 连接过程及错误处理概述

在使用 C 语言连接 MySQL 数据库时,主要使用 mysql_init() 函数初始化 MySQL 连接对象,然后使用 mysql_real_connect() 函数尝试建立与数据库的连接。这两个函数都可能出现错误,需要进行相应的错误处理。

2. 具体错误处理方法

2.1 mysql_init() 函数错误处理

mysql_init() 函数用于初始化一个 MySQL 连接对象,如果初始化失败,会返回 NULL。可以通过检查返回值来判断是否初始化成功。

#include <mysql/mysql.h>
#include <stdio.h>int main() {MYSQL *conn = mysql_init(NULL);if (conn == NULL) {fprintf(stderr, "mysql_init() failed: Memory allocation error\n");return 1;}// 后续连接操作// ...mysql_close(conn);return 0;
}

在上述代码中,如果 mysql_init() 返回 NULL,说明内存分配失败,程序会输出错误信息并退出。

2.2 mysql_real_connect() 函数错误处理

mysql_real_connect() 函数用于建立与 MySQL 数据库的连接,如果连接失败,会返回 NULL。可以使用 mysql_error() 函数获取具体的错误信息。

#include <mysql/mysql.h>
#include <stdio.h>int main() {MYSQL *conn = mysql_init(NULL);if (conn == NULL) {fprintf(stderr, "mysql_init() failed: Memory allocation error\n");return 1;}if (mysql_real_connect(conn, "localhost", "your_username", "your_password", "your_database", 0, NULL, 0) == NULL) {fprintf(stderr, "mysql_real_connect() failed: %s\n", mysql_error(conn));mysql_close(conn);return 1;}printf("Connected to MySQL successfully!\n");mysql_close(conn);return 0;
}

在上述代码中,如果 mysql_real_connect() 返回 NULL,说明连接失败,程序会使用 mysql_error() 函数获取错误信息并输出,然后关闭连接并退出。

2.3 常见错误及处理建议
  • 网络问题:如果错误信息提示无法连接到数据库服务器,可能是网络问题。可以检查数据库服务器的 IP 地址和端口号是否正确,以及网络是否正常。
  • 用户名或密码错误:如果错误信息提示认证失败,可能是用户名或密码错误。可以检查用户名和密码是否正确。
  • 数据库不存在:如果错误信息提示数据库不存在,可能是指定的数据库名错误。可以检查数据库名是否正确。

3. 更完善的错误处理示例

以下是一个更完善的示例,包含了重试机制和详细的错误处理:

#include <mysql/mysql.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>#define MAX_RETRIES 3int main() {MYSQL *conn = mysql_init(NULL);if (conn == NULL) {fprintf(stderr, "mysql_init() failed: Memory allocation error\n");return 1;}int retries = 0;while (retries < MAX_RETRIES) {if (mysql_real_connect(conn, "localhost", "your_username", "your_password", "your_database", 0, NULL, 0) != NULL) {printf("Connected to MySQL successfully!\n");// 执行数据库操作// ...mysql_close(conn);return 0;}fprintf(stderr, "mysql_real_connect() failed (attempt %d/%d): %s\n", retries + 1, MAX_RETRIES, mysql_error(conn));retries++;if (retries < MAX_RETRIES) {// 等待一段时间后重试sleep(2);}}fprintf(stderr, "Failed to connect to MySQL after %d attempts.\n", MAX_RETRIES);mysql_close(conn);return 1;
}

在上述代码中,使用了一个重试机制,当连接失败时,会尝试重新连接,最多重试 MAX_RETRIES 次,每次重试之间等待 2 秒。如果多次重试后仍然失败,程序会输出错误信息并退出。

通过以上方法,可以在 C 语言中有效地处理 MySQL 数据库连接错误,提高程序的健壮性。

如何在C语言中优化MySQL数据库操作的性能?

在 C 语言中优化 MySQL 数据库操作的性能可以从多个方面入手,下面将从数据库连接管理、SQL 语句优化、数据处理与传输优化以及使用预处理语句等方面详细介绍:

1. 数据库连接管理

1.1 减少连接建立与关闭次数

频繁地建立和关闭数据库连接会带来较大的开销,因此应尽量复用已有的连接。可以采用连接池的思想,在程序启动时建立一定数量的数据库连接,后续操作从连接池中获取连接,使用完毕后归还连接,而不是每次操作都重新建立连接。

以下是一个简单的连接复用示例:

#include <mysql/mysql.h>
#include <stdio.h>MYSQL *conn;void init_connection() {conn = mysql_init(NULL);if (conn == NULL) {fprintf(stderr, "mysql_init() failed\n");return;}if (mysql_real_connect(conn, "localhost", "your_username", "your_password", "your_database", 0, NULL, 0) == NULL) {fprintf(stderr, "mysql_real_connect() failed: %s\n", mysql_error(conn));mysql_close(conn);return;}
}void close_connection() {mysql_close(conn);
}int main() {init_connection();// 执行多次数据库操作const char *query1 = "SELECT * FROM your_table";if (mysql_query(conn, query1) != 0) {fprintf(stderr, "mysql_query() failed: %s\n", mysql_error(conn));}const char *query2 = "INSERT INTO your_table (column1, column2) VALUES ('value1', 'value2')";if (mysql_query(conn, query2) != 0) {fprintf(stderr, "mysql_query() failed: %s\n", mysql_error(conn));}close_connection();return 0;
}
1.2 合理设置连接超时时间

mysql_real_connect 函数中可以设置连接超时时间,避免长时间等待无响应的连接请求。

MYSQL *conn = mysql_init(NULL);
if (conn != NULL) {mysql_options(conn, MYSQL_OPT_CONNECT_TIMEOUT, &(unsigned int){5}); // 设置连接超时时间为 5 秒if (mysql_real_connect(conn, "localhost", "your_username", "your_password", "your_database", 0, NULL, 0) == NULL) {fprintf(stderr, "mysql_real_connect() failed: %s\n", mysql_error(conn));mysql_close(conn);}
}

2. SQL 语句优化

2.1 避免使用 SELECT *

只选择需要的列,减少数据传输量和数据库处理开销。例如:

const char *query = "SELECT column1, column2 FROM your_table WHERE condition";
if (mysql_query(conn, query) != 0) {fprintf(stderr, "mysql_query() failed: %s\n", mysql_error(conn));
}
2.2 合理使用索引

在数据库表中为经常用于查询条件、排序和连接的列创建索引,能显著提高查询速度。在 C 语言代码中,确保 SQL 查询语句能够利用这些索引。例如,如果 your_table 表的 column1 列上有索引,查询时使用该列作为条件:

const char *query = "SELECT column1, column2 FROM your_table WHERE column1 = 'value'";
if (mysql_query(conn, query) != 0) {fprintf(stderr, "mysql_query() failed: %s\n", mysql_error(conn));
}
2.3 批量操作

对于插入、更新和删除操作,尽量使用批量操作。例如,批量插入数据:

const char *query = "INSERT INTO your_table (column1, column2) VALUES ('value1', 'value2'), ('value3', 'value4')";
if (mysql_query(conn, query) != 0) {fprintf(stderr, "mysql_query() failed: %s\n", mysql_error(conn));
}

3. 数据处理与传输优化

3.1 减少不必要的数据传输

在查询数据时,根据实际需求进行过滤和排序,避免将大量不必要的数据从数据库传输到应用程序。例如,使用 LIMIT 关键字限制返回的记录数:

const char *query = "SELECT column1, column2 FROM your_table WHERE condition LIMIT 10";
if (mysql_query(conn, query) != 0) {fprintf(stderr, "mysql_query() failed: %s\n", mysql_error(conn));
}
3.2 优化数据类型

在数据库表设计时,选择合适的数据类型,避免使用过大的数据类型,以减少数据存储和传输的开销。在 C 语言中,正确处理不同的数据类型,避免数据类型转换带来的性能损失。

4. 使用预处理语句

预处理语句可以减少 SQL 语句的解析和编译次数,提高多次执行相同结构 SQL 语句的性能。以下是一个使用预处理语句插入数据的示例:

#include <mysql/mysql.h>
#include <stdio.h>int main() {MYSQL *conn = mysql_init(NULL);if (conn == NULL) {fprintf(stderr, "mysql_init() failed\n");return 1;}if (mysql_real_connect(conn, "localhost", "your_username", "your_password", "your_database", 0, NULL, 0) == NULL) {fprintf(stderr, "mysql_real_connect() failed: %s\n", mysql_error(conn));mysql_close(conn);return 1;}MYSQL_STMT *stmt = mysql_stmt_init(conn);if (stmt == NULL) {fprintf(stderr, "mysql_stmt_init() failed\n");mysql_close(conn);return 1;}const char *query = "INSERT INTO your_table (column1, column2) VALUES (?, ?)";if (mysql_stmt_prepare(stmt, query, strlen(query)) != 0) {fprintf(stderr, "mysql_stmt_prepare() failed: %s\n", mysql_stmt_error(stmt));mysql_stmt_close(stmt);mysql_close(conn);return 1;}MYSQL_BIND bind[2];memset(bind, 0, sizeof(bind));char value1[20] = "test_value1";char value2[20] = "test_value2";bind[0].buffer_type = MYSQL_TYPE_STRING;bind[0].buffer = value1;bind[0].buffer_length = strlen(value1);bind[1].buffer_type = MYSQL_TYPE_STRING;bind[1].buffer = value2;bind[1].buffer_length = strlen(value2);if (mysql_stmt_bind_param(stmt, bind) != 0) {fprintf(stderr, "mysql_stmt_bind_param() failed: %s\n", mysql_stmt_error(stmt));mysql_stmt_close(stmt);mysql_close(conn);return 1;}if (mysql_stmt_execute(stmt) != 0) {fprintf(stderr, "mysql_stmt_execute() failed: %s\n", mysql_stmt_error(stmt));}mysql_stmt_close(stmt);mysql_close(conn);return 0;
}

通过上述方法,可以在 C 语言中有效地优化 MySQL 数据库操作的性能。

最后

以上是 V 哥整理的在 C 语言开发中,操作 MySQL 数据库的案例讲解,希望可以帮助大家在学习 C 语言时能够快速上手,关注威哥爱编程,全栈开发就你行。

相关文章:

C语言操作MySQL从入门到精通

大家好&#xff0c;我是 V 哥。今天给大家整理的内容是关于使用 C 语言操作 MySQL 数据库的详细介绍&#xff0c;从入门到精通&#xff0c;并配有案例代码和注释&#xff0c;帮助小白快速上手。 基本操作 1. 环境准备 在开始之前&#xff0c;你需要安装 MySQL 数据库和 MySQ…...

【从零开始学习计算机科学】编译原理(五)语法制导翻译

【从零开始学习计算机科学】编译原理(五)语法制导翻译 语法制导翻译语法制导定义SDDSDD的求值顺序两类重要的SDD语法制导的翻译方案SDTSDT的实现L属性定义的SDT左递归翻译方案语法制导翻译 语法表述的是语言的形式,或者说是语言的样子和结构。而程序设计语言中另一方面,是…...

uniapp uview 1.0 跨域h5配置多个代理、如何请求接口

参考文章&#xff1a;uniapp uView1.0跨域h5配置多个代理 官方手册&#xff1a;http 请求 项目中使用&#xff1a; 参考其他博主的文章是在manifest.json中配置代理&#xff0c;但在官方的手册中是直接在script请求的&#xff0c;我尝试请求了下没问题&#xff0c;上线后也不…...

化工厂防爆气象站:为石油化工、天然气等领域提供安全保障

【TH-FB02】在石油化工、天然气等高危行业中&#xff0c;安全生产是至关重要的。这些行业常常面临着易燃易爆、有毒有害等潜在风险&#xff0c;因此&#xff0c;对气象条件的监测和预警显得尤为重要。化工厂防爆气象站作为一种专门设计用于这些特殊环境的气象监测设备&#xff…...

Android Glide 缓存模块源码深度解析

一、引言 在 Android 开发领域&#xff0c;图片加载是一个极为常见且关键的功能。Glide 作为一款被广泛使用的图片加载库&#xff0c;其缓存模块是提升图片加载效率和性能的核心组件。合理的缓存机制能够显著减少网络请求&#xff0c;降低流量消耗&#xff0c;同时加快图片显示…...

Mac安装Neo4j图数据库

通过Homebrew 安装&#xff08;推荐&#xff09; 打开mac终端&#xff1a; 1. 安装 Homebrew&#xff08;如果尚未安装&#xff09; /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"2. 安装 Neo4j brew insta…...

《A Gentle Introduction to Graph Neural Networks》-GNN的综述性论文

目录 一、什么数据可以表示成一张图 &#xff08;1&#xff09;什么是图&#xff1f; &#xff08;2&#xff09;如何表示图的属性 &#xff08;3&#xff09;images as graphs&#xff08;将图片表示为图&#xff09; &#xff08;4&#xff09;text as graphs&#xff08…...

[023-01-40].第40节:组件应用 - OpenFeign与 Sentinel 集成实现fallback服务降级

SpringCloud学习大纲 一、需求说明&#xff1a; 需求1&#xff1a;通过fallback属性进行统一配置 a.问题分析&#xff1a; 1.需要实现cloudalibaba-consumer-nacos-order83模块通过OpenFeign调用cloudalibaba-provider-payment9001 83服务通过OpenFeign调用 9001微服务&…...

设计模式-结构型模式-装饰器模式

概述 装饰器模式 : Decorator Pattern : 是一种结构型设计模式. 作用 &#xff1a; 允许你动态地给对象添加功能或职责&#xff0c;而无需修改其原始类的代码,非常的符合 开闭原则。 实现思路 &#xff1a;通过创建一个包装对象&#xff08;即装饰器&#xff09;&#xff0c;来…...

RK3588 编译 openssl

在编译 OpenSSL 时,你需要确保你的系统环境已经配置好了所有必要的依赖和编译工具。下面是一般步骤和一些常见问题的解决方案,特别是在使用 RK3588 这类的 ARM 处理器上。 1. 安装依赖 首先,你需要安装编译 OpenSSL 所需的依赖。这通常包括编译器(如 GCC)、make 工具、Per…...

Git前言(版本控制)

1.Git 目前世界上最先进的分布式版本控制系统。 git官网&#xff1a;https://git-scm.com/ 2.版本控制 2.1什么是版本控制 版本控制(Revision control)是一种在开发的过程中用于管理我们对文件、目录或工程等内容修改历史&#xff0c;方便查看更改历史记录备份以便恢复以前…...

visual studio配置opencv

文章目录 step1 下载opencvstep2 配置包含目录step 3 配置链接器step4 配置环境变量并重启vs2022step5 检查代码 step1 下载opencv 下载 opencv-4.8.0-windows.exe https://cloud.189.cn/web/share?codefUnqEb7naUra step2 配置包含目录 step 3 配置链接器 step4 配置环境变…...

docker修改daemon.json文件后无法启动

1.问题描述 使用阿里云docker镜像安装的docker&#xff0c;安装成功后默认可以启动。但是修改daemon.json配置后docker服务无法启动&#xff0c;提示如下错误&#xff1a; 从上图发现&#xff0c;docker服务默认使用阿里docker镜像仓库 2.解决方法 根据提示找到docker服务目…...

Linux网络:网络与操作系统1

本文是介绍网络的基本结构&#xff0c;以及和OS之间有什么关系 OSI七层模型 引入 使用网络是为了解决信息的长距离传送&#xff0c;那就需要解决四个问题&#xff1a; 接收方如何使用数据传输的可靠性主机如何定位数据包在局域网如何转发 人们选择用网络协议&#xff08;t…...

Manus(一种AI代理或自动化工具)与DeepSeek(一种强大的语言模型或AI能力)结合使用任务自动化和智能决策

一、Manus与DeepSeek差异 十分好奇DeepSeek和Manus究竟谁更厉害些&#xff0c;DeepSeek是知识型大脑&#xff0c;Manus则是全能型执行者。即DeepSeek专注于语言处理、知识整合与专业文本生成。其核心优势在于海量参数支持的深度学习和知识推理能力&#xff0c;例如撰写论文、润…...

Python个人学习笔记(14):函数(匿名函数、内置函数(下)、三元表达式)

九、匿名函数 lambda表达式 语法规则&#xff1a; 变量 lambda 参数1,参数2,…:返回值 例&#xff1a;用lambda简化下述操作 def func(a,b):return ab ret func(1, 2) print(ret)代码&#xff1a; fn lambda a,b:ab print(fn) print(fn(12,13))结果&#xff1a; <fun…...

姚安娜新剧瘦了一圈,《仁心俱乐部》急诊医生顾诗宜在线上岗

《仁心俱乐部》在芒果 TV 播出&#xff0c;湖南卫视金鹰独播剧场也随之播出&#xff0c;这一剧集受到了不少观众的关注。姚安娜在剧中饰演的急诊科医生顾诗宜&#xff0c;她为患者检查身体时动作娴熟&#xff0c;与患者沟通时展现出的耐心和专注&#xff0c;都展现出很高的专业…...

【PyCharm】Python和PyCharm的相互关系和使用联动介绍

李升伟 整理 Python 是一种广泛使用的编程语言&#xff0c;而 PyCharm 是 JetBrains 开发的专门用于 Python 开发的集成开发环境&#xff08;IDE&#xff09;。以下是它们的相互关系和使用联动的介绍&#xff1a; 1. Python 和 PyCharm 的关系 Python&#xff1a;一种解释型、…...

【ES6】基础特性总结

概述 仅个人使用&#xff0c;复习ES6的笔记&#xff0c;比较粗糙&#xff0c;仅适用于浏览器端。 数据类型 ES6&#xff08;ECMAScript 2015&#xff09;引入了一些新的数据类型和对现有数据类型的扩展。以下是ES6中数据类型的一个简要总结表格&#xff1a; 数据类型描述Nu…...

串口数据记录仪DIY,体积小,全开源

作用 产品到客户现场出现异常情况&#xff0c;这个时候就需要一个日志记录仪、黑匣子&#xff0c;可以记录产品的工作情况&#xff0c;当出现异常时&#xff0c;可以搜集到上下文的数据&#xff0c;从而判断问题原因。 之前从网上买过&#xff0c;但是出现过丢数据的情况耽误…...

无障碍阅读(Web Accessibility)NVDA打开朗读查看器后,enter键不生效的原因

用NVDA测试Web Accessibility时&#xff0c;打开朗读查看器&#xff0c;enter键会无效&#xff0c;而不打开测试器&#xff0c;就没有问题&#xff0c;很大原因是被应用的元素不是可聚焦的&#xff0c;解决方法尝试&#xff1a; 将标签改为可聚焦的语义化标签&#xff0c;如 b…...

基于docker+python+paddleocr构建自己本地化ocr服务

1、使用FastAPI创建服务实例 1.1、正常程序 from fastapi import FastAPI, UploadFile, File, HTTPException from typing import List from paddleocr import PaddleOCR import numpy as np from PIL import Image import io import loggingapp FastAPI(title"游戏截图…...

【视频】V4L2、ffmpeg、OpenCV中对YUV的定义

1、常见的YUV格式 1.1 YUV420 每像素16位 IMC1:YYYYYYYY VV-- UU– IMC3:YYYYYYYY UU-- VV– 每像素12位 I420: YYYYYYYY UU VV =>YUV420P YV12: YYYYYYYY VV UU =>YUV420P NV12: YYYYYYYY UV UV =>YUV420SP(最受欢迎格式) NV21: YYYYYYYY VU VU =>YUV420SP…...

歌词相关实现

歌词相关 歌词数据模型&#xff1a; // Lyric.swift class Lyric: BaseModel {/// 是否是精确到字的歌词var isAccurate:Bool false/// 所有的歌词var datum:Array<LyricLine>! }// LyricLine.swift class LyricLine: BaseModel {/// 整行歌词var data:String!/// 开始…...

51单片机Proteus仿真速成教程——P1-软件与配置+Proteus绘制51单片机最小系统+新建程序模版

前言&#xff1a;本文主要围绕 51 单片机最小系统的绘制及程序模板创建展开。首先介绍了使用 Proteus 绘制 51 单片机最小系统的详细步骤&#xff0c;包括软件安装获取途径、工程创建、器件添加&#xff08;如单片机 AT89C51、晶振、电容、电阻、按键等&#xff09;、外围电路&…...

使用 pytesseract 进行 OCR 识别:以固定区域经纬度提取为例

引言 在智能交通、地图定位等应用场景中&#xff0c;经常会遇到需要从图像中提取经纬度信息的需求。本篇文章将介绍如何利用 Python 的 pytesseract 库结合 PIL 对图像进行预处理&#xff0c;通过固定区域裁剪&#xff0c;来有效地识别出图像上显示的经纬度信息。 1. OCR 与 …...

【18】单片机编程核心技巧:变量赋值与高位填充机制

【18】单片机编程核心技巧&#xff1a;变量赋值与高位填充机制 七律 变量赋值探秘 单字赋多字疑云开&#xff0c;高位零填自天来。 清零保守虽稳妥&#xff0c;强制转换更悠哉。 实验验证真章显&#xff0c;编译器间无异态。 嵌入式海行舟稳&#xff0c;类型分明避坑台。 注释…...

网络安全系统集成

随着信息技术的迅猛发展&#xff0c;网络安全问题变得越来越突出。为了应对这一挑战&#xff0c;软考网络安全系统集成应运而生&#xff0c;成为众多企业和机构的重要需求。软考网络安全系统集成旨在培养具备网络安全系统设计、实施和维护能力的专业人才&#xff0c;以满足国家…...

【51单片机】程序实验15.DS18B20温度传感器

主要参考学习资料&#xff1a;B站【普中官方】51单片机手把手教学视频 开发资料下载链接&#xff1a;http://www.prechin.cn/gongsixinwen/208.html 单片机套装&#xff1a;普中STC51单片机开发板A4标准版套餐7 目录 DS18B20介绍主要特性内部结构控制时序初始化时序写时序读时序…...

Vue项目上传到GitHub,vscode拉取vue项目更新后推送到GitHub上

1、新建Vue项目 2、在GitHub新建仓库 3、留意建立好仓库后提示的命令 4、进入vue项目目录&#xff0c;在空白处点击鼠标右键选择git bash here 5、输入命令 git init git add . git commit -m "注释内容" 输入之前创建GitHub仓库后记下的代码的第一句 git remote…...