<?xml version="1.0" encoding="utf-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><title>悠闲博客</title><link>https://rsbk.cpolar.cn/</link><description>www.yxrj.top  Good Luck To You!</description><item><title>Python异常处理与程序调试</title><link>https://rsbk.cpolar.cn/post/42.html</link><description>&lt;p style=&quot;text-align: left;&quot;&gt;前言&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;异常处理是程序用于处理以外情况的代码段，而在代码编写的过程中，经常要进行代码的调试和测试工作。本章将介绍 Python 语言中的异常处理和程序调试的具体使用方法。&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;一、异常处理&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;1.1、异常&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;补充：Exception 类是 Python 中大多数内置异常类的直接或间接父类。当你捕获 Exception 类型的异常时，实际上可以捕获大部分常见的异常情况，但不会捕获一些特殊的、不继承自 Exception 的异常，比如 SystemExit、GeneratorExit 和 KeyboardInterrupt 等。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;在人们的工作生活中，做某一件事情的时候，通常并不能很顺序的完成，在做事情的过程中可能会有一些以外的情况发生。比如在开车上班的途中轮胎被扎漏气，就需要先补好车胎再去上班；再比如在写作业时笔坏了，就需要换一支新笔。所以当有意外情况发生时，就需要有对应的解决方法，以便使事情能够继续做下去。对于程序来说，当要完成某一件功能时，有可能也会产生一些以外的情况，这种意外发生的情况在程序中成为异常。&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;示例1：存在除数为 0 的程序代码示例如下：&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-python&quot;&gt;print(&amp;#39;开始执行除法运算\n\n&amp;#39;)
while&amp;nbsp;True:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;str1&amp;nbsp;=&amp;nbsp;&amp;#39;输入&amp;nbsp;1&amp;nbsp;个整数作为第&amp;nbsp;1&amp;nbsp;个操作数\n&amp;#39;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;str2&amp;nbsp;=&amp;nbsp;&amp;#39;输入&amp;nbsp;2&amp;nbsp;个整数作为第&amp;nbsp;2&amp;nbsp;个操作数\n&amp;#39;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(&amp;#39;开始执行除法运算\n&amp;#39;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;op1&amp;nbsp;=&amp;nbsp;int(input(str1))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;op2&amp;nbsp;=&amp;nbsp;int(input(str2))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;result&amp;nbsp;=&amp;nbsp;op1&amp;nbsp;/&amp;nbsp;op2
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(&amp;#39;%d&amp;nbsp;/&amp;nbsp;%d&amp;nbsp;=&amp;nbsp;%d&amp;#39;&amp;nbsp;%&amp;nbsp;(op1,&amp;nbsp;op2,&amp;nbsp;result))&lt;/pre&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;ul style=&quot;box-sizing: border-box; outline: 0px; margin-bottom: 24px; padding: 0px; list-style-position: initial; list-style-image: initial; --el-button-hover-bg-color: #6d5ffd; --el-button-hover-border-color: #6d5ffd; --el-button-active-bg-color: #6d5ffd; --el-button-active-border-color: #6d5ffd; font-size: 16px; overflow: auto hidden; font-synthesis-style: auto; overflow-wrap: break-word; color: rgba(0, 0, 0, 0.75); font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-variant-ligatures: no-common-ligatures; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p style=&quot;text-align: left;&quot;&gt;仔细阅读这段代码，并没有发现问题。只是在 while 循环进行除法的计算功能。但是请注意：当除数是 0 时，代码中的除法运算是没有意义的。u所以，在这段代码运行过程中，如果输入的第 2 个参数是0，则会出现异常情况，输出结果如下：&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;pre class=&quot;prism-highlight prism-language-python&quot;&gt;开始执行除法运算

输入&amp;nbsp;1&amp;nbsp;个整数作为第&amp;nbsp;1&amp;nbsp;个操作数
3
输入&amp;nbsp;2&amp;nbsp;个整数作为第&amp;nbsp;2&amp;nbsp;个操作数
0
Traceback&amp;nbsp;(most&amp;nbsp;recent&amp;nbsp;call&amp;nbsp;last):
&amp;nbsp;&amp;nbsp;File&amp;nbsp;&amp;quot;D:\VS\Python\pythonProject\work.py&amp;quot;,&amp;nbsp;line&amp;nbsp;8,&amp;nbsp;in&amp;nbsp;&amp;lt;module&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;result&amp;nbsp;=&amp;nbsp;op1&amp;nbsp;/&amp;nbsp;op2
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;~~~~^~~~~
ZeroDivisionError:&amp;nbsp;division&amp;nbsp;by&amp;nbsp;zero&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;&lt;p style=&quot;text-align: left;&quot;&gt;从程序输出结果中，可以发现：运行这段程序，键盘输入的第 2 个参数是 0 时，程序会产生一个 ZeroDivisionError 异常。Python 编译器将会输出提示信息“division by zero”，并终止程序的运行。就像汽车的车胎被扎一样，需要停下车先补好车胎才能继续开车。程序运行出现异常时，也需要做适当的处理，再继续完成所要实现的功能。一个健壮的程序，不能因为发生异常就中断结束。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style=&quot;text-align: left;&quot;&gt;常见的异常现象有但不限于：读写文件时，文件不存在；访问数据库时，数据库管理系统没有启动；网络连接中断；算术运算时，除数为 0；序列越界等。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style=&quot;text-align: left;&quot;&gt;异常（Exception）通常可看作是程序的错误（Error），是指程序是有缺陷（Bug）的。错误分为语法错误和逻辑错误。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style=&quot;text-align: left;&quot;&gt;语法错误是值Python解释器无法解释代码，在程序执行前就可以进行纠正。逻辑错误是因为不完整或不合法的输入导致程序得不到预期的结果。程序在运行时，如果 Python 解释器遇到一个错误，会停止程序的执行，并且提示一些错误信息，这就是异常。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style=&quot;text-align: left;&quot;&gt;程序开发时，很难将所有的特俗情况都处理的面面俱到，通过异常捕获可以针对突发事件做集中的处理，从而保证程序的稳定性和健壮性。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style=&quot;text-align: left;&quot;&gt;示例2：使用 try-except 语句捕获并处理除数为 0 的异常示例代码如下：&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre class=&quot;prism-highlight prism-language-python&quot;&gt;print(&amp;#39;开始执行除法运算\n\n&amp;#39;)
while&amp;nbsp;True:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;str1&amp;nbsp;=&amp;nbsp;&amp;#39;输入&amp;nbsp;1&amp;nbsp;个整数作为第&amp;nbsp;1&amp;nbsp;个操作数\n&amp;#39;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;str2&amp;nbsp;=&amp;nbsp;&amp;#39;输入&amp;nbsp;2&amp;nbsp;个整数作为第&amp;nbsp;2&amp;nbsp;个操作数\n&amp;#39;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(&amp;#39;开始执行除法运算\n&amp;#39;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;op1&amp;nbsp;=&amp;nbsp;int(input(str1))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;op2&amp;nbsp;=&amp;nbsp;int(input(str2))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;result&amp;nbsp;=&amp;nbsp;op1&amp;nbsp;/&amp;nbsp;op2
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(&amp;#39;%d&amp;nbsp;/&amp;nbsp;%d&amp;nbsp;=&amp;nbsp;%d&amp;#39;&amp;nbsp;%&amp;nbsp;(op1,&amp;nbsp;op2,&amp;nbsp;result))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;except&amp;nbsp;ZeroDivisionError:&amp;nbsp;&amp;nbsp;#&amp;nbsp;捕获除数为&amp;nbsp;0&amp;nbsp;的异常
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(&amp;#39;捕获除数为&amp;nbsp;0&amp;nbsp;的异常&amp;#39;)&lt;/pre&gt;&lt;pre&gt;#&amp;nbsp;结果
开始执行除法运算

开始执行除法运算

输入&amp;nbsp;1&amp;nbsp;个整数作为第&amp;nbsp;1&amp;nbsp;个操作数
11
输入&amp;nbsp;2&amp;nbsp;个整数作为第&amp;nbsp;2&amp;nbsp;个操作数
0
捕获除数为&amp;nbsp;0&amp;nbsp;的异常
开始执行除法运算

输入&amp;nbsp;1&amp;nbsp;个整数作为第&amp;nbsp;1&amp;nbsp;个操作数&lt;/pre&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;在示例 2 中，当输入第 2 个参数为 0 时，程序继续到下一次循环执行，也就是异常情况得到了处理，程序并没有因为异常而终止。&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;这段代码以异常使用 try-except 的语法结果，对引发的异常进行捕获和处理，保证程序能继续执行并获得正确。由此得知，对异常进行处理要分为 2 个阶段，第一个阶段是捕获可能引发的异常，第二个阶段是要对发生的异常进行及时的处理。当异常发生时，不仅能检测到异常条件，还可以在异常发生时采取更可靠的补救措施，排除异常。&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;示例 1 和示例 2 中的 ZeroDivisionError 时除数为 0 的异常类，Python中还有很多内置的异常类，他们分别表示程序中可能发生的各种异常&lt;/p&gt;&lt;p style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://rsbk.cpolar.cn/zb_users/upload/2025/05/20250521175747_35109.png&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://rsbk.cpolar.cn/zb_users/upload/2025/05/20250521175747_70852.png&quot;/&gt;&lt;/p&gt;&lt;h2 id=&quot;%E5%BC%82%E5%B8%B8%E5%A4%84%E7%90%86%E8%AF%AD%E5%8F%A5%E4%B8%BB%E8%A6%81%E6%9C%89%E5%9B%9B%E7%A7%8D&quot; style=&quot;box-sizing: border-box; outline: 0px; margin: 24px 0px 8px; padding: 0px; font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimHei, Arial, SimSun; font-size: 22px; color: rgb(79, 79, 79); line-height: 32px; font-synthesis-style: auto; overflow-wrap: break-word; text-wrap: wrap; background-color: rgb(255, 255, 255); text-align: left;&quot;&gt;异常处理语句主要有四种&lt;/h2&gt;&lt;p style=&quot;box-sizing: border-box; outline: 0px; margin-top: 0px; margin-bottom: 16px; padding: 0px; --el-button-hover-bg-color: #6d5ffd; --el-button-hover-border-color: #6d5ffd; --el-button-active-bg-color: #6d5ffd; --el-button-active-border-color: #6d5ffd; font-size: 16px; color: rgb(77, 77, 77); overflow: auto hidden; font-synthesis-style: auto; overflow-wrap: break-word; font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif, SimHei, SimSun; text-wrap: wrap; background-color: rgb(255, 255, 255); line-height: 24px !important; text-align: left;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; outline: 0px; margin: 0px; padding: 0px; --el-button-hover-bg-color: #6d5ffd; --el-button-hover-border-color: #6d5ffd; --el-button-active-bg-color: #6d5ffd; --el-button-active-border-color: #6d5ffd; font-synthesis-style: auto; overflow-wrap: break-word; background-color: #6EAAD7;&quot;&gt;示例库:在输入浮点数或除数为0时会异常&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-python&quot;&gt;def&amp;nbsp;division():
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;&amp;#39;&amp;#39;功能：分苹果&amp;#39;&amp;#39;&amp;#39;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(&amp;quot;\n=====================&amp;nbsp;分苹果了&amp;nbsp;=====================\n&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;apple&amp;nbsp;=&amp;nbsp;int(input(&amp;quot;请输入苹果的个数：&amp;quot;))&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;输入苹果的个数
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;children&amp;nbsp;=&amp;nbsp;int(input(&amp;quot;请输入来了几个小朋友：&amp;quot;))&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;result&amp;nbsp;=&amp;nbsp;apple//children&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;计算每人分几个苹果
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;remain&amp;nbsp;=apple-result*children&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;计算余下几个苹果
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;remain&amp;gt;0:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(apple,&amp;quot;个苹果，平均分给&amp;quot;,children,&amp;quot;个小朋友，每人分&amp;quot;,result,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;个,剩下&amp;quot;,remain,&amp;quot;个。&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(apple,&amp;quot;个苹果，平均分给&amp;quot;,children,&amp;quot;个小朋友，每人分&amp;quot;,result,&amp;quot;个。&amp;quot;)
if&amp;nbsp;__name__&amp;nbsp;==&amp;nbsp;&amp;#39;__main__&amp;#39;:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;division()&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;调用分苹果的函数&lt;/pre&gt;&lt;p style=&quot;text-align: left;&quot;&gt;1. try...except :可以捕获异常并给出相应的处理结果&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp; &amp;nbsp; 语法：&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; try:&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; block1&amp;nbsp; &amp;nbsp; #放入可能产生异常的代码&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; except [ExceptionName [as alias]]&amp;nbsp; &amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #[ExceptionName [as alias]]：指定要处理的异常，如果不指定则会会处理所有异常&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #[as alias]：给异常指定别名，它可以在输出异常内容时通过别名表示&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; block2&amp;nbsp; &amp;nbsp; #放入处理结果，如果block1出现异常就会执行block2中的代码&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;示例&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-python&quot;&gt;def&amp;nbsp;division():
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;&amp;#39;&amp;#39;功能：分苹果&amp;#39;&amp;#39;&amp;#39;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(&amp;quot;\n=====================&amp;nbsp;分苹果了&amp;nbsp;=====================\n&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;apple&amp;nbsp;=&amp;nbsp;int(input(&amp;quot;请输入苹果的个数：&amp;quot;))&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;输入苹果的个数
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;children&amp;nbsp;=&amp;nbsp;int(input(&amp;quot;请输入来了几个小朋友：&amp;quot;))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;apple&amp;nbsp;&amp;lt;&amp;nbsp;children:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;raise&amp;nbsp;ValueError(&amp;quot;苹果太少了，不够分...&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;result&amp;nbsp;=&amp;nbsp;apple&amp;nbsp;//&amp;nbsp;children&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;计算每人分几个苹果
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;remain&amp;nbsp;=&amp;nbsp;apple&amp;nbsp;-&amp;nbsp;result&amp;nbsp;*&amp;nbsp;children&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;计算余下几个苹果
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;remain&amp;nbsp;&amp;gt;&amp;nbsp;0:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(apple,&amp;nbsp;&amp;quot;个苹果，平均分给&amp;quot;,&amp;nbsp;children,&amp;nbsp;&amp;quot;个小朋友，每人分&amp;quot;,&amp;nbsp;result,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;个,剩下&amp;quot;,&amp;nbsp;remain,&amp;nbsp;&amp;quot;个。&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(apple,&amp;nbsp;&amp;quot;个苹果，平均分给&amp;quot;,&amp;nbsp;children,&amp;nbsp;&amp;quot;个小朋友，每人分&amp;quot;,&amp;nbsp;result,&amp;nbsp;&amp;quot;个。&amp;quot;)
if&amp;nbsp;__name__&amp;nbsp;==&amp;nbsp;&amp;#39;__main__&amp;#39;:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;捕获异常
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;division()&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;调用分苹果的函数
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;except&amp;nbsp;ZeroDivisionError:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;处理除数为0的异常
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(&amp;quot;\n出错了&amp;nbsp;~_~&amp;nbsp;——苹果不能被0个小朋友分！&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;except&amp;nbsp;ValueError&amp;nbsp;as&amp;nbsp;e:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;处理值为浮点数的异常
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(&amp;quot;\n出错了&amp;nbsp;~_~&amp;nbsp;——&amp;quot;,e)
&amp;nbsp;
#也可以一次指定多个异常
#&amp;nbsp;if&amp;nbsp;__name__&amp;nbsp;==&amp;nbsp;&amp;#39;__main__&amp;#39;:
#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;捕获异常
#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;division()&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;调用分苹果的函数
#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;except&amp;nbsp;(ZeroDivisionError,ValueError)&amp;nbsp;as&amp;nbsp;e:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;处理异常
#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(e)&lt;/pre&gt;&lt;p style=&quot;text-align: left;&quot;&gt;2. try...except ...else：在捕获异常时对没有出现异常的情况进行处理&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp; &amp;nbsp; 语法：&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; try:&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; block1&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; except [ExceptionName [as alias]]&amp;nbsp; &amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; block2&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else:&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; block3&amp;nbsp; &amp;nbsp; #没有抛出异常时才执行&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;示例&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-python&quot;&gt;def&amp;nbsp;division():
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;&amp;#39;&amp;#39;功能：分苹果&amp;#39;&amp;#39;&amp;#39;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(&amp;quot;\n=====================&amp;nbsp;分苹果了&amp;nbsp;=====================\n&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;apple&amp;nbsp;=&amp;nbsp;int(input(&amp;quot;请输入苹果的个数：&amp;quot;))&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;输入苹果的个数
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;children&amp;nbsp;=&amp;nbsp;int(input(&amp;quot;请输入来了几个小朋友：&amp;quot;))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;apple&amp;nbsp;&amp;lt;&amp;nbsp;children:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;raise&amp;nbsp;ValueError(&amp;quot;苹果太少了，不够分...&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;result&amp;nbsp;=&amp;nbsp;apple&amp;nbsp;//&amp;nbsp;children&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;计算每人分几个苹果
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;remain&amp;nbsp;=&amp;nbsp;apple&amp;nbsp;-&amp;nbsp;result&amp;nbsp;*&amp;nbsp;children&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;计算余下几个苹果
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;remain&amp;nbsp;&amp;gt;&amp;nbsp;0:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(apple,&amp;nbsp;&amp;quot;个苹果，平均分给&amp;quot;,&amp;nbsp;children,&amp;nbsp;&amp;quot;个小朋友，每人分&amp;quot;,&amp;nbsp;result,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;个,剩下&amp;quot;,&amp;nbsp;remain,&amp;nbsp;&amp;quot;个。&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(apple,&amp;nbsp;&amp;quot;个苹果，平均分给&amp;quot;,&amp;nbsp;children,&amp;nbsp;&amp;quot;个小朋友，每人分&amp;quot;,&amp;nbsp;result,&amp;nbsp;&amp;quot;个。&amp;quot;)
if&amp;nbsp;__name__&amp;nbsp;==&amp;nbsp;&amp;#39;__main__&amp;#39;:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;捕获异常
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;division()&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;调用分苹果的函数
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;except&amp;nbsp;(ZeroDivisionError,ValueError)&amp;nbsp;as&amp;nbsp;e:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;处理异常
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(e)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(&amp;quot;分苹果顺利完成..&amp;quot;)&amp;nbsp;&amp;nbsp;#代码执行正常后再执行&lt;/pre&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;3. try...except finally&amp;nbsp; #无论是否出现异常，都要执行一段固定的代码&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; 在实际项目开发中经常用来实现与关闭相关的操作，比如关闭文件&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; 语法：&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; try:&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; block1&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; except [ExceptionName [as alias]]&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; block2&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; finally:&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; block3&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;示例&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-python&quot;&gt;def&amp;nbsp;division():
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;&amp;#39;&amp;#39;功能：分苹果&amp;#39;&amp;#39;&amp;#39;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(&amp;quot;\n=====================&amp;nbsp;分苹果了&amp;nbsp;=====================\n&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;apple&amp;nbsp;=&amp;nbsp;int(input(&amp;quot;请输入苹果的个数：&amp;quot;))&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;输入苹果的个数
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;children&amp;nbsp;=&amp;nbsp;int(input(&amp;quot;请输入来了几个小朋友：&amp;quot;))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;apple&amp;nbsp;&amp;lt;&amp;nbsp;children:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;raise&amp;nbsp;ValueError(&amp;quot;苹果太少了，不够分...&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;result&amp;nbsp;=&amp;nbsp;apple&amp;nbsp;//&amp;nbsp;children&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;计算每人分几个苹果
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;remain&amp;nbsp;=&amp;nbsp;apple&amp;nbsp;-&amp;nbsp;result&amp;nbsp;*&amp;nbsp;children&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;计算余下几个苹果
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;remain&amp;nbsp;&amp;gt;&amp;nbsp;0:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(apple,&amp;nbsp;&amp;quot;个苹果，平均分给&amp;quot;,&amp;nbsp;children,&amp;nbsp;&amp;quot;个小朋友，每人分&amp;quot;,&amp;nbsp;result,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;个,剩下&amp;quot;,&amp;nbsp;remain,&amp;nbsp;&amp;quot;个。&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(apple,&amp;nbsp;&amp;quot;个苹果，平均分给&amp;quot;,&amp;nbsp;children,&amp;nbsp;&amp;quot;个小朋友，每人分&amp;quot;,&amp;nbsp;result,&amp;nbsp;&amp;quot;个。&amp;quot;)
if&amp;nbsp;__name__&amp;nbsp;==&amp;nbsp;&amp;#39;__main__&amp;#39;:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;捕获异常
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;division()&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;调用分苹果的函数
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;except&amp;nbsp;(ZeroDivisionError,ValueError)&amp;nbsp;as&amp;nbsp;e:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;处理异常
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(e)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(&amp;quot;分苹果顺利完成..&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;finally:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(&amp;quot;进行了一次分苹果操作&amp;quot;)&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;4. 使用raise语句抛出异常&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp; &amp;nbsp; 在程序开发时如果某个函数或方法可能会产生异常，但我们不想在当前的函数或方法当中来处理这个异常就可以使用raise语句在这个函数或方法当中来抛出异常，抛出异常后，后面的代码不会再执行&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp; &amp;nbsp; 语法：&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; raise [ExceptionName[(reason)]]&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #[ExceptionName[(reason)]]:定义抛出的异常名称，如果省略此参数就会把当前的错误原样抛出&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #[(reason)]：异常信息的相关描述，如果省略此参数在抛出异常时就不会附带任何描述信息&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 示例：模拟幼儿园分苹果（每个人至少分到一个）否则抛出异常&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-python&quot;&gt;def&amp;nbsp;division():
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;&amp;#39;&amp;#39;功能：分苹果&amp;#39;&amp;#39;&amp;#39;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(&amp;quot;\n=====================&amp;nbsp;分苹果了&amp;nbsp;=====================\n&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;apple&amp;nbsp;=&amp;nbsp;int(input(&amp;quot;请输入苹果的个数：&amp;quot;))&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;children&amp;nbsp;=&amp;nbsp;int(input(&amp;quot;请输入来了几个小朋友：&amp;quot;))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;apple&amp;nbsp;&amp;lt;&amp;nbsp;children:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;raise&amp;nbsp;ValueError(&amp;quot;苹果太少了，不够分...&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;result&amp;nbsp;=&amp;nbsp;apple&amp;nbsp;//&amp;nbsp;children&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;remain&amp;nbsp;=&amp;nbsp;apple&amp;nbsp;-&amp;nbsp;result&amp;nbsp;*&amp;nbsp;children&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;remain&amp;nbsp;&amp;gt;&amp;nbsp;0:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(apple,&amp;nbsp;&amp;quot;个苹果，平均分给&amp;quot;,&amp;nbsp;children,&amp;nbsp;&amp;quot;个小朋友，每人分&amp;quot;,&amp;nbsp;result,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;个,剩下&amp;quot;,&amp;nbsp;remain,&amp;nbsp;&amp;quot;个。&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(apple,&amp;nbsp;&amp;quot;个苹果，平均分给&amp;quot;,&amp;nbsp;children,&amp;nbsp;&amp;quot;个小朋友，每人分&amp;quot;,&amp;nbsp;result,&amp;nbsp;&amp;quot;个。&amp;quot;)
if&amp;nbsp;__name__&amp;nbsp;==&amp;nbsp;&amp;#39;__main__&amp;#39;:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;division()&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;except&amp;nbsp;(ZeroDivisionError,ValueError)&amp;nbsp;as&amp;nbsp;e:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(e)&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;程序调试：Python有两种常用调试方法&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;断点：在进行程序调试运行的时候想让程序在哪里停下来就在哪里设置断点，一个程序中可以设置多个断点&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;（1）使用python自带的IDLE进行程序调试&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp; &amp;nbsp; 打开调试功能：&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 打开IDLE → Debug → Debugger&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp; &amp;nbsp; debug控制台按钮作用：&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Globals：显示全局变量&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Go:继续执行&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Step：如果在设置的断点处调用了其他的函数，那么单机这个按钮会进入到函数的内部执行&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Over：单步执行&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Out：跳出函数与Step对应&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Quit：结束调试进行修改&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp; &amp;nbsp; 设置断点：&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 光标放在要设置断点的行，鼠标右击选择 SetBreaKpoint&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 设置好断点后按F5执行代码进行调试&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;（2）使用assert断言语句调试程序&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;在 Python 中，assert是一个用于调试和测试的关键字，它主要用于对程序中的条件进行断言，即检查某个条件是否为真。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;基本语法&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;assert语句的基本语法格式为：assert expression[, arguments]。其中，expression是一个表达式，其结果应该为True或False。arguments是可选的，用于在断言失败时提供额外的信息。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;工作原理&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;如果expression的值为True，则assert语句不做任何事情，程序继续正常执行下一条语句。&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;如果expression的值为False，则assert语句会触发AssertionError异常，表明程序中出现了与预期不符的情况。如果指定了arguments，则会将arguments的值作为异常的参数传递，以便提供更详细的错误信息。&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;注意：python -O 文件名.py 命令行选项运行程序时，assert语句可能会被忽略，因此不应该使用assert来执行重要的程序逻辑或处理不可恢复的错误。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;示例&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;验证传入的参数是否符合预期；&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;在编写测试用例时，验证函数或方法的返回值是否符合预期。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-python&quot;&gt;def&amp;nbsp;divide(a,&amp;nbsp;b):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;assert&amp;nbsp;b&amp;nbsp;!=&amp;nbsp;0,&amp;nbsp;&amp;quot;除数不能为零&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;a&amp;nbsp;/&amp;nbsp;b
&amp;nbsp;
def&amp;nbsp;test_divide():
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;assert&amp;nbsp;divide(10,&amp;nbsp;2)&amp;nbsp;==&amp;nbsp;5,&amp;quot;1&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;assert&amp;nbsp;divide(5,&amp;nbsp;1)&amp;nbsp;==&amp;nbsp;5,&amp;quot;2&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;assert&amp;nbsp;divide(10,&amp;nbsp;1)&amp;nbsp;==&amp;nbsp;0,&amp;quot;3&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;except&amp;nbsp;AssertionError&amp;nbsp;as&amp;nbsp;e:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(f&amp;quot;测试失败:&amp;nbsp;{e}&amp;quot;)
&amp;nbsp;
test_divide()&lt;/pre&gt;&lt;p style=&quot;text-align: left;&quot;&gt;在那些循环或递归等复杂的程序执行过程中，应该始终保持为真的条件&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-python&quot;&gt;def&amp;nbsp;factorial(n):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;assert&amp;nbsp;n&amp;nbsp;&amp;gt;=&amp;nbsp;0,&amp;nbsp;&amp;quot;输入必须是非负整数&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;n&amp;nbsp;==&amp;nbsp;0&amp;nbsp;or&amp;nbsp;n&amp;nbsp;==&amp;nbsp;1:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;1
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;result&amp;nbsp;=&amp;nbsp;1
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;i&amp;nbsp;in&amp;nbsp;range(2,&amp;nbsp;n&amp;nbsp;+&amp;nbsp;1):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;result&amp;nbsp;*=&amp;nbsp;i
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;assert&amp;nbsp;result&amp;nbsp;&amp;gt;&amp;nbsp;0,&amp;nbsp;&amp;quot;阶乘结果应该始终为正&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;result&lt;/pre&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/p&gt;</description><pubDate>Wed, 21 May 2025 17:40:12 +0800</pubDate></item><item><title>【Python】静态方法 (@staticmethod) 和类方法 (@classmethod)</title><link>https://rsbk.cpolar.cn/post/41.html</link><description>&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;color: #4D4D4D; font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-size: 16px; font-variant-ligatures: no-common-ligatures; text-wrap: wrap; background-color: #FFFFFF;&quot;&gt;Python 提供了两种特殊的方法修饰器（&lt;/span&gt;&lt;code style=&quot;box-sizing: border-box; outline: 0px; font-family: &amp;quot;Source Code Pro&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Anonymous Pro&amp;quot;, &amp;quot;Droid Sans Mono&amp;quot;, Menlo, Monaco, Consolas, Inconsolata, Courier, monospace, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, sans-serif; line-height: 22px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 2px; padding: 2px 4px; font-synthesis-style: auto; overflow-wrap: break-word; font-variant-ligatures: no-common-ligatures; text-wrap: wrap;&quot;&gt;@staticmethod&lt;/code&gt;&lt;span style=&quot;color: #4D4D4D; font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-size: 16px; font-variant-ligatures: no-common-ligatures; text-wrap: wrap; background-color: #FFFFFF;&quot;&gt;&amp;nbsp;和&amp;nbsp;&lt;/span&gt;&lt;code style=&quot;box-sizing: border-box; outline: 0px; font-family: &amp;quot;Source Code Pro&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Anonymous Pro&amp;quot;, &amp;quot;Droid Sans Mono&amp;quot;, Menlo, Monaco, Consolas, Inconsolata, Courier, monospace, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, sans-serif; line-height: 22px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 2px; padding: 2px 4px; font-synthesis-style: auto; overflow-wrap: break-word; font-variant-ligatures: no-common-ligatures; text-wrap: wrap;&quot;&gt;@classmethod&lt;/code&gt;&lt;span style=&quot;color: #4D4D4D; font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-size: 16px; font-variant-ligatures: no-common-ligatures; text-wrap: wrap; background-color: #FFFFFF;&quot;&gt;），它们分别适用于&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; outline: 0px; font-weight: 700; font-synthesis-style: auto; overflow-wrap: break-word; color: #4D4D4D; font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-size: 16px; font-variant-ligatures: no-common-ligatures; text-wrap: wrap; background-color: #FFFFFF;&quot;&gt;静态方法&lt;/span&gt;&lt;span style=&quot;color: #4D4D4D; font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-size: 16px; font-variant-ligatures: no-common-ligatures; text-wrap: wrap; background-color: #FFFFFF;&quot;&gt;&amp;nbsp;和&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;box-sizing: border-box; outline: 0px; font-weight: 700; font-synthesis-style: auto; overflow-wrap: break-word; color: #4D4D4D; font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-size: 16px; font-variant-ligatures: no-common-ligatures; text-wrap: wrap; background-color: #FFFFFF;&quot;&gt;类方法&lt;/span&gt;&lt;span style=&quot;color: #4D4D4D; font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-size: 16px; font-variant-ligatures: no-common-ligatures; text-wrap: wrap; background-color: #FFFFFF;&quot;&gt;。这两者都可以在不创建类实例的情况下进行调用，但它们的行为和作用是&lt;/span&gt;不同的&lt;span style=&quot;color: #4D4D4D; font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-size: 16px; font-variant-ligatures: no-common-ligatures; text-wrap: wrap; background-color: #FFFFFF;&quot;&gt;。&lt;/span&gt;&lt;/p&gt;&lt;h3 style=&quot;box-sizing: border-box; outline: 0px; margin: 24px 0px 8px; padding: 0px; font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimHei, Arial, SimSun; font-size: 18px; color: rgb(79, 79, 79); line-height: 28px; font-synthesis-style: auto; overflow-wrap: break-word; font-variant-ligatures: no-common-ligatures; text-wrap: wrap; background-color: rgb(255, 255, 255); text-align: left;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; outline: 0px; font-synthesis-style: auto; overflow-wrap: break-word;&quot;&gt;1.&amp;nbsp;&lt;code style=&quot;box-sizing: border-box; outline: 0px; font-family: &amp;quot;Source Code Pro&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Anonymous Pro&amp;quot;, &amp;quot;Droid Sans Mono&amp;quot;, Menlo, Monaco, Consolas, Inconsolata, Courier, monospace, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, sans-serif; font-size: 22px; line-height: 22px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 2px; padding: 2px 4px; font-synthesis-style: auto; overflow-wrap: break-word;&quot;&gt;@staticmethod&lt;/code&gt;&amp;nbsp;静态方法&lt;/span&gt;&lt;/h3&gt;&lt;h4 style=&quot;box-sizing: border-box; outline: 0px; margin: 24px 0px 8px; padding: 0px; font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimHei, Arial, SimSun; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; font-synthesis-style: auto; overflow-wrap: break-word; font-variant-ligatures: no-common-ligatures; text-wrap: wrap; background-color: rgb(255, 255, 255); text-align: left;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; outline: 0px; font-synthesis-style: auto; overflow-wrap: break-word;&quot;&gt;1.1 基本概念&lt;/span&gt;&lt;/h4&gt;&lt;ul style=&quot;box-sizing: border-box; outline: 0px; margin-bottom: 24px; padding: 0px; list-style-position: initial; list-style-image: initial; font-size: 16px; overflow: auto hidden; font-synthesis-style: auto; overflow-wrap: break-word; color: rgba(0, 0, 0, 0.75); font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-variant-ligatures: no-common-ligatures; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; outline: 0px; font-weight: 700; font-synthesis-style: auto; overflow-wrap: break-word;&quot;&gt;静态方法&lt;/span&gt;&amp;nbsp;不与类实例或类绑定，可以直接通过类名调用。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; outline: 0px; font-weight: 700; font-synthesis-style: auto; overflow-wrap: break-word;&quot;&gt;无需访问实例属性或类属性&lt;/span&gt;。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style=&quot;text-align: left;&quot;&gt;类似于类内部的普通函数，与类或实例无关。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h4 style=&quot;box-sizing: border-box; outline: 0px; margin: 24px 0px 8px; padding: 0px; font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimHei, Arial, SimSun; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; font-synthesis-style: auto; overflow-wrap: break-word; font-variant-ligatures: no-common-ligatures; text-wrap: wrap; background-color: rgb(255, 255, 255); text-align: left;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; outline: 0px; font-synthesis-style: auto; overflow-wrap: break-word;&quot;&gt;1.2 定义静态方法&lt;/span&gt;&lt;/h4&gt;&lt;p style=&quot;box-sizing: border-box; outline: 0px; margin-top: 0px; margin-bottom: 16px; padding: 0px; --el-button-hover-bg-color: #6d5ffd; --el-button-hover-border-color: #6d5ffd; --el-button-active-bg-color: #6d5ffd; --el-button-active-border-color: #6d5ffd; font-size: 16px; color: rgb(77, 77, 77); line-height: 26px; overflow: auto hidden; font-synthesis-style: auto; overflow-wrap: break-word; font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-variant-ligatures: no-common-ligatures; text-wrap: wrap; background-color: rgb(255, 255, 255); text-align: left;&quot;&gt;使用&amp;nbsp;&lt;code style=&quot;box-sizing: border-box; outline: 0px; font-family: &amp;quot;Source Code Pro&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Anonymous Pro&amp;quot;, &amp;quot;Droid Sans Mono&amp;quot;, Menlo, Monaco, Consolas, Inconsolata, Courier, monospace, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, sans-serif; font-size: 14px; line-height: 22px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 2px; padding: 2px 4px; font-synthesis-style: auto; overflow-wrap: break-word;&quot;&gt;@staticmethod&lt;/code&gt;&amp;nbsp;装饰器定义静态方法。&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-python&quot;&gt;class&amp;nbsp;Math:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@staticmethod
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def&amp;nbsp;add(a,&amp;nbsp;b):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;a&amp;nbsp;+&amp;nbsp;b&lt;/pre&gt;&lt;h4 style=&quot;box-sizing: border-box; outline: 0px; margin: 24px 0px 8px; padding: 0px; font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimHei, Arial, SimSun; font-size: 16px; --el-button-hover-bg-color: #6d5ffd; --el-button-hover-border-color: #6d5ffd; --el-button-active-bg-color: #6d5ffd; --el-button-active-border-color: #6d5ffd; color: rgb(79, 79, 79); line-height: 26px; font-synthesis-style: auto; overflow-wrap: break-word; font-variant-ligatures: no-common-ligatures; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span style=&quot;box-sizing: border-box; outline: 0px; --el-button-hover-bg-color: #6d5ffd; --el-button-hover-border-color: #6d5ffd; --el-button-active-bg-color: #6d5ffd; --el-button-active-border-color: #6d5ffd; font-synthesis-style: auto; overflow-wrap: break-word;&quot;&gt;1.3 调用静态方法&lt;/span&gt;&lt;/h4&gt;&lt;pre class=&quot;prism-highlight prism-language-python&quot;&gt;#&amp;nbsp;通过类调用
print(Math.add(5,&amp;nbsp;10))&amp;nbsp;&amp;nbsp;#&amp;nbsp;15

#&amp;nbsp;通过实例调用
m&amp;nbsp;=&amp;nbsp;Math()
print(m.add(3,&amp;nbsp;4))&amp;nbsp;&amp;nbsp;#&amp;nbsp;7&lt;/pre&gt;&lt;ul style=&quot;box-sizing: border-box; outline: 0px; margin-bottom: 24px; padding: 0px; list-style-position: initial; list-style-image: initial; --el-button-hover-bg-color: #6d5ffd; --el-button-hover-border-color: #6d5ffd; --el-button-active-bg-color: #6d5ffd; --el-button-active-border-color: #6d5ffd; font-size: 16px; overflow: auto hidden; font-synthesis-style: auto; overflow-wrap: break-word; color: rgba(0, 0, 0, 0.75); font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-variant-ligatures: no-common-ligatures; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;box-sizing: border-box; outline: 0px; font-weight: 700; font-synthesis-style: auto; overflow-wrap: break-word;&quot;&gt;静态方法&lt;/span&gt;&amp;nbsp;可以通过&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; outline: 0px; font-weight: 700; font-synthesis-style: auto; overflow-wrap: break-word;&quot;&gt;类名&lt;/span&gt;&amp;nbsp;或&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; outline: 0px; font-weight: 700; font-synthesis-style: auto; overflow-wrap: break-word;&quot;&gt;实例&lt;/span&gt;&amp;nbsp;调用。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;h4 style=&quot;box-sizing: border-box; outline: 0px; margin: 24px 0px 8px; padding: 0px; font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimHei, Arial, SimSun; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; font-synthesis-style: auto; overflow-wrap: break-word; font-variant-ligatures: no-common-ligatures; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span style=&quot;box-sizing: border-box; outline: 0px; font-synthesis-style: auto; overflow-wrap: break-word;&quot;&gt;1.4 何时使用静态方法？&lt;/span&gt;&lt;/h4&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;当方法&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; outline: 0px; font-weight: 700; font-synthesis-style: auto; overflow-wrap: break-word;&quot;&gt;不依赖于类或实例属性&lt;/span&gt;&amp;nbsp;时，使用&amp;nbsp;&lt;code style=&quot;box-sizing: border-box; outline: 0px; font-family: &amp;quot;Source Code Pro&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Anonymous Pro&amp;quot;, &amp;quot;Droid Sans Mono&amp;quot;, Menlo, Monaco, Consolas, Inconsolata, Courier, monospace, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, sans-serif; font-size: 14px; line-height: 22px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 2px; padding: 2px 4px; font-synthesis-style: auto; overflow-wrap: break-word;&quot;&gt;@staticmethod&lt;/code&gt;。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;适用于&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; outline: 0px; font-weight: 700; font-synthesis-style: auto; overflow-wrap: break-word;&quot;&gt;工具类、辅助函数、独立于类逻辑的操作&lt;/span&gt;。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;h4 style=&quot;box-sizing: border-box; outline: 0px; margin: 24px 0px 8px; padding: 0px; font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimHei, Arial, SimSun; font-size: 16px; --el-button-hover-bg-color: #6d5ffd; --el-button-hover-border-color: #6d5ffd; --el-button-active-bg-color: #6d5ffd; --el-button-active-border-color: #6d5ffd; color: rgb(79, 79, 79); line-height: 26px; font-synthesis-style: auto; overflow-wrap: break-word; font-variant-ligatures: no-common-ligatures; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;a name=&quot;t6&quot; style=&quot;box-sizing: border-box; outline: none; margin: 0px; padding: 0px; font-weight: normal; cursor: pointer; background-color: transparent; color: rgb(78, 161, 219); font-synthesis-style: auto; overflow-wrap: break-word;&quot;&gt;&lt;/a&gt;&lt;a id=&quot;15__45&quot; style=&quot;box-sizing: border-box; outline: none; margin: 0px; padding: 0px; font-weight: normal; cursor: pointer; background-color: transparent; color: rgb(78, 161, 219); font-synthesis-style: auto; overflow-wrap: break-word;&quot;&gt;&lt;/a&gt;&lt;span style=&quot;box-sizing: border-box; outline: 0px; font-synthesis-style: auto; overflow-wrap: break-word;&quot;&gt;1.5 示例：实用工具函数&lt;/span&gt;&lt;/h4&gt;&lt;/li&gt;&lt;li&gt;&lt;h4 style=&quot;box-sizing: border-box; outline: 0px; margin: 24px 0px 8px; padding: 0px; font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimHei, Arial, SimSun; font-size: 16px; --el-button-hover-bg-color: #6d5ffd; --el-button-hover-border-color: #6d5ffd; --el-button-active-bg-color: #6d5ffd; --el-button-active-border-color: #6d5ffd; color: rgb(79, 79, 79); line-height: 26px; font-synthesis-style: auto; overflow-wrap: break-word; font-variant-ligatures: no-common-ligatures; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span style=&quot;box-sizing: border-box; outline: 0px; font-synthesis-style: auto; overflow-wrap: break-word;&quot;&gt;&lt;/span&gt;&lt;/h4&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;pre class=&quot;prism-highlight prism-language-python&quot;&gt;class&amp;nbsp;Utils:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@staticmethod
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def&amp;nbsp;is_even(num):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;&amp;quot;&amp;quot;判断一个数是否是偶数&amp;quot;&amp;quot;&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;num&amp;nbsp;%&amp;nbsp;2&amp;nbsp;==&amp;nbsp;0

print(Utils.is_even(10))&amp;nbsp;&amp;nbsp;#&amp;nbsp;True
print(Utils.is_even(11))&amp;nbsp;&amp;nbsp;#&amp;nbsp;False&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 style=&quot;box-sizing: border-box; outline: 0px; margin: 24px 0px 8px; padding: 0px; font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimHei, Arial, SimSun; font-size: 18px; color: rgb(79, 79, 79); line-height: 28px; font-synthesis-style: auto; overflow-wrap: break-word; font-variant-ligatures: no-common-ligatures; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span style=&quot;box-sizing: border-box; outline: 0px; font-synthesis-style: auto; overflow-wrap: break-word;&quot;&gt;2.&amp;nbsp;&lt;code style=&quot;box-sizing: border-box; outline: 0px; font-family: &amp;quot;Source Code Pro&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Anonymous Pro&amp;quot;, &amp;quot;Droid Sans Mono&amp;quot;, Menlo, Monaco, Consolas, Inconsolata, Courier, monospace, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, sans-serif; font-size: 22px; line-height: 22px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 2px; padding: 2px 4px; font-synthesis-style: auto; overflow-wrap: break-word;&quot;&gt;@classmethod&lt;/code&gt;&amp;nbsp;类方法&lt;/span&gt;&lt;/h3&gt;&lt;h4 style=&quot;box-sizing: border-box; outline: 0px; margin: 24px 0px 8px; padding: 0px; font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimHei, Arial, SimSun; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; font-synthesis-style: auto; overflow-wrap: break-word; font-variant-ligatures: no-common-ligatures; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;a name=&quot;t8&quot; style=&quot;box-sizing: border-box; outline: none; margin: 0px; padding: 0px; font-weight: normal; cursor: pointer; background-color: transparent; color: rgb(78, 161, 219); font-synthesis-style: auto; overflow-wrap: break-word;&quot;&gt;&lt;/a&gt;&lt;a id=&quot;21__60&quot; style=&quot;box-sizing: border-box; outline: none; margin: 0px; padding: 0px; font-weight: normal; cursor: pointer; background-color: transparent; color: rgb(78, 161, 219); font-synthesis-style: auto; overflow-wrap: break-word;&quot;&gt;&lt;/a&gt;&lt;span style=&quot;box-sizing: border-box; outline: 0px; font-synthesis-style: auto; overflow-wrap: break-word;&quot;&gt;2.1 基本概念&lt;/span&gt;&lt;/h4&gt;&lt;ul style=&quot;box-sizing: border-box; outline: 0px; margin-bottom: 24px; padding: 0px; list-style-position: initial; list-style-image: initial; font-size: 16px; overflow: auto hidden; font-synthesis-style: auto; overflow-wrap: break-word; color: rgba(0, 0, 0, 0.75); font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-variant-ligatures: no-common-ligatures; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;box-sizing: border-box; outline: 0px; font-weight: 700; font-synthesis-style: auto; overflow-wrap: break-word;&quot;&gt;类方法&lt;/span&gt;&amp;nbsp;通过&amp;nbsp;&lt;code style=&quot;box-sizing: border-box; outline: 0px; font-family: &amp;quot;Source Code Pro&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Anonymous Pro&amp;quot;, &amp;quot;Droid Sans Mono&amp;quot;, Menlo, Monaco, Consolas, Inconsolata, Courier, monospace, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, sans-serif; font-size: 14px; line-height: 22px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 2px; padding: 2px 4px; font-synthesis-style: auto; overflow-wrap: break-word;&quot;&gt;@classmethod&lt;/code&gt;&amp;nbsp;装饰器定义，接受&amp;nbsp;&lt;code style=&quot;box-sizing: border-box; outline: 0px; font-family: &amp;quot;Source Code Pro&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Anonymous Pro&amp;quot;, &amp;quot;Droid Sans Mono&amp;quot;, Menlo, Monaco, Consolas, Inconsolata, Courier, monospace, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, sans-serif; font-size: 14px; line-height: 22px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 2px; padding: 2px 4px; font-synthesis-style: auto; overflow-wrap: break-word;&quot;&gt;cls&lt;/code&gt;&amp;nbsp;作为第一个参数。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;code style=&quot;box-sizing: border-box; outline: 0px; font-family: &amp;quot;Source Code Pro&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Anonymous Pro&amp;quot;, &amp;quot;Droid Sans Mono&amp;quot;, Menlo, Monaco, Consolas, Inconsolata, Courier, monospace, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, sans-serif; font-size: 14px; line-height: 22px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 2px; padding: 2px 4px; font-synthesis-style: auto; overflow-wrap: break-word;&quot;&gt;cls&lt;/code&gt;&amp;nbsp;代表&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; outline: 0px; font-weight: 700; font-synthesis-style: auto; overflow-wrap: break-word;&quot;&gt;类本身&lt;/span&gt;，允许在类方法中&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; outline: 0px; font-weight: 700; font-synthesis-style: auto; overflow-wrap: break-word;&quot;&gt;访问类属性和修改类状态&lt;/span&gt;。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;类方法可以通过类名或实例调用。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h4 style=&quot;box-sizing: border-box; outline: 0px; margin: 24px 0px 8px; padding: 0px; font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimHei, Arial, SimSun; font-size: 16px; --el-button-hover-bg-color: #6d5ffd; --el-button-hover-border-color: #6d5ffd; --el-button-active-bg-color: #6d5ffd; --el-button-active-border-color: #6d5ffd; color: rgb(79, 79, 79); line-height: 26px; font-synthesis-style: auto; overflow-wrap: break-word; font-variant-ligatures: no-common-ligatures; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;a name=&quot;t9&quot; style=&quot;box-sizing: border-box; outline: none; margin: 0px; padding: 0px; font-weight: normal; cursor: pointer; background-color: transparent; color: rgb(78, 161, 219); font-synthesis-style: auto; overflow-wrap: break-word;&quot;&gt;&lt;/a&gt;&lt;a id=&quot;22__67&quot; style=&quot;box-sizing: border-box; outline: none; margin: 0px; padding: 0px; font-weight: normal; cursor: pointer; background-color: transparent; color: rgb(78, 161, 219); font-synthesis-style: auto; overflow-wrap: break-word;&quot;&gt;&lt;/a&gt;&lt;span style=&quot;box-sizing: border-box; outline: 0px; font-synthesis-style: auto; overflow-wrap: break-word;&quot;&gt;2.2 定义类方法&lt;/span&gt;&lt;/h4&gt;&lt;pre class=&quot;prism-highlight prism-language-python&quot;&gt;class&amp;nbsp;Person:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;count&amp;nbsp;=&amp;nbsp;0

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@classmethod
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def&amp;nbsp;increment_count(cls):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cls.count&amp;nbsp;+=&amp;nbsp;1

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@classmethod
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def&amp;nbsp;show_count(cls):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(f&amp;quot;当前人数:&amp;nbsp;{cls.count}&amp;quot;)&lt;/pre&gt;&lt;h4 style=&quot;box-sizing: border-box; outline: 0px; margin: 24px 0px 8px; padding: 0px; font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimHei, Arial, SimSun; font-size: 16px; --el-button-hover-bg-color: #6d5ffd; --el-button-hover-border-color: #6d5ffd; --el-button-active-bg-color: #6d5ffd; --el-button-active-border-color: #6d5ffd; color: rgb(79, 79, 79); line-height: 26px; font-synthesis-style: auto; overflow-wrap: break-word; font-variant-ligatures: no-common-ligatures; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span style=&quot;box-sizing: border-box; outline: 0px; --el-button-hover-bg-color: #6d5ffd; --el-button-hover-border-color: #6d5ffd; --el-button-active-bg-color: #6d5ffd; --el-button-active-border-color: #6d5ffd; font-synthesis-style: auto; overflow-wrap: break-word;&quot;&gt;2.3 调用类方法&lt;/span&gt;&lt;/h4&gt;&lt;pre class=&quot;prism-highlight prism-language-python&quot;&gt;#&amp;nbsp;通过类调用
Person.increment_count()
Person.show_count()&amp;nbsp;&amp;nbsp;#&amp;nbsp;当前人数:&amp;nbsp;1

#&amp;nbsp;通过实例调用
p&amp;nbsp;=&amp;nbsp;Person()
p.increment_count()
p.show_count()&amp;nbsp;&amp;nbsp;#&amp;nbsp;当前人数:&amp;nbsp;2&lt;/pre&gt;&lt;ul style=&quot;box-sizing: border-box; outline: 0px; margin-bottom: 24px; padding: 0px; list-style-position: initial; list-style-image: initial; font-size: 16px; overflow: auto hidden; font-synthesis-style: auto; overflow-wrap: break-word; color: rgba(0, 0, 0, 0.75); font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-variant-ligatures: no-common-ligatures; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;类方法可以通过&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; outline: 0px; font-weight: 700; font-synthesis-style: auto; overflow-wrap: break-word;&quot;&gt;类名&lt;/span&gt;&amp;nbsp;或&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; outline: 0px; font-weight: 700; font-synthesis-style: auto; overflow-wrap: break-word;&quot;&gt;实例&lt;/span&gt;&amp;nbsp;调用，且会影响&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; outline: 0px; font-weight: 700; font-synthesis-style: auto; overflow-wrap: break-word;&quot;&gt;类属性&lt;/span&gt;。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;h4 style=&quot;box-sizing: border-box; outline: 0px; margin: 24px 0px 8px; padding: 0px; font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimHei, Arial, SimSun; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; font-synthesis-style: auto; overflow-wrap: break-word; font-variant-ligatures: no-common-ligatures; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span style=&quot;box-sizing: border-box; outline: 0px; font-synthesis-style: auto; overflow-wrap: break-word;&quot;&gt;2.4 何时使用类方法？&lt;/span&gt;&lt;/h4&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;当需要&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; outline: 0px; font-weight: 700; font-synthesis-style: auto; overflow-wrap: break-word;&quot;&gt;访问或修改类级别的属性&lt;/span&gt;&amp;nbsp;时，使用&amp;nbsp;&lt;code style=&quot;box-sizing: border-box; outline: 0px; font-family: &amp;quot;Source Code Pro&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Anonymous Pro&amp;quot;, &amp;quot;Droid Sans Mono&amp;quot;, Menlo, Monaco, Consolas, Inconsolata, Courier, monospace, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, sans-serif; font-size: 14px; line-height: 22px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 2px; padding: 2px 4px; font-synthesis-style: auto; overflow-wrap: break-word;&quot;&gt;@classmethod&lt;/code&gt;。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;适用于&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; outline: 0px; font-weight: 700; font-synthesis-style: auto; overflow-wrap: break-word;&quot;&gt;创建类实例的工厂方法&lt;/span&gt;、&lt;span style=&quot;box-sizing: border-box; outline: 0px; font-weight: 700; font-synthesis-style: auto; overflow-wrap: break-word;&quot;&gt;修改类状态&lt;/span&gt;&amp;nbsp;等场景。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;h4 style=&quot;box-sizing: border-box; outline: 0px; margin: 24px 0px 8px; padding: 0px; font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimHei, Arial, SimSun; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; font-synthesis-style: auto; overflow-wrap: break-word; font-variant-ligatures: no-common-ligatures; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;a name=&quot;t12&quot; style=&quot;box-sizing: border-box; outline: none; margin: 0px; padding: 0px; font-weight: normal; cursor: pointer; background-color: transparent; color: rgb(78, 161, 219); font-synthesis-style: auto; overflow-wrap: break-word;&quot;&gt;&lt;/a&gt;&lt;a id=&quot;25__104&quot; style=&quot;box-sizing: border-box; outline: none; margin: 0px; padding: 0px; font-weight: normal; cursor: pointer; background-color: transparent; color: rgb(78, 161, 219); font-synthesis-style: auto; overflow-wrap: break-word;&quot;&gt;&lt;/a&gt;&lt;span style=&quot;box-sizing: border-box; outline: 0px; font-synthesis-style: auto; overflow-wrap: break-word;&quot;&gt;2.5 示例：创建实例的工厂方法&lt;/span&gt;&lt;/h4&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre class=&quot;prism-highlight prism-language-python&quot;&gt;class&amp;nbsp;Person:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def&amp;nbsp;__init__(self,&amp;nbsp;name,&amp;nbsp;age):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.name&amp;nbsp;=&amp;nbsp;name
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.age&amp;nbsp;=&amp;nbsp;age

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@classmethod
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def&amp;nbsp;from_string(cls,&amp;nbsp;data_str):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;&amp;quot;&amp;quot;通过字符串创建实例&amp;quot;&amp;quot;&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;name,&amp;nbsp;age&amp;nbsp;=&amp;nbsp;data_str.split(&amp;quot;,&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;cls(name,&amp;nbsp;int(age))

#&amp;nbsp;使用工厂方法创建实例
p1&amp;nbsp;=&amp;nbsp;Person.from_string(&amp;quot;Alice,25&amp;quot;)
print(p1.name,&amp;nbsp;p1.age)&amp;nbsp;&amp;nbsp;#&amp;nbsp;输出:&amp;nbsp;Alice&amp;nbsp;25&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;3. @staticmethod vs @classmethod 区别&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;特性&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 静态方法 (@staticmethod)&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;类方法 (@classmethod)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;绑定&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;与类或实例无关&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;绑定到类&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;第一个参数&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;无需 self 或 cls&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;接受 cls 作为第一个参数&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;访问权限&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;无法访问类属性&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;可以访问和修改类属性&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;适用场景&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;与类逻辑无关的独立功能&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 需要操作类级别数据时&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;调用方式&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ClassName.method() 或 instance.method()&amp;nbsp; &amp;nbsp; &amp;nbsp; ClassName.method() 或 instance.method()&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;4. 使用场景对比&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;- 静态方法（@staticmethod）使用场景&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;与类逻辑无关的工具函数&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-python&quot;&gt;class&amp;nbsp;MathUtils:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@staticmethod
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def&amp;nbsp;multiply(a,&amp;nbsp;b):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;a&amp;nbsp;*&amp;nbsp;b

print(MathUtils.multiply(5,&amp;nbsp;10))&amp;nbsp;&amp;nbsp;#&amp;nbsp;50&lt;/pre&gt;&lt;h4 style=&quot;box-sizing: border-box; outline: 0px; margin: 24px 0px 8px; padding: 0px; font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimHei, Arial, SimSun; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; font-synthesis-style: auto; overflow-wrap: break-word; font-variant-ligatures: no-common-ligatures; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;-&amp;nbsp;&lt;span style=&quot;box-sizing: border-box; outline: 0px; font-synthesis-style: auto; overflow-wrap: break-word;&quot;&gt;类方法（&lt;code style=&quot;box-sizing: border-box; outline: 0px; font-family: &amp;quot;Source Code Pro&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Ubuntu Mono&amp;quot;, &amp;quot;Anonymous Pro&amp;quot;, &amp;quot;Droid Sans Mono&amp;quot;, Menlo, Monaco, Consolas, Inconsolata, Courier, monospace, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, sans-serif; font-size: 20px; line-height: 22px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 2px; padding: 2px 4px; font-synthesis-style: auto; overflow-wrap: break-word;&quot;&gt;@classmethod&lt;/code&gt;）使用场景&lt;/span&gt;&lt;/h4&gt;&lt;ul style=&quot;box-sizing: border-box; outline: 0px; margin-bottom: 24px; padding: 0px; list-style-position: initial; list-style-image: initial; --el-button-hover-bg-color: #6d5ffd; --el-button-hover-border-color: #6d5ffd; --el-button-active-bg-color: #6d5ffd; --el-button-active-border-color: #6d5ffd; font-size: 16px; overflow: auto hidden; font-synthesis-style: auto; overflow-wrap: break-word; color: rgba(0, 0, 0, 0.75); font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif; font-variant-ligatures: no-common-ligatures; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;需要访问类属性或修改类状态&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;工厂方法、动态调整类配置&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre class=&quot;prism-highlight prism-language-python&quot;&gt;class&amp;nbsp;Counter:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;count&amp;nbsp;=&amp;nbsp;0

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@classmethod
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def&amp;nbsp;increment(cls):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cls.count&amp;nbsp;+=&amp;nbsp;1

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@classmethod
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def&amp;nbsp;get_count(cls):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;cls.count

#&amp;nbsp;修改类属性
Counter.increment()
Counter.increment()
print(Counter.get_count())&amp;nbsp;&amp;nbsp;#&amp;nbsp;2&lt;/pre&gt;&lt;h3 style=&quot;box-sizing: border-box; outline: 0px; margin: 24px 0px 8px; padding: 0px; font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimHei, Arial, SimSun; font-size: 18px; --el-button-hover-bg-color: #6d5ffd; --el-button-hover-border-color: #6d5ffd; --el-button-active-bg-color: #6d5ffd; --el-button-active-border-color: #6d5ffd; color: rgb(79, 79, 79); line-height: 28px; font-synthesis-style: auto; overflow-wrap: break-word; font-variant-ligatures: no-common-ligatures; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span style=&quot;box-sizing: border-box; outline: 0px; --el-button-hover-bg-color: #6d5ffd; --el-button-hover-border-color: #6d5ffd; --el-button-active-bg-color: #6d5ffd; --el-button-active-border-color: #6d5ffd; font-synthesis-style: auto; overflow-wrap: break-word;&quot;&gt;5. 结合实例方法、静态方法和类方法&lt;/span&gt;&lt;/h3&gt;&lt;pre class=&quot;prism-highlight prism-language-python&quot;&gt;class&amp;nbsp;MyClass:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;class_var&amp;nbsp;=&amp;nbsp;&amp;quot;I&amp;nbsp;am&amp;nbsp;a&amp;nbsp;class&amp;nbsp;variable&amp;quot;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def&amp;nbsp;__init__(self,&amp;nbsp;value):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.value&amp;nbsp;=&amp;nbsp;value

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;实例方法：访问实例和类属性
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def&amp;nbsp;instance_method(self):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(f&amp;quot;实例方法:&amp;nbsp;value&amp;nbsp;=&amp;nbsp;{self.value},&amp;nbsp;class_var&amp;nbsp;=&amp;nbsp;{self.class_var}&amp;quot;)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;静态方法：不访问实例或类属性
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@staticmethod
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def&amp;nbsp;static_method():
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(&amp;quot;静态方法：不需要访问实例或类&amp;quot;)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;类方法：访问类属性
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@classmethod
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def&amp;nbsp;class_method(cls):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(f&amp;quot;类方法:&amp;nbsp;class_var&amp;nbsp;=&amp;nbsp;{cls.class_var}&amp;quot;)&lt;/pre&gt;&lt;h4 style=&quot;box-sizing: border-box; outline: 0px; margin: 24px 0px 8px; padding: 0px; font-family: &amp;quot;PingFang SC&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, SimHei, Arial, SimSun; font-size: 16px; --el-button-hover-bg-color: #6d5ffd; --el-button-hover-border-color: #6d5ffd; --el-button-active-bg-color: #6d5ffd; --el-button-active-border-color: #6d5ffd; color: rgb(79, 79, 79); line-height: 26px; font-synthesis-style: auto; overflow-wrap: break-word; font-variant-ligatures: no-common-ligatures; text-wrap: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span style=&quot;box-sizing: border-box; outline: 0px; font-synthesis-style: auto; overflow-wrap: break-word;&quot;&gt;使用示例&lt;/span&gt;&lt;/h4&gt;&lt;pre class=&quot;prism-highlight prism-language-python&quot;&gt;#&amp;nbsp;创建实例
obj&amp;nbsp;=&amp;nbsp;MyClass(10)

#&amp;nbsp;调用实例方法
obj.instance_method()&amp;nbsp;&amp;nbsp;#&amp;nbsp;value&amp;nbsp;=&amp;nbsp;10,&amp;nbsp;class_var&amp;nbsp;=&amp;nbsp;I&amp;nbsp;am&amp;nbsp;a&amp;nbsp;class&amp;nbsp;variable

#&amp;nbsp;调用静态方法
MyClass.static_method()&amp;nbsp;&amp;nbsp;#&amp;nbsp;静态方法：不需要访问实例或类

#&amp;nbsp;调用类方法
MyClass.class_method()&amp;nbsp;&amp;nbsp;#&amp;nbsp;类方法:&amp;nbsp;class_var&amp;nbsp;=&amp;nbsp;I&amp;nbsp;am&amp;nbsp;a&amp;nbsp;class&amp;nbsp;variable&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;6. 总结&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;- 静态方法 (@staticmethod)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;不与类或实例关联。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;不需要 self 或 cls 参数。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;适用于工具函数或与类逻辑无关的操作。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;- 类方法 (@classmethod)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;与类绑定，接受 cls 作为第一个参数。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;可以访问和修改类属性。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;适用于修改类级别的属性或创建实例的工厂方法。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;掌握 @staticmethod 和 @classmethod 将大大提升 面向对象编程 技能，让 Python 代码更具灵活性和可维护性。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;————————————————&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 版权声明：本文为博主原创文章，遵循 CC 4.0 BY-SA 版权协议，转载请附上原文出处链接和本声明。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;原文链接：https://blog.csdn.net/u013172930/article/details/146592461&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Wed, 21 May 2025 12:27:15 +0800</pubDate></item><item><title>推荐10个内网穿透工具，有免费且开源的，也有国产的，太香了！本站测试部分，搭建可用。</title><link>https://rsbk.cpolar.cn/post/40.html</link><description>&lt;p style=&quot;text-align: left;&quot;&gt;在现代网络环境中，内网穿透技术成为了很多开发者、系统管理员以及网络安全专家解决内网与外网互通问题的重要手段。尤其对于需要远程访问的应用场景，如远程桌面、Web 服务以及数据库访问等，内网穿透工具提供了一种高效且安全的解决方案。本文将介绍10个内网穿透工具，有免费且开源的，也有国产的，帮助您轻松突破内网限制，提升网络应用的灵活性与可访问性。&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://rsbk.cpolar.cn/zb_users/upload/2025/05/20250520204754_30190.png&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;什么是内网穿透？&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;内网穿透是指通过特定的网络技术或工具，突破内网的防火墙和路由器，允许外部设备访问内网的服务。常见的应用场景包括：&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;远程控制内网设备：开发者需要在外部访问处于内网中的服务器。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;网站和API的暴露：开发中的Web应用、数据库等需要暴露给外部进行测试。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;IoT设备接入：物联网设备通过内网穿透与外部服务通信。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;内网穿透工具通过“隧道”或“代理”方式实现外部设备和内网设备之间的直接连接，而无需修改路由器或防火墙配置。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;1、FRP (Fast Reverse Proxy)（本站没测试）&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;FRP 是一个高性能的反向代理应用，旨在帮助用户穿透防火墙，支持 TCP、UDP、HTTP、HTTPS 等协议的穿透。FRP 采用客户端-服务端架构，允许内网服务通过外网代理服务器公开访问。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;https://github.com/fatedier/frp&amp;nbsp; &amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;1&lt;img src=&quot;https://rsbk.cpolar.cn/zb_users/upload/2025/05/20250520204754_22352.png&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;2&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;特点&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;支持多种协议：FRP 支持 TCP、UDP、HTTP、HTTPS 等多种协议，适用于 Web 服务、数据库、SSH 等应用。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;性能优越：FRP 的设计目标之一是高效的传输速度，能够在有限的带宽条件下提供稳定的连接。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;易于配置：FRP 提供了简单易用的配置文件和命令行参数，支持快速部署。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;加密与安全：FRP 使用 TLS 加密协议，保证传输过程中的数据安全。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;使用场景&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;Web 应用远程访问：开发者可以将本地开发的 Web 服务暴露到外网，进行远程调试和测试。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;数据库服务暴露：在不暴露真实 IP 地址的情况下，安全地访问内网数据库。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;远程 SSH 访问：通过 FRP 实现远程 SSH 登录内网服务器。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;优缺点&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;优点：免费、开源、易于配置、支持多种协议。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;缺点：需要有一个公网上的中转服务器作为代理。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;安装与配置&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;下载 FRP 安装包。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;配置服务器端（frps.ini）和客户端（frpc.ini）。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;启动 FRP 服务。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;详细步骤可以参考 FRP 官方文档。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;https://gofrp.org/zh-cn/&amp;nbsp; &amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;1&lt;img src=&quot;https://rsbk.cpolar.cn/zb_users/upload/2025/05/20250520204755_56498.png&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;2&lt;img src=&quot;https://rsbk.cpolar.cn/zb_users/upload/2025/05/20250520204755_18736.png&quot;/&gt;&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;2、Ngrok&lt;span style=&quot;text-wrap: wrap;&quot;&gt;（本站没测试）&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;Ngrok 是一个广受欢迎的内网穿透工具，通过简单的命令启动即可为本地服务生成一个公网可访问的地址。Ngrok 不仅支持 HTTP 和 TCP 协议的转发，还具有易于使用的 Web 控制台。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;https://ngrok.com/&amp;nbsp; &amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;1&lt;img src=&quot;https://rsbk.cpolar.cn/zb_users/upload/2025/05/20250520204755_18736.png&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;2&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;https://github.com/inconshreveable/ngrok&amp;nbsp; &amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;1&lt;img src=&quot;https://rsbk.cpolar.cn/zb_users/upload/2025/05/20250520204755_35686.png&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;2&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;特点&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;Web 控制台：Ngrok 提供了一个方便的 Web 界面，用户可以实时查看和管理端口转发的状态。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;支持多种协议：不仅支持 HTTP、HTTPS 和 TCP，还支持自定义协议和自定义域名。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;隧道加密：Ngrok 支持 HTTPS 隧道，加密保护传输数据的安全性。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;API 支持：Ngrok 提供了 REST API 供开发者实现自动化集成。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;使用场景&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;开发阶段暴露本地 Web 应用：非常适合开发者在本地调试时暴露服务进行测试。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;远程访问内网设备：可以快速为内网中的设备或服务提供外网访问通道。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;优缺点&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;优点：易于使用、开箱即用、支持自定义域名。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;缺点：免费版有使用时间限制和功能限制，可能不适合长期使用。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;安装与配置&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;注册 Ngrok 账号。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;下载并安装 Ngrok 客户端。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;使用命令行启动服务：ngrok http 80（假设本地服务运行在端口 80）。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;https://download.ngrok.com/windows&amp;nbsp; &amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;1&lt;img src=&quot;https://rsbk.cpolar.cn/zb_users/upload/2025/05/20250520204756_32094.png&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;2&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;3、Tunnelblick&lt;span style=&quot;text-wrap: wrap;&quot;&gt;（本站没测试）&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;Tunnelblick 是一个基于 OpenVPN 的图形化客户端，提供了基于 SSL 的安全隧道连接。它不仅支持内网穿透，还支持 VPN 连接。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;https://tunnelblick.net/&amp;nbsp; &amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;1&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;2&lt;img src=&quot;https://rsbk.cpolar.cn/zb_users/upload/2025/05/20250520204756_45098.png&quot;/&gt;&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;特点&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;基于 OpenVPN：Tunnelblick 基于 OpenVPN 协议，因此提供了高安全性的隧道连接。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;图形化界面：适合不熟悉命令行的用户，通过图形化界面轻松配置和使用。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;跨平台支持：Tunnelblick 支持 macOS 系统，能够与多种设备进行连接。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;开源免费：完全免费，并且开源，符合大多数企业和个人用户的需求。&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://rsbk.cpolar.cn/zb_users/upload/2025/05/20250520204756_51813.png&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;使用场景&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;安全远程办公：使用 Tunnelblick 配置 VPN 隧道，确保外部用户访问内网服务时的安全性。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;公司内网穿透：通过配置 OpenVPN 服务器和 Tunnelblick 客户端，远程访问公司内部网络。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;优缺点&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;优点：安全性高、图形化界面、开源免费。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;缺点：只支持 macOS，不支持 Windows 或 Linux 客户端。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;安装与配置&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;安装 Tunnelblick 客户端。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;配置 OpenVPN 配置文件。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;启动 Tunnelblick 连接到内网服务器。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;https://tunnelblick.net/documents.html&amp;nbsp; &amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;1&lt;img src=&quot;https://rsbk.cpolar.cn/zb_users/upload/2025/05/20250520204757_47850.png&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;2&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;4、GoProxy&lt;span style=&quot;text-wrap: wrap;&quot;&gt;（本站没测试）&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;GoProxy 是一款轻量级的内网穿透工具，采用 Go 语言开发，支持端口转发、Web 服务暴露等功能。GoProxy 具有简单的配置和高效的性能。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;https://github.com/snail007/goproxy&amp;nbsp; &amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;1&lt;img src=&quot;https://rsbk.cpolar.cn/zb_users/upload/2025/05/20250520204757_99791.png&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;2&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;特点&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;轻量级：GoProxy 由 Go 语言编写，整体非常轻便，适合快速部署。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;跨平台支持：支持 Windows、Linux、macOS 等多个操作系统。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;易于配置：通过简单的配置文件，用户可以快速设置内网穿透功能。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;支持自定义域名：用户可以配置自定义域名进行访问。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;使用场景&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;简单的 Web 服务暴露：适用于开发者在本地开发时快速将 Web 服务暴露给外部访问。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;低延迟的端口转发：适用于需要高性能、高可靠性的内网穿透场景。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;优缺点&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;优点：开源、轻量、跨平台。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;缺点：功能相对简单，可能不适合复杂的企业级应用。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;安装与配置&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;下载 GoProxy 安装包。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;配置端口转发规则。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;启动服务并测试内网穿透功能。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;https://snail007.host900.com/goproxy/manual/zh/#/&amp;nbsp; &amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;1&lt;img src=&quot;https://rsbk.cpolar.cn/zb_users/upload/2025/05/20250520204757_99484.png&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;2&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;5、OpenVPN&lt;span style=&quot;text-wrap: wrap;&quot;&gt;（本站没测试）&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;OpenVPN 是一个流行的虚拟专用网络（VPN）解决方案，广泛用于企业和个人用户的远程接入。尽管 OpenVPN 更常用于建立加密连接，但它也可以作为内网穿透的有效工具。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;https://github.com/OpenVPN/openvpn&amp;nbsp; &amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;1&lt;img src=&quot;https://rsbk.cpolar.cn/zb_users/upload/2025/05/20250520204758_69785.png&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;2&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;https://openvpn.net/&amp;nbsp; &amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;1&lt;img src=&quot;https://rsbk.cpolar.cn/zb_users/upload/2025/05/20250520204758_48860.png&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;2&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;特点&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;高安全性：OpenVPN 使用 SSL/TLS 进行加密，提供高安全性。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;可扩展性：适合中大型企业部署，支持多种认证方式和 VPN 配置。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;跨平台支持：支持 Windows、Linux、macOS 等平台。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;社区支持强大：OpenVPN 拥有广泛的社区支持和丰富的文档。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;使用场景&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;远程访问公司内网：管理员可以通过 OpenVPN 配置远程用户访问公司内网。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;建立加密的内网隧道：适合需要加密数据传输的场景，确保内网与外网之间的通信安全。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;优缺点&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;优点：高安全性、可扩展性强、适用于大规模部署。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;缺点：配置相对复杂，适合有一定技术基础的用户。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;安装与配置&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;配置 OpenVPN 服务器。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;安装 OpenVPN 客户端。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;配置和连接远程内网。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;6、cpolar&lt;span style=&quot;text-wrap: wrap;&quot;&gt;（&lt;span style=&quot;text-wrap: wrap; color: #FF0000;&quot;&gt;&lt;strong&gt;本站测试可用，效果不错&lt;/strong&gt;&lt;/span&gt;）&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-wrap: wrap;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-wrap: wrap;&quot;&gt;本站测试地址：&lt;a href=&quot;https://www.cslx.top&quot; target=&quot;_blank&quot;&gt;https://www.cslx.top&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;cpolar 是一款功能强大的内网穿透工具，支持 HTTP、HTTPS、TCP 协议，广泛适用于各种开发和测试场景。cpolar 提供了永久免费使用的服务，带宽为 1 Mbps，支持最大 4 条隧道连接。它允许用户自主选择服务器地区（国内或国外），提供良好的连接稳定性和较高的灵活性。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;https://www.cpolar.com/&amp;nbsp; &amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;1&lt;img src=&quot;https://rsbk.cpolar.cn/zb_users/upload/2025/05/20250520204758_17983.png&quot; width=&quot;895&quot; height=&quot;371&quot; style=&quot;width: 895px; height: 371px;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;2&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;特点&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;支持协议：HTTP、HTTPS、TCP。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;免费使用：永久免费，带宽 1Mbps，流量不限制。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;隧道数量：免费版支持 4 条隧道。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;灵活性高：支持自定义域名、端口映射等功能。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;教程完善：官方提供了详细的文档和教程，用户可以快速上手。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;跨平台支持：支持多平台使用，Windows、Linux 和 macOS 都可以正常运行。&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://rsbk.cpolar.cn/zb_users/upload/2025/05/20250520204759_87230.png&quot; width=&quot;885&quot; height=&quot;562&quot; style=&quot;width: 885px; height: 562px;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;使用场景&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;Web 开发与调试：开发者可以在本地搭建 Web 服务，通过 cpolar 实现外部访问。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;远程访问内网服务：如果需要将内网中的数据库、SSH 或其他服务暴露到外网，cpolar 都能提供稳定的隧道连接。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;优缺点&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;优点：永久免费、带宽和流量不限、支持多协议。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;缺点：免费版的带宽速度可能不适合高流量应用。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;安装与配置&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;注册并下载 cpolar 客户端。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;配置隧道与端口映射。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;启动客户端，并开始使用内网穿透服务。&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://rsbk.cpolar.cn/zb_users/upload/2025/05/20250520204759_45035.png&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;7、花生壳&lt;span style=&quot;text-wrap: wrap;&quot;&gt;（&lt;/span&gt;&lt;span style=&quot;text-wrap: wrap; color: #FF0000;&quot;&gt;&lt;strong&gt;本站测试可用，效果不错，就是有占小贵&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;text-wrap: wrap;&quot;&gt;）&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;本站测试地址：&lt;a href=&quot;http://lbcen.top&quot; target=&quot;_blank&quot;&gt;http://lbcen.top&lt;/a&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;花生壳是一款知名的内网穿透工具，支持 HTTP、HTTPS 和 TCP 协议。花生壳提供了免费套餐，带宽为 1 Mbps，每月流量限制为 1 GB，支持最多 2 条隧道连接。花生壳适用于需要长时间稳定运行的小型项目或开发者个人使用。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;https://hsk.oray.com/&amp;nbsp; &amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;1&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;2&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;特点&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;支持协议：HTTP、HTTPS、TCP。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;免费套餐：带宽 1Mbps，每月流量 1GB，最多支持 2 条隧道。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;认证机制：需要实名认证以确保服务安全。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;稳定性好：信誉较好，使用过程稳定。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;教程完备：官方提供了详细的教程和文档，易于配置。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;使用场景&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;个人项目：适用于小型 Web 服务和数据库的内网穿透。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;远程办公：需要远程访问企业或个人网络时，花生壳是一个可靠的选择。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;优缺点&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;优点：信誉良好、稳定性高、教程完善。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;缺点：免费版流量有限，可能无法满足较大规模的数据传输需求。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;安装与配置&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;注册并安装花生壳客户端。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;配置隧道与端口转发规则。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;开始使用花生壳进行内网穿透。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;8、SAKURA FRP&lt;span style=&quot;text-wrap: wrap;&quot;&gt;（&lt;/span&gt;&lt;span style=&quot;text-wrap: wrap; color: #FF0000;&quot;&gt;&lt;strong&gt;本站测试可用，效果不错&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;text-wrap: wrap;&quot;&gt;）&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-wrap: wrap;&quot;&gt;本站测试地址：&lt;a href=&quot;http://cslx.top&quot; target=&quot;_blank&quot;&gt;http://cslx.top&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;SAKURA FRP 是一款高效的内网穿透工具，支持 HTTP、HTTPS、TCP 和 UDP 协议，能够提供更高的带宽和流量限制。它免费提供每月 5 GB 流量，带宽 10 Mbps，支持最多 2 条隧道连接。通过每日签到，用户可以额外获取免费流量，极大地提高了灵活性。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;https://www.natfrp.com/&amp;nbsp; &amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;1&lt;img src=&quot;https://rsbk.cpolar.cn/zb_users/upload/2025/05/20250520204759_13697.png&quot; width=&quot;791&quot; height=&quot;495&quot; style=&quot;width: 791px; height: 495px;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;2&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;特点&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;支持协议：HTTP、HTTPS、TCP、UDP。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;免费流量：每月 5 GB 流量，带宽为 10 Mbps。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;签到奖励：每日签到可以获得额外的免费流量。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;教程详细：官方提供了详细的文档和配置指南，帮助用户快速入门。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;使用场景&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;开发者和运维：适用于开发测试过程中暴露本地服务，或者需要快速远程访问企业内网的场景。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;高流量场景：由于提供了较大的带宽和流量，适用于需要较大带宽的应用，如视频直播或大文件传输。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;优缺点&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;优点：较大的免费带宽和流量、支持多种协议。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;缺点：免费版仍有一些限制，如隧道数量限制。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;安装与配置&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;注册并下载 SAKURA FRP 客户端。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;配置隧道并设置端口映射。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;启动客户端并连接到服务器。&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://rsbk.cpolar.cn/zb_users/upload/2025/05/20250520204759_26375.png&quot; width=&quot;845&quot; height=&quot;467&quot; style=&quot;width: 845px; height: 467px;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;9、NATAPP&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;NATAPP 是一款简单易用的内网穿透工具，支持 HTTP、HTTPS 和 TCP 协议。它提供免费流量且不限制流量使用，每月最多支持 2 条隧道连接，带宽为 1 Mbps。NATAPP 适合对易用性有较高要求的用户，界面简洁，使用方便。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;https://natapp.cn/&amp;nbsp; &amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;1&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;2&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;特点&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;支持协议：HTTP、HTTPS、TCP。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;流量不限制：免费版不限制流量。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;隧道数量：最多支持 2 条隧道连接。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;实名认证：使用时需要实名认证以确保服务的安全。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;使用场景&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;小型开发项目：适合用于开发者将本地服务暴露给外部访问进行测试。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;远程工作：适合需要远程访问公司内网的个人或团队。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;优缺点&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;优点：免费流量不限制、简单易用、稳定性高。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;缺点：免费带宽有限，适用于小流量应用。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;安装与配置&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;注册并下载 NATAPP 客户端。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;配置隧道并选择合适的端口映射。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;启动并使用 NATAPP 进行内网穿透。&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://rsbk.cpolar.cn/zb_users/upload/2025/05/20250520204800_48676.png&quot; width=&quot;813&quot; height=&quot;470&quot; style=&quot;width: 813px; height: 470px;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;10、飞鸽&lt;span style=&quot;text-wrap: wrap;&quot;&gt;（&lt;/span&gt;&lt;span style=&quot;text-wrap: wrap; color: #FF0000;&quot;&gt;&lt;strong&gt;本站测试可用，效果不错&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;text-wrap: wrap;&quot;&gt;）&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;本站测试地址：&lt;a href=&quot;http://free.cslx.cc&quot; target=&quot;_blank&quot;&gt;http://free.cslx.cc&lt;/a&gt;免费只能用三天，又要重新申请&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;飞鸽是一款无需安装即可使用的内网穿透工具，支持 TCP、HTTP、UDP 协议。飞鸽的免费版本提供 0.5 Mbps 的带宽，最多支持 1 条隧道连接，且支持 20 个并发连接。飞鸽的操作非常简便，用户只需解压即可使用，适合临时快速搭建的场景。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;https://www.fgnwct.com/&amp;nbsp; &amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;1&lt;img src=&quot;https://rsbk.cpolar.cn/zb_users/upload/2025/05/20250520204800_78819.png&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;2&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;特点&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;支持协议：TCP、HTTP、UDP。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;无需安装：解压即用，无需复杂的安装过程。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;免费带宽：0.5 Mbps，支持最多 20 并发连接。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;不限流量：提供无限流量的使用，适合低带宽需求的场景。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;使用场景&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;临时项目：适合快速部署临时服务，尤其是在没有复杂配置需求的情况下。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;小型测试和个人项目：适合用来暴露小型 Web 服务或其他内网服务。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;优缺点&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;优点：无需安装、简单易用、支持多种协议。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;缺点：带宽有限，适合低流量和并发需求的应用。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;安装与配置&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;下载并解压飞鸽客户端。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;配置隧道和端口映射。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;启动并使用飞鸽进行内网穿透。&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://rsbk.cpolar.cn/zb_users/upload/2025/05/20250520204801_90938.png&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;怎么样，你用过几个？&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;————————————————&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 版权声明：本文为博主原创文章，遵循 CC 4.0 BY-SA 版权协议，转载请附上原文出处链接和本声明。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;原文链接：https://blog.csdn.net/yy1715713348/article/details/146253195&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;</description><pubDate>Tue, 20 May 2025 20:35:47 +0800</pubDate></item><item><title>Windows系统下Mysql压缩包安装详细教程</title><link>https://rsbk.cpolar.cn/post/39.html</link><description>&lt;p&gt;1. 下载MySQL压缩包&lt;/p&gt;&lt;p&gt;访问MySQL官方网站：MySQL Downloads&lt;/p&gt;&lt;p&gt;在“MySQL Community Server”部分，选择适合你系统的版本（通常是Windows (x86, 64-bit), ZIP Archive）。&lt;/p&gt;&lt;p&gt;点击“Download”按钮，下载压缩包。&lt;/p&gt;&lt;p&gt;2. 解压MySQL压缩包&lt;/p&gt;&lt;p&gt;将下载的压缩包解压到你想要安装MySQL的目录，例如D:\mysql。&lt;/p&gt;&lt;p&gt;3. 配置环境变量&lt;/p&gt;&lt;p&gt;右键点击“此电脑”或“我的电脑”，选择“属性”。&lt;/p&gt;&lt;p&gt;点击“高级系统设置”，然后点击“环境变量”。&lt;/p&gt;&lt;p&gt;配置两个环境变量&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 新建系统变量：变量名MYSQL_HOME&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;变量值MySQL的解压路径&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 将MySQL_HOME添加到PATH环境变量&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; %MYSQL_HOME%\bin&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; 最后点击“确定”保存更改。&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;4. 创建MySQL配置文件&lt;/p&gt;&lt;p&gt;第一步：环境配置完成后，打开mysql文件夹，创建一个新的文件后缀名为 .ini 的 my.ini空白文件。&lt;/p&gt;&lt;p&gt;第二步：编辑创建好的my.ini文件，用于初始化mysql数据库，tips：路径必须为“’\”的形式&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;[mysql]&lt;/p&gt;&lt;p&gt;# 设置mysql客户端默认字符集&lt;/p&gt;&lt;p&gt;default-character-set=utf8&lt;/p&gt;&lt;p&gt;[mysqld]&lt;/p&gt;&lt;p&gt;# 设置3306端口&lt;/p&gt;&lt;p&gt;port = 3306&lt;/p&gt;&lt;p&gt;# 设置mysql的安装目录&lt;/p&gt;&lt;p&gt;basedir = D:\\mysql\\mysql-8.0.17-winx64&lt;/p&gt;&lt;p&gt;# 设置mysql数据库的数据的存放目录&lt;/p&gt;&lt;p&gt;datadir = D:\\mysql\\mysql-8.0.17-winx64\\data&lt;/p&gt;&lt;p&gt;# 允许最大连接数&lt;/p&gt;&lt;p&gt;max_connections=20&lt;/p&gt;&lt;p&gt;# 服务端使用的字符集默认为8比特编码的latin1字符集&lt;/p&gt;&lt;p&gt;character-set-server=utf8&lt;/p&gt;&lt;p&gt;# 创建新表时将使用的默认存储引擎&lt;/p&gt;&lt;p&gt;default-storage-engine=INNODB&lt;/p&gt;&lt;p&gt;# 创建模式&lt;/p&gt;&lt;p&gt;sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES&lt;/p&gt;&lt;p&gt;你可以根据需要修改 basedir 和 datadir 的路径。&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;5. 初始化MySQL&lt;/p&gt;&lt;p&gt;打开命令提示符（以管理员身份运行）。&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;快捷键Windows + R 输入cmd，进入本地Windows 命令行窗口&lt;/p&gt;&lt;p&gt;然后通过命令行 进入mysql下的bin文件夹，输入以下命令来初始化MySQL：&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;mysqld --initialize --console&lt;/p&gt;&lt;p&gt;输入上述命令，按回车，会发现文件夹下会多出一个新的文件夹data。初始化完成后，命令行会显示一个临时密码，请记下这个密码，稍后登录MySQL时会用到&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;版本不同可能有所偏差&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;如果命令行没有显示临时密码，那么等待初始化完成后当前目录会生成一个后缀名为.err的文件，里面存放的是初始化登录mysql的密码。&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;6. 安装MySQL服务&lt;/p&gt;&lt;p&gt;在命令提示符中输入以下命令来安装MySQL服务：&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;mysqld --install&lt;/p&gt;&lt;p&gt;如果安装成功，你会看到“Service successfully installed”的提示。&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;如果先前在电脑中装过mysql，请在cmd命令窗口输入sc delete mysql 删除之前的mysql服务。&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;sc delete mysql&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;如果出现 Install/Remove of the Service Denied!，则请以管理员身份运行命令行&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;7. 启动MySQL服务&lt;/p&gt;&lt;p&gt;在命令提示符中输入以下命令来启动MySQL服务：&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;net start mysql&lt;/p&gt;&lt;p&gt;8. 登录MySQL并修改密码&lt;/p&gt;&lt;p&gt;在命令提示符中输入以下命令来登录MySQL：&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;mysql -u root -p&lt;/p&gt;&lt;p&gt;输入之前记下的临时密码。&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;登录成功后，输入以下命令来修改密码：&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;ALTER USER &amp;#39;root&amp;#39;@&amp;#39;localhost&amp;#39; IDENTIFIED BY &amp;#39;新密码&amp;#39;;&lt;/p&gt;&lt;p&gt;将 新密码 替换为你想要设置的密码。&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;9. 验证安装&lt;/p&gt;&lt;p&gt;在命令提示符中输入以下命令来验证MySQL是否安装成功：&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;mysql -u root -p&lt;/p&gt;&lt;p&gt;输入你设置的密码，如果成功登录，说明MySQL安装成功。&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;10. 停止和卸载MySQL服务（可选）&lt;/p&gt;&lt;p&gt;如果需要停止MySQL服务，可以使用以下命令：&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;net stop mysql&lt;/p&gt;&lt;p&gt;如果需要卸载MySQL服务，可以使用以下命令：&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;mysqld --remove&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 或者&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;sc delete mysql&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;注意事项&lt;/p&gt;&lt;p&gt;确保你以管理员身份运行命令提示符。&lt;/p&gt;&lt;p&gt;如果在安装过程中遇到问题，可以查看MySQL的错误日志文件（通常位于 D:\mysql\data\ 目录下）以获取更多信息。&lt;/p&gt;&lt;p&gt;————————————————&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 版权声明：本文为博主原创文章，遵循 CC 4.0 BY-SA 版权协议，转载请附上原文出处链接和本声明。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;原文链接：https://blog.csdn.net/m0_57376564/article/details/147491162&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Sat, 10 May 2025 10:05:16 +0800</pubDate></item><item><title>Windows安装Apache服务</title><link>https://rsbk.cpolar.cn/post/38.html</link><description>&lt;p style=&quot;text-align: left;&quot;&gt;目录&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;一、下载Apache&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;1. Apache官方下载地址&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;2. 选择需要安装的版本&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;二、安装Apache&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;1. 解压安装包&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;三、配置Apache服务&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;1. 配置安装路径&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;四、开启Apache服务&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;1.进入“bin”目录&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;2. 检验配置文件是否合法&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;3. 安装 Apache 主服务&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;4. 启动 Apache 服务&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;五、页面访问&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;一、下载Apache&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;1. Apache官方下载地址&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;Welcome! - The Apache HTTP Server Project&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;https://httpd.apache.org/&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;点击Download&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;2. 选择需要安装的版本&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;可以根据自己的需求安装需要的版本：点击Files for Microsoft Windows&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;点击Apache Lounge&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;选择64位或者32位&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;二、安装Apache&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;1. 解压安装包&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;下载完成后，放在自己需要的位置，解压压缩包&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;三、配置Apache服务&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;1. 配置安装路径&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;点击Apache24\conf&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;右键点击httpd.conf在打开方式中用记事本打开&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;“Ctrl+H”查找到以 Define SRVROOT&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;配置Apache安装路径&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;修改Apache实际绝对安装目录，注意这里用&amp;quot;/&amp;quot;而不是“\”，${SRVROOT}指定义的SRVROOT路径变量&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;修改以后按“Ctrl+S”保存即可&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;四、开启Apache服务&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;1.进入“bin”目录&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;以管理员身份运行“命令提示符”&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;用“cd”进入bin目录&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;cd C:\Users\luoxiang\AppData\Local\Programs\Apache\Apache24\bin&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;或者直接在“bin”目录进入“命令提示符”&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;2. 检验配置文件是否合法&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;进入到bin目录下，使用httpd -t ，检查配置文件是否合法；&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;显示“Syntax OK”表示没有问题&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;但是出现了一个错误&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;httpd: Could not reliably determine the server&amp;#39;s fully qualified domain name, using fe80::2748:d433:8602:9657. Set the &amp;#39;ServerName&amp;#39; directive globally to suppress this message&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;该错误信息表示Apache无法彻底确定服务器的完全限定域名，只好使用IP地址192.168.1.100来作为主机名称。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;简而言之，如果你的服务器IP地址是192.168.1.100，而你也没有在配置文件httpd.conf中设置Apache服务器的主机名称(ServerName)，Apache就无法知道该该服务器的主机名称，只好以192.168.1.100这个IP地址来替代。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;要解决这个问题，非常简单。我们只需要在Apache安装目录/conf/httpd.conf文件中启用ServerName配置指令即可。例如：&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;检查完毕&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;3. 安装 Apache 主服务&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;httpd -k install -n apache&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;该命令的意思是，安装Windows可托管的Apache服务，其中 “-n” 后面参数是自定义Windows服务名称，之后可使用Windows管理服务的命令来管理apache服务，如 “net start/stop apache”（启动 / 停止服务）。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;服务安装完毕后，会自动测试，若有问题，窗口会提示错误，此时请根据错误自行排查。&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;正常安装完毕如下图所示：&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;安装成功&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;4. 启动 Apache 服务&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;启动服务&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;net start apache&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;# 或者使用&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;httpd -k start -n apache&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;停止服务&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;net stop apache&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;# 或者使用&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;httpd -k stop -n apache&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;重启服务&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;# 重启服务&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;httpd -k restart -n apache&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;卸载服务&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;# 卸载服务&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;## 卸载服务时先停止&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;httpd -k stop -n apache&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;## 再卸载服务&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;httpd -k uninstall -n apache&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;可视化启动&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;打开安装apache的 bin 目录，下面有一个 ApacheMonitor.exe 文件，运行即可&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;双击如果没反应可以看一下小窗口，就是qq、微信、那些最小化存放的地址，有一个这个标志&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;在这里面可以直接启动、停止、重启操作&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;五、页面访问&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;默认端口为80，如需要其他端口可到httpd.conf 配置中自行修改&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;http://localhost:80/&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;看到如下页面，则代表安装成功。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;————————————————&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 版权声明：本文为博主原创文章，遵循 CC 4.0 BY-SA 版权协议，转载请附上原文出处链接和本声明。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;原文链接：https://blog.csdn.net/qq_61567609/article/details/138942274&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;</description><pubDate>Sat, 10 May 2025 09:10:45 +0800</pubDate></item><item><title>如何配置多个 virtualhost使用相同的SSL证书 - Apache</title><link>https://rsbk.cpolar.cn/post/37.html</link><description>&lt;div id=&quot;article_content&quot; style=&quot;box-sizing: border-box; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, sans-serif; text-wrap: wrap; background-color: rgb(255, 255, 255); padding: 5px; overflow-wrap: break-word; word-break: normal; max-width: 850px;&quot;&gt;&lt;div class=&quot;htmledit_views&quot; style=&quot;box-sizing: border-box; font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif, SimHei, SimSun;&quot;&gt;&lt;div id=&quot;myquestion&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;p style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify;&quot;&gt;语境：&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify;&quot;&gt;我有一个域名：&amp;nbsp;&lt;code style=&quot;box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14.4px; padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;&quot;&gt;example.com&lt;/code&gt;，但我想创建一个像这样的域&amp;nbsp;&lt;code style=&quot;box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14.4px; padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;&quot;&gt;api.example.com&lt;/code&gt;&amp;nbsp;使用它像网络服务一样。&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify;&quot;&gt;昨晚，我有一个免费的SSL证书使用&amp;nbsp;&lt;em style=&quot;box-sizing: border-box;&quot;&gt;让我们加密&lt;/em&gt;.&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify;&quot;&gt;我的域名&amp;nbsp;&lt;code style=&quot;box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14.4px; padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;&quot;&gt;example.com&lt;/code&gt;&amp;nbsp;应该打开内容&amp;nbsp;&lt;code style=&quot;box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14.4px; padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;&quot;&gt;/var/www/website/&lt;/code&gt;.&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify;&quot;&gt;我的域名&amp;nbsp;&lt;code style=&quot;box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14.4px; padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;&quot;&gt;api.example.com&lt;/code&gt;&amp;nbsp;应该打开内容&amp;nbsp;&lt;code style=&quot;box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14.4px; padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;&quot;&gt;/var/www/api/&lt;/code&gt;.&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify;&quot;&gt;我正在寻找互联网上的一些信息，我创建了这些文件&amp;nbsp;&lt;code style=&quot;box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14.4px; padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;&quot;&gt;/etc/apache2/sites-available/&lt;/code&gt;&lt;/p&gt;&lt;h3 style=&quot;box-sizing: border-box; font-family: inherit; line-height: 30px; color: rgb(79, 79, 79); margin: 8px 0px 16px; font-size: 22px;&quot;&gt;/etc/apache2/sites-available/example.com.&lt;/h3&gt;&lt;pre style=&quot;box-sizing: border-box; overflow: auto; font-family: Consolas, Inconsolata, Courier, monospace; padding: 8px; margin-top: 0px; margin-bottom: 24px; line-height: 22px; color: rgb(0, 0, 0); word-break: break-all; overflow-wrap: break-word; background-color: rgb(245, 245, 245); border: 1px solid rgb(204, 204, 204); border-radius: 4px; position: relative; text-wrap: wrap;&quot;&gt;&amp;lt;VirtualHost&amp;nbsp;*:80&amp;gt;
ServerName&amp;nbsp;&amp;nbsp;example.com
DocumentRoot&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/var/www/website/
LogLevel&amp;nbsp;debug
ErrorLog&amp;nbsp;${APACHE_LOG_DIR}/example.com/error.log
&amp;lt;Directory&amp;nbsp;&amp;quot;/var/www/website/&amp;quot;&amp;gt;
Options&amp;nbsp;FollowSymLinks
AllowOverride&amp;nbsp;None
&amp;lt;/Directory&amp;gt;
&amp;lt;/VirtualHost&amp;gt;
&amp;lt;VirtualHost&amp;nbsp;*:443&amp;gt;
ServerName&amp;nbsp;&amp;nbsp;example.com
DocumentRoot&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/var/www/website/
LogLevel&amp;nbsp;debug
ErrorLog&amp;nbsp;${APACHE_LOG_DIR}/example.com/error_ssl.log
SSLEngine&amp;nbsp;on
SSLCertificateKeyFile&amp;nbsp;&amp;nbsp;&amp;nbsp;/etc/apache2/ssl/example.com/privkey.pem
SSLCertificateFile&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/etc/apache2/ssl/example.com/cert.pem
SSLCertificateChainFile&amp;nbsp;/etc/apache2/ssl/example.com/chain.pem
&amp;lt;Directory&amp;nbsp;&amp;quot;/var/www/website/&amp;quot;&amp;gt;
Options&amp;nbsp;FollowSymLinks
AllowOverride&amp;nbsp;None
&amp;lt;/Directory&amp;gt;
&amp;lt;/VirtualHost&amp;gt;&lt;/pre&gt;&lt;h3 style=&quot;box-sizing: border-box; font-family: inherit; line-height: 30px; color: rgb(79, 79, 79); margin: 8px 0px 16px; font-size: 22px;&quot;&gt;/etc/apache2/sites-available/api.example.com.&lt;/h3&gt;&lt;pre style=&quot;box-sizing: border-box; overflow: auto; font-family: Consolas, Inconsolata, Courier, monospace; padding: 8px; margin-top: 0px; margin-bottom: 24px; line-height: 22px; color: rgb(0, 0, 0); word-break: break-all; overflow-wrap: break-word; background-color: rgb(245, 245, 245); border: 1px solid rgb(204, 204, 204); border-radius: 4px; position: relative; text-wrap: wrap;&quot;&gt;&amp;lt;VirtualHost&amp;nbsp;*:80&amp;gt;
ServerName&amp;nbsp;&amp;nbsp;api.example.com
DocumentRoot&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/var/www/api/
#RewriteEngine&amp;nbsp;On
#RewriteRule&amp;nbsp;^(.*)$&amp;nbsp;https://%{HTTP_HOST}$1&amp;nbsp;[R=301,L]
&amp;lt;Directory&amp;nbsp;&amp;quot;/var/www/api/&amp;quot;&amp;gt;
Options&amp;nbsp;FollowSymLinks
AllowOverride&amp;nbsp;None
&amp;lt;/Directory&amp;gt;
&amp;lt;/VirtualHost&amp;gt;
&amp;lt;VirtualHost&amp;nbsp;*:443&amp;gt;
ServerName&amp;nbsp;&amp;nbsp;api.example.com
DocumentRoot&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/var/www/api/
LogLevel&amp;nbsp;warn
ErrorLog&amp;nbsp;${APACHE_LOG_DIR}/error.log
SSLEngine&amp;nbsp;on
SSLCertificateKeyFile&amp;nbsp;&amp;nbsp;&amp;nbsp;/etc/apache2/ssl/example.com/privkey.pem
SSLCertificateFile&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/etc/apache2/ssl/example.com/cert.pem
SSLCertificateChainFile&amp;nbsp;/etc/apache2/ssl/example.com/chain.pem
&amp;lt;Directory&amp;nbsp;&amp;quot;/var/www/api/&amp;quot;&amp;gt;
Options&amp;nbsp;FollowSymLinks
AllowOverride&amp;nbsp;None
&amp;lt;/Directory&amp;gt;
&amp;lt;/VirtualHost&amp;gt;&lt;/pre&gt;&lt;p style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify;&quot;&gt;我创建了两个文件，因为我虽然我们需要分隔域，但是当我尝试输入时&amp;nbsp;&lt;code style=&quot;box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14.4px; padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;&quot;&gt;example.com&lt;/code&gt;&amp;nbsp;我有内容&amp;nbsp;&lt;code style=&quot;box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14.4px; padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;&quot;&gt;api.example.com&lt;/code&gt;.&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify;&quot;&gt;和&amp;nbsp;&lt;em style=&quot;box-sizing: border-box;&quot;&gt;让我们加密&lt;/em&gt;，我已经为两个域创建了相同的SSL证书，并且文件所在&amp;nbsp;&lt;code style=&quot;box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14.4px; padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;&quot;&gt;/etc/apache2/ssl/example.com/&lt;/code&gt;.&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;myfieldset&quot; style=&quot;box-sizing: border-box; border: 5px solid rgb(221, 221, 221); padding-left: 15px; padding-right: 15px; margin-top: 40px;&quot;&gt;&lt;h3 class=&quot;mylegend&quot; style=&quot;box-sizing: border-box; line-height: 30px; color: black; margin: -15px 0px 16px; font-size: 25px; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial; padding: 0px 10px; width: 110px;&quot;&gt;看答案&lt;/h3&gt;&lt;div id=&quot;myanswer&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;p style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify;&quot;&gt;我找到了解决方案！&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify;&quot;&gt;我已经编辑过了&amp;nbsp;&lt;code style=&quot;box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14.4px; padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;&quot;&gt;httpd.conf&lt;/code&gt;&amp;nbsp;和&amp;nbsp;&lt;code style=&quot;box-sizing: border-box; font-family: Menlo, Monaco, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 14.4px; padding: 2px 4px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 4px;&quot;&gt;ports.conf&lt;/code&gt;.&lt;/p&gt;&lt;h3 style=&quot;box-sizing: border-box; font-family: inherit; line-height: 30px; color: rgb(79, 79, 79); margin: 8px 0px 16px; font-size: 22px;&quot;&gt;/etc/apache2/ports.conf.&lt;/h3&gt;&lt;pre style=&quot;box-sizing: border-box; overflow: auto; font-family: Consolas, Inconsolata, Courier, monospace; padding: 8px; margin-top: 0px; margin-bottom: 24px; line-height: 22px; color: rgb(0, 0, 0); word-break: break-all; overflow-wrap: break-word; background-color: rgb(245, 245, 245); border: 1px solid rgb(204, 204, 204); border-radius: 4px; position: relative; text-wrap: wrap;&quot;&gt;#&amp;nbsp;If&amp;nbsp;you&amp;nbsp;just&amp;nbsp;change&amp;nbsp;the&amp;nbsp;port&amp;nbsp;or&amp;nbsp;add&amp;nbsp;more&amp;nbsp;ports&amp;nbsp;here,&amp;nbsp;you&amp;nbsp;will&amp;nbsp;likely&amp;nbsp;also
#&amp;nbsp;have&amp;nbsp;to&amp;nbsp;change&amp;nbsp;the&amp;nbsp;VirtualHost&amp;nbsp;statement&amp;nbsp;in
#&amp;nbsp;/etc/apache2/sites-enabled/000-default
#&amp;nbsp;This&amp;nbsp;is&amp;nbsp;also&amp;nbsp;true&amp;nbsp;if&amp;nbsp;you&amp;nbsp;have&amp;nbsp;upgraded&amp;nbsp;from&amp;nbsp;before&amp;nbsp;2.2.9-3&amp;nbsp;(i.e.&amp;nbsp;from
#&amp;nbsp;Debian&amp;nbsp;etch).&amp;nbsp;See&amp;nbsp;/usr/share/doc/apache2.2-common/NEWS.Debian.gz&amp;nbsp;and
#&amp;nbsp;README.Debian.gz
NameVirtualHost&amp;nbsp;*:80
Listen&amp;nbsp;80
NameVirtualHost&amp;nbsp;*:443
&amp;lt;IfModule&amp;nbsp;mod_ssl.c&amp;gt;
#&amp;nbsp;If&amp;nbsp;you&amp;nbsp;add&amp;nbsp;NameVirtualHost&amp;nbsp;*:443&amp;nbsp;here,&amp;nbsp;you&amp;nbsp;will&amp;nbsp;also&amp;nbsp;have&amp;nbsp;to&amp;nbsp;change
#&amp;nbsp;the&amp;nbsp;VirtualHost&amp;nbsp;statement&amp;nbsp;in&amp;nbsp;/etc/apache2/sites-available/default-ssl
#&amp;nbsp;to&amp;nbsp;&amp;lt;VirtualHost&amp;nbsp;*:443&amp;gt;
#&amp;nbsp;Server&amp;nbsp;Name&amp;nbsp;Indication&amp;nbsp;for&amp;nbsp;SSL&amp;nbsp;named&amp;nbsp;virtual&amp;nbsp;hosts&amp;nbsp;is&amp;nbsp;currently&amp;nbsp;not
#&amp;nbsp;supported&amp;nbsp;by&amp;nbsp;MSIE&amp;nbsp;on&amp;nbsp;Windows&amp;nbsp;XP.
Listen&amp;nbsp;443
&amp;lt;/IfModule&amp;gt;
&amp;lt;IfModule&amp;nbsp;mod_gnutls.c&amp;gt;
Listen&amp;nbsp;443
&amp;lt;/IfModule&amp;gt;&lt;/pre&gt;&lt;h3 style=&quot;box-sizing: border-box; font-family: inherit; line-height: 30px; color: rgb(79, 79, 79); margin: 8px 0px 16px; font-size: 22px;&quot;&gt;/etc/apache2/httpd.conf.&lt;/h3&gt;&lt;pre style=&quot;box-sizing: border-box; overflow: auto; font-family: Consolas, Inconsolata, Courier, monospace; padding: 8px; margin-top: 0px; margin-bottom: 24px; line-height: 22px; color: rgb(0, 0, 0); word-break: break-all; overflow-wrap: break-word; background-color: rgb(245, 245, 245); border: 1px solid rgb(204, 204, 204); border-radius: 4px; position: relative; text-wrap: wrap;&quot;&gt;SSLStrictSNIVHostCheck&amp;nbsp;on&lt;/pre&gt;&lt;p style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; font-size: 16px; color: rgb(79, 79, 79); line-height: 26px; text-align: justify;&quot;&gt;现在我可以使用该域来网站和WebService&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Fri, 02 May 2025 15:16:35 +0800</pubDate></item><item><title>windows10下apache配置多个SSL站点</title><link>https://rsbk.cpolar.cn/post/36.html</link><description>&lt;p style=&quot;text-align: left;&quot;&gt;Windows 10上配置Apache以运行多个SSL站点，你需要遵循以下步骤。这里假设你已经安装了Apache HTTP服务器，并且已经有SSL证书。&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;配置Apache&lt;/h3&gt;&lt;ol style=&quot;list-style-type: none;&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;打开Apache配置文件：找到Apache的配置文件&lt;code&gt;httpd.conf&lt;/code&gt;或&lt;code&gt;httpd-vhosts.conf&lt;/code&gt;（通常位于&lt;code&gt;conf&lt;/code&gt;或&lt;code&gt;conf/extra&lt;/code&gt;目录下）。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;配置虚拟主机：在配置文件中，为每个SSL站点添加一个虚拟主机配置。例如，为&lt;code&gt;domain1.com&lt;/code&gt;和&lt;code&gt;domain2.com&lt;/code&gt;添加配置：&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;pre&gt;&lt;br/&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&amp;lt;VirtualHost *:443&amp;gt;&lt;/p&gt;&lt;/li&gt;&lt;br/&gt;&lt;li&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;ServerName domain1.com&lt;/p&gt;&lt;/li&gt;&lt;br/&gt;&lt;li&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;DocumentRoot &amp;quot;C:/path/to/domain1&amp;quot;&lt;/p&gt;&lt;/li&gt;&lt;br/&gt;&lt;li&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;SSLEngine on&lt;/p&gt;&lt;/li&gt;&lt;br/&gt;&lt;li&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;SSLCertificateFile &amp;quot;conf/domain1.crt&amp;quot;&lt;/p&gt;&lt;/li&gt;&lt;br/&gt;&lt;li&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;SSLCertificateKeyFile &amp;quot;conf/domain1.key&amp;quot;&lt;/p&gt;&lt;/li&gt;&lt;br/&gt;&lt;li&gt;&lt;p&gt;&amp;lt;/VirtualHost&amp;gt;&lt;/p&gt;&lt;/li&gt;&lt;br/&gt;&lt;li&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;/li&gt;&lt;br/&gt;&lt;li&gt;&lt;p&gt;&amp;lt;VirtualHost *:443&amp;gt;&lt;/p&gt;&lt;/li&gt;&lt;br/&gt;&lt;li&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;ServerName domain2.com&lt;/p&gt;&lt;/li&gt;&lt;br/&gt;&lt;li&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;DocumentRoot &amp;quot;C:/path/to/domain2&amp;quot;&lt;/p&gt;&lt;/li&gt;&lt;br/&gt;&lt;li&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;SSLEngine on&lt;/p&gt;&lt;/li&gt;&lt;br/&gt;&lt;li&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;SSLCertificateFile &amp;quot;conf/domain2.crt&amp;quot;&lt;/p&gt;&lt;/li&gt;&lt;br/&gt;&lt;li&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;SSLCertificateKeyFile &amp;quot;conf/domain2.key&amp;quot;&lt;/p&gt;&lt;/li&gt;&lt;br/&gt;&lt;li&gt;&lt;p&gt;&amp;lt;/VirtualHost&amp;gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;pre&gt;&lt;span style=&quot;font-family: 微软雅黑, 宋体, Arial, Helvetica, sans-serif;&quot;&gt;启用模块&lt;/span&gt;&lt;span style=&quot;font-family: 微软雅黑, 宋体, Arial, Helvetica, sans-serif;&quot;&gt;：确保Apache已经启用了&lt;/span&gt;&lt;code&gt;ssl_module&lt;/code&gt;&lt;span style=&quot;font-family: 微软雅黑, 宋体, Arial, Helvetica, sans-serif;&quot;&gt;。你可以通过运行以下命令来检查和启用它：&lt;/span&gt;&lt;br/&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;&lt;pre&gt;httpd&amp;nbsp;-M&amp;nbsp;|&amp;nbsp;findstr&amp;nbsp;ssl_module&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;&lt;pre&gt;#&amp;nbsp;检查是否已启用httpd&amp;nbsp;-k&amp;nbsp;install&amp;nbsp;-f&amp;nbsp;&amp;quot;path_to_httpd.conf&amp;quot;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;&lt;pre&gt;&amp;nbsp;#&amp;nbsp;如果未启用，使用此命令重新安装Apache并启用ssl_module（需要重启）&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;&lt;p style=&quot;text-align: left;&quot;&gt;配置端口监听：确保Apache配置文件中监听了443端口。通常这已经在默认配置中设置好了。如果没有，你可以在&lt;code&gt;Listen&lt;/code&gt;指令中添加&lt;code&gt;443&lt;/code&gt;：&lt;/p&gt;&lt;pre&gt;Listen&amp;nbsp;443&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;步骤 4: 重启Apache服务器&lt;/h3&gt;&lt;p style=&quot;text-align: left;&quot;&gt;配置完成后，保存所有更改并重启Apache服务器以使更改生效：&lt;/p&gt;&lt;pre&gt;httpd&amp;nbsp;-k&amp;nbsp;restart&lt;/pre&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;步骤 5: 测试配置&lt;/h3&gt;&lt;p style=&quot;text-align: left;&quot;&gt;使用浏览器访问你的SSL站点，查看是否能够正确加载页面，并且浏览器没有安全警告。你也可以使用命令行工具如&lt;code&gt;curl&lt;/code&gt;来测试：&lt;/p&gt;&lt;pre&gt;curl&amp;nbsp;-v&amp;nbsp;https://domain1.com&lt;/pre&gt;&lt;p style=&quot;text-align: left;&quot;&gt;确保看到的信息中没有SSL错误。&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;按照以上步骤，你应该能够在Windows 10上成功配置多个SSL站点。如果在实际部署中使用自签名证书，请确保在生产环境中使用由受信任的证书颁发机构（CA）签发的证书。&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;</description><pubDate>Fri, 02 May 2025 13:51:08 +0800</pubDate></item><item><title>怎么查看电脑端口是否打开</title><link>https://rsbk.cpolar.cn/post/35.html</link><description>&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;查看端口是否打开的方法取决于您使用的操作系统。以下是针对Windows和Linux系统的详细步骤：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;Windows系统&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;‌使用命令提示符（CMD）‌&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;按Win + R打开运行对话框，输入cmd，然后按回车。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;使用netstat命令查看所有活动的网络连接及其对应的端口。输入以下命令：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;netstat -an&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;在输出结果中查找您感兴趣的端口号。您可以使用findstr命令来过滤结果，例如查找端口80是否开放：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;netstat -an | findstr 80&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;‌使用PowerShell‌&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;按Win + X，然后选择“Windows PowerShell”或“Windows PowerShell (管理员)”。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;使用Test-NetConnection命令检查某个端口是否开放。例如，检查本地主机上的端口80：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;Test-NetConnection -ComputerName localhost -Port 80&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;Linux系统&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;‌使用netstat命令‌&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;打开终端。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;输入以下命令查看所有活动的网络连接及其对应的端口：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;netstat -tuln&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;在输出结果中查找您感兴趣的端口号。您可以使用grep命令来过滤结果，例如查找端口80是否打开：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;netstat -tuln | grep 80&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;‌使用ss命令‌&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;ss是netstat的现代替代品，执行速度更快，效率更高。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;输入以下命令查看所有活动的网络连接及其对应的端口：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;ss -tuln&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;同样，您可以使用grep命令来过滤结果。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;‌使用lsof命令‌&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;lsof可以列出当前系统打开的文件和使用这些文件的进程。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;输入以下命令查看特定端口是否被占用：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;lsof -i :&amp;lt;端口号&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;例如，查看端口80是否被占用：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;lsof -i :80&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;‌使用nmap工具‌&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;nmap是一个网络扫描工具，可以用来探测主机上的开放端口。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;首先，确保nmap已安装。如果未安装，您可以使用包管理器进行安装。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;输入以下命令检查某个端口是否开放。例如，检查本地主机上的端口80：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;nmap -sS -p 80 localhost&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;注意事项&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;某些命令可能需要管理员或root权限才能查看所有端口信息。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;如果端口未开放，可能是由于防火墙设置阻止了该端口的访问。您可以检查防火墙规则并进行相应的配置。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;通过上述方法，您可以有效地检查和确认计算机上的端口状态。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Tue, 29 Apr 2025 10:44:35 +0800</pubDate></item><item><title>python集合学习实例</title><link>https://rsbk.cpolar.cn/post/34.html</link><description>&lt;pre class=&quot;prism-highlight prism-language-python&quot;&gt;st_set={&amp;#39;张三&amp;#39;,&amp;#39;李四&amp;#39;,&amp;#39;王五&amp;#39;,&amp;#39;王五&amp;#39;,&amp;#39;张三&amp;#39;}

print(st_set,type(st_set),len(st_set))
in_set=set((20,10,50,40,30))
print(in_set,type(in_set),len(in_set))
b={}
print(type(b))
b=in_set
print(type(b))
in_set.add(&amp;#39;线三&amp;#39;)
in_set.add(25)
print(in_set)
st_ls=25
st_lss=&amp;#39;&amp;#39;
#&amp;nbsp;print(in_set.discard(st_ls))
if&amp;nbsp;st_ls&amp;nbsp;in&amp;nbsp;in_set:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;st_lss=in_set.pop()
else:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(&amp;#39;没有这个值！&amp;#39;)
print(in_set,st_lss)

for&amp;nbsp;item&amp;nbsp;in&amp;nbsp;in_set:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(item)

for&amp;nbsp;i,item&amp;nbsp;in&amp;nbsp;enumerate(in_set):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(&amp;#39;{0}----{1}&amp;#39;.format(i,item))

n_list={x&amp;nbsp;for&amp;nbsp;x&amp;nbsp;in&amp;nbsp;range(100)&amp;nbsp;if&amp;nbsp;x%2==0&amp;nbsp;if&amp;nbsp;x&amp;nbsp;%5==0}
print(type(n_list),len(n_list),n_list)

input_list=[2,3,2,4,5,6,6,6]
n_list=[x**2&amp;nbsp;for&amp;nbsp;x&amp;nbsp;in&amp;nbsp;input_list]
print(n_list)
n_ser={x**2&amp;nbsp;for&amp;nbsp;x&amp;nbsp;in&amp;nbsp;input_list}
print(n_ser)&lt;/pre&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Mon, 28 Apr 2025 08:23:34 +0800</pubDate></item><item><title>ping 命令结果中 TTL 值代表什么？</title><link>https://rsbk.cpolar.cn/post/33.html</link><description>&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;a target=&quot;_blank&quot; href=&quot;http://www.baidu.com/link?url=mhImkAjwrjabv_4GkH1FHsfcKMQUc9XrBPSJRr0FXJUXbkK-orkhDRyqydBaxQuajfudWKSd4-eBQb_XLRV9wa9VSg4bcMLQYZog6BlBhMl5X7NDmRcueG_Pqz40FRvLbGJurld3gyps4gcZgw1-zkJoR5WITMQmEMpnt6QTsCmAiNGFCiJST4HfNx1LdwxkLhzdh-ZRV0kGA_3_vLGqy4JROdMvoKkTltvkviKRyuwoCAiiSumL2ML6CY7CkSBGXGYE2iGs6Guf3kjn0Ei6L80Ra1zH43YPhbpdyozUSrFJwwmp2OM5lOzdoXz1RzmL1X57ELeLbSxWko6lfx07gWNQa8GJCg-T1gbk9pzVUy0QQrmrY5rHuKcj-4Ss-nSgx6OEsX-8rPrEwFm6VLpyL-WTEidCLf_z3G3Ed9IUuJ3Gik1xxEdUhj1uDfOw1_FDgeagMX19ukgyjSxzGX-JOJc4wwlx6SAaScDXPUJbJD_&quot;&gt;&lt;/a&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18px;&quot;&gt;ping 命令结果中的 TTL 值代表 “生存时间（Time To Live）”，它本质上是一个计数器。该计数器的初始值由发送方设定，在数据包传输过程中，每经过一个路由器（网络节点），TTL 值就会减 1 。当 TTL 值减为 0 时，路由器会丢弃该数据包，并向源主机返回一个 ICMP 超时消息。TTL 值主要有两个关键作用：一是限制数据包在网络中的生存周期，避免数据包在网络中无限循环；二是帮助用户大致判断数据包经过的路由器数量，从而了解网络路径的状况。不同操作系统通常有各自默认的 TTL 初始值，例如 Windows 系统默认 TTL 初始值一般为 128 ，Linux 系统默认 TTL 初始值一般为 64 。通过 TTL 值，我们能获取网络状态、排查网络故障以及推断目标主机的操作系统类型等信息。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18px;&quot;&gt;1、TTL 值的工作原理&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18px;&quot;&gt;-初始设定：当源主机发送 ping 数据包时，会为其设置一个 TTL 初始值。这个值是根据操作系统的默认设置来确定的。如前文所述，Windows 系统一般将 TTL 初始值设为 128，Linux 系统设为 64。以 Windows 系统为例，当我们在命令提示符中输入 “ping 192.168.1.1” 时，系统会构建一个 ping 数据包，并赋予其 TTL 值 128。这个初始值就像是给数据包设定了一个 “生命期限”，确保它不会在网络中无休止地传播。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18px;&quot;&gt;-逐跳递减：数据包在网络中传输时，每经过一个路由器（也称为跃点），路由器都会将数据包的 TTL 值减 1。这是因为路由器需要消耗一定的资源来处理和转发数据包，所以通过减少 TTL 值来表示数据包在网络中的 “生存消耗”。例如，数据包从源主机出发，经过第一个路由器时，TTL 值从 128 变为 127，经过第二个路由器时，TTL 值变为 126，依此类推。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18px;&quot;&gt;-TTL 为 0 时的处理：当数据包的 TTL 值减为 0 时，当前所在的路由器会丢弃该数据包，并向源主机发送一个 ICMP（Internet 控制消息协议）超时消息。这个超时消息会告知源主机，数据包在传输过程中已超时，未能到达目标主机。比如，当数据包在经过第 128 个路由器后，TTL 值变为 0，此时该路由器就会丢弃数据包，并向源主机返回 ICMP 超时消息，源主机接收到此消息后，在 ping 命令的结果显示中会看到 “请求超时” 的提示。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18px;&quot;&gt;&amp;nbsp;2、TTL 值在网络故障排查中的应用&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18px;&quot;&gt;-判断网络环路：如果在 ping 操作时，连续收到多个 ICMP 超时消息，且 TTL 值始终不变，这可能意味着网络中存在环路。正常情况下，数据包每经过一个路由器 TTL 值就会减 1，但在网络环路中，数据包会在几个路由器之间不断循环，导致 TTL 值不会正常递减。例如，在一个复杂的企业网络中，如果出现网络环路，ping 某一主机时，可能会持续收到 TTL 值为 127（假设初始值为 128）的 ICMP 超时消息，这就提示网络管理员需要排查网络拓扑，找出并解决环路问题。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18px;&quot;&gt;-估算网络路径长度：通过观察最终接收到的 ping 响应数据包中的 TTL 值，我们可以大致估算数据包从源主机到目标主机经过的路由器数量。例如，若源主机为 Windows 系统（TTL 初始值 128），收到的 ping 响应中 TTL 值为 125，那么可以推测数据包大约经过了 3 个路由器（128 - 125 = 3）。虽然这种估算并不精确，因为有些路由器可能不会严格按照每跳减 1 的规则处理 TTL 值，但在一定程度上能帮助我们了解网络路径的大致情况，对于网络规划和故障排查有一定的参考价值。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18px;&quot;&gt;&amp;nbsp;3、通过 TTL 值推断目标主机操作系统类型&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18px;&quot;&gt;-常见操作系统的 TTL 特征：不同操作系统的 ping 数据包 TTL 初始值存在差异，这使得我们可以根据 ping 命令返回的 TTL 值来大致推断目标主机的操作系统类型。除了前面提到的 Windows 系统默认 TTL 初始值一般为 128，Linux 系统默认 TTL 初始值一般为 64 外，Unix 系统默认 TTL 初始值通常也为 255。当然，这些初始值并非绝对固定，有些操作系统允许用户自定义 TTL 初始值，但在大多数默认配置情况下，这些特征值具有一定的参考性。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18px;&quot;&gt;-推断方法示例：当我们对一个未知操作系统的目标主机执行 ping 命令后，得到的 TTL 值接近 128，那么该主机很可能运行的是 Windows 操作系统；若 TTL 值接近 64，则可能是 Linux 系统；若 TTL 值接近 255，则可能是 Unix 系统。但需要注意的是，这种推断并非 100% 准确，因为有些网络设备可能会修改 TTL 值，而且用户也可以自行调整操作系统的 TTL 初始值。不过，在缺乏其他信息的情况下，通过 TTL 值推断操作系统类型仍是一种简单有效的初步判断方法。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18px;&quot;&gt;--------------------------------------------------------------------------------------------------------------------------------&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18px;&quot;&gt;&amp;nbsp;拓展阅读：&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18px;&quot;&gt;-如何修改 Windows 系统的 ping 命令 TTL 初始值？：可以通过修改注册表来实现。打开注册表编辑器，找到 “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters” 路径，在右侧窗口中新建一个名为 “DefaultTTL” 的 DWORD 值，然后根据需要设置其数值数据（例如，设置为 64），重启电脑后生效。但修改注册表有风险，操作前建议备份注册表。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18px;&quot;&gt;-TTL 值对网络性能有什么影响？：合理的 TTL 值设置能确保网络正常运行，避免数据包在网络中无限制循环占用资源。如果 TTL 初始值设置过小，可能导致数据包无法到达距离较远的目标主机；若设置过大，在网络出现环路时，数据包可能长时间在网络中循环，加重网络拥塞。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18px;&quot;&gt;-除了 ping 命令，还有哪些方法可以获取目标主机的操作系统类型？：可以使用端口扫描工具（如 Nmap），它不仅能扫描目标主机开放的端口，还能通过分析端口响应特征来推断操作系统类型。另外，一些网络漏洞扫描工具在扫描过程中也能获取关于目标主机操作系统的信息。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18px;&quot;&gt;————————————————&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 版权声明：本文为博主原创文章，遵循 CC 4.0 BY-SA 版权协议，转载请附上原文出处链接和本声明。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: 18px;&quot;&gt;原文链接：https://blog.csdn.net/weixin_46338972/article/details/147051424&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br style=&quot;text-align: left;&quot;/&gt;&lt;/p&gt;</description><pubDate>Mon, 28 Apr 2025 07:13:55 +0800</pubDate></item></channel></rss>