C#中的语句

C#提供了各式各样的语句,大多数是由C和C++发展而来,当然,在C#中做了相应修改。语句和表达式一样,都是C#程序的基本组成部分,在本文我们来一起学习C#语句。

1.语句

语句是构造所有C#程序的过程构造块。在语句中可以声明局部变量或常数,调用方法,创建对象或将值赋予变量、属性或字段。语句有很多种,其中,控制语句可以创建循环,如for循环;也可以根据一个布尔表达式的运算结果进行判断,并分支到不同的代码块,如if或switch语句。语句通常以分号终止。

按类别来分,C#的语句如表7-1所示。

本章将重点介绍选择语句、循环语句、跳转语句,其他语句将在相应文章中介绍。其中,checked语句和unchecked语句已在之前章节中介绍过,这里不再赘述。跳转语句中的yield和异常处理语句以及lock语句等将在后续文章中介绍。

2.程序的三种结构

程序的三种常用结构是:

  1. 顺序结构

  2. 分支结构

  3. 循环结构

在C#中,分支结构使用条件语句实现,循环结构使用循环语句实现。下面将分别介绍这三个重要结构。

2.1 顺序结构

C#中最常见的结构就是顺序结构,即按照语句编写的顺序依次执行,如图7-1所示。

2.2 分支结构

实际情况中,只有顺序结构往往是不够的,有时候我们需要根据某一个条件的判定结果来确定程序的执行路径,如图7-2所示。C#中控制分支结构的语句包括:

  1. if......else if......else......语句

  2. switch语句

  3. 三元运算符(?:)

2.3 循环结构

当某一条件成立时,重复执行某段程序(循环体)。C#的循环结构的语句包括:

  1. for循环

  2. while......do......循环

  3. do......while......循环

图7-3分别对应上述三种控制循环结构语句。

3.条件语句

当程序中遇到两种或更多的选择时,就需要使用条件语句对程序的执行路径进行抉择。C#的条件语句包括if语句和switch语句。下面分别讲讲这两种语句。

3.1 if语句

除了要学会if的用法,还要学习配合使用else if和else语句,它们可以配合if完成对其他情况的处理。if语句是最常用的条件判断语句,它根据一个布尔表达式的计算结果来选择要执行的语句,当表达式的结果为true时执行一个操作,为false时则执行另一个操作,如图7-4所示。

语法如下:

下面,我们通过代码进行说明:

using System;namespace ProgrammingCSharp4
{public class StatementSample{static void Main(){int x = 10;if (x > 5){Console.WriteLine("x值大于5!");}}}
}

如果要解决的问题比较简单,只有一种条件需要判断,那么只需要使用if语句就已足够。但是,问题往往不会这么简单,比如我们买房,不同的楼盘价格不同,不同的楼层价格也不同,如果要写一段程序帮助准用户计算购房价格,就要对各种情况进行处理,即需要根据多个条件进行判断,单纯的一个if已经不够了,这时可以扩展if语句,使用多个else-if来处理多个条件。

其流程如图7-5所示。

语法如下:

if......else if语句的代码示例我们通过代码清单7-1进行介绍,另外,在代码清单7-1中还要对if语句和else if语句的用法进行对比,通过对两段程序的运行结果进行分析,希望以此来告知大家在对多个条件进行判断的时候,如何正确地使用if和else if。对于需要判断多个条件的情况,有两种选择:

  1. 使用多个if

  2. 使用else if排列

下面的代码示例对此进行分析,如代码清单7-1和代码清单7-2所示:

代码清单7-1 使用else if排列

using System;namespace ProgrammingCSharp4
{public class StatementSample{static void Main(){int x = 30;if (x > 5){Console.WriteLine("x值大于5!");}else if (x > 10){Console.WriteLine("x值大于10!");}else if (x > 20){Console.WriteLine("x值大于20!");}}}
}

运行结果为:

x值大于5!

代码清单7-2 使用多个if语句

using System;namespace ProgrammingCSharp4
{public class StatementSample{static void Main(){int x = 30;if (x > 5){Console.WriteLine("x值大于5!");}if (x > 10){Console.WriteLine("x值大于10!");}if (x > 20){Console.WriteLine("x值大于20!");}}}
}

运行结果为:

x值大于5!
x值大于10!
x值大于10!

通过对代码清单7-1和代码清单7-2的运行结果进行对比,我们可以发现,前者在条件得到满足以后立即退出条件判断,后面的语句都得不到执行(unreachable);相比之下,后者在第一个条件满足以后继续执行,对后面的所有if条件进行测试执行,因此在打印出"x值大于5!"后仍然继续执行。对代码清单7-2做如下修改,即可达到和代码清单7-1相同的效果,即每个条件测试完后,如果满足则使用return关键字返回,如代码清单7-3所示。

代码清单7-3 使用return关键字

using System;namespace ProgrammingCSharp4
{public class StatementSample{static void Main(){int x = 30;if (x > 5){Console.WriteLine("x值大于5!");return;}if (x > 10){Console.WriteLine("x值大于10!");return;}if (x > 20){Console.WriteLine("x值大于20!");return;}}}
}

3.2 switch语句

switch语句也可用于对多个条件的判断,但它和if以及else if排列并非完全相同。switch语句是一个控制语句,它通过将控制传递给其体内的一个case语句来处理多个选择,其中case语句只能处理枚举值、常量值和文本值,其语法如下:

switch (表达式) {case 常量表达式1:语句组;break;case 常量表达式2:语句组;break;default:语句组;break;
}

switch语句可以包括任意数目的case实例,但是任何两个case语句都不能具有相同的值。语句体从选定的语句开始执行,直到break将控制传递到case体以外。在每一个case块(包括上一个块,不论它是case语句还是default语句)的后面,都必须有一个跳转语句(如break)。C#不支持从一个case标签显式贯穿到另一个case标签,但有一个例外(这与C++switch语句不同)------当case语句中没有代码时,如代码清单7-4所示。

代码清单7-4 switch语句

using System;namespace ProgrammingCSharp4
{public class StatementSample{static void Main(){int x = 30;switch (x){case 10:case 20:Console.WriteLine("x值等于20!");break;case 30:Console.WriteLine("x值等于30!");break;default:Console.WriteLine("x值未知!");break;}}}
}

运行结果为:

x值等于30!

上述代码中,x表达式的值为30,switch中的case语句测试紧随其后的常数值,当和x值相等时则执行其下的语句组,其中switch语句内的第9行,case为空语句,因此程序直接从第12行的case语句贯穿到第13行;而第13行的case语句值和x值不匹配,因此也不会进入;第16行和x值匹配,因此系统执行其下的语句组,打印出:"x值等于30!",注意每个case内的语句组都是以break结尾(空语句例外)。第15、18、21行的break语句也可以换成return。注意,这仅限于在switch语句后没有其他语句的情况下,否则switch后的语句将不会被执行。关于return语句的更多细节请参阅后续文章。

4.跳转语句

使用跳转语句执行分支,该语句导致立即传递程序控制。跳转语句中使用下列关键字:

  1. break

  2. continue

  3. return

  4. throw

  5. goto

下面分别介绍以上各关键字的使用。

4.1 break语句

break语句用于终止最近的封闭循环或它所在的switch语句。控制传递给终止语句后面的语句(如果有的话)。下面分别演示break在循环和switch中的用法。

代码清单7-5 break在循环中的使用

using System;namespace ProgrammingCSharp4
{public class StatementSample{static void Main(){for (int i = 0; i < 10; i++){if (i == 5){break;}Console.WriteLine("i={0}", i);}}}
}

运行结果为:

i=0
i=1
i=2
i=3
i=4

代码清单7-5 中,循环语句本来要执行一个从0计数到9的循环,但break语句在计数达到5后终止循环,因此if条件后打印i值的语句(第15行)得不到执行。以下代码为break在switch语句中的用法,请参阅代码清单7-4,这里不再赘述。

using System;namespace ProgrammingCSharp4
{public class StatementSample{static void Main(){int x = 1;switch (x){case 1:Console.WriteLine("x值等于1!");break;case 2:Console.WriteLine("x值等于2!");break;case 3:Console.WriteLine("x值等于3!");break;default:Console.WriteLine("x值未知!");break;}}}
}

4.2 continue语句

continue语句将控制权传递给它所在的封闭迭代语句的下一次迭代。如代码清单7-6所示。

代码清单7-6 continue语句

using System;namespace ProgrammingCSharp4
{public class StatementSample{static void Main(){for (int i = 0; i < 10; i++){if (i > 5){continue;}Console.WriteLine("i={0}", i);}}}
}

运行结果为:

i=0
i=1
i=2
i=3
i=4
i=5

在上述代码中,循环语句要执行从0到9的循环,第11行的条件语句判断了变量i的值,当它大于5时即开始下一次循环,这意味着continue以后的语句都将得不到执行。因此运行结果只输出到了当i小于等于5时的结果。

4.3 return语句

return语句终止它出现在其中的方法的执行并将控制返回给调用方法。它还可以返回一个可选值。如果方法为void类型,则可以省略return语句。如代码清单7-7所示。

代码清单7-7 使用return语句

using System;namespace ProgrammingCSharp4
{public class StatementSample{static void Main(){string result = HelloWorld("cn");Console.WriteLine(result);result = HelloWorld("en");Console.WriteLine(result);}private static string HelloWorld(string language){string word = string.Empty;switch (language){case "cn":word = "你好!";break;case "en":word = "Hello!";break;}return word;}}
}

运行结果为:

你好!
Hello!

4.4 throw语句

throw语句用于在程序执行期间出现反常情况(异常)时发生信号。异常也是一个对象,该对象的类是从System.Exception派生的,如代码清单7-8所示。

代码清单7-8 throw语句

using System;namespace ProgrammingCSharp4
{public class StatementSample{static void Main(){string result = null;try{Console.WriteLine(result.ToString());}catch (Exception){throw;}}}
}

4.5 goto语句

goto语句通常和标签语句配合使用,将程序控制直接传递给标签语句。例如,可用于跳出较深的嵌套循环。另一个通常用法是将控制传递给特定的switch-case标签或switch语句中的默认标签。goto语句要尽量少用,会降低程序代码的可读性。该语句的用法如代码清单7-9所示。

代码清单7-9 goto语句

using System;namespace ProgrammingCSharp4
{public class StatementSample{static void Main(){for (int i = 0; i < 100; i++){if (i == 5){goto Exit;}}Exit:Console.WriteLine("Exit!");}}
}

4.6 default语句

default关键字在switch语句中充当默认标签的作用,相当于if条件语句中的else。和else一样,default并不是必需的。

5.标签语句

标签语句的语法如下:

标签:语句

在运行的时候,标签下的语句还是会被执行,标签的作用就是可以让程序从其他位置随时转到标签位置执行,如图7-6所示。

5.1 标签

在标签的有效范围内,可以在goto语句中使用它。我们知道,goto语句可以在块内外转移控制权,但这仅限于从块内到块外。图7-7中的goto标签语句在标签的有效范围外,因此引发编译错误。

5.2 标签语句的有效范围

标签在它所在的整个语句块都是有效的,包括嵌入的块。如果两个同名标签的有效范围重叠,则会引发一个编译期错误。

6.循环语句

通过使用循环语句可以创建循环。循环语句导致嵌入语句根据循环终止条件多次执行。除非遇到跳转语句,否则这些语句将按顺序执行。

C#中共有四种循环语句,它们全部都支持用break来退出循环,用continue来跳过本次循环进入下一次循环。

循环语句使用下述关键字:

  1. while

  2. do......while

  3. for

  4. foreach......in

下面分别介绍。

6.1 while循环

while会先检查一个表达式的值,如果值为true则执行一个语句或语句块,直到指定的表达式为false停止循环,如代码清单7-10所示。

while循环的语法如下:

while(布尔表达式){//语句或语句块
}

代码清单7-10 while循环

using System;namespace ProgrammingCSharp4
{public class StatementSample{static void Main(){int i = 0;while (i < 10){Console.WriteLine(i);i++;}}}
}

如代码清单7-10所示,while语句在循环执行语句前会先计算"i<10"表达式的值,如果为true则继续,否则终止循环。

上述代码的运行结果为:

0
1
2
3
4
5
6
7
8
9

6.2 do......while循环

do语句重复执行括在{}里的一个语句或语句块,直到指定的表达式计算为false。do......while循环和while循环最大的不同是:前者比后者多做一次循环,因为while先检查布尔表达式的值后执行循环体语句,do......while先执行循环体语句后检查布尔表达式的值。

do......while循环的语法如下:

do{//语句或语句块
}while(布尔表达式)

在代码清单7-11的示例中,只要变量x小于5,do-while循环语句就开始执行。

代码清单7-11 do......while循环

using System;namespace ProgrammingCSharp4
{public class StatementSample{static void Main(){int x = 0;do{Console.WriteLine(x);x++;} while (x < 5);}}
}

运行结果为:

0
1
2
3
4

6.3 for循环

for语句一般用于循环过程,在循环开始时需要初始化,然后开始循环执行,当其中的布尔表达式返回false时退出,否则会造成死循环。

for循环的语法为:

for(变量初始化;布尔表达式;迭代表达式){//语句或语句块
}

其中,"变量初始化"、"布尔表达式"、"迭代表达式"这三项都是可选项。"变量初始化"为循环控制变量做初始化,循环控制变量可以有一个或多个(用逗号隔开,这意味着控制变量的类型是一样的);"布尔表达式"为循环控制条件,也可以有一个或多个语句;"迭代表达式"按规律改变循环控制变量的值,例如可以递增或者递减,如图7-8所示。

注意,"变量初始化"、"布尔表达式"和"迭代表达式"都是可选的。如果忽略了条件,就可能产生一个死循环,要用跳转语句(break、return或goto)才能退出。如代码清单7-12所示。

代码清单7-12 省略了"变量初始化"、"布尔表达式"和"迭代表达式"的for循环

using System;namespace ProgrammingCSharp4
{public class StatementSample{static void Main(){int i = 0;for (; ; ){Console.WriteLine(i++);if (i > 6){break;}}}}
}

如代码清单7-12所示,第10行的for循环省略了"变量初始化"、"布尔表达式"和"迭代表达式",这就造成了一个没有出口的循环,即常说的死循环。为避免这种情况,引入了变量i,通过i的自增以及当i值大于6的时候,通过break语句让循环终止,从而避免了死循环的发生。

上述代码输出如下:

0
1
2
3
4
5
6

接下来,我们来看一个标准的for循环的写法,如代码清单7-13所示:

代码清单7-13 标准的for循环写法

using System;namespace ProgrammingCSharp4
{public class StatementSample{static void Main(){for (int i = 0; i < 10; i++){Console.WriteLine(i);}}}
}

输出如下:

0
1
2
3
4
5
6
7
8
9

6.4 foreach......in循环

foreach语句基本为数组和集合专用,用于遍历一个数组或对象集合中的每一个元素,其语法为:

foreach(类型变量in集合){//语句或语句块
}

foreach语句的作用就是,每次循环都取出"集合"中的一个元素并放在"变量"中,然后执行一次"语句或语句块"。注意,在"语句或语句块"中,"变量"是只读的。也就是说,只能访问"变量"的值,而不能为其赋值,如图7-9所示。

foreach循环如代码清单7-14所示。

代码清单7-14 foreach循环

using System;namespace ProgrammingCSharp4
{public class StatementSample{static void Main(){int[] array = { 1, 2, 3, 4, 5 };foreach (int i in array){Console.WriteLine(i);// i = 0; // 这行代码被注释掉了,因为 foreach 迭代变量是只读的}}}
}

7.using语句

这里的using是语句,而非using指令,using指令为导入指定命名空间,而using语句则是为确保正确使用IDisposable对象的方便语法。这里所谓正确使用指的是,当使用完毕实现了IDisposable接口的对象以后自动调用它的Dispose()方法。

其语法为:

using(局部变量声明及初始化语句,多个使用逗号分隔){//语句或语句块
}

其中的局部变量声明部分负责声明在"语句或语句块"中使用的对象变量,可以声明多个变量,以逗号隔开即可。下面的代码是使用using语句前的用法,可以看到,通过将font1对象放入try块中,并在finally块中调用使用完的font1变量的Dispose()方法释放资源,如图7-10所示。

不使用using语句的示例如代码清单7-15所示。

代码清单7-15 不使用using语句的示例

using System;
using System.Drawing;namespace ProgrammingCSharp4
{public class StatementSample{static void Main(){Font font1 = new Font("Arial", 10.0f);try{byte charset = font1.GdiCharSet;}finally{if (font1 != null)font1.Dispose();}}}
}

那么使用using语句后会是怎样的呢?下面对上述代码进行改写,如代码清单7-16所示,font1的声明和初始化放在了using语句中,这点一定要注意,不能仅仅进行声明,还必须包括初始化,如果要使用多个对象就直接在font1对象的初始化语句后使用逗号分隔直接加即可。从第10行到第13行为相关资源的有效范围,出了这个范围CLR自动调用相关对象的Dispose方法。因此,这里使用的资源必须是实现了IDisposable的对象。使用using语句进行改写后的示例如代码清单7-16所示。

代码清单7-16 使用using语句进行改写后的示例

using System;
using System.Drawing;namespace ProgrammingCSharp4
{public class StatementSample{static void Main(){using (Font font1 = new Font("Arial", 10.0f)){byte charset = font1.GdiCharSet;}}}
}

注:Dispose方法是用于释放对象占用的非托管资源(如文件句柄、数据库连接、网络连接、图形资源等)的一种机制。它是 IDisposable 接口的一部分。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/5543.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微服务学习-Gateway 统一微服务入口

1. 微服务为什么需要 API 网关&#xff1f; 1.1. 在微服务架构中&#xff0c;通常一个系统会被拆分为多个微服务&#xff0c;面对多个微服务客户端应该如何去调用呢&#xff1f; 如果根据每个微服务的地址发起调用&#xff0c;存在如下问题&#xff1a; 客户端多次请求不同的…

linux-FTP服务配置与应用

也许你对FTP不陌生&#xff0c;但是你是否了解FTP到底是个什么玩意&#xff1f; FTP 是File Transfer Protocol&#xff08;文件传输协议&#xff09;的英文简称&#xff0c;而中文简称为 “文传协议” 用于Internet上的控制文件的双向传输。同时&#xff0c;它也是一个应用程序…

代码随想录算法训练营第 14 天(树2)| 226.翻转二叉树、101. 对称二叉树、104.二叉树的最大深度、111.二叉树的最小深度

一、#226.翻转二叉树 题目&#xff1a;https://leetcode.cn/problems/invert-binary-tree/ 视频&#xff1a;https://www.bilibili.com/video/BV1sP4y1f7q7 讲解&#xff1a;https://programmercarl.com/0226.%E7%BF%BB%E8%BD%AC%E4%BA%8C%E5%8F%89%E6%A0%91.html 注意这里交换…

基于微信小程序的科创微应用平台设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

【MySQL】数据库基础知识

欢迎拜访&#xff1a;雾里看山-CSDN博客 本篇主题&#xff1a;【MySQL】数据库基础知识 发布时间&#xff1a;2025.1.21 隶属专栏&#xff1a;MySQL 目录 什么是数据库为什么要有数据库数据库的概念 主流数据库mysql的安装mysql登录使用一下mysql显示数据库内容创建一个数据库创…

STM32学习9---EXIT外部中断(理论)

本文参考江科大和其他博主&#xff0c;侵删&#xff01; 中断系统是管理和执行中断的逻辑结构 &#xff0c;外部中断是产生中断的外设之一。 一、STM32中断 1、中断基本介绍 68个可屏蔽中断通道&#xff08;中断源&#xff09;&#xff0c;包含EXTI外部、TIM定时器、ADC模数…

步入响应式编程篇(二)之Reactor API

步入响应式编程篇&#xff08;二&#xff09;之Reactor API 前言回顾响应式编程Reactor API的使用Stream引入依赖Reactor API的使用流源头的创建 reactor api的背压模式发布者与订阅者使用的线程查看弹珠图查看形成新流的日志 前言 对于响应式编程的基于概念&#xff0c;以及J…

66,【6】buuctf web [HarekazeCTF2019]Avatar Uploader 1

进入靶场 习惯性输入admin 还想用桌面上的123.png 发现不行 看看给的源码 <?php // 关闭错误报告&#xff0c;可能会隐藏一些错误信息&#xff0c;在开发阶段可考虑开启&#xff08;例如 error_reporting(E_ALL)&#xff09; error_reporting(0); // 引入配置文件&#x…

FortiGate配置远程拨号VPN

我们前面介绍了FortiGate如何配置IPsec VPN的两种类型&#xff1a;站到站&#xff08;卷土重来&#xff01;这次终于把FortiGate的IPsec VPN配置成功了&#xff01;&#xff09;和Hub-and-Spoke&#xff08;漂亮&#xff01;FortiGate配置Hub-Spoke类型的IPsec VPN竟然是Full-M…

linux下springboot项目nohup日志或tomcat日志切割处理方案

目录 1. 配置流程 2. 配置说明 其他配置选项&#xff1a; 3. 测试执行 4. 手动执行 https://juejin.cn/post/7081890486453010469 通常情况下&#xff0c;我们的springboot项目部署到linux服务器中&#xff0c;通过nohup java -jar xxx.jar &指令来进行后台运行我们…

CSS中相对定位和绝对定位详解

文章目录 CSS中相对定位和绝对定位详解一、引言二、相对定位1、相对定位的概念1.1、代码示例 三、绝对定位1、绝对定位的概念1.1、代码示例 四、相对定位与绝对定位的区别五、使用示例六、总结 CSS中相对定位和绝对定位详解 一、引言 在CSS布局中&#xff0c;定位是一种强大的…

XCode-Color-Fixer 常见问题解决方案

XCode-Color-Fixer 常见问题解决方案 XCode-Color-Fixer StoryBoard / XIB 颜色偏差很严重&#xff0c;怎么破&#xff1f;XCode-Color-Fixer帮你忙&#xff01; 项目地址: https://gitcode.com/gh_mirrors/xc/XCode-Color-Fixer 项目基础介绍 XCode-Color-Fixer 是一个…

Visual Studio2019调试DLL

1、编写好DLL代码之后&#xff0c;对DLL项目的属性进行设置&#xff0c;选择待注入的DLL&#xff0c;如下图所示 2、生成DLL文件 3、将DLL设置为启动项目之后&#xff0c;按F5启动调试。弹出选择注入的exe的界面之后&#xff0c;使用代码注入器注入步骤2中生成的dll&#xff0…

C++入门基础篇:域、C++的输入输出、缺省参数、函数重载、引用、inline、nullptr

本篇文章是对C学习前期的一些基础部分的学习分享&#xff0c;希望也能够对你有所帮助。 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 目录 1.第一个C程序 2. 域 3. namespace 3.1 namespace的作用 3.2 namespace的定义 3.3 namespace使用说明 4.C的输入和输出…

在Ubuntu上安装RabbitMQ教程

1、安装erlang 因为rabbitmq是基于erlang开发的&#xff0c;所以要安装rabbitmq&#xff0c;首先需要安装erlang运行环境 apt-get install erlang执行命令查是否安装成功&#xff1a;erl&#xff0c;疯狂 Ctrlc 就能退出命令行 2、安装rabbitmq 1、查看erlang与rabbitmq版本…

latin1_swedish_ci(latin1 不支持存储中文、日文、韩文等多字节字符)

文章目录 1、SHOW TABLE STATUS WHERE Name batch_version;2、latin1_swedish_ci使用场景注意事项修改字符集和排序规则修改表的字符集和排序规则修改列的字符集和排序规则修改数据库的默认字符集和排序规则 3、ALTER TABLE batch_version CONVERT TO CHARACTER SET utf8mb4 C…

使用vue-next-admin框架后台修改动态路由

vue-next-admin框架是一个基于 Vue 3 和 Vite 构建的后台管理系统框架。它采用了最新的前端技术栈&#xff0c;旨在提供一个高效、灵活、现代化的管理后台解决方案。该框架主要用于构建功能丰富且易于定制的管理后台应用&#xff0c;适合各种中大型项目。 其主要特点包括&am…

qiankun+vite+vue3

基座与子应用代码示例 本示例中,基座为Vue3,子应用也是Vue3,由于qiankun不支持Vite构建的项目,这里还要引入 vite-plugin-qiankun 插件 基座(主应用) 加载qiankun依赖 npm i qiankun -S qiankun配置(src/qiankun) src/qiankun/config.ts export default {subApp…

深度学习中Batch Normalization(BN)原理、作用浅析

最近做剪枝学习&#xff0c;其中一种是基于BN层的γ作为缩放因子进行剪枝的&#xff0c;那么我想搞懂BN的工作原理更好的理解网络、剪枝等&#xff0c;所以有了该文。 首先先说BN的作用在详细拆解&#xff0c;理解。以知乎一条高赞评论说明BN层到底在干什么。 Batch Norm 为什…

Python----Python高级(正则表达式:语法规则,re库)

一、正则表达式 1.1、概念 正则表达式&#xff0c;又称规则表达式,&#xff08;Regular Expression&#xff0c;在代码中常简写为regex、 regexp或RE&#xff09;&#xff0c;是一种文本模式&#xff0c;包括普通字符&#xff08;例如&#xff0c;a 到 z 之间的字母&#xff0…