[{"data":1,"prerenderedAt":173133},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2024-10-10-python-jiao-cheng":3,"wiki-doc-nav":189},{"id":4,"title":5,"body":6,"description":180,"extension":181,"meta":182,"navigation":184,"path":185,"seo":186,"stem":187,"__hash__":188},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":8,"toc":173},"minimark",[9,13,17,20,33,37,112,115,118,121,124,127,130,133,136,139,142],[10,11,5],"h1",{"id":12},"python教程",[14,15,16],"p",{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[14,18,19],{},"建议学习环境：",[21,22,23,27,30],"ol",{},[24,25,26],"li",{},"Python 版本：Python 3.10 及以上。",[24,28,29],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[24,31,32],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[34,35,36],"h2",{"id":36},"章节目录",[21,38,39,46,52,58,64,70,76,82,88,94,100,106],{},[24,40,41],{},[42,43,45],"a",{"href":44},".\u002Fch1-Python","Python环境与第一个程序",[24,47,48],{},[42,49,51],{"href":50},".\u002Fch2","基础语法、变量与字符串",[24,53,54],{},[42,55,57],{"href":56},".\u002Fch3","判断语句",[24,59,60],{},[42,61,63],{"href":62},".\u002Fch4","循环语句",[24,65,66],{},[42,67,69],{"href":68},".\u002Fch5","函数基础",[24,71,72],{},[42,73,75],{"href":74},".\u002Fch6","数据容器",[24,77,78],{},[42,79,81],{"href":80},".\u002Fch7","函数进阶",[24,83,84],{},[42,85,87],{"href":86},".\u002Fch8","文件操作",[24,89,90],{},[42,91,93],{"href":92},".\u002Fch9","异常、模块与包",[24,95,96],{},[42,97,99],{"href":98},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[24,101,102],{},[42,103,105],{"href":104},".\u002Fch11","面向对象基础",[24,107,108],{},[42,109,111],{"href":110},".\u002Fch12","综合案例与复习路线",[34,113,114],{"id":114},"学习路线",[14,116,117],{},"第一阶段：能运行程序。",[14,119,120],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[14,122,123],{},"第二阶段：能组织数据。",[14,125,126],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[14,128,129],{},"第三阶段：能封装逻辑。",[14,131,132],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[14,134,135],{},"第四阶段：能做小项目。",[14,137,138],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[34,140,141],{"id":141},"参考资料",[21,143,144,152,159,166],{},[24,145,146,147],{},"黑马程序员 Python 入门教程推荐：",[42,148,149],{"href":149,"rel":150},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[151],"nofollow",[24,153,154,155],{},"Python 官方中文教程：",[42,156,157],{"href":157,"rel":158},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[151],[24,160,161,162],{},"Python 标准库文档：",[42,163,164],{"href":164,"rel":165},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[151],[24,167,168,169],{},"pyecharts 文档：",[42,170,171],{"href":171,"rel":172},"https:\u002F\u002Fpyecharts.org\u002F",[151],{"title":174,"searchDepth":175,"depth":175,"links":176},"",2,[177,178,179],{"id":36,"depth":175,"text":36},{"id":114,"depth":175,"text":114},{"id":141,"depth":175,"text":141},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记","md",{"category":183},"机器人",true,"\u002Fwiki\u002F2024-10-10-python",{"title":5,"description":180},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",[190,5303,6411,7831,10820,12171,13660,14749,23512,23524,24122,24148,24272,24513,24578,24596,24609,24656,24780,24949,25148,25328,25533,25669,25764,25801,25814,26124,26865,27573,27594,28614,30245,30396,30409,30421,30722,50534,50549,50566,50599,53471,76819,92964,92985,93098,93219,93989,94652,95013,95051,95157,95257,95300,95326,95387,97041,97142,97167,97658,98158,99238,99521,100263,100765,100777,102793,104457,105960,107658,109575,111494,113516,116986,117417,117880,118629,121573,121921,121943,122299,125606,125618,126021,126044,126191,126358,126563,126864,127421,128078,130009,131607,132256,133750,135181,136416,138110,139862,142272,142388,143323,143534,144419,145654,145882,145895,147050,149462,151830,155151,157628,159272,161049,163062,166114,168294,170821,173015],{"id":191,"title":192,"body":193,"description":174,"extension":181,"meta":5298,"navigation":184,"path":5299,"seo":5300,"stem":5301,"__hash__":5302},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":194,"toc":5270},[195,198,202,205,209,220,224,229,232,235,238,241,244,279,283,286,289,292,295,348,352,371,373,387,390,398,401,1263,1270,1287,1291,1382,1386,1392,1481,1485,1523,1527,1591,1595,1599,1606,1617,1621,1626,1630,1635,1639,1644,1648,1652,1657,1927,1932,2070,2075,2332,2335,2343,2347,2352,2455,2458,2764,2773,2874,2877,2880,2883,2886,3146,3151,3291,3294,3473,3476,3604,3607,3759,3763,3768,3771,3782,3790,3793,3900,3904,3908,3913,3963,3968,3973,3997,4002,4055,4058,4063,4240,4245,4530,4535,4932,4936,4941,4998,5003,5011,5014,5154,5157,5266],[10,196,192],{"id":197},"_1基础入门",[34,199,201],{"id":200},"_11注释","1.1注释",[14,203,204],{},"\u002F\u002F或者\u002F* *\u002F",[34,206,208],{"id":207},"_12命名","1.2命名",[21,210,211,214,217],{},[24,212,213],{},"字母数字下划线",[24,215,216],{},"开头必须是字母或_",[24,218,219],{},"不能使用关键词",[34,221,223],{"id":222},"_13数据类型","1.3数据类型",[225,226,228],"h3",{"id":227},"_131整形","1.3.1整形",[14,230,231],{},"short 短整形 2",[14,233,234],{},"int 整形 4",[14,236,237],{},"long 长整形 win4 linux32位4 linux64位8",[14,239,240],{},"long long 长长整形 8",[14,242,243],{},"利用sizeof可以求数据类型占用的内存空间大小",[245,246,250],"pre",{"className":247,"code":248,"language":249,"meta":174,"style":174},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[251,252,253,272],"code",{"__ignoreMap":174},[254,255,258,262,266,269],"span",{"class":256,"line":257},"line",1,[254,259,261],{"class":260},"szBVR","sizeof",[254,263,265],{"class":264},"sVt8B","(",[254,267,268],{"class":260},"int",[254,270,271],{"class":264},")\n",[254,273,274,276],{"class":256,"line":175},[254,275,261],{"class":260},[254,277,278],{"class":264},"(num)\n",[225,280,282],{"id":281},"_132浮点型","1.3.2浮点型",[14,284,285],{},"float 单精度 4节 7位有效数字",[14,287,288],{},"double 双精度 8节 15-16有效数字",[14,290,291],{},"默认情况下，输出一个小数，会显示6位有效数字",[14,293,294],{},"注意点：",[245,296,298],{"className":247,"code":297,"language":249,"meta":174,"style":174},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[251,299,300,325],{"__ignoreMap":174},[254,301,302,305,308,311,315,318,321],{"class":256,"line":257},[254,303,304],{"class":260},"float",[254,306,307],{"class":264}," f1",[254,309,310],{"class":260},"=",[254,312,314],{"class":313},"sj4cs","3.14",[254,316,317],{"class":260},"f",[254,319,320],{"class":264},";",[254,322,324],{"class":323},"sJ8bj"," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[254,326,327,329,332,334,337,340,343,345],{"class":256,"line":175},[254,328,304],{"class":260},[254,330,331],{"class":264}," f2",[254,333,310],{"class":260},[254,335,336],{"class":313},"3",[254,338,339],{"class":260},"e",[254,341,342],{"class":313},"2",[254,344,320],{"class":264},[254,346,347],{"class":323}," \u002F\u002F科学记数法\n",[225,349,351],{"id":350},"_133字符型","1.3.3字符型",[245,353,355],{"className":247,"code":354,"language":249,"meta":174,"style":174},"char ch='a'\n",[251,356,357],{"__ignoreMap":174},[254,358,359,362,365,367],{"class":256,"line":257},[254,360,361],{"class":260},"char",[254,363,364],{"class":264}," ch",[254,366,310],{"class":260},[254,368,370],{"class":369},"sZZnC","'a'\n",[14,372,294],{},[21,374,375,378,381,384],{},[24,376,377],{},"在显示字符型变量时，只能单引号，双引号x",[24,379,380],{},"单引号内只能一个字符，不能字符串",[24,382,383],{},"c和c++字符型变量只占用一个字符",[24,385,386],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[14,388,389],{},"ASCII码大致由以下两部分组成：",[21,391,392,395],{},[24,393,394],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[24,396,397],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[14,399,400],{},"ASCII码表格：",[402,403,404,448],"table",{},[405,406,407],"thead",{},[408,409,410,418,423,427,432,436,440,444],"tr",{},[411,412,413,417],"th",{},[414,415,416],"strong",{},"ASCII","值",[411,419,420],{},[414,421,422],{},"控制字符",[411,424,425,417],{},[414,426,416],{},[411,428,429],{},[414,430,431],{},"字符",[411,433,434,417],{},[414,435,416],{},[411,437,438],{},[414,439,431],{},[411,441,442,417],{},[414,443,416],{},[411,445,446],{},[414,447,431],{},[449,450,451,478,503,528,553,579,604,629,655,680,706,732,758,783,809,835,861,885,910,935,960,985,1010,1035,1060,1085,1110,1136,1161,1186,1211,1237],"tbody",{},[408,452,453,457,460,463,466,469,472,475],{},[454,455,456],"td",{},"0",[454,458,459],{},"NUT",[454,461,462],{},"32",[454,464,465],{},"(space)",[454,467,468],{},"64",[454,470,471],{},"@",[454,473,474],{},"96",[454,476,477],{},"、",[408,479,480,483,486,489,492,495,498,501],{},[454,481,482],{},"1",[454,484,485],{},"SOH",[454,487,488],{},"33",[454,490,491],{},"!",[454,493,494],{},"65",[454,496,497],{},"A",[454,499,500],{},"97",[454,502,42],{},[408,504,505,507,510,513,516,519,522,525],{},[454,506,342],{},[454,508,509],{},"STX",[454,511,512],{},"34",[454,514,515],{},"\"",[454,517,518],{},"66",[454,520,521],{},"B",[454,523,524],{},"98",[454,526,527],{},"b",[408,529,530,532,535,538,541,544,547,550],{},[454,531,336],{},[454,533,534],{},"ETX",[454,536,537],{},"35",[454,539,540],{},"#",[454,542,543],{},"67",[454,545,546],{},"C",[454,548,549],{},"99",[454,551,552],{},"c",[408,554,555,558,561,564,567,570,573,576],{},[454,556,557],{},"4",[454,559,560],{},"EOT",[454,562,563],{},"36",[454,565,566],{},"$",[454,568,569],{},"68",[454,571,572],{},"D",[454,574,575],{},"100",[454,577,578],{},"d",[408,580,581,584,587,590,593,596,599,602],{},[454,582,583],{},"5",[454,585,586],{},"ENQ",[454,588,589],{},"37",[454,591,592],{},"%",[454,594,595],{},"69",[454,597,598],{},"E",[454,600,601],{},"101",[454,603,339],{},[408,605,606,609,612,615,618,621,624,627],{},[454,607,608],{},"6",[454,610,611],{},"ACK",[454,613,614],{},"38",[454,616,617],{},"&",[454,619,620],{},"70",[454,622,623],{},"F",[454,625,626],{},"102",[454,628,317],{},[408,630,631,634,637,640,643,646,649,652],{},[454,632,633],{},"7",[454,635,636],{},"BEL",[454,638,639],{},"39",[454,641,642],{},",",[454,644,645],{},"71",[454,647,648],{},"G",[454,650,651],{},"103",[454,653,654],{},"g",[408,656,657,660,663,666,668,671,674,677],{},[454,658,659],{},"8",[454,661,662],{},"BS",[454,664,665],{},"40",[454,667,265],{},[454,669,670],{},"72",[454,672,673],{},"H",[454,675,676],{},"104",[454,678,679],{},"h",[408,681,682,685,688,691,694,697,700,703],{},[454,683,684],{},"9",[454,686,687],{},"HT",[454,689,690],{},"41",[454,692,693],{},")",[454,695,696],{},"73",[454,698,699],{},"I",[454,701,702],{},"105",[454,704,705],{},"i",[408,707,708,711,714,717,720,723,726,729],{},[454,709,710],{},"10",[454,712,713],{},"LF",[454,715,716],{},"42",[454,718,719],{},"*",[454,721,722],{},"74",[454,724,725],{},"J",[454,727,728],{},"106",[454,730,731],{},"j",[408,733,734,737,740,743,746,749,752,755],{},[454,735,736],{},"11",[454,738,739],{},"VT",[454,741,742],{},"43",[454,744,745],{},"+",[454,747,748],{},"75",[454,750,751],{},"K",[454,753,754],{},"107",[454,756,757],{},"k",[408,759,760,763,766,769,771,774,777,780],{},[454,761,762],{},"12",[454,764,765],{},"FF",[454,767,768],{},"44",[454,770,642],{},[454,772,773],{},"76",[454,775,776],{},"L",[454,778,779],{},"108",[454,781,782],{},"l",[408,784,785,788,791,794,797,800,803,806],{},[454,786,787],{},"13",[454,789,790],{},"CR",[454,792,793],{},"45",[454,795,796],{},"-",[454,798,799],{},"77",[454,801,802],{},"M",[454,804,805],{},"109",[454,807,808],{},"m",[408,810,811,814,817,820,823,826,829,832],{},[454,812,813],{},"14",[454,815,816],{},"SO",[454,818,819],{},"46",[454,821,822],{},".",[454,824,825],{},"78",[454,827,828],{},"N",[454,830,831],{},"110",[454,833,834],{},"n",[408,836,837,840,843,846,849,852,855,858],{},[454,838,839],{},"15",[454,841,842],{},"SI",[454,844,845],{},"47",[454,847,848],{},"\u002F",[454,850,851],{},"79",[454,853,854],{},"O",[454,856,857],{},"111",[454,859,860],{},"o",[408,862,863,866,869,872,874,877,880,883],{},[454,864,865],{},"16",[454,867,868],{},"DLE",[454,870,871],{},"48",[454,873,456],{},[454,875,876],{},"80",[454,878,879],{},"P",[454,881,882],{},"112",[454,884,14],{},[408,886,887,890,893,896,898,901,904,907],{},[454,888,889],{},"17",[454,891,892],{},"DCI",[454,894,895],{},"49",[454,897,482],{},[454,899,900],{},"81",[454,902,903],{},"Q",[454,905,906],{},"113",[454,908,909],{},"q",[408,911,912,915,918,921,923,926,929,932],{},[454,913,914],{},"18",[454,916,917],{},"DC2",[454,919,920],{},"50",[454,922,342],{},[454,924,925],{},"82",[454,927,928],{},"R",[454,930,931],{},"114",[454,933,934],{},"r",[408,936,937,940,943,946,948,951,954,957],{},[454,938,939],{},"19",[454,941,942],{},"DC3",[454,944,945],{},"51",[454,947,336],{},[454,949,950],{},"83",[454,952,953],{},"S",[454,955,956],{},"115",[454,958,959],{},"s",[408,961,962,965,968,971,973,976,979,982],{},[454,963,964],{},"20",[454,966,967],{},"DC4",[454,969,970],{},"52",[454,972,557],{},[454,974,975],{},"84",[454,977,978],{},"T",[454,980,981],{},"116",[454,983,984],{},"t",[408,986,987,990,993,996,998,1001,1004,1007],{},[454,988,989],{},"21",[454,991,992],{},"NAK",[454,994,995],{},"53",[454,997,583],{},[454,999,1000],{},"85",[454,1002,1003],{},"U",[454,1005,1006],{},"117",[454,1008,1009],{},"u",[408,1011,1012,1015,1018,1021,1023,1026,1029,1032],{},[454,1013,1014],{},"22",[454,1016,1017],{},"SYN",[454,1019,1020],{},"54",[454,1022,608],{},[454,1024,1025],{},"86",[454,1027,1028],{},"V",[454,1030,1031],{},"118",[454,1033,1034],{},"v",[408,1036,1037,1040,1043,1046,1048,1051,1054,1057],{},[454,1038,1039],{},"23",[454,1041,1042],{},"TB",[454,1044,1045],{},"55",[454,1047,633],{},[454,1049,1050],{},"87",[454,1052,1053],{},"W",[454,1055,1056],{},"119",[454,1058,1059],{},"w",[408,1061,1062,1065,1068,1071,1073,1076,1079,1082],{},[454,1063,1064],{},"24",[454,1066,1067],{},"CAN",[454,1069,1070],{},"56",[454,1072,659],{},[454,1074,1075],{},"88",[454,1077,1078],{},"X",[454,1080,1081],{},"120",[454,1083,1084],{},"x",[408,1086,1087,1090,1093,1096,1098,1101,1104,1107],{},[454,1088,1089],{},"25",[454,1091,1092],{},"EM",[454,1094,1095],{},"57",[454,1097,684],{},[454,1099,1100],{},"89",[454,1102,1103],{},"Y",[454,1105,1106],{},"121",[454,1108,1109],{},"y",[408,1111,1112,1115,1118,1121,1124,1127,1130,1133],{},[454,1113,1114],{},"26",[454,1116,1117],{},"SUB",[454,1119,1120],{},"58",[454,1122,1123],{},":",[454,1125,1126],{},"90",[454,1128,1129],{},"Z",[454,1131,1132],{},"122",[454,1134,1135],{},"z",[408,1137,1138,1141,1144,1147,1149,1152,1155,1158],{},[454,1139,1140],{},"27",[454,1142,1143],{},"ESC",[454,1145,1146],{},"59",[454,1148,320],{},[454,1150,1151],{},"91",[454,1153,1154],{},"[",[454,1156,1157],{},"123",[454,1159,1160],{},"{",[408,1162,1163,1166,1169,1172,1175,1178,1180,1183],{},[454,1164,1165],{},"28",[454,1167,1168],{},"FS",[454,1170,1171],{},"60",[454,1173,1174],{},"\u003C",[454,1176,1177],{},"92",[454,1179,848],{},[454,1181,1182],{},"124",[454,1184,1185],{},"|",[408,1187,1188,1191,1194,1197,1199,1202,1205,1208],{},[454,1189,1190],{},"29",[454,1192,1193],{},"GS",[454,1195,1196],{},"61",[454,1198,310],{},[454,1200,1201],{},"93",[454,1203,1204],{},"]",[454,1206,1207],{},"125",[454,1209,1210],{},"}",[408,1212,1213,1216,1219,1222,1225,1228,1231,1234],{},[454,1214,1215],{},"30",[454,1217,1218],{},"RS",[454,1220,1221],{},"62",[454,1223,1224],{},">",[454,1226,1227],{},"94",[454,1229,1230],{},"^",[454,1232,1233],{},"126",[454,1235,1236],{},"`",[408,1238,1239,1242,1245,1248,1251,1254,1257,1260],{},[454,1240,1241],{},"31",[454,1243,1244],{},"US",[454,1246,1247],{},"63",[454,1249,1250],{},"?",[454,1252,1253],{},"95",[454,1255,1256],{},"_",[454,1258,1259],{},"127",[454,1261,1262],{},"DEL",[14,1264,1265,1266,1269],{},"ASCII 码大致由以下",[414,1267,1268],{},"两部分组","成：",[1271,1272,1273,1280],"ul",{},[24,1274,1275,1276,1279],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[414,1277,1278],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[24,1281,1282,1283,1286],{},"ASCII 打印字符：数字 ",[414,1284,1285],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[225,1288,1290],{"id":1289},"_134转义字符","1.3.4转义字符",[245,1292,1294],{"className":247,"code":1293,"language":249,"meta":174,"style":174},"\u002F\u002F换行符\ncout \u003C\u003C\"hello world\u002Fn\"; \u002F\u002F就等同于如下：\ncout \u003C\u003C\"hello world\"\u003C\u003Cendl;\n\u002F\u002F反斜杠\ncout \u003C\u003C\"\u002F\u002F\"\u003C\u003Cendl;\n\u002F\u002F水平制表符\ncout \u003C\u003C\"aaaa\\thelloworld\"\u003C\u003Cendl; \u002F\u002F输出窗口时有对齐效果\n",[251,1295,1296,1301,1317,1332,1338,1352,1358],{"__ignoreMap":174},[254,1297,1298],{"class":256,"line":257},[254,1299,1300],{"class":323},"\u002F\u002F换行符\n",[254,1302,1303,1306,1309,1312,1314],{"class":256,"line":175},[254,1304,1305],{"class":264},"cout ",[254,1307,1308],{"class":260},"\u003C\u003C",[254,1310,1311],{"class":369},"\"hello world\u002Fn\"",[254,1313,320],{"class":264},[254,1315,1316],{"class":323}," \u002F\u002F就等同于如下：\n",[254,1318,1320,1322,1324,1327,1329],{"class":256,"line":1319},3,[254,1321,1305],{"class":264},[254,1323,1308],{"class":260},[254,1325,1326],{"class":369},"\"hello world\"",[254,1328,1308],{"class":260},[254,1330,1331],{"class":264},"endl;\n",[254,1333,1335],{"class":256,"line":1334},4,[254,1336,1337],{"class":323},"\u002F\u002F反斜杠\n",[254,1339,1341,1343,1345,1348,1350],{"class":256,"line":1340},5,[254,1342,1305],{"class":264},[254,1344,1308],{"class":260},[254,1346,1347],{"class":369},"\"\u002F\u002F\"",[254,1349,1308],{"class":260},[254,1351,1331],{"class":264},[254,1353,1355],{"class":256,"line":1354},6,[254,1356,1357],{"class":323},"\u002F\u002F水平制表符\n",[254,1359,1361,1363,1365,1368,1371,1374,1376,1379],{"class":256,"line":1360},7,[254,1362,1305],{"class":264},[254,1364,1308],{"class":260},[254,1366,1367],{"class":369},"\"aaaa",[254,1369,1370],{"class":313},"\\t",[254,1372,1373],{"class":369},"helloworld\"",[254,1375,1308],{"class":260},[254,1377,1378],{"class":264},"endl;",[254,1380,1381],{"class":323}," \u002F\u002F输出窗口时有对齐效果\n",[225,1383,1385],{"id":1384},"_135字符串型","1.3.5字符串型",[14,1387,1388,1389,1391],{},"char 变量名",[254,1390],{},"=\"字符串值\"",[245,1393,1395],{"className":247,"code":1394,"language":249,"meta":174,"style":174},"\u002F\u002Fc风格字符串\n\u002F\u002F注意事项：\n\u002F\u002F1.char字符串名[]\n\u002F\u002F2.等号后面要用双引号，包含起来字符串\nchar str[]=\"hello world\";\ncout \u003C\u003Cstr\u003C\u003Cendl;\n\u002F\u002Fc++风格字符串\n\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\nstring str2=\"hello world\";\ncout \u003C\u003Cstr2\u003C\u003Cendl;\n",[251,1396,1397,1402,1407,1412,1417,1431,1444,1449,1455,1467],{"__ignoreMap":174},[254,1398,1399],{"class":256,"line":257},[254,1400,1401],{"class":323},"\u002F\u002Fc风格字符串\n",[254,1403,1404],{"class":256,"line":175},[254,1405,1406],{"class":323},"\u002F\u002F注意事项：\n",[254,1408,1409],{"class":256,"line":1319},[254,1410,1411],{"class":323},"\u002F\u002F1.char字符串名[]\n",[254,1413,1414],{"class":256,"line":1334},[254,1415,1416],{"class":323},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[254,1418,1419,1421,1424,1426,1428],{"class":256,"line":1340},[254,1420,361],{"class":260},[254,1422,1423],{"class":264}," str[]",[254,1425,310],{"class":260},[254,1427,1326],{"class":369},[254,1429,1430],{"class":264},";\n",[254,1432,1433,1435,1437,1440,1442],{"class":256,"line":1354},[254,1434,1305],{"class":264},[254,1436,1308],{"class":260},[254,1438,1439],{"class":264},"str",[254,1441,1308],{"class":260},[254,1443,1331],{"class":264},[254,1445,1446],{"class":256,"line":1360},[254,1447,1448],{"class":323},"\u002F\u002Fc++风格字符串\n",[254,1450,1452],{"class":256,"line":1451},8,[254,1453,1454],{"class":323},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[254,1456,1458,1461,1463,1465],{"class":256,"line":1457},9,[254,1459,1460],{"class":264},"string str2",[254,1462,310],{"class":260},[254,1464,1326],{"class":369},[254,1466,1430],{"class":264},[254,1468,1470,1472,1474,1477,1479],{"class":256,"line":1469},10,[254,1471,1305],{"class":264},[254,1473,1308],{"class":260},[254,1475,1476],{"class":264},"str2",[254,1478,1308],{"class":260},[254,1480,1331],{"class":264},[225,1482,1484],{"id":1483},"_136布尔类型bool","1.3.6布尔类型bool",[245,1486,1488],{"className":247,"code":1487,"language":249,"meta":174,"style":174},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[251,1489,1490,1505],{"__ignoreMap":174},[254,1491,1492,1495,1498,1500,1503],{"class":256,"line":257},[254,1493,1494],{"class":260},"bool",[254,1496,1497],{"class":264}," flag",[254,1499,310],{"class":260},[254,1501,1502],{"class":313},"true",[254,1504,1430],{"class":264},[254,1506,1507,1510,1513,1516,1518,1520],{"class":256,"line":175},[254,1508,1509],{"class":264},"cout",[254,1511,1512],{"class":260},"\u003C\u003Csizeof",[254,1514,1515],{"class":264},"(flag)",[254,1517,1308],{"class":260},[254,1519,1378],{"class":264},[254,1521,1522],{"class":323}," \u002F\u002F查看布尔占内存空间\n",[34,1524,1526],{"id":1525},"_14键盘输入cin","1.4键盘输入cin",[245,1528,1530],{"className":247,"code":1529,"language":249,"meta":174,"style":174},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[251,1531,1532,1545,1562,1573],{"__ignoreMap":174},[254,1533,1534,1536,1539,1541,1543],{"class":256,"line":257},[254,1535,268],{"class":260},[254,1537,1538],{"class":264}," a",[254,1540,310],{"class":260},[254,1542,456],{"class":313},[254,1544,1430],{"class":264},[254,1546,1547,1549,1551,1554,1556,1558,1560],{"class":256,"line":175},[254,1548,1509],{"class":264},[254,1550,1308],{"class":260},[254,1552,1553],{"class":369},"\"请给整型变量a赋值\"",[254,1555,1308],{"class":260},[254,1557,42],{"class":264},[254,1559,1308],{"class":260},[254,1561,1331],{"class":264},[254,1563,1564,1567,1570],{"class":256,"line":1319},[254,1565,1566],{"class":264},"cin ",[254,1568,1569],{"class":260},">>",[254,1571,1572],{"class":264}," a;\n",[254,1574,1575,1577,1579,1582,1585,1587,1589],{"class":256,"line":1334},[254,1576,1305],{"class":264},[254,1578,1308],{"class":260},[254,1580,1581],{"class":369}," \"整型变量a=\"",[254,1583,1584],{"class":260}," \u003C\u003C",[254,1586,42],{"class":264},[254,1588,1308],{"class":260},[254,1590,1331],{"class":264},[34,1592,1594],{"id":1593},"_15运算符","1.5运算符",[225,1596,1598],{"id":1597},"_151算术运算符","1.5.1算术运算符",[14,1600,1601,1605],{},[1602,1603],"img",{"alt":174,"src":1604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[21,1607,1608,1611,1614],{},[24,1609,1610],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[24,1612,1613],{},"两个小数不可以做取模运算",[24,1615,1616],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[225,1618,1620],{"id":1619},"_152赋值运算符","1.5.2赋值运算符",[14,1622,1623],{},[1602,1624],{"alt":174,"src":1625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[225,1627,1629],{"id":1628},"_153比较运算符","1.5.3比较运算符",[14,1631,1632],{},[1602,1633],{"alt":174,"src":1634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[225,1636,1638],{"id":1637},"_154逻辑运算符","1.5.4逻辑运算符",[14,1640,1641],{},[1602,1642],{"alt":174,"src":1643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[34,1645,1647],{"id":1646},"_16程序流程结构","1.6程序流程结构",[225,1649,1651],{"id":1650},"_161选择结构","1.6.1选择结构",[21,1653,1654],{},[24,1655,1656],{},"if语句\n单行、多行、多条件if语句",[245,1658,1660],{"className":247,"code":1659,"language":249,"meta":174,"style":174},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\nif(score>600)\n{\n    cout\u003C\u003C'这是单行if语句'\u003C\u003Cendl;\n}\n\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\ncin >> score\nif(score\u003C=600)\n{\n    cout>>\"小于等于600\"\u003C\u003Cendl;\n}\nelse\n{\n    cout>>\"大于600\">>endl;\n}\n\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\nif (0\u003Cnum\u003C100)\n{\n    cout\u003C\u003C\"小于100\"\u003C\u003Cendl;\n}\nelse if (nmu>=100&&num\u003C200)\n{\n    cout\u003C\u003C\"不小于100且小于200\"\u003C\u003Cendl; \u002F\u002F可以无限else if,python中是elif：\n}\nelse\n{\n    cout\u003C\u003C\"不小于200\"\u003C\u003Cendl;\n}\n\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[251,1661,1662,1667,1682,1687,1701,1706,1711,1720,1733,1737,1750,1755,1761,1766,1780,1785,1791,1812,1817,1831,1836,1865,1870,1887,1892,1897,1902,1916,1921],{"__ignoreMap":174},[254,1663,1664],{"class":256,"line":257},[254,1665,1666],{"class":323},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[254,1668,1669,1672,1675,1677,1680],{"class":256,"line":175},[254,1670,1671],{"class":260},"if",[254,1673,1674],{"class":264},"(score",[254,1676,1224],{"class":260},[254,1678,1679],{"class":313},"600",[254,1681,271],{"class":264},[254,1683,1684],{"class":256,"line":1319},[254,1685,1686],{"class":264},"{\n",[254,1688,1689,1692,1694,1697,1699],{"class":256,"line":1334},[254,1690,1691],{"class":264},"    cout",[254,1693,1308],{"class":260},[254,1695,1696],{"class":369},"'这是单行if语句'",[254,1698,1308],{"class":260},[254,1700,1331],{"class":264},[254,1702,1703],{"class":256,"line":1340},[254,1704,1705],{"class":264},"}\n",[254,1707,1708],{"class":256,"line":1354},[254,1709,1710],{"class":323},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[254,1712,1713,1715,1717],{"class":256,"line":1360},[254,1714,1566],{"class":264},[254,1716,1569],{"class":260},[254,1718,1719],{"class":264}," score\n",[254,1721,1722,1724,1726,1729,1731],{"class":256,"line":1451},[254,1723,1671],{"class":260},[254,1725,1674],{"class":264},[254,1727,1728],{"class":260},"\u003C=",[254,1730,1679],{"class":313},[254,1732,271],{"class":264},[254,1734,1735],{"class":256,"line":1457},[254,1736,1686],{"class":264},[254,1738,1739,1741,1743,1746,1748],{"class":256,"line":1469},[254,1740,1691],{"class":264},[254,1742,1569],{"class":260},[254,1744,1745],{"class":369},"\"小于等于600\"",[254,1747,1308],{"class":260},[254,1749,1331],{"class":264},[254,1751,1753],{"class":256,"line":1752},11,[254,1754,1705],{"class":264},[254,1756,1758],{"class":256,"line":1757},12,[254,1759,1760],{"class":260},"else\n",[254,1762,1764],{"class":256,"line":1763},13,[254,1765,1686],{"class":264},[254,1767,1769,1771,1773,1776,1778],{"class":256,"line":1768},14,[254,1770,1691],{"class":264},[254,1772,1569],{"class":260},[254,1774,1775],{"class":369},"\"大于600\"",[254,1777,1569],{"class":260},[254,1779,1331],{"class":264},[254,1781,1783],{"class":256,"line":1782},15,[254,1784,1705],{"class":264},[254,1786,1788],{"class":256,"line":1787},16,[254,1789,1790],{"class":323},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[254,1792,1794,1796,1799,1801,1803,1806,1808,1810],{"class":256,"line":1793},17,[254,1795,1671],{"class":260},[254,1797,1798],{"class":264}," (",[254,1800,456],{"class":313},[254,1802,1174],{"class":260},[254,1804,1805],{"class":264},"num",[254,1807,1174],{"class":260},[254,1809,575],{"class":313},[254,1811,271],{"class":264},[254,1813,1815],{"class":256,"line":1814},18,[254,1816,1686],{"class":264},[254,1818,1820,1822,1824,1827,1829],{"class":256,"line":1819},19,[254,1821,1691],{"class":264},[254,1823,1308],{"class":260},[254,1825,1826],{"class":369},"\"小于100\"",[254,1828,1308],{"class":260},[254,1830,1331],{"class":264},[254,1832,1834],{"class":256,"line":1833},20,[254,1835,1705],{"class":264},[254,1837,1839,1842,1845,1848,1851,1853,1856,1858,1860,1863],{"class":256,"line":1838},21,[254,1840,1841],{"class":260},"else",[254,1843,1844],{"class":260}," if",[254,1846,1847],{"class":264}," (nmu",[254,1849,1850],{"class":260},">=",[254,1852,575],{"class":313},[254,1854,1855],{"class":260},"&&",[254,1857,1805],{"class":264},[254,1859,1174],{"class":260},[254,1861,1862],{"class":313},"200",[254,1864,271],{"class":264},[254,1866,1868],{"class":256,"line":1867},22,[254,1869,1686],{"class":264},[254,1871,1873,1875,1877,1880,1882,1884],{"class":256,"line":1872},23,[254,1874,1691],{"class":264},[254,1876,1308],{"class":260},[254,1878,1879],{"class":369},"\"不小于100且小于200\"",[254,1881,1308],{"class":260},[254,1883,1378],{"class":264},[254,1885,1886],{"class":323}," \u002F\u002F可以无限else if,python中是elif：\n",[254,1888,1890],{"class":256,"line":1889},24,[254,1891,1705],{"class":264},[254,1893,1895],{"class":256,"line":1894},25,[254,1896,1760],{"class":260},[254,1898,1900],{"class":256,"line":1899},26,[254,1901,1686],{"class":264},[254,1903,1905,1907,1909,1912,1914],{"class":256,"line":1904},27,[254,1906,1691],{"class":264},[254,1908,1308],{"class":260},[254,1910,1911],{"class":369},"\"不小于200\"",[254,1913,1308],{"class":260},[254,1915,1331],{"class":264},[254,1917,1919],{"class":256,"line":1918},28,[254,1920,1705],{"class":264},[254,1922,1924],{"class":256,"line":1923},29,[254,1925,1926],{"class":323},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[21,1928,1929],{"start":175},[24,1930,1931],{},"三目运算符",[245,1933,1935],{"className":247,"code":1934,"language":249,"meta":174,"style":174},"\u002F\u002F创建三个变量a,b,c\n\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\nint a=20,b=10,c=0;\nc=(a>b?a:b)\ncout\u003C\u003C\"c=\"\u003C\u003Cc\u003C\u003Cendl;\n\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n(a>b?a:b)=100;\ncout\u003C\u003Ca\u003C\u003Cendl; \u002F\u002F100  a是大于b的，将100赋值给了a\ncout\u003C\u003Cb\u003C\u003Cendl; \u002F\u002F10   a>b,b还是原值\n",[251,1936,1937,1942,1947,1973,1995,2012,2017,2040,2055],{"__ignoreMap":174},[254,1938,1939],{"class":256,"line":257},[254,1940,1941],{"class":323},"\u002F\u002F创建三个变量a,b,c\n",[254,1943,1944],{"class":256,"line":175},[254,1945,1946],{"class":323},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[254,1948,1949,1951,1953,1955,1957,1960,1962,1964,1967,1969,1971],{"class":256,"line":1319},[254,1950,268],{"class":260},[254,1952,1538],{"class":264},[254,1954,310],{"class":260},[254,1956,964],{"class":313},[254,1958,1959],{"class":264},",b",[254,1961,310],{"class":260},[254,1963,710],{"class":313},[254,1965,1966],{"class":264},",c",[254,1968,310],{"class":260},[254,1970,456],{"class":313},[254,1972,1430],{"class":264},[254,1974,1975,1977,1979,1982,1984,1986,1988,1990,1992],{"class":256,"line":1334},[254,1976,552],{"class":264},[254,1978,310],{"class":260},[254,1980,1981],{"class":264},"(a",[254,1983,1224],{"class":260},[254,1985,527],{"class":264},[254,1987,1250],{"class":260},[254,1989,42],{"class":264},[254,1991,1123],{"class":260},[254,1993,1994],{"class":264},"b)\n",[254,1996,1997,1999,2001,2004,2006,2008,2010],{"class":256,"line":1340},[254,1998,1509],{"class":264},[254,2000,1308],{"class":260},[254,2002,2003],{"class":369},"\"c=\"",[254,2005,1308],{"class":260},[254,2007,552],{"class":264},[254,2009,1308],{"class":260},[254,2011,1331],{"class":264},[254,2013,2014],{"class":256,"line":1354},[254,2015,2016],{"class":323},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[254,2018,2019,2021,2023,2025,2027,2029,2031,2034,2036,2038],{"class":256,"line":1360},[254,2020,1981],{"class":264},[254,2022,1224],{"class":260},[254,2024,527],{"class":264},[254,2026,1250],{"class":260},[254,2028,42],{"class":264},[254,2030,1123],{"class":260},[254,2032,2033],{"class":264},"b)",[254,2035,310],{"class":260},[254,2037,575],{"class":313},[254,2039,1430],{"class":264},[254,2041,2042,2044,2046,2048,2050,2052],{"class":256,"line":1451},[254,2043,1509],{"class":264},[254,2045,1308],{"class":260},[254,2047,42],{"class":264},[254,2049,1308],{"class":260},[254,2051,1378],{"class":264},[254,2053,2054],{"class":323}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[254,2056,2057,2059,2061,2063,2065,2067],{"class":256,"line":1457},[254,2058,1509],{"class":264},[254,2060,1308],{"class":260},[254,2062,527],{"class":264},[254,2064,1308],{"class":260},[254,2066,1378],{"class":264},[254,2068,2069],{"class":323}," \u002F\u002F10   a>b,b还是原值\n",[21,2071,2072],{"start":1319},[24,2073,2074],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[245,2076,2078],{"className":247,"code":2077,"language":249,"meta":174,"style":174},"\u002F\u002F案例-电影打分\n#include\u003Ciostream>\nusing namespace std;\nint main()\n{\n    int score=0;\n    cout\u003C\u003C\"电影打分：\"\u003C\u003Cendl;\n    cin>>score;\n    switch(score)\n    {\n        case 10:cout\u003C\u003C\"经典\"\u003C\u003Cendl;break;\n        case 9:cout\u003C\u003C\"经典\"\u003C\u003Cendl;break;\n        case 8:cout\u003C\u003C\"非常好\"\u003C\u003Cendl;break;\n        case 7:cout\u003C\u003C\"非常好\"\u003C\u003Cendl;break;\n        case 6:cout\u003C\u003C\"一般\"\u003C\u003Cendl;break;\n        case 5:cout\u003C\u003C\"一般\"\u003C\u003Cendl;break;\n        default:cout\u003C\u003C\"烂片\"\u003C\u003Cendl;break;\n    }\n}\n",[251,2079,2080,2085,2093,2107,2117,2121,2135,2148,2158,2166,2171,2196,2217,2239,2260,2282,2303,2323,2328],{"__ignoreMap":174},[254,2081,2082],{"class":256,"line":257},[254,2083,2084],{"class":323},"\u002F\u002F案例-电影打分\n",[254,2086,2087,2090],{"class":256,"line":175},[254,2088,2089],{"class":260},"#include",[254,2091,2092],{"class":369},"\u003Ciostream>\n",[254,2094,2095,2098,2101,2105],{"class":256,"line":1319},[254,2096,2097],{"class":260},"using",[254,2099,2100],{"class":260}," namespace",[254,2102,2104],{"class":2103},"sScJk"," std",[254,2106,1430],{"class":264},[254,2108,2109,2111,2114],{"class":256,"line":1334},[254,2110,268],{"class":260},[254,2112,2113],{"class":2103}," main",[254,2115,2116],{"class":264},"()\n",[254,2118,2119],{"class":256,"line":1340},[254,2120,1686],{"class":264},[254,2122,2123,2126,2129,2131,2133],{"class":256,"line":1354},[254,2124,2125],{"class":260},"    int",[254,2127,2128],{"class":264}," score",[254,2130,310],{"class":260},[254,2132,456],{"class":313},[254,2134,1430],{"class":264},[254,2136,2137,2139,2141,2144,2146],{"class":256,"line":1360},[254,2138,1691],{"class":264},[254,2140,1308],{"class":260},[254,2142,2143],{"class":369},"\"电影打分：\"",[254,2145,1308],{"class":260},[254,2147,1331],{"class":264},[254,2149,2150,2153,2155],{"class":256,"line":1451},[254,2151,2152],{"class":264},"    cin",[254,2154,1569],{"class":260},[254,2156,2157],{"class":264},"score;\n",[254,2159,2160,2163],{"class":256,"line":1457},[254,2161,2162],{"class":260},"    switch",[254,2164,2165],{"class":264},"(score)\n",[254,2167,2168],{"class":256,"line":1469},[254,2169,2170],{"class":264},"    {\n",[254,2172,2173,2176,2179,2182,2184,2187,2189,2191,2194],{"class":256,"line":1752},[254,2174,2175],{"class":260},"        case",[254,2177,2178],{"class":313}," 10",[254,2180,2181],{"class":264},":cout",[254,2183,1308],{"class":260},[254,2185,2186],{"class":369},"\"经典\"",[254,2188,1308],{"class":260},[254,2190,1378],{"class":264},[254,2192,2193],{"class":260},"break",[254,2195,1430],{"class":264},[254,2197,2198,2200,2203,2205,2207,2209,2211,2213,2215],{"class":256,"line":1757},[254,2199,2175],{"class":260},[254,2201,2202],{"class":313}," 9",[254,2204,2181],{"class":264},[254,2206,1308],{"class":260},[254,2208,2186],{"class":369},[254,2210,1308],{"class":260},[254,2212,1378],{"class":264},[254,2214,2193],{"class":260},[254,2216,1430],{"class":264},[254,2218,2219,2221,2224,2226,2228,2231,2233,2235,2237],{"class":256,"line":1763},[254,2220,2175],{"class":260},[254,2222,2223],{"class":313}," 8",[254,2225,2181],{"class":264},[254,2227,1308],{"class":260},[254,2229,2230],{"class":369},"\"非常好\"",[254,2232,1308],{"class":260},[254,2234,1378],{"class":264},[254,2236,2193],{"class":260},[254,2238,1430],{"class":264},[254,2240,2241,2243,2246,2248,2250,2252,2254,2256,2258],{"class":256,"line":1768},[254,2242,2175],{"class":260},[254,2244,2245],{"class":313}," 7",[254,2247,2181],{"class":264},[254,2249,1308],{"class":260},[254,2251,2230],{"class":369},[254,2253,1308],{"class":260},[254,2255,1378],{"class":264},[254,2257,2193],{"class":260},[254,2259,1430],{"class":264},[254,2261,2262,2264,2267,2269,2271,2274,2276,2278,2280],{"class":256,"line":1782},[254,2263,2175],{"class":260},[254,2265,2266],{"class":313}," 6",[254,2268,2181],{"class":264},[254,2270,1308],{"class":260},[254,2272,2273],{"class":369},"\"一般\"",[254,2275,1308],{"class":260},[254,2277,1378],{"class":264},[254,2279,2193],{"class":260},[254,2281,1430],{"class":264},[254,2283,2284,2286,2289,2291,2293,2295,2297,2299,2301],{"class":256,"line":1787},[254,2285,2175],{"class":260},[254,2287,2288],{"class":313}," 5",[254,2290,2181],{"class":264},[254,2292,1308],{"class":260},[254,2294,2273],{"class":369},[254,2296,1308],{"class":260},[254,2298,1378],{"class":264},[254,2300,2193],{"class":260},[254,2302,1430],{"class":264},[254,2304,2305,2308,2310,2312,2315,2317,2319,2321],{"class":256,"line":1793},[254,2306,2307],{"class":260},"        default",[254,2309,2181],{"class":264},[254,2311,1308],{"class":260},[254,2313,2314],{"class":369},"\"烂片\"",[254,2316,1308],{"class":260},[254,2318,1378],{"class":264},[254,2320,2193],{"class":260},[254,2322,1430],{"class":264},[254,2324,2325],{"class":256,"line":1814},[254,2326,2327],{"class":264},"    }\n",[254,2329,2330],{"class":256,"line":1819},[254,2331,1705],{"class":264},[14,2333,2334],{},"if和switch区别：",[1271,2336,2337,2340],{},[24,2338,2339],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[24,2341,2342],{},"switch优点：结构清晰，执行效率高",[225,2344,2346],{"id":2345},"_162循环结构","1.6.2循环结构",[21,2348,2349],{},[24,2350,2351],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[245,2353,2355],{"className":247,"code":2354,"language":249,"meta":174,"style":174},"\u002F\u002F打印0-9数字\nint main()\n{\n    int num=0;\n    while(num\u003C10)\n    {\n       std::cout\u003C\u003Cnum\u003C\u003Cstd::endl;\n        num++;\n    }\n    system(\"pause\")\n}\n",[251,2356,2357,2362,2370,2374,2387,2401,2405,2425,2435,2439,2451],{"__ignoreMap":174},[254,2358,2359],{"class":256,"line":257},[254,2360,2361],{"class":323},"\u002F\u002F打印0-9数字\n",[254,2363,2364,2366,2368],{"class":256,"line":175},[254,2365,268],{"class":260},[254,2367,2113],{"class":2103},[254,2369,2116],{"class":264},[254,2371,2372],{"class":256,"line":1319},[254,2373,1686],{"class":264},[254,2375,2376,2378,2381,2383,2385],{"class":256,"line":1334},[254,2377,2125],{"class":260},[254,2379,2380],{"class":264}," num",[254,2382,310],{"class":260},[254,2384,456],{"class":313},[254,2386,1430],{"class":264},[254,2388,2389,2392,2395,2397,2399],{"class":256,"line":1340},[254,2390,2391],{"class":260},"    while",[254,2393,2394],{"class":264},"(num",[254,2396,1174],{"class":260},[254,2398,710],{"class":313},[254,2400,271],{"class":264},[254,2402,2403],{"class":256,"line":1354},[254,2404,2170],{"class":264},[254,2406,2407,2410,2413,2415,2417,2419,2422],{"class":256,"line":1360},[254,2408,2409],{"class":2103},"       std",[254,2411,2412],{"class":264},"::cout",[254,2414,1308],{"class":260},[254,2416,1805],{"class":264},[254,2418,1308],{"class":260},[254,2420,2421],{"class":2103},"std",[254,2423,2424],{"class":264},"::endl;\n",[254,2426,2427,2430,2433],{"class":256,"line":1451},[254,2428,2429],{"class":264},"        num",[254,2431,2432],{"class":260},"++",[254,2434,1430],{"class":264},[254,2436,2437],{"class":256,"line":1457},[254,2438,2327],{"class":264},[254,2440,2441,2444,2446,2449],{"class":256,"line":1469},[254,2442,2443],{"class":2103},"    system",[254,2445,265],{"class":264},[254,2447,2448],{"class":369},"\"pause\"",[254,2450,271],{"class":264},[254,2452,2453],{"class":256,"line":1752},[254,2454,1705],{"class":264},[14,2456,2457],{},"注意：写好循环条件，避免死循环情况",[245,2459,2461],{"className":247,"code":2460,"language":249,"meta":174,"style":174},"\u002F\u002F循环结构-猜数字\n#include \u003Ciostream>\n#include \u003Cctime>\nusing namespace std;\nint main()\n{\n    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n    srand((unsigned int)time(NULL));\n\n    \u002F\u002F1.系统生成随机数\n    \u002F\u002Frand()%100 \u002F\u002F生成0-99的随机数\n    int num=rand()%100+1; \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n    \u002F\u002F2.玩家猜测\n    int val=0;\n    while (1)\n    {\n        cin>>val;\n        \u002F\u002F3.判断玩家猜测\n        if(val\u003Cnum) \n        {\n            cout\u003C\u003C\"猜小了！\"\u003C\u003Cendl;\n        }\n        else if (val>num)\n        {\n            cout\u003C\u003C\"猜大了！\"\u003C\u003Cendl;\n        }\n        else\n        {\n            cout\u003C\u003C\"猜对了！\"\u003C\u003Cendl;\n            break;\n        }\n        \u002F\u002F猜对 退出游戏\n        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n    }\n}\n",[251,2462,2463,2468,2475,2482,2492,2500,2504,2509,2536,2541,2546,2554,2581,2586,2591,2604,2614,2618,2628,2633,2646,2651,2665,2670,2685,2689,2702,2706,2711,2715,2729,2737,2742,2748,2754,2759],{"__ignoreMap":174},[254,2464,2465],{"class":256,"line":257},[254,2466,2467],{"class":323},"\u002F\u002F循环结构-猜数字\n",[254,2469,2470,2472],{"class":256,"line":175},[254,2471,2089],{"class":260},[254,2473,2474],{"class":369}," \u003Ciostream>\n",[254,2476,2477,2479],{"class":256,"line":1319},[254,2478,2089],{"class":260},[254,2480,2481],{"class":369}," \u003Cctime>\n",[254,2483,2484,2486,2488,2490],{"class":256,"line":1334},[254,2485,2097],{"class":260},[254,2487,2100],{"class":260},[254,2489,2104],{"class":2103},[254,2491,1430],{"class":264},[254,2493,2494,2496,2498],{"class":256,"line":1340},[254,2495,268],{"class":260},[254,2497,2113],{"class":2103},[254,2499,2116],{"class":264},[254,2501,2502],{"class":256,"line":1354},[254,2503,1686],{"class":264},[254,2505,2506],{"class":256,"line":1360},[254,2507,2508],{"class":323},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[254,2510,2511,2514,2517,2520,2523,2525,2528,2530,2533],{"class":256,"line":1451},[254,2512,2513],{"class":2103},"    srand",[254,2515,2516],{"class":264},"((",[254,2518,2519],{"class":260},"unsigned",[254,2521,2522],{"class":260}," int",[254,2524,693],{"class":264},[254,2526,2527],{"class":2103},"time",[254,2529,265],{"class":264},[254,2531,2532],{"class":313},"NULL",[254,2534,2535],{"class":264},"));\n",[254,2537,2538],{"class":256,"line":1457},[254,2539,2540],{"emptyLinePlaceholder":184},"\n",[254,2542,2543],{"class":256,"line":1469},[254,2544,2545],{"class":323},"    \u002F\u002F1.系统生成随机数\n",[254,2547,2548,2551],{"class":256,"line":1752},[254,2549,2550],{"class":323},"    \u002F\u002Frand()%100",[254,2552,2553],{"class":323}," \u002F\u002F生成0-99的随机数\n",[254,2555,2556,2558,2560,2562,2565,2568,2570,2572,2574,2576,2578],{"class":256,"line":1757},[254,2557,2125],{"class":260},[254,2559,2380],{"class":264},[254,2561,310],{"class":260},[254,2563,2564],{"class":2103},"rand",[254,2566,2567],{"class":264},"()",[254,2569,592],{"class":260},[254,2571,575],{"class":313},[254,2573,745],{"class":260},[254,2575,482],{"class":313},[254,2577,320],{"class":264},[254,2579,2580],{"class":323}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[254,2582,2583],{"class":256,"line":1763},[254,2584,2585],{"class":323},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[254,2587,2588],{"class":256,"line":1768},[254,2589,2590],{"class":323},"    \u002F\u002F2.玩家猜测\n",[254,2592,2593,2595,2598,2600,2602],{"class":256,"line":1782},[254,2594,2125],{"class":260},[254,2596,2597],{"class":264}," val",[254,2599,310],{"class":260},[254,2601,456],{"class":313},[254,2603,1430],{"class":264},[254,2605,2606,2608,2610,2612],{"class":256,"line":1787},[254,2607,2391],{"class":260},[254,2609,1798],{"class":264},[254,2611,482],{"class":313},[254,2613,271],{"class":264},[254,2615,2616],{"class":256,"line":1793},[254,2617,2170],{"class":264},[254,2619,2620,2623,2625],{"class":256,"line":1814},[254,2621,2622],{"class":264},"        cin",[254,2624,1569],{"class":260},[254,2626,2627],{"class":264},"val;\n",[254,2629,2630],{"class":256,"line":1819},[254,2631,2632],{"class":323},"        \u002F\u002F3.判断玩家猜测\n",[254,2634,2635,2638,2641,2643],{"class":256,"line":1833},[254,2636,2637],{"class":260},"        if",[254,2639,2640],{"class":264},"(val",[254,2642,1174],{"class":260},[254,2644,2645],{"class":264},"num) \n",[254,2647,2648],{"class":256,"line":1838},[254,2649,2650],{"class":264},"        {\n",[254,2652,2653,2656,2658,2661,2663],{"class":256,"line":1867},[254,2654,2655],{"class":264},"            cout",[254,2657,1308],{"class":260},[254,2659,2660],{"class":369},"\"猜小了！\"",[254,2662,1308],{"class":260},[254,2664,1331],{"class":264},[254,2666,2667],{"class":256,"line":1872},[254,2668,2669],{"class":264},"        }\n",[254,2671,2672,2675,2677,2680,2682],{"class":256,"line":1889},[254,2673,2674],{"class":260},"        else",[254,2676,1844],{"class":260},[254,2678,2679],{"class":264}," (val",[254,2681,1224],{"class":260},[254,2683,2684],{"class":264},"num)\n",[254,2686,2687],{"class":256,"line":1894},[254,2688,2650],{"class":264},[254,2690,2691,2693,2695,2698,2700],{"class":256,"line":1899},[254,2692,2655],{"class":264},[254,2694,1308],{"class":260},[254,2696,2697],{"class":369},"\"猜大了！\"",[254,2699,1308],{"class":260},[254,2701,1331],{"class":264},[254,2703,2704],{"class":256,"line":1904},[254,2705,2669],{"class":264},[254,2707,2708],{"class":256,"line":1918},[254,2709,2710],{"class":260},"        else\n",[254,2712,2713],{"class":256,"line":1923},[254,2714,2650],{"class":264},[254,2716,2718,2720,2722,2725,2727],{"class":256,"line":2717},30,[254,2719,2655],{"class":264},[254,2721,1308],{"class":260},[254,2723,2724],{"class":369},"\"猜对了！\"",[254,2726,1308],{"class":260},[254,2728,1331],{"class":264},[254,2730,2732,2735],{"class":256,"line":2731},31,[254,2733,2734],{"class":260},"            break",[254,2736,1430],{"class":264},[254,2738,2740],{"class":256,"line":2739},32,[254,2741,2669],{"class":264},[254,2743,2745],{"class":256,"line":2744},33,[254,2746,2747],{"class":323},"        \u002F\u002F猜对 退出游戏\n",[254,2749,2751],{"class":256,"line":2750},34,[254,2752,2753],{"class":323},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[254,2755,2757],{"class":256,"line":2756},35,[254,2758,2327],{"class":264},[254,2760,2762],{"class":256,"line":2761},36,[254,2763,1705],{"class":264},[21,2765,2766],{"start":175},[24,2767,2768,2769,2772],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[414,2770,2771],{},"do...while会先执行一次循环语句","，在判断循环语句",[245,2774,2776],{"className":247,"code":2775,"language":249,"meta":174,"style":174},"\u002F\u002F在屏幕中输出0-9这10个数字\nint main()\n{\n    int num=0;\n    do \n    {\n        std::cout\u003C\u003Cnum\u003C\u003Cstd::endl;\n        num++\n    }\n    while(num\u003C10);\n    system(\"pause\");\n}\n",[251,2777,2778,2783,2791,2795,2807,2815,2819,2836,2843,2847,2860,2870],{"__ignoreMap":174},[254,2779,2780],{"class":256,"line":257},[254,2781,2782],{"class":323},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[254,2784,2785,2787,2789],{"class":256,"line":175},[254,2786,268],{"class":260},[254,2788,2113],{"class":2103},[254,2790,2116],{"class":264},[254,2792,2793],{"class":256,"line":1319},[254,2794,1686],{"class":264},[254,2796,2797,2799,2801,2803,2805],{"class":256,"line":1334},[254,2798,2125],{"class":260},[254,2800,2380],{"class":264},[254,2802,310],{"class":260},[254,2804,456],{"class":313},[254,2806,1430],{"class":264},[254,2808,2809,2812],{"class":256,"line":1340},[254,2810,2811],{"class":260},"    do",[254,2813,2814],{"class":264}," \n",[254,2816,2817],{"class":256,"line":1354},[254,2818,2170],{"class":264},[254,2820,2821,2824,2826,2828,2830,2832,2834],{"class":256,"line":1360},[254,2822,2823],{"class":2103},"        std",[254,2825,2412],{"class":264},[254,2827,1308],{"class":260},[254,2829,1805],{"class":264},[254,2831,1308],{"class":260},[254,2833,2421],{"class":2103},[254,2835,2424],{"class":264},[254,2837,2838,2840],{"class":256,"line":1451},[254,2839,2429],{"class":264},[254,2841,2842],{"class":260},"++\n",[254,2844,2845],{"class":256,"line":1457},[254,2846,2327],{"class":264},[254,2848,2849,2851,2853,2855,2857],{"class":256,"line":1469},[254,2850,2391],{"class":260},[254,2852,2394],{"class":264},[254,2854,1174],{"class":260},[254,2856,710],{"class":313},[254,2858,2859],{"class":264},");\n",[254,2861,2862,2864,2866,2868],{"class":256,"line":1752},[254,2863,2443],{"class":2103},[254,2865,265],{"class":264},[254,2867,2448],{"class":369},[254,2869,2859],{"class":264},[254,2871,2872],{"class":256,"line":1757},[254,2873,1705],{"class":264},[14,2875,2876],{},"案例-水仙花数",[14,2878,2879],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[14,2881,2882],{},"例如：1^3+5^3+3^3=153",[14,2884,2885],{},"请用do...while语句，求出所有3位数的水仙花数",[245,2887,2889],{"className":247,"code":2888,"language":249,"meta":174,"style":174},"#include \u003Ciostream>\nusing namespace std;\nint main()\n{\n    \u002F\u002F1.先打印所有三位数字\n    int num=100;\n    do \n    {\n        \u002F\u002F2.从所有三位数字中找到水仙花数\n        int a=0; \u002F\u002F个位\n        int b=0; \u002F\u002F十位\n        int c=0; \u002F\u002F百位\n        a=num%10;\n        b=num\u002F10%10;\n        c=num\u002F100;\n        if(a*a*a+b*b*b+c*c*c == num) \u002F\u002F如果是水仙花数，才打印\n        {\n            cout\u003C\u003Cnum\u003C\u003Cendl;\n        }\n        num++;\n    }\n    while (num \u003C 1000);\n}\n",[251,2890,2891,2897,2907,2915,2919,2924,2936,2942,2946,2951,2967,2983,2999,3014,3033,3048,3096,3100,3112,3116,3124,3128,3142],{"__ignoreMap":174},[254,2892,2893,2895],{"class":256,"line":257},[254,2894,2089],{"class":260},[254,2896,2474],{"class":369},[254,2898,2899,2901,2903,2905],{"class":256,"line":175},[254,2900,2097],{"class":260},[254,2902,2100],{"class":260},[254,2904,2104],{"class":2103},[254,2906,1430],{"class":264},[254,2908,2909,2911,2913],{"class":256,"line":1319},[254,2910,268],{"class":260},[254,2912,2113],{"class":2103},[254,2914,2116],{"class":264},[254,2916,2917],{"class":256,"line":1334},[254,2918,1686],{"class":264},[254,2920,2921],{"class":256,"line":1340},[254,2922,2923],{"class":323},"    \u002F\u002F1.先打印所有三位数字\n",[254,2925,2926,2928,2930,2932,2934],{"class":256,"line":1354},[254,2927,2125],{"class":260},[254,2929,2380],{"class":264},[254,2931,310],{"class":260},[254,2933,575],{"class":313},[254,2935,1430],{"class":264},[254,2937,2938,2940],{"class":256,"line":1360},[254,2939,2811],{"class":260},[254,2941,2814],{"class":264},[254,2943,2944],{"class":256,"line":1451},[254,2945,2170],{"class":264},[254,2947,2948],{"class":256,"line":1457},[254,2949,2950],{"class":323},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[254,2952,2953,2956,2958,2960,2962,2964],{"class":256,"line":1469},[254,2954,2955],{"class":260},"        int",[254,2957,1538],{"class":264},[254,2959,310],{"class":260},[254,2961,456],{"class":313},[254,2963,320],{"class":264},[254,2965,2966],{"class":323}," \u002F\u002F个位\n",[254,2968,2969,2971,2974,2976,2978,2980],{"class":256,"line":1752},[254,2970,2955],{"class":260},[254,2972,2973],{"class":264}," b",[254,2975,310],{"class":260},[254,2977,456],{"class":313},[254,2979,320],{"class":264},[254,2981,2982],{"class":323}," \u002F\u002F十位\n",[254,2984,2985,2987,2990,2992,2994,2996],{"class":256,"line":1757},[254,2986,2955],{"class":260},[254,2988,2989],{"class":264}," c",[254,2991,310],{"class":260},[254,2993,456],{"class":313},[254,2995,320],{"class":264},[254,2997,2998],{"class":323}," \u002F\u002F百位\n",[254,3000,3001,3004,3006,3008,3010,3012],{"class":256,"line":1763},[254,3002,3003],{"class":264},"        a",[254,3005,310],{"class":260},[254,3007,1805],{"class":264},[254,3009,592],{"class":260},[254,3011,710],{"class":313},[254,3013,1430],{"class":264},[254,3015,3016,3019,3021,3023,3025,3027,3029,3031],{"class":256,"line":1768},[254,3017,3018],{"class":264},"        b",[254,3020,310],{"class":260},[254,3022,1805],{"class":264},[254,3024,848],{"class":260},[254,3026,710],{"class":313},[254,3028,592],{"class":260},[254,3030,710],{"class":313},[254,3032,1430],{"class":264},[254,3034,3035,3038,3040,3042,3044,3046],{"class":256,"line":1782},[254,3036,3037],{"class":264},"        c",[254,3039,310],{"class":260},[254,3041,1805],{"class":264},[254,3043,848],{"class":260},[254,3045,575],{"class":313},[254,3047,1430],{"class":264},[254,3049,3050,3052,3054,3056,3058,3060,3062,3064,3066,3068,3070,3072,3074,3076,3078,3080,3082,3084,3087,3090,3093],{"class":256,"line":1787},[254,3051,2637],{"class":260},[254,3053,1981],{"class":264},[254,3055,719],{"class":260},[254,3057,42],{"class":264},[254,3059,719],{"class":260},[254,3061,42],{"class":264},[254,3063,745],{"class":260},[254,3065,527],{"class":264},[254,3067,719],{"class":260},[254,3069,527],{"class":264},[254,3071,719],{"class":260},[254,3073,527],{"class":264},[254,3075,745],{"class":260},[254,3077,552],{"class":264},[254,3079,719],{"class":260},[254,3081,552],{"class":264},[254,3083,719],{"class":260},[254,3085,3086],{"class":264},"c ",[254,3088,3089],{"class":260},"==",[254,3091,3092],{"class":264}," num)",[254,3094,3095],{"class":323}," \u002F\u002F如果是水仙花数，才打印\n",[254,3097,3098],{"class":256,"line":1793},[254,3099,2650],{"class":264},[254,3101,3102,3104,3106,3108,3110],{"class":256,"line":1814},[254,3103,2655],{"class":264},[254,3105,1308],{"class":260},[254,3107,1805],{"class":264},[254,3109,1308],{"class":260},[254,3111,1331],{"class":264},[254,3113,3114],{"class":256,"line":1819},[254,3115,2669],{"class":264},[254,3117,3118,3120,3122],{"class":256,"line":1833},[254,3119,2429],{"class":264},[254,3121,2432],{"class":260},[254,3123,1430],{"class":264},[254,3125,3126],{"class":256,"line":1838},[254,3127,2327],{"class":264},[254,3129,3130,3132,3135,3137,3140],{"class":256,"line":1867},[254,3131,2391],{"class":260},[254,3133,3134],{"class":264}," (num ",[254,3136,1174],{"class":260},[254,3138,3139],{"class":313}," 1000",[254,3141,2859],{"class":264},[254,3143,3144],{"class":256,"line":1872},[254,3145,1705],{"class":264},[21,3147,3148],{"start":1319},[24,3149,3150],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[245,3152,3154],{"className":247,"code":3153,"language":249,"meta":174,"style":174},"\u002F\u002F从数字0-9打印\nfor(int i=0;i\u003C10;i++)\n{\n    cout\u003C\u003Ci\u003C\u003Cendl;\n}\n\u002F\u002F上式可以进行拆分\nint i=0\nfor(;;;)\n{\n    if(i>=10)\n    {\n        break;\n    }\n    cout\u003C\u003Ci\u003C\u003Cendl;\n    i++;\n}\n",[251,3155,3156,3161,3190,3194,3206,3210,3215,3226,3233,3237,3251,3255,3262,3266,3278,3287],{"__ignoreMap":174},[254,3157,3158],{"class":256,"line":257},[254,3159,3160],{"class":323},"\u002F\u002F从数字0-9打印\n",[254,3162,3163,3166,3168,3170,3173,3175,3177,3180,3182,3184,3186,3188],{"class":256,"line":175},[254,3164,3165],{"class":260},"for",[254,3167,265],{"class":264},[254,3169,268],{"class":260},[254,3171,3172],{"class":264}," i",[254,3174,310],{"class":260},[254,3176,456],{"class":313},[254,3178,3179],{"class":264},";i",[254,3181,1174],{"class":260},[254,3183,710],{"class":313},[254,3185,3179],{"class":264},[254,3187,2432],{"class":260},[254,3189,271],{"class":264},[254,3191,3192],{"class":256,"line":1319},[254,3193,1686],{"class":264},[254,3195,3196,3198,3200,3202,3204],{"class":256,"line":1334},[254,3197,1691],{"class":264},[254,3199,1308],{"class":260},[254,3201,705],{"class":264},[254,3203,1308],{"class":260},[254,3205,1331],{"class":264},[254,3207,3208],{"class":256,"line":1340},[254,3209,1705],{"class":264},[254,3211,3212],{"class":256,"line":1354},[254,3213,3214],{"class":323},"\u002F\u002F上式可以进行拆分\n",[254,3216,3217,3219,3221,3223],{"class":256,"line":1360},[254,3218,268],{"class":260},[254,3220,3172],{"class":264},[254,3222,310],{"class":260},[254,3224,3225],{"class":313},"0\n",[254,3227,3228,3230],{"class":256,"line":1451},[254,3229,3165],{"class":260},[254,3231,3232],{"class":264},"(;;;)\n",[254,3234,3235],{"class":256,"line":1457},[254,3236,1686],{"class":264},[254,3238,3239,3242,3245,3247,3249],{"class":256,"line":1469},[254,3240,3241],{"class":260},"    if",[254,3243,3244],{"class":264},"(i",[254,3246,1850],{"class":260},[254,3248,710],{"class":313},[254,3250,271],{"class":264},[254,3252,3253],{"class":256,"line":1752},[254,3254,2170],{"class":264},[254,3256,3257,3260],{"class":256,"line":1757},[254,3258,3259],{"class":260},"        break",[254,3261,1430],{"class":264},[254,3263,3264],{"class":256,"line":1763},[254,3265,2327],{"class":264},[254,3267,3268,3270,3272,3274,3276],{"class":256,"line":1768},[254,3269,1691],{"class":264},[254,3271,1308],{"class":260},[254,3273,705],{"class":264},[254,3275,1308],{"class":260},[254,3277,1331],{"class":264},[254,3279,3280,3283,3285],{"class":256,"line":1782},[254,3281,3282],{"class":264},"    i",[254,3284,2432],{"class":260},[254,3286,1430],{"class":264},[254,3288,3289],{"class":256,"line":1787},[254,3290,1705],{"class":264},[14,3292,3293],{},"小练习",[245,3295,3297],{"className":247,"code":3296,"language":249,"meta":174,"style":174},"#include\u003Ciostream>\nusing namespace std;\nint main()\n{\n    \u002F\u002F敲桌子案例\n    \u002F\u002F1.先输出1-100的数字\n    for(int i=1; i\u003C=100; i++)\n    {\n        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n        if(i%7==0 || i%10==7 || i\u002F10==7)\n        {\n            cout\u003C\u003C\"敲桌子\"\u003C\u003Cendl;\n        }\n        else\n        {\n            cout\u003C\u003Ci\u003C\u003Cendl;\n        }\n    }\n}\n",[251,3298,3299,3305,3315,3323,3327,3332,3337,3365,3369,3374,3379,3420,3424,3437,3441,3445,3449,3461,3465,3469],{"__ignoreMap":174},[254,3300,3301,3303],{"class":256,"line":257},[254,3302,2089],{"class":260},[254,3304,2092],{"class":369},[254,3306,3307,3309,3311,3313],{"class":256,"line":175},[254,3308,2097],{"class":260},[254,3310,2100],{"class":260},[254,3312,2104],{"class":2103},[254,3314,1430],{"class":264},[254,3316,3317,3319,3321],{"class":256,"line":1319},[254,3318,268],{"class":260},[254,3320,2113],{"class":2103},[254,3322,2116],{"class":264},[254,3324,3325],{"class":256,"line":1334},[254,3326,1686],{"class":264},[254,3328,3329],{"class":256,"line":1340},[254,3330,3331],{"class":323},"    \u002F\u002F敲桌子案例\n",[254,3333,3334],{"class":256,"line":1354},[254,3335,3336],{"class":323},"    \u002F\u002F1.先输出1-100的数字\n",[254,3338,3339,3342,3344,3346,3348,3350,3352,3355,3357,3359,3361,3363],{"class":256,"line":1360},[254,3340,3341],{"class":260},"    for",[254,3343,265],{"class":264},[254,3345,268],{"class":260},[254,3347,3172],{"class":264},[254,3349,310],{"class":260},[254,3351,482],{"class":313},[254,3353,3354],{"class":264},"; i",[254,3356,1728],{"class":260},[254,3358,575],{"class":313},[254,3360,3354],{"class":264},[254,3362,2432],{"class":260},[254,3364,271],{"class":264},[254,3366,3367],{"class":256,"line":1451},[254,3368,2170],{"class":264},[254,3370,3371],{"class":256,"line":1457},[254,3372,3373],{"class":323},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[254,3375,3376],{"class":256,"line":1469},[254,3377,3378],{"class":323},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[254,3380,3381,3383,3385,3387,3389,3391,3393,3396,3398,3400,3402,3404,3406,3408,3410,3412,3414,3416,3418],{"class":256,"line":1752},[254,3382,2637],{"class":260},[254,3384,3244],{"class":264},[254,3386,592],{"class":260},[254,3388,633],{"class":313},[254,3390,3089],{"class":260},[254,3392,456],{"class":313},[254,3394,3395],{"class":260}," ||",[254,3397,3172],{"class":264},[254,3399,592],{"class":260},[254,3401,710],{"class":313},[254,3403,3089],{"class":260},[254,3405,633],{"class":313},[254,3407,3395],{"class":260},[254,3409,3172],{"class":264},[254,3411,848],{"class":260},[254,3413,710],{"class":313},[254,3415,3089],{"class":260},[254,3417,633],{"class":313},[254,3419,271],{"class":264},[254,3421,3422],{"class":256,"line":1757},[254,3423,2650],{"class":264},[254,3425,3426,3428,3430,3433,3435],{"class":256,"line":1763},[254,3427,2655],{"class":264},[254,3429,1308],{"class":260},[254,3431,3432],{"class":369},"\"敲桌子\"",[254,3434,1308],{"class":260},[254,3436,1331],{"class":264},[254,3438,3439],{"class":256,"line":1768},[254,3440,2669],{"class":264},[254,3442,3443],{"class":256,"line":1782},[254,3444,2710],{"class":260},[254,3446,3447],{"class":256,"line":1787},[254,3448,2650],{"class":264},[254,3450,3451,3453,3455,3457,3459],{"class":256,"line":1793},[254,3452,2655],{"class":264},[254,3454,1308],{"class":260},[254,3456,705],{"class":264},[254,3458,1308],{"class":260},[254,3460,1331],{"class":264},[254,3462,3463],{"class":256,"line":1814},[254,3464,2669],{"class":264},[254,3466,3467],{"class":256,"line":1819},[254,3468,2327],{"class":264},[254,3470,3471],{"class":256,"line":1833},[254,3472,1705],{"class":264},[14,3474,3475],{},"嵌套实现星图",[245,3477,3479],{"className":247,"code":3478,"language":249,"meta":174,"style":174},"#include\u003Ciostream>\nusing namespace std;\nint main()\n{\n    for (int i=0;i\u003C10;i++)\n    {\n        for (int j=0;j\u003C10;j++)\n        {\n            cout\u003C\u003C\"*\";\n        }\n        cout\u003C\u003Cendl;\n    }\n}\n",[251,3480,3481,3487,3497,3505,3509,3535,3539,3568,3572,3583,3587,3596,3600],{"__ignoreMap":174},[254,3482,3483,3485],{"class":256,"line":257},[254,3484,2089],{"class":260},[254,3486,2092],{"class":369},[254,3488,3489,3491,3493,3495],{"class":256,"line":175},[254,3490,2097],{"class":260},[254,3492,2100],{"class":260},[254,3494,2104],{"class":2103},[254,3496,1430],{"class":264},[254,3498,3499,3501,3503],{"class":256,"line":1319},[254,3500,268],{"class":260},[254,3502,2113],{"class":2103},[254,3504,2116],{"class":264},[254,3506,3507],{"class":256,"line":1334},[254,3508,1686],{"class":264},[254,3510,3511,3513,3515,3517,3519,3521,3523,3525,3527,3529,3531,3533],{"class":256,"line":1340},[254,3512,3341],{"class":260},[254,3514,1798],{"class":264},[254,3516,268],{"class":260},[254,3518,3172],{"class":264},[254,3520,310],{"class":260},[254,3522,456],{"class":313},[254,3524,3179],{"class":264},[254,3526,1174],{"class":260},[254,3528,710],{"class":313},[254,3530,3179],{"class":264},[254,3532,2432],{"class":260},[254,3534,271],{"class":264},[254,3536,3537],{"class":256,"line":1354},[254,3538,2170],{"class":264},[254,3540,3541,3544,3546,3548,3551,3553,3555,3558,3560,3562,3564,3566],{"class":256,"line":1360},[254,3542,3543],{"class":260},"        for",[254,3545,1798],{"class":264},[254,3547,268],{"class":260},[254,3549,3550],{"class":264}," j",[254,3552,310],{"class":260},[254,3554,456],{"class":313},[254,3556,3557],{"class":264},";j",[254,3559,1174],{"class":260},[254,3561,710],{"class":313},[254,3563,3557],{"class":264},[254,3565,2432],{"class":260},[254,3567,271],{"class":264},[254,3569,3570],{"class":256,"line":1451},[254,3571,2650],{"class":264},[254,3573,3574,3576,3578,3581],{"class":256,"line":1457},[254,3575,2655],{"class":264},[254,3577,1308],{"class":260},[254,3579,3580],{"class":369},"\"*\"",[254,3582,1430],{"class":264},[254,3584,3585],{"class":256,"line":1469},[254,3586,2669],{"class":264},[254,3588,3589,3592,3594],{"class":256,"line":1752},[254,3590,3591],{"class":264},"        cout",[254,3593,1308],{"class":260},[254,3595,1331],{"class":264},[254,3597,3598],{"class":256,"line":1757},[254,3599,2327],{"class":264},[254,3601,3602],{"class":256,"line":1763},[254,3603,1705],{"class":264},[14,3605,3606],{},"乘法口诀表",[245,3608,3610],{"className":247,"code":3609,"language":249,"meta":174,"style":174},"#include \u003Ciostream>\nusing namespace std;\nint main()\n{\n    for(int i=1;i\u003C10;i++)\n    {\n        for(int j=1;j\u003C=i;j++)\n        {\n            cout\u003C\u003Cj\u003C\u003C\"*\"\u003C\u003Ci\u003C\u003C\"=\"\u003C\u003Ci*j\u003C\u003C'\\t';\n        }\n        cout\u003C\u003Cendl;\n    }\n} \n",[251,3611,3612,3618,3628,3636,3640,3666,3670,3695,3699,3739,3743,3751,3755],{"__ignoreMap":174},[254,3613,3614,3616],{"class":256,"line":257},[254,3615,2089],{"class":260},[254,3617,2474],{"class":369},[254,3619,3620,3622,3624,3626],{"class":256,"line":175},[254,3621,2097],{"class":260},[254,3623,2100],{"class":260},[254,3625,2104],{"class":2103},[254,3627,1430],{"class":264},[254,3629,3630,3632,3634],{"class":256,"line":1319},[254,3631,268],{"class":260},[254,3633,2113],{"class":2103},[254,3635,2116],{"class":264},[254,3637,3638],{"class":256,"line":1334},[254,3639,1686],{"class":264},[254,3641,3642,3644,3646,3648,3650,3652,3654,3656,3658,3660,3662,3664],{"class":256,"line":1340},[254,3643,3341],{"class":260},[254,3645,265],{"class":264},[254,3647,268],{"class":260},[254,3649,3172],{"class":264},[254,3651,310],{"class":260},[254,3653,482],{"class":313},[254,3655,3179],{"class":264},[254,3657,1174],{"class":260},[254,3659,710],{"class":313},[254,3661,3179],{"class":264},[254,3663,2432],{"class":260},[254,3665,271],{"class":264},[254,3667,3668],{"class":256,"line":1354},[254,3669,2170],{"class":264},[254,3671,3672,3674,3676,3678,3680,3682,3684,3686,3688,3691,3693],{"class":256,"line":1360},[254,3673,3543],{"class":260},[254,3675,265],{"class":264},[254,3677,268],{"class":260},[254,3679,3550],{"class":264},[254,3681,310],{"class":260},[254,3683,482],{"class":313},[254,3685,3557],{"class":264},[254,3687,1728],{"class":260},[254,3689,3690],{"class":264},"i;j",[254,3692,2432],{"class":260},[254,3694,271],{"class":264},[254,3696,3697],{"class":256,"line":1451},[254,3698,2650],{"class":264},[254,3700,3701,3703,3705,3707,3709,3711,3713,3715,3717,3720,3722,3724,3726,3728,3730,3733,3735,3737],{"class":256,"line":1457},[254,3702,2655],{"class":264},[254,3704,1308],{"class":260},[254,3706,731],{"class":264},[254,3708,1308],{"class":260},[254,3710,3580],{"class":369},[254,3712,1308],{"class":260},[254,3714,705],{"class":264},[254,3716,1308],{"class":260},[254,3718,3719],{"class":369},"\"=\"",[254,3721,1308],{"class":260},[254,3723,705],{"class":264},[254,3725,719],{"class":260},[254,3727,731],{"class":264},[254,3729,1308],{"class":260},[254,3731,3732],{"class":369},"'",[254,3734,1370],{"class":313},[254,3736,3732],{"class":369},[254,3738,1430],{"class":264},[254,3740,3741],{"class":256,"line":1469},[254,3742,2669],{"class":264},[254,3744,3745,3747,3749],{"class":256,"line":1752},[254,3746,3591],{"class":264},[254,3748,1308],{"class":260},[254,3750,1331],{"class":264},[254,3752,3753],{"class":256,"line":1757},[254,3754,2327],{"class":264},[254,3756,3757],{"class":256,"line":1763},[254,3758,1705],{"class":264},[225,3760,3762],{"id":3761},"_163跳出语句","1.6.3跳出语句",[21,3764,3765],{},[24,3766,3767],{},"break语句\n作用：用于跳出选择结构或者循环结构",[14,3769,3770],{},"break使用时机：",[1271,3772,3773,3776,3779],{},[24,3774,3775],{},"出现在switch条件语句中，作用是终止case并跳出switch",[24,3777,3778],{},"出现在循环结构中，作用是跳出当前的循环结构",[24,3780,3781],{},"出现在嵌套循环中，跳出最近的内层循环语句",[21,3783,3784,3787],{"start":175},[24,3785,3786],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[24,3788,3789],{},"goto语句\n语法：goto 标记;",[14,3791,3792],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[245,3794,3796],{"className":247,"code":3795,"language":249,"meta":174,"style":174},"int main()\n{\n    cout\u003C\u003C\"1\"\u003C\u003Cendl;\n    goto FLAG;\n    cout\u003C\u003C\"2\"\u003C\u003Cendl;\n    cout\u003C\u003C\"3\"\u003C\u003Cendl;\n    cout\u003C\u003C\"4\"\u003C\u003Cendl;\n    FLAG:\n    cout\u003C\u003C\"5\"\u003C\u003Cendl;\u002F\u002F跳过了2,3,4,直接到5\n}\n",[251,3797,3798,3806,3810,3823,3833,3846,3859,3872,3880,3896],{"__ignoreMap":174},[254,3799,3800,3802,3804],{"class":256,"line":257},[254,3801,268],{"class":260},[254,3803,2113],{"class":2103},[254,3805,2116],{"class":264},[254,3807,3808],{"class":256,"line":175},[254,3809,1686],{"class":264},[254,3811,3812,3814,3816,3819,3821],{"class":256,"line":1319},[254,3813,1691],{"class":264},[254,3815,1308],{"class":260},[254,3817,3818],{"class":369},"\"1\"",[254,3820,1308],{"class":260},[254,3822,1331],{"class":264},[254,3824,3825,3828,3831],{"class":256,"line":1334},[254,3826,3827],{"class":260},"    goto",[254,3829,3830],{"class":2103}," FLAG",[254,3832,1430],{"class":264},[254,3834,3835,3837,3839,3842,3844],{"class":256,"line":1340},[254,3836,1691],{"class":264},[254,3838,1308],{"class":260},[254,3840,3841],{"class":369},"\"2\"",[254,3843,1308],{"class":260},[254,3845,1331],{"class":264},[254,3847,3848,3850,3852,3855,3857],{"class":256,"line":1354},[254,3849,1691],{"class":264},[254,3851,1308],{"class":260},[254,3853,3854],{"class":369},"\"3\"",[254,3856,1308],{"class":260},[254,3858,1331],{"class":264},[254,3860,3861,3863,3865,3868,3870],{"class":256,"line":1360},[254,3862,1691],{"class":264},[254,3864,1308],{"class":260},[254,3866,3867],{"class":369},"\"4\"",[254,3869,1308],{"class":260},[254,3871,1331],{"class":264},[254,3873,3874,3877],{"class":256,"line":1451},[254,3875,3876],{"class":2103},"    FLAG",[254,3878,3879],{"class":264},":\n",[254,3881,3882,3884,3886,3889,3891,3893],{"class":256,"line":1457},[254,3883,1691],{"class":264},[254,3885,1308],{"class":260},[254,3887,3888],{"class":369},"\"5\"",[254,3890,1308],{"class":260},[254,3892,1378],{"class":264},[254,3894,3895],{"class":323},"\u002F\u002F跳过了2,3,4,直接到5\n",[254,3897,3898],{"class":256,"line":1469},[254,3899,1705],{"class":264},[34,3901,3903],{"id":3902},"_17数组","1.7数组",[225,3905,3907],{"id":3906},"_171一维数组","1.7.1一维数组",[21,3909,3910],{},[24,3911,3912],{},"一维数组定义方式",[402,3914,3915,3925],{},[405,3916,3917],{},[408,3918,3919,3922],{},[411,3920,3921],{},"方式",[411,3923,3924],{},"注意事项",[449,3926,3927,3941,3951],{},[408,3928,3929,3935],{},[454,3930,3931,3932,320],{},"数据类型 数组名",[254,3933,3934],{},"数组长度",[454,3936,3937,3938,3940],{},"这种方式是先定义再arr",[254,3939,705],{},"赋值",[408,3942,3943,3948],{},[454,3944,3931,3945,3947],{},[254,3946,3934],{},"={值1,值2....};",[454,3949,3950],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[408,3952,3953,3957],{},[454,3954,3931,3955,3947],{},[254,3956],{},[454,3958,3959,3960,3962],{},"int arr",[254,3961],{},";这是不正确的，按照这样的方式定义必须有初始长度",[21,3964,3965],{"start":175},[24,3966,3967],{},"一维数组数组名\n用途：",[1271,3969,3970],{},[24,3971,3972],{},"1.可以统计整个数组在内存中的长度：",[245,3974,3976],{"className":247,"code":3975,"language":249,"meta":174,"style":174},"sizeof(arr);\nsizeof(arr[0]);\n",[251,3977,3978,3985],{"__ignoreMap":174},[254,3979,3980,3982],{"class":256,"line":257},[254,3981,261],{"class":260},[254,3983,3984],{"class":264},"(arr);\n",[254,3986,3987,3989,3992,3994],{"class":256,"line":175},[254,3988,261],{"class":260},[254,3990,3991],{"class":264},"(arr[",[254,3993,456],{"class":313},[254,3995,3996],{"class":264},"]);\n",[1271,3998,3999],{},[24,4000,4001],{},"2.可以获取数组在内存中的首地址:",[245,4003,4005],{"className":247,"code":4004,"language":249,"meta":174,"style":174},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[251,4006,4007,4012,4025,4030],{"__ignoreMap":174},[254,4008,4009],{"class":256,"line":257},[254,4010,4011],{"class":323},"\u002F\u002F查看16进制的首地址\n",[254,4013,4014,4016,4018,4021,4023],{"class":256,"line":175},[254,4015,1509],{"class":264},[254,4017,1308],{"class":260},[254,4019,4020],{"class":264},"arr",[254,4022,1308],{"class":260},[254,4024,1331],{"class":264},[254,4026,4027],{"class":256,"line":1319},[254,4028,4029],{"class":323},"\u002F\u002F看10进制数\n",[254,4031,4032,4034,4036,4038,4040,4042,4044,4047,4049,4051,4053],{"class":256,"line":1334},[254,4033,1509],{"class":264},[254,4035,1308],{"class":260},[254,4037,265],{"class":264},[254,4039,268],{"class":260},[254,4041,693],{"class":264},[254,4043,617],{"class":260},[254,4045,4046],{"class":264},"arr[",[254,4048,456],{"class":313},[254,4050,1204],{"class":264},[254,4052,1308],{"class":260},[254,4054,1331],{"class":264},[14,4056,4057],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[1271,4059,4060],{},[24,4061,4062],{},"1️⃣五只小猪称体重",[245,4064,4066],{"className":247,"code":4065,"language":249,"meta":174,"style":174},"#include\u003Ciostream>\nusing namespace std;\nint main()\n{\n    int arr[5]={300,350,200,400,250};\n    int tmp=0;\n    for (int i=0;i\u003C5;i++)\n    {\n        if(tmp\u003Carr[i])\n        {\n            tmp=arr[i];\n        }\n    }\n    cout\u003C\u003Ctmp\u003C\u003Cendl;\n    return 0;\n}\n",[251,4067,4068,4074,4084,4092,4096,4136,4149,4175,4179,4191,4195,4205,4209,4213,4226,4236],{"__ignoreMap":174},[254,4069,4070,4072],{"class":256,"line":257},[254,4071,2089],{"class":260},[254,4073,2092],{"class":369},[254,4075,4076,4078,4080,4082],{"class":256,"line":175},[254,4077,2097],{"class":260},[254,4079,2100],{"class":260},[254,4081,2104],{"class":2103},[254,4083,1430],{"class":264},[254,4085,4086,4088,4090],{"class":256,"line":1319},[254,4087,268],{"class":260},[254,4089,2113],{"class":2103},[254,4091,2116],{"class":264},[254,4093,4094],{"class":256,"line":1334},[254,4095,1686],{"class":264},[254,4097,4098,4100,4103,4105,4107,4109,4111,4114,4116,4119,4121,4123,4125,4128,4130,4133],{"class":256,"line":1340},[254,4099,2125],{"class":260},[254,4101,4102],{"class":264}," arr[",[254,4104,583],{"class":313},[254,4106,1204],{"class":264},[254,4108,310],{"class":260},[254,4110,1160],{"class":264},[254,4112,4113],{"class":313},"300",[254,4115,642],{"class":264},[254,4117,4118],{"class":313},"350",[254,4120,642],{"class":264},[254,4122,1862],{"class":313},[254,4124,642],{"class":264},[254,4126,4127],{"class":313},"400",[254,4129,642],{"class":264},[254,4131,4132],{"class":313},"250",[254,4134,4135],{"class":264},"};\n",[254,4137,4138,4140,4143,4145,4147],{"class":256,"line":1354},[254,4139,2125],{"class":260},[254,4141,4142],{"class":264}," tmp",[254,4144,310],{"class":260},[254,4146,456],{"class":313},[254,4148,1430],{"class":264},[254,4150,4151,4153,4155,4157,4159,4161,4163,4165,4167,4169,4171,4173],{"class":256,"line":1360},[254,4152,3341],{"class":260},[254,4154,1798],{"class":264},[254,4156,268],{"class":260},[254,4158,3172],{"class":264},[254,4160,310],{"class":260},[254,4162,456],{"class":313},[254,4164,3179],{"class":264},[254,4166,1174],{"class":260},[254,4168,583],{"class":313},[254,4170,3179],{"class":264},[254,4172,2432],{"class":260},[254,4174,271],{"class":264},[254,4176,4177],{"class":256,"line":1451},[254,4178,2170],{"class":264},[254,4180,4181,4183,4186,4188],{"class":256,"line":1457},[254,4182,2637],{"class":260},[254,4184,4185],{"class":264},"(tmp",[254,4187,1174],{"class":260},[254,4189,4190],{"class":264},"arr[i])\n",[254,4192,4193],{"class":256,"line":1469},[254,4194,2650],{"class":264},[254,4196,4197,4200,4202],{"class":256,"line":1752},[254,4198,4199],{"class":264},"            tmp",[254,4201,310],{"class":260},[254,4203,4204],{"class":264},"arr[i];\n",[254,4206,4207],{"class":256,"line":1757},[254,4208,2669],{"class":264},[254,4210,4211],{"class":256,"line":1763},[254,4212,2327],{"class":264},[254,4214,4215,4217,4219,4222,4224],{"class":256,"line":1768},[254,4216,1691],{"class":264},[254,4218,1308],{"class":260},[254,4220,4221],{"class":264},"tmp",[254,4223,1308],{"class":260},[254,4225,1331],{"class":264},[254,4227,4228,4231,4234],{"class":256,"line":1782},[254,4229,4230],{"class":260},"    return",[254,4232,4233],{"class":313}," 0",[254,4235,1430],{"class":264},[254,4237,4238],{"class":256,"line":1787},[254,4239,1705],{"class":264},[1271,4241,4242],{},[24,4243,4244],{},"2️⃣数组元素逆置",[245,4246,4248],{"className":247,"code":4247,"language":249,"meta":174,"style":174},"\u002F\u002F元素逆置\n#include\u003Ciostream>\nusing namespace std;\nint main()\n{\n   int arr[5]={1,2,3,4,5};\n   int start=0;\u002F\u002F起始下标\n   int end=sizeof(arr)\u002Fsizeof(arr[0])-1;\u002F\u002F结束下标\n   while (start\u003Cend)\n   {\n    \u002F\u002F实现元素互换代码\n    int temp=arr[start];\n    arr[start]=arr[end];\n    arr[end]=temp;\n    \u002F\u002F下标更新\n    start++;\n    end--;\n   }\n   \u002F\u002F输出逆置后的数组\n   for (int i=0;i\u003C5;i++)\n   {\n    cout\u003C\u003Carr[i]\u003C\u003C\" \";\n   }\n   system(\"pause\");\n   return 0;\n}\n",[251,4249,4250,4255,4261,4271,4279,4283,4318,4334,4366,4379,4384,4389,4401,4411,4421,4426,4435,4445,4450,4455,4482,4486,4502,4506,4517,4526],{"__ignoreMap":174},[254,4251,4252],{"class":256,"line":257},[254,4253,4254],{"class":323},"\u002F\u002F元素逆置\n",[254,4256,4257,4259],{"class":256,"line":175},[254,4258,2089],{"class":260},[254,4260,2092],{"class":369},[254,4262,4263,4265,4267,4269],{"class":256,"line":1319},[254,4264,2097],{"class":260},[254,4266,2100],{"class":260},[254,4268,2104],{"class":2103},[254,4270,1430],{"class":264},[254,4272,4273,4275,4277],{"class":256,"line":1334},[254,4274,268],{"class":260},[254,4276,2113],{"class":2103},[254,4278,2116],{"class":264},[254,4280,4281],{"class":256,"line":1340},[254,4282,1686],{"class":264},[254,4284,4285,4288,4290,4292,4294,4296,4298,4300,4302,4304,4306,4308,4310,4312,4314,4316],{"class":256,"line":1354},[254,4286,4287],{"class":260},"   int",[254,4289,4102],{"class":264},[254,4291,583],{"class":313},[254,4293,1204],{"class":264},[254,4295,310],{"class":260},[254,4297,1160],{"class":264},[254,4299,482],{"class":313},[254,4301,642],{"class":264},[254,4303,342],{"class":313},[254,4305,642],{"class":264},[254,4307,336],{"class":313},[254,4309,642],{"class":264},[254,4311,557],{"class":313},[254,4313,642],{"class":264},[254,4315,583],{"class":313},[254,4317,4135],{"class":264},[254,4319,4320,4322,4325,4327,4329,4331],{"class":256,"line":1360},[254,4321,4287],{"class":260},[254,4323,4324],{"class":264}," start",[254,4326,310],{"class":260},[254,4328,456],{"class":313},[254,4330,320],{"class":264},[254,4332,4333],{"class":323},"\u002F\u002F起始下标\n",[254,4335,4336,4338,4341,4344,4347,4350,4352,4354,4357,4359,4361,4363],{"class":256,"line":1451},[254,4337,4287],{"class":260},[254,4339,4340],{"class":264}," end",[254,4342,4343],{"class":260},"=sizeof",[254,4345,4346],{"class":264},"(arr)",[254,4348,4349],{"class":260},"\u002Fsizeof",[254,4351,3991],{"class":264},[254,4353,456],{"class":313},[254,4355,4356],{"class":264},"])",[254,4358,796],{"class":260},[254,4360,482],{"class":313},[254,4362,320],{"class":264},[254,4364,4365],{"class":323},"\u002F\u002F结束下标\n",[254,4367,4368,4371,4374,4376],{"class":256,"line":1457},[254,4369,4370],{"class":260},"   while",[254,4372,4373],{"class":264}," (start",[254,4375,1174],{"class":260},[254,4377,4378],{"class":264},"end)\n",[254,4380,4381],{"class":256,"line":1469},[254,4382,4383],{"class":264},"   {\n",[254,4385,4386],{"class":256,"line":1752},[254,4387,4388],{"class":323},"    \u002F\u002F实现元素互换代码\n",[254,4390,4391,4393,4396,4398],{"class":256,"line":1757},[254,4392,2125],{"class":260},[254,4394,4395],{"class":264}," temp",[254,4397,310],{"class":260},[254,4399,4400],{"class":264},"arr[start];\n",[254,4402,4403,4406,4408],{"class":256,"line":1763},[254,4404,4405],{"class":264},"    arr[start]",[254,4407,310],{"class":260},[254,4409,4410],{"class":264},"arr[end];\n",[254,4412,4413,4416,4418],{"class":256,"line":1768},[254,4414,4415],{"class":264},"    arr[end]",[254,4417,310],{"class":260},[254,4419,4420],{"class":264},"temp;\n",[254,4422,4423],{"class":256,"line":1782},[254,4424,4425],{"class":323},"    \u002F\u002F下标更新\n",[254,4427,4428,4431,4433],{"class":256,"line":1787},[254,4429,4430],{"class":264},"    start",[254,4432,2432],{"class":260},[254,4434,1430],{"class":264},[254,4436,4437,4440,4443],{"class":256,"line":1793},[254,4438,4439],{"class":264},"    end",[254,4441,4442],{"class":260},"--",[254,4444,1430],{"class":264},[254,4446,4447],{"class":256,"line":1814},[254,4448,4449],{"class":264},"   }\n",[254,4451,4452],{"class":256,"line":1819},[254,4453,4454],{"class":323},"   \u002F\u002F输出逆置后的数组\n",[254,4456,4457,4460,4462,4464,4466,4468,4470,4472,4474,4476,4478,4480],{"class":256,"line":1833},[254,4458,4459],{"class":260},"   for",[254,4461,1798],{"class":264},[254,4463,268],{"class":260},[254,4465,3172],{"class":264},[254,4467,310],{"class":260},[254,4469,456],{"class":313},[254,4471,3179],{"class":264},[254,4473,1174],{"class":260},[254,4475,583],{"class":313},[254,4477,3179],{"class":264},[254,4479,2432],{"class":260},[254,4481,271],{"class":264},[254,4483,4484],{"class":256,"line":1838},[254,4485,4383],{"class":264},[254,4487,4488,4490,4492,4495,4497,4500],{"class":256,"line":1867},[254,4489,1691],{"class":264},[254,4491,1308],{"class":260},[254,4493,4494],{"class":264},"arr[i]",[254,4496,1308],{"class":260},[254,4498,4499],{"class":369},"\" \"",[254,4501,1430],{"class":264},[254,4503,4504],{"class":256,"line":1872},[254,4505,4449],{"class":264},[254,4507,4508,4511,4513,4515],{"class":256,"line":1889},[254,4509,4510],{"class":2103},"   system",[254,4512,265],{"class":264},[254,4514,2448],{"class":369},[254,4516,2859],{"class":264},[254,4518,4519,4522,4524],{"class":256,"line":1894},[254,4520,4521],{"class":260},"   return",[254,4523,4233],{"class":313},[254,4525,1430],{"class":264},[254,4527,4528],{"class":256,"line":1899},[254,4529,1705],{"class":264},[1271,4531,4532],{},[24,4533,4534],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[245,4536,4538],{"className":247,"code":4537,"language":249,"meta":174,"style":174},"\u002F\u002F冒泡排序,升序\n#include\u003Ciostream>\nusing namespace std;\nint main()\n{\n    int arr[9] = {4,2,8,0,5,7,1,3,9};\n    cout\u003C\u003C\"排序前：\"\u003C\u003Cendl;\n    for (int i=0;i\u003C9;i++)\n    {\n        cout\u003C\u003Carr[i]\u003C\u003C\" \";\n    }\n    \u002F\u002F开始冒泡排序\n    \u002F\u002F总共排序轮数为 元素个数-1\n    for (int i=0;i\u003C9-1;i++)\n    {\n        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n        for (int j=0;j\u003C9-i-1;j++)\n        {\n            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n            if(arr[j]>arr[j+1])\n            {\n                int temp=arr[j];\n                arr[j]=arr[j+1];\n                arr[j+1]=temp;\n            }\n        }\n    }\n    cout\u003C\u003C\"排序后：\"\u003C\u003Cendl;\n    for (int i=0;i\u003C9;i++)\n    {\n        cout\u003C\u003Carr[i]\u003C\u003C\" \";\n    }\n    return 0;\n}\n",[251,4539,4540,4545,4551,4561,4569,4573,4625,4638,4664,4668,4682,4686,4691,4696,4726,4730,4735,4769,4773,4778,4798,4803,4815,4831,4846,4851,4855,4859,4872,4898,4902,4916,4920,4928],{"__ignoreMap":174},[254,4541,4542],{"class":256,"line":257},[254,4543,4544],{"class":323},"\u002F\u002F冒泡排序,升序\n",[254,4546,4547,4549],{"class":256,"line":175},[254,4548,2089],{"class":260},[254,4550,2092],{"class":369},[254,4552,4553,4555,4557,4559],{"class":256,"line":1319},[254,4554,2097],{"class":260},[254,4556,2100],{"class":260},[254,4558,2104],{"class":2103},[254,4560,1430],{"class":264},[254,4562,4563,4565,4567],{"class":256,"line":1334},[254,4564,268],{"class":260},[254,4566,2113],{"class":2103},[254,4568,2116],{"class":264},[254,4570,4571],{"class":256,"line":1340},[254,4572,1686],{"class":264},[254,4574,4575,4577,4579,4581,4584,4586,4589,4591,4593,4595,4597,4599,4601,4603,4605,4607,4609,4611,4613,4615,4617,4619,4621,4623],{"class":256,"line":1354},[254,4576,2125],{"class":260},[254,4578,4102],{"class":264},[254,4580,684],{"class":313},[254,4582,4583],{"class":264},"] ",[254,4585,310],{"class":260},[254,4587,4588],{"class":264}," {",[254,4590,557],{"class":313},[254,4592,642],{"class":264},[254,4594,342],{"class":313},[254,4596,642],{"class":264},[254,4598,659],{"class":313},[254,4600,642],{"class":264},[254,4602,456],{"class":313},[254,4604,642],{"class":264},[254,4606,583],{"class":313},[254,4608,642],{"class":264},[254,4610,633],{"class":313},[254,4612,642],{"class":264},[254,4614,482],{"class":313},[254,4616,642],{"class":264},[254,4618,336],{"class":313},[254,4620,642],{"class":264},[254,4622,684],{"class":313},[254,4624,4135],{"class":264},[254,4626,4627,4629,4631,4634,4636],{"class":256,"line":1360},[254,4628,1691],{"class":264},[254,4630,1308],{"class":260},[254,4632,4633],{"class":369},"\"排序前：\"",[254,4635,1308],{"class":260},[254,4637,1331],{"class":264},[254,4639,4640,4642,4644,4646,4648,4650,4652,4654,4656,4658,4660,4662],{"class":256,"line":1451},[254,4641,3341],{"class":260},[254,4643,1798],{"class":264},[254,4645,268],{"class":260},[254,4647,3172],{"class":264},[254,4649,310],{"class":260},[254,4651,456],{"class":313},[254,4653,3179],{"class":264},[254,4655,1174],{"class":260},[254,4657,684],{"class":313},[254,4659,3179],{"class":264},[254,4661,2432],{"class":260},[254,4663,271],{"class":264},[254,4665,4666],{"class":256,"line":1457},[254,4667,2170],{"class":264},[254,4669,4670,4672,4674,4676,4678,4680],{"class":256,"line":1469},[254,4671,3591],{"class":264},[254,4673,1308],{"class":260},[254,4675,4494],{"class":264},[254,4677,1308],{"class":260},[254,4679,4499],{"class":369},[254,4681,1430],{"class":264},[254,4683,4684],{"class":256,"line":1752},[254,4685,2327],{"class":264},[254,4687,4688],{"class":256,"line":1757},[254,4689,4690],{"class":323},"    \u002F\u002F开始冒泡排序\n",[254,4692,4693],{"class":256,"line":1763},[254,4694,4695],{"class":323},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[254,4697,4698,4700,4702,4704,4706,4708,4710,4712,4714,4716,4718,4720,4722,4724],{"class":256,"line":1768},[254,4699,3341],{"class":260},[254,4701,1798],{"class":264},[254,4703,268],{"class":260},[254,4705,3172],{"class":264},[254,4707,310],{"class":260},[254,4709,456],{"class":313},[254,4711,3179],{"class":264},[254,4713,1174],{"class":260},[254,4715,684],{"class":313},[254,4717,796],{"class":260},[254,4719,482],{"class":313},[254,4721,3179],{"class":264},[254,4723,2432],{"class":260},[254,4725,271],{"class":264},[254,4727,4728],{"class":256,"line":1782},[254,4729,2170],{"class":264},[254,4731,4732],{"class":256,"line":1787},[254,4733,4734],{"class":323},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[254,4736,4737,4739,4741,4743,4745,4747,4749,4751,4753,4755,4757,4759,4761,4763,4765,4767],{"class":256,"line":1793},[254,4738,3543],{"class":260},[254,4740,1798],{"class":264},[254,4742,268],{"class":260},[254,4744,3550],{"class":264},[254,4746,310],{"class":260},[254,4748,456],{"class":313},[254,4750,3557],{"class":264},[254,4752,1174],{"class":260},[254,4754,684],{"class":313},[254,4756,796],{"class":260},[254,4758,705],{"class":264},[254,4760,796],{"class":260},[254,4762,482],{"class":313},[254,4764,3557],{"class":264},[254,4766,2432],{"class":260},[254,4768,271],{"class":264},[254,4770,4771],{"class":256,"line":1814},[254,4772,2650],{"class":264},[254,4774,4775],{"class":256,"line":1819},[254,4776,4777],{"class":323},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[254,4779,4780,4783,4786,4788,4791,4793,4795],{"class":256,"line":1833},[254,4781,4782],{"class":260},"            if",[254,4784,4785],{"class":264},"(arr[j]",[254,4787,1224],{"class":260},[254,4789,4790],{"class":264},"arr[j",[254,4792,745],{"class":260},[254,4794,482],{"class":313},[254,4796,4797],{"class":264},"])\n",[254,4799,4800],{"class":256,"line":1838},[254,4801,4802],{"class":264},"            {\n",[254,4804,4805,4808,4810,4812],{"class":256,"line":1867},[254,4806,4807],{"class":260},"                int",[254,4809,4395],{"class":264},[254,4811,310],{"class":260},[254,4813,4814],{"class":264},"arr[j];\n",[254,4816,4817,4820,4822,4824,4826,4828],{"class":256,"line":1872},[254,4818,4819],{"class":264},"                arr[j]",[254,4821,310],{"class":260},[254,4823,4790],{"class":264},[254,4825,745],{"class":260},[254,4827,482],{"class":313},[254,4829,4830],{"class":264},"];\n",[254,4832,4833,4836,4838,4840,4842,4844],{"class":256,"line":1889},[254,4834,4835],{"class":264},"                arr[j",[254,4837,745],{"class":260},[254,4839,482],{"class":313},[254,4841,1204],{"class":264},[254,4843,310],{"class":260},[254,4845,4420],{"class":264},[254,4847,4848],{"class":256,"line":1894},[254,4849,4850],{"class":264},"            }\n",[254,4852,4853],{"class":256,"line":1899},[254,4854,2669],{"class":264},[254,4856,4857],{"class":256,"line":1904},[254,4858,2327],{"class":264},[254,4860,4861,4863,4865,4868,4870],{"class":256,"line":1918},[254,4862,1691],{"class":264},[254,4864,1308],{"class":260},[254,4866,4867],{"class":369},"\"排序后：\"",[254,4869,1308],{"class":260},[254,4871,1331],{"class":264},[254,4873,4874,4876,4878,4880,4882,4884,4886,4888,4890,4892,4894,4896],{"class":256,"line":1923},[254,4875,3341],{"class":260},[254,4877,1798],{"class":264},[254,4879,268],{"class":260},[254,4881,3172],{"class":264},[254,4883,310],{"class":260},[254,4885,456],{"class":313},[254,4887,3179],{"class":264},[254,4889,1174],{"class":260},[254,4891,684],{"class":313},[254,4893,3179],{"class":264},[254,4895,2432],{"class":260},[254,4897,271],{"class":264},[254,4899,4900],{"class":256,"line":2717},[254,4901,2170],{"class":264},[254,4903,4904,4906,4908,4910,4912,4914],{"class":256,"line":2731},[254,4905,3591],{"class":264},[254,4907,1308],{"class":260},[254,4909,4494],{"class":264},[254,4911,1308],{"class":260},[254,4913,4499],{"class":369},[254,4915,1430],{"class":264},[254,4917,4918],{"class":256,"line":2739},[254,4919,2327],{"class":264},[254,4921,4922,4924,4926],{"class":256,"line":2744},[254,4923,4230],{"class":260},[254,4925,4233],{"class":313},[254,4927,1430],{"class":264},[254,4929,4930],{"class":256,"line":2750},[254,4931,1705],{"class":264},[225,4933,4935],{"id":4934},"_172二维数组","1.7.2二维数组",[21,4937,4938],{},[24,4939,4940],{},"二维数组的四种定义方式",[402,4942,4943,4952],{},[405,4944,4945],{},[408,4946,4947,4950],{},[411,4948,4949],{},"序号",[411,4951,3921],{},[449,4953,4954,4964,4973,4982,4991],{},[408,4955,4956,4958],{},[454,4957,482],{},[454,4959,4960,4961,320],{},"数据类型 数组名[行数]",[254,4962,4963],{},"列数",[408,4965,4966,4968],{},[454,4967,342],{},[454,4969,4960,4970,4972],{},[254,4971,4963],{},"={ {数据1,数据2}，{数据3，数据4}... }",[408,4974,4975,4977],{},[454,4976,336],{},[454,4978,4960,4979,4981],{},[254,4980,4963],{},"={数据1,数据2,数据3...}",[408,4983,4984,4986],{},[454,4985,557],{},[454,4987,4988,4989,4981],{},"数据类型 数组名[]",[254,4990,4963],{},[408,4992,4993,4996],{},[454,4994,4995],{},"注意：不能只省略列数",[454,4997],{},[21,4999,5000],{"start":175},[24,5001,5002],{},"二维数组数组名",[1271,5004,5005,5008],{},[24,5006,5007],{},"1.查看二维数组所占内存空间",[24,5009,5010],{},"2.获取二维数组首地址",[14,5012,5013],{},"已知二维数组，求二维数组的行数与列数",[245,5015,5017],{"className":247,"code":5016,"language":249,"meta":174,"style":174},"int main()\n{\n    int arr[2][3]=\n    {\n        {1,2,3},\n        {4,5,6}\n    };\n    cout\u003C\u003C\"二维数组的行数\"\u003C\u003Csizeof(arr)\u002Fsizeof(arr[0])\u003C\u003Cendl;\n    cout\u003C\u003C\"二维数组的列数\"\u003C\u003Csizeof(arr[0])\u002Fsizeof(arr[0][0])\u003C\u003Cendl;\n}\n",[251,5018,5019,5027,5031,5049,5053,5071,5087,5092,5117,5150],{"__ignoreMap":174},[254,5020,5021,5023,5025],{"class":256,"line":257},[254,5022,268],{"class":260},[254,5024,2113],{"class":2103},[254,5026,2116],{"class":264},[254,5028,5029],{"class":256,"line":175},[254,5030,1686],{"class":264},[254,5032,5033,5035,5037,5039,5042,5044,5046],{"class":256,"line":1319},[254,5034,2125],{"class":260},[254,5036,4102],{"class":264},[254,5038,342],{"class":313},[254,5040,5041],{"class":264},"][",[254,5043,336],{"class":313},[254,5045,1204],{"class":264},[254,5047,5048],{"class":260},"=\n",[254,5050,5051],{"class":256,"line":1334},[254,5052,2170],{"class":264},[254,5054,5055,5058,5060,5062,5064,5066,5068],{"class":256,"line":1340},[254,5056,5057],{"class":264},"        {",[254,5059,482],{"class":313},[254,5061,642],{"class":264},[254,5063,342],{"class":313},[254,5065,642],{"class":264},[254,5067,336],{"class":313},[254,5069,5070],{"class":264},"},\n",[254,5072,5073,5075,5077,5079,5081,5083,5085],{"class":256,"line":1354},[254,5074,5057],{"class":264},[254,5076,557],{"class":313},[254,5078,642],{"class":264},[254,5080,583],{"class":313},[254,5082,642],{"class":264},[254,5084,608],{"class":313},[254,5086,1705],{"class":264},[254,5088,5089],{"class":256,"line":1360},[254,5090,5091],{"class":264},"    };\n",[254,5093,5094,5096,5098,5101,5103,5105,5107,5109,5111,5113,5115],{"class":256,"line":1451},[254,5095,1691],{"class":264},[254,5097,1308],{"class":260},[254,5099,5100],{"class":369},"\"二维数组的行数\"",[254,5102,1512],{"class":260},[254,5104,4346],{"class":264},[254,5106,4349],{"class":260},[254,5108,3991],{"class":264},[254,5110,456],{"class":313},[254,5112,4356],{"class":264},[254,5114,1308],{"class":260},[254,5116,1331],{"class":264},[254,5118,5119,5121,5123,5126,5128,5130,5132,5134,5136,5138,5140,5142,5144,5146,5148],{"class":256,"line":1457},[254,5120,1691],{"class":264},[254,5122,1308],{"class":260},[254,5124,5125],{"class":369},"\"二维数组的列数\"",[254,5127,1512],{"class":260},[254,5129,3991],{"class":264},[254,5131,456],{"class":313},[254,5133,4356],{"class":264},[254,5135,4349],{"class":260},[254,5137,3991],{"class":264},[254,5139,456],{"class":313},[254,5141,5041],{"class":264},[254,5143,456],{"class":313},[254,5145,4356],{"class":264},[254,5147,1308],{"class":260},[254,5149,1331],{"class":264},[254,5151,5152],{"class":256,"line":1469},[254,5153,1705],{"class":264},[14,5155,5156],{},"查看二维数组首地址",[245,5158,5160],{"className":247,"code":5159,"language":249,"meta":174,"style":174},"cout\u003C\u003C\"二维数组首地址：\"\u003C\u003Carr\u003C\u003Cendl;\ncout\u003C\u003C\"二维数组第一行的首地址：\"\u003C\u003C(int)arr[0]\u003C\u003Cendl;\ncout\u003C\u003C\"二维数组第二行的首地址：\"\u003C\u003C(int)arr[1]\u003C\u003Cendl;\ncout\u003C\u003C\"二维数组第一个元素的首地址:\"\u003C\u003C(int)&arr[0][0]\u003C\u003Cendl;\u002F\u002F对于数，要加取址符\n",[251,5161,5162,5179,5205,5230],{"__ignoreMap":174},[254,5163,5164,5166,5168,5171,5173,5175,5177],{"class":256,"line":257},[254,5165,1509],{"class":264},[254,5167,1308],{"class":260},[254,5169,5170],{"class":369},"\"二维数组首地址：\"",[254,5172,1308],{"class":260},[254,5174,4020],{"class":264},[254,5176,1308],{"class":260},[254,5178,1331],{"class":264},[254,5180,5181,5183,5185,5188,5190,5192,5194,5197,5199,5201,5203],{"class":256,"line":175},[254,5182,1509],{"class":264},[254,5184,1308],{"class":260},[254,5186,5187],{"class":369},"\"二维数组第一行的首地址：\"",[254,5189,1308],{"class":260},[254,5191,265],{"class":264},[254,5193,268],{"class":260},[254,5195,5196],{"class":264},")arr[",[254,5198,456],{"class":313},[254,5200,1204],{"class":264},[254,5202,1308],{"class":260},[254,5204,1331],{"class":264},[254,5206,5207,5209,5211,5214,5216,5218,5220,5222,5224,5226,5228],{"class":256,"line":1319},[254,5208,1509],{"class":264},[254,5210,1308],{"class":260},[254,5212,5213],{"class":369},"\"二维数组第二行的首地址：\"",[254,5215,1308],{"class":260},[254,5217,265],{"class":264},[254,5219,268],{"class":260},[254,5221,5196],{"class":264},[254,5223,482],{"class":313},[254,5225,1204],{"class":264},[254,5227,1308],{"class":260},[254,5229,1331],{"class":264},[254,5231,5232,5234,5236,5239,5241,5243,5245,5247,5249,5251,5253,5255,5257,5259,5261,5263],{"class":256,"line":1334},[254,5233,1509],{"class":264},[254,5235,1308],{"class":260},[254,5237,5238],{"class":369},"\"二维数组第一个元素的首地址:\"",[254,5240,1308],{"class":260},[254,5242,265],{"class":264},[254,5244,268],{"class":260},[254,5246,693],{"class":264},[254,5248,617],{"class":260},[254,5250,4046],{"class":264},[254,5252,456],{"class":313},[254,5254,5041],{"class":264},[254,5256,456],{"class":313},[254,5258,1204],{"class":264},[254,5260,1308],{"class":260},[254,5262,1378],{"class":264},[254,5264,5265],{"class":323},"\u002F\u002F对于数，要加取址符\n",[5267,5268,5269],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}",{"title":174,"searchDepth":175,"depth":175,"links":5271},[5272,5273,5274,5282,5283,5289,5294],{"id":200,"depth":175,"text":201},{"id":207,"depth":175,"text":208},{"id":222,"depth":175,"text":223,"children":5275},[5276,5277,5278,5279,5280,5281],{"id":227,"depth":1319,"text":228},{"id":281,"depth":1319,"text":282},{"id":350,"depth":1319,"text":351},{"id":1289,"depth":1319,"text":1290},{"id":1384,"depth":1319,"text":1385},{"id":1483,"depth":1319,"text":1484},{"id":1525,"depth":175,"text":1526},{"id":1593,"depth":175,"text":1594,"children":5284},[5285,5286,5287,5288],{"id":1597,"depth":1319,"text":1598},{"id":1619,"depth":1319,"text":1620},{"id":1628,"depth":1319,"text":1629},{"id":1637,"depth":1319,"text":1638},{"id":1646,"depth":175,"text":1647,"children":5290},[5291,5292,5293],{"id":1650,"depth":1319,"text":1651},{"id":2345,"depth":1319,"text":2346},{"id":3761,"depth":1319,"text":3762},{"id":3902,"depth":175,"text":3903,"children":5295},[5296,5297],{"id":3906,"depth":1319,"text":3907},{"id":4934,"depth":1319,"text":4935},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":192,"description":174},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5304,"title":5305,"body":5306,"description":174,"extension":181,"meta":6406,"navigation":184,"path":6407,"seo":6408,"stem":6409,"__hash__":6410},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5307,"toc":6398},[5308,5311,5315,5323,5331,5334,5400,5404,5407,5483,5487,5490,5493,5496,5709,5713,5718,5782,5787,5854,5859,5950,5953,6058,6062,6065,6071,6215,6219,6222,6236,6239,6284,6287,6395],[10,5309,5305],{"id":5310},"_2函数",[34,5312,5314],{"id":5313},"_21函数概述","2.1函数概述",[21,5316,5317,5320],{},[24,5318,5319],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[24,5321,5322],{},"语法：",[245,5324,5329],{"className":5325,"code":5327,"language":5328,"meta":174},[5326],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[251,5330,5327],{"__ignoreMap":174},[14,5332,5333],{},"小案例",[245,5335,5337],{"className":247,"code":5336,"language":249,"meta":174,"style":174},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[251,5338,5339,5344,5368,5372,5389,5396],{"__ignoreMap":174},[254,5340,5341],{"class":256,"line":257},[254,5342,5343],{"class":323},"\u002F\u002Fnum1,num2形参\n",[254,5345,5346,5348,5351,5353,5355,5359,5361,5363,5366],{"class":256,"line":175},[254,5347,268],{"class":260},[254,5349,5350],{"class":2103}," add",[254,5352,265],{"class":264},[254,5354,268],{"class":260},[254,5356,5358],{"class":5357},"s4XuR"," num1",[254,5360,642],{"class":264},[254,5362,268],{"class":260},[254,5364,5365],{"class":5357}," num2",[254,5367,271],{"class":264},[254,5369,5370],{"class":256,"line":1319},[254,5371,1686],{"class":264},[254,5373,5374,5376,5379,5381,5384,5386],{"class":256,"line":1334},[254,5375,2125],{"class":260},[254,5377,5378],{"class":264}," sum",[254,5380,310],{"class":260},[254,5382,5383],{"class":264},"num1",[254,5385,745],{"class":260},[254,5387,5388],{"class":264},"num2;\n",[254,5390,5391,5393],{"class":256,"line":1340},[254,5392,4230],{"class":260},[254,5394,5395],{"class":264}," sum;\n",[254,5397,5398],{"class":256,"line":1354},[254,5399,1705],{"class":264},[34,5401,5403],{"id":5402},"_22函数调用","2.2函数调用",[14,5405,5406],{},"调用刚刚写的求和函数",[245,5408,5410],{"className":247,"code":5409,"language":249,"meta":174,"style":174},"int main()\n{\n    \u002F\u002Fa,b实参\n    int a=0;\n    int b=0;\n    cin>>a,b;\n    \u002F\u002F调用函数时，实参值传给了形参\n    cout\u003C\u003Cadd(a,b);\n}\n",[251,5411,5412,5420,5424,5429,5441,5453,5462,5467,5479],{"__ignoreMap":174},[254,5413,5414,5416,5418],{"class":256,"line":257},[254,5415,268],{"class":260},[254,5417,2113],{"class":2103},[254,5419,2116],{"class":264},[254,5421,5422],{"class":256,"line":175},[254,5423,1686],{"class":264},[254,5425,5426],{"class":256,"line":1319},[254,5427,5428],{"class":323},"    \u002F\u002Fa,b实参\n",[254,5430,5431,5433,5435,5437,5439],{"class":256,"line":1334},[254,5432,2125],{"class":260},[254,5434,1538],{"class":264},[254,5436,310],{"class":260},[254,5438,456],{"class":313},[254,5440,1430],{"class":264},[254,5442,5443,5445,5447,5449,5451],{"class":256,"line":1340},[254,5444,2125],{"class":260},[254,5446,2973],{"class":264},[254,5448,310],{"class":260},[254,5450,456],{"class":313},[254,5452,1430],{"class":264},[254,5454,5455,5457,5459],{"class":256,"line":1354},[254,5456,2152],{"class":264},[254,5458,1569],{"class":260},[254,5460,5461],{"class":264},"a,b;\n",[254,5463,5464],{"class":256,"line":1360},[254,5465,5466],{"class":323},"    \u002F\u002F调用函数时，实参值传给了形参\n",[254,5468,5469,5471,5473,5476],{"class":256,"line":1451},[254,5470,1691],{"class":264},[254,5472,1308],{"class":260},[254,5474,5475],{"class":2103},"add",[254,5477,5478],{"class":264},"(a,b);\n",[254,5480,5481],{"class":256,"line":1457},[254,5482,1705],{"class":264},[34,5484,5486],{"id":5485},"_23值传递","2.3值传递",[14,5488,5489],{},"值传递就是函数调用时实参将数值传给形参",[14,5491,5492],{},"值传递时，如果形参发生任何改变，不会影响实参",[14,5494,5495],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[245,5497,5499],{"className":247,"code":5498,"language":249,"meta":174,"style":174},"void swap(int num1,int num2)\n{\n    cout\u003C\u003C\"交换前：\"\u003C\u003Cendl;\n    cout\u003C\u003C\"num1=\"\u003C\u003Cnum1\u003C\u003Cendl;\n    cout\u003C\u003C\"num2=\"\u003C\u003Cnum2\u003C\u003Cendl;\n    int temp=num1;\n    num1=num2;\n    num2=temp;\n    cout\u003C\u003C\"交换后：\"\u003C\u003Cendl;\n    cout\u003C\u003C\"num1=\"\u003C\u003Cnum1\u003C\u003Cendl;\n    cout\u003C\u003C\"num2=\"\u003C\u003Cnum2\u003C\u003Cendl;\n    return;\u002F\u002F或者不写\n}\nint main()\n{\n    int a=10;\n    int b=20;\n    swap(a,b);\n}\n",[251,5500,5501,5523,5527,5540,5557,5575,5586,5595,5604,5617,5633,5649,5658,5662,5670,5674,5686,5698,5705],{"__ignoreMap":174},[254,5502,5503,5506,5509,5511,5513,5515,5517,5519,5521],{"class":256,"line":257},[254,5504,5505],{"class":260},"void",[254,5507,5508],{"class":2103}," swap",[254,5510,265],{"class":264},[254,5512,268],{"class":260},[254,5514,5358],{"class":5357},[254,5516,642],{"class":264},[254,5518,268],{"class":260},[254,5520,5365],{"class":5357},[254,5522,271],{"class":264},[254,5524,5525],{"class":256,"line":175},[254,5526,1686],{"class":264},[254,5528,5529,5531,5533,5536,5538],{"class":256,"line":1319},[254,5530,1691],{"class":264},[254,5532,1308],{"class":260},[254,5534,5535],{"class":369},"\"交换前：\"",[254,5537,1308],{"class":260},[254,5539,1331],{"class":264},[254,5541,5542,5544,5546,5549,5551,5553,5555],{"class":256,"line":1334},[254,5543,1691],{"class":264},[254,5545,1308],{"class":260},[254,5547,5548],{"class":369},"\"num1=\"",[254,5550,1308],{"class":260},[254,5552,5383],{"class":264},[254,5554,1308],{"class":260},[254,5556,1331],{"class":264},[254,5558,5559,5561,5563,5566,5568,5571,5573],{"class":256,"line":1340},[254,5560,1691],{"class":264},[254,5562,1308],{"class":260},[254,5564,5565],{"class":369},"\"num2=\"",[254,5567,1308],{"class":260},[254,5569,5570],{"class":264},"num2",[254,5572,1308],{"class":260},[254,5574,1331],{"class":264},[254,5576,5577,5579,5581,5583],{"class":256,"line":1354},[254,5578,2125],{"class":260},[254,5580,4395],{"class":264},[254,5582,310],{"class":260},[254,5584,5585],{"class":264},"num1;\n",[254,5587,5588,5591,5593],{"class":256,"line":1360},[254,5589,5590],{"class":264},"    num1",[254,5592,310],{"class":260},[254,5594,5388],{"class":264},[254,5596,5597,5600,5602],{"class":256,"line":1451},[254,5598,5599],{"class":264},"    num2",[254,5601,310],{"class":260},[254,5603,4420],{"class":264},[254,5605,5606,5608,5610,5613,5615],{"class":256,"line":1457},[254,5607,1691],{"class":264},[254,5609,1308],{"class":260},[254,5611,5612],{"class":369},"\"交换后：\"",[254,5614,1308],{"class":260},[254,5616,1331],{"class":264},[254,5618,5619,5621,5623,5625,5627,5629,5631],{"class":256,"line":1469},[254,5620,1691],{"class":264},[254,5622,1308],{"class":260},[254,5624,5548],{"class":369},[254,5626,1308],{"class":260},[254,5628,5383],{"class":264},[254,5630,1308],{"class":260},[254,5632,1331],{"class":264},[254,5634,5635,5637,5639,5641,5643,5645,5647],{"class":256,"line":1752},[254,5636,1691],{"class":264},[254,5638,1308],{"class":260},[254,5640,5565],{"class":369},[254,5642,1308],{"class":260},[254,5644,5570],{"class":264},[254,5646,1308],{"class":260},[254,5648,1331],{"class":264},[254,5650,5651,5653,5655],{"class":256,"line":1757},[254,5652,4230],{"class":260},[254,5654,320],{"class":264},[254,5656,5657],{"class":323},"\u002F\u002F或者不写\n",[254,5659,5660],{"class":256,"line":1763},[254,5661,1705],{"class":264},[254,5663,5664,5666,5668],{"class":256,"line":1768},[254,5665,268],{"class":260},[254,5667,2113],{"class":2103},[254,5669,2116],{"class":264},[254,5671,5672],{"class":256,"line":1782},[254,5673,1686],{"class":264},[254,5675,5676,5678,5680,5682,5684],{"class":256,"line":1787},[254,5677,2125],{"class":260},[254,5679,1538],{"class":264},[254,5681,310],{"class":260},[254,5683,710],{"class":313},[254,5685,1430],{"class":264},[254,5687,5688,5690,5692,5694,5696],{"class":256,"line":1793},[254,5689,2125],{"class":260},[254,5691,2973],{"class":264},[254,5693,310],{"class":260},[254,5695,964],{"class":313},[254,5697,1430],{"class":264},[254,5699,5700,5703],{"class":256,"line":1814},[254,5701,5702],{"class":2103},"    swap",[254,5704,5478],{"class":264},[254,5706,5707],{"class":256,"line":1819},[254,5708,1705],{"class":264},[34,5710,5712],{"id":5711},"_24函数的常见形式","2.4函数的常见形式",[21,5714,5715],{},[24,5716,5717],{},"无参无返",[245,5719,5721],{"className":247,"code":5720,"language":249,"meta":174,"style":174},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[251,5722,5723,5732,5736,5749,5753,5761,5765,5770,5778],{"__ignoreMap":174},[254,5724,5725,5727,5730],{"class":256,"line":257},[254,5726,5505],{"class":260},[254,5728,5729],{"class":2103}," test01",[254,5731,2116],{"class":264},[254,5733,5734],{"class":256,"line":175},[254,5735,1686],{"class":264},[254,5737,5738,5740,5742,5745,5747],{"class":256,"line":1319},[254,5739,1691],{"class":264},[254,5741,1308],{"class":260},[254,5743,5744],{"class":369},"\"你好\"",[254,5746,1308],{"class":260},[254,5748,1331],{"class":264},[254,5750,5751],{"class":256,"line":1334},[254,5752,1705],{"class":264},[254,5754,5755,5757,5759],{"class":256,"line":1340},[254,5756,268],{"class":260},[254,5758,2113],{"class":2103},[254,5760,2116],{"class":264},[254,5762,5763],{"class":256,"line":1354},[254,5764,1686],{"class":264},[254,5766,5767],{"class":256,"line":1360},[254,5768,5769],{"class":323},"    \u002F\u002F函数调用\n",[254,5771,5772,5775],{"class":256,"line":1451},[254,5773,5774],{"class":2103},"    test01",[254,5776,5777],{"class":264},"();\n",[254,5779,5780],{"class":256,"line":1457},[254,5781,1705],{"class":264},[21,5783,5784],{"start":175},[24,5785,5786],{},"有参无返",[245,5788,5790],{"className":247,"code":5789,"language":249,"meta":174,"style":174},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[251,5791,5792,5807,5811,5823,5827,5835,5839,5850],{"__ignoreMap":174},[254,5793,5794,5796,5799,5801,5803,5805],{"class":256,"line":257},[254,5795,5505],{"class":260},[254,5797,5798],{"class":2103}," test02",[254,5800,265],{"class":264},[254,5802,268],{"class":260},[254,5804,1538],{"class":5357},[254,5806,271],{"class":264},[254,5808,5809],{"class":256,"line":175},[254,5810,1686],{"class":264},[254,5812,5813,5815,5817,5819,5821],{"class":256,"line":1319},[254,5814,1691],{"class":264},[254,5816,1308],{"class":260},[254,5818,5744],{"class":369},[254,5820,1308],{"class":260},[254,5822,1331],{"class":264},[254,5824,5825],{"class":256,"line":1334},[254,5826,1705],{"class":264},[254,5828,5829,5831,5833],{"class":256,"line":1340},[254,5830,268],{"class":260},[254,5832,2113],{"class":2103},[254,5834,2116],{"class":264},[254,5836,5837],{"class":256,"line":1354},[254,5838,1686],{"class":264},[254,5840,5841,5844,5846,5848],{"class":256,"line":1360},[254,5842,5843],{"class":2103},"    test02",[254,5845,265],{"class":264},[254,5847,575],{"class":313},[254,5849,2859],{"class":264},[254,5851,5852],{"class":256,"line":1451},[254,5853,1705],{"class":264},[21,5855,5856],{"start":1319},[24,5857,5858],{},"无参有返",[245,5860,5862],{"className":247,"code":5861,"language":249,"meta":174,"style":174},"int test03()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n    return 100;\n}\nint main()\n{\n    int num1=test03();\n    cout\u003C\u003C\"num1=\"\u003C\u003Cnum1\u003C\u003Cendl; \u002F\u002F100\n}\n",[251,5863,5864,5873,5877,5889,5898,5902,5910,5914,5927,5946],{"__ignoreMap":174},[254,5865,5866,5868,5871],{"class":256,"line":257},[254,5867,268],{"class":260},[254,5869,5870],{"class":2103}," test03",[254,5872,2116],{"class":264},[254,5874,5875],{"class":256,"line":175},[254,5876,1686],{"class":264},[254,5878,5879,5881,5883,5885,5887],{"class":256,"line":1319},[254,5880,1691],{"class":264},[254,5882,1308],{"class":260},[254,5884,5744],{"class":369},[254,5886,1308],{"class":260},[254,5888,1331],{"class":264},[254,5890,5891,5893,5896],{"class":256,"line":1334},[254,5892,4230],{"class":260},[254,5894,5895],{"class":313}," 100",[254,5897,1430],{"class":264},[254,5899,5900],{"class":256,"line":1340},[254,5901,1705],{"class":264},[254,5903,5904,5906,5908],{"class":256,"line":1354},[254,5905,268],{"class":260},[254,5907,2113],{"class":2103},[254,5909,2116],{"class":264},[254,5911,5912],{"class":256,"line":1360},[254,5913,1686],{"class":264},[254,5915,5916,5918,5920,5922,5925],{"class":256,"line":1451},[254,5917,2125],{"class":260},[254,5919,5358],{"class":264},[254,5921,310],{"class":260},[254,5923,5924],{"class":2103},"test03",[254,5926,5777],{"class":264},[254,5928,5929,5931,5933,5935,5937,5939,5941,5943],{"class":256,"line":1457},[254,5930,1691],{"class":264},[254,5932,1308],{"class":260},[254,5934,5548],{"class":369},[254,5936,1308],{"class":260},[254,5938,5383],{"class":264},[254,5940,1308],{"class":260},[254,5942,1378],{"class":264},[254,5944,5945],{"class":323}," \u002F\u002F100\n",[254,5947,5948],{"class":256,"line":1469},[254,5949,1705],{"class":264},[14,5951,5952],{},"4.有参有返",[245,5954,5956],{"className":247,"code":5955,"language":249,"meta":174,"style":174},"int test04(int a)\n{\n    cout\u003C\u003C\"hello\"\u003C\u003Cendl;\n    return a;\n}\nint mian()\n{\n    int b=1;\n    int c=test04(b);\n    cout\u003C\u003Cc\u003C\u003Cendl; \u002F\u002F1\n}\n",[251,5957,5958,5973,5977,5990,5996,6000,6009,6013,6025,6039,6054],{"__ignoreMap":174},[254,5959,5960,5962,5965,5967,5969,5971],{"class":256,"line":257},[254,5961,268],{"class":260},[254,5963,5964],{"class":2103}," test04",[254,5966,265],{"class":264},[254,5968,268],{"class":260},[254,5970,1538],{"class":5357},[254,5972,271],{"class":264},[254,5974,5975],{"class":256,"line":175},[254,5976,1686],{"class":264},[254,5978,5979,5981,5983,5986,5988],{"class":256,"line":1319},[254,5980,1691],{"class":264},[254,5982,1308],{"class":260},[254,5984,5985],{"class":369},"\"hello\"",[254,5987,1308],{"class":260},[254,5989,1331],{"class":264},[254,5991,5992,5994],{"class":256,"line":1334},[254,5993,4230],{"class":260},[254,5995,1572],{"class":264},[254,5997,5998],{"class":256,"line":1340},[254,5999,1705],{"class":264},[254,6001,6002,6004,6007],{"class":256,"line":1354},[254,6003,268],{"class":260},[254,6005,6006],{"class":2103}," mian",[254,6008,2116],{"class":264},[254,6010,6011],{"class":256,"line":1360},[254,6012,1686],{"class":264},[254,6014,6015,6017,6019,6021,6023],{"class":256,"line":1451},[254,6016,2125],{"class":260},[254,6018,2973],{"class":264},[254,6020,310],{"class":260},[254,6022,482],{"class":313},[254,6024,1430],{"class":264},[254,6026,6027,6029,6031,6033,6036],{"class":256,"line":1457},[254,6028,2125],{"class":260},[254,6030,2989],{"class":264},[254,6032,310],{"class":260},[254,6034,6035],{"class":2103},"test04",[254,6037,6038],{"class":264},"(b);\n",[254,6040,6041,6043,6045,6047,6049,6051],{"class":256,"line":1469},[254,6042,1691],{"class":264},[254,6044,1308],{"class":260},[254,6046,552],{"class":264},[254,6048,1308],{"class":260},[254,6050,1378],{"class":264},[254,6052,6053],{"class":323}," \u002F\u002F1\n",[254,6055,6056],{"class":256,"line":1752},[254,6057,1705],{"class":264},[34,6059,6061],{"id":6060},"_25函数的声明","2.5函数的声明",[14,6063,6064],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[14,6066,6067,6068],{},"函数的",[414,6069,6070],{},"声明可以多次，但是函数的定义只能有一次",[245,6072,6074],{"className":247,"code":6073,"language":249,"meta":174,"style":174},"\u002F\u002F函数声明\n\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\nint max(int a,int b);\u002F\u002F这样函数就可以写在后面，不报错了\nint main() \n{\n    int a=10;\n    int b=20;\n    cout\u003C\u003Cmax(a,b)\u003C\u003Cendl;\n}\nint max(int a,int b)\n{\n    return a>b?a:b;\n}\n",[251,6075,6076,6081,6086,6111,6120,6124,6136,6148,6164,6168,6188,6192,6211],{"__ignoreMap":174},[254,6077,6078],{"class":256,"line":257},[254,6079,6080],{"class":323},"\u002F\u002F函数声明\n",[254,6082,6083],{"class":256,"line":175},[254,6084,6085],{"class":323},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[254,6087,6088,6090,6093,6095,6097,6099,6101,6103,6105,6108],{"class":256,"line":1319},[254,6089,268],{"class":260},[254,6091,6092],{"class":2103}," max",[254,6094,265],{"class":264},[254,6096,268],{"class":260},[254,6098,1538],{"class":5357},[254,6100,642],{"class":264},[254,6102,268],{"class":260},[254,6104,2973],{"class":5357},[254,6106,6107],{"class":264},");",[254,6109,6110],{"class":323},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[254,6112,6113,6115,6117],{"class":256,"line":1334},[254,6114,268],{"class":260},[254,6116,2113],{"class":2103},[254,6118,6119],{"class":264},"() \n",[254,6121,6122],{"class":256,"line":1340},[254,6123,1686],{"class":264},[254,6125,6126,6128,6130,6132,6134],{"class":256,"line":1354},[254,6127,2125],{"class":260},[254,6129,1538],{"class":264},[254,6131,310],{"class":260},[254,6133,710],{"class":313},[254,6135,1430],{"class":264},[254,6137,6138,6140,6142,6144,6146],{"class":256,"line":1360},[254,6139,2125],{"class":260},[254,6141,2973],{"class":264},[254,6143,310],{"class":260},[254,6145,964],{"class":313},[254,6147,1430],{"class":264},[254,6149,6150,6152,6154,6157,6160,6162],{"class":256,"line":1451},[254,6151,1691],{"class":264},[254,6153,1308],{"class":260},[254,6155,6156],{"class":2103},"max",[254,6158,6159],{"class":264},"(a,b)",[254,6161,1308],{"class":260},[254,6163,1331],{"class":264},[254,6165,6166],{"class":256,"line":1457},[254,6167,1705],{"class":264},[254,6169,6170,6172,6174,6176,6178,6180,6182,6184,6186],{"class":256,"line":1469},[254,6171,268],{"class":260},[254,6173,6092],{"class":2103},[254,6175,265],{"class":264},[254,6177,268],{"class":260},[254,6179,1538],{"class":5357},[254,6181,642],{"class":264},[254,6183,268],{"class":260},[254,6185,2973],{"class":5357},[254,6187,271],{"class":264},[254,6189,6190],{"class":256,"line":1752},[254,6191,1686],{"class":264},[254,6193,6194,6196,6198,6200,6202,6204,6206,6208],{"class":256,"line":1757},[254,6195,4230],{"class":260},[254,6197,1538],{"class":264},[254,6199,1224],{"class":260},[254,6201,527],{"class":264},[254,6203,1250],{"class":260},[254,6205,42],{"class":264},[254,6207,1123],{"class":260},[254,6209,6210],{"class":264},"b;\n",[254,6212,6213],{"class":256,"line":1763},[254,6214,1705],{"class":264},[34,6216,6218],{"id":6217},"_26函数的分文件编写","2.6函数的分文件编写",[14,6220,6221],{},"4个步骤：",[1271,6223,6224,6227,6230,6233],{},[24,6225,6226],{},"1.创建后缀名为.h的头文件",[24,6228,6229],{},"2.创建后缀名为.cpp的源文件",[24,6231,6232],{},"3.在头文件中写函数的定义",[24,6234,6235],{},"4.在源文件中写函数的定义\n示例：",[14,6237,6238],{},"头文件：swap.h",[245,6240,6242],{"className":247,"code":6241,"language":249,"meta":174,"style":174},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[251,6243,6244,6250,6260,6264],{"__ignoreMap":174},[254,6245,6246,6248],{"class":256,"line":257},[254,6247,2089],{"class":260},[254,6249,2092],{"class":369},[254,6251,6252,6254,6256,6258],{"class":256,"line":175},[254,6253,2097],{"class":260},[254,6255,2100],{"class":260},[254,6257,2104],{"class":2103},[254,6259,1430],{"class":264},[254,6261,6262],{"class":256,"line":1319},[254,6263,6080],{"class":323},[254,6265,6266,6268,6270,6272,6274,6276,6278,6280,6282],{"class":256,"line":1334},[254,6267,5505],{"class":260},[254,6269,5508],{"class":2103},[254,6271,265],{"class":264},[254,6273,268],{"class":260},[254,6275,1538],{"class":5357},[254,6277,642],{"class":264},[254,6279,268],{"class":260},[254,6281,2973],{"class":5357},[254,6283,2859],{"class":264},[14,6285,6286],{},"源文件：swap.cpp",[245,6288,6290],{"className":247,"code":6289,"language":249,"meta":174,"style":174},"#include \"swap.h\"\n\u002F\u002F函数的定义\nvoid swap(int a,int b)\n{\n    int temp=a;\n    a=b;\n    b=temp;\n    cout\u003C\u003C\"a=\"\u003C\u003Ca\u003C\u003Cendl;\n    cout\u003C\u003C\"b=\"\u003C\u003Cb\u003C\u003Cendl;\n}\n",[251,6291,6292,6299,6304,6324,6328,6339,6348,6357,6374,6391],{"__ignoreMap":174},[254,6293,6294,6296],{"class":256,"line":257},[254,6295,2089],{"class":260},[254,6297,6298],{"class":369}," \"swap.h\"\n",[254,6300,6301],{"class":256,"line":175},[254,6302,6303],{"class":323},"\u002F\u002F函数的定义\n",[254,6305,6306,6308,6310,6312,6314,6316,6318,6320,6322],{"class":256,"line":1319},[254,6307,5505],{"class":260},[254,6309,5508],{"class":2103},[254,6311,265],{"class":264},[254,6313,268],{"class":260},[254,6315,1538],{"class":5357},[254,6317,642],{"class":264},[254,6319,268],{"class":260},[254,6321,2973],{"class":5357},[254,6323,271],{"class":264},[254,6325,6326],{"class":256,"line":1334},[254,6327,1686],{"class":264},[254,6329,6330,6332,6334,6336],{"class":256,"line":1340},[254,6331,2125],{"class":260},[254,6333,4395],{"class":264},[254,6335,310],{"class":260},[254,6337,6338],{"class":264},"a;\n",[254,6340,6341,6344,6346],{"class":256,"line":1354},[254,6342,6343],{"class":264},"    a",[254,6345,310],{"class":260},[254,6347,6210],{"class":264},[254,6349,6350,6353,6355],{"class":256,"line":1360},[254,6351,6352],{"class":264},"    b",[254,6354,310],{"class":260},[254,6356,4420],{"class":264},[254,6358,6359,6361,6363,6366,6368,6370,6372],{"class":256,"line":1451},[254,6360,1691],{"class":264},[254,6362,1308],{"class":260},[254,6364,6365],{"class":369},"\"a=\"",[254,6367,1308],{"class":260},[254,6369,42],{"class":264},[254,6371,1308],{"class":260},[254,6373,1331],{"class":264},[254,6375,6376,6378,6380,6383,6385,6387,6389],{"class":256,"line":1457},[254,6377,1691],{"class":264},[254,6379,1308],{"class":260},[254,6381,6382],{"class":369},"\"b=\"",[254,6384,1308],{"class":260},[254,6386,527],{"class":264},[254,6388,1308],{"class":260},[254,6390,1331],{"class":264},[254,6392,6393],{"class":256,"line":1469},[254,6394,1705],{"class":264},[5267,6396,6397],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":174,"searchDepth":175,"depth":175,"links":6399},[6400,6401,6402,6403,6404,6405],{"id":5313,"depth":175,"text":5314},{"id":5402,"depth":175,"text":5403},{"id":5485,"depth":175,"text":5486},{"id":5711,"depth":175,"text":5712},{"id":6060,"depth":175,"text":6061},{"id":6217,"depth":175,"text":6218},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5305,"description":174},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6412,"title":6413,"body":6414,"description":6421,"extension":181,"meta":7826,"navigation":184,"path":7827,"seo":7828,"stem":7829,"__hash__":7830},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":6415,"toc":7816},[6416,6419,6422,6426,6588,6592,6595,6598,6601,6604,6744,6748,6751,6754,6757,6822,6826,6831,6898,6901,6905,6908,6919,6924,6944,6947,6952,6971,6974,6978,6997,7000,7004,7239,7243,7246,7249,7252,7414,7417,7421,7424,7430,7813],[10,6417,6413],{"id":6418},"_3指针",[14,6420,6421],{},"通过指针保存一个地址，指针就是个地址",[34,6423,6425],{"id":6424},"_31定义指针","3.1定义指针",[245,6427,6429],{"className":247,"code":6428,"language":249,"meta":174,"style":174},"int main()\n{\n    \u002F\u002F1.定义指针\n    int a=10;\n    \u002F\u002F指针定义语法：数据类型*指针变量名;\n    int*p;\n    p=&a;\n    cout\u003C\u003C\"a的地址为：\"\u003C\u003C&a\u003C\u003Cendl;\n    cout\u003C\u003C\"指针p为：\"\u003C\u003Cp\u003C\u003Cendl;\u002F\u002F指针p表示的就是a的地址\n\n    \u002F\u002F2.使用指针\n    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n    *p=1000;\n    cout\u003C\u003C*p\u003C\u003Cendl;\u002F\u002F1000\n    cout\u003C\u003Ca\u003C\u003Cendl;\u002F\u002F1000\n}\n",[251,6430,6431,6439,6443,6448,6460,6465,6473,6483,6501,6521,6525,6530,6535,6540,6554,6570,6584],{"__ignoreMap":174},[254,6432,6433,6435,6437],{"class":256,"line":257},[254,6434,268],{"class":260},[254,6436,2113],{"class":2103},[254,6438,2116],{"class":264},[254,6440,6441],{"class":256,"line":175},[254,6442,1686],{"class":264},[254,6444,6445],{"class":256,"line":1319},[254,6446,6447],{"class":323},"    \u002F\u002F1.定义指针\n",[254,6449,6450,6452,6454,6456,6458],{"class":256,"line":1334},[254,6451,2125],{"class":260},[254,6453,1538],{"class":264},[254,6455,310],{"class":260},[254,6457,710],{"class":313},[254,6459,1430],{"class":264},[254,6461,6462],{"class":256,"line":1340},[254,6463,6464],{"class":323},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[254,6466,6467,6470],{"class":256,"line":1354},[254,6468,6469],{"class":260},"    int*",[254,6471,6472],{"class":264},"p;\n",[254,6474,6475,6478,6481],{"class":256,"line":1360},[254,6476,6477],{"class":264},"    p",[254,6479,6480],{"class":260},"=&",[254,6482,6338],{"class":264},[254,6484,6485,6487,6489,6492,6495,6497,6499],{"class":256,"line":1451},[254,6486,1691],{"class":264},[254,6488,1308],{"class":260},[254,6490,6491],{"class":369},"\"a的地址为：\"",[254,6493,6494],{"class":260},"\u003C\u003C&",[254,6496,42],{"class":264},[254,6498,1308],{"class":260},[254,6500,1331],{"class":264},[254,6502,6503,6505,6507,6510,6512,6514,6516,6518],{"class":256,"line":1457},[254,6504,1691],{"class":264},[254,6506,1308],{"class":260},[254,6508,6509],{"class":369},"\"指针p为：\"",[254,6511,1308],{"class":260},[254,6513,14],{"class":264},[254,6515,1308],{"class":260},[254,6517,1378],{"class":264},[254,6519,6520],{"class":323},"\u002F\u002F指针p表示的就是a的地址\n",[254,6522,6523],{"class":256,"line":1469},[254,6524,2540],{"emptyLinePlaceholder":184},[254,6526,6527],{"class":256,"line":1752},[254,6528,6529],{"class":323},"    \u002F\u002F2.使用指针\n",[254,6531,6532],{"class":256,"line":1757},[254,6533,6534],{"class":323},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[254,6536,6537],{"class":256,"line":1763},[254,6538,6539],{"class":323},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[254,6541,6542,6545,6547,6549,6552],{"class":256,"line":1768},[254,6543,6544],{"class":260},"    *",[254,6546,14],{"class":264},[254,6548,310],{"class":260},[254,6550,6551],{"class":313},"1000",[254,6553,1430],{"class":264},[254,6555,6556,6558,6561,6563,6565,6567],{"class":256,"line":1782},[254,6557,1691],{"class":264},[254,6559,6560],{"class":260},"\u003C\u003C*",[254,6562,14],{"class":264},[254,6564,1308],{"class":260},[254,6566,1378],{"class":264},[254,6568,6569],{"class":323},"\u002F\u002F1000\n",[254,6571,6572,6574,6576,6578,6580,6582],{"class":256,"line":1787},[254,6573,1691],{"class":264},[254,6575,1308],{"class":260},[254,6577,42],{"class":264},[254,6579,1308],{"class":260},[254,6581,1378],{"class":264},[254,6583,6569],{"class":323},[254,6585,6586],{"class":256,"line":1793},[254,6587,1705],{"class":264},[34,6589,6591],{"id":6590},"_32指针所占的内存空间","3.2指针所占的内存空间",[14,6593,6594],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[14,6596,6597],{},"在32位操作系统下：占用4个字节空间",[14,6599,6600],{},"在64位操作系统下：占用8个字节空间",[14,6602,6603],{},"上方是不管啥数据类型的",[245,6605,6607],{"className":247,"code":6606,"language":249,"meta":174,"style":174},"int main()\n{\n    \u002F\u002F指针所占内存空间\n    int a=10;\n    \u002F\u002Fint *p;\n    \u002F\u002Fp=&a;\n    \u002F\u002F上述可以写为以下：\n    int *p=&a;\n    cout \u003C\u003C\"sizeof(int *)\"\u003C\u003Csizeof(p)\u003C\u003Cendl;\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n    cout \u003C\u003C\"sizeof(int *)\"\u003C\u003Csizeof(int *)\u003C\u003Cendl  \u002F\u002F4字节(32位的话)\n    cout \u003C\u003C\"sizeof(char *)\"\u003C\u003Csizeof(char *)\u003C\u003Cendl; \u002F\u002F4字节(32位的话)\n}\n",[251,6608,6609,6617,6621,6626,6638,6643,6648,6653,6666,6688,6714,6740],{"__ignoreMap":174},[254,6610,6611,6613,6615],{"class":256,"line":257},[254,6612,268],{"class":260},[254,6614,2113],{"class":2103},[254,6616,2116],{"class":264},[254,6618,6619],{"class":256,"line":175},[254,6620,1686],{"class":264},[254,6622,6623],{"class":256,"line":1319},[254,6624,6625],{"class":323},"    \u002F\u002F指针所占内存空间\n",[254,6627,6628,6630,6632,6634,6636],{"class":256,"line":1334},[254,6629,2125],{"class":260},[254,6631,1538],{"class":264},[254,6633,310],{"class":260},[254,6635,710],{"class":313},[254,6637,1430],{"class":264},[254,6639,6640],{"class":256,"line":1340},[254,6641,6642],{"class":323},"    \u002F\u002Fint *p;\n",[254,6644,6645],{"class":256,"line":1354},[254,6646,6647],{"class":323},"    \u002F\u002Fp=&a;\n",[254,6649,6650],{"class":256,"line":1360},[254,6651,6652],{"class":323},"    \u002F\u002F上述可以写为以下：\n",[254,6654,6655,6657,6660,6662,6664],{"class":256,"line":1451},[254,6656,2125],{"class":260},[254,6658,6659],{"class":260}," *",[254,6661,14],{"class":264},[254,6663,6480],{"class":260},[254,6665,6338],{"class":264},[254,6667,6668,6671,6673,6676,6678,6681,6683,6685],{"class":256,"line":1457},[254,6669,6670],{"class":264},"    cout ",[254,6672,1308],{"class":260},[254,6674,6675],{"class":369},"\"sizeof(int *)\"",[254,6677,1512],{"class":260},[254,6679,6680],{"class":264},"(p)",[254,6682,1308],{"class":260},[254,6684,1378],{"class":264},[254,6686,6687],{"class":323},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[254,6689,6690,6692,6694,6696,6698,6700,6702,6704,6706,6708,6711],{"class":256,"line":1469},[254,6691,6670],{"class":264},[254,6693,1308],{"class":260},[254,6695,6675],{"class":369},[254,6697,1512],{"class":260},[254,6699,265],{"class":264},[254,6701,268],{"class":260},[254,6703,6659],{"class":260},[254,6705,693],{"class":264},[254,6707,1308],{"class":260},[254,6709,6710],{"class":264},"endl",[254,6712,6713],{"class":323},"  \u002F\u002F4字节(32位的话)\n",[254,6715,6716,6718,6720,6723,6725,6727,6729,6731,6733,6735,6737],{"class":256,"line":1752},[254,6717,6670],{"class":264},[254,6719,1308],{"class":260},[254,6721,6722],{"class":369},"\"sizeof(char *)\"",[254,6724,1512],{"class":260},[254,6726,265],{"class":264},[254,6728,361],{"class":260},[254,6730,6659],{"class":260},[254,6732,693],{"class":264},[254,6734,1308],{"class":260},[254,6736,1378],{"class":264},[254,6738,6739],{"class":323}," \u002F\u002F4字节(32位的话)\n",[254,6741,6742],{"class":256,"line":1757},[254,6743,1705],{"class":264},[34,6745,6747],{"id":6746},"_33空指针","3.3空指针",[14,6749,6750],{},"空指针：指针变量指向内存中编号为0的空间",[14,6752,6753],{},"用途：初始化指针变量",[14,6755,6756],{},"注意：空指针指向的内存是不可以访问的",[245,6758,6760],{"className":247,"code":6759,"language":249,"meta":174,"style":174},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[251,6761,6762,6770,6774,6779,6793,6798,6813,6818],{"__ignoreMap":174},[254,6763,6764,6766,6768],{"class":256,"line":257},[254,6765,268],{"class":260},[254,6767,2113],{"class":2103},[254,6769,2116],{"class":264},[254,6771,6772],{"class":256,"line":175},[254,6773,1686],{"class":264},[254,6775,6776],{"class":256,"line":1319},[254,6777,6778],{"class":323},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[254,6780,6781,6783,6785,6787,6789,6791],{"class":256,"line":1334},[254,6782,2125],{"class":260},[254,6784,6659],{"class":260},[254,6786,14],{"class":264},[254,6788,310],{"class":260},[254,6790,2532],{"class":313},[254,6792,1430],{"class":264},[254,6794,6795],{"class":256,"line":1340},[254,6796,6797],{"class":323},"    \u002F\u002F2.空指针不能进行访问\n",[254,6799,6800,6802,6804,6806,6808,6810],{"class":256,"line":1354},[254,6801,6544],{"class":260},[254,6803,14],{"class":264},[254,6805,310],{"class":260},[254,6807,575],{"class":313},[254,6809,320],{"class":264},[254,6811,6812],{"class":323},"\u002F\u002F直接报错，压根不能访问\n",[254,6814,6815],{"class":256,"line":1360},[254,6816,6817],{"class":323},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[254,6819,6820],{"class":256,"line":1451},[254,6821,1705],{"class":264},[34,6823,6825],{"id":6824},"_34野指针","3.4野指针",[14,6827,6828],{},[414,6829,6830],{},"指针变量指向非法的内存空间",[245,6832,6834],{"className":247,"code":6833,"language":249,"meta":174,"style":174},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[251,6835,6836,6844,6848,6877,6882,6894],{"__ignoreMap":174},[254,6837,6838,6840,6842],{"class":256,"line":257},[254,6839,268],{"class":260},[254,6841,2113],{"class":2103},[254,6843,2116],{"class":264},[254,6845,6846],{"class":256,"line":175},[254,6847,1686],{"class":264},[254,6849,6850,6852,6854,6856,6858,6860,6862,6864,6866,6869,6872,6874],{"class":256,"line":1319},[254,6851,2125],{"class":260},[254,6853,6659],{"class":260},[254,6855,14],{"class":264},[254,6857,310],{"class":260},[254,6859,265],{"class":264},[254,6861,268],{"class":260},[254,6863,6659],{"class":260},[254,6865,693],{"class":264},[254,6867,6868],{"class":260},"0x",[254,6870,6871],{"class":313},"1100",[254,6873,320],{"class":264},[254,6875,6876],{"class":323}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[254,6878,6879],{"class":256,"line":1334},[254,6880,6881],{"class":323},"    \u002F\u002F访问野指针报错\n",[254,6883,6884,6886,6888,6890,6892],{"class":256,"line":1340},[254,6885,1691],{"class":264},[254,6887,6560],{"class":260},[254,6889,14],{"class":264},[254,6891,1308],{"class":260},[254,6893,1331],{"class":264},[254,6895,6896],{"class":256,"line":1354},[254,6897,1705],{"class":264},[14,6899,6900],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[34,6902,6904],{"id":6903},"_35const修饰指针","3.5const修饰指针",[14,6906,6907],{},"三种情况：",[1271,6909,6910,6913,6916],{},[24,6911,6912],{},"const修饰指针 常量指针",[24,6914,6915],{},"const修饰常量 指针常量",[24,6917,6918],{},"const即修饰指针，又修饰常量",[21,6920,6921],{},[24,6922,6923],{},"常量指针",[245,6925,6927],{"className":247,"code":6926,"language":249,"meta":174,"style":174},"const int *p=&a;\n",[251,6928,6929],{"__ignoreMap":174},[254,6930,6931,6934,6936,6938,6940,6942],{"class":256,"line":257},[254,6932,6933],{"class":260},"const",[254,6935,2522],{"class":260},[254,6937,6659],{"class":260},[254,6939,14],{"class":264},[254,6941,6480],{"class":260},[254,6943,6338],{"class":264},[14,6945,6946],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[21,6948,6949],{"start":175},[24,6950,6951],{},"指针常量",[245,6953,6955],{"className":247,"code":6954,"language":249,"meta":174,"style":174},"int *const p=&a;\n",[251,6956,6957],{"__ignoreMap":174},[254,6958,6959,6961,6964,6967,6969],{"class":256,"line":257},[254,6960,268],{"class":260},[254,6962,6963],{"class":260}," *const",[254,6965,6966],{"class":264}," p",[254,6968,6480],{"class":260},[254,6970,6338],{"class":264},[14,6972,6973],{},"指针的指向不可以改，指针指向的值可以改",[21,6975,6976],{"start":1319},[24,6977,6918],{},[245,6979,6981],{"className":247,"code":6980,"language":249,"meta":174,"style":174},"const int *const p=&a;\n",[251,6982,6983],{"__ignoreMap":174},[254,6984,6985,6987,6989,6991,6993,6995],{"class":256,"line":257},[254,6986,6933],{"class":260},[254,6988,2522],{"class":260},[254,6990,6963],{"class":260},[254,6992,6966],{"class":264},[254,6994,6480],{"class":260},[254,6996,6338],{"class":264},[14,6998,6999],{},"指针的指向和指针指向的值都不可以改变",[34,7001,7003],{"id":7002},"_36指针和数组","3.6指针和数组",[245,7005,7007],{"className":247,"code":7006,"language":249,"meta":174,"style":174},"int main()\n{\n    \u002F\u002F利用指针访问数组中的元素\n    int arr[10]={1,2,3,4,5,6,7,8,9,10};\n    cout\u003C\u003C\"数组的第一个元素为：\"\u003C\u003Carr[0]\u003C\u003Cendl;\n    int *p=arr;\u002F\u002F注意数才要加取地址符号&\n    cout\u003C\u003C\"数组的第一个元素为：\"\u003C\u003C*p\u003C\u003Cendl;\n    p++; \u002F\u002F让指针向后偏移4个字节\n    cout\u003C\u003C\"数组的第二个元素为：\"\u003C\u003C*p\u003C\u003Cendl;\n    \u002F\u002F利用指针遍历数组\n    int *p2=arr;\n    for (int i=0;i\u003C10;i++)\n    {\n        cout\u003C\u003C*p2\u003C\u003Cendl;\n        p2++;\n    }\n}\n",[251,7008,7009,7017,7021,7026,7080,7101,7117,7133,7144,7161,7166,7180,7206,7210,7222,7231,7235],{"__ignoreMap":174},[254,7010,7011,7013,7015],{"class":256,"line":257},[254,7012,268],{"class":260},[254,7014,2113],{"class":2103},[254,7016,2116],{"class":264},[254,7018,7019],{"class":256,"line":175},[254,7020,1686],{"class":264},[254,7022,7023],{"class":256,"line":1319},[254,7024,7025],{"class":323},"    \u002F\u002F利用指针访问数组中的元素\n",[254,7027,7028,7030,7032,7034,7036,7038,7040,7042,7044,7046,7048,7050,7052,7054,7056,7058,7060,7062,7064,7066,7068,7070,7072,7074,7076,7078],{"class":256,"line":1334},[254,7029,2125],{"class":260},[254,7031,4102],{"class":264},[254,7033,710],{"class":313},[254,7035,1204],{"class":264},[254,7037,310],{"class":260},[254,7039,1160],{"class":264},[254,7041,482],{"class":313},[254,7043,642],{"class":264},[254,7045,342],{"class":313},[254,7047,642],{"class":264},[254,7049,336],{"class":313},[254,7051,642],{"class":264},[254,7053,557],{"class":313},[254,7055,642],{"class":264},[254,7057,583],{"class":313},[254,7059,642],{"class":264},[254,7061,608],{"class":313},[254,7063,642],{"class":264},[254,7065,633],{"class":313},[254,7067,642],{"class":264},[254,7069,659],{"class":313},[254,7071,642],{"class":264},[254,7073,684],{"class":313},[254,7075,642],{"class":264},[254,7077,710],{"class":313},[254,7079,4135],{"class":264},[254,7081,7082,7084,7086,7089,7091,7093,7095,7097,7099],{"class":256,"line":1340},[254,7083,1691],{"class":264},[254,7085,1308],{"class":260},[254,7087,7088],{"class":369},"\"数组的第一个元素为：\"",[254,7090,1308],{"class":260},[254,7092,4046],{"class":264},[254,7094,456],{"class":313},[254,7096,1204],{"class":264},[254,7098,1308],{"class":260},[254,7100,1331],{"class":264},[254,7102,7103,7105,7107,7109,7111,7114],{"class":256,"line":1354},[254,7104,2125],{"class":260},[254,7106,6659],{"class":260},[254,7108,14],{"class":264},[254,7110,310],{"class":260},[254,7112,7113],{"class":264},"arr;",[254,7115,7116],{"class":323},"\u002F\u002F注意数才要加取地址符号&\n",[254,7118,7119,7121,7123,7125,7127,7129,7131],{"class":256,"line":1360},[254,7120,1691],{"class":264},[254,7122,1308],{"class":260},[254,7124,7088],{"class":369},[254,7126,6560],{"class":260},[254,7128,14],{"class":264},[254,7130,1308],{"class":260},[254,7132,1331],{"class":264},[254,7134,7135,7137,7139,7141],{"class":256,"line":1451},[254,7136,6477],{"class":264},[254,7138,2432],{"class":260},[254,7140,320],{"class":264},[254,7142,7143],{"class":323}," \u002F\u002F让指针向后偏移4个字节\n",[254,7145,7146,7148,7150,7153,7155,7157,7159],{"class":256,"line":1457},[254,7147,1691],{"class":264},[254,7149,1308],{"class":260},[254,7151,7152],{"class":369},"\"数组的第二个元素为：\"",[254,7154,6560],{"class":260},[254,7156,14],{"class":264},[254,7158,1308],{"class":260},[254,7160,1331],{"class":264},[254,7162,7163],{"class":256,"line":1469},[254,7164,7165],{"class":323},"    \u002F\u002F利用指针遍历数组\n",[254,7167,7168,7170,7172,7175,7177],{"class":256,"line":1752},[254,7169,2125],{"class":260},[254,7171,6659],{"class":260},[254,7173,7174],{"class":264},"p2",[254,7176,310],{"class":260},[254,7178,7179],{"class":264},"arr;\n",[254,7181,7182,7184,7186,7188,7190,7192,7194,7196,7198,7200,7202,7204],{"class":256,"line":1757},[254,7183,3341],{"class":260},[254,7185,1798],{"class":264},[254,7187,268],{"class":260},[254,7189,3172],{"class":264},[254,7191,310],{"class":260},[254,7193,456],{"class":313},[254,7195,3179],{"class":264},[254,7197,1174],{"class":260},[254,7199,710],{"class":313},[254,7201,3179],{"class":264},[254,7203,2432],{"class":260},[254,7205,271],{"class":264},[254,7207,7208],{"class":256,"line":1763},[254,7209,2170],{"class":264},[254,7211,7212,7214,7216,7218,7220],{"class":256,"line":1768},[254,7213,3591],{"class":264},[254,7215,6560],{"class":260},[254,7217,7174],{"class":264},[254,7219,1308],{"class":260},[254,7221,1331],{"class":264},[254,7223,7224,7227,7229],{"class":256,"line":1782},[254,7225,7226],{"class":264},"        p2",[254,7228,2432],{"class":260},[254,7230,1430],{"class":264},[254,7232,7233],{"class":256,"line":1787},[254,7234,2327],{"class":264},[254,7236,7237],{"class":256,"line":1793},[254,7238,1705],{"class":264},[34,7240,7242],{"id":7241},"_37指针和函数","3.7指针和函数",[14,7244,7245],{},"利用指针做函数参数，可以修改实参的值",[14,7247,7248],{},"值传递：只改变形参，不改变实参",[14,7250,7251],{},"地址传递：",[245,7253,7255],{"className":247,"code":7254,"language":249,"meta":174,"style":174},"void swap(int *p1,int *p2)\n{\n    int temp=*p1;\n    *p1=*p2;\n    *p2=temp;\n}\nint main()\n{\n    int a=10;\n    int b=20;\n    \u002F\u002F地址传递\n    swap(&a,&b);\n    cout\u003C\u003Ca\u003C\u003Cendl;\u002F\u002F20\n    cout\u003C\u003Cb\u003C\u003Cendl;\u002F\u002F10\n}\n",[251,7256,7257,7282,7286,7298,7309,7319,7323,7331,7335,7347,7359,7364,7380,7395,7410],{"__ignoreMap":174},[254,7258,7259,7261,7263,7265,7267,7269,7272,7274,7276,7278,7280],{"class":256,"line":257},[254,7260,5505],{"class":260},[254,7262,5508],{"class":2103},[254,7264,265],{"class":264},[254,7266,268],{"class":260},[254,7268,6659],{"class":260},[254,7270,7271],{"class":5357},"p1",[254,7273,642],{"class":264},[254,7275,268],{"class":260},[254,7277,6659],{"class":260},[254,7279,7174],{"class":5357},[254,7281,271],{"class":264},[254,7283,7284],{"class":256,"line":175},[254,7285,1686],{"class":264},[254,7287,7288,7290,7292,7295],{"class":256,"line":1319},[254,7289,2125],{"class":260},[254,7291,4395],{"class":264},[254,7293,7294],{"class":260},"=*",[254,7296,7297],{"class":264},"p1;\n",[254,7299,7300,7302,7304,7306],{"class":256,"line":1334},[254,7301,6544],{"class":260},[254,7303,7271],{"class":264},[254,7305,7294],{"class":260},[254,7307,7308],{"class":264},"p2;\n",[254,7310,7311,7313,7315,7317],{"class":256,"line":1340},[254,7312,6544],{"class":260},[254,7314,7174],{"class":264},[254,7316,310],{"class":260},[254,7318,4420],{"class":264},[254,7320,7321],{"class":256,"line":1354},[254,7322,1705],{"class":264},[254,7324,7325,7327,7329],{"class":256,"line":1360},[254,7326,268],{"class":260},[254,7328,2113],{"class":2103},[254,7330,2116],{"class":264},[254,7332,7333],{"class":256,"line":1451},[254,7334,1686],{"class":264},[254,7336,7337,7339,7341,7343,7345],{"class":256,"line":1457},[254,7338,2125],{"class":260},[254,7340,1538],{"class":264},[254,7342,310],{"class":260},[254,7344,710],{"class":313},[254,7346,1430],{"class":264},[254,7348,7349,7351,7353,7355,7357],{"class":256,"line":1469},[254,7350,2125],{"class":260},[254,7352,2973],{"class":264},[254,7354,310],{"class":260},[254,7356,964],{"class":313},[254,7358,1430],{"class":264},[254,7360,7361],{"class":256,"line":1752},[254,7362,7363],{"class":323},"    \u002F\u002F地址传递\n",[254,7365,7366,7368,7370,7372,7375,7377],{"class":256,"line":1757},[254,7367,5702],{"class":2103},[254,7369,265],{"class":264},[254,7371,617],{"class":260},[254,7373,7374],{"class":264},"a,",[254,7376,617],{"class":260},[254,7378,7379],{"class":264},"b);\n",[254,7381,7382,7384,7386,7388,7390,7392],{"class":256,"line":1763},[254,7383,1691],{"class":264},[254,7385,1308],{"class":260},[254,7387,42],{"class":264},[254,7389,1308],{"class":260},[254,7391,1378],{"class":264},[254,7393,7394],{"class":323},"\u002F\u002F20\n",[254,7396,7397,7399,7401,7403,7405,7407],{"class":256,"line":1768},[254,7398,1691],{"class":264},[254,7400,1308],{"class":260},[254,7402,527],{"class":264},[254,7404,1308],{"class":260},[254,7406,1378],{"class":264},[254,7408,7409],{"class":323},"\u002F\u002F10\n",[254,7411,7412],{"class":256,"line":1782},[254,7413,1705],{"class":264},[14,7415,7416],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[34,7418,7420],{"id":7419},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[14,7422,7423],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[14,7425,7426,7427,7429],{},"例如数组：int arr",[254,7428,710],{},"={4,3,6,9,1,2,10,8,7,5}",[245,7431,7433],{"className":247,"code":7432,"language":249,"meta":174,"style":174},"#include\u003Ciostream>\nusing namespace std;\nvoid bubbleSort(int *p,int len)\n{\n    for(int i=0;i\u003Clen-1;i++)\n    {\n        for(int j=0;j\u003Clen-i-1;j++)\n        {\n            if(p[j]>p[j+1])\n            {\n                int temp=p[j];\n                p[j]=p[j+1];\n                p[j+1]=temp;\n            }\n        }\n    }\n}\n\nint main()\n{\n    \u002F\u002F 1.创建数组\n    int arr[10]={4,3,6,9,1,2,10,8,7,5};\n    int len=10;\n    int *p=arr;\n    \u002F\u002F 2.创建函数，实现冒泡排序\n    bubbleSort(p,len);\n\n    \u002F\u002F 3.打印排序后的数组\n    for (int i=0; i\u003Clen; i++)\n    {\n        cout\u003C\u003C*p\u003C\u003C\"\";\n        p++;\n    }\n}\n",[251,7434,7435,7441,7451,7475,7479,7510,7514,7548,7552,7570,7574,7585,7600,7615,7619,7623,7627,7631,7635,7643,7647,7652,7706,7718,7730,7735,7743,7747,7752,7777,7781,7796,7805,7809],{"__ignoreMap":174},[254,7436,7437,7439],{"class":256,"line":257},[254,7438,2089],{"class":260},[254,7440,2092],{"class":369},[254,7442,7443,7445,7447,7449],{"class":256,"line":175},[254,7444,2097],{"class":260},[254,7446,2100],{"class":260},[254,7448,2104],{"class":2103},[254,7450,1430],{"class":264},[254,7452,7453,7455,7458,7460,7462,7464,7466,7468,7470,7473],{"class":256,"line":1319},[254,7454,5505],{"class":260},[254,7456,7457],{"class":2103}," bubbleSort",[254,7459,265],{"class":264},[254,7461,268],{"class":260},[254,7463,6659],{"class":260},[254,7465,14],{"class":5357},[254,7467,642],{"class":264},[254,7469,268],{"class":260},[254,7471,7472],{"class":5357}," len",[254,7474,271],{"class":264},[254,7476,7477],{"class":256,"line":1334},[254,7478,1686],{"class":264},[254,7480,7481,7483,7485,7487,7489,7491,7493,7495,7497,7500,7502,7504,7506,7508],{"class":256,"line":1340},[254,7482,3341],{"class":260},[254,7484,265],{"class":264},[254,7486,268],{"class":260},[254,7488,3172],{"class":264},[254,7490,310],{"class":260},[254,7492,456],{"class":313},[254,7494,3179],{"class":264},[254,7496,1174],{"class":260},[254,7498,7499],{"class":264},"len",[254,7501,796],{"class":260},[254,7503,482],{"class":313},[254,7505,3179],{"class":264},[254,7507,2432],{"class":260},[254,7509,271],{"class":264},[254,7511,7512],{"class":256,"line":1354},[254,7513,2170],{"class":264},[254,7515,7516,7518,7520,7522,7524,7526,7528,7530,7532,7534,7536,7538,7540,7542,7544,7546],{"class":256,"line":1360},[254,7517,3543],{"class":260},[254,7519,265],{"class":264},[254,7521,268],{"class":260},[254,7523,3550],{"class":264},[254,7525,310],{"class":260},[254,7527,456],{"class":313},[254,7529,3557],{"class":264},[254,7531,1174],{"class":260},[254,7533,7499],{"class":264},[254,7535,796],{"class":260},[254,7537,705],{"class":264},[254,7539,796],{"class":260},[254,7541,482],{"class":313},[254,7543,3557],{"class":264},[254,7545,2432],{"class":260},[254,7547,271],{"class":264},[254,7549,7550],{"class":256,"line":1451},[254,7551,2650],{"class":264},[254,7553,7554,7556,7559,7561,7564,7566,7568],{"class":256,"line":1457},[254,7555,4782],{"class":260},[254,7557,7558],{"class":264},"(p[j]",[254,7560,1224],{"class":260},[254,7562,7563],{"class":264},"p[j",[254,7565,745],{"class":260},[254,7567,482],{"class":313},[254,7569,4797],{"class":264},[254,7571,7572],{"class":256,"line":1469},[254,7573,4802],{"class":264},[254,7575,7576,7578,7580,7582],{"class":256,"line":1752},[254,7577,4807],{"class":260},[254,7579,4395],{"class":264},[254,7581,310],{"class":260},[254,7583,7584],{"class":264},"p[j];\n",[254,7586,7587,7590,7592,7594,7596,7598],{"class":256,"line":1757},[254,7588,7589],{"class":264},"                p[j]",[254,7591,310],{"class":260},[254,7593,7563],{"class":264},[254,7595,745],{"class":260},[254,7597,482],{"class":313},[254,7599,4830],{"class":264},[254,7601,7602,7605,7607,7609,7611,7613],{"class":256,"line":1763},[254,7603,7604],{"class":264},"                p[j",[254,7606,745],{"class":260},[254,7608,482],{"class":313},[254,7610,1204],{"class":264},[254,7612,310],{"class":260},[254,7614,4420],{"class":264},[254,7616,7617],{"class":256,"line":1768},[254,7618,4850],{"class":264},[254,7620,7621],{"class":256,"line":1782},[254,7622,2669],{"class":264},[254,7624,7625],{"class":256,"line":1787},[254,7626,2327],{"class":264},[254,7628,7629],{"class":256,"line":1793},[254,7630,1705],{"class":264},[254,7632,7633],{"class":256,"line":1814},[254,7634,2540],{"emptyLinePlaceholder":184},[254,7636,7637,7639,7641],{"class":256,"line":1819},[254,7638,268],{"class":260},[254,7640,2113],{"class":2103},[254,7642,2116],{"class":264},[254,7644,7645],{"class":256,"line":1833},[254,7646,1686],{"class":264},[254,7648,7649],{"class":256,"line":1838},[254,7650,7651],{"class":323},"    \u002F\u002F 1.创建数组\n",[254,7653,7654,7656,7658,7660,7662,7664,7666,7668,7670,7672,7674,7676,7678,7680,7682,7684,7686,7688,7690,7692,7694,7696,7698,7700,7702,7704],{"class":256,"line":1867},[254,7655,2125],{"class":260},[254,7657,4102],{"class":264},[254,7659,710],{"class":313},[254,7661,1204],{"class":264},[254,7663,310],{"class":260},[254,7665,1160],{"class":264},[254,7667,557],{"class":313},[254,7669,642],{"class":264},[254,7671,336],{"class":313},[254,7673,642],{"class":264},[254,7675,608],{"class":313},[254,7677,642],{"class":264},[254,7679,684],{"class":313},[254,7681,642],{"class":264},[254,7683,482],{"class":313},[254,7685,642],{"class":264},[254,7687,342],{"class":313},[254,7689,642],{"class":264},[254,7691,710],{"class":313},[254,7693,642],{"class":264},[254,7695,659],{"class":313},[254,7697,642],{"class":264},[254,7699,633],{"class":313},[254,7701,642],{"class":264},[254,7703,583],{"class":313},[254,7705,4135],{"class":264},[254,7707,7708,7710,7712,7714,7716],{"class":256,"line":1872},[254,7709,2125],{"class":260},[254,7711,7472],{"class":264},[254,7713,310],{"class":260},[254,7715,710],{"class":313},[254,7717,1430],{"class":264},[254,7719,7720,7722,7724,7726,7728],{"class":256,"line":1889},[254,7721,2125],{"class":260},[254,7723,6659],{"class":260},[254,7725,14],{"class":264},[254,7727,310],{"class":260},[254,7729,7179],{"class":264},[254,7731,7732],{"class":256,"line":1894},[254,7733,7734],{"class":323},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[254,7736,7737,7740],{"class":256,"line":1899},[254,7738,7739],{"class":2103},"    bubbleSort",[254,7741,7742],{"class":264},"(p,len);\n",[254,7744,7745],{"class":256,"line":1904},[254,7746,2540],{"emptyLinePlaceholder":184},[254,7748,7749],{"class":256,"line":1918},[254,7750,7751],{"class":323},"    \u002F\u002F 3.打印排序后的数组\n",[254,7753,7754,7756,7758,7760,7762,7764,7766,7768,7770,7773,7775],{"class":256,"line":1923},[254,7755,3341],{"class":260},[254,7757,1798],{"class":264},[254,7759,268],{"class":260},[254,7761,3172],{"class":264},[254,7763,310],{"class":260},[254,7765,456],{"class":313},[254,7767,3354],{"class":264},[254,7769,1174],{"class":260},[254,7771,7772],{"class":264},"len; i",[254,7774,2432],{"class":260},[254,7776,271],{"class":264},[254,7778,7779],{"class":256,"line":2717},[254,7780,2170],{"class":264},[254,7782,7783,7785,7787,7789,7791,7794],{"class":256,"line":2731},[254,7784,3591],{"class":264},[254,7786,6560],{"class":260},[254,7788,14],{"class":264},[254,7790,1308],{"class":260},[254,7792,7793],{"class":369},"\"\"",[254,7795,1430],{"class":264},[254,7797,7798,7801,7803],{"class":256,"line":2739},[254,7799,7800],{"class":264},"        p",[254,7802,2432],{"class":260},[254,7804,1430],{"class":264},[254,7806,7807],{"class":256,"line":2744},[254,7808,2327],{"class":264},[254,7810,7811],{"class":256,"line":2750},[254,7812,1705],{"class":264},[5267,7814,7815],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":174,"searchDepth":175,"depth":175,"links":7817},[7818,7819,7820,7821,7822,7823,7824,7825],{"id":6424,"depth":175,"text":6425},{"id":6590,"depth":175,"text":6591},{"id":6746,"depth":175,"text":6747},{"id":6824,"depth":175,"text":6825},{"id":6903,"depth":175,"text":6904},{"id":7002,"depth":175,"text":7003},{"id":7241,"depth":175,"text":7242},{"id":7419,"depth":175,"text":7420},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6413,"description":6421},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":7832,"title":7833,"body":7834,"description":7841,"extension":181,"meta":10815,"navigation":184,"path":10816,"seo":10817,"stem":10818,"__hash__":10819},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":7835,"toc":10806},[7836,7839,7842,7846,7849,7852,7863,8201,8204,8208,8211,8218,8473,8477,8480,8483,8638,8642,8645,8648,8854,8858,8861,9164,9167,9175,9179,9182,9333,9335,9346,9403,9407,9412,10069,10077,10080,10174,10177,10797,10803],[10,7837,7833],{"id":7838},"_4结构体",[14,7840,7841],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[34,7843,7845],{"id":7844},"_41结构体定义与使用","4.1结构体定义与使用",[14,7847,7848],{},"语法：struct 结构体名 {结构体成员列表}；",[14,7850,7851],{},"通过结构体创建变量的方式：",[1271,7853,7854,7857,7860],{},[24,7855,7856],{},"struct 结构体名 变量名",[24,7858,7859],{},"struct 结构体名 变量名={成员1值，成员2值...}",[24,7861,7862],{},"定义结构体时顺便创建变量",[245,7864,7866],{"className":247,"code":7865,"language":249,"meta":174,"style":174},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\n\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\nstruct Student\n{\n    \u002F\u002F成员列表\n\n    \u002F\u002F姓名\n    string name;\n    \u002F\u002F年龄\n    int age;\n    \u002F\u002F分数\n    int score;\n};\nstruct School\n{\n    \u002F\u002F成员列表\n\n    \u002F\u002F姓名\n    string name;\n    \u002F\u002F年龄\n    int age;\n    \u002F\u002F分数\n    int score;\n} s3; \u002F\u002F创建结构体时就创建了变量\nint main()\n{\n    \u002F\u002F2.通过学生类型创建具体学生\n    \u002F\u002F2.1 struct Student s1;\n    struct Student s1;\n    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n    s1.name=\"张三\";\n    s1.age=18;\n    s1.score=66;\n    \u002F\u002F输出结果\n    cout\u003C\u003Cs1.name\u003C\u003Cs1.age\u003C\u003Cs1.score\u003C\u003Cendl;\n\n    \u002F\u002F2.2 struct Student s2={...}\n    struct Student s2={\"王五\",18,66};\n\n    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n    s3.name=\"1\";\n    s3.age=18;\n    s3.score=20;\n}\n",[251,7867,7868,7874,7884,7891,7896,7904,7908,7913,7917,7922,7927,7932,7939,7944,7951,7955,7962,7966,7970,7974,7978,7982,7986,7992,7996,8002,8010,8018,8022,8027,8032,8043,8048,8060,8071,8082,8087,8111,8116,8122,8149,8154,8160,8172,8184,8196],{"__ignoreMap":174},[254,7869,7870,7872],{"class":256,"line":257},[254,7871,2089],{"class":260},[254,7873,2092],{"class":369},[254,7875,7876,7878,7880,7882],{"class":256,"line":175},[254,7877,2097],{"class":260},[254,7879,2100],{"class":260},[254,7881,2104],{"class":2103},[254,7883,1430],{"class":264},[254,7885,7886,7888],{"class":256,"line":1319},[254,7887,2089],{"class":260},[254,7889,7890],{"class":369},"\u003Cstring>\n",[254,7892,7893],{"class":256,"line":1334},[254,7894,7895],{"class":323},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[254,7897,7898,7901],{"class":256,"line":1340},[254,7899,7900],{"class":260},"struct",[254,7902,7903],{"class":2103}," Student\n",[254,7905,7906],{"class":256,"line":1354},[254,7907,1686],{"class":264},[254,7909,7910],{"class":256,"line":1360},[254,7911,7912],{"class":323},"    \u002F\u002F成员列表\n",[254,7914,7915],{"class":256,"line":1451},[254,7916,2540],{"emptyLinePlaceholder":184},[254,7918,7919],{"class":256,"line":1457},[254,7920,7921],{"class":323},"    \u002F\u002F姓名\n",[254,7923,7924],{"class":256,"line":1469},[254,7925,7926],{"class":264},"    string name;\n",[254,7928,7929],{"class":256,"line":1752},[254,7930,7931],{"class":323},"    \u002F\u002F年龄\n",[254,7933,7934,7936],{"class":256,"line":1757},[254,7935,2125],{"class":260},[254,7937,7938],{"class":264}," age;\n",[254,7940,7941],{"class":256,"line":1763},[254,7942,7943],{"class":323},"    \u002F\u002F分数\n",[254,7945,7946,7948],{"class":256,"line":1768},[254,7947,2125],{"class":260},[254,7949,7950],{"class":264}," score;\n",[254,7952,7953],{"class":256,"line":1782},[254,7954,4135],{"class":264},[254,7956,7957,7959],{"class":256,"line":1787},[254,7958,7900],{"class":260},[254,7960,7961],{"class":2103}," School\n",[254,7963,7964],{"class":256,"line":1793},[254,7965,1686],{"class":264},[254,7967,7968],{"class":256,"line":1814},[254,7969,7912],{"class":323},[254,7971,7972],{"class":256,"line":1819},[254,7973,2540],{"emptyLinePlaceholder":184},[254,7975,7976],{"class":256,"line":1833},[254,7977,7921],{"class":323},[254,7979,7980],{"class":256,"line":1838},[254,7981,7926],{"class":264},[254,7983,7984],{"class":256,"line":1867},[254,7985,7931],{"class":323},[254,7987,7988,7990],{"class":256,"line":1872},[254,7989,2125],{"class":260},[254,7991,7938],{"class":264},[254,7993,7994],{"class":256,"line":1889},[254,7995,7943],{"class":323},[254,7997,7998,8000],{"class":256,"line":1894},[254,7999,2125],{"class":260},[254,8001,7950],{"class":264},[254,8003,8004,8007],{"class":256,"line":1899},[254,8005,8006],{"class":264},"} s3;",[254,8008,8009],{"class":323}," \u002F\u002F创建结构体时就创建了变量\n",[254,8011,8012,8014,8016],{"class":256,"line":1904},[254,8013,268],{"class":260},[254,8015,2113],{"class":2103},[254,8017,2116],{"class":264},[254,8019,8020],{"class":256,"line":1918},[254,8021,1686],{"class":264},[254,8023,8024],{"class":256,"line":1923},[254,8025,8026],{"class":323},"    \u002F\u002F2.通过学生类型创建具体学生\n",[254,8028,8029],{"class":256,"line":2717},[254,8030,8031],{"class":323},"    \u002F\u002F2.1 struct Student s1;\n",[254,8033,8034,8037,8040],{"class":256,"line":2731},[254,8035,8036],{"class":260},"    struct",[254,8038,8039],{"class":2103}," Student",[254,8041,8042],{"class":264}," s1;\n",[254,8044,8045],{"class":256,"line":2739},[254,8046,8047],{"class":323},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[254,8049,8050,8053,8055,8058],{"class":256,"line":2744},[254,8051,8052],{"class":264},"    s1.name",[254,8054,310],{"class":260},[254,8056,8057],{"class":369},"\"张三\"",[254,8059,1430],{"class":264},[254,8061,8062,8065,8067,8069],{"class":256,"line":2750},[254,8063,8064],{"class":264},"    s1.age",[254,8066,310],{"class":260},[254,8068,914],{"class":313},[254,8070,1430],{"class":264},[254,8072,8073,8076,8078,8080],{"class":256,"line":2756},[254,8074,8075],{"class":264},"    s1.score",[254,8077,310],{"class":260},[254,8079,518],{"class":313},[254,8081,1430],{"class":264},[254,8083,8084],{"class":256,"line":2761},[254,8085,8086],{"class":323},"    \u002F\u002F输出结果\n",[254,8088,8090,8092,8094,8097,8099,8102,8104,8107,8109],{"class":256,"line":8089},37,[254,8091,1691],{"class":264},[254,8093,1308],{"class":260},[254,8095,8096],{"class":264},"s1.name",[254,8098,1308],{"class":260},[254,8100,8101],{"class":264},"s1.age",[254,8103,1308],{"class":260},[254,8105,8106],{"class":264},"s1.score",[254,8108,1308],{"class":260},[254,8110,1331],{"class":264},[254,8112,8114],{"class":256,"line":8113},38,[254,8115,2540],{"emptyLinePlaceholder":184},[254,8117,8119],{"class":256,"line":8118},39,[254,8120,8121],{"class":323},"    \u002F\u002F2.2 struct Student s2={...}\n",[254,8123,8125,8127,8129,8132,8134,8136,8139,8141,8143,8145,8147],{"class":256,"line":8124},40,[254,8126,8036],{"class":260},[254,8128,8039],{"class":2103},[254,8130,8131],{"class":264}," s2",[254,8133,310],{"class":260},[254,8135,1160],{"class":264},[254,8137,8138],{"class":369},"\"王五\"",[254,8140,642],{"class":264},[254,8142,914],{"class":313},[254,8144,642],{"class":264},[254,8146,518],{"class":313},[254,8148,4135],{"class":264},[254,8150,8152],{"class":256,"line":8151},41,[254,8153,2540],{"emptyLinePlaceholder":184},[254,8155,8157],{"class":256,"line":8156},42,[254,8158,8159],{"class":323},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[254,8161,8163,8166,8168,8170],{"class":256,"line":8162},43,[254,8164,8165],{"class":264},"    s3.name",[254,8167,310],{"class":260},[254,8169,3818],{"class":369},[254,8171,1430],{"class":264},[254,8173,8175,8178,8180,8182],{"class":256,"line":8174},44,[254,8176,8177],{"class":264},"    s3.age",[254,8179,310],{"class":260},[254,8181,914],{"class":313},[254,8183,1430],{"class":264},[254,8185,8187,8190,8192,8194],{"class":256,"line":8186},45,[254,8188,8189],{"class":264},"    s3.score",[254,8191,310],{"class":260},[254,8193,964],{"class":313},[254,8195,1430],{"class":264},[254,8197,8199],{"class":256,"line":8198},46,[254,8200,1705],{"class":264},[14,8202,8203],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[34,8205,8207],{"id":8206},"_42结构体数组","4.2结构体数组",[14,8209,8210],{},"将自定义的结构体放入到数组中方便维护",[14,8212,8213,8214,8217],{},"语法：struct 结构体名 数组名",[254,8215,8216],{},"元素个数","={ {}，{},...{} };",[245,8219,8221],{"className":247,"code":8220,"language":249,"meta":174,"style":174},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\n\u002F\u002F1.定义结构体\nstruct Student\n{\n    string name;\n    int age;\n    int score;\n\n};\nint main()\n{\n    \u002F\u002F2.创建结构体数组\n    struct Student stuArray[2]=\n    {\n        {\"张三\",18,100},\n        {\"1\",15,15}\n    }\n    \u002F\u002F3.给结构体数组中的元素赋值\n    stuArray[1].name=\"2\";\n    stuArray[1].age=2;\n    stuArray[1].score=2;\n    \u002F\u002F4.遍历结构体数组\n    for (int i=0;i\u003C2;i++)\n    {\n        cout\u003C\u003CstuArray[i].name\u003C\u003CstuArray[i].age\u003C\u003CstuArray[i].score\u003C\u003Cendl;\n    }\n}\n",[251,8222,8223,8229,8239,8245,8250,8256,8260,8264,8270,8276,8280,8284,8292,8296,8301,8316,8320,8336,8352,8356,8361,8377,8392,8407,8412,8438,8442,8465,8469],{"__ignoreMap":174},[254,8224,8225,8227],{"class":256,"line":257},[254,8226,2089],{"class":260},[254,8228,2092],{"class":369},[254,8230,8231,8233,8235,8237],{"class":256,"line":175},[254,8232,2097],{"class":260},[254,8234,2100],{"class":260},[254,8236,2104],{"class":2103},[254,8238,1430],{"class":264},[254,8240,8241,8243],{"class":256,"line":1319},[254,8242,2089],{"class":260},[254,8244,7890],{"class":369},[254,8246,8247],{"class":256,"line":1334},[254,8248,8249],{"class":323},"\u002F\u002F1.定义结构体\n",[254,8251,8252,8254],{"class":256,"line":1340},[254,8253,7900],{"class":260},[254,8255,7903],{"class":2103},[254,8257,8258],{"class":256,"line":1354},[254,8259,1686],{"class":264},[254,8261,8262],{"class":256,"line":1360},[254,8263,7926],{"class":264},[254,8265,8266,8268],{"class":256,"line":1451},[254,8267,2125],{"class":260},[254,8269,7938],{"class":264},[254,8271,8272,8274],{"class":256,"line":1457},[254,8273,2125],{"class":260},[254,8275,7950],{"class":264},[254,8277,8278],{"class":256,"line":1469},[254,8279,2540],{"emptyLinePlaceholder":184},[254,8281,8282],{"class":256,"line":1752},[254,8283,4135],{"class":264},[254,8285,8286,8288,8290],{"class":256,"line":1757},[254,8287,268],{"class":260},[254,8289,2113],{"class":2103},[254,8291,2116],{"class":264},[254,8293,8294],{"class":256,"line":1763},[254,8295,1686],{"class":264},[254,8297,8298],{"class":256,"line":1768},[254,8299,8300],{"class":323},"    \u002F\u002F2.创建结构体数组\n",[254,8302,8303,8305,8307,8310,8312,8314],{"class":256,"line":1782},[254,8304,8036],{"class":260},[254,8306,8039],{"class":2103},[254,8308,8309],{"class":264}," stuArray[",[254,8311,342],{"class":313},[254,8313,1204],{"class":264},[254,8315,5048],{"class":260},[254,8317,8318],{"class":256,"line":1787},[254,8319,2170],{"class":264},[254,8321,8322,8324,8326,8328,8330,8332,8334],{"class":256,"line":1793},[254,8323,5057],{"class":264},[254,8325,8057],{"class":369},[254,8327,642],{"class":264},[254,8329,914],{"class":313},[254,8331,642],{"class":264},[254,8333,575],{"class":313},[254,8335,5070],{"class":264},[254,8337,8338,8340,8342,8344,8346,8348,8350],{"class":256,"line":1814},[254,8339,5057],{"class":264},[254,8341,3818],{"class":369},[254,8343,642],{"class":264},[254,8345,839],{"class":313},[254,8347,642],{"class":264},[254,8349,839],{"class":313},[254,8351,1705],{"class":264},[254,8353,8354],{"class":256,"line":1819},[254,8355,2327],{"class":264},[254,8357,8358],{"class":256,"line":1833},[254,8359,8360],{"class":323},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[254,8362,8363,8366,8368,8371,8373,8375],{"class":256,"line":1838},[254,8364,8365],{"class":264},"    stuArray[",[254,8367,482],{"class":313},[254,8369,8370],{"class":264},"].name",[254,8372,310],{"class":260},[254,8374,3841],{"class":369},[254,8376,1430],{"class":264},[254,8378,8379,8381,8383,8386,8388,8390],{"class":256,"line":1867},[254,8380,8365],{"class":264},[254,8382,482],{"class":313},[254,8384,8385],{"class":264},"].age",[254,8387,310],{"class":260},[254,8389,342],{"class":313},[254,8391,1430],{"class":264},[254,8393,8394,8396,8398,8401,8403,8405],{"class":256,"line":1872},[254,8395,8365],{"class":264},[254,8397,482],{"class":313},[254,8399,8400],{"class":264},"].score",[254,8402,310],{"class":260},[254,8404,342],{"class":313},[254,8406,1430],{"class":264},[254,8408,8409],{"class":256,"line":1889},[254,8410,8411],{"class":323},"    \u002F\u002F4.遍历结构体数组\n",[254,8413,8414,8416,8418,8420,8422,8424,8426,8428,8430,8432,8434,8436],{"class":256,"line":1894},[254,8415,3341],{"class":260},[254,8417,1798],{"class":264},[254,8419,268],{"class":260},[254,8421,3172],{"class":264},[254,8423,310],{"class":260},[254,8425,456],{"class":313},[254,8427,3179],{"class":264},[254,8429,1174],{"class":260},[254,8431,342],{"class":313},[254,8433,3179],{"class":264},[254,8435,2432],{"class":260},[254,8437,271],{"class":264},[254,8439,8440],{"class":256,"line":1899},[254,8441,2170],{"class":264},[254,8443,8444,8446,8448,8451,8453,8456,8458,8461,8463],{"class":256,"line":1904},[254,8445,3591],{"class":264},[254,8447,1308],{"class":260},[254,8449,8450],{"class":264},"stuArray[i].name",[254,8452,1308],{"class":260},[254,8454,8455],{"class":264},"stuArray[i].age",[254,8457,1308],{"class":260},[254,8459,8460],{"class":264},"stuArray[i].score",[254,8462,1308],{"class":260},[254,8464,1331],{"class":264},[254,8466,8467],{"class":256,"line":1918},[254,8468,2327],{"class":264},[254,8470,8471],{"class":256,"line":1923},[254,8472,1705],{"class":264},[34,8474,8476],{"id":8475},"_43结构体指针","4.3结构体指针",[14,8478,8479],{},"作用：通过指针访问结构体中的成员",[14,8481,8482],{},"利用操作符->可以通过结构体指针访问结构体属性",[245,8484,8486],{"className":247,"code":8485,"language":249,"meta":174,"style":174},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\n\u002F\u002F1.定义结构体\nstruct Student\n{\n    string name;\n    int age;\n    int score;\n};\nint main()\n{\n    \u002F\u002F创建学生结构体变量\n    struct Student s={\"张三\",18,200};\n    \u002F\u002F通过指针指向结构体变量\n    struct Student *p=&s\n    \u002F\u002F通过指针访问结构体变量中的数据\n    cout\u003C\u003Cp->name\u003C\u003Cp->age\u003C\u003Cp->score\u003C\u003Cendl;\n}\n",[251,8487,8488,8494,8504,8510,8514,8520,8524,8528,8534,8540,8544,8552,8556,8561,8586,8591,8606,8611,8634],{"__ignoreMap":174},[254,8489,8490,8492],{"class":256,"line":257},[254,8491,2089],{"class":260},[254,8493,2092],{"class":369},[254,8495,8496,8498,8500,8502],{"class":256,"line":175},[254,8497,2097],{"class":260},[254,8499,2100],{"class":260},[254,8501,2104],{"class":2103},[254,8503,1430],{"class":264},[254,8505,8506,8508],{"class":256,"line":1319},[254,8507,2089],{"class":260},[254,8509,7890],{"class":369},[254,8511,8512],{"class":256,"line":1334},[254,8513,8249],{"class":323},[254,8515,8516,8518],{"class":256,"line":1340},[254,8517,7900],{"class":260},[254,8519,7903],{"class":2103},[254,8521,8522],{"class":256,"line":1354},[254,8523,1686],{"class":264},[254,8525,8526],{"class":256,"line":1360},[254,8527,7926],{"class":264},[254,8529,8530,8532],{"class":256,"line":1451},[254,8531,2125],{"class":260},[254,8533,7938],{"class":264},[254,8535,8536,8538],{"class":256,"line":1457},[254,8537,2125],{"class":260},[254,8539,7950],{"class":264},[254,8541,8542],{"class":256,"line":1469},[254,8543,4135],{"class":264},[254,8545,8546,8548,8550],{"class":256,"line":1752},[254,8547,268],{"class":260},[254,8549,2113],{"class":2103},[254,8551,2116],{"class":264},[254,8553,8554],{"class":256,"line":1757},[254,8555,1686],{"class":264},[254,8557,8558],{"class":256,"line":1763},[254,8559,8560],{"class":323},"    \u002F\u002F创建学生结构体变量\n",[254,8562,8563,8565,8567,8570,8572,8574,8576,8578,8580,8582,8584],{"class":256,"line":1768},[254,8564,8036],{"class":260},[254,8566,8039],{"class":2103},[254,8568,8569],{"class":264}," s",[254,8571,310],{"class":260},[254,8573,1160],{"class":264},[254,8575,8057],{"class":369},[254,8577,642],{"class":264},[254,8579,914],{"class":313},[254,8581,642],{"class":264},[254,8583,1862],{"class":313},[254,8585,4135],{"class":264},[254,8587,8588],{"class":256,"line":1782},[254,8589,8590],{"class":323},"    \u002F\u002F通过指针指向结构体变量\n",[254,8592,8593,8595,8597,8599,8601,8603],{"class":256,"line":1787},[254,8594,8036],{"class":260},[254,8596,8039],{"class":2103},[254,8598,6659],{"class":260},[254,8600,14],{"class":264},[254,8602,6480],{"class":260},[254,8604,8605],{"class":264},"s\n",[254,8607,8608],{"class":256,"line":1793},[254,8609,8610],{"class":323},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[254,8612,8613,8615,8617,8620,8622,8625,8627,8630,8632],{"class":256,"line":1814},[254,8614,1691],{"class":264},[254,8616,1308],{"class":260},[254,8618,8619],{"class":264},"p->name",[254,8621,1308],{"class":260},[254,8623,8624],{"class":264},"p->age",[254,8626,1308],{"class":260},[254,8628,8629],{"class":264},"p->score",[254,8631,1308],{"class":260},[254,8633,1331],{"class":264},[254,8635,8636],{"class":256,"line":1819},[254,8637,1705],{"class":264},[34,8639,8641],{"id":8640},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[14,8643,8644],{},"作用：结构体中的成员可以是另一个结构体",[14,8646,8647],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[245,8649,8651],{"className":247,"code":8650,"language":249,"meta":174,"style":174},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\n\u002F\u002F定义学生结构体\nstruct Student \n{\n    string name;\n    int age;\n    int score;\n}\n\u002F\u002F定义老师结构体\nstruct Teacher\n{\n    int id;\n    string name;\n    int age;\n    Student stu;\n}\nint main() \n{\n    \u002F\u002F结构体嵌套结构体\n    \u002F\u002F创建老师\n    Teacher t;\n    t.id=100;\n    t.name=\"老王\";\n    t.age=18;\n    t.stu.name=\"小王\"；\n    t.stu.age=20;\n    t.stu.score=6;\n}\n",[251,8652,8653,8659,8669,8675,8680,8688,8692,8696,8702,8708,8712,8717,8724,8728,8735,8739,8745,8750,8754,8762,8766,8771,8776,8781,8792,8804,8815,8828,8839,8850],{"__ignoreMap":174},[254,8654,8655,8657],{"class":256,"line":257},[254,8656,2089],{"class":260},[254,8658,2092],{"class":369},[254,8660,8661,8663,8665,8667],{"class":256,"line":175},[254,8662,2097],{"class":260},[254,8664,2100],{"class":260},[254,8666,2104],{"class":2103},[254,8668,1430],{"class":264},[254,8670,8671,8673],{"class":256,"line":1319},[254,8672,2089],{"class":260},[254,8674,7890],{"class":369},[254,8676,8677],{"class":256,"line":1334},[254,8678,8679],{"class":323},"\u002F\u002F定义学生结构体\n",[254,8681,8682,8684,8686],{"class":256,"line":1340},[254,8683,7900],{"class":260},[254,8685,8039],{"class":2103},[254,8687,2814],{"class":264},[254,8689,8690],{"class":256,"line":1354},[254,8691,1686],{"class":264},[254,8693,8694],{"class":256,"line":1360},[254,8695,7926],{"class":264},[254,8697,8698,8700],{"class":256,"line":1451},[254,8699,2125],{"class":260},[254,8701,7938],{"class":264},[254,8703,8704,8706],{"class":256,"line":1457},[254,8705,2125],{"class":260},[254,8707,7950],{"class":264},[254,8709,8710],{"class":256,"line":1469},[254,8711,1705],{"class":264},[254,8713,8714],{"class":256,"line":1752},[254,8715,8716],{"class":323},"\u002F\u002F定义老师结构体\n",[254,8718,8719,8721],{"class":256,"line":1757},[254,8720,7900],{"class":260},[254,8722,8723],{"class":2103}," Teacher\n",[254,8725,8726],{"class":256,"line":1763},[254,8727,1686],{"class":264},[254,8729,8730,8732],{"class":256,"line":1768},[254,8731,2125],{"class":260},[254,8733,8734],{"class":264}," id;\n",[254,8736,8737],{"class":256,"line":1782},[254,8738,7926],{"class":264},[254,8740,8741,8743],{"class":256,"line":1787},[254,8742,2125],{"class":260},[254,8744,7938],{"class":264},[254,8746,8747],{"class":256,"line":1793},[254,8748,8749],{"class":264},"    Student stu;\n",[254,8751,8752],{"class":256,"line":1814},[254,8753,1705],{"class":264},[254,8755,8756,8758,8760],{"class":256,"line":1819},[254,8757,268],{"class":260},[254,8759,2113],{"class":2103},[254,8761,6119],{"class":264},[254,8763,8764],{"class":256,"line":1833},[254,8765,1686],{"class":264},[254,8767,8768],{"class":256,"line":1838},[254,8769,8770],{"class":323},"    \u002F\u002F结构体嵌套结构体\n",[254,8772,8773],{"class":256,"line":1867},[254,8774,8775],{"class":323},"    \u002F\u002F创建老师\n",[254,8777,8778],{"class":256,"line":1872},[254,8779,8780],{"class":264},"    Teacher t;\n",[254,8782,8783,8786,8788,8790],{"class":256,"line":1889},[254,8784,8785],{"class":264},"    t.id",[254,8787,310],{"class":260},[254,8789,575],{"class":313},[254,8791,1430],{"class":264},[254,8793,8794,8797,8799,8802],{"class":256,"line":1894},[254,8795,8796],{"class":264},"    t.name",[254,8798,310],{"class":260},[254,8800,8801],{"class":369},"\"老王\"",[254,8803,1430],{"class":264},[254,8805,8806,8809,8811,8813],{"class":256,"line":1899},[254,8807,8808],{"class":264},"    t.age",[254,8810,310],{"class":260},[254,8812,914],{"class":313},[254,8814,1430],{"class":264},[254,8816,8817,8820,8822,8825],{"class":256,"line":1904},[254,8818,8819],{"class":264},"    t.stu.name",[254,8821,310],{"class":260},[254,8823,8824],{"class":369},"\"小王\"",[254,8826,8827],{"class":264},"；\n",[254,8829,8830,8833,8835,8837],{"class":256,"line":1918},[254,8831,8832],{"class":264},"    t.stu.age",[254,8834,310],{"class":260},[254,8836,964],{"class":313},[254,8838,1430],{"class":264},[254,8840,8841,8844,8846,8848],{"class":256,"line":1923},[254,8842,8843],{"class":264},"    t.stu.score",[254,8845,310],{"class":260},[254,8847,608],{"class":313},[254,8849,1430],{"class":264},[254,8851,8852],{"class":256,"line":2717},[254,8853,1705],{"class":264},[34,8855,8857],{"id":8856},"_45结构体做函数参数","4.5结构体做函数参数",[14,8859,8860],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[245,8862,8864],{"className":247,"code":8863,"language":249,"meta":174,"style":174},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\nstruct Student\n{\n    string name;\n    int age;\n    int score;\n};\n\u002F\u002F打印学生信息的函数\n\u002F\u002F值传递\nvoid printStudent1(struct Student s)\n{\n    cout \u003C\u003C s.name \u003C\u003C \" \" \u003C\u003C s.age \u003C\u003C \" \" \u003C\u003C s.score \u003C\u003C endl;\n}\n\u002F\u002F地址传递\nvoid printStudent2(struct Student *s)\n{\n    cout \u003C\u003C s->name \u003C\u003C \" \" \u003C\u003C s->age \u003C\u003C \" \" \u003C\u003C s->score \u003C\u003C endl;\n}\nint main()\n{\n    struct Student s;\n    s.name = \"张三\";\n    s.age = 20;\n    s.score = 85;\n    cout\u003C\u003C\"值传递:\"\u003C\u003Cendl;\n    printStudent1(s);\n    cout\u003C\u003C\"地址传递:\"\u003C\u003Cendl;\n    printStudent2(&s); \n    return 0;\n}\n",[251,8865,8866,8872,8882,8888,8894,8898,8902,8908,8914,8918,8923,8928,8945,8949,8982,8986,8991,9010,9014,9045,9049,9057,9061,9070,9082,9094,9106,9119,9127,9140,9152,9160],{"__ignoreMap":174},[254,8867,8868,8870],{"class":256,"line":257},[254,8869,2089],{"class":260},[254,8871,2092],{"class":369},[254,8873,8874,8876,8878,8880],{"class":256,"line":175},[254,8875,2097],{"class":260},[254,8877,2100],{"class":260},[254,8879,2104],{"class":2103},[254,8881,1430],{"class":264},[254,8883,8884,8886],{"class":256,"line":1319},[254,8885,2089],{"class":260},[254,8887,7890],{"class":369},[254,8889,8890,8892],{"class":256,"line":1334},[254,8891,7900],{"class":260},[254,8893,7903],{"class":2103},[254,8895,8896],{"class":256,"line":1340},[254,8897,1686],{"class":264},[254,8899,8900],{"class":256,"line":1354},[254,8901,7926],{"class":264},[254,8903,8904,8906],{"class":256,"line":1360},[254,8905,2125],{"class":260},[254,8907,7938],{"class":264},[254,8909,8910,8912],{"class":256,"line":1451},[254,8911,2125],{"class":260},[254,8913,7950],{"class":264},[254,8915,8916],{"class":256,"line":1457},[254,8917,4135],{"class":264},[254,8919,8920],{"class":256,"line":1469},[254,8921,8922],{"class":323},"\u002F\u002F打印学生信息的函数\n",[254,8924,8925],{"class":256,"line":1752},[254,8926,8927],{"class":323},"\u002F\u002F值传递\n",[254,8929,8930,8932,8935,8937,8939,8941,8943],{"class":256,"line":1757},[254,8931,5505],{"class":260},[254,8933,8934],{"class":2103}," printStudent1",[254,8936,265],{"class":264},[254,8938,7900],{"class":260},[254,8940,8039],{"class":2103},[254,8942,8569],{"class":5357},[254,8944,271],{"class":264},[254,8946,8947],{"class":256,"line":1763},[254,8948,1686],{"class":264},[254,8950,8951,8953,8955,8958,8960,8963,8965,8968,8970,8972,8974,8977,8979],{"class":256,"line":1768},[254,8952,6670],{"class":264},[254,8954,1308],{"class":260},[254,8956,8957],{"class":264}," s.name ",[254,8959,1308],{"class":260},[254,8961,8962],{"class":369}," \" \"",[254,8964,1584],{"class":260},[254,8966,8967],{"class":264}," s.age ",[254,8969,1308],{"class":260},[254,8971,8962],{"class":369},[254,8973,1584],{"class":260},[254,8975,8976],{"class":264}," s.score ",[254,8978,1308],{"class":260},[254,8980,8981],{"class":264}," endl;\n",[254,8983,8984],{"class":256,"line":1782},[254,8985,1705],{"class":264},[254,8987,8988],{"class":256,"line":1787},[254,8989,8990],{"class":323},"\u002F\u002F地址传递\n",[254,8992,8993,8995,8998,9000,9002,9004,9006,9008],{"class":256,"line":1793},[254,8994,5505],{"class":260},[254,8996,8997],{"class":2103}," printStudent2",[254,8999,265],{"class":264},[254,9001,7900],{"class":260},[254,9003,8039],{"class":2103},[254,9005,6659],{"class":260},[254,9007,959],{"class":5357},[254,9009,271],{"class":264},[254,9011,9012],{"class":256,"line":1814},[254,9013,1686],{"class":264},[254,9015,9016,9018,9020,9023,9025,9027,9029,9032,9034,9036,9038,9041,9043],{"class":256,"line":1819},[254,9017,6670],{"class":264},[254,9019,1308],{"class":260},[254,9021,9022],{"class":264}," s->name ",[254,9024,1308],{"class":260},[254,9026,8962],{"class":369},[254,9028,1584],{"class":260},[254,9030,9031],{"class":264}," s->age ",[254,9033,1308],{"class":260},[254,9035,8962],{"class":369},[254,9037,1584],{"class":260},[254,9039,9040],{"class":264}," s->score ",[254,9042,1308],{"class":260},[254,9044,8981],{"class":264},[254,9046,9047],{"class":256,"line":1833},[254,9048,1705],{"class":264},[254,9050,9051,9053,9055],{"class":256,"line":1838},[254,9052,268],{"class":260},[254,9054,2113],{"class":2103},[254,9056,2116],{"class":264},[254,9058,9059],{"class":256,"line":1867},[254,9060,1686],{"class":264},[254,9062,9063,9065,9067],{"class":256,"line":1872},[254,9064,8036],{"class":260},[254,9066,8039],{"class":2103},[254,9068,9069],{"class":264}," s;\n",[254,9071,9072,9075,9077,9080],{"class":256,"line":1889},[254,9073,9074],{"class":264},"    s.name ",[254,9076,310],{"class":260},[254,9078,9079],{"class":369}," \"张三\"",[254,9081,1430],{"class":264},[254,9083,9084,9087,9089,9092],{"class":256,"line":1894},[254,9085,9086],{"class":264},"    s.age ",[254,9088,310],{"class":260},[254,9090,9091],{"class":313}," 20",[254,9093,1430],{"class":264},[254,9095,9096,9099,9101,9104],{"class":256,"line":1899},[254,9097,9098],{"class":264},"    s.score ",[254,9100,310],{"class":260},[254,9102,9103],{"class":313}," 85",[254,9105,1430],{"class":264},[254,9107,9108,9110,9112,9115,9117],{"class":256,"line":1904},[254,9109,1691],{"class":264},[254,9111,1308],{"class":260},[254,9113,9114],{"class":369},"\"值传递:\"",[254,9116,1308],{"class":260},[254,9118,1331],{"class":264},[254,9120,9121,9124],{"class":256,"line":1918},[254,9122,9123],{"class":2103},"    printStudent1",[254,9125,9126],{"class":264},"(s);\n",[254,9128,9129,9131,9133,9136,9138],{"class":256,"line":1923},[254,9130,1691],{"class":264},[254,9132,1308],{"class":260},[254,9134,9135],{"class":369},"\"地址传递:\"",[254,9137,1308],{"class":260},[254,9139,1331],{"class":264},[254,9141,9142,9145,9147,9149],{"class":256,"line":2717},[254,9143,9144],{"class":2103},"    printStudent2",[254,9146,265],{"class":264},[254,9148,617],{"class":260},[254,9150,9151],{"class":264},"s); \n",[254,9153,9154,9156,9158],{"class":256,"line":2731},[254,9155,4230],{"class":260},[254,9157,4233],{"class":313},[254,9159,1430],{"class":264},[254,9161,9162],{"class":256,"line":2739},[254,9163,1705],{"class":264},[14,9165,9166],{},"注意：",[1271,9168,9169,9172],{},[24,9170,9171],{},"1.先定义结构体，不要在函数中写结构体的定义",[24,9173,9174],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[34,9176,9178],{"id":9177},"_46结构体中const使用场景","4.6结构体中const使用场景",[14,9180,9181],{},"用const防止误操作",[245,9183,9185],{"className":247,"code":9184,"language":249,"meta":174,"style":174},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\nsctuct Student\n{\n    string name;\n    int age;\n    int score;\n};\nvoid printStudents(student s)\n{\n    cout\u003C\u003Cs.name\u003C\u003Cs.age\u003C\u003Cs.score\u003C\u003Cendl;\n}\nint main() \n{\n    Student s={\"张三\",18,18};\n    printStudent(s);\n\n}\n",[251,9186,9187,9193,9203,9209,9214,9218,9222,9228,9234,9238,9254,9258,9281,9285,9293,9297,9318,9325,9329],{"__ignoreMap":174},[254,9188,9189,9191],{"class":256,"line":257},[254,9190,2089],{"class":260},[254,9192,2092],{"class":369},[254,9194,9195,9197,9199,9201],{"class":256,"line":175},[254,9196,2097],{"class":260},[254,9198,2100],{"class":260},[254,9200,2104],{"class":2103},[254,9202,1430],{"class":264},[254,9204,9205,9207],{"class":256,"line":1319},[254,9206,2089],{"class":260},[254,9208,7890],{"class":369},[254,9210,9211],{"class":256,"line":1334},[254,9212,9213],{"class":264},"sctuct Student\n",[254,9215,9216],{"class":256,"line":1340},[254,9217,1686],{"class":264},[254,9219,9220],{"class":256,"line":1354},[254,9221,7926],{"class":264},[254,9223,9224,9226],{"class":256,"line":1360},[254,9225,2125],{"class":260},[254,9227,7938],{"class":264},[254,9229,9230,9232],{"class":256,"line":1451},[254,9231,2125],{"class":260},[254,9233,7950],{"class":264},[254,9235,9236],{"class":256,"line":1457},[254,9237,4135],{"class":264},[254,9239,9240,9242,9245,9247,9250,9252],{"class":256,"line":1469},[254,9241,5505],{"class":260},[254,9243,9244],{"class":2103}," printStudents",[254,9246,265],{"class":264},[254,9248,9249],{"class":2103},"student",[254,9251,8569],{"class":5357},[254,9253,271],{"class":264},[254,9255,9256],{"class":256,"line":1752},[254,9257,1686],{"class":264},[254,9259,9260,9262,9264,9267,9269,9272,9274,9277,9279],{"class":256,"line":1757},[254,9261,1691],{"class":264},[254,9263,1308],{"class":260},[254,9265,9266],{"class":264},"s.name",[254,9268,1308],{"class":260},[254,9270,9271],{"class":264},"s.age",[254,9273,1308],{"class":260},[254,9275,9276],{"class":264},"s.score",[254,9278,1308],{"class":260},[254,9280,1331],{"class":264},[254,9282,9283],{"class":256,"line":1763},[254,9284,1705],{"class":264},[254,9286,9287,9289,9291],{"class":256,"line":1768},[254,9288,268],{"class":260},[254,9290,2113],{"class":2103},[254,9292,6119],{"class":264},[254,9294,9295],{"class":256,"line":1782},[254,9296,1686],{"class":264},[254,9298,9299,9302,9304,9306,9308,9310,9312,9314,9316],{"class":256,"line":1787},[254,9300,9301],{"class":264},"    Student s",[254,9303,310],{"class":260},[254,9305,1160],{"class":264},[254,9307,8057],{"class":369},[254,9309,642],{"class":264},[254,9311,914],{"class":313},[254,9313,642],{"class":264},[254,9315,914],{"class":313},[254,9317,4135],{"class":264},[254,9319,9320,9323],{"class":256,"line":1793},[254,9321,9322],{"class":2103},"    printStudent",[254,9324,9126],{"class":264},[254,9326,9327],{"class":256,"line":1814},[254,9328,2540],{"emptyLinePlaceholder":184},[254,9330,9331],{"class":256,"line":1819},[254,9332,1705],{"class":264},[14,9334,9166],{},[1271,9336,9337,9340,9343],{},[24,9338,9339],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[24,9341,9342],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[24,9344,9345],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[245,9347,9349],{"className":247,"code":9348,"language":249,"meta":174,"style":174},"void printStudents(const student *s)\n{\n    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n    cout\u003C\u003Cs.name\u003C\u003Cs.age\u003C\u003Cs.score\u003C\u003Cendl;\n}\n",[251,9350,9351,9370,9374,9379,9399],{"__ignoreMap":174},[254,9352,9353,9355,9357,9359,9361,9364,9366,9368],{"class":256,"line":257},[254,9354,5505],{"class":260},[254,9356,9244],{"class":2103},[254,9358,265],{"class":264},[254,9360,6933],{"class":260},[254,9362,9363],{"class":2103}," student",[254,9365,6659],{"class":260},[254,9367,959],{"class":5357},[254,9369,271],{"class":264},[254,9371,9372],{"class":256,"line":175},[254,9373,1686],{"class":264},[254,9375,9376],{"class":256,"line":1319},[254,9377,9378],{"class":323},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[254,9380,9381,9383,9385,9387,9389,9391,9393,9395,9397],{"class":256,"line":1334},[254,9382,1691],{"class":264},[254,9384,1308],{"class":260},[254,9386,9266],{"class":264},[254,9388,1308],{"class":260},[254,9390,9271],{"class":264},[254,9392,1308],{"class":260},[254,9394,9276],{"class":264},[254,9396,1308],{"class":260},[254,9398,1331],{"class":264},[254,9400,9401],{"class":256,"line":1340},[254,9402,1705],{"class":264},[34,9404,9406],{"id":9405},"_47案例","4.7案例",[21,9408,9409],{},[24,9410,9411],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[245,9413,9415],{"className":247,"code":9414,"language":249,"meta":174,"style":174},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\n#include\u003Cctime>\n\u002F\u002F定义学生结构体\nstruct Student\n{\n    string sName;\n    int age;\n    int score;\n};\n\u002F\u002F定义老师结构体\nstruct Teacher\n{\n    string tName;\n    \u002F\u002F学生数组\n    struct Student sArray[5];\n};\n\u002F\u002F给老师和学生赋值的函数\nvoid allocateSpace(struct Teacher tArray[],int len)\n{\n    string nameSeed=\"ABCDE\";\n    for (int i = 0; i \u003C len; i++)\n    {\n        tArray[i].tName = \"Teacher_\";\n        tArray[i].tName +=nameSeed[i];\n\n        \u002F\u002F通过循环给每名老师带的学生赋值\n        for (int j = 0; j \u003C 5; j++)\n        {\n            tArray[i].sArray[j].sName = \"Student_\";\n            tArray[i].sArray[j].sName += nameSeed[j];\n            int random=rand()%60+40;\u002F\u002F40~99\n            tArray[i].sArray[j].age = 20;\n            tArray[i].sArray[j].score = random;\n        }\n    }\n}\n\u002F\u002F打印所有信息的函数\nvoid printInfo(struct Teacher tArray[], int len)\n{\n    for (int i = 0; i \u003C len; i++)\n    {\n        cout \u003C\u003C \"Teacher: \" \u003C\u003C tArray[i].tName \u003C\u003C endl;\n        for (int j = 0; j \u003C 5; j++)\n        {\n            cout \u003C\u003C \"\\tStudent: \" \u003C\u003C tArray[i].sArray[j].sName\u003C\u003Cendl;\n            cout \u003C\u003C \"\\tAge: \" \u003C\u003C tArray[i].sArray[j].age \u003C\u003C endl;\n            cout \u003C\u003C \"\\tScore: \" \u003C\u003C tArray[i].sArray[j].score \u003C\u003C endl;   \n        }\n    }\n}\nint main()\n{\n    \u002F\u002F随机数种子\n    srand((unsigned int)time(NULL));\n    \u002F\u002F1.创建3名老师的数组\n    struct Teacher tArray[3];\n    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n    int len = sizeof(tArray) \u002F sizeof(tArray[0]);\n    allocateSpace(tArray, len);\n    \u002F\u002F3.打印所有老师及所带的学生信息\n    printInfo(tArray, len);\n\n}\n",[251,9416,9417,9423,9433,9439,9446,9450,9456,9460,9465,9471,9477,9481,9485,9491,9495,9500,9505,9518,9522,9527,9553,9557,9569,9596,9600,9612,9622,9626,9631,9660,9664,9676,9685,9712,9723,9733,9737,9741,9745,9750,9774,9778,9802,9806,9825,9851,9855,9880,9903,9927,9932,9937,9942,9951,9956,9962,9983,9989,10003,10009,10036,10045,10051,10059,10064],{"__ignoreMap":174},[254,9418,9419,9421],{"class":256,"line":257},[254,9420,2089],{"class":260},[254,9422,2092],{"class":369},[254,9424,9425,9427,9429,9431],{"class":256,"line":175},[254,9426,2097],{"class":260},[254,9428,2100],{"class":260},[254,9430,2104],{"class":2103},[254,9432,1430],{"class":264},[254,9434,9435,9437],{"class":256,"line":1319},[254,9436,2089],{"class":260},[254,9438,7890],{"class":369},[254,9440,9441,9443],{"class":256,"line":1334},[254,9442,2089],{"class":260},[254,9444,9445],{"class":369},"\u003Cctime>\n",[254,9447,9448],{"class":256,"line":1340},[254,9449,8679],{"class":323},[254,9451,9452,9454],{"class":256,"line":1354},[254,9453,7900],{"class":260},[254,9455,7903],{"class":2103},[254,9457,9458],{"class":256,"line":1360},[254,9459,1686],{"class":264},[254,9461,9462],{"class":256,"line":1451},[254,9463,9464],{"class":264},"    string sName;\n",[254,9466,9467,9469],{"class":256,"line":1457},[254,9468,2125],{"class":260},[254,9470,7938],{"class":264},[254,9472,9473,9475],{"class":256,"line":1469},[254,9474,2125],{"class":260},[254,9476,7950],{"class":264},[254,9478,9479],{"class":256,"line":1752},[254,9480,4135],{"class":264},[254,9482,9483],{"class":256,"line":1757},[254,9484,8716],{"class":323},[254,9486,9487,9489],{"class":256,"line":1763},[254,9488,7900],{"class":260},[254,9490,8723],{"class":2103},[254,9492,9493],{"class":256,"line":1768},[254,9494,1686],{"class":264},[254,9496,9497],{"class":256,"line":1782},[254,9498,9499],{"class":264},"    string tName;\n",[254,9501,9502],{"class":256,"line":1787},[254,9503,9504],{"class":323},"    \u002F\u002F学生数组\n",[254,9506,9507,9509,9511,9514,9516],{"class":256,"line":1793},[254,9508,8036],{"class":260},[254,9510,8039],{"class":2103},[254,9512,9513],{"class":264}," sArray[",[254,9515,583],{"class":313},[254,9517,4830],{"class":264},[254,9519,9520],{"class":256,"line":1814},[254,9521,4135],{"class":264},[254,9523,9524],{"class":256,"line":1819},[254,9525,9526],{"class":323},"\u002F\u002F给老师和学生赋值的函数\n",[254,9528,9529,9531,9534,9536,9538,9541,9544,9547,9549,9551],{"class":256,"line":1833},[254,9530,5505],{"class":260},[254,9532,9533],{"class":2103}," allocateSpace",[254,9535,265],{"class":264},[254,9537,7900],{"class":260},[254,9539,9540],{"class":2103}," Teacher",[254,9542,9543],{"class":5357}," tArray",[254,9545,9546],{"class":264},"[],",[254,9548,268],{"class":260},[254,9550,7472],{"class":5357},[254,9552,271],{"class":264},[254,9554,9555],{"class":256,"line":1838},[254,9556,1686],{"class":264},[254,9558,9559,9562,9564,9567],{"class":256,"line":1867},[254,9560,9561],{"class":264},"    string nameSeed",[254,9563,310],{"class":260},[254,9565,9566],{"class":369},"\"ABCDE\"",[254,9568,1430],{"class":264},[254,9570,9571,9573,9575,9577,9580,9582,9584,9587,9589,9592,9594],{"class":256,"line":1872},[254,9572,3341],{"class":260},[254,9574,1798],{"class":264},[254,9576,268],{"class":260},[254,9578,9579],{"class":264}," i ",[254,9581,310],{"class":260},[254,9583,4233],{"class":313},[254,9585,9586],{"class":264},"; i ",[254,9588,1174],{"class":260},[254,9590,9591],{"class":264}," len; i",[254,9593,2432],{"class":260},[254,9595,271],{"class":264},[254,9597,9598],{"class":256,"line":1889},[254,9599,2170],{"class":264},[254,9601,9602,9605,9607,9610],{"class":256,"line":1894},[254,9603,9604],{"class":264},"        tArray[i].tName ",[254,9606,310],{"class":260},[254,9608,9609],{"class":369}," \"Teacher_\"",[254,9611,1430],{"class":264},[254,9613,9614,9616,9619],{"class":256,"line":1899},[254,9615,9604],{"class":264},[254,9617,9618],{"class":260},"+=",[254,9620,9621],{"class":264},"nameSeed[i];\n",[254,9623,9624],{"class":256,"line":1904},[254,9625,2540],{"emptyLinePlaceholder":184},[254,9627,9628],{"class":256,"line":1918},[254,9629,9630],{"class":323},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[254,9632,9633,9635,9637,9639,9642,9644,9646,9649,9651,9653,9656,9658],{"class":256,"line":1923},[254,9634,3543],{"class":260},[254,9636,1798],{"class":264},[254,9638,268],{"class":260},[254,9640,9641],{"class":264}," j ",[254,9643,310],{"class":260},[254,9645,4233],{"class":313},[254,9647,9648],{"class":264},"; j ",[254,9650,1174],{"class":260},[254,9652,2288],{"class":313},[254,9654,9655],{"class":264},"; j",[254,9657,2432],{"class":260},[254,9659,271],{"class":264},[254,9661,9662],{"class":256,"line":2717},[254,9663,2650],{"class":264},[254,9665,9666,9669,9671,9674],{"class":256,"line":2731},[254,9667,9668],{"class":264},"            tArray[i].sArray[j].sName ",[254,9670,310],{"class":260},[254,9672,9673],{"class":369}," \"Student_\"",[254,9675,1430],{"class":264},[254,9677,9678,9680,9682],{"class":256,"line":2739},[254,9679,9668],{"class":264},[254,9681,9618],{"class":260},[254,9683,9684],{"class":264}," nameSeed[j];\n",[254,9686,9687,9690,9693,9695,9697,9699,9701,9703,9705,9707,9709],{"class":256,"line":2744},[254,9688,9689],{"class":260},"            int",[254,9691,9692],{"class":264}," random",[254,9694,310],{"class":260},[254,9696,2564],{"class":2103},[254,9698,2567],{"class":264},[254,9700,592],{"class":260},[254,9702,1171],{"class":313},[254,9704,745],{"class":260},[254,9706,665],{"class":313},[254,9708,320],{"class":264},[254,9710,9711],{"class":323},"\u002F\u002F40~99\n",[254,9713,9714,9717,9719,9721],{"class":256,"line":2750},[254,9715,9716],{"class":264},"            tArray[i].sArray[j].age ",[254,9718,310],{"class":260},[254,9720,9091],{"class":313},[254,9722,1430],{"class":264},[254,9724,9725,9728,9730],{"class":256,"line":2756},[254,9726,9727],{"class":264},"            tArray[i].sArray[j].score ",[254,9729,310],{"class":260},[254,9731,9732],{"class":264}," random;\n",[254,9734,9735],{"class":256,"line":2761},[254,9736,2669],{"class":264},[254,9738,9739],{"class":256,"line":8089},[254,9740,2327],{"class":264},[254,9742,9743],{"class":256,"line":8113},[254,9744,1705],{"class":264},[254,9746,9747],{"class":256,"line":8118},[254,9748,9749],{"class":323},"\u002F\u002F打印所有信息的函数\n",[254,9751,9752,9754,9757,9759,9761,9763,9765,9768,9770,9772],{"class":256,"line":8124},[254,9753,5505],{"class":260},[254,9755,9756],{"class":2103}," printInfo",[254,9758,265],{"class":264},[254,9760,7900],{"class":260},[254,9762,9540],{"class":2103},[254,9764,9543],{"class":5357},[254,9766,9767],{"class":264},"[], ",[254,9769,268],{"class":260},[254,9771,7472],{"class":5357},[254,9773,271],{"class":264},[254,9775,9776],{"class":256,"line":8151},[254,9777,1686],{"class":264},[254,9779,9780,9782,9784,9786,9788,9790,9792,9794,9796,9798,9800],{"class":256,"line":8156},[254,9781,3341],{"class":260},[254,9783,1798],{"class":264},[254,9785,268],{"class":260},[254,9787,9579],{"class":264},[254,9789,310],{"class":260},[254,9791,4233],{"class":313},[254,9793,9586],{"class":264},[254,9795,1174],{"class":260},[254,9797,9591],{"class":264},[254,9799,2432],{"class":260},[254,9801,271],{"class":264},[254,9803,9804],{"class":256,"line":8162},[254,9805,2170],{"class":264},[254,9807,9808,9811,9813,9816,9818,9821,9823],{"class":256,"line":8174},[254,9809,9810],{"class":264},"        cout ",[254,9812,1308],{"class":260},[254,9814,9815],{"class":369}," \"Teacher: \"",[254,9817,1584],{"class":260},[254,9819,9820],{"class":264}," tArray[i].tName ",[254,9822,1308],{"class":260},[254,9824,8981],{"class":264},[254,9826,9827,9829,9831,9833,9835,9837,9839,9841,9843,9845,9847,9849],{"class":256,"line":8186},[254,9828,3543],{"class":260},[254,9830,1798],{"class":264},[254,9832,268],{"class":260},[254,9834,9641],{"class":264},[254,9836,310],{"class":260},[254,9838,4233],{"class":313},[254,9840,9648],{"class":264},[254,9842,1174],{"class":260},[254,9844,2288],{"class":313},[254,9846,9655],{"class":264},[254,9848,2432],{"class":260},[254,9850,271],{"class":264},[254,9852,9853],{"class":256,"line":8198},[254,9854,2650],{"class":264},[254,9856,9858,9861,9863,9866,9868,9871,9873,9876,9878],{"class":256,"line":9857},47,[254,9859,9860],{"class":264},"            cout ",[254,9862,1308],{"class":260},[254,9864,9865],{"class":369}," \"",[254,9867,1370],{"class":313},[254,9869,9870],{"class":369},"Student: \"",[254,9872,1584],{"class":260},[254,9874,9875],{"class":264}," tArray[i].sArray[j].sName",[254,9877,1308],{"class":260},[254,9879,1331],{"class":264},[254,9881,9883,9885,9887,9889,9891,9894,9896,9899,9901],{"class":256,"line":9882},48,[254,9884,9860],{"class":264},[254,9886,1308],{"class":260},[254,9888,9865],{"class":369},[254,9890,1370],{"class":313},[254,9892,9893],{"class":369},"Age: \"",[254,9895,1584],{"class":260},[254,9897,9898],{"class":264}," tArray[i].sArray[j].age ",[254,9900,1308],{"class":260},[254,9902,8981],{"class":264},[254,9904,9906,9908,9910,9912,9914,9917,9919,9922,9924],{"class":256,"line":9905},49,[254,9907,9860],{"class":264},[254,9909,1308],{"class":260},[254,9911,9865],{"class":369},[254,9913,1370],{"class":313},[254,9915,9916],{"class":369},"Score: \"",[254,9918,1584],{"class":260},[254,9920,9921],{"class":264}," tArray[i].sArray[j].score ",[254,9923,1308],{"class":260},[254,9925,9926],{"class":264}," endl;   \n",[254,9928,9930],{"class":256,"line":9929},50,[254,9931,2669],{"class":264},[254,9933,9935],{"class":256,"line":9934},51,[254,9936,2327],{"class":264},[254,9938,9940],{"class":256,"line":9939},52,[254,9941,1705],{"class":264},[254,9943,9945,9947,9949],{"class":256,"line":9944},53,[254,9946,268],{"class":260},[254,9948,2113],{"class":2103},[254,9950,2116],{"class":264},[254,9952,9954],{"class":256,"line":9953},54,[254,9955,1686],{"class":264},[254,9957,9959],{"class":256,"line":9958},55,[254,9960,9961],{"class":323},"    \u002F\u002F随机数种子\n",[254,9963,9965,9967,9969,9971,9973,9975,9977,9979,9981],{"class":256,"line":9964},56,[254,9966,2513],{"class":2103},[254,9968,2516],{"class":264},[254,9970,2519],{"class":260},[254,9972,2522],{"class":260},[254,9974,693],{"class":264},[254,9976,2527],{"class":2103},[254,9978,265],{"class":264},[254,9980,2532],{"class":313},[254,9982,2535],{"class":264},[254,9984,9986],{"class":256,"line":9985},57,[254,9987,9988],{"class":323},"    \u002F\u002F1.创建3名老师的数组\n",[254,9990,9992,9994,9996,9999,10001],{"class":256,"line":9991},58,[254,9993,8036],{"class":260},[254,9995,9540],{"class":2103},[254,9997,9998],{"class":264}," tArray[",[254,10000,336],{"class":313},[254,10002,4830],{"class":264},[254,10004,10006],{"class":256,"line":10005},59,[254,10007,10008],{"class":323},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[254,10010,10012,10014,10017,10019,10022,10025,10027,10029,10032,10034],{"class":256,"line":10011},60,[254,10013,2125],{"class":260},[254,10015,10016],{"class":264}," len ",[254,10018,310],{"class":260},[254,10020,10021],{"class":260}," sizeof",[254,10023,10024],{"class":264},"(tArray) ",[254,10026,848],{"class":260},[254,10028,10021],{"class":260},[254,10030,10031],{"class":264},"(tArray[",[254,10033,456],{"class":313},[254,10035,3996],{"class":264},[254,10037,10039,10042],{"class":256,"line":10038},61,[254,10040,10041],{"class":2103},"    allocateSpace",[254,10043,10044],{"class":264},"(tArray, len);\n",[254,10046,10048],{"class":256,"line":10047},62,[254,10049,10050],{"class":323},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[254,10052,10054,10057],{"class":256,"line":10053},63,[254,10055,10056],{"class":2103},"    printInfo",[254,10058,10044],{"class":264},[254,10060,10062],{"class":256,"line":10061},64,[254,10063,2540],{"emptyLinePlaceholder":184},[254,10065,10067],{"class":256,"line":10066},65,[254,10068,1705],{"class":264},[21,10070,10071],{"start":175},[24,10072,10073,10076],{},[414,10074,10075],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[14,10078,10079],{},"五名英雄信息如下：",[245,10081,10085],{"className":10082,"code":10083,"language":10084,"meta":174,"style":174},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[251,10086,10087,10105,10122,10139,10156],{"__ignoreMap":174},[254,10088,10089,10091,10094,10096,10098,10100,10103],{"class":256,"line":257},[254,10090,5057],{"class":264},[254,10092,10093],{"class":369},"\"刘备\"",[254,10095,642],{"class":264},[254,10097,1039],{"class":313},[254,10099,642],{"class":264},[254,10101,10102],{"class":369},"\"男\"",[254,10104,5070],{"class":264},[254,10106,10107,10109,10112,10114,10116,10118,10120],{"class":256,"line":175},[254,10108,5057],{"class":264},[254,10110,10111],{"class":369},"\"关羽\"",[254,10113,642],{"class":264},[254,10115,1014],{"class":313},[254,10117,642],{"class":264},[254,10119,10102],{"class":369},[254,10121,5070],{"class":264},[254,10123,10124,10126,10129,10131,10133,10135,10137],{"class":256,"line":1319},[254,10125,5057],{"class":264},[254,10127,10128],{"class":369},"\"张飞\"",[254,10130,642],{"class":264},[254,10132,964],{"class":313},[254,10134,642],{"class":264},[254,10136,10102],{"class":369},[254,10138,5070],{"class":264},[254,10140,10141,10143,10146,10148,10150,10152,10154],{"class":256,"line":1334},[254,10142,5057],{"class":264},[254,10144,10145],{"class":369},"\"赵云\"",[254,10147,642],{"class":264},[254,10149,989],{"class":313},[254,10151,642],{"class":264},[254,10153,10102],{"class":369},[254,10155,5070],{"class":264},[254,10157,10158,10160,10163,10165,10167,10169,10172],{"class":256,"line":1340},[254,10159,5057],{"class":264},[254,10161,10162],{"class":369},"\"貂蝉\"",[254,10164,642],{"class":264},[254,10166,939],{"class":313},[254,10168,642],{"class":264},[254,10170,10171],{"class":369},"\"女\"",[254,10173,5070],{"class":264},[14,10175,10176],{},"代码：",[245,10178,10180],{"className":247,"code":10179,"language":249,"meta":174,"style":174},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\nstruct Sanguo\n{\n    string name;\n    int age;\n    string gender;\n};\n\u002F\u002F定义排序函数\nvoid bubbleSort(Sanguo *s,int len)\n{\n    for(int i=0;i\u003Clen;i++)\n    {\n     for (int j=0;j\u003Clen-1-i;j++)\n     {\n         if ((s+j)->age > (s+j+1)->age)\n         {\n             Sanguo temp=*(s+j);\n             *(s+j)=*(s+j+1);\n             *(s+j+1)=temp;\n         }\n     }\n    }\n}\n\u002F\u002F定义打印函数\nvoid printInfo(Sanguo *s,int len)\n{\n    for (int i=0;i\u003Clen;i++)\n    {\n        cout\u003C\u003C\"\\t姓名：\"\u003C\u003C(s+i)->name\u003C\u003C\"\\t年龄：\"\u003C\u003C(s+i)->age\u003C\u003C\"\\t性别：\"\u003C\u003C(s+i)->gender\u003C\u003Cendl;\n    }\n}\nint main()\n{\n    \u002F\u002F定义结构体变量\n    Sanguo s1[5]=\n    {\n        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n    };\n    int len=sizeof(s1)\u002Fsizeof(s1[0]);\n    Sanguo *s = &s1[0];\n    \u002F\u002F排序前：\n    cout \u003C\u003C \"排序前：\" \u003C\u003C endl;\n    printInfo(s,len);\n    \u002F\u002F调用排序函数\n    bubbleSort(s,len);\n    \u002F\u002F排序后\n    cout \u003C\u003C \"排序后：\" \u003C\u003C endl;\n    printInfo(s,len);\n}\n",[251,10181,10182,10188,10198,10204,10211,10215,10219,10225,10230,10234,10239,10262,10266,10291,10295,10328,10333,10362,10367,10382,10408,10428,10433,10438,10442,10446,10451,10473,10477,10501,10505,10567,10571,10575,10583,10587,10592,10603,10607,10623,10639,10655,10671,10687,10691,10711,10733,10738,10751,10758,10763,10769,10774,10787,10793],{"__ignoreMap":174},[254,10183,10184,10186],{"class":256,"line":257},[254,10185,2089],{"class":260},[254,10187,2092],{"class":369},[254,10189,10190,10192,10194,10196],{"class":256,"line":175},[254,10191,2097],{"class":260},[254,10193,2100],{"class":260},[254,10195,2104],{"class":2103},[254,10197,1430],{"class":264},[254,10199,10200,10202],{"class":256,"line":1319},[254,10201,2089],{"class":260},[254,10203,7890],{"class":369},[254,10205,10206,10208],{"class":256,"line":1334},[254,10207,7900],{"class":260},[254,10209,10210],{"class":2103}," Sanguo\n",[254,10212,10213],{"class":256,"line":1340},[254,10214,1686],{"class":264},[254,10216,10217],{"class":256,"line":1354},[254,10218,7926],{"class":264},[254,10220,10221,10223],{"class":256,"line":1360},[254,10222,2125],{"class":260},[254,10224,7938],{"class":264},[254,10226,10227],{"class":256,"line":1451},[254,10228,10229],{"class":264},"    string gender;\n",[254,10231,10232],{"class":256,"line":1457},[254,10233,4135],{"class":264},[254,10235,10236],{"class":256,"line":1469},[254,10237,10238],{"class":323},"\u002F\u002F定义排序函数\n",[254,10240,10241,10243,10245,10247,10250,10252,10254,10256,10258,10260],{"class":256,"line":1752},[254,10242,5505],{"class":260},[254,10244,7457],{"class":2103},[254,10246,265],{"class":264},[254,10248,10249],{"class":2103},"Sanguo",[254,10251,6659],{"class":260},[254,10253,959],{"class":5357},[254,10255,642],{"class":264},[254,10257,268],{"class":260},[254,10259,7472],{"class":5357},[254,10261,271],{"class":264},[254,10263,10264],{"class":256,"line":1757},[254,10265,1686],{"class":264},[254,10267,10268,10270,10272,10274,10276,10278,10280,10282,10284,10287,10289],{"class":256,"line":1763},[254,10269,3341],{"class":260},[254,10271,265],{"class":264},[254,10273,268],{"class":260},[254,10275,3172],{"class":264},[254,10277,310],{"class":260},[254,10279,456],{"class":313},[254,10281,3179],{"class":264},[254,10283,1174],{"class":260},[254,10285,10286],{"class":264},"len;i",[254,10288,2432],{"class":260},[254,10290,271],{"class":264},[254,10292,10293],{"class":256,"line":1768},[254,10294,2170],{"class":264},[254,10296,10297,10300,10302,10304,10306,10308,10310,10312,10314,10316,10318,10320,10322,10324,10326],{"class":256,"line":1782},[254,10298,10299],{"class":260},"     for",[254,10301,1798],{"class":264},[254,10303,268],{"class":260},[254,10305,3550],{"class":264},[254,10307,310],{"class":260},[254,10309,456],{"class":313},[254,10311,3557],{"class":264},[254,10313,1174],{"class":260},[254,10315,7499],{"class":264},[254,10317,796],{"class":260},[254,10319,482],{"class":313},[254,10321,796],{"class":260},[254,10323,3690],{"class":264},[254,10325,2432],{"class":260},[254,10327,271],{"class":264},[254,10329,10330],{"class":256,"line":1787},[254,10331,10332],{"class":264},"     {\n",[254,10334,10335,10338,10341,10343,10346,10348,10351,10353,10355,10357,10359],{"class":256,"line":1793},[254,10336,10337],{"class":260},"         if",[254,10339,10340],{"class":264}," ((s",[254,10342,745],{"class":260},[254,10344,10345],{"class":264},"j)->age ",[254,10347,1224],{"class":260},[254,10349,10350],{"class":264}," (s",[254,10352,745],{"class":260},[254,10354,731],{"class":264},[254,10356,745],{"class":260},[254,10358,482],{"class":313},[254,10360,10361],{"class":264},")->age)\n",[254,10363,10364],{"class":256,"line":1814},[254,10365,10366],{"class":264},"         {\n",[254,10368,10369,10372,10374,10377,10379],{"class":256,"line":1819},[254,10370,10371],{"class":264},"             Sanguo temp",[254,10373,7294],{"class":260},[254,10375,10376],{"class":264},"(s",[254,10378,745],{"class":260},[254,10380,10381],{"class":264},"j);\n",[254,10383,10384,10387,10389,10391,10394,10396,10398,10400,10402,10404,10406],{"class":256,"line":1833},[254,10385,10386],{"class":260},"             *",[254,10388,10376],{"class":264},[254,10390,745],{"class":260},[254,10392,10393],{"class":264},"j)",[254,10395,7294],{"class":260},[254,10397,10376],{"class":264},[254,10399,745],{"class":260},[254,10401,731],{"class":264},[254,10403,745],{"class":260},[254,10405,482],{"class":313},[254,10407,2859],{"class":264},[254,10409,10410,10412,10414,10416,10418,10420,10422,10424,10426],{"class":256,"line":1838},[254,10411,10386],{"class":260},[254,10413,10376],{"class":264},[254,10415,745],{"class":260},[254,10417,731],{"class":264},[254,10419,745],{"class":260},[254,10421,482],{"class":313},[254,10423,693],{"class":264},[254,10425,310],{"class":260},[254,10427,4420],{"class":264},[254,10429,10430],{"class":256,"line":1867},[254,10431,10432],{"class":264},"         }\n",[254,10434,10435],{"class":256,"line":1872},[254,10436,10437],{"class":264},"     }\n",[254,10439,10440],{"class":256,"line":1889},[254,10441,2327],{"class":264},[254,10443,10444],{"class":256,"line":1894},[254,10445,1705],{"class":264},[254,10447,10448],{"class":256,"line":1899},[254,10449,10450],{"class":323},"\u002F\u002F定义打印函数\n",[254,10452,10453,10455,10457,10459,10461,10463,10465,10467,10469,10471],{"class":256,"line":1904},[254,10454,5505],{"class":260},[254,10456,9756],{"class":2103},[254,10458,265],{"class":264},[254,10460,10249],{"class":2103},[254,10462,6659],{"class":260},[254,10464,959],{"class":5357},[254,10466,642],{"class":264},[254,10468,268],{"class":260},[254,10470,7472],{"class":5357},[254,10472,271],{"class":264},[254,10474,10475],{"class":256,"line":1918},[254,10476,1686],{"class":264},[254,10478,10479,10481,10483,10485,10487,10489,10491,10493,10495,10497,10499],{"class":256,"line":1923},[254,10480,3341],{"class":260},[254,10482,1798],{"class":264},[254,10484,268],{"class":260},[254,10486,3172],{"class":264},[254,10488,310],{"class":260},[254,10490,456],{"class":313},[254,10492,3179],{"class":264},[254,10494,1174],{"class":260},[254,10496,10286],{"class":264},[254,10498,2432],{"class":260},[254,10500,271],{"class":264},[254,10502,10503],{"class":256,"line":2717},[254,10504,2170],{"class":264},[254,10506,10507,10509,10511,10513,10515,10518,10520,10522,10524,10527,10529,10531,10533,10536,10538,10540,10542,10545,10547,10549,10551,10554,10556,10558,10560,10563,10565],{"class":256,"line":2731},[254,10508,3591],{"class":264},[254,10510,1308],{"class":260},[254,10512,515],{"class":369},[254,10514,1370],{"class":313},[254,10516,10517],{"class":369},"姓名：\"",[254,10519,1308],{"class":260},[254,10521,10376],{"class":264},[254,10523,745],{"class":260},[254,10525,10526],{"class":264},"i)->name",[254,10528,1308],{"class":260},[254,10530,515],{"class":369},[254,10532,1370],{"class":313},[254,10534,10535],{"class":369},"年龄：\"",[254,10537,1308],{"class":260},[254,10539,10376],{"class":264},[254,10541,745],{"class":260},[254,10543,10544],{"class":264},"i)->age",[254,10546,1308],{"class":260},[254,10548,515],{"class":369},[254,10550,1370],{"class":313},[254,10552,10553],{"class":369},"性别：\"",[254,10555,1308],{"class":260},[254,10557,10376],{"class":264},[254,10559,745],{"class":260},[254,10561,10562],{"class":264},"i)->gender",[254,10564,1308],{"class":260},[254,10566,1331],{"class":264},[254,10568,10569],{"class":256,"line":2739},[254,10570,2327],{"class":264},[254,10572,10573],{"class":256,"line":2744},[254,10574,1705],{"class":264},[254,10576,10577,10579,10581],{"class":256,"line":2750},[254,10578,268],{"class":260},[254,10580,2113],{"class":2103},[254,10582,2116],{"class":264},[254,10584,10585],{"class":256,"line":2756},[254,10586,1686],{"class":264},[254,10588,10589],{"class":256,"line":2761},[254,10590,10591],{"class":323},"    \u002F\u002F定义结构体变量\n",[254,10593,10594,10597,10599,10601],{"class":256,"line":8089},[254,10595,10596],{"class":264},"    Sanguo s1[",[254,10598,583],{"class":313},[254,10600,1204],{"class":264},[254,10602,5048],{"class":260},[254,10604,10605],{"class":256,"line":8113},[254,10606,2170],{"class":264},[254,10608,10609,10611,10613,10615,10617,10619,10621],{"class":256,"line":8118},[254,10610,5057],{"class":264},[254,10612,10093],{"class":369},[254,10614,642],{"class":264},[254,10616,1039],{"class":313},[254,10618,642],{"class":264},[254,10620,10102],{"class":369},[254,10622,5070],{"class":264},[254,10624,10625,10627,10629,10631,10633,10635,10637],{"class":256,"line":8124},[254,10626,5057],{"class":264},[254,10628,10111],{"class":369},[254,10630,642],{"class":264},[254,10632,1014],{"class":313},[254,10634,642],{"class":264},[254,10636,10102],{"class":369},[254,10638,5070],{"class":264},[254,10640,10641,10643,10645,10647,10649,10651,10653],{"class":256,"line":8151},[254,10642,5057],{"class":264},[254,10644,10128],{"class":369},[254,10646,642],{"class":264},[254,10648,964],{"class":313},[254,10650,642],{"class":264},[254,10652,10102],{"class":369},[254,10654,5070],{"class":264},[254,10656,10657,10659,10661,10663,10665,10667,10669],{"class":256,"line":8156},[254,10658,5057],{"class":264},[254,10660,10145],{"class":369},[254,10662,642],{"class":264},[254,10664,989],{"class":313},[254,10666,642],{"class":264},[254,10668,10102],{"class":369},[254,10670,5070],{"class":264},[254,10672,10673,10675,10677,10679,10681,10683,10685],{"class":256,"line":8162},[254,10674,5057],{"class":264},[254,10676,10162],{"class":369},[254,10678,642],{"class":264},[254,10680,939],{"class":313},[254,10682,642],{"class":264},[254,10684,10171],{"class":369},[254,10686,5070],{"class":264},[254,10688,10689],{"class":256,"line":8174},[254,10690,5091],{"class":264},[254,10692,10693,10695,10697,10699,10702,10704,10707,10709],{"class":256,"line":8186},[254,10694,2125],{"class":260},[254,10696,7472],{"class":264},[254,10698,4343],{"class":260},[254,10700,10701],{"class":264},"(s1)",[254,10703,4349],{"class":260},[254,10705,10706],{"class":264},"(s1[",[254,10708,456],{"class":313},[254,10710,3996],{"class":264},[254,10712,10713,10716,10718,10721,10723,10726,10729,10731],{"class":256,"line":8198},[254,10714,10715],{"class":264},"    Sanguo ",[254,10717,719],{"class":260},[254,10719,10720],{"class":264},"s ",[254,10722,310],{"class":260},[254,10724,10725],{"class":260}," &",[254,10727,10728],{"class":264},"s1[",[254,10730,456],{"class":313},[254,10732,4830],{"class":264},[254,10734,10735],{"class":256,"line":9857},[254,10736,10737],{"class":323},"    \u002F\u002F排序前：\n",[254,10739,10740,10742,10744,10747,10749],{"class":256,"line":9882},[254,10741,6670],{"class":264},[254,10743,1308],{"class":260},[254,10745,10746],{"class":369}," \"排序前：\"",[254,10748,1584],{"class":260},[254,10750,8981],{"class":264},[254,10752,10753,10755],{"class":256,"line":9905},[254,10754,10056],{"class":2103},[254,10756,10757],{"class":264},"(s,len);\n",[254,10759,10760],{"class":256,"line":9929},[254,10761,10762],{"class":323},"    \u002F\u002F调用排序函数\n",[254,10764,10765,10767],{"class":256,"line":9934},[254,10766,7739],{"class":2103},[254,10768,10757],{"class":264},[254,10770,10771],{"class":256,"line":9939},[254,10772,10773],{"class":323},"    \u002F\u002F排序后\n",[254,10775,10776,10778,10780,10783,10785],{"class":256,"line":9944},[254,10777,6670],{"class":264},[254,10779,1308],{"class":260},[254,10781,10782],{"class":369}," \"排序后：\"",[254,10784,1584],{"class":260},[254,10786,8981],{"class":264},[254,10788,10789,10791],{"class":256,"line":9953},[254,10790,10056],{"class":2103},[254,10792,10757],{"class":264},[254,10794,10795],{"class":256,"line":9958},[254,10796,1705],{"class":264},[14,10798,10799,10800,10802],{},"注意：使用指针时直接用传首地址**&s",[254,10801,456],{},"**",[5267,10804,10805],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":174,"searchDepth":175,"depth":175,"links":10807},[10808,10809,10810,10811,10812,10813,10814],{"id":7844,"depth":175,"text":7845},{"id":8206,"depth":175,"text":8207},{"id":8475,"depth":175,"text":8476},{"id":8640,"depth":175,"text":8641},{"id":8856,"depth":175,"text":8857},{"id":9177,"depth":175,"text":9178},{"id":9405,"depth":175,"text":9406},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":7833,"description":7841},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":10821,"title":10822,"body":10823,"description":174,"extension":181,"meta":12166,"navigation":184,"path":12167,"seo":12168,"stem":12169,"__hash__":12170},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":10824,"toc":12160},[10825,10828,10832,10838,10852,10857,10860,10864,10871,10877,10880,10887,10893,10898,10901,10904,10907,11471,11474,11488,11492,11497,11513,11653,11656,11662,11665,11670,11678,11786,11789,11794,11797,11802,11805,11811,11814,12157],[10,10826,10822],{"id":10827},"_5程序内存模型",[34,10829,10831],{"id":10830},"_51内存分区模型","5.1内存分区模型",[14,10833,10834,10835],{},"C++程序在执行时，将内存大方向划分为",[414,10836,10837],{},"4个区域",[1271,10839,10840,10843,10846,10849],{},[24,10841,10842],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[24,10844,10845],{},"全局区：存放全局变量和静态变量以及常量",[24,10847,10848],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[24,10850,10851],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[14,10853,10854],{},[414,10855,10856],{},"内存四区意义：",[14,10858,10859],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[225,10861,10863],{"id":10862},"_511程序运行前","5.1.1程序运行前",[14,10865,10866,10867,10870],{},"​\t在程序编译后，生成了exe可执行程序，",[414,10868,10869],{},"未执行该程序前","分为两个区域",[14,10872,10873,10874],{},"​\t",[414,10875,10876],{},"代码区：",[14,10878,10879],{},"​\t\t存放 CPU 执行的机器指令",[14,10881,10882,10883,10886],{},"​\t\t代码区是",[414,10884,10885],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[14,10888,10882,10889,10892],{},[414,10890,10891],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[14,10894,10873,10895],{},[414,10896,10897],{},"全局区：",[14,10899,10900],{},"​\t\t全局变量和静态变量存放在此.",[14,10902,10903],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[14,10905,10906],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[245,10908,10910],{"className":247,"code":10909,"language":249,"meta":174,"style":174},"\u002F\u002F全局变量\nint g_a = 10;\nint g_b = 10;\n\n\u002F\u002F全局常量\nconst int c_g_a = 10;\nconst int c_g_b = 10;\n\nint main() {\n\n    \u002F\u002F局部变量\n    int a = 10;\n    int b = 10;\n\n    \u002F\u002F打印地址\n    cout \u003C\u003C \"局部变量a地址为： \" \u003C\u003C (int)&a \u003C\u003C endl;\n    cout \u003C\u003C \"局部变量b地址为： \" \u003C\u003C (int)&b \u003C\u003C endl;\n\n    cout \u003C\u003C \"全局变量g_a地址为： \" \u003C\u003C  (int)&g_a \u003C\u003C endl;\n    cout \u003C\u003C \"全局变量g_b地址为： \" \u003C\u003C  (int)&g_b \u003C\u003C endl;\n\n    \u002F\u002F静态变量\n    static int s_a = 10;\n    static int s_b = 10;\n\n    cout \u003C\u003C \"静态变量s_a地址为： \" \u003C\u003C (int)&s_a \u003C\u003C endl;\n    cout \u003C\u003C \"静态变量s_b地址为： \" \u003C\u003C (int)&s_b \u003C\u003C endl;\n\n    cout \u003C\u003C \"字符串常量地址为： \" \u003C\u003C (int)&\"hello world\" \u003C\u003C endl;\n    cout \u003C\u003C \"字符串常量地址为： \" \u003C\u003C (int)&\"hello world1\" \u003C\u003C endl;\n\n    cout \u003C\u003C \"全局常量c_g_a地址为： \" \u003C\u003C (int)&c_g_a \u003C\u003C endl;\n    cout \u003C\u003C \"全局常量c_g_b地址为： \" \u003C\u003C (int)&c_g_b \u003C\u003C endl;\n\n    const int c_l_a = 10;\n    const int c_l_b = 10;\n    cout \u003C\u003C \"局部常量c_l_a地址为： \" \u003C\u003C (int)&c_l_a \u003C\u003C endl;\n    cout \u003C\u003C \"局部常量c_l_b地址为： \" \u003C\u003C (int)&c_l_b \u003C\u003C endl;\n\n    system(\"pause\");\n\n    return 0;\n}\n",[251,10911,10912,10917,10930,10943,10947,10952,10967,10982,10986,10995,10999,11004,11017,11030,11034,11039,11065,11091,11095,11122,11148,11152,11157,11173,11188,11192,11218,11244,11248,11273,11298,11302,11328,11354,11358,11374,11389,11415,11441,11445,11455,11459,11467],{"__ignoreMap":174},[254,10913,10914],{"class":256,"line":257},[254,10915,10916],{"class":323},"\u002F\u002F全局变量\n",[254,10918,10919,10921,10924,10926,10928],{"class":256,"line":175},[254,10920,268],{"class":260},[254,10922,10923],{"class":264}," g_a ",[254,10925,310],{"class":260},[254,10927,2178],{"class":313},[254,10929,1430],{"class":264},[254,10931,10932,10934,10937,10939,10941],{"class":256,"line":1319},[254,10933,268],{"class":260},[254,10935,10936],{"class":264}," g_b ",[254,10938,310],{"class":260},[254,10940,2178],{"class":313},[254,10942,1430],{"class":264},[254,10944,10945],{"class":256,"line":1334},[254,10946,2540],{"emptyLinePlaceholder":184},[254,10948,10949],{"class":256,"line":1340},[254,10950,10951],{"class":323},"\u002F\u002F全局常量\n",[254,10953,10954,10956,10958,10961,10963,10965],{"class":256,"line":1354},[254,10955,6933],{"class":260},[254,10957,2522],{"class":260},[254,10959,10960],{"class":264}," c_g_a ",[254,10962,310],{"class":260},[254,10964,2178],{"class":313},[254,10966,1430],{"class":264},[254,10968,10969,10971,10973,10976,10978,10980],{"class":256,"line":1360},[254,10970,6933],{"class":260},[254,10972,2522],{"class":260},[254,10974,10975],{"class":264}," c_g_b ",[254,10977,310],{"class":260},[254,10979,2178],{"class":313},[254,10981,1430],{"class":264},[254,10983,10984],{"class":256,"line":1451},[254,10985,2540],{"emptyLinePlaceholder":184},[254,10987,10988,10990,10992],{"class":256,"line":1457},[254,10989,268],{"class":260},[254,10991,2113],{"class":2103},[254,10993,10994],{"class":264},"() {\n",[254,10996,10997],{"class":256,"line":1469},[254,10998,2540],{"emptyLinePlaceholder":184},[254,11000,11001],{"class":256,"line":1752},[254,11002,11003],{"class":323},"    \u002F\u002F局部变量\n",[254,11005,11006,11008,11011,11013,11015],{"class":256,"line":1757},[254,11007,2125],{"class":260},[254,11009,11010],{"class":264}," a ",[254,11012,310],{"class":260},[254,11014,2178],{"class":313},[254,11016,1430],{"class":264},[254,11018,11019,11021,11024,11026,11028],{"class":256,"line":1763},[254,11020,2125],{"class":260},[254,11022,11023],{"class":264}," b ",[254,11025,310],{"class":260},[254,11027,2178],{"class":313},[254,11029,1430],{"class":264},[254,11031,11032],{"class":256,"line":1768},[254,11033,2540],{"emptyLinePlaceholder":184},[254,11035,11036],{"class":256,"line":1782},[254,11037,11038],{"class":323},"    \u002F\u002F打印地址\n",[254,11040,11041,11043,11045,11048,11050,11052,11054,11056,11058,11061,11063],{"class":256,"line":1787},[254,11042,6670],{"class":264},[254,11044,1308],{"class":260},[254,11046,11047],{"class":369}," \"局部变量a地址为： \"",[254,11049,1584],{"class":260},[254,11051,1798],{"class":264},[254,11053,268],{"class":260},[254,11055,693],{"class":264},[254,11057,617],{"class":260},[254,11059,11060],{"class":264},"a ",[254,11062,1308],{"class":260},[254,11064,8981],{"class":264},[254,11066,11067,11069,11071,11074,11076,11078,11080,11082,11084,11087,11089],{"class":256,"line":1793},[254,11068,6670],{"class":264},[254,11070,1308],{"class":260},[254,11072,11073],{"class":369}," \"局部变量b地址为： \"",[254,11075,1584],{"class":260},[254,11077,1798],{"class":264},[254,11079,268],{"class":260},[254,11081,693],{"class":264},[254,11083,617],{"class":260},[254,11085,11086],{"class":264},"b ",[254,11088,1308],{"class":260},[254,11090,8981],{"class":264},[254,11092,11093],{"class":256,"line":1814},[254,11094,2540],{"emptyLinePlaceholder":184},[254,11096,11097,11099,11101,11104,11106,11109,11111,11113,11115,11118,11120],{"class":256,"line":1819},[254,11098,6670],{"class":264},[254,11100,1308],{"class":260},[254,11102,11103],{"class":369}," \"全局变量g_a地址为： \"",[254,11105,1584],{"class":260},[254,11107,11108],{"class":264},"  (",[254,11110,268],{"class":260},[254,11112,693],{"class":264},[254,11114,617],{"class":260},[254,11116,11117],{"class":264},"g_a ",[254,11119,1308],{"class":260},[254,11121,8981],{"class":264},[254,11123,11124,11126,11128,11131,11133,11135,11137,11139,11141,11144,11146],{"class":256,"line":1833},[254,11125,6670],{"class":264},[254,11127,1308],{"class":260},[254,11129,11130],{"class":369}," \"全局变量g_b地址为： \"",[254,11132,1584],{"class":260},[254,11134,11108],{"class":264},[254,11136,268],{"class":260},[254,11138,693],{"class":264},[254,11140,617],{"class":260},[254,11142,11143],{"class":264},"g_b ",[254,11145,1308],{"class":260},[254,11147,8981],{"class":264},[254,11149,11150],{"class":256,"line":1838},[254,11151,2540],{"emptyLinePlaceholder":184},[254,11153,11154],{"class":256,"line":1867},[254,11155,11156],{"class":323},"    \u002F\u002F静态变量\n",[254,11158,11159,11162,11164,11167,11169,11171],{"class":256,"line":1872},[254,11160,11161],{"class":260},"    static",[254,11163,2522],{"class":260},[254,11165,11166],{"class":264}," s_a ",[254,11168,310],{"class":260},[254,11170,2178],{"class":313},[254,11172,1430],{"class":264},[254,11174,11175,11177,11179,11182,11184,11186],{"class":256,"line":1889},[254,11176,11161],{"class":260},[254,11178,2522],{"class":260},[254,11180,11181],{"class":264}," s_b ",[254,11183,310],{"class":260},[254,11185,2178],{"class":313},[254,11187,1430],{"class":264},[254,11189,11190],{"class":256,"line":1894},[254,11191,2540],{"emptyLinePlaceholder":184},[254,11193,11194,11196,11198,11201,11203,11205,11207,11209,11211,11214,11216],{"class":256,"line":1899},[254,11195,6670],{"class":264},[254,11197,1308],{"class":260},[254,11199,11200],{"class":369}," \"静态变量s_a地址为： \"",[254,11202,1584],{"class":260},[254,11204,1798],{"class":264},[254,11206,268],{"class":260},[254,11208,693],{"class":264},[254,11210,617],{"class":260},[254,11212,11213],{"class":264},"s_a ",[254,11215,1308],{"class":260},[254,11217,8981],{"class":264},[254,11219,11220,11222,11224,11227,11229,11231,11233,11235,11237,11240,11242],{"class":256,"line":1904},[254,11221,6670],{"class":264},[254,11223,1308],{"class":260},[254,11225,11226],{"class":369}," \"静态变量s_b地址为： \"",[254,11228,1584],{"class":260},[254,11230,1798],{"class":264},[254,11232,268],{"class":260},[254,11234,693],{"class":264},[254,11236,617],{"class":260},[254,11238,11239],{"class":264},"s_b ",[254,11241,1308],{"class":260},[254,11243,8981],{"class":264},[254,11245,11246],{"class":256,"line":1918},[254,11247,2540],{"emptyLinePlaceholder":184},[254,11249,11250,11252,11254,11257,11259,11261,11263,11265,11267,11269,11271],{"class":256,"line":1923},[254,11251,6670],{"class":264},[254,11253,1308],{"class":260},[254,11255,11256],{"class":369}," \"字符串常量地址为： \"",[254,11258,1584],{"class":260},[254,11260,1798],{"class":264},[254,11262,268],{"class":260},[254,11264,693],{"class":264},[254,11266,617],{"class":260},[254,11268,1326],{"class":369},[254,11270,1584],{"class":260},[254,11272,8981],{"class":264},[254,11274,11275,11277,11279,11281,11283,11285,11287,11289,11291,11294,11296],{"class":256,"line":2717},[254,11276,6670],{"class":264},[254,11278,1308],{"class":260},[254,11280,11256],{"class":369},[254,11282,1584],{"class":260},[254,11284,1798],{"class":264},[254,11286,268],{"class":260},[254,11288,693],{"class":264},[254,11290,617],{"class":260},[254,11292,11293],{"class":369},"\"hello world1\"",[254,11295,1584],{"class":260},[254,11297,8981],{"class":264},[254,11299,11300],{"class":256,"line":2731},[254,11301,2540],{"emptyLinePlaceholder":184},[254,11303,11304,11306,11308,11311,11313,11315,11317,11319,11321,11324,11326],{"class":256,"line":2739},[254,11305,6670],{"class":264},[254,11307,1308],{"class":260},[254,11309,11310],{"class":369}," \"全局常量c_g_a地址为： \"",[254,11312,1584],{"class":260},[254,11314,1798],{"class":264},[254,11316,268],{"class":260},[254,11318,693],{"class":264},[254,11320,617],{"class":260},[254,11322,11323],{"class":264},"c_g_a ",[254,11325,1308],{"class":260},[254,11327,8981],{"class":264},[254,11329,11330,11332,11334,11337,11339,11341,11343,11345,11347,11350,11352],{"class":256,"line":2744},[254,11331,6670],{"class":264},[254,11333,1308],{"class":260},[254,11335,11336],{"class":369}," \"全局常量c_g_b地址为： \"",[254,11338,1584],{"class":260},[254,11340,1798],{"class":264},[254,11342,268],{"class":260},[254,11344,693],{"class":264},[254,11346,617],{"class":260},[254,11348,11349],{"class":264},"c_g_b ",[254,11351,1308],{"class":260},[254,11353,8981],{"class":264},[254,11355,11356],{"class":256,"line":2750},[254,11357,2540],{"emptyLinePlaceholder":184},[254,11359,11360,11363,11365,11368,11370,11372],{"class":256,"line":2756},[254,11361,11362],{"class":260},"    const",[254,11364,2522],{"class":260},[254,11366,11367],{"class":264}," c_l_a ",[254,11369,310],{"class":260},[254,11371,2178],{"class":313},[254,11373,1430],{"class":264},[254,11375,11376,11378,11380,11383,11385,11387],{"class":256,"line":2761},[254,11377,11362],{"class":260},[254,11379,2522],{"class":260},[254,11381,11382],{"class":264}," c_l_b ",[254,11384,310],{"class":260},[254,11386,2178],{"class":313},[254,11388,1430],{"class":264},[254,11390,11391,11393,11395,11398,11400,11402,11404,11406,11408,11411,11413],{"class":256,"line":8089},[254,11392,6670],{"class":264},[254,11394,1308],{"class":260},[254,11396,11397],{"class":369}," \"局部常量c_l_a地址为： \"",[254,11399,1584],{"class":260},[254,11401,1798],{"class":264},[254,11403,268],{"class":260},[254,11405,693],{"class":264},[254,11407,617],{"class":260},[254,11409,11410],{"class":264},"c_l_a ",[254,11412,1308],{"class":260},[254,11414,8981],{"class":264},[254,11416,11417,11419,11421,11424,11426,11428,11430,11432,11434,11437,11439],{"class":256,"line":8113},[254,11418,6670],{"class":264},[254,11420,1308],{"class":260},[254,11422,11423],{"class":369}," \"局部常量c_l_b地址为： \"",[254,11425,1584],{"class":260},[254,11427,1798],{"class":264},[254,11429,268],{"class":260},[254,11431,693],{"class":264},[254,11433,617],{"class":260},[254,11435,11436],{"class":264},"c_l_b ",[254,11438,1308],{"class":260},[254,11440,8981],{"class":264},[254,11442,11443],{"class":256,"line":8118},[254,11444,2540],{"emptyLinePlaceholder":184},[254,11446,11447,11449,11451,11453],{"class":256,"line":8124},[254,11448,2443],{"class":2103},[254,11450,265],{"class":264},[254,11452,2448],{"class":369},[254,11454,2859],{"class":264},[254,11456,11457],{"class":256,"line":8151},[254,11458,2540],{"emptyLinePlaceholder":184},[254,11460,11461,11463,11465],{"class":256,"line":8156},[254,11462,4230],{"class":260},[254,11464,4233],{"class":313},[254,11466,1430],{"class":264},[254,11468,11469],{"class":256,"line":8162},[254,11470,1705],{"class":264},[14,11472,11473],{},"总结：",[1271,11475,11476,11479,11482,11485],{},[24,11477,11478],{},"c++中程序运行前分为全局区和代码区",[24,11480,11481],{},"代码区特点是共享和只读",[24,11483,11484],{},"全局区中存放全局变量、静态变量、常量",[24,11486,11487],{},"常量区中存放const修饰的全局常量和字符串常量",[225,11489,11491],{"id":11490},"_512程序运行后","5.1.2程序运行后",[21,11493,11494],{},[24,11495,11496],{},"栈区：",[1271,11498,11499,11506],{},[24,11500,11501,11502,11505],{},"由编译器自动分配释放, 存放",[414,11503,11504],{},"函数的参数值,局部变量","等",[24,11507,11508,11509,11512],{},"注意事项：",[414,11510,11511],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[245,11514,11516],{"className":247,"code":11515,"language":249,"meta":174,"style":174},"int * func()\n{\n    int a = 10; \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n    return &a; \u002F\u002F放回局部变量的地址\n}\n\nint main() {\n    \u002F\u002F接受func的返回值\n    int *p = func();\n    cout \u003C\u003C *p \u003C\u003C endl; \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n    cout \u003C\u003C *p \u003C\u003C endl; \u002F\u002F第二次这个数据不再保留\n    system(\"pause\");\n    return 0;\n}\n",[251,11517,11518,11529,11533,11548,11560,11564,11568,11576,11581,11596,11614,11631,11641,11649],{"__ignoreMap":174},[254,11519,11520,11522,11524,11527],{"class":256,"line":257},[254,11521,268],{"class":260},[254,11523,6659],{"class":260},[254,11525,11526],{"class":2103}," func",[254,11528,2116],{"class":264},[254,11530,11531],{"class":256,"line":175},[254,11532,1686],{"class":264},[254,11534,11535,11537,11539,11541,11543,11545],{"class":256,"line":1319},[254,11536,2125],{"class":260},[254,11538,11010],{"class":264},[254,11540,310],{"class":260},[254,11542,2178],{"class":313},[254,11544,320],{"class":264},[254,11546,11547],{"class":323}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[254,11549,11550,11552,11554,11557],{"class":256,"line":1334},[254,11551,4230],{"class":260},[254,11553,10725],{"class":260},[254,11555,11556],{"class":264},"a;",[254,11558,11559],{"class":323}," \u002F\u002F放回局部变量的地址\n",[254,11561,11562],{"class":256,"line":1340},[254,11563,1705],{"class":264},[254,11565,11566],{"class":256,"line":1354},[254,11567,2540],{"emptyLinePlaceholder":184},[254,11569,11570,11572,11574],{"class":256,"line":1360},[254,11571,268],{"class":260},[254,11573,2113],{"class":2103},[254,11575,10994],{"class":264},[254,11577,11578],{"class":256,"line":1451},[254,11579,11580],{"class":323},"    \u002F\u002F接受func的返回值\n",[254,11582,11583,11585,11587,11590,11592,11594],{"class":256,"line":1457},[254,11584,2125],{"class":260},[254,11586,6659],{"class":260},[254,11588,11589],{"class":264},"p ",[254,11591,310],{"class":260},[254,11593,11526],{"class":2103},[254,11595,5777],{"class":264},[254,11597,11598,11600,11602,11604,11606,11608,11611],{"class":256,"line":1469},[254,11599,6670],{"class":264},[254,11601,1308],{"class":260},[254,11603,6659],{"class":260},[254,11605,11589],{"class":264},[254,11607,1308],{"class":260},[254,11609,11610],{"class":264}," endl;",[254,11612,11613],{"class":323}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[254,11615,11616,11618,11620,11622,11624,11626,11628],{"class":256,"line":1752},[254,11617,6670],{"class":264},[254,11619,1308],{"class":260},[254,11621,6659],{"class":260},[254,11623,11589],{"class":264},[254,11625,1308],{"class":260},[254,11627,11610],{"class":264},[254,11629,11630],{"class":323}," \u002F\u002F第二次这个数据不再保留\n",[254,11632,11633,11635,11637,11639],{"class":256,"line":1757},[254,11634,2443],{"class":2103},[254,11636,265],{"class":264},[254,11638,2448],{"class":369},[254,11640,2859],{"class":264},[254,11642,11643,11645,11647],{"class":256,"line":1763},[254,11644,4230],{"class":260},[254,11646,4233],{"class":313},[254,11648,1430],{"class":264},[254,11650,11651],{"class":256,"line":1768},[254,11652,1705],{"class":264},[14,11654,11655],{},"输出结果：",[14,11657,11658],{},[1602,11659],{"alt":11660,"src":11661},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[14,11663,11664],{},"总结：不要返回局部变量的地址",[21,11666,11667],{"start":175},[24,11668,11669],{},"堆区",[1271,11671,11672,11675],{},[24,11673,11674],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[24,11676,11677],{},"在c++中主要利用new在堆区开辟内存",[245,11679,11681],{"className":247,"code":11680,"language":249,"meta":174,"style":174},"int  *func()  \u002F\u002F函数返回指针\n{\n    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n   int *p= new int(10);\n   return p;\n}\nint main()\n{\n    \u002F\u002F在堆区开辟数据\n    int *p=func();\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[251,11682,11683,11698,11702,11707,11728,11735,11739,11747,11751,11756,11770,11782],{"__ignoreMap":174},[254,11684,11685,11687,11690,11693,11695],{"class":256,"line":257},[254,11686,268],{"class":260},[254,11688,11689],{"class":260},"  *",[254,11691,11692],{"class":2103},"func",[254,11694,2567],{"class":264},[254,11696,11697],{"class":323},"  \u002F\u002F函数返回指针\n",[254,11699,11700],{"class":256,"line":175},[254,11701,1686],{"class":264},[254,11703,11704],{"class":256,"line":1319},[254,11705,11706],{"class":323},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[254,11708,11709,11711,11713,11715,11717,11720,11722,11724,11726],{"class":256,"line":1334},[254,11710,4287],{"class":260},[254,11712,6659],{"class":260},[254,11714,14],{"class":264},[254,11716,310],{"class":260},[254,11718,11719],{"class":260}," new",[254,11721,2522],{"class":260},[254,11723,265],{"class":264},[254,11725,710],{"class":313},[254,11727,2859],{"class":264},[254,11729,11730,11732],{"class":256,"line":1340},[254,11731,4521],{"class":260},[254,11733,11734],{"class":264}," p;\n",[254,11736,11737],{"class":256,"line":1354},[254,11738,1705],{"class":264},[254,11740,11741,11743,11745],{"class":256,"line":1360},[254,11742,268],{"class":260},[254,11744,2113],{"class":2103},[254,11746,2116],{"class":264},[254,11748,11749],{"class":256,"line":1451},[254,11750,1686],{"class":264},[254,11752,11753],{"class":256,"line":1457},[254,11754,11755],{"class":323},"    \u002F\u002F在堆区开辟数据\n",[254,11757,11758,11760,11762,11764,11766,11768],{"class":256,"line":1469},[254,11759,2125],{"class":260},[254,11761,6659],{"class":260},[254,11763,14],{"class":264},[254,11765,310],{"class":260},[254,11767,11692],{"class":2103},[254,11769,5777],{"class":264},[254,11771,11772,11774,11776,11778,11780],{"class":256,"line":1752},[254,11773,1691],{"class":264},[254,11775,6560],{"class":260},[254,11777,14],{"class":264},[254,11779,1308],{"class":260},[254,11781,1331],{"class":264},[254,11783,11784],{"class":256,"line":1757},[254,11785,1705],{"class":264},[14,11787,11788],{},"图片展示：",[14,11790,11791],{},[1602,11792],{"alt":11660,"src":11793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[14,11795,11796],{},"堆区内存由程序员管生死！！！",[21,11798,11799],{"start":1319},[24,11800,11801],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[14,11803,11804],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[14,11806,11807,11808],{},"​语法：",[251,11809,11810],{}," new 数据类型",[14,11812,11813],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[245,11815,11817],{"className":247,"code":11816,"language":249,"meta":174,"style":174},"\u002F\u002F1.new的基本语法\nint *func()\n{\n    \u002F\u002F在堆区创建整型数据\n    \u002F\u002Fnew返回的是该数据类型的指针\n    int *p=new int(10);\u002F\u002Fnew啥类型就返回啥类型数据的指针\n}\nvoid test01()\n{\n    int *p=func();\n    cout\u003C\u003C*p\u003C\u003Cendl;\n    cout\u003C\u003C*p\u003C\u003Cendl;\n    cout\u003C\u003C*p\u003C\u003Cendl;\n    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n    delete p;\u002F\u002F删除这块地址\n}\n\u002F\u002F2.在堆区利用new开辟数组\nvoid test02()\n{\n    \u002F\u002F创建10整数数据的数组，在堆区\n    int *arr=new int[10];\u002F\u002F10代表数组有10个元素\n    for (int i=0;i\u003C10;i++)\n    {\n        arr[i]=i+100;\u002F\u002F给10个元素赋值100～109\n    }\n    for (int i=0;i\u003C10;i++)\n    {\n        cout\u003C\u003Carr[i]\u003C\u003Cendl;\n    }\n    \u002F\u002F释放堆区数组\n    \u002F\u002F释放数组的时候 要加[]才可以\n    delete[] arr;\n}\n\nint main()\n{\n    test01();\n    test02();\n}\n\n",[251,11818,11819,11824,11834,11838,11843,11848,11870,11874,11882,11886,11900,11912,11924,11936,11941,11946,11957,11961,11966,11974,11978,11983,12005,12031,12035,12053,12057,12083,12087,12099,12103,12108,12113,12121,12125,12129,12137,12141,12147,12153],{"__ignoreMap":174},[254,11820,11821],{"class":256,"line":257},[254,11822,11823],{"class":323},"\u002F\u002F1.new的基本语法\n",[254,11825,11826,11828,11830,11832],{"class":256,"line":175},[254,11827,268],{"class":260},[254,11829,6659],{"class":260},[254,11831,11692],{"class":2103},[254,11833,2116],{"class":264},[254,11835,11836],{"class":256,"line":1319},[254,11837,1686],{"class":264},[254,11839,11840],{"class":256,"line":1334},[254,11841,11842],{"class":323},"    \u002F\u002F在堆区创建整型数据\n",[254,11844,11845],{"class":256,"line":1340},[254,11846,11847],{"class":323},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[254,11849,11850,11852,11854,11856,11859,11861,11863,11865,11867],{"class":256,"line":1354},[254,11851,2125],{"class":260},[254,11853,6659],{"class":260},[254,11855,14],{"class":264},[254,11857,11858],{"class":260},"=new",[254,11860,2522],{"class":260},[254,11862,265],{"class":264},[254,11864,710],{"class":313},[254,11866,6107],{"class":264},[254,11868,11869],{"class":323},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[254,11871,11872],{"class":256,"line":1360},[254,11873,1705],{"class":264},[254,11875,11876,11878,11880],{"class":256,"line":1451},[254,11877,5505],{"class":260},[254,11879,5729],{"class":2103},[254,11881,2116],{"class":264},[254,11883,11884],{"class":256,"line":1457},[254,11885,1686],{"class":264},[254,11887,11888,11890,11892,11894,11896,11898],{"class":256,"line":1469},[254,11889,2125],{"class":260},[254,11891,6659],{"class":260},[254,11893,14],{"class":264},[254,11895,310],{"class":260},[254,11897,11692],{"class":2103},[254,11899,5777],{"class":264},[254,11901,11902,11904,11906,11908,11910],{"class":256,"line":1752},[254,11903,1691],{"class":264},[254,11905,6560],{"class":260},[254,11907,14],{"class":264},[254,11909,1308],{"class":260},[254,11911,1331],{"class":264},[254,11913,11914,11916,11918,11920,11922],{"class":256,"line":1757},[254,11915,1691],{"class":264},[254,11917,6560],{"class":260},[254,11919,14],{"class":264},[254,11921,1308],{"class":260},[254,11923,1331],{"class":264},[254,11925,11926,11928,11930,11932,11934],{"class":256,"line":1763},[254,11927,1691],{"class":264},[254,11929,6560],{"class":260},[254,11931,14],{"class":264},[254,11933,1308],{"class":260},[254,11935,1331],{"class":264},[254,11937,11938],{"class":256,"line":1768},[254,11939,11940],{"class":323},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[254,11942,11943],{"class":256,"line":1782},[254,11944,11945],{"class":323},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[254,11947,11948,11951,11954],{"class":256,"line":1787},[254,11949,11950],{"class":260},"    delete",[254,11952,11953],{"class":264}," p;",[254,11955,11956],{"class":323},"\u002F\u002F删除这块地址\n",[254,11958,11959],{"class":256,"line":1793},[254,11960,1705],{"class":264},[254,11962,11963],{"class":256,"line":1814},[254,11964,11965],{"class":323},"\u002F\u002F2.在堆区利用new开辟数组\n",[254,11967,11968,11970,11972],{"class":256,"line":1819},[254,11969,5505],{"class":260},[254,11971,5798],{"class":2103},[254,11973,2116],{"class":264},[254,11975,11976],{"class":256,"line":1833},[254,11977,1686],{"class":264},[254,11979,11980],{"class":256,"line":1838},[254,11981,11982],{"class":323},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[254,11984,11985,11987,11989,11991,11993,11995,11997,11999,12002],{"class":256,"line":1867},[254,11986,2125],{"class":260},[254,11988,6659],{"class":260},[254,11990,4020],{"class":264},[254,11992,11858],{"class":260},[254,11994,2522],{"class":260},[254,11996,1154],{"class":264},[254,11998,710],{"class":313},[254,12000,12001],{"class":264},"];",[254,12003,12004],{"class":323},"\u002F\u002F10代表数组有10个元素\n",[254,12006,12007,12009,12011,12013,12015,12017,12019,12021,12023,12025,12027,12029],{"class":256,"line":1872},[254,12008,3341],{"class":260},[254,12010,1798],{"class":264},[254,12012,268],{"class":260},[254,12014,3172],{"class":264},[254,12016,310],{"class":260},[254,12018,456],{"class":313},[254,12020,3179],{"class":264},[254,12022,1174],{"class":260},[254,12024,710],{"class":313},[254,12026,3179],{"class":264},[254,12028,2432],{"class":260},[254,12030,271],{"class":264},[254,12032,12033],{"class":256,"line":1889},[254,12034,2170],{"class":264},[254,12036,12037,12040,12042,12044,12046,12048,12050],{"class":256,"line":1894},[254,12038,12039],{"class":264},"        arr[i]",[254,12041,310],{"class":260},[254,12043,705],{"class":264},[254,12045,745],{"class":260},[254,12047,575],{"class":313},[254,12049,320],{"class":264},[254,12051,12052],{"class":323},"\u002F\u002F给10个元素赋值100～109\n",[254,12054,12055],{"class":256,"line":1899},[254,12056,2327],{"class":264},[254,12058,12059,12061,12063,12065,12067,12069,12071,12073,12075,12077,12079,12081],{"class":256,"line":1904},[254,12060,3341],{"class":260},[254,12062,1798],{"class":264},[254,12064,268],{"class":260},[254,12066,3172],{"class":264},[254,12068,310],{"class":260},[254,12070,456],{"class":313},[254,12072,3179],{"class":264},[254,12074,1174],{"class":260},[254,12076,710],{"class":313},[254,12078,3179],{"class":264},[254,12080,2432],{"class":260},[254,12082,271],{"class":264},[254,12084,12085],{"class":256,"line":1918},[254,12086,2170],{"class":264},[254,12088,12089,12091,12093,12095,12097],{"class":256,"line":1923},[254,12090,3591],{"class":264},[254,12092,1308],{"class":260},[254,12094,4494],{"class":264},[254,12096,1308],{"class":260},[254,12098,1331],{"class":264},[254,12100,12101],{"class":256,"line":2717},[254,12102,2327],{"class":264},[254,12104,12105],{"class":256,"line":2731},[254,12106,12107],{"class":323},"    \u002F\u002F释放堆区数组\n",[254,12109,12110],{"class":256,"line":2739},[254,12111,12112],{"class":323},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[254,12114,12115,12118],{"class":256,"line":2744},[254,12116,12117],{"class":260},"    delete[]",[254,12119,12120],{"class":264}," arr;\n",[254,12122,12123],{"class":256,"line":2750},[254,12124,1705],{"class":264},[254,12126,12127],{"class":256,"line":2756},[254,12128,2540],{"emptyLinePlaceholder":184},[254,12130,12131,12133,12135],{"class":256,"line":2761},[254,12132,268],{"class":260},[254,12134,2113],{"class":2103},[254,12136,2116],{"class":264},[254,12138,12139],{"class":256,"line":8089},[254,12140,1686],{"class":264},[254,12142,12143,12145],{"class":256,"line":8113},[254,12144,5774],{"class":2103},[254,12146,5777],{"class":264},[254,12148,12149,12151],{"class":256,"line":8118},[254,12150,5843],{"class":2103},[254,12152,5777],{"class":264},[254,12154,12155],{"class":256,"line":8124},[254,12156,1705],{"class":264},[5267,12158,12159],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":174,"searchDepth":175,"depth":175,"links":12161},[12162],{"id":10830,"depth":175,"text":10831,"children":12163},[12164,12165],{"id":10862,"depth":1319,"text":10863},{"id":11490,"depth":1319,"text":11491},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":10822,"description":174},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12172,"title":12173,"body":12174,"description":174,"extension":181,"meta":13655,"navigation":184,"path":13656,"seo":13657,"stem":13658,"__hash__":13659},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12175,"toc":13647},[12176,12179,12183,12186,12189,12358,12362,12367,12384,12389,12541,12545,12548,12551,12945,12949,12952,12957,12960,13272,13276,13282,13442,13444,13452,13456,13459,13466,13644],[10,12177,12173],{"id":12178},"_6引用",[34,12180,12182],{"id":12181},"_61引用基本用法","6.1引用基本用法",[14,12184,12185],{},"引用的本质：给变量起别名",[14,12187,12188],{},"语法：数据类型 &别名=原名",[245,12190,12192],{"className":247,"code":12191,"language":249,"meta":174,"style":174},"int main() {\n\n    int a = 10;\n    int &b = a;\n\n    cout \u003C\u003C \"a = \" \u003C\u003C a \u003C\u003C endl;\u002F\u002F10\n    cout \u003C\u003C \"b = \" \u003C\u003C b \u003C\u003C endl;\u002F\u002F10\n\n    b = 100;\n\n    cout \u003C\u003C \"a = \" \u003C\u003C a \u003C\u003C endl;\u002F\u002F100\n    cout \u003C\u003C \"b = \" \u003C\u003C b \u003C\u003C endl;\u002F\u002F100\n\n    system(\"pause\");\n\n    return 0;\n}\n",[251,12193,12194,12202,12206,12218,12230,12234,12253,12272,12276,12287,12291,12310,12328,12332,12342,12346,12354],{"__ignoreMap":174},[254,12195,12196,12198,12200],{"class":256,"line":257},[254,12197,268],{"class":260},[254,12199,2113],{"class":2103},[254,12201,10994],{"class":264},[254,12203,12204],{"class":256,"line":175},[254,12205,2540],{"emptyLinePlaceholder":184},[254,12207,12208,12210,12212,12214,12216],{"class":256,"line":1319},[254,12209,2125],{"class":260},[254,12211,11010],{"class":264},[254,12213,310],{"class":260},[254,12215,2178],{"class":313},[254,12217,1430],{"class":264},[254,12219,12220,12222,12224,12226,12228],{"class":256,"line":1334},[254,12221,2125],{"class":260},[254,12223,10725],{"class":260},[254,12225,11086],{"class":264},[254,12227,310],{"class":260},[254,12229,1572],{"class":264},[254,12231,12232],{"class":256,"line":1340},[254,12233,2540],{"emptyLinePlaceholder":184},[254,12235,12236,12238,12240,12243,12245,12247,12249,12251],{"class":256,"line":1354},[254,12237,6670],{"class":264},[254,12239,1308],{"class":260},[254,12241,12242],{"class":369}," \"a = \"",[254,12244,1584],{"class":260},[254,12246,11010],{"class":264},[254,12248,1308],{"class":260},[254,12250,11610],{"class":264},[254,12252,7409],{"class":323},[254,12254,12255,12257,12259,12262,12264,12266,12268,12270],{"class":256,"line":1360},[254,12256,6670],{"class":264},[254,12258,1308],{"class":260},[254,12260,12261],{"class":369}," \"b = \"",[254,12263,1584],{"class":260},[254,12265,11023],{"class":264},[254,12267,1308],{"class":260},[254,12269,11610],{"class":264},[254,12271,7409],{"class":323},[254,12273,12274],{"class":256,"line":1451},[254,12275,2540],{"emptyLinePlaceholder":184},[254,12277,12278,12281,12283,12285],{"class":256,"line":1457},[254,12279,12280],{"class":264},"    b ",[254,12282,310],{"class":260},[254,12284,5895],{"class":313},[254,12286,1430],{"class":264},[254,12288,12289],{"class":256,"line":1469},[254,12290,2540],{"emptyLinePlaceholder":184},[254,12292,12293,12295,12297,12299,12301,12303,12305,12307],{"class":256,"line":1752},[254,12294,6670],{"class":264},[254,12296,1308],{"class":260},[254,12298,12242],{"class":369},[254,12300,1584],{"class":260},[254,12302,11010],{"class":264},[254,12304,1308],{"class":260},[254,12306,11610],{"class":264},[254,12308,12309],{"class":323},"\u002F\u002F100\n",[254,12311,12312,12314,12316,12318,12320,12322,12324,12326],{"class":256,"line":1757},[254,12313,6670],{"class":264},[254,12315,1308],{"class":260},[254,12317,12261],{"class":369},[254,12319,1584],{"class":260},[254,12321,11023],{"class":264},[254,12323,1308],{"class":260},[254,12325,11610],{"class":264},[254,12327,12309],{"class":323},[254,12329,12330],{"class":256,"line":1763},[254,12331,2540],{"emptyLinePlaceholder":184},[254,12333,12334,12336,12338,12340],{"class":256,"line":1768},[254,12335,2443],{"class":2103},[254,12337,265],{"class":264},[254,12339,2448],{"class":369},[254,12341,2859],{"class":264},[254,12343,12344],{"class":256,"line":1782},[254,12345,2540],{"emptyLinePlaceholder":184},[254,12347,12348,12350,12352],{"class":256,"line":1787},[254,12349,4230],{"class":260},[254,12351,4233],{"class":313},[254,12353,1430],{"class":264},[254,12355,12356],{"class":256,"line":1793},[254,12357,1705],{"class":264},[34,12359,12361],{"id":12360},"_62引用的注意事项","6.2引用的注意事项",[21,12363,12364],{},[24,12365,12366],{},"引用必须要初始化",[245,12368,12370],{"className":247,"code":12369,"language":249,"meta":174,"style":174},"int &b;\u002F\u002F非常错误！\n",[251,12371,12372],{"__ignoreMap":174},[254,12373,12374,12376,12378,12381],{"class":256,"line":257},[254,12375,268],{"class":260},[254,12377,10725],{"class":260},[254,12379,12380],{"class":264},"b;",[254,12382,12383],{"class":323},"\u002F\u002F非常错误！\n",[21,12385,12386],{"start":175},[24,12387,12388],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[245,12390,12392],{"className":247,"code":12391,"language":249,"meta":174,"style":174},"int main() {\n    int a = 10;\n    int b = 20;\n    \u002F\u002Fint &c; \u002F\u002F错误，引用必须初始化\n    int &c = a; \u002F\u002F一旦初始化后，就不可以更改\n    c = b; \u002F\u002F这是赋值操作，不是更改引用\n    cout \u003C\u003C \"a = \" \u003C\u003C a \u003C\u003C endl;\u002F\u002F20\n    cout \u003C\u003C \"b = \" \u003C\u003C b \u003C\u003C endl;\u002F\u002F20\n    cout \u003C\u003C \"c = \" \u003C\u003C c \u003C\u003C endl;\u002F\u002F20\n    system(\"pause\");\n    return 0;\n}\n",[251,12393,12394,12402,12414,12426,12434,12450,12463,12481,12499,12519,12529,12537],{"__ignoreMap":174},[254,12395,12396,12398,12400],{"class":256,"line":257},[254,12397,268],{"class":260},[254,12399,2113],{"class":2103},[254,12401,10994],{"class":264},[254,12403,12404,12406,12408,12410,12412],{"class":256,"line":175},[254,12405,2125],{"class":260},[254,12407,11010],{"class":264},[254,12409,310],{"class":260},[254,12411,2178],{"class":313},[254,12413,1430],{"class":264},[254,12415,12416,12418,12420,12422,12424],{"class":256,"line":1319},[254,12417,2125],{"class":260},[254,12419,11023],{"class":264},[254,12421,310],{"class":260},[254,12423,9091],{"class":313},[254,12425,1430],{"class":264},[254,12427,12428,12431],{"class":256,"line":1334},[254,12429,12430],{"class":323},"    \u002F\u002Fint &c;",[254,12432,12433],{"class":323}," \u002F\u002F错误，引用必须初始化\n",[254,12435,12436,12438,12440,12442,12444,12447],{"class":256,"line":1340},[254,12437,2125],{"class":260},[254,12439,10725],{"class":260},[254,12441,3086],{"class":264},[254,12443,310],{"class":260},[254,12445,12446],{"class":264}," a;",[254,12448,12449],{"class":323}," \u002F\u002F一旦初始化后，就不可以更改\n",[254,12451,12452,12455,12457,12460],{"class":256,"line":1354},[254,12453,12454],{"class":264},"    c ",[254,12456,310],{"class":260},[254,12458,12459],{"class":264}," b;",[254,12461,12462],{"class":323}," \u002F\u002F这是赋值操作，不是更改引用\n",[254,12464,12465,12467,12469,12471,12473,12475,12477,12479],{"class":256,"line":1360},[254,12466,6670],{"class":264},[254,12468,1308],{"class":260},[254,12470,12242],{"class":369},[254,12472,1584],{"class":260},[254,12474,11010],{"class":264},[254,12476,1308],{"class":260},[254,12478,11610],{"class":264},[254,12480,7394],{"class":323},[254,12482,12483,12485,12487,12489,12491,12493,12495,12497],{"class":256,"line":1451},[254,12484,6670],{"class":264},[254,12486,1308],{"class":260},[254,12488,12261],{"class":369},[254,12490,1584],{"class":260},[254,12492,11023],{"class":264},[254,12494,1308],{"class":260},[254,12496,11610],{"class":264},[254,12498,7394],{"class":323},[254,12500,12501,12503,12505,12508,12510,12513,12515,12517],{"class":256,"line":1457},[254,12502,6670],{"class":264},[254,12504,1308],{"class":260},[254,12506,12507],{"class":369}," \"c = \"",[254,12509,1584],{"class":260},[254,12511,12512],{"class":264}," c ",[254,12514,1308],{"class":260},[254,12516,11610],{"class":264},[254,12518,7394],{"class":323},[254,12520,12521,12523,12525,12527],{"class":256,"line":1469},[254,12522,2443],{"class":2103},[254,12524,265],{"class":264},[254,12526,2448],{"class":369},[254,12528,2859],{"class":264},[254,12530,12531,12533,12535],{"class":256,"line":1752},[254,12532,4230],{"class":260},[254,12534,4233],{"class":313},[254,12536,1430],{"class":264},[254,12538,12539],{"class":256,"line":1757},[254,12540,1705],{"class":264},[34,12542,12544],{"id":12543},"_63引用做函数参数","6.3引用做函数参数",[14,12546,12547],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[14,12549,12550],{},"优点：可以简化指针修改实参",[245,12552,12554],{"className":247,"code":12553,"language":249,"meta":174,"style":174},"\u002F\u002F1. 值传递\nvoid mySwap01(int a, int b) {\n    int temp = a;\n    a = b;\n    b = temp;\n}\n\n\u002F\u002F2. 地址传递\nvoid mySwap02(int* a, int* b) {\n    int temp = *a;\n    *a = *b;\n    *b = temp;\n}\n\n\u002F\u002F3. 引用传递\nvoid mySwap03(int& a, int& b) {\n    int temp = a;\n    a = b;\n    b = temp;\n}\n\nint main() {\n\n    int a = 10;\n    int b = 20;\n\n    mySwap01(a, b);\u002F\u002F值传递，形参不会修饰实参\n    cout \u003C\u003C \"a:\" \u003C\u003C a \u003C\u003C \" b:\" \u003C\u003C b \u003C\u003C endl;\n\n    mySwap02(&a, &b);\u002F\u002F地址传递，形参会修饰实参\n    cout \u003C\u003C \"a:\" \u003C\u003C a \u003C\u003C \" b:\" \u003C\u003C b \u003C\u003C endl;\n\n    mySwap03(a, b);\u002F\u002F引用传递，形参会修饰实参\n    cout \u003C\u003C \"a:\" \u003C\u003C a \u003C\u003C \" b:\" \u003C\u003C b \u003C\u003C endl;\n\n    system(\"pause\");\n\n    return 0;\n}\n\n",[251,12555,12556,12561,12584,12595,12605,12614,12618,12622,12627,12649,12661,12673,12683,12687,12691,12696,12718,12728,12736,12744,12748,12752,12760,12764,12776,12788,12792,12803,12829,12833,12853,12877,12881,12891,12915,12919,12929,12933,12941],{"__ignoreMap":174},[254,12557,12558],{"class":256,"line":257},[254,12559,12560],{"class":323},"\u002F\u002F1. 值传递\n",[254,12562,12563,12565,12568,12570,12572,12574,12577,12579,12581],{"class":256,"line":175},[254,12564,5505],{"class":260},[254,12566,12567],{"class":2103}," mySwap01",[254,12569,265],{"class":264},[254,12571,268],{"class":260},[254,12573,1538],{"class":5357},[254,12575,12576],{"class":264},", ",[254,12578,268],{"class":260},[254,12580,2973],{"class":5357},[254,12582,12583],{"class":264},") {\n",[254,12585,12586,12588,12591,12593],{"class":256,"line":1319},[254,12587,2125],{"class":260},[254,12589,12590],{"class":264}," temp ",[254,12592,310],{"class":260},[254,12594,1572],{"class":264},[254,12596,12597,12600,12602],{"class":256,"line":1334},[254,12598,12599],{"class":264},"    a ",[254,12601,310],{"class":260},[254,12603,12604],{"class":264}," b;\n",[254,12606,12607,12609,12611],{"class":256,"line":1340},[254,12608,12280],{"class":264},[254,12610,310],{"class":260},[254,12612,12613],{"class":264}," temp;\n",[254,12615,12616],{"class":256,"line":1354},[254,12617,1705],{"class":264},[254,12619,12620],{"class":256,"line":1360},[254,12621,2540],{"emptyLinePlaceholder":184},[254,12623,12624],{"class":256,"line":1451},[254,12625,12626],{"class":323},"\u002F\u002F2. 地址传递\n",[254,12628,12629,12631,12634,12636,12639,12641,12643,12645,12647],{"class":256,"line":1457},[254,12630,5505],{"class":260},[254,12632,12633],{"class":2103}," mySwap02",[254,12635,265],{"class":264},[254,12637,12638],{"class":260},"int*",[254,12640,1538],{"class":5357},[254,12642,12576],{"class":264},[254,12644,12638],{"class":260},[254,12646,2973],{"class":5357},[254,12648,12583],{"class":264},[254,12650,12651,12653,12655,12657,12659],{"class":256,"line":1469},[254,12652,2125],{"class":260},[254,12654,12590],{"class":264},[254,12656,310],{"class":260},[254,12658,6659],{"class":260},[254,12660,6338],{"class":264},[254,12662,12663,12665,12667,12669,12671],{"class":256,"line":1752},[254,12664,6544],{"class":260},[254,12666,11060],{"class":264},[254,12668,310],{"class":260},[254,12670,6659],{"class":260},[254,12672,6210],{"class":264},[254,12674,12675,12677,12679,12681],{"class":256,"line":1757},[254,12676,6544],{"class":260},[254,12678,11086],{"class":264},[254,12680,310],{"class":260},[254,12682,12613],{"class":264},[254,12684,12685],{"class":256,"line":1763},[254,12686,1705],{"class":264},[254,12688,12689],{"class":256,"line":1768},[254,12690,2540],{"emptyLinePlaceholder":184},[254,12692,12693],{"class":256,"line":1782},[254,12694,12695],{"class":323},"\u002F\u002F3. 引用传递\n",[254,12697,12698,12700,12703,12705,12708,12710,12712,12714,12716],{"class":256,"line":1787},[254,12699,5505],{"class":260},[254,12701,12702],{"class":2103}," mySwap03",[254,12704,265],{"class":264},[254,12706,12707],{"class":260},"int&",[254,12709,1538],{"class":5357},[254,12711,12576],{"class":264},[254,12713,12707],{"class":260},[254,12715,2973],{"class":5357},[254,12717,12583],{"class":264},[254,12719,12720,12722,12724,12726],{"class":256,"line":1793},[254,12721,2125],{"class":260},[254,12723,12590],{"class":264},[254,12725,310],{"class":260},[254,12727,1572],{"class":264},[254,12729,12730,12732,12734],{"class":256,"line":1814},[254,12731,12599],{"class":264},[254,12733,310],{"class":260},[254,12735,12604],{"class":264},[254,12737,12738,12740,12742],{"class":256,"line":1819},[254,12739,12280],{"class":264},[254,12741,310],{"class":260},[254,12743,12613],{"class":264},[254,12745,12746],{"class":256,"line":1833},[254,12747,1705],{"class":264},[254,12749,12750],{"class":256,"line":1838},[254,12751,2540],{"emptyLinePlaceholder":184},[254,12753,12754,12756,12758],{"class":256,"line":1867},[254,12755,268],{"class":260},[254,12757,2113],{"class":2103},[254,12759,10994],{"class":264},[254,12761,12762],{"class":256,"line":1872},[254,12763,2540],{"emptyLinePlaceholder":184},[254,12765,12766,12768,12770,12772,12774],{"class":256,"line":1889},[254,12767,2125],{"class":260},[254,12769,11010],{"class":264},[254,12771,310],{"class":260},[254,12773,2178],{"class":313},[254,12775,1430],{"class":264},[254,12777,12778,12780,12782,12784,12786],{"class":256,"line":1894},[254,12779,2125],{"class":260},[254,12781,11023],{"class":264},[254,12783,310],{"class":260},[254,12785,9091],{"class":313},[254,12787,1430],{"class":264},[254,12789,12790],{"class":256,"line":1899},[254,12791,2540],{"emptyLinePlaceholder":184},[254,12793,12794,12797,12800],{"class":256,"line":1904},[254,12795,12796],{"class":2103},"    mySwap01",[254,12798,12799],{"class":264},"(a, b);",[254,12801,12802],{"class":323},"\u002F\u002F值传递，形参不会修饰实参\n",[254,12804,12805,12807,12809,12812,12814,12816,12818,12821,12823,12825,12827],{"class":256,"line":1918},[254,12806,6670],{"class":264},[254,12808,1308],{"class":260},[254,12810,12811],{"class":369}," \"a:\"",[254,12813,1584],{"class":260},[254,12815,11010],{"class":264},[254,12817,1308],{"class":260},[254,12819,12820],{"class":369}," \" b:\"",[254,12822,1584],{"class":260},[254,12824,11023],{"class":264},[254,12826,1308],{"class":260},[254,12828,8981],{"class":264},[254,12830,12831],{"class":256,"line":1923},[254,12832,2540],{"emptyLinePlaceholder":184},[254,12834,12835,12838,12840,12842,12845,12847,12850],{"class":256,"line":2717},[254,12836,12837],{"class":2103},"    mySwap02",[254,12839,265],{"class":264},[254,12841,617],{"class":260},[254,12843,12844],{"class":264},"a, ",[254,12846,617],{"class":260},[254,12848,12849],{"class":264},"b);",[254,12851,12852],{"class":323},"\u002F\u002F地址传递，形参会修饰实参\n",[254,12854,12855,12857,12859,12861,12863,12865,12867,12869,12871,12873,12875],{"class":256,"line":2731},[254,12856,6670],{"class":264},[254,12858,1308],{"class":260},[254,12860,12811],{"class":369},[254,12862,1584],{"class":260},[254,12864,11010],{"class":264},[254,12866,1308],{"class":260},[254,12868,12820],{"class":369},[254,12870,1584],{"class":260},[254,12872,11023],{"class":264},[254,12874,1308],{"class":260},[254,12876,8981],{"class":264},[254,12878,12879],{"class":256,"line":2739},[254,12880,2540],{"emptyLinePlaceholder":184},[254,12882,12883,12886,12888],{"class":256,"line":2744},[254,12884,12885],{"class":2103},"    mySwap03",[254,12887,12799],{"class":264},[254,12889,12890],{"class":323},"\u002F\u002F引用传递，形参会修饰实参\n",[254,12892,12893,12895,12897,12899,12901,12903,12905,12907,12909,12911,12913],{"class":256,"line":2750},[254,12894,6670],{"class":264},[254,12896,1308],{"class":260},[254,12898,12811],{"class":369},[254,12900,1584],{"class":260},[254,12902,11010],{"class":264},[254,12904,1308],{"class":260},[254,12906,12820],{"class":369},[254,12908,1584],{"class":260},[254,12910,11023],{"class":264},[254,12912,1308],{"class":260},[254,12914,8981],{"class":264},[254,12916,12917],{"class":256,"line":2756},[254,12918,2540],{"emptyLinePlaceholder":184},[254,12920,12921,12923,12925,12927],{"class":256,"line":2761},[254,12922,2443],{"class":2103},[254,12924,265],{"class":264},[254,12926,2448],{"class":369},[254,12928,2859],{"class":264},[254,12930,12931],{"class":256,"line":8089},[254,12932,2540],{"emptyLinePlaceholder":184},[254,12934,12935,12937,12939],{"class":256,"line":8113},[254,12936,4230],{"class":260},[254,12938,4233],{"class":313},[254,12940,1430],{"class":264},[254,12942,12943],{"class":256,"line":8118},[254,12944,1705],{"class":264},[34,12946,12948],{"id":12947},"_64引用做函数的返回值","6.4引用做函数的返回值",[14,12950,12951],{},"作用：引用是可以作为函数的返回值存在的",[14,12953,9166,12954],{},[414,12955,12956],{},"不要返回局部变量引用",[14,12958,12959],{},"用法：函数调用作为左值",[245,12961,12963],{"className":10082,"code":12962,"language":10084,"meta":174,"style":174},"\u002F\u002F返回局部变量引用\nint& test01() {\n    int a = 10; \u002F\u002F局部变量\n    return a;\n}\n\n\u002F\u002F返回静态变量引用\nint& test02() {\n    static int a = 20;\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n    return a;\n}\n\nint main() {\n\n    \u002F\u002F不能返回局部变量的引用\n    int& ref = test01();\n    cout \u003C\u003C \"ref = \" \u003C\u003C ref \u003C\u003C endl;\u002F\u002F10 第一次正确，是因为编译器做了保留\n    cout \u003C\u003C \"ref = \" \u003C\u003C ref \u003C\u003C endl;\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n\n    \u002F\u002F如果函数做左值，那么必须返回引用\n    int& ref2 = test02();\n    cout \u003C\u003C \"ref2 = \" \u003C\u003C ref2 \u003C\u003C endl; \u002F\u002F20\n    cout \u003C\u003C \"ref2 = \" \u003C\u003C ref2 \u003C\u003C endl; \u002F\u002F20\n\n    test02() = 1000;\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n\n    cout \u003C\u003C \"ref2 = \" \u003C\u003C ref2 \u003C\u003C endl; \u002F\u002F1000\n    cout \u003C\u003C \"ref2 = \" \u003C\u003C ref2 \u003C\u003C endl; \u002F\u002F1000\n\n    system(\"pause\");\n\n    return 0;\n}\n",[251,12964,12965,12970,12978,12993,12999,13003,13007,13012,13020,13037,13043,13047,13051,13059,13063,13068,13082,13102,13121,13125,13130,13143,13163,13181,13185,13201,13205,13224,13242,13246,13256,13260,13268],{"__ignoreMap":174},[254,12966,12967],{"class":256,"line":257},[254,12968,12969],{"class":323},"\u002F\u002F返回局部变量引用\n",[254,12971,12972,12974,12976],{"class":256,"line":175},[254,12973,12707],{"class":260},[254,12975,5729],{"class":2103},[254,12977,10994],{"class":264},[254,12979,12980,12982,12984,12986,12988,12990],{"class":256,"line":1319},[254,12981,2125],{"class":260},[254,12983,11010],{"class":264},[254,12985,310],{"class":260},[254,12987,2178],{"class":313},[254,12989,320],{"class":264},[254,12991,12992],{"class":323}," \u002F\u002F局部变量\n",[254,12994,12995,12997],{"class":256,"line":1334},[254,12996,4230],{"class":260},[254,12998,1572],{"class":264},[254,13000,13001],{"class":256,"line":1340},[254,13002,1705],{"class":264},[254,13004,13005],{"class":256,"line":1354},[254,13006,2540],{"emptyLinePlaceholder":184},[254,13008,13009],{"class":256,"line":1360},[254,13010,13011],{"class":323},"\u002F\u002F返回静态变量引用\n",[254,13013,13014,13016,13018],{"class":256,"line":1451},[254,13015,12707],{"class":260},[254,13017,5798],{"class":2103},[254,13019,10994],{"class":264},[254,13021,13022,13024,13026,13028,13030,13032,13034],{"class":256,"line":1457},[254,13023,11161],{"class":260},[254,13025,2522],{"class":260},[254,13027,11010],{"class":264},[254,13029,310],{"class":260},[254,13031,9091],{"class":313},[254,13033,320],{"class":264},[254,13035,13036],{"class":323},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[254,13038,13039,13041],{"class":256,"line":1469},[254,13040,4230],{"class":260},[254,13042,1572],{"class":264},[254,13044,13045],{"class":256,"line":1752},[254,13046,1705],{"class":264},[254,13048,13049],{"class":256,"line":1757},[254,13050,2540],{"emptyLinePlaceholder":184},[254,13052,13053,13055,13057],{"class":256,"line":1763},[254,13054,268],{"class":260},[254,13056,2113],{"class":2103},[254,13058,10994],{"class":264},[254,13060,13061],{"class":256,"line":1768},[254,13062,2540],{"emptyLinePlaceholder":184},[254,13064,13065],{"class":256,"line":1782},[254,13066,13067],{"class":323},"    \u002F\u002F不能返回局部变量的引用\n",[254,13069,13070,13073,13076,13078,13080],{"class":256,"line":1787},[254,13071,13072],{"class":260},"    int&",[254,13074,13075],{"class":264}," ref ",[254,13077,310],{"class":260},[254,13079,5729],{"class":2103},[254,13081,5777],{"class":264},[254,13083,13084,13086,13088,13091,13093,13095,13097,13099],{"class":256,"line":1793},[254,13085,6670],{"class":264},[254,13087,1308],{"class":260},[254,13089,13090],{"class":369}," \"ref = \"",[254,13092,1584],{"class":260},[254,13094,13075],{"class":264},[254,13096,1308],{"class":260},[254,13098,11610],{"class":264},[254,13100,13101],{"class":323},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[254,13103,13104,13106,13108,13110,13112,13114,13116,13118],{"class":256,"line":1814},[254,13105,6670],{"class":264},[254,13107,1308],{"class":260},[254,13109,13090],{"class":369},[254,13111,1584],{"class":260},[254,13113,13075],{"class":264},[254,13115,1308],{"class":260},[254,13117,11610],{"class":264},[254,13119,13120],{"class":323},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[254,13122,13123],{"class":256,"line":1819},[254,13124,2540],{"emptyLinePlaceholder":184},[254,13126,13127],{"class":256,"line":1833},[254,13128,13129],{"class":323},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[254,13131,13132,13134,13137,13139,13141],{"class":256,"line":1838},[254,13133,13072],{"class":260},[254,13135,13136],{"class":264}," ref2 ",[254,13138,310],{"class":260},[254,13140,5798],{"class":2103},[254,13142,5777],{"class":264},[254,13144,13145,13147,13149,13152,13154,13156,13158,13160],{"class":256,"line":1867},[254,13146,6670],{"class":264},[254,13148,1308],{"class":260},[254,13150,13151],{"class":369}," \"ref2 = \"",[254,13153,1584],{"class":260},[254,13155,13136],{"class":264},[254,13157,1308],{"class":260},[254,13159,11610],{"class":264},[254,13161,13162],{"class":323}," \u002F\u002F20\n",[254,13164,13165,13167,13169,13171,13173,13175,13177,13179],{"class":256,"line":1872},[254,13166,6670],{"class":264},[254,13168,1308],{"class":260},[254,13170,13151],{"class":369},[254,13172,1584],{"class":260},[254,13174,13136],{"class":264},[254,13176,1308],{"class":260},[254,13178,11610],{"class":264},[254,13180,13162],{"class":323},[254,13182,13183],{"class":256,"line":1889},[254,13184,2540],{"emptyLinePlaceholder":184},[254,13186,13187,13189,13192,13194,13196,13198],{"class":256,"line":1894},[254,13188,5843],{"class":2103},[254,13190,13191],{"class":264},"() ",[254,13193,310],{"class":260},[254,13195,3139],{"class":313},[254,13197,320],{"class":264},[254,13199,13200],{"class":323},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[254,13202,13203],{"class":256,"line":1899},[254,13204,2540],{"emptyLinePlaceholder":184},[254,13206,13207,13209,13211,13213,13215,13217,13219,13221],{"class":256,"line":1904},[254,13208,6670],{"class":264},[254,13210,1308],{"class":260},[254,13212,13151],{"class":369},[254,13214,1584],{"class":260},[254,13216,13136],{"class":264},[254,13218,1308],{"class":260},[254,13220,11610],{"class":264},[254,13222,13223],{"class":323}," \u002F\u002F1000\n",[254,13225,13226,13228,13230,13232,13234,13236,13238,13240],{"class":256,"line":1918},[254,13227,6670],{"class":264},[254,13229,1308],{"class":260},[254,13231,13151],{"class":369},[254,13233,1584],{"class":260},[254,13235,13136],{"class":264},[254,13237,1308],{"class":260},[254,13239,11610],{"class":264},[254,13241,13223],{"class":323},[254,13243,13244],{"class":256,"line":1923},[254,13245,2540],{"emptyLinePlaceholder":184},[254,13247,13248,13250,13252,13254],{"class":256,"line":2717},[254,13249,2443],{"class":2103},[254,13251,265],{"class":264},[254,13253,2448],{"class":369},[254,13255,2859],{"class":264},[254,13257,13258],{"class":256,"line":2731},[254,13259,2540],{"emptyLinePlaceholder":184},[254,13261,13262,13264,13266],{"class":256,"line":2739},[254,13263,4230],{"class":260},[254,13265,4233],{"class":313},[254,13267,1430],{"class":264},[254,13269,13270],{"class":256,"line":2744},[254,13271,1705],{"class":264},[34,13273,13275],{"id":13274},"_65引用的本质","6.5引用的本质",[14,13277,13278,13279],{},"本质：",[414,13280,13281],{},"引用的本质在c++内部实现是一个指针常量.",[245,13283,13285],{"className":247,"code":13284,"language":249,"meta":174,"style":174},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\nvoid func(int& ref){\n    ref = 100; \u002F\u002F ref是引用，转换为*ref = 100\n}\nint main(){\n    int a = 10;\n    \n    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n    int& ref = a; \n    ref = 20; \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n    \n    cout \u003C\u003C \"a:\" \u003C\u003C a \u003C\u003C endl;\n    cout \u003C\u003C \"ref:\" \u003C\u003C ref \u003C\u003C endl;\n    \n    func(a);\n    return 0;\n}\n",[251,13286,13287,13292,13308,13322,13326,13335,13347,13352,13357,13368,13381,13385,13401,13418,13422,13430,13438],{"__ignoreMap":174},[254,13288,13289],{"class":256,"line":257},[254,13290,13291],{"class":323},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[254,13293,13294,13296,13298,13300,13302,13305],{"class":256,"line":175},[254,13295,5505],{"class":260},[254,13297,11526],{"class":2103},[254,13299,265],{"class":264},[254,13301,12707],{"class":260},[254,13303,13304],{"class":5357}," ref",[254,13306,13307],{"class":264},"){\n",[254,13309,13310,13313,13315,13317,13319],{"class":256,"line":1319},[254,13311,13312],{"class":264},"    ref ",[254,13314,310],{"class":260},[254,13316,5895],{"class":313},[254,13318,320],{"class":264},[254,13320,13321],{"class":323}," \u002F\u002F ref是引用，转换为*ref = 100\n",[254,13323,13324],{"class":256,"line":1334},[254,13325,1705],{"class":264},[254,13327,13328,13330,13332],{"class":256,"line":1340},[254,13329,268],{"class":260},[254,13331,2113],{"class":2103},[254,13333,13334],{"class":264},"(){\n",[254,13336,13337,13339,13341,13343,13345],{"class":256,"line":1354},[254,13338,2125],{"class":260},[254,13340,11010],{"class":264},[254,13342,310],{"class":260},[254,13344,2178],{"class":313},[254,13346,1430],{"class":264},[254,13348,13349],{"class":256,"line":1360},[254,13350,13351],{"class":264},"    \n",[254,13353,13354],{"class":256,"line":1451},[254,13355,13356],{"class":323},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[254,13358,13359,13361,13363,13365],{"class":256,"line":1457},[254,13360,13072],{"class":260},[254,13362,13075],{"class":264},[254,13364,310],{"class":260},[254,13366,13367],{"class":264}," a; \n",[254,13369,13370,13372,13374,13376,13378],{"class":256,"line":1469},[254,13371,13312],{"class":264},[254,13373,310],{"class":260},[254,13375,9091],{"class":313},[254,13377,320],{"class":264},[254,13379,13380],{"class":323}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[254,13382,13383],{"class":256,"line":1752},[254,13384,13351],{"class":264},[254,13386,13387,13389,13391,13393,13395,13397,13399],{"class":256,"line":1757},[254,13388,6670],{"class":264},[254,13390,1308],{"class":260},[254,13392,12811],{"class":369},[254,13394,1584],{"class":260},[254,13396,11010],{"class":264},[254,13398,1308],{"class":260},[254,13400,8981],{"class":264},[254,13402,13403,13405,13407,13410,13412,13414,13416],{"class":256,"line":1763},[254,13404,6670],{"class":264},[254,13406,1308],{"class":260},[254,13408,13409],{"class":369}," \"ref:\"",[254,13411,1584],{"class":260},[254,13413,13075],{"class":264},[254,13415,1308],{"class":260},[254,13417,8981],{"class":264},[254,13419,13420],{"class":256,"line":1768},[254,13421,13351],{"class":264},[254,13423,13424,13427],{"class":256,"line":1782},[254,13425,13426],{"class":2103},"    func",[254,13428,13429],{"class":264},"(a);\n",[254,13431,13432,13434,13436],{"class":256,"line":1787},[254,13433,4230],{"class":260},[254,13435,4233],{"class":313},[254,13437,1430],{"class":264},[254,13439,13440],{"class":256,"line":1793},[254,13441,1705],{"class":264},[14,13443,11473],{},[21,13445,13446,13449],{},[24,13447,13448],{},"引用的本质，就是一个指针常量",[24,13450,13451],{},"引用一旦初始化，就不可以发生改变",[34,13453,13455],{"id":13454},"_66常量引用","6.6常量引用",[14,13457,13458],{},"作用：常量引用主要用来修饰形参",[14,13460,13461,13462,13465],{},"在函数形参列表中，可以加",[414,13463,13464],{},"const修饰形参","，防止形参改变实参",[245,13467,13469],{"className":247,"code":13468,"language":249,"meta":174,"style":174},"\u002F\u002F引用使用的场景，通常用来修饰形参\n\u002F\u002F加上const就不能修改实参的\nvoid showValue(const int& v) {\n    \u002F\u002Fv += 100;\n    cout \u003C\u003C v \u003C\u003C endl;\n}\n\nint main() {\n\n    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n    const int& ref = 10;\n\n    \u002F\u002Fref = 100;  \u002F\u002F加入const后不可以修改变量\n    cout \u003C\u003C ref \u003C\u003C endl;\n\n    \u002F\u002F函数中利用常量引用防止误操作修改实参\n    int a = 10;\n    showValue(a);\n\n    system(\"pause\");\n\n    return 0;\n}\n",[251,13470,13471,13476,13481,13500,13505,13518,13522,13526,13534,13538,13543,13548,13562,13566,13574,13586,13590,13595,13607,13614,13618,13628,13632,13640],{"__ignoreMap":174},[254,13472,13473],{"class":256,"line":257},[254,13474,13475],{"class":323},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[254,13477,13478],{"class":256,"line":175},[254,13479,13480],{"class":323},"\u002F\u002F加上const就不能修改实参的\n",[254,13482,13483,13485,13488,13490,13492,13495,13498],{"class":256,"line":1319},[254,13484,5505],{"class":260},[254,13486,13487],{"class":2103}," showValue",[254,13489,265],{"class":264},[254,13491,6933],{"class":260},[254,13493,13494],{"class":260}," int&",[254,13496,13497],{"class":5357}," v",[254,13499,12583],{"class":264},[254,13501,13502],{"class":256,"line":1334},[254,13503,13504],{"class":323},"    \u002F\u002Fv += 100;\n",[254,13506,13507,13509,13511,13514,13516],{"class":256,"line":1340},[254,13508,6670],{"class":264},[254,13510,1308],{"class":260},[254,13512,13513],{"class":264}," v ",[254,13515,1308],{"class":260},[254,13517,8981],{"class":264},[254,13519,13520],{"class":256,"line":1354},[254,13521,1705],{"class":264},[254,13523,13524],{"class":256,"line":1360},[254,13525,2540],{"emptyLinePlaceholder":184},[254,13527,13528,13530,13532],{"class":256,"line":1451},[254,13529,268],{"class":260},[254,13531,2113],{"class":2103},[254,13533,10994],{"class":264},[254,13535,13536],{"class":256,"line":1457},[254,13537,2540],{"emptyLinePlaceholder":184},[254,13539,13540],{"class":256,"line":1469},[254,13541,13542],{"class":323},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[254,13544,13545],{"class":256,"line":1752},[254,13546,13547],{"class":323},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[254,13549,13550,13552,13554,13556,13558,13560],{"class":256,"line":1757},[254,13551,11362],{"class":260},[254,13553,13494],{"class":260},[254,13555,13075],{"class":264},[254,13557,310],{"class":260},[254,13559,2178],{"class":313},[254,13561,1430],{"class":264},[254,13563,13564],{"class":256,"line":1763},[254,13565,2540],{"emptyLinePlaceholder":184},[254,13567,13568,13571],{"class":256,"line":1768},[254,13569,13570],{"class":323},"    \u002F\u002Fref = 100;",[254,13572,13573],{"class":323},"  \u002F\u002F加入const后不可以修改变量\n",[254,13575,13576,13578,13580,13582,13584],{"class":256,"line":1782},[254,13577,6670],{"class":264},[254,13579,1308],{"class":260},[254,13581,13075],{"class":264},[254,13583,1308],{"class":260},[254,13585,8981],{"class":264},[254,13587,13588],{"class":256,"line":1787},[254,13589,2540],{"emptyLinePlaceholder":184},[254,13591,13592],{"class":256,"line":1793},[254,13593,13594],{"class":323},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[254,13596,13597,13599,13601,13603,13605],{"class":256,"line":1814},[254,13598,2125],{"class":260},[254,13600,11010],{"class":264},[254,13602,310],{"class":260},[254,13604,2178],{"class":313},[254,13606,1430],{"class":264},[254,13608,13609,13612],{"class":256,"line":1819},[254,13610,13611],{"class":2103},"    showValue",[254,13613,13429],{"class":264},[254,13615,13616],{"class":256,"line":1833},[254,13617,2540],{"emptyLinePlaceholder":184},[254,13619,13620,13622,13624,13626],{"class":256,"line":1838},[254,13621,2443],{"class":2103},[254,13623,265],{"class":264},[254,13625,2448],{"class":369},[254,13627,2859],{"class":264},[254,13629,13630],{"class":256,"line":1867},[254,13631,2540],{"emptyLinePlaceholder":184},[254,13633,13634,13636,13638],{"class":256,"line":1872},[254,13635,4230],{"class":260},[254,13637,4233],{"class":313},[254,13639,1430],{"class":264},[254,13641,13642],{"class":256,"line":1889},[254,13643,1705],{"class":264},[5267,13645,13646],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":174,"searchDepth":175,"depth":175,"links":13648},[13649,13650,13651,13652,13653,13654],{"id":12181,"depth":175,"text":12182},{"id":12360,"depth":175,"text":12361},{"id":12543,"depth":175,"text":12544},{"id":12947,"depth":175,"text":12948},{"id":13274,"depth":175,"text":13275},{"id":13454,"depth":175,"text":13455},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12173,"description":174},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":13661,"title":13662,"body":13663,"description":174,"extension":181,"meta":14744,"navigation":184,"path":14745,"seo":14746,"stem":14747,"__hash__":14748},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":13664,"toc":14736},[13665,13668,13672,13675,13680,13912,13914,13925,13929,13932,13940,14044,14047,14051,14054,14058,14061,14066,14088,14094,14421,14424,14428,14436,14733],[10,13666,13662],{"id":13667},"_7函数高级部分",[34,13669,13671],{"id":13670},"_71函数默认参数","7.1函数默认参数",[14,13673,13674],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[14,13676,5322,13677],{},[251,13678,13679],{}," 返回值类型  函数名 （参数= 默认值）{}",[245,13681,13683],{"className":247,"code":13682,"language":249,"meta":174,"style":174},"int func(int a, int b = 10, int c = 10) {\n    return a + b + c;\n}\n\n\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\nint func2(int a = 10, int b = 10);\nint func2(int a, int b) {\n    return a + b;\n}\n\nint main() {\n\n    cout \u003C\u003C \"ret = \" \u003C\u003C func(20, 20) \u003C\u003C endl;\n    cout \u003C\u003C \"ret = \" \u003C\u003C func(100) \u003C\u003C endl;\n\n    system(\"pause\");\n\n    return 0;\n}\n",[251,13684,13685,13720,13735,13739,13743,13748,13753,13782,13802,13812,13816,13820,13828,13832,13860,13882,13886,13896,13900,13908],{"__ignoreMap":174},[254,13686,13687,13689,13691,13693,13695,13697,13699,13701,13703,13706,13708,13710,13712,13714,13716,13718],{"class":256,"line":257},[254,13688,268],{"class":260},[254,13690,11526],{"class":2103},[254,13692,265],{"class":264},[254,13694,268],{"class":260},[254,13696,1538],{"class":5357},[254,13698,12576],{"class":264},[254,13700,268],{"class":260},[254,13702,2973],{"class":5357},[254,13704,13705],{"class":260}," =",[254,13707,2178],{"class":313},[254,13709,12576],{"class":264},[254,13711,268],{"class":260},[254,13713,2989],{"class":5357},[254,13715,13705],{"class":260},[254,13717,2178],{"class":313},[254,13719,12583],{"class":264},[254,13721,13722,13724,13726,13728,13730,13732],{"class":256,"line":175},[254,13723,4230],{"class":260},[254,13725,11010],{"class":264},[254,13727,745],{"class":260},[254,13729,11023],{"class":264},[254,13731,745],{"class":260},[254,13733,13734],{"class":264}," c;\n",[254,13736,13737],{"class":256,"line":1319},[254,13738,1705],{"class":264},[254,13740,13741],{"class":256,"line":1334},[254,13742,2540],{"emptyLinePlaceholder":184},[254,13744,13745],{"class":256,"line":1340},[254,13746,13747],{"class":323},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[254,13749,13750],{"class":256,"line":1354},[254,13751,13752],{"class":323},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[254,13754,13755,13757,13760,13762,13764,13766,13768,13770,13772,13774,13776,13778,13780],{"class":256,"line":1360},[254,13756,268],{"class":260},[254,13758,13759],{"class":2103}," func2",[254,13761,265],{"class":264},[254,13763,268],{"class":260},[254,13765,1538],{"class":5357},[254,13767,13705],{"class":260},[254,13769,2178],{"class":313},[254,13771,12576],{"class":264},[254,13773,268],{"class":260},[254,13775,2973],{"class":5357},[254,13777,13705],{"class":260},[254,13779,2178],{"class":313},[254,13781,2859],{"class":264},[254,13783,13784,13786,13788,13790,13792,13794,13796,13798,13800],{"class":256,"line":1451},[254,13785,268],{"class":260},[254,13787,13759],{"class":2103},[254,13789,265],{"class":264},[254,13791,268],{"class":260},[254,13793,1538],{"class":5357},[254,13795,12576],{"class":264},[254,13797,268],{"class":260},[254,13799,2973],{"class":5357},[254,13801,12583],{"class":264},[254,13803,13804,13806,13808,13810],{"class":256,"line":1457},[254,13805,4230],{"class":260},[254,13807,11010],{"class":264},[254,13809,745],{"class":260},[254,13811,12604],{"class":264},[254,13813,13814],{"class":256,"line":1469},[254,13815,1705],{"class":264},[254,13817,13818],{"class":256,"line":1752},[254,13819,2540],{"emptyLinePlaceholder":184},[254,13821,13822,13824,13826],{"class":256,"line":1757},[254,13823,268],{"class":260},[254,13825,2113],{"class":2103},[254,13827,10994],{"class":264},[254,13829,13830],{"class":256,"line":1763},[254,13831,2540],{"emptyLinePlaceholder":184},[254,13833,13834,13836,13838,13841,13843,13845,13847,13849,13851,13853,13856,13858],{"class":256,"line":1768},[254,13835,6670],{"class":264},[254,13837,1308],{"class":260},[254,13839,13840],{"class":369}," \"ret = \"",[254,13842,1584],{"class":260},[254,13844,11526],{"class":2103},[254,13846,265],{"class":264},[254,13848,964],{"class":313},[254,13850,12576],{"class":264},[254,13852,964],{"class":313},[254,13854,13855],{"class":264},") ",[254,13857,1308],{"class":260},[254,13859,8981],{"class":264},[254,13861,13862,13864,13866,13868,13870,13872,13874,13876,13878,13880],{"class":256,"line":1782},[254,13863,6670],{"class":264},[254,13865,1308],{"class":260},[254,13867,13840],{"class":369},[254,13869,1584],{"class":260},[254,13871,11526],{"class":2103},[254,13873,265],{"class":264},[254,13875,575],{"class":313},[254,13877,13855],{"class":264},[254,13879,1308],{"class":260},[254,13881,8981],{"class":264},[254,13883,13884],{"class":256,"line":1787},[254,13885,2540],{"emptyLinePlaceholder":184},[254,13887,13888,13890,13892,13894],{"class":256,"line":1793},[254,13889,2443],{"class":2103},[254,13891,265],{"class":264},[254,13893,2448],{"class":369},[254,13895,2859],{"class":264},[254,13897,13898],{"class":256,"line":1814},[254,13899,2540],{"emptyLinePlaceholder":184},[254,13901,13902,13904,13906],{"class":256,"line":1819},[254,13903,4230],{"class":260},[254,13905,4233],{"class":313},[254,13907,1430],{"class":264},[254,13909,13910],{"class":256,"line":1833},[254,13911,1705],{"class":264},[14,13913,11473],{},[21,13915,13916,13919,13922],{},[24,13917,13918],{},"我传就用我；没传就用你",[24,13920,13921],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[24,13923,13924],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[34,13926,13928],{"id":13927},"_72函数的占位参数","7.2函数的占位参数",[14,13930,13931],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[14,13933,13934,13936,13937],{},[414,13935,5322],{}," ",[251,13938,13939],{},"返回值类型 函数名 (数据类型){}",[245,13941,13943],{"className":247,"code":13942,"language":249,"meta":174,"style":174},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\nvoid func(int a, int) {\n    cout \u003C\u003C \"this is func\" \u003C\u003C endl;\n}\nint main() {\n\n    func(10,10); \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n\n    system(\"pause\");\n\n    return 0;\n}\n",[251,13944,13945,13950,13968,13981,13985,13993,13997,14014,14018,14028,14032,14040],{"__ignoreMap":174},[254,13946,13947],{"class":256,"line":257},[254,13948,13949],{"class":323},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[254,13951,13952,13954,13956,13958,13960,13962,13964,13966],{"class":256,"line":175},[254,13953,5505],{"class":260},[254,13955,11526],{"class":2103},[254,13957,265],{"class":264},[254,13959,268],{"class":260},[254,13961,1538],{"class":5357},[254,13963,12576],{"class":264},[254,13965,268],{"class":260},[254,13967,12583],{"class":264},[254,13969,13970,13972,13974,13977,13979],{"class":256,"line":1319},[254,13971,6670],{"class":264},[254,13973,1308],{"class":260},[254,13975,13976],{"class":369}," \"this is func\"",[254,13978,1584],{"class":260},[254,13980,8981],{"class":264},[254,13982,13983],{"class":256,"line":1334},[254,13984,1705],{"class":264},[254,13986,13987,13989,13991],{"class":256,"line":1340},[254,13988,268],{"class":260},[254,13990,2113],{"class":2103},[254,13992,10994],{"class":264},[254,13994,13995],{"class":256,"line":1354},[254,13996,2540],{"emptyLinePlaceholder":184},[254,13998,13999,14001,14003,14005,14007,14009,14011],{"class":256,"line":1360},[254,14000,13426],{"class":2103},[254,14002,265],{"class":264},[254,14004,710],{"class":313},[254,14006,642],{"class":264},[254,14008,710],{"class":313},[254,14010,6107],{"class":264},[254,14012,14013],{"class":323}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[254,14015,14016],{"class":256,"line":1451},[254,14017,2540],{"emptyLinePlaceholder":184},[254,14019,14020,14022,14024,14026],{"class":256,"line":1457},[254,14021,2443],{"class":2103},[254,14023,265],{"class":264},[254,14025,2448],{"class":369},[254,14027,2859],{"class":264},[254,14029,14030],{"class":256,"line":1469},[254,14031,2540],{"emptyLinePlaceholder":184},[254,14033,14034,14036,14038],{"class":256,"line":1752},[254,14035,4230],{"class":260},[254,14037,4233],{"class":313},[254,14039,1430],{"class":264},[254,14041,14042],{"class":256,"line":1757},[254,14043,1705],{"class":264},[14,14045,14046],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[34,14048,14050],{"id":14049},"_73函数重载","7.3函数重载",[14,14052,14053],{},"意思是函数名是可以相同的",[225,14055,14057],{"id":14056},"_731基本语法","7.3.1基本语法",[14,14059,14060],{},"作用：函数名可以相同，提高复用性",[14,14062,14063],{},[414,14064,14065],{},"函数重载满足条件：",[1271,14067,14068,14071,14074],{},[24,14069,14070],{},"同一个作用域下",[24,14072,14073],{},"函数名称相同",[24,14075,14076,14077,14080,14081,14084,14085],{},"函数参数",[414,14078,14079],{},"类型不同","  或者 ",[414,14082,14083],{},"个数不同"," 或者 ",[414,14086,14087],{},"顺序不同",[14,14089,14090,14093],{},[414,14091,14092],{},"注意:","  函数的返回值不可以作为函数重载的条件",[245,14095,14097],{"className":10082,"code":14096,"language":10084,"meta":174,"style":174},"\u002F\u002F函数重载需要函数都在同一个作用域下\nvoid func()\n{\n    cout \u003C\u003C \"func 的调用！\" \u003C\u003C endl;\n}\nvoid func(int a)\n{\n    cout \u003C\u003C \"func (int a) 的调用！\" \u003C\u003C endl;\n}\nvoid func(double a)\n{\n    cout \u003C\u003C \"func (double a)的调用！\" \u003C\u003C endl;\n}\nvoid func(int a ,double b)\n{\n    cout \u003C\u003C \"func (int a ,double b) 的调用！\" \u003C\u003C endl;\n}\nvoid func(double a ,int b)\n{\n    cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n}\n\n\u002F\u002F函数返回值不可以作为函数重载条件\n\u002F\u002Fint func(double a, int b)\n\u002F\u002F{\n\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n\u002F\u002F}\n\n\nint main() {\n\n    func();\n    func(10);\n    func(3.14);\n    func(10,3.14);\n    func(3.14 , 10);\n    \n    system(\"pause\");\n\n    return 0;\n}\n",[251,14098,14099,14104,14112,14116,14129,14133,14147,14151,14164,14168,14183,14187,14200,14204,14225,14229,14242,14246,14266,14270,14283,14287,14291,14296,14301,14306,14311,14316,14320,14324,14332,14336,14342,14352,14362,14376,14391,14395,14405,14409,14417],{"__ignoreMap":174},[254,14100,14101],{"class":256,"line":257},[254,14102,14103],{"class":323},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[254,14105,14106,14108,14110],{"class":256,"line":175},[254,14107,5505],{"class":260},[254,14109,11526],{"class":2103},[254,14111,2116],{"class":264},[254,14113,14114],{"class":256,"line":1319},[254,14115,1686],{"class":264},[254,14117,14118,14120,14122,14125,14127],{"class":256,"line":1334},[254,14119,6670],{"class":264},[254,14121,1308],{"class":260},[254,14123,14124],{"class":369}," \"func 的调用！\"",[254,14126,1584],{"class":260},[254,14128,8981],{"class":264},[254,14130,14131],{"class":256,"line":1340},[254,14132,1705],{"class":264},[254,14134,14135,14137,14139,14141,14143,14145],{"class":256,"line":1354},[254,14136,5505],{"class":260},[254,14138,11526],{"class":2103},[254,14140,265],{"class":264},[254,14142,268],{"class":260},[254,14144,1538],{"class":5357},[254,14146,271],{"class":264},[254,14148,14149],{"class":256,"line":1360},[254,14150,1686],{"class":264},[254,14152,14153,14155,14157,14160,14162],{"class":256,"line":1451},[254,14154,6670],{"class":264},[254,14156,1308],{"class":260},[254,14158,14159],{"class":369}," \"func (int a) 的调用！\"",[254,14161,1584],{"class":260},[254,14163,8981],{"class":264},[254,14165,14166],{"class":256,"line":1457},[254,14167,1705],{"class":264},[254,14169,14170,14172,14174,14176,14179,14181],{"class":256,"line":1469},[254,14171,5505],{"class":260},[254,14173,11526],{"class":2103},[254,14175,265],{"class":264},[254,14177,14178],{"class":260},"double",[254,14180,1538],{"class":5357},[254,14182,271],{"class":264},[254,14184,14185],{"class":256,"line":1752},[254,14186,1686],{"class":264},[254,14188,14189,14191,14193,14196,14198],{"class":256,"line":1757},[254,14190,6670],{"class":264},[254,14192,1308],{"class":260},[254,14194,14195],{"class":369}," \"func (double a)的调用！\"",[254,14197,1584],{"class":260},[254,14199,8981],{"class":264},[254,14201,14202],{"class":256,"line":1763},[254,14203,1705],{"class":264},[254,14205,14206,14208,14210,14212,14214,14216,14219,14221,14223],{"class":256,"line":1768},[254,14207,5505],{"class":260},[254,14209,11526],{"class":2103},[254,14211,265],{"class":264},[254,14213,268],{"class":260},[254,14215,1538],{"class":5357},[254,14217,14218],{"class":264}," ,",[254,14220,14178],{"class":260},[254,14222,2973],{"class":5357},[254,14224,271],{"class":264},[254,14226,14227],{"class":256,"line":1782},[254,14228,1686],{"class":264},[254,14230,14231,14233,14235,14238,14240],{"class":256,"line":1787},[254,14232,6670],{"class":264},[254,14234,1308],{"class":260},[254,14236,14237],{"class":369}," \"func (int a ,double b) 的调用！\"",[254,14239,1584],{"class":260},[254,14241,8981],{"class":264},[254,14243,14244],{"class":256,"line":1793},[254,14245,1705],{"class":264},[254,14247,14248,14250,14252,14254,14256,14258,14260,14262,14264],{"class":256,"line":1814},[254,14249,5505],{"class":260},[254,14251,11526],{"class":2103},[254,14253,265],{"class":264},[254,14255,14178],{"class":260},[254,14257,1538],{"class":5357},[254,14259,14218],{"class":264},[254,14261,268],{"class":260},[254,14263,2973],{"class":5357},[254,14265,271],{"class":264},[254,14267,14268],{"class":256,"line":1819},[254,14269,1686],{"class":264},[254,14271,14272,14274,14276,14279,14281],{"class":256,"line":1833},[254,14273,6670],{"class":264},[254,14275,1308],{"class":260},[254,14277,14278],{"class":369}," \"func (double a ,int b)的调用！\"",[254,14280,1584],{"class":260},[254,14282,8981],{"class":264},[254,14284,14285],{"class":256,"line":1838},[254,14286,1705],{"class":264},[254,14288,14289],{"class":256,"line":1867},[254,14290,2540],{"emptyLinePlaceholder":184},[254,14292,14293],{"class":256,"line":1872},[254,14294,14295],{"class":323},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[254,14297,14298],{"class":256,"line":1889},[254,14299,14300],{"class":323},"\u002F\u002Fint func(double a, int b)\n",[254,14302,14303],{"class":256,"line":1894},[254,14304,14305],{"class":323},"\u002F\u002F{\n",[254,14307,14308],{"class":256,"line":1899},[254,14309,14310],{"class":323},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[254,14312,14313],{"class":256,"line":1904},[254,14314,14315],{"class":323},"\u002F\u002F}\n",[254,14317,14318],{"class":256,"line":1918},[254,14319,2540],{"emptyLinePlaceholder":184},[254,14321,14322],{"class":256,"line":1923},[254,14323,2540],{"emptyLinePlaceholder":184},[254,14325,14326,14328,14330],{"class":256,"line":2717},[254,14327,268],{"class":260},[254,14329,2113],{"class":2103},[254,14331,10994],{"class":264},[254,14333,14334],{"class":256,"line":2731},[254,14335,2540],{"emptyLinePlaceholder":184},[254,14337,14338,14340],{"class":256,"line":2739},[254,14339,13426],{"class":2103},[254,14341,5777],{"class":264},[254,14343,14344,14346,14348,14350],{"class":256,"line":2744},[254,14345,13426],{"class":2103},[254,14347,265],{"class":264},[254,14349,710],{"class":313},[254,14351,2859],{"class":264},[254,14353,14354,14356,14358,14360],{"class":256,"line":2750},[254,14355,13426],{"class":2103},[254,14357,265],{"class":264},[254,14359,314],{"class":313},[254,14361,2859],{"class":264},[254,14363,14364,14366,14368,14370,14372,14374],{"class":256,"line":2756},[254,14365,13426],{"class":2103},[254,14367,265],{"class":264},[254,14369,710],{"class":313},[254,14371,642],{"class":264},[254,14373,314],{"class":313},[254,14375,2859],{"class":264},[254,14377,14378,14380,14382,14384,14387,14389],{"class":256,"line":2761},[254,14379,13426],{"class":2103},[254,14381,265],{"class":264},[254,14383,314],{"class":313},[254,14385,14386],{"class":264}," , ",[254,14388,710],{"class":313},[254,14390,2859],{"class":264},[254,14392,14393],{"class":256,"line":8089},[254,14394,13351],{"class":264},[254,14396,14397,14399,14401,14403],{"class":256,"line":8113},[254,14398,2443],{"class":2103},[254,14400,265],{"class":264},[254,14402,2448],{"class":369},[254,14404,2859],{"class":264},[254,14406,14407],{"class":256,"line":8118},[254,14408,2540],{"emptyLinePlaceholder":184},[254,14410,14411,14413,14415],{"class":256,"line":8124},[254,14412,4230],{"class":260},[254,14414,4233],{"class":313},[254,14416,1430],{"class":264},[254,14418,14419],{"class":256,"line":8151},[254,14420,1705],{"class":264},[14,14422,14423],{},"重点：函数返回值不可以作为函数重载条件！",[225,14425,14427],{"id":14426},"_732注意事项","7.3.2注意事项",[1271,14429,14430,14433],{},[24,14431,14432],{},"引用作为重载条件!!!",[24,14434,14435],{},"函数重载碰到函数默认参数",[245,14437,14439],{"className":247,"code":14438,"language":249,"meta":174,"style":174},"\u002F\u002F函数重载注意事项\n\u002F\u002F1、引用作为重载条件\n\nvoid func(int &a)\n{\n    cout \u003C\u003C \"func (int &a) 调用 \" \u003C\u003C endl;\n}\n\nvoid func(const int &a)\n{\n    cout \u003C\u003C \"func (const int &a) 调用 \" \u003C\u003C endl;\n}\n\n\n\u002F\u002F2、函数重载碰到函数默认参数\n\nvoid func2(int a, int b = 10)\n{\n    cout \u003C\u003C \"func2(int a, int b = 10) 调用\" \u003C\u003C endl;\n}\n\nvoid func2(int a)\n{\n    cout \u003C\u003C \"func2(int a) 调用\" \u003C\u003C endl;\n}\n\nint main() {\n    \n    int a = 10;\n    func(a); \u002F\u002F调用无const   因为a本身是个变量，可读可写\n    func(10);\u002F\u002F调用有const   10是个常量\n\n\n    \u002F\u002Ffunc2(10); \u002F\u002F碰到默认参数产生歧义，需要避免\n\n    system(\"pause\");\n\n    return 0;\n}\n",[251,14440,14441,14446,14451,14455,14471,14475,14488,14492,14496,14514,14518,14531,14535,14539,14543,14548,14552,14576,14580,14593,14597,14601,14615,14619,14632,14636,14640,14648,14652,14664,14674,14687,14691,14695,14703,14707,14717,14721,14729],{"__ignoreMap":174},[254,14442,14443],{"class":256,"line":257},[254,14444,14445],{"class":323},"\u002F\u002F函数重载注意事项\n",[254,14447,14448],{"class":256,"line":175},[254,14449,14450],{"class":323},"\u002F\u002F1、引用作为重载条件\n",[254,14452,14453],{"class":256,"line":1319},[254,14454,2540],{"emptyLinePlaceholder":184},[254,14456,14457,14459,14461,14463,14465,14467,14469],{"class":256,"line":1334},[254,14458,5505],{"class":260},[254,14460,11526],{"class":2103},[254,14462,265],{"class":264},[254,14464,268],{"class":260},[254,14466,10725],{"class":260},[254,14468,42],{"class":5357},[254,14470,271],{"class":264},[254,14472,14473],{"class":256,"line":1340},[254,14474,1686],{"class":264},[254,14476,14477,14479,14481,14484,14486],{"class":256,"line":1354},[254,14478,6670],{"class":264},[254,14480,1308],{"class":260},[254,14482,14483],{"class":369}," \"func (int &a) 调用 \"",[254,14485,1584],{"class":260},[254,14487,8981],{"class":264},[254,14489,14490],{"class":256,"line":1360},[254,14491,1705],{"class":264},[254,14493,14494],{"class":256,"line":1451},[254,14495,2540],{"emptyLinePlaceholder":184},[254,14497,14498,14500,14502,14504,14506,14508,14510,14512],{"class":256,"line":1457},[254,14499,5505],{"class":260},[254,14501,11526],{"class":2103},[254,14503,265],{"class":264},[254,14505,6933],{"class":260},[254,14507,2522],{"class":260},[254,14509,10725],{"class":260},[254,14511,42],{"class":5357},[254,14513,271],{"class":264},[254,14515,14516],{"class":256,"line":1469},[254,14517,1686],{"class":264},[254,14519,14520,14522,14524,14527,14529],{"class":256,"line":1752},[254,14521,6670],{"class":264},[254,14523,1308],{"class":260},[254,14525,14526],{"class":369}," \"func (const int &a) 调用 \"",[254,14528,1584],{"class":260},[254,14530,8981],{"class":264},[254,14532,14533],{"class":256,"line":1757},[254,14534,1705],{"class":264},[254,14536,14537],{"class":256,"line":1763},[254,14538,2540],{"emptyLinePlaceholder":184},[254,14540,14541],{"class":256,"line":1768},[254,14542,2540],{"emptyLinePlaceholder":184},[254,14544,14545],{"class":256,"line":1782},[254,14546,14547],{"class":323},"\u002F\u002F2、函数重载碰到函数默认参数\n",[254,14549,14550],{"class":256,"line":1787},[254,14551,2540],{"emptyLinePlaceholder":184},[254,14553,14554,14556,14558,14560,14562,14564,14566,14568,14570,14572,14574],{"class":256,"line":1793},[254,14555,5505],{"class":260},[254,14557,13759],{"class":2103},[254,14559,265],{"class":264},[254,14561,268],{"class":260},[254,14563,1538],{"class":5357},[254,14565,12576],{"class":264},[254,14567,268],{"class":260},[254,14569,2973],{"class":5357},[254,14571,13705],{"class":260},[254,14573,2178],{"class":313},[254,14575,271],{"class":264},[254,14577,14578],{"class":256,"line":1814},[254,14579,1686],{"class":264},[254,14581,14582,14584,14586,14589,14591],{"class":256,"line":1819},[254,14583,6670],{"class":264},[254,14585,1308],{"class":260},[254,14587,14588],{"class":369}," \"func2(int a, int b = 10) 调用\"",[254,14590,1584],{"class":260},[254,14592,8981],{"class":264},[254,14594,14595],{"class":256,"line":1833},[254,14596,1705],{"class":264},[254,14598,14599],{"class":256,"line":1838},[254,14600,2540],{"emptyLinePlaceholder":184},[254,14602,14603,14605,14607,14609,14611,14613],{"class":256,"line":1867},[254,14604,5505],{"class":260},[254,14606,13759],{"class":2103},[254,14608,265],{"class":264},[254,14610,268],{"class":260},[254,14612,1538],{"class":5357},[254,14614,271],{"class":264},[254,14616,14617],{"class":256,"line":1872},[254,14618,1686],{"class":264},[254,14620,14621,14623,14625,14628,14630],{"class":256,"line":1889},[254,14622,6670],{"class":264},[254,14624,1308],{"class":260},[254,14626,14627],{"class":369}," \"func2(int a) 调用\"",[254,14629,1584],{"class":260},[254,14631,8981],{"class":264},[254,14633,14634],{"class":256,"line":1894},[254,14635,1705],{"class":264},[254,14637,14638],{"class":256,"line":1899},[254,14639,2540],{"emptyLinePlaceholder":184},[254,14641,14642,14644,14646],{"class":256,"line":1904},[254,14643,268],{"class":260},[254,14645,2113],{"class":2103},[254,14647,10994],{"class":264},[254,14649,14650],{"class":256,"line":1918},[254,14651,13351],{"class":264},[254,14653,14654,14656,14658,14660,14662],{"class":256,"line":1923},[254,14655,2125],{"class":260},[254,14657,11010],{"class":264},[254,14659,310],{"class":260},[254,14661,2178],{"class":313},[254,14663,1430],{"class":264},[254,14665,14666,14668,14671],{"class":256,"line":2717},[254,14667,13426],{"class":2103},[254,14669,14670],{"class":264},"(a);",[254,14672,14673],{"class":323}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[254,14675,14676,14678,14680,14682,14684],{"class":256,"line":2731},[254,14677,13426],{"class":2103},[254,14679,265],{"class":264},[254,14681,710],{"class":313},[254,14683,6107],{"class":264},[254,14685,14686],{"class":323},"\u002F\u002F调用有const   10是个常量\n",[254,14688,14689],{"class":256,"line":2739},[254,14690,2540],{"emptyLinePlaceholder":184},[254,14692,14693],{"class":256,"line":2744},[254,14694,2540],{"emptyLinePlaceholder":184},[254,14696,14697,14700],{"class":256,"line":2750},[254,14698,14699],{"class":323},"    \u002F\u002Ffunc2(10);",[254,14701,14702],{"class":323}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[254,14704,14705],{"class":256,"line":2756},[254,14706,2540],{"emptyLinePlaceholder":184},[254,14708,14709,14711,14713,14715],{"class":256,"line":2761},[254,14710,2443],{"class":2103},[254,14712,265],{"class":264},[254,14714,2448],{"class":369},[254,14716,2859],{"class":264},[254,14718,14719],{"class":256,"line":8089},[254,14720,2540],{"emptyLinePlaceholder":184},[254,14722,14723,14725,14727],{"class":256,"line":8113},[254,14724,4230],{"class":260},[254,14726,4233],{"class":313},[254,14728,1430],{"class":264},[254,14730,14731],{"class":256,"line":8118},[254,14732,1705],{"class":264},[5267,14734,14735],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":174,"searchDepth":175,"depth":175,"links":14737},[14738,14739,14740],{"id":13670,"depth":175,"text":13671},{"id":13927,"depth":175,"text":13928},{"id":14049,"depth":175,"text":14050,"children":14741},[14742,14743],{"id":14056,"depth":1319,"text":14057},{"id":14426,"depth":1319,"text":14427},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":13662,"description":174},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":14750,"title":14751,"body":14752,"description":23506,"extension":181,"meta":23507,"navigation":184,"path":23508,"seo":23509,"stem":23510,"__hash__":23511},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":14753,"toc":23487},[14754,14757,14763,14770,14775,14778,14781,14784,14788,14792,14795,14798,14806,14811,14814,14821,14826,14985,14988,15241,15244,15247,15250,15255,15258,15261,15272,15277,15513,15517,15527,15530,15538,15685,15689,15692,15695,15699,16144,16148,16156,16164,17076,17083,17088,17716,17719,17722,17725,17844,17847,17934,17937,18063,18066,18160,18163,18516,18520,18528,18532,18539,18542,18545,18556,18562,18567,18579,18587,18607,18615,18632,18818,18821,18825,18828,18831,18834,18837,18840,18843,18846,19306,19312,19316,19319,19330,19917,19920,20409,20413,20416,20419,20422,20425,20428,20436,20832,20836,20839,20842,21289,21292,21295,21300,21303,21308,21311,21315,21318,21320,21326,21329,21635,21645,21686,21690,21693,21695,21728,21731,22038,22040,22055,22058,22081,22090,22096,22099,22103,22106,22109,22114,22125,22130,22138,22143,22273,22276,22279,22454,22459,22671,22675,22678,22792,22797,23036,23040,23044,23047,23050,23055,23160,23163,23166,23169,23173,23284,23287,23290,23295,23347,23350,23353,23358,23404,23407,23412,23480,23482,23485],[10,14755,14751],{"id":14756},"_8类和对象",[14,14758,14759,14760],{},"C++面向对象的三大特性为",[414,14761,14762],{},"封装、继承、多态",[14,14764,14765,14766,14769],{},"C++认为",[414,14767,14768],{},"万事万物都皆为对象","，对象上有其属性和行为",[14,14771,14772],{},[414,14773,14774],{},"例如：",[14,14776,14777],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[14,14779,14780],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[14,14782,14783],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[34,14785,14787],{"id":14786},"_81封装","8.1封装",[225,14789,14791],{"id":14790},"_811封装的意义","8.1.1封装的意义",[14,14793,14794],{},"封装是C++面向对象三大特性之一",[14,14796,14797],{},"封装的意义：",[1271,14799,14800,14803],{},[24,14801,14802],{},"将属性和行为作为一个整体，表现生活中的事物",[24,14804,14805],{},"将属性和行为加以权限控制",[14,14807,14808],{},[414,14809,14810],{},"封装意义一：",[14,14812,14813],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[14,14815,14816,13936,14818],{},[414,14817,5322],{},[251,14819,14820],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[21,14822,14823],{},[24,14824,14825],{},"**示例1：**设计一个圆类，求圆的周长",[245,14827,14829],{"className":247,"code":14828,"language":249,"meta":174,"style":174},"class Circle\n{\n    \u002F\u002F访问权限\n    \u002F\u002F公共权限\npublic:\n    \u002F\u002F属性\n    int m_r;\n    \u002F\u002F行为\n    double calculateZC()\n    {\n        return 2*PI*m_r;\n    }\n};\nint main()\n{\n    \u002F\u002F通过圆类 创建具体的圆(对象)\n    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n    Circle c1;\n    \u002F\u002F给圆对象 的属性进行赋值\n    c1.m_r=10;\n    cout\u003C\u003C\"圆的周长\"\u003C\u003Cc1.calculateZC()\u003C\u003Cendl;\n}\n",[251,14830,14831,14839,14843,14848,14853,14858,14863,14870,14875,14885,14889,14907,14911,14915,14923,14927,14932,14937,14942,14947,14958,14981],{"__ignoreMap":174},[254,14832,14833,14836],{"class":256,"line":257},[254,14834,14835],{"class":260},"class",[254,14837,14838],{"class":2103}," Circle\n",[254,14840,14841],{"class":256,"line":175},[254,14842,1686],{"class":264},[254,14844,14845],{"class":256,"line":1319},[254,14846,14847],{"class":323},"    \u002F\u002F访问权限\n",[254,14849,14850],{"class":256,"line":1334},[254,14851,14852],{"class":323},"    \u002F\u002F公共权限\n",[254,14854,14855],{"class":256,"line":1340},[254,14856,14857],{"class":260},"public:\n",[254,14859,14860],{"class":256,"line":1354},[254,14861,14862],{"class":323},"    \u002F\u002F属性\n",[254,14864,14865,14867],{"class":256,"line":1360},[254,14866,2125],{"class":260},[254,14868,14869],{"class":264}," m_r;\n",[254,14871,14872],{"class":256,"line":1451},[254,14873,14874],{"class":323},"    \u002F\u002F行为\n",[254,14876,14877,14880,14883],{"class":256,"line":1457},[254,14878,14879],{"class":260},"    double",[254,14881,14882],{"class":2103}," calculateZC",[254,14884,2116],{"class":264},[254,14886,14887],{"class":256,"line":1469},[254,14888,2170],{"class":264},[254,14890,14891,14894,14897,14899,14902,14904],{"class":256,"line":1752},[254,14892,14893],{"class":260},"        return",[254,14895,14896],{"class":313}," 2",[254,14898,719],{"class":260},[254,14900,14901],{"class":264},"PI",[254,14903,719],{"class":260},[254,14905,14906],{"class":264},"m_r;\n",[254,14908,14909],{"class":256,"line":1757},[254,14910,2327],{"class":264},[254,14912,14913],{"class":256,"line":1763},[254,14914,4135],{"class":264},[254,14916,14917,14919,14921],{"class":256,"line":1768},[254,14918,268],{"class":260},[254,14920,2113],{"class":2103},[254,14922,2116],{"class":264},[254,14924,14925],{"class":256,"line":1782},[254,14926,1686],{"class":264},[254,14928,14929],{"class":256,"line":1787},[254,14930,14931],{"class":323},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[254,14933,14934],{"class":256,"line":1793},[254,14935,14936],{"class":323},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[254,14938,14939],{"class":256,"line":1814},[254,14940,14941],{"class":264},"    Circle c1;\n",[254,14943,14944],{"class":256,"line":1819},[254,14945,14946],{"class":323},"    \u002F\u002F给圆对象 的属性进行赋值\n",[254,14948,14949,14952,14954,14956],{"class":256,"line":1833},[254,14950,14951],{"class":264},"    c1.m_r",[254,14953,310],{"class":260},[254,14955,710],{"class":313},[254,14957,1430],{"class":264},[254,14959,14960,14962,14964,14967,14969,14972,14975,14977,14979],{"class":256,"line":1838},[254,14961,1691],{"class":264},[254,14963,1308],{"class":260},[254,14965,14966],{"class":369},"\"圆的周长\"",[254,14968,1308],{"class":260},[254,14970,14971],{"class":264},"c1.",[254,14973,14974],{"class":2103},"calculateZC",[254,14976,2567],{"class":264},[254,14978,1308],{"class":260},[254,14980,1331],{"class":264},[254,14982,14983],{"class":256,"line":1867},[254,14984,1705],{"class":264},[14,14986,14987],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[245,14989,14991],{"className":247,"code":14990,"language":249,"meta":174,"style":174},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\nclass Student\n{\npublic:\n    string m_name;\n    int m_id;\n    \u002F\u002F赋值姓名\n    void setName(string name)\n    {\n        m_name=name;\n    }\n    \u002F\u002F赋值学号\n    void setId(int id)\n    {\n        m_id=id;\n    }\n    \u002F\u002F打印学生信息\n    void printInfo()\n    {\n        cout\u003C\u003C\"姓名：\"\u003C\u003Cm_name\u003C\u003C\" \"\u003C\u003C\"学号：\"\u003C\u003Cm_id\u003C\u003Cendl;\n    }\n};\nint main()\n{\n    \u002F\u002F实例化\n    Student s1;\n    s1.setName(\"张三\");\n    s1.setId(123456);\n    s1.printInfo();\n}\n",[251,14992,14993,14999,15009,15015,15021,15025,15029,15034,15041,15046,15064,15068,15078,15082,15087,15103,15107,15117,15121,15126,15134,15138,15170,15174,15178,15186,15190,15195,15200,15214,15228,15237],{"__ignoreMap":174},[254,14994,14995,14997],{"class":256,"line":257},[254,14996,2089],{"class":260},[254,14998,2092],{"class":369},[254,15000,15001,15003,15005,15007],{"class":256,"line":175},[254,15002,2097],{"class":260},[254,15004,2100],{"class":260},[254,15006,2104],{"class":2103},[254,15008,1430],{"class":264},[254,15010,15011,15013],{"class":256,"line":1319},[254,15012,2089],{"class":260},[254,15014,7890],{"class":369},[254,15016,15017,15019],{"class":256,"line":1334},[254,15018,14835],{"class":260},[254,15020,7903],{"class":2103},[254,15022,15023],{"class":256,"line":1340},[254,15024,1686],{"class":264},[254,15026,15027],{"class":256,"line":1354},[254,15028,14857],{"class":260},[254,15030,15031],{"class":256,"line":1360},[254,15032,15033],{"class":264},"    string m_name;\n",[254,15035,15036,15038],{"class":256,"line":1451},[254,15037,2125],{"class":260},[254,15039,15040],{"class":264}," m_id;\n",[254,15042,15043],{"class":256,"line":1457},[254,15044,15045],{"class":323},"    \u002F\u002F赋值姓名\n",[254,15047,15048,15051,15054,15056,15059,15062],{"class":256,"line":1469},[254,15049,15050],{"class":260},"    void",[254,15052,15053],{"class":2103}," setName",[254,15055,265],{"class":264},[254,15057,15058],{"class":2103},"string",[254,15060,15061],{"class":5357}," name",[254,15063,271],{"class":264},[254,15065,15066],{"class":256,"line":1752},[254,15067,2170],{"class":264},[254,15069,15070,15073,15075],{"class":256,"line":1757},[254,15071,15072],{"class":264},"        m_name",[254,15074,310],{"class":260},[254,15076,15077],{"class":264},"name;\n",[254,15079,15080],{"class":256,"line":1763},[254,15081,2327],{"class":264},[254,15083,15084],{"class":256,"line":1768},[254,15085,15086],{"class":323},"    \u002F\u002F赋值学号\n",[254,15088,15089,15091,15094,15096,15098,15101],{"class":256,"line":1782},[254,15090,15050],{"class":260},[254,15092,15093],{"class":2103}," setId",[254,15095,265],{"class":264},[254,15097,268],{"class":260},[254,15099,15100],{"class":5357}," id",[254,15102,271],{"class":264},[254,15104,15105],{"class":256,"line":1787},[254,15106,2170],{"class":264},[254,15108,15109,15112,15114],{"class":256,"line":1793},[254,15110,15111],{"class":264},"        m_id",[254,15113,310],{"class":260},[254,15115,15116],{"class":264},"id;\n",[254,15118,15119],{"class":256,"line":1814},[254,15120,2327],{"class":264},[254,15122,15123],{"class":256,"line":1819},[254,15124,15125],{"class":323},"    \u002F\u002F打印学生信息\n",[254,15127,15128,15130,15132],{"class":256,"line":1833},[254,15129,15050],{"class":260},[254,15131,9756],{"class":2103},[254,15133,2116],{"class":264},[254,15135,15136],{"class":256,"line":1838},[254,15137,2170],{"class":264},[254,15139,15140,15142,15144,15147,15149,15152,15154,15156,15158,15161,15163,15166,15168],{"class":256,"line":1867},[254,15141,3591],{"class":264},[254,15143,1308],{"class":260},[254,15145,15146],{"class":369},"\"姓名：\"",[254,15148,1308],{"class":260},[254,15150,15151],{"class":264},"m_name",[254,15153,1308],{"class":260},[254,15155,4499],{"class":369},[254,15157,1308],{"class":260},[254,15159,15160],{"class":369},"\"学号：\"",[254,15162,1308],{"class":260},[254,15164,15165],{"class":264},"m_id",[254,15167,1308],{"class":260},[254,15169,1331],{"class":264},[254,15171,15172],{"class":256,"line":1872},[254,15173,2327],{"class":264},[254,15175,15176],{"class":256,"line":1889},[254,15177,4135],{"class":264},[254,15179,15180,15182,15184],{"class":256,"line":1894},[254,15181,268],{"class":260},[254,15183,2113],{"class":2103},[254,15185,2116],{"class":264},[254,15187,15188],{"class":256,"line":1899},[254,15189,1686],{"class":264},[254,15191,15192],{"class":256,"line":1904},[254,15193,15194],{"class":323},"    \u002F\u002F实例化\n",[254,15196,15197],{"class":256,"line":1918},[254,15198,15199],{"class":264},"    Student s1;\n",[254,15201,15202,15205,15208,15210,15212],{"class":256,"line":1923},[254,15203,15204],{"class":264},"    s1.",[254,15206,15207],{"class":2103},"setName",[254,15209,265],{"class":264},[254,15211,8057],{"class":369},[254,15213,2859],{"class":264},[254,15215,15216,15218,15221,15223,15226],{"class":256,"line":2717},[254,15217,15204],{"class":264},[254,15219,15220],{"class":2103},"setId",[254,15222,265],{"class":264},[254,15224,15225],{"class":313},"123456",[254,15227,2859],{"class":264},[254,15229,15230,15232,15235],{"class":256,"line":2731},[254,15231,15204],{"class":264},[254,15233,15234],{"class":2103},"printInfo",[254,15236,5777],{"class":264},[254,15238,15239],{"class":256,"line":2739},[254,15240,1705],{"class":264},[14,15242,15243],{},"类中的属性和行为统称为成员",[14,15245,15246],{},"属性：成员属性(成员变量)",[14,15248,15249],{},"方法：成员函数(成员方法)",[14,15251,15252],{},[414,15253,15254],{},"封装意义二：",[14,15256,15257],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[14,15259,15260],{},"访问权限有三种：",[21,15262,15263,15266,15269],{},[24,15264,15265],{},"public        公共权限",[24,15267,15268],{},"protected 保护权限",[24,15270,15271],{},"private      私有权限",[14,15273,15274],{},[414,15275,15276],{},"示例：",[245,15278,15280],{"className":10082,"code":15279,"language":10084,"meta":174,"style":174},"\u002F\u002F三种权限\n\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n\nclass Person\n{\n    \u002F\u002F姓名  公共权限\npublic:\n    string m_Name;\n\n    \u002F\u002F汽车  保护权限\nprotected:\n    string m_Car;\n\n    \u002F\u002F银行卡密码  私有权限\nprivate:\n    int m_Password;\n\npublic:\n    void func()\n    {\n        m_Name = \"张三\";\n        m_Car = \"拖拉机\";\n        m_Password = 123456;\n    }\n};\n\nint main() {\n\n    Person p;\n    p.m_Name = \"李四\";\n    \u002F\u002Fp.m_Car = \"奔驰\";  \u002F\u002F保护权限类外访问不到\n    \u002F\u002Fp.m_Password = 123; \u002F\u002F私有权限类外访问不到\n\n    system(\"pause\");\n\n    return 0;\n}\n",[251,15281,15282,15287,15292,15297,15302,15306,15313,15317,15322,15326,15331,15335,15340,15345,15350,15354,15359,15364,15371,15375,15379,15387,15391,15402,15414,15426,15430,15434,15438,15446,15450,15455,15467,15475,15483,15487,15497,15501,15509],{"__ignoreMap":174},[254,15283,15284],{"class":256,"line":257},[254,15285,15286],{"class":323},"\u002F\u002F三种权限\n",[254,15288,15289],{"class":256,"line":175},[254,15290,15291],{"class":323},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[254,15293,15294],{"class":256,"line":1319},[254,15295,15296],{"class":323},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[254,15298,15299],{"class":256,"line":1334},[254,15300,15301],{"class":323},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[254,15303,15304],{"class":256,"line":1340},[254,15305,2540],{"emptyLinePlaceholder":184},[254,15307,15308,15310],{"class":256,"line":1354},[254,15309,14835],{"class":260},[254,15311,15312],{"class":2103}," Person\n",[254,15314,15315],{"class":256,"line":1360},[254,15316,1686],{"class":264},[254,15318,15319],{"class":256,"line":1451},[254,15320,15321],{"class":323},"    \u002F\u002F姓名  公共权限\n",[254,15323,15324],{"class":256,"line":1457},[254,15325,14857],{"class":260},[254,15327,15328],{"class":256,"line":1469},[254,15329,15330],{"class":264},"    string m_Name;\n",[254,15332,15333],{"class":256,"line":1752},[254,15334,2540],{"emptyLinePlaceholder":184},[254,15336,15337],{"class":256,"line":1757},[254,15338,15339],{"class":323},"    \u002F\u002F汽车  保护权限\n",[254,15341,15342],{"class":256,"line":1763},[254,15343,15344],{"class":260},"protected:\n",[254,15346,15347],{"class":256,"line":1768},[254,15348,15349],{"class":264},"    string m_Car;\n",[254,15351,15352],{"class":256,"line":1782},[254,15353,2540],{"emptyLinePlaceholder":184},[254,15355,15356],{"class":256,"line":1787},[254,15357,15358],{"class":323},"    \u002F\u002F银行卡密码  私有权限\n",[254,15360,15361],{"class":256,"line":1793},[254,15362,15363],{"class":260},"private:\n",[254,15365,15366,15368],{"class":256,"line":1814},[254,15367,2125],{"class":260},[254,15369,15370],{"class":264}," m_Password;\n",[254,15372,15373],{"class":256,"line":1819},[254,15374,2540],{"emptyLinePlaceholder":184},[254,15376,15377],{"class":256,"line":1833},[254,15378,14857],{"class":260},[254,15380,15381,15383,15385],{"class":256,"line":1838},[254,15382,15050],{"class":260},[254,15384,11526],{"class":2103},[254,15386,2116],{"class":264},[254,15388,15389],{"class":256,"line":1867},[254,15390,2170],{"class":264},[254,15392,15393,15396,15398,15400],{"class":256,"line":1872},[254,15394,15395],{"class":264},"        m_Name ",[254,15397,310],{"class":260},[254,15399,9079],{"class":369},[254,15401,1430],{"class":264},[254,15403,15404,15407,15409,15412],{"class":256,"line":1889},[254,15405,15406],{"class":264},"        m_Car ",[254,15408,310],{"class":260},[254,15410,15411],{"class":369}," \"拖拉机\"",[254,15413,1430],{"class":264},[254,15415,15416,15419,15421,15424],{"class":256,"line":1894},[254,15417,15418],{"class":264},"        m_Password ",[254,15420,310],{"class":260},[254,15422,15423],{"class":313}," 123456",[254,15425,1430],{"class":264},[254,15427,15428],{"class":256,"line":1899},[254,15429,2327],{"class":264},[254,15431,15432],{"class":256,"line":1904},[254,15433,4135],{"class":264},[254,15435,15436],{"class":256,"line":1918},[254,15437,2540],{"emptyLinePlaceholder":184},[254,15439,15440,15442,15444],{"class":256,"line":1923},[254,15441,268],{"class":260},[254,15443,2113],{"class":2103},[254,15445,10994],{"class":264},[254,15447,15448],{"class":256,"line":2717},[254,15449,2540],{"emptyLinePlaceholder":184},[254,15451,15452],{"class":256,"line":2731},[254,15453,15454],{"class":264},"    Person p;\n",[254,15456,15457,15460,15462,15465],{"class":256,"line":2739},[254,15458,15459],{"class":264},"    p.m_Name ",[254,15461,310],{"class":260},[254,15463,15464],{"class":369}," \"李四\"",[254,15466,1430],{"class":264},[254,15468,15469,15472],{"class":256,"line":2744},[254,15470,15471],{"class":323},"    \u002F\u002Fp.m_Car = \"奔驰\";",[254,15473,15474],{"class":323},"  \u002F\u002F保护权限类外访问不到\n",[254,15476,15477,15480],{"class":256,"line":2750},[254,15478,15479],{"class":323},"    \u002F\u002Fp.m_Password = 123;",[254,15481,15482],{"class":323}," \u002F\u002F私有权限类外访问不到\n",[254,15484,15485],{"class":256,"line":2756},[254,15486,2540],{"emptyLinePlaceholder":184},[254,15488,15489,15491,15493,15495],{"class":256,"line":2761},[254,15490,2443],{"class":2103},[254,15492,265],{"class":264},[254,15494,2448],{"class":369},[254,15496,2859],{"class":264},[254,15498,15499],{"class":256,"line":8089},[254,15500,2540],{"emptyLinePlaceholder":184},[254,15502,15503,15505,15507],{"class":256,"line":8113},[254,15504,4230],{"class":260},[254,15506,4233],{"class":313},[254,15508,1430],{"class":264},[254,15510,15511],{"class":256,"line":8118},[254,15512,1705],{"class":264},[225,15514,15516],{"id":15515},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[14,15518,15519,15520,15523,15524],{},"在C++中 struct和class唯一的",[414,15521,15522],{},"区别","就在于 ",[414,15525,15526],{},"默认的访问权限不同",[14,15528,15529],{},"区别：",[1271,15531,15532,15535],{},[24,15533,15534],{},"struct 默认权限为公共",[24,15536,15537],{},"class   默认权限为私有",[245,15539,15541],{"className":10082,"code":15540,"language":10084,"meta":174,"style":174},"class C1\n{\n    int  m_A; \u002F\u002F默认是私有权限\n};\n\nstruct C2\n{\n    int m_A;  \u002F\u002F默认是公共权限\n};\n\nint main() {\n\n    C1 c1;\n    c1.m_A = 10; \u002F\u002F错误，访问权限是私有\n\n    C2 c2;\n    c2.m_A = 10; \u002F\u002F正确，访问权限是公共\n\n    system(\"pause\");\n\n    return 0;\n}\n",[251,15542,15543,15550,15554,15564,15568,15572,15579,15583,15593,15597,15601,15609,15613,15618,15632,15636,15641,15655,15659,15669,15673,15681],{"__ignoreMap":174},[254,15544,15545,15547],{"class":256,"line":257},[254,15546,14835],{"class":260},[254,15548,15549],{"class":2103}," C1\n",[254,15551,15552],{"class":256,"line":175},[254,15553,1686],{"class":264},[254,15555,15556,15558,15561],{"class":256,"line":1319},[254,15557,2125],{"class":260},[254,15559,15560],{"class":264},"  m_A;",[254,15562,15563],{"class":323}," \u002F\u002F默认是私有权限\n",[254,15565,15566],{"class":256,"line":1334},[254,15567,4135],{"class":264},[254,15569,15570],{"class":256,"line":1340},[254,15571,2540],{"emptyLinePlaceholder":184},[254,15573,15574,15576],{"class":256,"line":1354},[254,15575,7900],{"class":260},[254,15577,15578],{"class":2103}," C2\n",[254,15580,15581],{"class":256,"line":1360},[254,15582,1686],{"class":264},[254,15584,15585,15587,15590],{"class":256,"line":1451},[254,15586,2125],{"class":260},[254,15588,15589],{"class":264}," m_A;",[254,15591,15592],{"class":323},"  \u002F\u002F默认是公共权限\n",[254,15594,15595],{"class":256,"line":1457},[254,15596,4135],{"class":264},[254,15598,15599],{"class":256,"line":1469},[254,15600,2540],{"emptyLinePlaceholder":184},[254,15602,15603,15605,15607],{"class":256,"line":1752},[254,15604,268],{"class":260},[254,15606,2113],{"class":2103},[254,15608,10994],{"class":264},[254,15610,15611],{"class":256,"line":1757},[254,15612,2540],{"emptyLinePlaceholder":184},[254,15614,15615],{"class":256,"line":1763},[254,15616,15617],{"class":264},"    C1 c1;\n",[254,15619,15620,15623,15625,15627,15629],{"class":256,"line":1768},[254,15621,15622],{"class":264},"    c1.m_A ",[254,15624,310],{"class":260},[254,15626,2178],{"class":313},[254,15628,320],{"class":264},[254,15630,15631],{"class":323}," \u002F\u002F错误，访问权限是私有\n",[254,15633,15634],{"class":256,"line":1782},[254,15635,2540],{"emptyLinePlaceholder":184},[254,15637,15638],{"class":256,"line":1787},[254,15639,15640],{"class":264},"    C2 c2;\n",[254,15642,15643,15646,15648,15650,15652],{"class":256,"line":1793},[254,15644,15645],{"class":264},"    c2.m_A ",[254,15647,310],{"class":260},[254,15649,2178],{"class":313},[254,15651,320],{"class":264},[254,15653,15654],{"class":323}," \u002F\u002F正确，访问权限是公共\n",[254,15656,15657],{"class":256,"line":1814},[254,15658,2540],{"emptyLinePlaceholder":184},[254,15660,15661,15663,15665,15667],{"class":256,"line":1819},[254,15662,2443],{"class":2103},[254,15664,265],{"class":264},[254,15666,2448],{"class":369},[254,15668,2859],{"class":264},[254,15670,15671],{"class":256,"line":1833},[254,15672,2540],{"emptyLinePlaceholder":184},[254,15674,15675,15677,15679],{"class":256,"line":1838},[254,15676,4230],{"class":260},[254,15678,4233],{"class":313},[254,15680,1430],{"class":264},[254,15682,15683],{"class":256,"line":1867},[254,15684,1705],{"class":264},[225,15686,15688],{"id":15687},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[14,15690,15691],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[14,15693,15694],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[14,15696,15697],{},[414,15698,15276],{},[245,15700,15702],{"className":10082,"code":15701,"language":10084,"meta":174,"style":174},"class Person {\npublic:\n\n    \u002F\u002F姓名设置可读可写\n    void setName(string name) {\n        m_Name = name;\n    }\n    string getName()\n    {\n        return m_Name;\n    }\n\n\n    \u002F\u002F获取年龄 \n    int getAge() {\n        return m_Age;\n    }\n    \u002F\u002F设置年龄\n    void setAge(int age) {\n        if (age \u003C 0 || age > 150) {\n            cout \u003C\u003C \"你个老妖精!\" \u003C\u003C endl;\n            return;\n        }\n        m_Age = age;\n    }\n\n    \u002F\u002F情人设置为只写\n    void setLover(string lover) {\n        m_Lover = lover;\n    }\n\nprivate:\n    string m_Name; \u002F\u002F可读可写  姓名\n    \n    int m_Age; \u002F\u002F只读  年龄\n\n    string m_Lover; \u002F\u002F只写  情人\n};\n\nint main() {\n\n    Person p;\n    \u002F\u002F姓名设置\n    p.setName(\"张三\");\n    cout \u003C\u003C \"姓名： \" \u003C\u003C p.getName() \u003C\u003C endl;\n\n    \u002F\u002F年龄设置\n    p.setAge(50);\n    cout \u003C\u003C \"年龄： \" \u003C\u003C p.getAge() \u003C\u003C endl;\n\n    \u002F\u002F情人设置\n    p.setLover(\"苍井\");\n    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;  \u002F\u002F只写属性，不可以读取\n\n    system(\"pause\");\n\n    return 0;\n}\n",[251,15703,15704,15714,15718,15722,15727,15741,15750,15754,15764,15768,15775,15779,15783,15787,15792,15801,15808,15812,15817,15833,15856,15869,15876,15880,15889,15893,15897,15902,15918,15928,15932,15936,15940,15948,15952,15962,15966,15974,15978,15982,15990,15994,15998,16003,16016,16039,16043,16048,16061,16083,16087,16092,16106,16114,16118,16128,16132,16140],{"__ignoreMap":174},[254,15705,15706,15708,15711],{"class":256,"line":257},[254,15707,14835],{"class":260},[254,15709,15710],{"class":2103}," Person",[254,15712,15713],{"class":264}," {\n",[254,15715,15716],{"class":256,"line":175},[254,15717,14857],{"class":260},[254,15719,15720],{"class":256,"line":1319},[254,15721,2540],{"emptyLinePlaceholder":184},[254,15723,15724],{"class":256,"line":1334},[254,15725,15726],{"class":323},"    \u002F\u002F姓名设置可读可写\n",[254,15728,15729,15731,15733,15735,15737,15739],{"class":256,"line":1340},[254,15730,15050],{"class":260},[254,15732,15053],{"class":2103},[254,15734,265],{"class":264},[254,15736,15058],{"class":2103},[254,15738,15061],{"class":5357},[254,15740,12583],{"class":264},[254,15742,15743,15745,15747],{"class":256,"line":1354},[254,15744,15395],{"class":264},[254,15746,310],{"class":260},[254,15748,15749],{"class":264}," name;\n",[254,15751,15752],{"class":256,"line":1360},[254,15753,2327],{"class":264},[254,15755,15756,15759,15762],{"class":256,"line":1451},[254,15757,15758],{"class":2103},"    string",[254,15760,15761],{"class":2103}," getName",[254,15763,2116],{"class":264},[254,15765,15766],{"class":256,"line":1457},[254,15767,2170],{"class":264},[254,15769,15770,15772],{"class":256,"line":1469},[254,15771,14893],{"class":260},[254,15773,15774],{"class":264}," m_Name;\n",[254,15776,15777],{"class":256,"line":1752},[254,15778,2327],{"class":264},[254,15780,15781],{"class":256,"line":1757},[254,15782,2540],{"emptyLinePlaceholder":184},[254,15784,15785],{"class":256,"line":1763},[254,15786,2540],{"emptyLinePlaceholder":184},[254,15788,15789],{"class":256,"line":1768},[254,15790,15791],{"class":323},"    \u002F\u002F获取年龄 \n",[254,15793,15794,15796,15799],{"class":256,"line":1782},[254,15795,2125],{"class":260},[254,15797,15798],{"class":2103}," getAge",[254,15800,10994],{"class":264},[254,15802,15803,15805],{"class":256,"line":1787},[254,15804,14893],{"class":260},[254,15806,15807],{"class":264}," m_Age;\n",[254,15809,15810],{"class":256,"line":1793},[254,15811,2327],{"class":264},[254,15813,15814],{"class":256,"line":1814},[254,15815,15816],{"class":323},"    \u002F\u002F设置年龄\n",[254,15818,15819,15821,15824,15826,15828,15831],{"class":256,"line":1819},[254,15820,15050],{"class":260},[254,15822,15823],{"class":2103}," setAge",[254,15825,265],{"class":264},[254,15827,268],{"class":260},[254,15829,15830],{"class":5357}," age",[254,15832,12583],{"class":264},[254,15834,15835,15837,15840,15842,15844,15846,15849,15851,15854],{"class":256,"line":1833},[254,15836,2637],{"class":260},[254,15838,15839],{"class":264}," (age ",[254,15841,1174],{"class":260},[254,15843,4233],{"class":313},[254,15845,3395],{"class":260},[254,15847,15848],{"class":264}," age ",[254,15850,1224],{"class":260},[254,15852,15853],{"class":313}," 150",[254,15855,12583],{"class":264},[254,15857,15858,15860,15862,15865,15867],{"class":256,"line":1838},[254,15859,9860],{"class":264},[254,15861,1308],{"class":260},[254,15863,15864],{"class":369}," \"你个老妖精!\"",[254,15866,1584],{"class":260},[254,15868,8981],{"class":264},[254,15870,15871,15874],{"class":256,"line":1867},[254,15872,15873],{"class":260},"            return",[254,15875,1430],{"class":264},[254,15877,15878],{"class":256,"line":1872},[254,15879,2669],{"class":264},[254,15881,15882,15885,15887],{"class":256,"line":1889},[254,15883,15884],{"class":264},"        m_Age ",[254,15886,310],{"class":260},[254,15888,7938],{"class":264},[254,15890,15891],{"class":256,"line":1894},[254,15892,2327],{"class":264},[254,15894,15895],{"class":256,"line":1899},[254,15896,2540],{"emptyLinePlaceholder":184},[254,15898,15899],{"class":256,"line":1904},[254,15900,15901],{"class":323},"    \u002F\u002F情人设置为只写\n",[254,15903,15904,15906,15909,15911,15913,15916],{"class":256,"line":1918},[254,15905,15050],{"class":260},[254,15907,15908],{"class":2103}," setLover",[254,15910,265],{"class":264},[254,15912,15058],{"class":2103},[254,15914,15915],{"class":5357}," lover",[254,15917,12583],{"class":264},[254,15919,15920,15923,15925],{"class":256,"line":1923},[254,15921,15922],{"class":264},"        m_Lover ",[254,15924,310],{"class":260},[254,15926,15927],{"class":264}," lover;\n",[254,15929,15930],{"class":256,"line":2717},[254,15931,2327],{"class":264},[254,15933,15934],{"class":256,"line":2731},[254,15935,2540],{"emptyLinePlaceholder":184},[254,15937,15938],{"class":256,"line":2739},[254,15939,15363],{"class":260},[254,15941,15942,15945],{"class":256,"line":2744},[254,15943,15944],{"class":264},"    string m_Name;",[254,15946,15947],{"class":323}," \u002F\u002F可读可写  姓名\n",[254,15949,15950],{"class":256,"line":2750},[254,15951,13351],{"class":264},[254,15953,15954,15956,15959],{"class":256,"line":2756},[254,15955,2125],{"class":260},[254,15957,15958],{"class":264}," m_Age;",[254,15960,15961],{"class":323}," \u002F\u002F只读  年龄\n",[254,15963,15964],{"class":256,"line":2761},[254,15965,2540],{"emptyLinePlaceholder":184},[254,15967,15968,15971],{"class":256,"line":8089},[254,15969,15970],{"class":264},"    string m_Lover;",[254,15972,15973],{"class":323}," \u002F\u002F只写  情人\n",[254,15975,15976],{"class":256,"line":8113},[254,15977,4135],{"class":264},[254,15979,15980],{"class":256,"line":8118},[254,15981,2540],{"emptyLinePlaceholder":184},[254,15983,15984,15986,15988],{"class":256,"line":8124},[254,15985,268],{"class":260},[254,15987,2113],{"class":2103},[254,15989,10994],{"class":264},[254,15991,15992],{"class":256,"line":8151},[254,15993,2540],{"emptyLinePlaceholder":184},[254,15995,15996],{"class":256,"line":8156},[254,15997,15454],{"class":264},[254,15999,16000],{"class":256,"line":8162},[254,16001,16002],{"class":323},"    \u002F\u002F姓名设置\n",[254,16004,16005,16008,16010,16012,16014],{"class":256,"line":8174},[254,16006,16007],{"class":264},"    p.",[254,16009,15207],{"class":2103},[254,16011,265],{"class":264},[254,16013,8057],{"class":369},[254,16015,2859],{"class":264},[254,16017,16018,16020,16022,16025,16027,16030,16033,16035,16037],{"class":256,"line":8186},[254,16019,6670],{"class":264},[254,16021,1308],{"class":260},[254,16023,16024],{"class":369}," \"姓名： \"",[254,16026,1584],{"class":260},[254,16028,16029],{"class":264}," p.",[254,16031,16032],{"class":2103},"getName",[254,16034,13191],{"class":264},[254,16036,1308],{"class":260},[254,16038,8981],{"class":264},[254,16040,16041],{"class":256,"line":8198},[254,16042,2540],{"emptyLinePlaceholder":184},[254,16044,16045],{"class":256,"line":9857},[254,16046,16047],{"class":323},"    \u002F\u002F年龄设置\n",[254,16049,16050,16052,16055,16057,16059],{"class":256,"line":9882},[254,16051,16007],{"class":264},[254,16053,16054],{"class":2103},"setAge",[254,16056,265],{"class":264},[254,16058,920],{"class":313},[254,16060,2859],{"class":264},[254,16062,16063,16065,16067,16070,16072,16074,16077,16079,16081],{"class":256,"line":9905},[254,16064,6670],{"class":264},[254,16066,1308],{"class":260},[254,16068,16069],{"class":369}," \"年龄： \"",[254,16071,1584],{"class":260},[254,16073,16029],{"class":264},[254,16075,16076],{"class":2103},"getAge",[254,16078,13191],{"class":264},[254,16080,1308],{"class":260},[254,16082,8981],{"class":264},[254,16084,16085],{"class":256,"line":9929},[254,16086,2540],{"emptyLinePlaceholder":184},[254,16088,16089],{"class":256,"line":9934},[254,16090,16091],{"class":323},"    \u002F\u002F情人设置\n",[254,16093,16094,16096,16099,16101,16104],{"class":256,"line":9939},[254,16095,16007],{"class":264},[254,16097,16098],{"class":2103},"setLover",[254,16100,265],{"class":264},[254,16102,16103],{"class":369},"\"苍井\"",[254,16105,2859],{"class":264},[254,16107,16108,16111],{"class":256,"line":9944},[254,16109,16110],{"class":323},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[254,16112,16113],{"class":323},"  \u002F\u002F只写属性，不可以读取\n",[254,16115,16116],{"class":256,"line":9953},[254,16117,2540],{"emptyLinePlaceholder":184},[254,16119,16120,16122,16124,16126],{"class":256,"line":9958},[254,16121,2443],{"class":2103},[254,16123,265],{"class":264},[254,16125,2448],{"class":369},[254,16127,2859],{"class":264},[254,16129,16130],{"class":256,"line":9964},[254,16131,2540],{"emptyLinePlaceholder":184},[254,16133,16134,16136,16138],{"class":256,"line":9985},[254,16135,4230],{"class":260},[254,16137,4233],{"class":313},[254,16139,1430],{"class":264},[254,16141,16142],{"class":256,"line":9991},[254,16143,1705],{"class":264},[225,16145,16147],{"id":16146},"_814封装案例","8.1.4封装案例",[21,16149,16150],{},[24,16151,16152,16155],{},[414,16153,16154],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[1271,16157,16158,16161],{},[24,16159,16160],{},"求出立方体的面积和体积",[24,16162,16163],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[245,16165,16167],{"className":247,"code":16166,"language":249,"meta":174,"style":174},"#include\u003Ciostream>\nusing namespace std;\nclass Cube\n{\npublic:\n    \u002F\u002F输入长宽高\n    void setLwh(int l,int w,int h)\n    {\n        m_L=l;\n        m_W=w;\n        m_H=h;\n    }\n    int mianji()\n    {\n        return 2*(m_L*m_W + m_L*m_H + m_W*m_H);\n    }\n    int tiji()\n    {\n        return m_L*m_W*m_H;\n    }\n    \u002F\u002F获取长宽高\n    int getLength()\n    {\n        return m_L;\n    }\n    int getWidth()\n    {\n        return m_W;\n    }\n    int getHeight()\n    {\n        return m_H;\n    }\n    \u002F\u002F成员函数判断两个立方体是否相等\n    bool isEqual(Cube c)\n    {\n        if (c.getLength() == m_L && c.getWidth() == m_W && c.getHeight() == m_H)\n        {\n            return true;\n        }\n        else\n        {\n            return false;\n        }\n    }\n    \u002F\u002F私有属性\nprivate:\n    int m_L;\n    int m_W;\n    int m_H;\n\n};\n\u002F\u002F全局函数判断两个立方体是否相等\nbool isEqual(Cube c1,Cube c2)\n{\n    return (c1.getLength() == c2.getLength()) && (c1.getWidth() == c2.getWidth()) && (c1.getHeight() == c2.getHeight());\n}\nint main()\n{\n    Cube c1;\n    \u002F\u002F输入立方体的长宽高\n    cout\u003C\u003C\"请输入第一个立方体的长、宽、高：\"\u003C\u003Cendl;\n    int l,w,h,l1,w1,h1;\n    cin>>l>>w>>h;\n    c1.setLwh(l,w,h);\n    \u002F\u002F面积\n    cout\u003C\u003C\"立方体的表面积为：\"\u003C\u003Cc1.mianji()\u003C\u003Cendl;\n    \u002F\u002F体积\n    cout\u003C\u003C\"立方体的体积为：\"\u003C\u003Cc1.tiji()\u003C\u003Cendl;\n    cout\u003C\u003C\"请输入第二个立方体的长、宽、高：\"\u003C\u003Cendl;\n    cin>>l1>>w1>>h1;\n    Cube c2;\n    c2.setLwh(l1,w1,h1);\n    cout\u003C\u003C\"第二个立方体的表面积为：\"\u003C\u003Cc2.mianji()\u003C\u003Cendl;\n    cout\u003C\u003C\"第二个立方体的体积为：\"\u003C\u003Cc2.tiji()\u003C\u003Cendl;\n\n    \u002F\u002F判断两个立方体的表面积和体积是否相等\n    cout\u003C\u003C\"内部函数判断结果：\"\u003C\u003Cendl;\n    if (c1.isEqual(c2))\n    {\n        cout\u003C\u003C\"两个立方体相等\"\u003C\u003Cendl;\n    }\n    else\n    {\n        cout\u003C\u003C\"两个立方体不相等\"\u003C\u003Cendl;\n    }\n\n    cout\u003C\u003C\"全局函数判断结果：\"\u003C\u003Cendl;\n    if (isEqual(c1, c2))\n    {\n        cout\u003C\u003C\"两个立方体相等\"\u003C\u003Cendl;\n    }\n    else\n    {\n        cout\u003C\u003C\"两个立方体不相等\"\u003C\u003Cendl;\n    }\n}\n",[251,16168,16169,16175,16185,16192,16196,16200,16205,16235,16239,16249,16259,16269,16273,16282,16286,16322,16326,16335,16339,16355,16359,16364,16373,16377,16384,16388,16397,16401,16408,16412,16421,16425,16432,16436,16441,16458,16462,16508,16512,16521,16525,16529,16533,16542,16546,16550,16555,16559,16565,16571,16577,16581,16585,16590,16612,16616,16670,16674,16682,16686,16691,16696,16709,16716,16732,16743,16749,16772,16778,16801,16815,16835,16841,16852,16875,16897,16902,16908,16922,16935,16940,16954,16959,16965,16970,16984,16989,16994,17008,17020,17025,17038,17043,17048,17053,17066,17071],{"__ignoreMap":174},[254,16170,16171,16173],{"class":256,"line":257},[254,16172,2089],{"class":260},[254,16174,2092],{"class":369},[254,16176,16177,16179,16181,16183],{"class":256,"line":175},[254,16178,2097],{"class":260},[254,16180,2100],{"class":260},[254,16182,2104],{"class":2103},[254,16184,1430],{"class":264},[254,16186,16187,16189],{"class":256,"line":1319},[254,16188,14835],{"class":260},[254,16190,16191],{"class":2103}," Cube\n",[254,16193,16194],{"class":256,"line":1334},[254,16195,1686],{"class":264},[254,16197,16198],{"class":256,"line":1340},[254,16199,14857],{"class":260},[254,16201,16202],{"class":256,"line":1354},[254,16203,16204],{"class":323},"    \u002F\u002F输入长宽高\n",[254,16206,16207,16209,16212,16214,16216,16219,16221,16223,16226,16228,16230,16233],{"class":256,"line":1360},[254,16208,15050],{"class":260},[254,16210,16211],{"class":2103}," setLwh",[254,16213,265],{"class":264},[254,16215,268],{"class":260},[254,16217,16218],{"class":5357}," l",[254,16220,642],{"class":264},[254,16222,268],{"class":260},[254,16224,16225],{"class":5357}," w",[254,16227,642],{"class":264},[254,16229,268],{"class":260},[254,16231,16232],{"class":5357}," h",[254,16234,271],{"class":264},[254,16236,16237],{"class":256,"line":1451},[254,16238,2170],{"class":264},[254,16240,16241,16244,16246],{"class":256,"line":1457},[254,16242,16243],{"class":264},"        m_L",[254,16245,310],{"class":260},[254,16247,16248],{"class":264},"l;\n",[254,16250,16251,16254,16256],{"class":256,"line":1469},[254,16252,16253],{"class":264},"        m_W",[254,16255,310],{"class":260},[254,16257,16258],{"class":264},"w;\n",[254,16260,16261,16264,16266],{"class":256,"line":1752},[254,16262,16263],{"class":264},"        m_H",[254,16265,310],{"class":260},[254,16267,16268],{"class":264},"h;\n",[254,16270,16271],{"class":256,"line":1757},[254,16272,2327],{"class":264},[254,16274,16275,16277,16280],{"class":256,"line":1763},[254,16276,2125],{"class":260},[254,16278,16279],{"class":2103}," mianji",[254,16281,2116],{"class":264},[254,16283,16284],{"class":256,"line":1768},[254,16285,2170],{"class":264},[254,16287,16288,16290,16292,16294,16297,16299,16302,16304,16307,16309,16312,16314,16317,16319],{"class":256,"line":1782},[254,16289,14893],{"class":260},[254,16291,14896],{"class":313},[254,16293,719],{"class":260},[254,16295,16296],{"class":264},"(m_L",[254,16298,719],{"class":260},[254,16300,16301],{"class":264},"m_W ",[254,16303,745],{"class":260},[254,16305,16306],{"class":264}," m_L",[254,16308,719],{"class":260},[254,16310,16311],{"class":264},"m_H ",[254,16313,745],{"class":260},[254,16315,16316],{"class":264}," m_W",[254,16318,719],{"class":260},[254,16320,16321],{"class":264},"m_H);\n",[254,16323,16324],{"class":256,"line":1787},[254,16325,2327],{"class":264},[254,16327,16328,16330,16333],{"class":256,"line":1793},[254,16329,2125],{"class":260},[254,16331,16332],{"class":2103}," tiji",[254,16334,2116],{"class":264},[254,16336,16337],{"class":256,"line":1814},[254,16338,2170],{"class":264},[254,16340,16341,16343,16345,16347,16350,16352],{"class":256,"line":1819},[254,16342,14893],{"class":260},[254,16344,16306],{"class":264},[254,16346,719],{"class":260},[254,16348,16349],{"class":264},"m_W",[254,16351,719],{"class":260},[254,16353,16354],{"class":264},"m_H;\n",[254,16356,16357],{"class":256,"line":1833},[254,16358,2327],{"class":264},[254,16360,16361],{"class":256,"line":1838},[254,16362,16363],{"class":323},"    \u002F\u002F获取长宽高\n",[254,16365,16366,16368,16371],{"class":256,"line":1867},[254,16367,2125],{"class":260},[254,16369,16370],{"class":2103}," getLength",[254,16372,2116],{"class":264},[254,16374,16375],{"class":256,"line":1872},[254,16376,2170],{"class":264},[254,16378,16379,16381],{"class":256,"line":1889},[254,16380,14893],{"class":260},[254,16382,16383],{"class":264}," m_L;\n",[254,16385,16386],{"class":256,"line":1894},[254,16387,2327],{"class":264},[254,16389,16390,16392,16395],{"class":256,"line":1899},[254,16391,2125],{"class":260},[254,16393,16394],{"class":2103}," getWidth",[254,16396,2116],{"class":264},[254,16398,16399],{"class":256,"line":1904},[254,16400,2170],{"class":264},[254,16402,16403,16405],{"class":256,"line":1918},[254,16404,14893],{"class":260},[254,16406,16407],{"class":264}," m_W;\n",[254,16409,16410],{"class":256,"line":1923},[254,16411,2327],{"class":264},[254,16413,16414,16416,16419],{"class":256,"line":2717},[254,16415,2125],{"class":260},[254,16417,16418],{"class":2103}," getHeight",[254,16420,2116],{"class":264},[254,16422,16423],{"class":256,"line":2731},[254,16424,2170],{"class":264},[254,16426,16427,16429],{"class":256,"line":2739},[254,16428,14893],{"class":260},[254,16430,16431],{"class":264}," m_H;\n",[254,16433,16434],{"class":256,"line":2744},[254,16435,2327],{"class":264},[254,16437,16438],{"class":256,"line":2750},[254,16439,16440],{"class":323},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[254,16442,16443,16446,16449,16451,16454,16456],{"class":256,"line":2756},[254,16444,16445],{"class":260},"    bool",[254,16447,16448],{"class":2103}," isEqual",[254,16450,265],{"class":264},[254,16452,16453],{"class":2103},"Cube",[254,16455,2989],{"class":5357},[254,16457,271],{"class":264},[254,16459,16460],{"class":256,"line":2761},[254,16461,2170],{"class":264},[254,16463,16464,16466,16469,16472,16474,16476,16479,16481,16484,16487,16489,16491,16494,16496,16498,16501,16503,16505],{"class":256,"line":8089},[254,16465,2637],{"class":260},[254,16467,16468],{"class":264}," (c.",[254,16470,16471],{"class":2103},"getLength",[254,16473,13191],{"class":264},[254,16475,3089],{"class":260},[254,16477,16478],{"class":264}," m_L ",[254,16480,1855],{"class":260},[254,16482,16483],{"class":264}," c.",[254,16485,16486],{"class":2103},"getWidth",[254,16488,13191],{"class":264},[254,16490,3089],{"class":260},[254,16492,16493],{"class":264}," m_W ",[254,16495,1855],{"class":260},[254,16497,16483],{"class":264},[254,16499,16500],{"class":2103},"getHeight",[254,16502,13191],{"class":264},[254,16504,3089],{"class":260},[254,16506,16507],{"class":264}," m_H)\n",[254,16509,16510],{"class":256,"line":8113},[254,16511,2650],{"class":264},[254,16513,16514,16516,16519],{"class":256,"line":8118},[254,16515,15873],{"class":260},[254,16517,16518],{"class":313}," true",[254,16520,1430],{"class":264},[254,16522,16523],{"class":256,"line":8124},[254,16524,2669],{"class":264},[254,16526,16527],{"class":256,"line":8151},[254,16528,2710],{"class":260},[254,16530,16531],{"class":256,"line":8156},[254,16532,2650],{"class":264},[254,16534,16535,16537,16540],{"class":256,"line":8162},[254,16536,15873],{"class":260},[254,16538,16539],{"class":313}," false",[254,16541,1430],{"class":264},[254,16543,16544],{"class":256,"line":8174},[254,16545,2669],{"class":264},[254,16547,16548],{"class":256,"line":8186},[254,16549,2327],{"class":264},[254,16551,16552],{"class":256,"line":8198},[254,16553,16554],{"class":323},"    \u002F\u002F私有属性\n",[254,16556,16557],{"class":256,"line":9857},[254,16558,15363],{"class":260},[254,16560,16561,16563],{"class":256,"line":9882},[254,16562,2125],{"class":260},[254,16564,16383],{"class":264},[254,16566,16567,16569],{"class":256,"line":9905},[254,16568,2125],{"class":260},[254,16570,16407],{"class":264},[254,16572,16573,16575],{"class":256,"line":9929},[254,16574,2125],{"class":260},[254,16576,16431],{"class":264},[254,16578,16579],{"class":256,"line":9934},[254,16580,2540],{"emptyLinePlaceholder":184},[254,16582,16583],{"class":256,"line":9939},[254,16584,4135],{"class":264},[254,16586,16587],{"class":256,"line":9944},[254,16588,16589],{"class":323},"\u002F\u002F全局函数判断两个立方体是否相等\n",[254,16591,16592,16594,16596,16598,16600,16603,16605,16607,16610],{"class":256,"line":9953},[254,16593,1494],{"class":260},[254,16595,16448],{"class":2103},[254,16597,265],{"class":264},[254,16599,16453],{"class":2103},[254,16601,16602],{"class":5357}," c1",[254,16604,642],{"class":264},[254,16606,16453],{"class":2103},[254,16608,16609],{"class":5357}," c2",[254,16611,271],{"class":264},[254,16613,16614],{"class":256,"line":9958},[254,16615,1686],{"class":264},[254,16617,16618,16620,16623,16625,16627,16629,16632,16634,16637,16639,16641,16643,16645,16647,16649,16651,16653,16655,16657,16659,16661,16663,16665,16667],{"class":256,"line":9964},[254,16619,4230],{"class":260},[254,16621,16622],{"class":264}," (c1.",[254,16624,16471],{"class":2103},[254,16626,13191],{"class":264},[254,16628,3089],{"class":260},[254,16630,16631],{"class":264}," c2.",[254,16633,16471],{"class":2103},[254,16635,16636],{"class":264},"()) ",[254,16638,1855],{"class":260},[254,16640,16622],{"class":264},[254,16642,16486],{"class":2103},[254,16644,13191],{"class":264},[254,16646,3089],{"class":260},[254,16648,16631],{"class":264},[254,16650,16486],{"class":2103},[254,16652,16636],{"class":264},[254,16654,1855],{"class":260},[254,16656,16622],{"class":264},[254,16658,16500],{"class":2103},[254,16660,13191],{"class":264},[254,16662,3089],{"class":260},[254,16664,16631],{"class":264},[254,16666,16500],{"class":2103},[254,16668,16669],{"class":264},"());\n",[254,16671,16672],{"class":256,"line":9985},[254,16673,1705],{"class":264},[254,16675,16676,16678,16680],{"class":256,"line":9991},[254,16677,268],{"class":260},[254,16679,2113],{"class":2103},[254,16681,2116],{"class":264},[254,16683,16684],{"class":256,"line":10005},[254,16685,1686],{"class":264},[254,16687,16688],{"class":256,"line":10011},[254,16689,16690],{"class":264},"    Cube c1;\n",[254,16692,16693],{"class":256,"line":10038},[254,16694,16695],{"class":323},"    \u002F\u002F输入立方体的长宽高\n",[254,16697,16698,16700,16702,16705,16707],{"class":256,"line":10047},[254,16699,1691],{"class":264},[254,16701,1308],{"class":260},[254,16703,16704],{"class":369},"\"请输入第一个立方体的长、宽、高：\"",[254,16706,1308],{"class":260},[254,16708,1331],{"class":264},[254,16710,16711,16713],{"class":256,"line":10053},[254,16712,2125],{"class":260},[254,16714,16715],{"class":264}," l,w,h,l1,w1,h1;\n",[254,16717,16718,16720,16722,16724,16726,16728,16730],{"class":256,"line":10061},[254,16719,2152],{"class":264},[254,16721,1569],{"class":260},[254,16723,782],{"class":264},[254,16725,1569],{"class":260},[254,16727,1059],{"class":264},[254,16729,1569],{"class":260},[254,16731,16268],{"class":264},[254,16733,16734,16737,16740],{"class":256,"line":10066},[254,16735,16736],{"class":264},"    c1.",[254,16738,16739],{"class":2103},"setLwh",[254,16741,16742],{"class":264},"(l,w,h);\n",[254,16744,16746],{"class":256,"line":16745},66,[254,16747,16748],{"class":323},"    \u002F\u002F面积\n",[254,16750,16752,16754,16756,16759,16761,16763,16766,16768,16770],{"class":256,"line":16751},67,[254,16753,1691],{"class":264},[254,16755,1308],{"class":260},[254,16757,16758],{"class":369},"\"立方体的表面积为：\"",[254,16760,1308],{"class":260},[254,16762,14971],{"class":264},[254,16764,16765],{"class":2103},"mianji",[254,16767,2567],{"class":264},[254,16769,1308],{"class":260},[254,16771,1331],{"class":264},[254,16773,16775],{"class":256,"line":16774},68,[254,16776,16777],{"class":323},"    \u002F\u002F体积\n",[254,16779,16781,16783,16785,16788,16790,16792,16795,16797,16799],{"class":256,"line":16780},69,[254,16782,1691],{"class":264},[254,16784,1308],{"class":260},[254,16786,16787],{"class":369},"\"立方体的体积为：\"",[254,16789,1308],{"class":260},[254,16791,14971],{"class":264},[254,16793,16794],{"class":2103},"tiji",[254,16796,2567],{"class":264},[254,16798,1308],{"class":260},[254,16800,1331],{"class":264},[254,16802,16804,16806,16808,16811,16813],{"class":256,"line":16803},70,[254,16805,1691],{"class":264},[254,16807,1308],{"class":260},[254,16809,16810],{"class":369},"\"请输入第二个立方体的长、宽、高：\"",[254,16812,1308],{"class":260},[254,16814,1331],{"class":264},[254,16816,16818,16820,16822,16825,16827,16830,16832],{"class":256,"line":16817},71,[254,16819,2152],{"class":264},[254,16821,1569],{"class":260},[254,16823,16824],{"class":264},"l1",[254,16826,1569],{"class":260},[254,16828,16829],{"class":264},"w1",[254,16831,1569],{"class":260},[254,16833,16834],{"class":264},"h1;\n",[254,16836,16838],{"class":256,"line":16837},72,[254,16839,16840],{"class":264},"    Cube c2;\n",[254,16842,16844,16847,16849],{"class":256,"line":16843},73,[254,16845,16846],{"class":264},"    c2.",[254,16848,16739],{"class":2103},[254,16850,16851],{"class":264},"(l1,w1,h1);\n",[254,16853,16855,16857,16859,16862,16864,16867,16869,16871,16873],{"class":256,"line":16854},74,[254,16856,1691],{"class":264},[254,16858,1308],{"class":260},[254,16860,16861],{"class":369},"\"第二个立方体的表面积为：\"",[254,16863,1308],{"class":260},[254,16865,16866],{"class":264},"c2.",[254,16868,16765],{"class":2103},[254,16870,2567],{"class":264},[254,16872,1308],{"class":260},[254,16874,1331],{"class":264},[254,16876,16878,16880,16882,16885,16887,16889,16891,16893,16895],{"class":256,"line":16877},75,[254,16879,1691],{"class":264},[254,16881,1308],{"class":260},[254,16883,16884],{"class":369},"\"第二个立方体的体积为：\"",[254,16886,1308],{"class":260},[254,16888,16866],{"class":264},[254,16890,16794],{"class":2103},[254,16892,2567],{"class":264},[254,16894,1308],{"class":260},[254,16896,1331],{"class":264},[254,16898,16900],{"class":256,"line":16899},76,[254,16901,2540],{"emptyLinePlaceholder":184},[254,16903,16905],{"class":256,"line":16904},77,[254,16906,16907],{"class":323},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[254,16909,16911,16913,16915,16918,16920],{"class":256,"line":16910},78,[254,16912,1691],{"class":264},[254,16914,1308],{"class":260},[254,16916,16917],{"class":369},"\"内部函数判断结果：\"",[254,16919,1308],{"class":260},[254,16921,1331],{"class":264},[254,16923,16925,16927,16929,16932],{"class":256,"line":16924},79,[254,16926,3241],{"class":260},[254,16928,16622],{"class":264},[254,16930,16931],{"class":2103},"isEqual",[254,16933,16934],{"class":264},"(c2))\n",[254,16936,16938],{"class":256,"line":16937},80,[254,16939,2170],{"class":264},[254,16941,16943,16945,16947,16950,16952],{"class":256,"line":16942},81,[254,16944,3591],{"class":264},[254,16946,1308],{"class":260},[254,16948,16949],{"class":369},"\"两个立方体相等\"",[254,16951,1308],{"class":260},[254,16953,1331],{"class":264},[254,16955,16957],{"class":256,"line":16956},82,[254,16958,2327],{"class":264},[254,16960,16962],{"class":256,"line":16961},83,[254,16963,16964],{"class":260},"    else\n",[254,16966,16968],{"class":256,"line":16967},84,[254,16969,2170],{"class":264},[254,16971,16973,16975,16977,16980,16982],{"class":256,"line":16972},85,[254,16974,3591],{"class":264},[254,16976,1308],{"class":260},[254,16978,16979],{"class":369},"\"两个立方体不相等\"",[254,16981,1308],{"class":260},[254,16983,1331],{"class":264},[254,16985,16987],{"class":256,"line":16986},86,[254,16988,2327],{"class":264},[254,16990,16992],{"class":256,"line":16991},87,[254,16993,2540],{"emptyLinePlaceholder":184},[254,16995,16997,16999,17001,17004,17006],{"class":256,"line":16996},88,[254,16998,1691],{"class":264},[254,17000,1308],{"class":260},[254,17002,17003],{"class":369},"\"全局函数判断结果：\"",[254,17005,1308],{"class":260},[254,17007,1331],{"class":264},[254,17009,17011,17013,17015,17017],{"class":256,"line":17010},89,[254,17012,3241],{"class":260},[254,17014,1798],{"class":264},[254,17016,16931],{"class":2103},[254,17018,17019],{"class":264},"(c1, c2))\n",[254,17021,17023],{"class":256,"line":17022},90,[254,17024,2170],{"class":264},[254,17026,17028,17030,17032,17034,17036],{"class":256,"line":17027},91,[254,17029,3591],{"class":264},[254,17031,1308],{"class":260},[254,17033,16949],{"class":369},[254,17035,1308],{"class":260},[254,17037,1331],{"class":264},[254,17039,17041],{"class":256,"line":17040},92,[254,17042,2327],{"class":264},[254,17044,17046],{"class":256,"line":17045},93,[254,17047,16964],{"class":260},[254,17049,17051],{"class":256,"line":17050},94,[254,17052,2170],{"class":264},[254,17054,17056,17058,17060,17062,17064],{"class":256,"line":17055},95,[254,17057,3591],{"class":264},[254,17059,1308],{"class":260},[254,17061,16979],{"class":369},[254,17063,1308],{"class":260},[254,17065,1331],{"class":264},[254,17067,17069],{"class":256,"line":17068},96,[254,17070,2327],{"class":264},[254,17072,17074],{"class":256,"line":17073},97,[254,17075,1705],{"class":264},[21,17077,17078],{"start":175},[24,17079,17080],{},[414,17081,17082],{},"练习案例2：点和圆的关系",[1271,17084,17085],{},[24,17086,17087],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[245,17089,17091],{"className":247,"code":17090,"language":249,"meta":174,"style":174},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Ccmath>\nclass Point\n{\npublic:\n    \u002F\u002F赋值\n    void setPoint(double x, double y) { m_x = x; m_y = y; }\n    \u002F\u002F获取坐标\n    double getX() { return m_x; }\n    double getY() { return m_y; }\n\nprivate:\n    double m_x;\n    double m_y;\n};\nclass Circle\n{\npublic:\n    \u002F\u002F赋值\n    void setRadius(double r) { m_r = r; }\n    void setCenter(Point center) { m_center = center; }\n    \u002F\u002F获取属性\n    double getRadius() { return m_r; }\n    Point getCenter() { return m_center; }\n\nprivate:\n    double m_r;\n    \u002F\u002F在类中可以让另一个类作为本来的成员\n    Point m_center;\n};\nvoid isInCircle(Circle &c,Point &p)\n{\n    double dx = c.getCenter().getX() - p.getX();\n    double dy = c.getCenter().getY() - p.getY();\n    double distance = sqrt(dx * dx + dy * dy);\n    if (distance \u003C c.getRadius())\n    {\n        cout \u003C\u003C \"点在圆内\" \u003C\u003C endl;\n    }\n    else\n    {\n        cout \u003C\u003C \"点在圆外\" \u003C\u003C endl;\n    }\n}\nint main()\n{\n    \u002F\u002F实例化\n    Circle c1;\n    Point p1;\n    \u002F\u002F赋值\n    cout\u003C\u003C\"请输入圆的半径：\";\n    double r;\n    cin>>r;\n    c1.setRadius(r);\n    cout\u003C\u003C\"请输入圆心坐标：\";\n    double x, y;\n    cin>>x>>y;\n    p1.setPoint(x, y);\n    c1.setCenter(p1);\n    cout\u003C\u003C\"请输入测试点坐标：\";\n    double x1, y1;\n    cin>>x1>>y1;\n    Point p2;\n    p2.setPoint(x1, y1);\n    isInCircle(c1, p2);\n}\n",[251,17092,17093,17099,17109,17116,17123,17127,17131,17136,17170,17175,17191,17205,17209,17213,17220,17227,17231,17237,17241,17245,17249,17271,17294,17299,17313,17328,17332,17336,17342,17347,17352,17356,17382,17386,17416,17444,17472,17489,17493,17506,17510,17514,17518,17531,17535,17539,17547,17551,17555,17559,17564,17568,17579,17586,17595,17605,17616,17623,17636,17647,17657,17668,17675,17689,17694,17704,17712],{"__ignoreMap":174},[254,17094,17095,17097],{"class":256,"line":257},[254,17096,2089],{"class":260},[254,17098,2092],{"class":369},[254,17100,17101,17103,17105,17107],{"class":256,"line":175},[254,17102,2097],{"class":260},[254,17104,2100],{"class":260},[254,17106,2104],{"class":2103},[254,17108,1430],{"class":264},[254,17110,17111,17113],{"class":256,"line":1319},[254,17112,2089],{"class":260},[254,17114,17115],{"class":369},"\u003Ccmath>\n",[254,17117,17118,17120],{"class":256,"line":1334},[254,17119,14835],{"class":260},[254,17121,17122],{"class":2103}," Point\n",[254,17124,17125],{"class":256,"line":1340},[254,17126,1686],{"class":264},[254,17128,17129],{"class":256,"line":1354},[254,17130,14857],{"class":260},[254,17132,17133],{"class":256,"line":1360},[254,17134,17135],{"class":323},"    \u002F\u002F赋值\n",[254,17137,17138,17140,17143,17145,17147,17150,17152,17154,17157,17160,17162,17165,17167],{"class":256,"line":1451},[254,17139,15050],{"class":260},[254,17141,17142],{"class":2103}," setPoint",[254,17144,265],{"class":264},[254,17146,14178],{"class":260},[254,17148,17149],{"class":5357}," x",[254,17151,12576],{"class":264},[254,17153,14178],{"class":260},[254,17155,17156],{"class":5357}," y",[254,17158,17159],{"class":264},") { m_x ",[254,17161,310],{"class":260},[254,17163,17164],{"class":264}," x; m_y ",[254,17166,310],{"class":260},[254,17168,17169],{"class":264}," y; }\n",[254,17171,17172],{"class":256,"line":1457},[254,17173,17174],{"class":323},"    \u002F\u002F获取坐标\n",[254,17176,17177,17179,17182,17185,17188],{"class":256,"line":1469},[254,17178,14879],{"class":260},[254,17180,17181],{"class":2103}," getX",[254,17183,17184],{"class":264},"() { ",[254,17186,17187],{"class":260},"return",[254,17189,17190],{"class":264}," m_x; }\n",[254,17192,17193,17195,17198,17200,17202],{"class":256,"line":1752},[254,17194,14879],{"class":260},[254,17196,17197],{"class":2103}," getY",[254,17199,17184],{"class":264},[254,17201,17187],{"class":260},[254,17203,17204],{"class":264}," m_y; }\n",[254,17206,17207],{"class":256,"line":1757},[254,17208,2540],{"emptyLinePlaceholder":184},[254,17210,17211],{"class":256,"line":1763},[254,17212,15363],{"class":260},[254,17214,17215,17217],{"class":256,"line":1768},[254,17216,14879],{"class":260},[254,17218,17219],{"class":264}," m_x;\n",[254,17221,17222,17224],{"class":256,"line":1782},[254,17223,14879],{"class":260},[254,17225,17226],{"class":264}," m_y;\n",[254,17228,17229],{"class":256,"line":1787},[254,17230,4135],{"class":264},[254,17232,17233,17235],{"class":256,"line":1793},[254,17234,14835],{"class":260},[254,17236,14838],{"class":2103},[254,17238,17239],{"class":256,"line":1814},[254,17240,1686],{"class":264},[254,17242,17243],{"class":256,"line":1819},[254,17244,14857],{"class":260},[254,17246,17247],{"class":256,"line":1833},[254,17248,17135],{"class":323},[254,17250,17251,17253,17256,17258,17260,17263,17266,17268],{"class":256,"line":1838},[254,17252,15050],{"class":260},[254,17254,17255],{"class":2103}," setRadius",[254,17257,265],{"class":264},[254,17259,14178],{"class":260},[254,17261,17262],{"class":5357}," r",[254,17264,17265],{"class":264},") { m_r ",[254,17267,310],{"class":260},[254,17269,17270],{"class":264}," r; }\n",[254,17272,17273,17275,17278,17280,17283,17286,17289,17291],{"class":256,"line":1867},[254,17274,15050],{"class":260},[254,17276,17277],{"class":2103}," setCenter",[254,17279,265],{"class":264},[254,17281,17282],{"class":2103},"Point",[254,17284,17285],{"class":5357}," center",[254,17287,17288],{"class":264},") { m_center ",[254,17290,310],{"class":260},[254,17292,17293],{"class":264}," center; }\n",[254,17295,17296],{"class":256,"line":1872},[254,17297,17298],{"class":323},"    \u002F\u002F获取属性\n",[254,17300,17301,17303,17306,17308,17310],{"class":256,"line":1889},[254,17302,14879],{"class":260},[254,17304,17305],{"class":2103}," getRadius",[254,17307,17184],{"class":264},[254,17309,17187],{"class":260},[254,17311,17312],{"class":264}," m_r; }\n",[254,17314,17315,17318,17321,17323,17325],{"class":256,"line":1894},[254,17316,17317],{"class":2103},"    Point",[254,17319,17320],{"class":2103}," getCenter",[254,17322,17184],{"class":264},[254,17324,17187],{"class":260},[254,17326,17327],{"class":264}," m_center; }\n",[254,17329,17330],{"class":256,"line":1899},[254,17331,2540],{"emptyLinePlaceholder":184},[254,17333,17334],{"class":256,"line":1904},[254,17335,15363],{"class":260},[254,17337,17338,17340],{"class":256,"line":1918},[254,17339,14879],{"class":260},[254,17341,14869],{"class":264},[254,17343,17344],{"class":256,"line":1923},[254,17345,17346],{"class":323},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[254,17348,17349],{"class":256,"line":2717},[254,17350,17351],{"class":264},"    Point m_center;\n",[254,17353,17354],{"class":256,"line":2731},[254,17355,4135],{"class":264},[254,17357,17358,17360,17363,17365,17368,17370,17372,17374,17376,17378,17380],{"class":256,"line":2739},[254,17359,5505],{"class":260},[254,17361,17362],{"class":2103}," isInCircle",[254,17364,265],{"class":264},[254,17366,17367],{"class":2103},"Circle",[254,17369,10725],{"class":260},[254,17371,552],{"class":5357},[254,17373,642],{"class":264},[254,17375,17282],{"class":2103},[254,17377,10725],{"class":260},[254,17379,14],{"class":5357},[254,17381,271],{"class":264},[254,17383,17384],{"class":256,"line":2744},[254,17385,1686],{"class":264},[254,17387,17388,17390,17393,17395,17397,17400,17403,17406,17408,17410,17412,17414],{"class":256,"line":2750},[254,17389,14879],{"class":260},[254,17391,17392],{"class":264}," dx ",[254,17394,310],{"class":260},[254,17396,16483],{"class":264},[254,17398,17399],{"class":2103},"getCenter",[254,17401,17402],{"class":264},"().",[254,17404,17405],{"class":2103},"getX",[254,17407,13191],{"class":264},[254,17409,796],{"class":260},[254,17411,16029],{"class":264},[254,17413,17405],{"class":2103},[254,17415,5777],{"class":264},[254,17417,17418,17420,17423,17425,17427,17429,17431,17434,17436,17438,17440,17442],{"class":256,"line":2756},[254,17419,14879],{"class":260},[254,17421,17422],{"class":264}," dy ",[254,17424,310],{"class":260},[254,17426,16483],{"class":264},[254,17428,17399],{"class":2103},[254,17430,17402],{"class":264},[254,17432,17433],{"class":2103},"getY",[254,17435,13191],{"class":264},[254,17437,796],{"class":260},[254,17439,16029],{"class":264},[254,17441,17433],{"class":2103},[254,17443,5777],{"class":264},[254,17445,17446,17448,17451,17453,17456,17459,17461,17463,17465,17467,17469],{"class":256,"line":2761},[254,17447,14879],{"class":260},[254,17449,17450],{"class":264}," distance ",[254,17452,310],{"class":260},[254,17454,17455],{"class":2103}," sqrt",[254,17457,17458],{"class":264},"(dx ",[254,17460,719],{"class":260},[254,17462,17392],{"class":264},[254,17464,745],{"class":260},[254,17466,17422],{"class":264},[254,17468,719],{"class":260},[254,17470,17471],{"class":264}," dy);\n",[254,17473,17474,17476,17479,17481,17483,17486],{"class":256,"line":8089},[254,17475,3241],{"class":260},[254,17477,17478],{"class":264}," (distance ",[254,17480,1174],{"class":260},[254,17482,16483],{"class":264},[254,17484,17485],{"class":2103},"getRadius",[254,17487,17488],{"class":264},"())\n",[254,17490,17491],{"class":256,"line":8113},[254,17492,2170],{"class":264},[254,17494,17495,17497,17499,17502,17504],{"class":256,"line":8118},[254,17496,9810],{"class":264},[254,17498,1308],{"class":260},[254,17500,17501],{"class":369}," \"点在圆内\"",[254,17503,1584],{"class":260},[254,17505,8981],{"class":264},[254,17507,17508],{"class":256,"line":8124},[254,17509,2327],{"class":264},[254,17511,17512],{"class":256,"line":8151},[254,17513,16964],{"class":260},[254,17515,17516],{"class":256,"line":8156},[254,17517,2170],{"class":264},[254,17519,17520,17522,17524,17527,17529],{"class":256,"line":8162},[254,17521,9810],{"class":264},[254,17523,1308],{"class":260},[254,17525,17526],{"class":369}," \"点在圆外\"",[254,17528,1584],{"class":260},[254,17530,8981],{"class":264},[254,17532,17533],{"class":256,"line":8174},[254,17534,2327],{"class":264},[254,17536,17537],{"class":256,"line":8186},[254,17538,1705],{"class":264},[254,17540,17541,17543,17545],{"class":256,"line":8198},[254,17542,268],{"class":260},[254,17544,2113],{"class":2103},[254,17546,2116],{"class":264},[254,17548,17549],{"class":256,"line":9857},[254,17550,1686],{"class":264},[254,17552,17553],{"class":256,"line":9882},[254,17554,15194],{"class":323},[254,17556,17557],{"class":256,"line":9905},[254,17558,14941],{"class":264},[254,17560,17561],{"class":256,"line":9929},[254,17562,17563],{"class":264},"    Point p1;\n",[254,17565,17566],{"class":256,"line":9934},[254,17567,17135],{"class":323},[254,17569,17570,17572,17574,17577],{"class":256,"line":9939},[254,17571,1691],{"class":264},[254,17573,1308],{"class":260},[254,17575,17576],{"class":369},"\"请输入圆的半径：\"",[254,17578,1430],{"class":264},[254,17580,17581,17583],{"class":256,"line":9944},[254,17582,14879],{"class":260},[254,17584,17585],{"class":264}," r;\n",[254,17587,17588,17590,17592],{"class":256,"line":9953},[254,17589,2152],{"class":264},[254,17591,1569],{"class":260},[254,17593,17594],{"class":264},"r;\n",[254,17596,17597,17599,17602],{"class":256,"line":9958},[254,17598,16736],{"class":264},[254,17600,17601],{"class":2103},"setRadius",[254,17603,17604],{"class":264},"(r);\n",[254,17606,17607,17609,17611,17614],{"class":256,"line":9964},[254,17608,1691],{"class":264},[254,17610,1308],{"class":260},[254,17612,17613],{"class":369},"\"请输入圆心坐标：\"",[254,17615,1430],{"class":264},[254,17617,17618,17620],{"class":256,"line":9985},[254,17619,14879],{"class":260},[254,17621,17622],{"class":264}," x, y;\n",[254,17624,17625,17627,17629,17631,17633],{"class":256,"line":9991},[254,17626,2152],{"class":264},[254,17628,1569],{"class":260},[254,17630,1084],{"class":264},[254,17632,1569],{"class":260},[254,17634,17635],{"class":264},"y;\n",[254,17637,17638,17641,17644],{"class":256,"line":10005},[254,17639,17640],{"class":264},"    p1.",[254,17642,17643],{"class":2103},"setPoint",[254,17645,17646],{"class":264},"(x, y);\n",[254,17648,17649,17651,17654],{"class":256,"line":10011},[254,17650,16736],{"class":264},[254,17652,17653],{"class":2103},"setCenter",[254,17655,17656],{"class":264},"(p1);\n",[254,17658,17659,17661,17663,17666],{"class":256,"line":10038},[254,17660,1691],{"class":264},[254,17662,1308],{"class":260},[254,17664,17665],{"class":369},"\"请输入测试点坐标：\"",[254,17667,1430],{"class":264},[254,17669,17670,17672],{"class":256,"line":10047},[254,17671,14879],{"class":260},[254,17673,17674],{"class":264}," x1, y1;\n",[254,17676,17677,17679,17681,17684,17686],{"class":256,"line":10053},[254,17678,2152],{"class":264},[254,17680,1569],{"class":260},[254,17682,17683],{"class":264},"x1",[254,17685,1569],{"class":260},[254,17687,17688],{"class":264},"y1;\n",[254,17690,17691],{"class":256,"line":10061},[254,17692,17693],{"class":264},"    Point p2;\n",[254,17695,17696,17699,17701],{"class":256,"line":10066},[254,17697,17698],{"class":264},"    p2.",[254,17700,17643],{"class":2103},[254,17702,17703],{"class":264},"(x1, y1);\n",[254,17705,17706,17709],{"class":256,"line":16745},[254,17707,17708],{"class":2103},"    isInCircle",[254,17710,17711],{"class":264},"(c1, p2);\n",[254,17713,17714],{"class":256,"line":16751},[254,17715,1705],{"class":264},[14,17717,17718],{},"在类中可以让另一个类作为本来的成员",[14,17720,17721],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[14,17723,17724],{},"创建point.h",[245,17726,17728],{"className":247,"code":17727,"language":249,"meta":174,"style":174},"#pragma once \u002F\u002F防止头文件重复包含\n#include\u003Ciostream>\nusing namespace std;\nclass Point\n{\n\u002F\u002F做好声明与变量定义就可以\npublic:\n    \u002F\u002F赋值\n    void setPoint(double x, double y);\n    \u002F\u002F获取坐标\n    double getX();\n    double getY();\n\nprivate:\n    double m_x;\n    double m_y;\n};\n",[251,17729,17730,17741,17747,17757,17763,17767,17772,17776,17780,17800,17804,17812,17820,17824,17828,17834,17840],{"__ignoreMap":174},[254,17731,17732,17735,17738],{"class":256,"line":257},[254,17733,17734],{"class":260},"#pragma",[254,17736,17737],{"class":2103}," once",[254,17739,17740],{"class":323}," \u002F\u002F防止头文件重复包含\n",[254,17742,17743,17745],{"class":256,"line":175},[254,17744,2089],{"class":260},[254,17746,2092],{"class":369},[254,17748,17749,17751,17753,17755],{"class":256,"line":1319},[254,17750,2097],{"class":260},[254,17752,2100],{"class":260},[254,17754,2104],{"class":2103},[254,17756,1430],{"class":264},[254,17758,17759,17761],{"class":256,"line":1334},[254,17760,14835],{"class":260},[254,17762,17122],{"class":2103},[254,17764,17765],{"class":256,"line":1340},[254,17766,1686],{"class":264},[254,17768,17769],{"class":256,"line":1354},[254,17770,17771],{"class":323},"\u002F\u002F做好声明与变量定义就可以\n",[254,17773,17774],{"class":256,"line":1360},[254,17775,14857],{"class":260},[254,17777,17778],{"class":256,"line":1451},[254,17779,17135],{"class":323},[254,17781,17782,17784,17786,17788,17790,17792,17794,17796,17798],{"class":256,"line":1457},[254,17783,15050],{"class":260},[254,17785,17142],{"class":2103},[254,17787,265],{"class":264},[254,17789,14178],{"class":260},[254,17791,17149],{"class":5357},[254,17793,12576],{"class":264},[254,17795,14178],{"class":260},[254,17797,17156],{"class":5357},[254,17799,2859],{"class":264},[254,17801,17802],{"class":256,"line":1469},[254,17803,17174],{"class":323},[254,17805,17806,17808,17810],{"class":256,"line":1752},[254,17807,14879],{"class":260},[254,17809,17181],{"class":2103},[254,17811,5777],{"class":264},[254,17813,17814,17816,17818],{"class":256,"line":1757},[254,17815,14879],{"class":260},[254,17817,17197],{"class":2103},[254,17819,5777],{"class":264},[254,17821,17822],{"class":256,"line":1763},[254,17823,2540],{"emptyLinePlaceholder":184},[254,17825,17826],{"class":256,"line":1768},[254,17827,15363],{"class":260},[254,17829,17830,17832],{"class":256,"line":1782},[254,17831,14879],{"class":260},[254,17833,17219],{"class":264},[254,17835,17836,17838],{"class":256,"line":1787},[254,17837,14879],{"class":260},[254,17839,17226],{"class":264},[254,17841,17842],{"class":256,"line":1793},[254,17843,4135],{"class":264},[14,17845,17846],{},"创建point.cpp",[245,17848,17850],{"className":247,"code":17849,"language":249,"meta":174,"style":174},"#include\u003Cpoint.h>\n\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n    void Point::setPoint(double x, double y) { m_x = x; m_y = y; }\n    \u002F\u002F获取坐标\n    double Point::getX() { return m_x; }\n    double Point::getY() { return m_y; }\n",[251,17851,17852,17859,17864,17898,17902,17918],{"__ignoreMap":174},[254,17853,17854,17856],{"class":256,"line":257},[254,17855,2089],{"class":260},[254,17857,17858],{"class":369},"\u003Cpoint.h>\n",[254,17860,17861],{"class":256,"line":175},[254,17862,17863],{"class":323},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[254,17865,17866,17868,17871,17874,17876,17878,17880,17882,17884,17886,17888,17890,17892,17894,17896],{"class":256,"line":1319},[254,17867,15050],{"class":260},[254,17869,17870],{"class":2103}," Point",[254,17872,17873],{"class":264},"::",[254,17875,17643],{"class":2103},[254,17877,265],{"class":264},[254,17879,14178],{"class":260},[254,17881,17149],{"class":5357},[254,17883,12576],{"class":264},[254,17885,14178],{"class":260},[254,17887,17156],{"class":5357},[254,17889,17159],{"class":264},[254,17891,310],{"class":260},[254,17893,17164],{"class":264},[254,17895,310],{"class":260},[254,17897,17169],{"class":264},[254,17899,17900],{"class":256,"line":1334},[254,17901,17174],{"class":323},[254,17903,17904,17906,17908,17910,17912,17914,17916],{"class":256,"line":1340},[254,17905,14879],{"class":260},[254,17907,17870],{"class":2103},[254,17909,17873],{"class":264},[254,17911,17405],{"class":2103},[254,17913,17184],{"class":264},[254,17915,17187],{"class":260},[254,17917,17190],{"class":264},[254,17919,17920,17922,17924,17926,17928,17930,17932],{"class":256,"line":1354},[254,17921,14879],{"class":260},[254,17923,17870],{"class":2103},[254,17925,17873],{"class":264},[254,17927,17433],{"class":2103},[254,17929,17184],{"class":264},[254,17931,17187],{"class":260},[254,17933,17204],{"class":264},[14,17935,17936],{},"创建circle.h",[245,17938,17940],{"className":247,"code":17939,"language":249,"meta":174,"style":174},"#pragma once\n#include\u003Ciostream>\nusing namespace std;\n#include\u003Cpoint.h>\nclass Circle\n{\npublic:\n    \u002F\u002F赋值\n    void setRadius(double r);\n    void setCenter(Point center);\n    \u002F\u002F获取属性\n    double getRadius();\n    Point getCenter();\n\nprivate:\n    double m_r;\n    \u002F\u002F在类中可以让另一个类作为本来的成员\n    Point m_center;\n};\n",[251,17941,17942,17949,17955,17965,17971,17977,17981,17985,17989,18003,18017,18021,18029,18037,18041,18045,18051,18055,18059],{"__ignoreMap":174},[254,17943,17944,17946],{"class":256,"line":257},[254,17945,17734],{"class":260},[254,17947,17948],{"class":2103}," once\n",[254,17950,17951,17953],{"class":256,"line":175},[254,17952,2089],{"class":260},[254,17954,2092],{"class":369},[254,17956,17957,17959,17961,17963],{"class":256,"line":1319},[254,17958,2097],{"class":260},[254,17960,2100],{"class":260},[254,17962,2104],{"class":2103},[254,17964,1430],{"class":264},[254,17966,17967,17969],{"class":256,"line":1334},[254,17968,2089],{"class":260},[254,17970,17858],{"class":369},[254,17972,17973,17975],{"class":256,"line":1340},[254,17974,14835],{"class":260},[254,17976,14838],{"class":2103},[254,17978,17979],{"class":256,"line":1354},[254,17980,1686],{"class":264},[254,17982,17983],{"class":256,"line":1360},[254,17984,14857],{"class":260},[254,17986,17987],{"class":256,"line":1451},[254,17988,17135],{"class":323},[254,17990,17991,17993,17995,17997,17999,18001],{"class":256,"line":1457},[254,17992,15050],{"class":260},[254,17994,17255],{"class":2103},[254,17996,265],{"class":264},[254,17998,14178],{"class":260},[254,18000,17262],{"class":5357},[254,18002,2859],{"class":264},[254,18004,18005,18007,18009,18011,18013,18015],{"class":256,"line":1469},[254,18006,15050],{"class":260},[254,18008,17277],{"class":2103},[254,18010,265],{"class":264},[254,18012,17282],{"class":2103},[254,18014,17285],{"class":5357},[254,18016,2859],{"class":264},[254,18018,18019],{"class":256,"line":1752},[254,18020,17298],{"class":323},[254,18022,18023,18025,18027],{"class":256,"line":1757},[254,18024,14879],{"class":260},[254,18026,17305],{"class":2103},[254,18028,5777],{"class":264},[254,18030,18031,18033,18035],{"class":256,"line":1763},[254,18032,17317],{"class":2103},[254,18034,17320],{"class":2103},[254,18036,5777],{"class":264},[254,18038,18039],{"class":256,"line":1768},[254,18040,2540],{"emptyLinePlaceholder":184},[254,18042,18043],{"class":256,"line":1782},[254,18044,15363],{"class":260},[254,18046,18047,18049],{"class":256,"line":1787},[254,18048,14879],{"class":260},[254,18050,14869],{"class":264},[254,18052,18053],{"class":256,"line":1793},[254,18054,17346],{"class":323},[254,18056,18057],{"class":256,"line":1814},[254,18058,17351],{"class":264},[254,18060,18061],{"class":256,"line":1819},[254,18062,4135],{"class":264},[14,18064,18065],{},"创建circle.cpp",[245,18067,18069],{"className":247,"code":18068,"language":249,"meta":174,"style":174},"#include\u003Ccircle.h>\nvoid Circle::setRadius(double r) { m_r = r; }\nvoid Circle::setCenter(Point center) { m_center = center; }\n\u002F\u002F获取属性\ndouble Circle::getRadius() { return m_r; }\nPoint Circle::getCenter() { return m_center; }\n",[251,18070,18071,18078,18101,18123,18128,18144],{"__ignoreMap":174},[254,18072,18073,18075],{"class":256,"line":257},[254,18074,2089],{"class":260},[254,18076,18077],{"class":369},"\u003Ccircle.h>\n",[254,18079,18080,18082,18085,18087,18089,18091,18093,18095,18097,18099],{"class":256,"line":175},[254,18081,5505],{"class":260},[254,18083,18084],{"class":2103}," Circle",[254,18086,17873],{"class":264},[254,18088,17601],{"class":2103},[254,18090,265],{"class":264},[254,18092,14178],{"class":260},[254,18094,17262],{"class":5357},[254,18096,17265],{"class":264},[254,18098,310],{"class":260},[254,18100,17270],{"class":264},[254,18102,18103,18105,18107,18109,18111,18113,18115,18117,18119,18121],{"class":256,"line":1319},[254,18104,5505],{"class":260},[254,18106,18084],{"class":2103},[254,18108,17873],{"class":264},[254,18110,17653],{"class":2103},[254,18112,265],{"class":264},[254,18114,17282],{"class":2103},[254,18116,17285],{"class":5357},[254,18118,17288],{"class":264},[254,18120,310],{"class":260},[254,18122,17293],{"class":264},[254,18124,18125],{"class":256,"line":1334},[254,18126,18127],{"class":323},"\u002F\u002F获取属性\n",[254,18129,18130,18132,18134,18136,18138,18140,18142],{"class":256,"line":1340},[254,18131,14178],{"class":260},[254,18133,18084],{"class":2103},[254,18135,17873],{"class":264},[254,18137,17485],{"class":2103},[254,18139,17184],{"class":264},[254,18141,17187],{"class":260},[254,18143,17312],{"class":264},[254,18145,18146,18148,18150,18152,18154,18156,18158],{"class":256,"line":1354},[254,18147,17282],{"class":2103},[254,18149,18084],{"class":2103},[254,18151,17873],{"class":264},[254,18153,17399],{"class":2103},[254,18155,17184],{"class":264},[254,18157,17187],{"class":260},[254,18159,17327],{"class":264},[14,18161,18162],{},"使用封装的类",[245,18164,18166],{"className":247,"code":18165,"language":249,"meta":174,"style":174},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Ccircle.h>\n#include\u003Cpoint.h>\nvoid isInCircle(Circle &c,Point &p)\n{\n    double dx = c.getCenter().getX() - p.getX();\n    double dy = c.getCenter().getY() - p.getY();\n    double distance = sqrt(dx * dx + dy * dy);\n    if (distance \u003C c.getRadius())\n    {\n        cout \u003C\u003C \"点在圆内\" \u003C\u003C endl;\n    }\n    else\n    {\n        cout \u003C\u003C \"点在圆外\" \u003C\u003C endl;\n    }\n}\nint main()\n{\n    \u002F\u002F实例化\n    Circle c1;\n    Point p1;\n    \u002F\u002F赋值\n    cout\u003C\u003C\"请输入圆的半径：\";\n    double r;\n    cin>>r;\n    c1.setRadius(r);\n    cout\u003C\u003C\"请输入圆心坐标：\";\n    double x, y;\n    cin>>x>>y;\n    p1.setPoint(x, y);\n    c1.setCenter(p1);\n    cout\u003C\u003C\"请输入测试点坐标：\";\n    double x1, y1;\n    cin>>x1>>y1;\n    Point p2;\n    p2.setPoint(x1, y1);\n    isInCircle(c1, p2);\n}\n",[251,18167,18168,18174,18184,18190,18196,18220,18224,18250,18276,18300,18314,18318,18330,18334,18338,18342,18354,18358,18362,18370,18374,18378,18382,18386,18390,18400,18406,18414,18422,18432,18438,18450,18458,18466,18476,18482,18494,18498,18506,18512],{"__ignoreMap":174},[254,18169,18170,18172],{"class":256,"line":257},[254,18171,2089],{"class":260},[254,18173,2092],{"class":369},[254,18175,18176,18178,18180,18182],{"class":256,"line":175},[254,18177,2097],{"class":260},[254,18179,2100],{"class":260},[254,18181,2104],{"class":2103},[254,18183,1430],{"class":264},[254,18185,18186,18188],{"class":256,"line":1319},[254,18187,2089],{"class":260},[254,18189,18077],{"class":369},[254,18191,18192,18194],{"class":256,"line":1334},[254,18193,2089],{"class":260},[254,18195,17858],{"class":369},[254,18197,18198,18200,18202,18204,18206,18208,18210,18212,18214,18216,18218],{"class":256,"line":1340},[254,18199,5505],{"class":260},[254,18201,17362],{"class":2103},[254,18203,265],{"class":264},[254,18205,17367],{"class":2103},[254,18207,10725],{"class":260},[254,18209,552],{"class":5357},[254,18211,642],{"class":264},[254,18213,17282],{"class":2103},[254,18215,10725],{"class":260},[254,18217,14],{"class":5357},[254,18219,271],{"class":264},[254,18221,18222],{"class":256,"line":1354},[254,18223,1686],{"class":264},[254,18225,18226,18228,18230,18232,18234,18236,18238,18240,18242,18244,18246,18248],{"class":256,"line":1360},[254,18227,14879],{"class":260},[254,18229,17392],{"class":264},[254,18231,310],{"class":260},[254,18233,16483],{"class":264},[254,18235,17399],{"class":2103},[254,18237,17402],{"class":264},[254,18239,17405],{"class":2103},[254,18241,13191],{"class":264},[254,18243,796],{"class":260},[254,18245,16029],{"class":264},[254,18247,17405],{"class":2103},[254,18249,5777],{"class":264},[254,18251,18252,18254,18256,18258,18260,18262,18264,18266,18268,18270,18272,18274],{"class":256,"line":1451},[254,18253,14879],{"class":260},[254,18255,17422],{"class":264},[254,18257,310],{"class":260},[254,18259,16483],{"class":264},[254,18261,17399],{"class":2103},[254,18263,17402],{"class":264},[254,18265,17433],{"class":2103},[254,18267,13191],{"class":264},[254,18269,796],{"class":260},[254,18271,16029],{"class":264},[254,18273,17433],{"class":2103},[254,18275,5777],{"class":264},[254,18277,18278,18280,18282,18284,18286,18288,18290,18292,18294,18296,18298],{"class":256,"line":1457},[254,18279,14879],{"class":260},[254,18281,17450],{"class":264},[254,18283,310],{"class":260},[254,18285,17455],{"class":2103},[254,18287,17458],{"class":264},[254,18289,719],{"class":260},[254,18291,17392],{"class":264},[254,18293,745],{"class":260},[254,18295,17422],{"class":264},[254,18297,719],{"class":260},[254,18299,17471],{"class":264},[254,18301,18302,18304,18306,18308,18310,18312],{"class":256,"line":1469},[254,18303,3241],{"class":260},[254,18305,17478],{"class":264},[254,18307,1174],{"class":260},[254,18309,16483],{"class":264},[254,18311,17485],{"class":2103},[254,18313,17488],{"class":264},[254,18315,18316],{"class":256,"line":1752},[254,18317,2170],{"class":264},[254,18319,18320,18322,18324,18326,18328],{"class":256,"line":1757},[254,18321,9810],{"class":264},[254,18323,1308],{"class":260},[254,18325,17501],{"class":369},[254,18327,1584],{"class":260},[254,18329,8981],{"class":264},[254,18331,18332],{"class":256,"line":1763},[254,18333,2327],{"class":264},[254,18335,18336],{"class":256,"line":1768},[254,18337,16964],{"class":260},[254,18339,18340],{"class":256,"line":1782},[254,18341,2170],{"class":264},[254,18343,18344,18346,18348,18350,18352],{"class":256,"line":1787},[254,18345,9810],{"class":264},[254,18347,1308],{"class":260},[254,18349,17526],{"class":369},[254,18351,1584],{"class":260},[254,18353,8981],{"class":264},[254,18355,18356],{"class":256,"line":1793},[254,18357,2327],{"class":264},[254,18359,18360],{"class":256,"line":1814},[254,18361,1705],{"class":264},[254,18363,18364,18366,18368],{"class":256,"line":1819},[254,18365,268],{"class":260},[254,18367,2113],{"class":2103},[254,18369,2116],{"class":264},[254,18371,18372],{"class":256,"line":1833},[254,18373,1686],{"class":264},[254,18375,18376],{"class":256,"line":1838},[254,18377,15194],{"class":323},[254,18379,18380],{"class":256,"line":1867},[254,18381,14941],{"class":264},[254,18383,18384],{"class":256,"line":1872},[254,18385,17563],{"class":264},[254,18387,18388],{"class":256,"line":1889},[254,18389,17135],{"class":323},[254,18391,18392,18394,18396,18398],{"class":256,"line":1894},[254,18393,1691],{"class":264},[254,18395,1308],{"class":260},[254,18397,17576],{"class":369},[254,18399,1430],{"class":264},[254,18401,18402,18404],{"class":256,"line":1899},[254,18403,14879],{"class":260},[254,18405,17585],{"class":264},[254,18407,18408,18410,18412],{"class":256,"line":1904},[254,18409,2152],{"class":264},[254,18411,1569],{"class":260},[254,18413,17594],{"class":264},[254,18415,18416,18418,18420],{"class":256,"line":1918},[254,18417,16736],{"class":264},[254,18419,17601],{"class":2103},[254,18421,17604],{"class":264},[254,18423,18424,18426,18428,18430],{"class":256,"line":1923},[254,18425,1691],{"class":264},[254,18427,1308],{"class":260},[254,18429,17613],{"class":369},[254,18431,1430],{"class":264},[254,18433,18434,18436],{"class":256,"line":2717},[254,18435,14879],{"class":260},[254,18437,17622],{"class":264},[254,18439,18440,18442,18444,18446,18448],{"class":256,"line":2731},[254,18441,2152],{"class":264},[254,18443,1569],{"class":260},[254,18445,1084],{"class":264},[254,18447,1569],{"class":260},[254,18449,17635],{"class":264},[254,18451,18452,18454,18456],{"class":256,"line":2739},[254,18453,17640],{"class":264},[254,18455,17643],{"class":2103},[254,18457,17646],{"class":264},[254,18459,18460,18462,18464],{"class":256,"line":2744},[254,18461,16736],{"class":264},[254,18463,17653],{"class":2103},[254,18465,17656],{"class":264},[254,18467,18468,18470,18472,18474],{"class":256,"line":2750},[254,18469,1691],{"class":264},[254,18471,1308],{"class":260},[254,18473,17665],{"class":369},[254,18475,1430],{"class":264},[254,18477,18478,18480],{"class":256,"line":2756},[254,18479,14879],{"class":260},[254,18481,17674],{"class":264},[254,18483,18484,18486,18488,18490,18492],{"class":256,"line":2761},[254,18485,2152],{"class":264},[254,18487,1569],{"class":260},[254,18489,17683],{"class":264},[254,18491,1569],{"class":260},[254,18493,17688],{"class":264},[254,18495,18496],{"class":256,"line":8089},[254,18497,17693],{"class":264},[254,18499,18500,18502,18504],{"class":256,"line":8113},[254,18501,17698],{"class":264},[254,18503,17643],{"class":2103},[254,18505,17703],{"class":264},[254,18507,18508,18510],{"class":256,"line":8118},[254,18509,17708],{"class":2103},[254,18511,17711],{"class":264},[254,18513,18514],{"class":256,"line":8124},[254,18515,1705],{"class":264},[34,18517,18519],{"id":18518},"_82对象的初始化清理","8.2对象的初始化清理",[1271,18521,18522,18525],{},[24,18523,18524],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[24,18526,18527],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[225,18529,18531],{"id":18530},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[14,18533,18534,18535,18538],{},"对象的",[414,18536,18537],{},"初始化和清理","也是两个非常重要的安全问题",[14,18540,18541],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[14,18543,18544],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[14,18546,18547,18548,18551,18552,18555],{},"c++利用了",[414,18549,18550],{},"构造函数","和",[414,18553,18554],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[14,18557,18558,18559],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[414,18560,18561],{},"我们不提供构造和析构，编译器会提供",[14,18563,18564],{},[414,18565,18566],{},"编译器提供的构造函数和析构函数是空实现。",[1271,18568,18569,18572],{},[24,18570,18571],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[24,18573,18574,18575,18578],{},"析构函数：主要作用在于对象",[414,18576,18577],{},"销毁前","系统自动调用，执行一些清理工作。",[14,18580,18581,18584],{},[414,18582,18583],{},"构造函数语法：",[251,18585,18586],{},"类名(){}",[21,18588,18589,18592,18595,18598,18601],{},[24,18590,18591],{},"构造函数，没有返回值也不写void",[24,18593,18594],{},"函数名称与类名相同",[24,18596,18597],{},"构造函数可以有参数，因此可以发生重载",[24,18599,18600],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[24,18602,18603,18604,693],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[251,18605,18606],{},"Person(){}",[14,18608,18609,13936,18612],{},[414,18610,18611],{},"析构函数语法：",[251,18613,18614],{},"~类名(){}",[21,18616,18617,18620,18623,18629],{},[24,18618,18619],{},"析构函数，没有返回值也不写void",[24,18621,18622],{},"函数名称与类名相同,在名称前加上符号  ~",[24,18624,18625,18626],{},"析构函数不可以有参数，因此",[414,18627,18628],{},"不可以发生重载",[24,18630,18631],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[245,18633,18635],{"className":247,"code":18634,"language":249,"meta":174,"style":174},"class Person\n{\npublic:\n    \u002F\u002F构造函数\n    Person()\n    {\n        cout \u003C\u003C \"Person的构造函数调用\" \u003C\u003C endl;\n    }\n    \u002F\u002F析构函数\n    ~Person()\n    {\n        cout \u003C\u003C \"Person的析构函数调用\" \u003C\u003C endl;\n    }\n\n};\n\nvoid test01()\n{\n    Person p;\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n}\n\nint main() {\n    \n    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n\n    Person p;\u002F\u002F只有构造函数\n\n    system(\"pause\");\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n\n    return 0;\n}\n",[251,18636,18637,18643,18647,18651,18656,18663,18667,18680,18684,18689,18696,18700,18713,18717,18721,18725,18729,18737,18741,18749,18753,18757,18765,18769,18774,18778,18785,18789,18802,18806,18814],{"__ignoreMap":174},[254,18638,18639,18641],{"class":256,"line":257},[254,18640,14835],{"class":260},[254,18642,15312],{"class":2103},[254,18644,18645],{"class":256,"line":175},[254,18646,1686],{"class":264},[254,18648,18649],{"class":256,"line":1319},[254,18650,14857],{"class":260},[254,18652,18653],{"class":256,"line":1334},[254,18654,18655],{"class":323},"    \u002F\u002F构造函数\n",[254,18657,18658,18661],{"class":256,"line":1340},[254,18659,18660],{"class":2103},"    Person",[254,18662,2116],{"class":264},[254,18664,18665],{"class":256,"line":1354},[254,18666,2170],{"class":264},[254,18668,18669,18671,18673,18676,18678],{"class":256,"line":1360},[254,18670,9810],{"class":264},[254,18672,1308],{"class":260},[254,18674,18675],{"class":369}," \"Person的构造函数调用\"",[254,18677,1584],{"class":260},[254,18679,8981],{"class":264},[254,18681,18682],{"class":256,"line":1451},[254,18683,2327],{"class":264},[254,18685,18686],{"class":256,"line":1457},[254,18687,18688],{"class":323},"    \u002F\u002F析构函数\n",[254,18690,18691,18694],{"class":256,"line":1469},[254,18692,18693],{"class":2103},"    ~Person",[254,18695,2116],{"class":264},[254,18697,18698],{"class":256,"line":1752},[254,18699,2170],{"class":264},[254,18701,18702,18704,18706,18709,18711],{"class":256,"line":1757},[254,18703,9810],{"class":264},[254,18705,1308],{"class":260},[254,18707,18708],{"class":369}," \"Person的析构函数调用\"",[254,18710,1584],{"class":260},[254,18712,8981],{"class":264},[254,18714,18715],{"class":256,"line":1763},[254,18716,2327],{"class":264},[254,18718,18719],{"class":256,"line":1768},[254,18720,2540],{"emptyLinePlaceholder":184},[254,18722,18723],{"class":256,"line":1782},[254,18724,4135],{"class":264},[254,18726,18727],{"class":256,"line":1787},[254,18728,2540],{"emptyLinePlaceholder":184},[254,18730,18731,18733,18735],{"class":256,"line":1793},[254,18732,5505],{"class":260},[254,18734,5729],{"class":2103},[254,18736,2116],{"class":264},[254,18738,18739],{"class":256,"line":1814},[254,18740,1686],{"class":264},[254,18742,18743,18746],{"class":256,"line":1819},[254,18744,18745],{"class":264},"    Person p;",[254,18747,18748],{"class":323},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[254,18750,18751],{"class":256,"line":1833},[254,18752,1705],{"class":264},[254,18754,18755],{"class":256,"line":1838},[254,18756,2540],{"emptyLinePlaceholder":184},[254,18758,18759,18761,18763],{"class":256,"line":1867},[254,18760,268],{"class":260},[254,18762,2113],{"class":2103},[254,18764,10994],{"class":264},[254,18766,18767],{"class":256,"line":1872},[254,18768,13351],{"class":264},[254,18770,18771],{"class":256,"line":1889},[254,18772,18773],{"class":323},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[254,18775,18776],{"class":256,"line":1894},[254,18777,2540],{"emptyLinePlaceholder":184},[254,18779,18780,18782],{"class":256,"line":1899},[254,18781,18745],{"class":264},[254,18783,18784],{"class":323},"\u002F\u002F只有构造函数\n",[254,18786,18787],{"class":256,"line":1904},[254,18788,2540],{"emptyLinePlaceholder":184},[254,18790,18791,18793,18795,18797,18799],{"class":256,"line":1918},[254,18792,2443],{"class":2103},[254,18794,265],{"class":264},[254,18796,2448],{"class":369},[254,18798,6107],{"class":264},[254,18800,18801],{"class":323},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[254,18803,18804],{"class":256,"line":1923},[254,18805,2540],{"emptyLinePlaceholder":184},[254,18807,18808,18810,18812],{"class":256,"line":2717},[254,18809,4230],{"class":260},[254,18811,4233],{"class":313},[254,18813,1430],{"class":264},[254,18815,18816],{"class":256,"line":2731},[254,18817,1705],{"class":264},[14,18819,18820],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[225,18822,18824],{"id":18823},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[14,18826,18827],{},"两种分类方式：",[14,18829,18830],{},"​\t按参数分为： 有参构造和无参构造",[14,18832,18833],{},"​\t按类型分为： 普通构造和拷贝构造",[14,18835,18836],{},"三种调用方式：",[14,18838,18839],{},"​\t括号法",[14,18841,18842],{},"​\t显示法",[14,18844,18845],{},"​\t隐式转换法",[245,18847,18849],{"className":247,"code":18848,"language":249,"meta":174,"style":174},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F1.构造函数的分类及调用\n\u002F\u002F分类\n\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n\u002F\u002F  按照类型分类 普通构造 拷贝构造\n\nclass Person \n{\npublic:\n    \u002F\u002F构造函数\n    Person()\n    {\n        cout\u003C\u003C\"Person构造函数无参构造\"\u003C\u003Cendl;\n    }\n    Person(int a)\n    {\n        age=a;\n        cout\u003C\u003C\"Person构造函数有参构造\"\u003C\u003Cendl;\n    }\n    \u002F\u002F析构函数\n    ~Person()\n    {\n        cout\u003C\u003C\"Person析构函数被调用\"\u003C\u003Cendl;\n    }\n    \u002F\u002F拷贝构造函数\n    Person(const Person &p)\n    {\n        \u002F\u002F将传入对象的age赋值给当前对象的age\n        age=p.age;\n        cout\u003C\u003C\"Person拷贝构造函数被调用\"\u003C\u003Cendl;\n    }\n    int age;\n};\n\u002F\u002F调用\nvoid test01()\n{\n    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n}\nvoid test02()\n{\n    \u002F\u002F1.括号法\n    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n\n    \u002F\u002F注意事项\n    \u002F\u002F调用默认构造函数时候，不要加()\n    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n    \u002F\u002F Person p4();\n\n    \u002F\u002F2.显示法\n    Person p1;\n    Person p2=Person(10);\n    Person p3=Person(p2);\n    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n\n    \u002F\u002F 注意事项2\n    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n\n    \u002F\u002F3.隐士转换法\n    Person p4=10;  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n    Person p5=p4; \u002F\u002F 这里会调用拷贝构造函数\n}\nint main()\n{\n    test01();\n    test02();\n    return 0;\n}\n",[251,18850,18851,18857,18867,18872,18877,18882,18887,18891,18899,18903,18907,18911,18917,18921,18934,18938,18950,18954,18963,18976,18980,18984,18990,18994,19007,19011,19016,19032,19036,19041,19050,19063,19067,19073,19077,19082,19090,19094,19099,19103,19111,19115,19120,19125,19130,19135,19140,19144,19149,19154,19159,19164,19168,19173,19178,19194,19206,19211,19215,19220,19225,19230,19234,19239,19253,19266,19270,19278,19282,19288,19294,19302],{"__ignoreMap":174},[254,18852,18853,18855],{"class":256,"line":257},[254,18854,2089],{"class":260},[254,18856,2092],{"class":369},[254,18858,18859,18861,18863,18865],{"class":256,"line":175},[254,18860,2097],{"class":260},[254,18862,2100],{"class":260},[254,18864,2104],{"class":2103},[254,18866,1430],{"class":264},[254,18868,18869],{"class":256,"line":1319},[254,18870,18871],{"class":323},"\u002F\u002F1.构造函数的分类及调用\n",[254,18873,18874],{"class":256,"line":1334},[254,18875,18876],{"class":323},"\u002F\u002F分类\n",[254,18878,18879],{"class":256,"line":1340},[254,18880,18881],{"class":323},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[254,18883,18884],{"class":256,"line":1354},[254,18885,18886],{"class":323},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[254,18888,18889],{"class":256,"line":1360},[254,18890,2540],{"emptyLinePlaceholder":184},[254,18892,18893,18895,18897],{"class":256,"line":1451},[254,18894,14835],{"class":260},[254,18896,15710],{"class":2103},[254,18898,2814],{"class":264},[254,18900,18901],{"class":256,"line":1457},[254,18902,1686],{"class":264},[254,18904,18905],{"class":256,"line":1469},[254,18906,14857],{"class":260},[254,18908,18909],{"class":256,"line":1752},[254,18910,18655],{"class":323},[254,18912,18913,18915],{"class":256,"line":1757},[254,18914,18660],{"class":2103},[254,18916,2116],{"class":264},[254,18918,18919],{"class":256,"line":1763},[254,18920,2170],{"class":264},[254,18922,18923,18925,18927,18930,18932],{"class":256,"line":1768},[254,18924,3591],{"class":264},[254,18926,1308],{"class":260},[254,18928,18929],{"class":369},"\"Person构造函数无参构造\"",[254,18931,1308],{"class":260},[254,18933,1331],{"class":264},[254,18935,18936],{"class":256,"line":1782},[254,18937,2327],{"class":264},[254,18939,18940,18942,18944,18946,18948],{"class":256,"line":1787},[254,18941,18660],{"class":2103},[254,18943,265],{"class":264},[254,18945,268],{"class":260},[254,18947,1538],{"class":5357},[254,18949,271],{"class":264},[254,18951,18952],{"class":256,"line":1793},[254,18953,2170],{"class":264},[254,18955,18956,18959,18961],{"class":256,"line":1814},[254,18957,18958],{"class":264},"        age",[254,18960,310],{"class":260},[254,18962,6338],{"class":264},[254,18964,18965,18967,18969,18972,18974],{"class":256,"line":1819},[254,18966,3591],{"class":264},[254,18968,1308],{"class":260},[254,18970,18971],{"class":369},"\"Person构造函数有参构造\"",[254,18973,1308],{"class":260},[254,18975,1331],{"class":264},[254,18977,18978],{"class":256,"line":1833},[254,18979,2327],{"class":264},[254,18981,18982],{"class":256,"line":1838},[254,18983,18688],{"class":323},[254,18985,18986,18988],{"class":256,"line":1867},[254,18987,18693],{"class":2103},[254,18989,2116],{"class":264},[254,18991,18992],{"class":256,"line":1872},[254,18993,2170],{"class":264},[254,18995,18996,18998,19000,19003,19005],{"class":256,"line":1889},[254,18997,3591],{"class":264},[254,18999,1308],{"class":260},[254,19001,19002],{"class":369},"\"Person析构函数被调用\"",[254,19004,1308],{"class":260},[254,19006,1331],{"class":264},[254,19008,19009],{"class":256,"line":1894},[254,19010,2327],{"class":264},[254,19012,19013],{"class":256,"line":1899},[254,19014,19015],{"class":323},"    \u002F\u002F拷贝构造函数\n",[254,19017,19018,19020,19022,19024,19026,19028,19030],{"class":256,"line":1904},[254,19019,18660],{"class":2103},[254,19021,265],{"class":264},[254,19023,6933],{"class":260},[254,19025,15710],{"class":2103},[254,19027,10725],{"class":260},[254,19029,14],{"class":5357},[254,19031,271],{"class":264},[254,19033,19034],{"class":256,"line":1918},[254,19035,2170],{"class":264},[254,19037,19038],{"class":256,"line":1923},[254,19039,19040],{"class":323},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[254,19042,19043,19045,19047],{"class":256,"line":2717},[254,19044,18958],{"class":264},[254,19046,310],{"class":260},[254,19048,19049],{"class":264},"p.age;\n",[254,19051,19052,19054,19056,19059,19061],{"class":256,"line":2731},[254,19053,3591],{"class":264},[254,19055,1308],{"class":260},[254,19057,19058],{"class":369},"\"Person拷贝构造函数被调用\"",[254,19060,1308],{"class":260},[254,19062,1331],{"class":264},[254,19064,19065],{"class":256,"line":2739},[254,19066,2327],{"class":264},[254,19068,19069,19071],{"class":256,"line":2744},[254,19070,2125],{"class":260},[254,19072,7938],{"class":264},[254,19074,19075],{"class":256,"line":2750},[254,19076,4135],{"class":264},[254,19078,19079],{"class":256,"line":2756},[254,19080,19081],{"class":323},"\u002F\u002F调用\n",[254,19083,19084,19086,19088],{"class":256,"line":2761},[254,19085,5505],{"class":260},[254,19087,5729],{"class":2103},[254,19089,2116],{"class":264},[254,19091,19092],{"class":256,"line":8089},[254,19093,1686],{"class":264},[254,19095,19096],{"class":256,"line":8113},[254,19097,19098],{"class":323},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[254,19100,19101],{"class":256,"line":8118},[254,19102,1705],{"class":264},[254,19104,19105,19107,19109],{"class":256,"line":8124},[254,19106,5505],{"class":260},[254,19108,5798],{"class":2103},[254,19110,2116],{"class":264},[254,19112,19113],{"class":256,"line":8151},[254,19114,1686],{"class":264},[254,19116,19117],{"class":256,"line":8156},[254,19118,19119],{"class":323},"    \u002F\u002F1.括号法\n",[254,19121,19122],{"class":256,"line":8162},[254,19123,19124],{"class":323},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[254,19126,19127],{"class":256,"line":8174},[254,19128,19129],{"class":323},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[254,19131,19132],{"class":256,"line":8186},[254,19133,19134],{"class":323},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[254,19136,19137],{"class":256,"line":8198},[254,19138,19139],{"class":323},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[254,19141,19142],{"class":256,"line":9857},[254,19143,2540],{"emptyLinePlaceholder":184},[254,19145,19146],{"class":256,"line":9882},[254,19147,19148],{"class":323},"    \u002F\u002F注意事项\n",[254,19150,19151],{"class":256,"line":9905},[254,19152,19153],{"class":323},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[254,19155,19156],{"class":256,"line":9929},[254,19157,19158],{"class":323},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[254,19160,19161],{"class":256,"line":9934},[254,19162,19163],{"class":323},"    \u002F\u002F Person p4();\n",[254,19165,19166],{"class":256,"line":9939},[254,19167,2540],{"emptyLinePlaceholder":184},[254,19169,19170],{"class":256,"line":9944},[254,19171,19172],{"class":323},"    \u002F\u002F2.显示法\n",[254,19174,19175],{"class":256,"line":9953},[254,19176,19177],{"class":264},"    Person p1;\n",[254,19179,19180,19183,19185,19188,19190,19192],{"class":256,"line":9958},[254,19181,19182],{"class":264},"    Person p2",[254,19184,310],{"class":260},[254,19186,19187],{"class":2103},"Person",[254,19189,265],{"class":264},[254,19191,710],{"class":313},[254,19193,2859],{"class":264},[254,19195,19196,19199,19201,19203],{"class":256,"line":9964},[254,19197,19198],{"class":264},"    Person p3",[254,19200,310],{"class":260},[254,19202,19187],{"class":2103},[254,19204,19205],{"class":264},"(p2);\n",[254,19207,19208],{"class":256,"line":9985},[254,19209,19210],{"class":323},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[254,19212,19213],{"class":256,"line":9991},[254,19214,2540],{"emptyLinePlaceholder":184},[254,19216,19217],{"class":256,"line":10005},[254,19218,19219],{"class":323},"    \u002F\u002F 注意事项2\n",[254,19221,19222],{"class":256,"line":10011},[254,19223,19224],{"class":323},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[254,19226,19227],{"class":256,"line":10038},[254,19228,19229],{"class":323},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[254,19231,19232],{"class":256,"line":10047},[254,19233,2540],{"emptyLinePlaceholder":184},[254,19235,19236],{"class":256,"line":10053},[254,19237,19238],{"class":323},"    \u002F\u002F3.隐士转换法\n",[254,19240,19241,19244,19246,19248,19250],{"class":256,"line":10061},[254,19242,19243],{"class":264},"    Person p4",[254,19245,310],{"class":260},[254,19247,710],{"class":313},[254,19249,320],{"class":264},[254,19251,19252],{"class":323},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[254,19254,19255,19258,19260,19263],{"class":256,"line":10066},[254,19256,19257],{"class":264},"    Person p5",[254,19259,310],{"class":260},[254,19261,19262],{"class":264},"p4;",[254,19264,19265],{"class":323}," \u002F\u002F 这里会调用拷贝构造函数\n",[254,19267,19268],{"class":256,"line":16745},[254,19269,1705],{"class":264},[254,19271,19272,19274,19276],{"class":256,"line":16751},[254,19273,268],{"class":260},[254,19275,2113],{"class":2103},[254,19277,2116],{"class":264},[254,19279,19280],{"class":256,"line":16774},[254,19281,1686],{"class":264},[254,19283,19284,19286],{"class":256,"line":16780},[254,19285,5774],{"class":2103},[254,19287,5777],{"class":264},[254,19289,19290,19292],{"class":256,"line":16803},[254,19291,5843],{"class":2103},[254,19293,5777],{"class":264},[254,19295,19296,19298,19300],{"class":256,"line":16817},[254,19297,4230],{"class":260},[254,19299,4233],{"class":313},[254,19301,1430],{"class":264},[254,19303,19304],{"class":256,"line":16837},[254,19305,1705],{"class":264},[14,19307,19308,19311],{},[414,19309,19310],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[225,19313,19315],{"id":19314},"_823拷贝构造函数","8.2.3拷贝构造函数",[14,19317,19318],{},"C++中拷贝构造函数调用时机通常有三种情况",[1271,19320,19321,19324,19327],{},[24,19322,19323],{},"使用一个已经创建完毕的对象来初始化一个新对象",[24,19325,19326],{},"值传递的方式给函数参数传值",[24,19328,19329],{},"以值方式返回局部对象",[245,19331,19333],{"className":247,"code":19332,"language":249,"meta":174,"style":174},"#include\u003Ciostream>\nusing namespace std;\n\n\u002F\u002F拷贝构造函数调用时机\n\n\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n\u002F\u002F2.值传递的方式给函数参数传值\n\u002F\u002F3.以值方式返回局部对象\nclass Person\n{\npublic:\n    Person()\n    {\n        cout \u003C\u003C \"Person的默认构造函数调用\" \u003C\u003C endl;\n    }\n    \u002F\u002F有参构造\n    Person(int age)\n    {\n        m_Age = age;\n        cout \u003C\u003C \"Person的有参构造函数调用\" \u003C\u003C endl;\n    }\n    \u002F\u002F拷贝构造函数\n    Person(const Person &p)\n    {\n        m_Age = p.m_Age;\n        cout \u003C\u003C \"Person的拷贝构造函数调用\" \u003C\u003C endl;\n    }\n    ~Person()\n    {\n        cout \u003C\u003C \"Person的析构函数调用\" \u003C\u003C endl;\n    }\n    int m_Age;\n};\n\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\nvoid test01()\n{\n    Person p1(20);\n    Person p2(p1);\n    cout\u003C\u003C\"P2的年龄为：\"\u003C\u003Cp2.m_Age\u003C\u003Cendl;\n}\n\u002F\u002F 2.值传递的方式给函数参数传值\n\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\nvoid doWork(Person p)\n{\n    cout \u003C\u003C \"doWork函数调用\" \u003C\u003C endl;\n}\nvoid test02()\n{\n    Person p;\n    doWork(p);\n}\n\u002F\u002F 3.以值方式返回局部对象\nPerson doWork2()\n{\n    Person p1;\n    cout\u003C\u003C(int *)&p1\u003C\u003Cendl;\u002F\u002F打印p1的地址\n    return p1;\u002F\u002F返回局部对象，调用拷贝构造函数\n}\nvoid test03()\n{\n    Person p = doWork2();\n    cout\u003C\u003C(int *)&p\u003C\u003Cendl;\u002F\u002F打印p的地址\n}\n\n\nint main()\n{\n    \u002F\u002F test01();\n    \u002F\u002F test02();\n    test03();\n\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n\u002F\u002F 输出结果如下：\n\u002F\u002F Person的默认构造函数调用\n\u002F\u002F 0x7fffffffceec\n\u002F\u002F 0x7fffffffceec\n\u002F\u002F Person的析构函数调用\n\n\u002F\u002F 之前的输出结果如下：\n\u002F\u002F Person的默认构造函数调用\n\u002F\u002F 地址\n\u002F\u002F Person的拷贝构造函数调用\n\u002F\u002F Person的析构函数调用\n\u002F\u002F 地址\n\u002F\u002F (这两次输出的地址也是不同的) \n\u002F\u002F Person的析构函数调用     \n    return 0;\n}\n",[251,19334,19335,19341,19351,19355,19360,19364,19369,19374,19379,19385,19389,19393,19399,19403,19416,19420,19425,19437,19441,19449,19462,19466,19470,19486,19490,19499,19512,19516,19522,19526,19538,19542,19548,19552,19556,19564,19568,19581,19589,19607,19611,19616,19621,19636,19640,19653,19657,19665,19669,19673,19681,19685,19690,19699,19703,19707,19732,19742,19746,19754,19758,19769,19794,19798,19802,19806,19814,19818,19823,19828,19835,19840,19845,19850,19855,19859,19864,19868,19873,19877,19882,19887,19891,19895,19900,19905,19913],{"__ignoreMap":174},[254,19336,19337,19339],{"class":256,"line":257},[254,19338,2089],{"class":260},[254,19340,2092],{"class":369},[254,19342,19343,19345,19347,19349],{"class":256,"line":175},[254,19344,2097],{"class":260},[254,19346,2100],{"class":260},[254,19348,2104],{"class":2103},[254,19350,1430],{"class":264},[254,19352,19353],{"class":256,"line":1319},[254,19354,2540],{"emptyLinePlaceholder":184},[254,19356,19357],{"class":256,"line":1334},[254,19358,19359],{"class":323},"\u002F\u002F拷贝构造函数调用时机\n",[254,19361,19362],{"class":256,"line":1340},[254,19363,2540],{"emptyLinePlaceholder":184},[254,19365,19366],{"class":256,"line":1354},[254,19367,19368],{"class":323},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[254,19370,19371],{"class":256,"line":1360},[254,19372,19373],{"class":323},"\u002F\u002F2.值传递的方式给函数参数传值\n",[254,19375,19376],{"class":256,"line":1451},[254,19377,19378],{"class":323},"\u002F\u002F3.以值方式返回局部对象\n",[254,19380,19381,19383],{"class":256,"line":1457},[254,19382,14835],{"class":260},[254,19384,15312],{"class":2103},[254,19386,19387],{"class":256,"line":1469},[254,19388,1686],{"class":264},[254,19390,19391],{"class":256,"line":1752},[254,19392,14857],{"class":260},[254,19394,19395,19397],{"class":256,"line":1757},[254,19396,18660],{"class":2103},[254,19398,2116],{"class":264},[254,19400,19401],{"class":256,"line":1763},[254,19402,2170],{"class":264},[254,19404,19405,19407,19409,19412,19414],{"class":256,"line":1768},[254,19406,9810],{"class":264},[254,19408,1308],{"class":260},[254,19410,19411],{"class":369}," \"Person的默认构造函数调用\"",[254,19413,1584],{"class":260},[254,19415,8981],{"class":264},[254,19417,19418],{"class":256,"line":1782},[254,19419,2327],{"class":264},[254,19421,19422],{"class":256,"line":1787},[254,19423,19424],{"class":323},"    \u002F\u002F有参构造\n",[254,19426,19427,19429,19431,19433,19435],{"class":256,"line":1793},[254,19428,18660],{"class":2103},[254,19430,265],{"class":264},[254,19432,268],{"class":260},[254,19434,15830],{"class":5357},[254,19436,271],{"class":264},[254,19438,19439],{"class":256,"line":1814},[254,19440,2170],{"class":264},[254,19442,19443,19445,19447],{"class":256,"line":1819},[254,19444,15884],{"class":264},[254,19446,310],{"class":260},[254,19448,7938],{"class":264},[254,19450,19451,19453,19455,19458,19460],{"class":256,"line":1833},[254,19452,9810],{"class":264},[254,19454,1308],{"class":260},[254,19456,19457],{"class":369}," \"Person的有参构造函数调用\"",[254,19459,1584],{"class":260},[254,19461,8981],{"class":264},[254,19463,19464],{"class":256,"line":1838},[254,19465,2327],{"class":264},[254,19467,19468],{"class":256,"line":1867},[254,19469,19015],{"class":323},[254,19471,19472,19474,19476,19478,19480,19482,19484],{"class":256,"line":1872},[254,19473,18660],{"class":2103},[254,19475,265],{"class":264},[254,19477,6933],{"class":260},[254,19479,15710],{"class":2103},[254,19481,10725],{"class":260},[254,19483,14],{"class":5357},[254,19485,271],{"class":264},[254,19487,19488],{"class":256,"line":1889},[254,19489,2170],{"class":264},[254,19491,19492,19494,19496],{"class":256,"line":1894},[254,19493,15884],{"class":264},[254,19495,310],{"class":260},[254,19497,19498],{"class":264}," p.m_Age;\n",[254,19500,19501,19503,19505,19508,19510],{"class":256,"line":1899},[254,19502,9810],{"class":264},[254,19504,1308],{"class":260},[254,19506,19507],{"class":369}," \"Person的拷贝构造函数调用\"",[254,19509,1584],{"class":260},[254,19511,8981],{"class":264},[254,19513,19514],{"class":256,"line":1904},[254,19515,2327],{"class":264},[254,19517,19518,19520],{"class":256,"line":1918},[254,19519,18693],{"class":2103},[254,19521,2116],{"class":264},[254,19523,19524],{"class":256,"line":1923},[254,19525,2170],{"class":264},[254,19527,19528,19530,19532,19534,19536],{"class":256,"line":2717},[254,19529,9810],{"class":264},[254,19531,1308],{"class":260},[254,19533,18708],{"class":369},[254,19535,1584],{"class":260},[254,19537,8981],{"class":264},[254,19539,19540],{"class":256,"line":2731},[254,19541,2327],{"class":264},[254,19543,19544,19546],{"class":256,"line":2739},[254,19545,2125],{"class":260},[254,19547,15807],{"class":264},[254,19549,19550],{"class":256,"line":2744},[254,19551,4135],{"class":264},[254,19553,19554],{"class":256,"line":2750},[254,19555,19368],{"class":323},[254,19557,19558,19560,19562],{"class":256,"line":2756},[254,19559,5505],{"class":260},[254,19561,5729],{"class":2103},[254,19563,2116],{"class":264},[254,19565,19566],{"class":256,"line":2761},[254,19567,1686],{"class":264},[254,19569,19570,19573,19575,19577,19579],{"class":256,"line":8089},[254,19571,19572],{"class":264},"    Person ",[254,19574,7271],{"class":2103},[254,19576,265],{"class":264},[254,19578,964],{"class":313},[254,19580,2859],{"class":264},[254,19582,19583,19585,19587],{"class":256,"line":8113},[254,19584,19572],{"class":264},[254,19586,7174],{"class":2103},[254,19588,17656],{"class":264},[254,19590,19591,19593,19595,19598,19600,19603,19605],{"class":256,"line":8118},[254,19592,1691],{"class":264},[254,19594,1308],{"class":260},[254,19596,19597],{"class":369},"\"P2的年龄为：\"",[254,19599,1308],{"class":260},[254,19601,19602],{"class":264},"p2.m_Age",[254,19604,1308],{"class":260},[254,19606,1331],{"class":264},[254,19608,19609],{"class":256,"line":8124},[254,19610,1705],{"class":264},[254,19612,19613],{"class":256,"line":8151},[254,19614,19615],{"class":323},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[254,19617,19618],{"class":256,"line":8156},[254,19619,19620],{"class":323},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[254,19622,19623,19625,19628,19630,19632,19634],{"class":256,"line":8162},[254,19624,5505],{"class":260},[254,19626,19627],{"class":2103}," doWork",[254,19629,265],{"class":264},[254,19631,19187],{"class":2103},[254,19633,6966],{"class":5357},[254,19635,271],{"class":264},[254,19637,19638],{"class":256,"line":8174},[254,19639,1686],{"class":264},[254,19641,19642,19644,19646,19649,19651],{"class":256,"line":8186},[254,19643,6670],{"class":264},[254,19645,1308],{"class":260},[254,19647,19648],{"class":369}," \"doWork函数调用\"",[254,19650,1584],{"class":260},[254,19652,8981],{"class":264},[254,19654,19655],{"class":256,"line":8198},[254,19656,1705],{"class":264},[254,19658,19659,19661,19663],{"class":256,"line":9857},[254,19660,5505],{"class":260},[254,19662,5798],{"class":2103},[254,19664,2116],{"class":264},[254,19666,19667],{"class":256,"line":9882},[254,19668,1686],{"class":264},[254,19670,19671],{"class":256,"line":9905},[254,19672,15454],{"class":264},[254,19674,19675,19678],{"class":256,"line":9929},[254,19676,19677],{"class":2103},"    doWork",[254,19679,19680],{"class":264},"(p);\n",[254,19682,19683],{"class":256,"line":9934},[254,19684,1705],{"class":264},[254,19686,19687],{"class":256,"line":9939},[254,19688,19689],{"class":323},"\u002F\u002F 3.以值方式返回局部对象\n",[254,19691,19692,19694,19697],{"class":256,"line":9944},[254,19693,19187],{"class":2103},[254,19695,19696],{"class":2103}," doWork2",[254,19698,2116],{"class":264},[254,19700,19701],{"class":256,"line":9953},[254,19702,1686],{"class":264},[254,19704,19705],{"class":256,"line":9958},[254,19706,19177],{"class":264},[254,19708,19709,19711,19713,19715,19717,19719,19721,19723,19725,19727,19729],{"class":256,"line":9964},[254,19710,1691],{"class":264},[254,19712,1308],{"class":260},[254,19714,265],{"class":264},[254,19716,268],{"class":260},[254,19718,6659],{"class":260},[254,19720,693],{"class":264},[254,19722,617],{"class":260},[254,19724,7271],{"class":264},[254,19726,1308],{"class":260},[254,19728,1378],{"class":264},[254,19730,19731],{"class":323},"\u002F\u002F打印p1的地址\n",[254,19733,19734,19736,19739],{"class":256,"line":9985},[254,19735,4230],{"class":260},[254,19737,19738],{"class":264}," p1;",[254,19740,19741],{"class":323},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[254,19743,19744],{"class":256,"line":9991},[254,19745,1705],{"class":264},[254,19747,19748,19750,19752],{"class":256,"line":10005},[254,19749,5505],{"class":260},[254,19751,5870],{"class":2103},[254,19753,2116],{"class":264},[254,19755,19756],{"class":256,"line":10011},[254,19757,1686],{"class":264},[254,19759,19760,19763,19765,19767],{"class":256,"line":10038},[254,19761,19762],{"class":264},"    Person p ",[254,19764,310],{"class":260},[254,19766,19696],{"class":2103},[254,19768,5777],{"class":264},[254,19770,19771,19773,19775,19777,19779,19781,19783,19785,19787,19789,19791],{"class":256,"line":10047},[254,19772,1691],{"class":264},[254,19774,1308],{"class":260},[254,19776,265],{"class":264},[254,19778,268],{"class":260},[254,19780,6659],{"class":260},[254,19782,693],{"class":264},[254,19784,617],{"class":260},[254,19786,14],{"class":264},[254,19788,1308],{"class":260},[254,19790,1378],{"class":264},[254,19792,19793],{"class":323},"\u002F\u002F打印p的地址\n",[254,19795,19796],{"class":256,"line":10053},[254,19797,1705],{"class":264},[254,19799,19800],{"class":256,"line":10061},[254,19801,2540],{"emptyLinePlaceholder":184},[254,19803,19804],{"class":256,"line":10066},[254,19805,2540],{"emptyLinePlaceholder":184},[254,19807,19808,19810,19812],{"class":256,"line":16745},[254,19809,268],{"class":260},[254,19811,2113],{"class":2103},[254,19813,2116],{"class":264},[254,19815,19816],{"class":256,"line":16751},[254,19817,1686],{"class":264},[254,19819,19820],{"class":256,"line":16774},[254,19821,19822],{"class":323},"    \u002F\u002F test01();\n",[254,19824,19825],{"class":256,"line":16780},[254,19826,19827],{"class":323},"    \u002F\u002F test02();\n",[254,19829,19830,19833],{"class":256,"line":16803},[254,19831,19832],{"class":2103},"    test03",[254,19834,5777],{"class":264},[254,19836,19837],{"class":256,"line":16817},[254,19838,19839],{"class":323},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[254,19841,19842],{"class":256,"line":16837},[254,19843,19844],{"class":323},"\u002F\u002F 输出结果如下：\n",[254,19846,19847],{"class":256,"line":16843},[254,19848,19849],{"class":323},"\u002F\u002F Person的默认构造函数调用\n",[254,19851,19852],{"class":256,"line":16854},[254,19853,19854],{"class":323},"\u002F\u002F 0x7fffffffceec\n",[254,19856,19857],{"class":256,"line":16877},[254,19858,19854],{"class":323},[254,19860,19861],{"class":256,"line":16899},[254,19862,19863],{"class":323},"\u002F\u002F Person的析构函数调用\n",[254,19865,19866],{"class":256,"line":16904},[254,19867,2540],{"emptyLinePlaceholder":184},[254,19869,19870],{"class":256,"line":16910},[254,19871,19872],{"class":323},"\u002F\u002F 之前的输出结果如下：\n",[254,19874,19875],{"class":256,"line":16924},[254,19876,19849],{"class":323},[254,19878,19879],{"class":256,"line":16937},[254,19880,19881],{"class":323},"\u002F\u002F 地址\n",[254,19883,19884],{"class":256,"line":16942},[254,19885,19886],{"class":323},"\u002F\u002F Person的拷贝构造函数调用\n",[254,19888,19889],{"class":256,"line":16956},[254,19890,19863],{"class":323},[254,19892,19893],{"class":256,"line":16961},[254,19894,19881],{"class":323},[254,19896,19897],{"class":256,"line":16967},[254,19898,19899],{"class":323},"\u002F\u002F (这两次输出的地址也是不同的) \n",[254,19901,19902],{"class":256,"line":16972},[254,19903,19904],{"class":323},"\u002F\u002F Person的析构函数调用     \n",[254,19906,19907,19909,19911],{"class":256,"line":16986},[254,19908,4230],{"class":260},[254,19910,4233],{"class":313},[254,19912,1430],{"class":264},[254,19914,19915],{"class":256,"line":16991},[254,19916,1705],{"class":264},[14,19918,19919],{},"简化版理解",[245,19921,19923],{"className":247,"code":19922,"language":249,"meta":174,"style":174},"class Person {\npublic:\n    Person() {\n        cout \u003C\u003C \"无参构造函数!\" \u003C\u003C endl;\n        mAge = 0;\n    }\n    Person(int age) {\n        cout \u003C\u003C \"有参构造函数!\" \u003C\u003C endl;\n        mAge = age;\n    }\n    Person(const Person& p) {\n        cout \u003C\u003C \"拷贝构造函数!\" \u003C\u003C endl;\n        mAge = p.mAge;\n    }\n    \u002F\u002F析构函数在释放内存之前调用\n    ~Person() {\n        cout \u003C\u003C \"析构函数!\" \u003C\u003C endl;\n    }\npublic:\n    int mAge;\n};\n\n\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\nvoid test01() {\n\n    Person man(100); \u002F\u002Fp对象已经创建完毕\n    Person newman(man); \u002F\u002F调用拷贝构造函数\n    Person newman2 = man; \u002F\u002F拷贝构造\n\n    \u002F\u002FPerson newman3;\n    \u002F\u002Fnewman3 = man; \u002F\u002F不是调用拷贝构造函数，赋值操作\n}\n\n\u002F\u002F2. 值传递的方式给函数参数传值\n\u002F\u002F相当于Person p1 = p;\nvoid doWork(Person p1) {}\nvoid test02() {\n    Person p; \u002F\u002F无参构造函数\n    doWork(p);\n}\n\n\u002F\u002F3. 以值方式返回局部对象\nPerson doWork2()\n{\n    Person p1;\n    cout \u003C\u003C (int *)&p1 \u003C\u003C endl;\n    return p1;\n}\n\nvoid test03()\n{\n    Person p = doWork2();\n    cout \u003C\u003C (int *)&p \u003C\u003C endl;\n}\n\n\nint main() {\n\n    \u002F\u002Ftest01();\n    \u002F\u002Ftest02();\n    test03();\n\n    system(\"pause\");\n\n    return 0;\n}\n",[251,19924,19925,19933,19937,19943,19956,19967,19971,19983,19996,20004,20008,20024,20037,20046,20050,20055,20061,20074,20078,20082,20089,20093,20097,20102,20110,20114,20130,20143,20156,20160,20165,20173,20177,20181,20186,20191,20207,20215,20222,20228,20232,20236,20241,20249,20253,20257,20280,20287,20291,20295,20303,20307,20317,20339,20343,20347,20351,20359,20363,20368,20373,20379,20383,20393,20397,20405],{"__ignoreMap":174},[254,19926,19927,19929,19931],{"class":256,"line":257},[254,19928,14835],{"class":260},[254,19930,15710],{"class":2103},[254,19932,15713],{"class":264},[254,19934,19935],{"class":256,"line":175},[254,19936,14857],{"class":260},[254,19938,19939,19941],{"class":256,"line":1319},[254,19940,18660],{"class":2103},[254,19942,10994],{"class":264},[254,19944,19945,19947,19949,19952,19954],{"class":256,"line":1334},[254,19946,9810],{"class":264},[254,19948,1308],{"class":260},[254,19950,19951],{"class":369}," \"无参构造函数!\"",[254,19953,1584],{"class":260},[254,19955,8981],{"class":264},[254,19957,19958,19961,19963,19965],{"class":256,"line":1340},[254,19959,19960],{"class":264},"        mAge ",[254,19962,310],{"class":260},[254,19964,4233],{"class":313},[254,19966,1430],{"class":264},[254,19968,19969],{"class":256,"line":1354},[254,19970,2327],{"class":264},[254,19972,19973,19975,19977,19979,19981],{"class":256,"line":1360},[254,19974,18660],{"class":2103},[254,19976,265],{"class":264},[254,19978,268],{"class":260},[254,19980,15830],{"class":5357},[254,19982,12583],{"class":264},[254,19984,19985,19987,19989,19992,19994],{"class":256,"line":1451},[254,19986,9810],{"class":264},[254,19988,1308],{"class":260},[254,19990,19991],{"class":369}," \"有参构造函数!\"",[254,19993,1584],{"class":260},[254,19995,8981],{"class":264},[254,19997,19998,20000,20002],{"class":256,"line":1457},[254,19999,19960],{"class":264},[254,20001,310],{"class":260},[254,20003,7938],{"class":264},[254,20005,20006],{"class":256,"line":1469},[254,20007,2327],{"class":264},[254,20009,20010,20012,20014,20016,20018,20020,20022],{"class":256,"line":1752},[254,20011,18660],{"class":2103},[254,20013,265],{"class":264},[254,20015,6933],{"class":260},[254,20017,15710],{"class":2103},[254,20019,617],{"class":260},[254,20021,6966],{"class":5357},[254,20023,12583],{"class":264},[254,20025,20026,20028,20030,20033,20035],{"class":256,"line":1757},[254,20027,9810],{"class":264},[254,20029,1308],{"class":260},[254,20031,20032],{"class":369}," \"拷贝构造函数!\"",[254,20034,1584],{"class":260},[254,20036,8981],{"class":264},[254,20038,20039,20041,20043],{"class":256,"line":1763},[254,20040,19960],{"class":264},[254,20042,310],{"class":260},[254,20044,20045],{"class":264}," p.mAge;\n",[254,20047,20048],{"class":256,"line":1768},[254,20049,2327],{"class":264},[254,20051,20052],{"class":256,"line":1782},[254,20053,20054],{"class":323},"    \u002F\u002F析构函数在释放内存之前调用\n",[254,20056,20057,20059],{"class":256,"line":1787},[254,20058,18693],{"class":2103},[254,20060,10994],{"class":264},[254,20062,20063,20065,20067,20070,20072],{"class":256,"line":1793},[254,20064,9810],{"class":264},[254,20066,1308],{"class":260},[254,20068,20069],{"class":369}," \"析构函数!\"",[254,20071,1584],{"class":260},[254,20073,8981],{"class":264},[254,20075,20076],{"class":256,"line":1814},[254,20077,2327],{"class":264},[254,20079,20080],{"class":256,"line":1819},[254,20081,14857],{"class":260},[254,20083,20084,20086],{"class":256,"line":1833},[254,20085,2125],{"class":260},[254,20087,20088],{"class":264}," mAge;\n",[254,20090,20091],{"class":256,"line":1838},[254,20092,4135],{"class":264},[254,20094,20095],{"class":256,"line":1867},[254,20096,2540],{"emptyLinePlaceholder":184},[254,20098,20099],{"class":256,"line":1872},[254,20100,20101],{"class":323},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[254,20103,20104,20106,20108],{"class":256,"line":1889},[254,20105,5505],{"class":260},[254,20107,5729],{"class":2103},[254,20109,10994],{"class":264},[254,20111,20112],{"class":256,"line":1894},[254,20113,2540],{"emptyLinePlaceholder":184},[254,20115,20116,20118,20121,20123,20125,20127],{"class":256,"line":1899},[254,20117,19572],{"class":264},[254,20119,20120],{"class":2103},"man",[254,20122,265],{"class":264},[254,20124,575],{"class":313},[254,20126,6107],{"class":264},[254,20128,20129],{"class":323}," \u002F\u002Fp对象已经创建完毕\n",[254,20131,20132,20134,20137,20140],{"class":256,"line":1904},[254,20133,19572],{"class":264},[254,20135,20136],{"class":2103},"newman",[254,20138,20139],{"class":264},"(man);",[254,20141,20142],{"class":323}," \u002F\u002F调用拷贝构造函数\n",[254,20144,20145,20148,20150,20153],{"class":256,"line":1918},[254,20146,20147],{"class":264},"    Person newman2 ",[254,20149,310],{"class":260},[254,20151,20152],{"class":264}," man;",[254,20154,20155],{"class":323}," \u002F\u002F拷贝构造\n",[254,20157,20158],{"class":256,"line":1923},[254,20159,2540],{"emptyLinePlaceholder":184},[254,20161,20162],{"class":256,"line":2717},[254,20163,20164],{"class":323},"    \u002F\u002FPerson newman3;\n",[254,20166,20167,20170],{"class":256,"line":2731},[254,20168,20169],{"class":323},"    \u002F\u002Fnewman3 = man;",[254,20171,20172],{"class":323}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[254,20174,20175],{"class":256,"line":2739},[254,20176,1705],{"class":264},[254,20178,20179],{"class":256,"line":2744},[254,20180,2540],{"emptyLinePlaceholder":184},[254,20182,20183],{"class":256,"line":2750},[254,20184,20185],{"class":323},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[254,20187,20188],{"class":256,"line":2756},[254,20189,20190],{"class":323},"\u002F\u002F相当于Person p1 = p;\n",[254,20192,20193,20195,20197,20199,20201,20204],{"class":256,"line":2761},[254,20194,5505],{"class":260},[254,20196,19627],{"class":2103},[254,20198,265],{"class":264},[254,20200,19187],{"class":2103},[254,20202,20203],{"class":5357}," p1",[254,20205,20206],{"class":264},") {}\n",[254,20208,20209,20211,20213],{"class":256,"line":8089},[254,20210,5505],{"class":260},[254,20212,5798],{"class":2103},[254,20214,10994],{"class":264},[254,20216,20217,20219],{"class":256,"line":8113},[254,20218,18745],{"class":264},[254,20220,20221],{"class":323}," \u002F\u002F无参构造函数\n",[254,20223,20224,20226],{"class":256,"line":8118},[254,20225,19677],{"class":2103},[254,20227,19680],{"class":264},[254,20229,20230],{"class":256,"line":8124},[254,20231,1705],{"class":264},[254,20233,20234],{"class":256,"line":8151},[254,20235,2540],{"emptyLinePlaceholder":184},[254,20237,20238],{"class":256,"line":8156},[254,20239,20240],{"class":323},"\u002F\u002F3. 以值方式返回局部对象\n",[254,20242,20243,20245,20247],{"class":256,"line":8162},[254,20244,19187],{"class":2103},[254,20246,19696],{"class":2103},[254,20248,2116],{"class":264},[254,20250,20251],{"class":256,"line":8174},[254,20252,1686],{"class":264},[254,20254,20255],{"class":256,"line":8186},[254,20256,19177],{"class":264},[254,20258,20259,20261,20263,20265,20267,20269,20271,20273,20276,20278],{"class":256,"line":8198},[254,20260,6670],{"class":264},[254,20262,1308],{"class":260},[254,20264,1798],{"class":264},[254,20266,268],{"class":260},[254,20268,6659],{"class":260},[254,20270,693],{"class":264},[254,20272,617],{"class":260},[254,20274,20275],{"class":264},"p1 ",[254,20277,1308],{"class":260},[254,20279,8981],{"class":264},[254,20281,20282,20284],{"class":256,"line":9857},[254,20283,4230],{"class":260},[254,20285,20286],{"class":264}," p1;\n",[254,20288,20289],{"class":256,"line":9882},[254,20290,1705],{"class":264},[254,20292,20293],{"class":256,"line":9905},[254,20294,2540],{"emptyLinePlaceholder":184},[254,20296,20297,20299,20301],{"class":256,"line":9929},[254,20298,5505],{"class":260},[254,20300,5870],{"class":2103},[254,20302,2116],{"class":264},[254,20304,20305],{"class":256,"line":9934},[254,20306,1686],{"class":264},[254,20308,20309,20311,20313,20315],{"class":256,"line":9939},[254,20310,19762],{"class":264},[254,20312,310],{"class":260},[254,20314,19696],{"class":2103},[254,20316,5777],{"class":264},[254,20318,20319,20321,20323,20325,20327,20329,20331,20333,20335,20337],{"class":256,"line":9944},[254,20320,6670],{"class":264},[254,20322,1308],{"class":260},[254,20324,1798],{"class":264},[254,20326,268],{"class":260},[254,20328,6659],{"class":260},[254,20330,693],{"class":264},[254,20332,617],{"class":260},[254,20334,11589],{"class":264},[254,20336,1308],{"class":260},[254,20338,8981],{"class":264},[254,20340,20341],{"class":256,"line":9953},[254,20342,1705],{"class":264},[254,20344,20345],{"class":256,"line":9958},[254,20346,2540],{"emptyLinePlaceholder":184},[254,20348,20349],{"class":256,"line":9964},[254,20350,2540],{"emptyLinePlaceholder":184},[254,20352,20353,20355,20357],{"class":256,"line":9985},[254,20354,268],{"class":260},[254,20356,2113],{"class":2103},[254,20358,10994],{"class":264},[254,20360,20361],{"class":256,"line":9991},[254,20362,2540],{"emptyLinePlaceholder":184},[254,20364,20365],{"class":256,"line":10005},[254,20366,20367],{"class":323},"    \u002F\u002Ftest01();\n",[254,20369,20370],{"class":256,"line":10011},[254,20371,20372],{"class":323},"    \u002F\u002Ftest02();\n",[254,20374,20375,20377],{"class":256,"line":10038},[254,20376,19832],{"class":2103},[254,20378,5777],{"class":264},[254,20380,20381],{"class":256,"line":10047},[254,20382,2540],{"emptyLinePlaceholder":184},[254,20384,20385,20387,20389,20391],{"class":256,"line":10053},[254,20386,2443],{"class":2103},[254,20388,265],{"class":264},[254,20390,2448],{"class":369},[254,20392,2859],{"class":264},[254,20394,20395],{"class":256,"line":10061},[254,20396,2540],{"emptyLinePlaceholder":184},[254,20398,20399,20401,20403],{"class":256,"line":10066},[254,20400,4230],{"class":260},[254,20402,4233],{"class":313},[254,20404,1430],{"class":264},[254,20406,20407],{"class":256,"line":16745},[254,20408,1705],{"class":264},[225,20410,20412],{"id":20411},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[14,20414,20415],{},"默认情况下，c++编译器至少给一个类添加3个函数",[14,20417,20418],{},"1．默认构造函数(无参，函数体为空)",[14,20420,20421],{},"2．默认析构函数(无参，函数体为空)",[14,20423,20424],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[14,20426,20427],{},"构造函数调用规则如下：",[1271,20429,20430,20433],{},[24,20431,20432],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[24,20434,20435],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[245,20437,20439],{"className":247,"code":20438,"language":249,"meta":174,"style":174},"class Person {\npublic:\n    \u002F\u002F无参（默认）构造函数\n    Person() {\n        cout \u003C\u003C \"无参构造函数!\" \u003C\u003C endl;\n    }\n    \u002F\u002F有参构造函数\n    Person(int a) {\n        age = a;\n        cout \u003C\u003C \"有参构造函数!\" \u003C\u003C endl;\n    }\n    \u002F\u002F拷贝构造函数\n    Person(const Person& p) {\n        age = p.age;\n        cout \u003C\u003C \"拷贝构造函数!\" \u003C\u003C endl;\n    }\n    \u002F\u002F析构函数\n    ~Person() {\n        cout \u003C\u003C \"析构函数!\" \u003C\u003C endl;\n    }\npublic:\n    int age;\n};\n\nvoid test01()\n{\n    Person p1(18);\n    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n    Person p2(p1);\n\n    cout \u003C\u003C \"p2的年龄为： \" \u003C\u003C p2.age \u003C\u003C endl;\n}\n\nvoid test02()\n{\n    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n    Person p1; \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n    Person p2(10); \u002F\u002F用户提供的有参\n    Person p3(p2); \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n\n    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n    Person p4; \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n    Person p5(10); \u002F\u002F此时如果用户自己没有提供有参，会出错\n    Person p6(p5); \u002F\u002F用户自己提供拷贝构造\n}\n\nint main() {\n\n    test01();\n\n    system(\"pause\");\n\n    return 0;\n}\n",[251,20440,20441,20449,20453,20458,20464,20476,20480,20485,20497,20506,20518,20522,20526,20542,20551,20563,20567,20571,20577,20589,20593,20597,20603,20607,20611,20619,20623,20635,20640,20648,20652,20670,20674,20678,20686,20690,20695,20703,20718,20731,20735,20740,20747,20763,20776,20780,20784,20792,20796,20802,20806,20816,20820,20828],{"__ignoreMap":174},[254,20442,20443,20445,20447],{"class":256,"line":257},[254,20444,14835],{"class":260},[254,20446,15710],{"class":2103},[254,20448,15713],{"class":264},[254,20450,20451],{"class":256,"line":175},[254,20452,14857],{"class":260},[254,20454,20455],{"class":256,"line":1319},[254,20456,20457],{"class":323},"    \u002F\u002F无参（默认）构造函数\n",[254,20459,20460,20462],{"class":256,"line":1334},[254,20461,18660],{"class":2103},[254,20463,10994],{"class":264},[254,20465,20466,20468,20470,20472,20474],{"class":256,"line":1340},[254,20467,9810],{"class":264},[254,20469,1308],{"class":260},[254,20471,19951],{"class":369},[254,20473,1584],{"class":260},[254,20475,8981],{"class":264},[254,20477,20478],{"class":256,"line":1354},[254,20479,2327],{"class":264},[254,20481,20482],{"class":256,"line":1360},[254,20483,20484],{"class":323},"    \u002F\u002F有参构造函数\n",[254,20486,20487,20489,20491,20493,20495],{"class":256,"line":1451},[254,20488,18660],{"class":2103},[254,20490,265],{"class":264},[254,20492,268],{"class":260},[254,20494,1538],{"class":5357},[254,20496,12583],{"class":264},[254,20498,20499,20502,20504],{"class":256,"line":1457},[254,20500,20501],{"class":264},"        age ",[254,20503,310],{"class":260},[254,20505,1572],{"class":264},[254,20507,20508,20510,20512,20514,20516],{"class":256,"line":1469},[254,20509,9810],{"class":264},[254,20511,1308],{"class":260},[254,20513,19991],{"class":369},[254,20515,1584],{"class":260},[254,20517,8981],{"class":264},[254,20519,20520],{"class":256,"line":1752},[254,20521,2327],{"class":264},[254,20523,20524],{"class":256,"line":1757},[254,20525,19015],{"class":323},[254,20527,20528,20530,20532,20534,20536,20538,20540],{"class":256,"line":1763},[254,20529,18660],{"class":2103},[254,20531,265],{"class":264},[254,20533,6933],{"class":260},[254,20535,15710],{"class":2103},[254,20537,617],{"class":260},[254,20539,6966],{"class":5357},[254,20541,12583],{"class":264},[254,20543,20544,20546,20548],{"class":256,"line":1768},[254,20545,20501],{"class":264},[254,20547,310],{"class":260},[254,20549,20550],{"class":264}," p.age;\n",[254,20552,20553,20555,20557,20559,20561],{"class":256,"line":1782},[254,20554,9810],{"class":264},[254,20556,1308],{"class":260},[254,20558,20032],{"class":369},[254,20560,1584],{"class":260},[254,20562,8981],{"class":264},[254,20564,20565],{"class":256,"line":1787},[254,20566,2327],{"class":264},[254,20568,20569],{"class":256,"line":1793},[254,20570,18688],{"class":323},[254,20572,20573,20575],{"class":256,"line":1814},[254,20574,18693],{"class":2103},[254,20576,10994],{"class":264},[254,20578,20579,20581,20583,20585,20587],{"class":256,"line":1819},[254,20580,9810],{"class":264},[254,20582,1308],{"class":260},[254,20584,20069],{"class":369},[254,20586,1584],{"class":260},[254,20588,8981],{"class":264},[254,20590,20591],{"class":256,"line":1833},[254,20592,2327],{"class":264},[254,20594,20595],{"class":256,"line":1838},[254,20596,14857],{"class":260},[254,20598,20599,20601],{"class":256,"line":1867},[254,20600,2125],{"class":260},[254,20602,7938],{"class":264},[254,20604,20605],{"class":256,"line":1872},[254,20606,4135],{"class":264},[254,20608,20609],{"class":256,"line":1889},[254,20610,2540],{"emptyLinePlaceholder":184},[254,20612,20613,20615,20617],{"class":256,"line":1894},[254,20614,5505],{"class":260},[254,20616,5729],{"class":2103},[254,20618,2116],{"class":264},[254,20620,20621],{"class":256,"line":1899},[254,20622,1686],{"class":264},[254,20624,20625,20627,20629,20631,20633],{"class":256,"line":1904},[254,20626,19572],{"class":264},[254,20628,7271],{"class":2103},[254,20630,265],{"class":264},[254,20632,914],{"class":313},[254,20634,2859],{"class":264},[254,20636,20637],{"class":256,"line":1918},[254,20638,20639],{"class":323},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[254,20641,20642,20644,20646],{"class":256,"line":1923},[254,20643,19572],{"class":264},[254,20645,7174],{"class":2103},[254,20647,17656],{"class":264},[254,20649,20650],{"class":256,"line":2717},[254,20651,2540],{"emptyLinePlaceholder":184},[254,20653,20654,20656,20658,20661,20663,20666,20668],{"class":256,"line":2731},[254,20655,6670],{"class":264},[254,20657,1308],{"class":260},[254,20659,20660],{"class":369}," \"p2的年龄为： \"",[254,20662,1584],{"class":260},[254,20664,20665],{"class":264}," p2.age ",[254,20667,1308],{"class":260},[254,20669,8981],{"class":264},[254,20671,20672],{"class":256,"line":2739},[254,20673,1705],{"class":264},[254,20675,20676],{"class":256,"line":2744},[254,20677,2540],{"emptyLinePlaceholder":184},[254,20679,20680,20682,20684],{"class":256,"line":2750},[254,20681,5505],{"class":260},[254,20683,5798],{"class":2103},[254,20685,2116],{"class":264},[254,20687,20688],{"class":256,"line":2756},[254,20689,1686],{"class":264},[254,20691,20692],{"class":256,"line":2761},[254,20693,20694],{"class":323},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[254,20696,20697,20700],{"class":256,"line":8089},[254,20698,20699],{"class":264},"    Person p1;",[254,20701,20702],{"class":323}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[254,20704,20705,20707,20709,20711,20713,20715],{"class":256,"line":8113},[254,20706,19572],{"class":264},[254,20708,7174],{"class":2103},[254,20710,265],{"class":264},[254,20712,710],{"class":313},[254,20714,6107],{"class":264},[254,20716,20717],{"class":323}," \u002F\u002F用户提供的有参\n",[254,20719,20720,20722,20725,20728],{"class":256,"line":8118},[254,20721,19572],{"class":264},[254,20723,20724],{"class":2103},"p3",[254,20726,20727],{"class":264},"(p2);",[254,20729,20730],{"class":323}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[254,20732,20733],{"class":256,"line":8124},[254,20734,2540],{"emptyLinePlaceholder":184},[254,20736,20737],{"class":256,"line":8151},[254,20738,20739],{"class":323},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[254,20741,20742,20745],{"class":256,"line":8156},[254,20743,20744],{"class":264},"    Person p4;",[254,20746,20702],{"class":323},[254,20748,20749,20751,20754,20756,20758,20760],{"class":256,"line":8162},[254,20750,19572],{"class":264},[254,20752,20753],{"class":2103},"p5",[254,20755,265],{"class":264},[254,20757,710],{"class":313},[254,20759,6107],{"class":264},[254,20761,20762],{"class":323}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[254,20764,20765,20767,20770,20773],{"class":256,"line":8174},[254,20766,19572],{"class":264},[254,20768,20769],{"class":2103},"p6",[254,20771,20772],{"class":264},"(p5);",[254,20774,20775],{"class":323}," \u002F\u002F用户自己提供拷贝构造\n",[254,20777,20778],{"class":256,"line":8186},[254,20779,1705],{"class":264},[254,20781,20782],{"class":256,"line":8198},[254,20783,2540],{"emptyLinePlaceholder":184},[254,20785,20786,20788,20790],{"class":256,"line":9857},[254,20787,268],{"class":260},[254,20789,2113],{"class":2103},[254,20791,10994],{"class":264},[254,20793,20794],{"class":256,"line":9882},[254,20795,2540],{"emptyLinePlaceholder":184},[254,20797,20798,20800],{"class":256,"line":9905},[254,20799,5774],{"class":2103},[254,20801,5777],{"class":264},[254,20803,20804],{"class":256,"line":9929},[254,20805,2540],{"emptyLinePlaceholder":184},[254,20807,20808,20810,20812,20814],{"class":256,"line":9934},[254,20809,2443],{"class":2103},[254,20811,265],{"class":264},[254,20813,2448],{"class":369},[254,20815,2859],{"class":264},[254,20817,20818],{"class":256,"line":9939},[254,20819,2540],{"emptyLinePlaceholder":184},[254,20821,20822,20824,20826],{"class":256,"line":9944},[254,20823,4230],{"class":260},[254,20825,4233],{"class":313},[254,20827,1430],{"class":264},[254,20829,20830],{"class":256,"line":9953},[254,20831,1705],{"class":264},[225,20833,20835],{"id":20834},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[14,20837,20838],{},"浅拷贝：简单的赋值拷贝操作",[14,20840,20841],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[245,20843,20845],{"className":247,"code":20844,"language":249,"meta":174,"style":174},"#include\u003Ciostream>\nusing namespace std;\nclass Person\n{\npublic:\n    \u002F\u002F默认构造函数\n    Person()\n    {\n        cout\u003C\u003C\"默认构造函数\"\u003C\u003Cendl;\n    }\n    \u002F\u002F有参构造函数\n    ~Person(int age,int height)\n    {\n        m_Age=age;\n        m_Height=new int(height);\u002F\u002F放到堆区\n        cout\u003C\u003C\"有参构造函数\"\u003C\u003Cendl;\n    }\n    \u002F\u002F深拷贝解决上述问题\n    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n    Person(const Person &p)\n    {\n        cout\u003C\u003C\"拷贝构造函数\"\u003C\u003Cendl;\n        \u002F\u002F编译器默认的写如下注释部分\n        \u002F\u002Fm_Age=p.m_Age;\n        \u002F\u002Fm_Height=p.m_Height;\n        m_Age=p.m_Age;\n        \u002F\u002F深拷贝操作\n        m_Height=new int(*p.m_Height);\n    }\n\n    \u002F\u002F析构函数\n    ~Person()\n    {\n        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n        if(m_Height != NULL)\n        {\n            delete m_Height; \u002F\u002F释放堆区内存\n            m_Height=NULL; \u002F\u002F防止野指针\n        }\n        cout\u003C\u003C\"Person的析构函数调用\"\n    }\n    int m_Age;\n    int *m_Height; \u002F\u002F定义一个指针，指向身高\n};\nvoid test01()\n{\n    Person p1(18,160);\n    cout\u003C\u003C\"p1的年龄为:\"\u003C\u003Cp1.m_Age\u003C\u003C\"身高为：\"\u003C\u003C*p1.m_Height\u003C\u003Cendl;  \u002F\u002F18\n    Person p2(p1);\n    cout\u003C\u003C\"p2的年龄为：\"\u003C\u003Cp2.m_Age\u003C\u003C\"身高为：\"\u003C\u003C*p2.m_Height\u003C\u003Cendl;  \u002F\u002F18\n    \n}\nint main()\n{\n    test01();\n}\n",[251,20846,20847,20853,20863,20869,20873,20877,20882,20888,20892,20905,20909,20913,20920,20924,20934,20949,20962,20966,20971,20976,20992,20996,21009,21014,21019,21024,21033,21038,21053,21057,21061,21065,21071,21075,21080,21095,21099,21110,21124,21128,21137,21141,21147,21159,21163,21171,21175,21192,21223,21231,21259,21263,21267,21275,21279,21285],{"__ignoreMap":174},[254,20848,20849,20851],{"class":256,"line":257},[254,20850,2089],{"class":260},[254,20852,2092],{"class":369},[254,20854,20855,20857,20859,20861],{"class":256,"line":175},[254,20856,2097],{"class":260},[254,20858,2100],{"class":260},[254,20860,2104],{"class":2103},[254,20862,1430],{"class":264},[254,20864,20865,20867],{"class":256,"line":1319},[254,20866,14835],{"class":260},[254,20868,15312],{"class":2103},[254,20870,20871],{"class":256,"line":1334},[254,20872,1686],{"class":264},[254,20874,20875],{"class":256,"line":1340},[254,20876,14857],{"class":260},[254,20878,20879],{"class":256,"line":1354},[254,20880,20881],{"class":323},"    \u002F\u002F默认构造函数\n",[254,20883,20884,20886],{"class":256,"line":1360},[254,20885,18660],{"class":2103},[254,20887,2116],{"class":264},[254,20889,20890],{"class":256,"line":1451},[254,20891,2170],{"class":264},[254,20893,20894,20896,20898,20901,20903],{"class":256,"line":1457},[254,20895,3591],{"class":264},[254,20897,1308],{"class":260},[254,20899,20900],{"class":369},"\"默认构造函数\"",[254,20902,1308],{"class":260},[254,20904,1331],{"class":264},[254,20906,20907],{"class":256,"line":1469},[254,20908,2327],{"class":264},[254,20910,20911],{"class":256,"line":1752},[254,20912,20484],{"class":323},[254,20914,20915,20917],{"class":256,"line":1757},[254,20916,18693],{"class":2103},[254,20918,20919],{"class":264},"(int age,int height)\n",[254,20921,20922],{"class":256,"line":1763},[254,20923,2170],{"class":264},[254,20925,20926,20929,20931],{"class":256,"line":1768},[254,20927,20928],{"class":264},"        m_Age",[254,20930,310],{"class":260},[254,20932,20933],{"class":264},"age;\n",[254,20935,20936,20939,20941,20943,20946],{"class":256,"line":1782},[254,20937,20938],{"class":264},"        m_Height",[254,20940,11858],{"class":260},[254,20942,2522],{"class":260},[254,20944,20945],{"class":264},"(height);",[254,20947,20948],{"class":323},"\u002F\u002F放到堆区\n",[254,20950,20951,20953,20955,20958,20960],{"class":256,"line":1787},[254,20952,3591],{"class":264},[254,20954,1308],{"class":260},[254,20956,20957],{"class":369},"\"有参构造函数\"",[254,20959,1308],{"class":260},[254,20961,1331],{"class":264},[254,20963,20964],{"class":256,"line":1793},[254,20965,2327],{"class":264},[254,20967,20968],{"class":256,"line":1814},[254,20969,20970],{"class":323},"    \u002F\u002F深拷贝解决上述问题\n",[254,20972,20973],{"class":256,"line":1819},[254,20974,20975],{"class":323},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[254,20977,20978,20980,20982,20984,20986,20988,20990],{"class":256,"line":1833},[254,20979,18660],{"class":2103},[254,20981,265],{"class":264},[254,20983,6933],{"class":260},[254,20985,15710],{"class":2103},[254,20987,10725],{"class":260},[254,20989,14],{"class":5357},[254,20991,271],{"class":264},[254,20993,20994],{"class":256,"line":1838},[254,20995,2170],{"class":264},[254,20997,20998,21000,21002,21005,21007],{"class":256,"line":1867},[254,20999,3591],{"class":264},[254,21001,1308],{"class":260},[254,21003,21004],{"class":369},"\"拷贝构造函数\"",[254,21006,1308],{"class":260},[254,21008,1331],{"class":264},[254,21010,21011],{"class":256,"line":1872},[254,21012,21013],{"class":323},"        \u002F\u002F编译器默认的写如下注释部分\n",[254,21015,21016],{"class":256,"line":1889},[254,21017,21018],{"class":323},"        \u002F\u002Fm_Age=p.m_Age;\n",[254,21020,21021],{"class":256,"line":1894},[254,21022,21023],{"class":323},"        \u002F\u002Fm_Height=p.m_Height;\n",[254,21025,21026,21028,21030],{"class":256,"line":1899},[254,21027,20928],{"class":264},[254,21029,310],{"class":260},[254,21031,21032],{"class":264},"p.m_Age;\n",[254,21034,21035],{"class":256,"line":1904},[254,21036,21037],{"class":323},"        \u002F\u002F深拷贝操作\n",[254,21039,21040,21042,21044,21046,21048,21050],{"class":256,"line":1918},[254,21041,20938],{"class":264},[254,21043,11858],{"class":260},[254,21045,2522],{"class":260},[254,21047,265],{"class":264},[254,21049,719],{"class":260},[254,21051,21052],{"class":264},"p.m_Height);\n",[254,21054,21055],{"class":256,"line":1923},[254,21056,2327],{"class":264},[254,21058,21059],{"class":256,"line":2717},[254,21060,2540],{"emptyLinePlaceholder":184},[254,21062,21063],{"class":256,"line":2731},[254,21064,18688],{"class":323},[254,21066,21067,21069],{"class":256,"line":2739},[254,21068,18693],{"class":2103},[254,21070,2116],{"class":264},[254,21072,21073],{"class":256,"line":2744},[254,21074,2170],{"class":264},[254,21076,21077],{"class":256,"line":2750},[254,21078,21079],{"class":323},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[254,21081,21082,21084,21087,21090,21093],{"class":256,"line":2756},[254,21083,2637],{"class":260},[254,21085,21086],{"class":264},"(m_Height ",[254,21088,21089],{"class":260},"!=",[254,21091,21092],{"class":313}," NULL",[254,21094,271],{"class":264},[254,21096,21097],{"class":256,"line":2761},[254,21098,2650],{"class":264},[254,21100,21101,21104,21107],{"class":256,"line":8089},[254,21102,21103],{"class":260},"            delete",[254,21105,21106],{"class":264}," m_Height;",[254,21108,21109],{"class":323}," \u002F\u002F释放堆区内存\n",[254,21111,21112,21115,21117,21119,21121],{"class":256,"line":8113},[254,21113,21114],{"class":264},"            m_Height",[254,21116,310],{"class":260},[254,21118,2532],{"class":313},[254,21120,320],{"class":264},[254,21122,21123],{"class":323}," \u002F\u002F防止野指针\n",[254,21125,21126],{"class":256,"line":8118},[254,21127,2669],{"class":264},[254,21129,21130,21132,21134],{"class":256,"line":8124},[254,21131,3591],{"class":264},[254,21133,1308],{"class":260},[254,21135,21136],{"class":369},"\"Person的析构函数调用\"\n",[254,21138,21139],{"class":256,"line":8151},[254,21140,2327],{"class":264},[254,21142,21143,21145],{"class":256,"line":8156},[254,21144,2125],{"class":260},[254,21146,15807],{"class":264},[254,21148,21149,21151,21153,21156],{"class":256,"line":8162},[254,21150,2125],{"class":260},[254,21152,6659],{"class":260},[254,21154,21155],{"class":264},"m_Height;",[254,21157,21158],{"class":323}," \u002F\u002F定义一个指针，指向身高\n",[254,21160,21161],{"class":256,"line":8174},[254,21162,4135],{"class":264},[254,21164,21165,21167,21169],{"class":256,"line":8186},[254,21166,5505],{"class":260},[254,21168,5729],{"class":2103},[254,21170,2116],{"class":264},[254,21172,21173],{"class":256,"line":8198},[254,21174,1686],{"class":264},[254,21176,21177,21179,21181,21183,21185,21187,21190],{"class":256,"line":9857},[254,21178,19572],{"class":264},[254,21180,7271],{"class":2103},[254,21182,265],{"class":264},[254,21184,914],{"class":313},[254,21186,642],{"class":264},[254,21188,21189],{"class":313},"160",[254,21191,2859],{"class":264},[254,21193,21194,21196,21198,21201,21203,21206,21208,21211,21213,21216,21218,21220],{"class":256,"line":9882},[254,21195,1691],{"class":264},[254,21197,1308],{"class":260},[254,21199,21200],{"class":369},"\"p1的年龄为:\"",[254,21202,1308],{"class":260},[254,21204,21205],{"class":264},"p1.m_Age",[254,21207,1308],{"class":260},[254,21209,21210],{"class":369},"\"身高为：\"",[254,21212,6560],{"class":260},[254,21214,21215],{"class":264},"p1.m_Height",[254,21217,1308],{"class":260},[254,21219,1378],{"class":264},[254,21221,21222],{"class":323},"  \u002F\u002F18\n",[254,21224,21225,21227,21229],{"class":256,"line":9905},[254,21226,19572],{"class":264},[254,21228,7174],{"class":2103},[254,21230,17656],{"class":264},[254,21232,21233,21235,21237,21240,21242,21244,21246,21248,21250,21253,21255,21257],{"class":256,"line":9929},[254,21234,1691],{"class":264},[254,21236,1308],{"class":260},[254,21238,21239],{"class":369},"\"p2的年龄为：\"",[254,21241,1308],{"class":260},[254,21243,19602],{"class":264},[254,21245,1308],{"class":260},[254,21247,21210],{"class":369},[254,21249,6560],{"class":260},[254,21251,21252],{"class":264},"p2.m_Height",[254,21254,1308],{"class":260},[254,21256,1378],{"class":264},[254,21258,21222],{"class":323},[254,21260,21261],{"class":256,"line":9934},[254,21262,13351],{"class":264},[254,21264,21265],{"class":256,"line":9939},[254,21266,1705],{"class":264},[254,21268,21269,21271,21273],{"class":256,"line":9944},[254,21270,268],{"class":260},[254,21272,2113],{"class":2103},[254,21274,2116],{"class":264},[254,21276,21277],{"class":256,"line":9953},[254,21278,1686],{"class":264},[254,21280,21281,21283],{"class":256,"line":9958},[254,21282,5774],{"class":2103},[254,21284,5777],{"class":264},[254,21286,21287],{"class":256,"line":9964},[254,21288,1705],{"class":264},[14,21290,21291],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[14,21293,21294],{},"浅拷贝带来的问题是堆区的内存重复释放",[14,21296,21297],{},[1602,21298],{"alt":174,"src":21299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[14,21301,21302],{},"浅拷贝问题要使用深拷贝来解决",[14,21304,21305],{},[1602,21306],{"alt":174,"src":21307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[14,21309,21310],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[225,21312,21314],{"id":21313},"_826初始化列表","8.2.6初始化列表",[14,21316,21317],{},"作用：初始化属性",[14,21319,5322],{},[245,21321,21324],{"className":21322,"code":21323,"language":5328},[5326],"构造函数():属性1(值1),属性2(值2).....{}\n",[251,21325,21323],{"__ignoreMap":174},[14,21327,21328],{},"例子",[245,21330,21332],{"className":247,"code":21331,"language":249,"meta":174,"style":174},"#include\u003Ciostream>\nusing namespace std;\nclass Person\n{\n    public:\n\n    \u002F\u002F\u002F\u002F传统方式初始化\n    \u002F\u002FPerson(int a, int b, int c) {\n    \u002F\u002F  m_A = a;\n    \u002F\u002F  m_B = b;\n    \u002F\u002F  m_C = c;\n    \u002F\u002F}\n\n    \u002F\u002F初始化列表方式初始化\n    \u002F\u002F使用有参构造函数\n    Person(int a, int b, int c) :m_A(a), m_B(b), m_C(c) {}\n    void PrintPerson() {\n        cout \u003C\u003C \"mA:\" \u003C\u003C m_A \u003C\u003C endl;\n        cout \u003C\u003C \"mB:\" \u003C\u003C m_B \u003C\u003C endl;\n        cout \u003C\u003C \"mC:\" \u003C\u003C m_C \u003C\u003C endl;\n    }\nprivate:\n    int m_A;\n    int m_B;\n    int m_C;\n};\n\nint main() \n{\n\n    Person p(1, 2, 3);\n    p.PrintPerson();\n\n\n    system(\"pause\");\n\n    return 0;\n}\n",[251,21333,21334,21340,21350,21356,21360,21365,21369,21374,21379,21384,21389,21394,21399,21403,21408,21413,21456,21465,21483,21501,21519,21523,21527,21534,21541,21548,21552,21556,21564,21568,21572,21592,21601,21605,21609,21619,21623,21631],{"__ignoreMap":174},[254,21335,21336,21338],{"class":256,"line":257},[254,21337,2089],{"class":260},[254,21339,2092],{"class":369},[254,21341,21342,21344,21346,21348],{"class":256,"line":175},[254,21343,2097],{"class":260},[254,21345,2100],{"class":260},[254,21347,2104],{"class":2103},[254,21349,1430],{"class":264},[254,21351,21352,21354],{"class":256,"line":1319},[254,21353,14835],{"class":260},[254,21355,15312],{"class":2103},[254,21357,21358],{"class":256,"line":1334},[254,21359,1686],{"class":264},[254,21361,21362],{"class":256,"line":1340},[254,21363,21364],{"class":260},"    public:\n",[254,21366,21367],{"class":256,"line":1354},[254,21368,2540],{"emptyLinePlaceholder":184},[254,21370,21371],{"class":256,"line":1360},[254,21372,21373],{"class":323},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[254,21375,21376],{"class":256,"line":1451},[254,21377,21378],{"class":323},"    \u002F\u002FPerson(int a, int b, int c) {\n",[254,21380,21381],{"class":256,"line":1457},[254,21382,21383],{"class":323},"    \u002F\u002F  m_A = a;\n",[254,21385,21386],{"class":256,"line":1469},[254,21387,21388],{"class":323},"    \u002F\u002F  m_B = b;\n",[254,21390,21391],{"class":256,"line":1752},[254,21392,21393],{"class":323},"    \u002F\u002F  m_C = c;\n",[254,21395,21396],{"class":256,"line":1757},[254,21397,21398],{"class":323},"    \u002F\u002F}\n",[254,21400,21401],{"class":256,"line":1763},[254,21402,2540],{"emptyLinePlaceholder":184},[254,21404,21405],{"class":256,"line":1768},[254,21406,21407],{"class":323},"    \u002F\u002F初始化列表方式初始化\n",[254,21409,21410],{"class":256,"line":1782},[254,21411,21412],{"class":323},"    \u002F\u002F使用有参构造函数\n",[254,21414,21415,21417,21419,21421,21423,21425,21427,21429,21431,21433,21435,21438,21441,21444,21447,21450,21453],{"class":256,"line":1787},[254,21416,18660],{"class":2103},[254,21418,265],{"class":264},[254,21420,268],{"class":260},[254,21422,1538],{"class":5357},[254,21424,12576],{"class":264},[254,21426,268],{"class":260},[254,21428,2973],{"class":5357},[254,21430,12576],{"class":264},[254,21432,268],{"class":260},[254,21434,2989],{"class":5357},[254,21436,21437],{"class":264},") :",[254,21439,21440],{"class":2103},"m_A",[254,21442,21443],{"class":264},"(a), ",[254,21445,21446],{"class":2103},"m_B",[254,21448,21449],{"class":264},"(b), ",[254,21451,21452],{"class":2103},"m_C",[254,21454,21455],{"class":264},"(c) {}\n",[254,21457,21458,21460,21463],{"class":256,"line":1793},[254,21459,15050],{"class":260},[254,21461,21462],{"class":2103}," PrintPerson",[254,21464,10994],{"class":264},[254,21466,21467,21469,21471,21474,21476,21479,21481],{"class":256,"line":1814},[254,21468,9810],{"class":264},[254,21470,1308],{"class":260},[254,21472,21473],{"class":369}," \"mA:\"",[254,21475,1584],{"class":260},[254,21477,21478],{"class":264}," m_A ",[254,21480,1308],{"class":260},[254,21482,8981],{"class":264},[254,21484,21485,21487,21489,21492,21494,21497,21499],{"class":256,"line":1819},[254,21486,9810],{"class":264},[254,21488,1308],{"class":260},[254,21490,21491],{"class":369}," \"mB:\"",[254,21493,1584],{"class":260},[254,21495,21496],{"class":264}," m_B ",[254,21498,1308],{"class":260},[254,21500,8981],{"class":264},[254,21502,21503,21505,21507,21510,21512,21515,21517],{"class":256,"line":1833},[254,21504,9810],{"class":264},[254,21506,1308],{"class":260},[254,21508,21509],{"class":369}," \"mC:\"",[254,21511,1584],{"class":260},[254,21513,21514],{"class":264}," m_C ",[254,21516,1308],{"class":260},[254,21518,8981],{"class":264},[254,21520,21521],{"class":256,"line":1838},[254,21522,2327],{"class":264},[254,21524,21525],{"class":256,"line":1867},[254,21526,15363],{"class":260},[254,21528,21529,21531],{"class":256,"line":1872},[254,21530,2125],{"class":260},[254,21532,21533],{"class":264}," m_A;\n",[254,21535,21536,21538],{"class":256,"line":1889},[254,21537,2125],{"class":260},[254,21539,21540],{"class":264}," m_B;\n",[254,21542,21543,21545],{"class":256,"line":1894},[254,21544,2125],{"class":260},[254,21546,21547],{"class":264}," m_C;\n",[254,21549,21550],{"class":256,"line":1899},[254,21551,4135],{"class":264},[254,21553,21554],{"class":256,"line":1904},[254,21555,2540],{"emptyLinePlaceholder":184},[254,21557,21558,21560,21562],{"class":256,"line":1918},[254,21559,268],{"class":260},[254,21561,2113],{"class":2103},[254,21563,6119],{"class":264},[254,21565,21566],{"class":256,"line":1923},[254,21567,1686],{"class":264},[254,21569,21570],{"class":256,"line":2717},[254,21571,2540],{"emptyLinePlaceholder":184},[254,21573,21574,21576,21578,21580,21582,21584,21586,21588,21590],{"class":256,"line":2731},[254,21575,19572],{"class":264},[254,21577,14],{"class":2103},[254,21579,265],{"class":264},[254,21581,482],{"class":313},[254,21583,12576],{"class":264},[254,21585,342],{"class":313},[254,21587,12576],{"class":264},[254,21589,336],{"class":313},[254,21591,2859],{"class":264},[254,21593,21594,21596,21599],{"class":256,"line":2739},[254,21595,16007],{"class":264},[254,21597,21598],{"class":2103},"PrintPerson",[254,21600,5777],{"class":264},[254,21602,21603],{"class":256,"line":2744},[254,21604,2540],{"emptyLinePlaceholder":184},[254,21606,21607],{"class":256,"line":2750},[254,21608,2540],{"emptyLinePlaceholder":184},[254,21610,21611,21613,21615,21617],{"class":256,"line":2756},[254,21612,2443],{"class":2103},[254,21614,265],{"class":264},[254,21616,2448],{"class":369},[254,21618,2859],{"class":264},[254,21620,21621],{"class":256,"line":2761},[254,21622,2540],{"emptyLinePlaceholder":184},[254,21624,21625,21627,21629],{"class":256,"line":8089},[254,21626,4230],{"class":260},[254,21628,4233],{"class":313},[254,21630,1430],{"class":264},[254,21632,21633],{"class":256,"line":8113},[254,21634,1705],{"class":264},[14,21636,21637,21638,21641,21642],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[414,21639,21640],{},"参数名就是定义的对象属性","，",[414,21643,21644],{},"属性后面的值为有参构造函数的形参",[245,21646,21648],{"className":247,"code":21647,"language":249,"meta":174,"style":174},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[251,21649,21650],{"__ignoreMap":174},[254,21651,21652,21654,21656,21658,21661,21663,21666,21668,21671,21673,21676,21678,21681,21683],{"class":256,"line":257},[254,21653,19187],{"class":2103},[254,21655,265],{"class":264},[254,21657,268],{"class":260},[254,21659,21660],{"class":264}," a.",[254,21662,268],{"class":260},[254,21664,21665],{"class":264}," b,",[254,21667,268],{"class":260},[254,21669,21670],{"class":264}," b):",[254,21672,21440],{"class":2103},[254,21674,21675],{"class":264},"(a),",[254,21677,21446],{"class":2103},[254,21679,21680],{"class":264},"(c),",[254,21682,21452],{"class":2103},[254,21684,21685],{"class":264},"(b) {}\n",[225,21687,21689],{"id":21688},"_827类对象作为类成员","8.2.7类对象作为类成员",[14,21691,21692],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[14,21694,14774],{},[245,21696,21698],{"className":247,"code":21697,"language":249,"meta":174,"style":174},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[251,21699,21700,21705,21710,21714,21719,21723],{"__ignoreMap":174},[254,21701,21702],{"class":256,"line":257},[254,21703,21704],{"class":264},"A{};\n",[254,21706,21707],{"class":256,"line":175},[254,21708,21709],{"class":264},"B\n",[254,21711,21712],{"class":256,"line":1319},[254,21713,1686],{"class":264},[254,21715,21716],{"class":256,"line":1334},[254,21717,21718],{"class":264},"    A a;\n",[254,21720,21721],{"class":256,"line":1340},[254,21722,1705],{"class":264},[254,21724,21725],{"class":256,"line":1354},[254,21726,21727],{"class":323},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[14,21729,21730],{},"案例",[245,21732,21734],{"className":247,"code":21733,"language":249,"meta":174,"style":174},"\u002F\u002Fphone这个对象作为Person这个类的类成员\nclass Phone\n{\npublic：\n    \u002F\u002F 赋值(构造函数)\n    Phone(string pName)\n    {\n        m_pName=pName;\n        cout\u003C\u003C\"Phone的构造函数调用\";\n    }\n    ~Phone()\n    {\n        cout\u003C\u003C\"Phone析构函数调用\"\u003C\u003Cendl;\n    }\n    \u002F\u002F\n    string m_PName;\n};\nclass Person\n{\npublic:\n    \u002F\u002F赋值\n    Person(string name,string pname):m_name(name),m_phone.m_PName(pname) \n    {\n        cout\u003C\u003C\"Person的构造函数调用\";\n    }\n    ~Person()\n    {\n        cout\u003C\u003C\"Person析构函数调用\"\u003C\u003Cendl;\n    }\n    \u002F\u002F姓名\n    string m_name;\n    \u002F\u002F手机\n    Phone m_Phone;\n};\nvoid test01()\n{\n    Person p(\"张三\",\"安卓\");\n    cout\u003C\u003Cp.Name\u003C\u003C\"拿着：\"\u003C\u003Cp.m_phone.m_PName;\n}\nint main()\n{\n    test01();\n}\n",[251,21735,21736,21741,21748,21752,21757,21762,21776,21780,21790,21801,21805,21812,21816,21829,21833,21838,21843,21847,21853,21857,21861,21865,21896,21900,21911,21915,21921,21925,21938,21942,21946,21950,21955,21960,21964,21972,21976,21993,22012,22016,22024,22028,22034],{"__ignoreMap":174},[254,21737,21738],{"class":256,"line":257},[254,21739,21740],{"class":323},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[254,21742,21743,21745],{"class":256,"line":175},[254,21744,14835],{"class":260},[254,21746,21747],{"class":2103}," Phone\n",[254,21749,21750],{"class":256,"line":1319},[254,21751,1686],{"class":264},[254,21753,21754],{"class":256,"line":1334},[254,21755,21756],{"class":264},"public：\n",[254,21758,21759],{"class":256,"line":1340},[254,21760,21761],{"class":323},"    \u002F\u002F 赋值(构造函数)\n",[254,21763,21764,21767,21769,21771,21774],{"class":256,"line":1354},[254,21765,21766],{"class":2103},"    Phone",[254,21768,265],{"class":264},[254,21770,15058],{"class":2103},[254,21772,21773],{"class":5357}," pName",[254,21775,271],{"class":264},[254,21777,21778],{"class":256,"line":1360},[254,21779,2170],{"class":264},[254,21781,21782,21785,21787],{"class":256,"line":1451},[254,21783,21784],{"class":264},"        m_pName",[254,21786,310],{"class":260},[254,21788,21789],{"class":264},"pName;\n",[254,21791,21792,21794,21796,21799],{"class":256,"line":1457},[254,21793,3591],{"class":264},[254,21795,1308],{"class":260},[254,21797,21798],{"class":369},"\"Phone的构造函数调用\"",[254,21800,1430],{"class":264},[254,21802,21803],{"class":256,"line":1469},[254,21804,2327],{"class":264},[254,21806,21807,21810],{"class":256,"line":1752},[254,21808,21809],{"class":2103},"    ~Phone",[254,21811,2116],{"class":264},[254,21813,21814],{"class":256,"line":1757},[254,21815,2170],{"class":264},[254,21817,21818,21820,21822,21825,21827],{"class":256,"line":1763},[254,21819,3591],{"class":264},[254,21821,1308],{"class":260},[254,21823,21824],{"class":369},"\"Phone析构函数调用\"",[254,21826,1308],{"class":260},[254,21828,1331],{"class":264},[254,21830,21831],{"class":256,"line":1768},[254,21832,2327],{"class":264},[254,21834,21835],{"class":256,"line":1782},[254,21836,21837],{"class":323},"    \u002F\u002F\n",[254,21839,21840],{"class":256,"line":1787},[254,21841,21842],{"class":264},"    string m_PName;\n",[254,21844,21845],{"class":256,"line":1793},[254,21846,4135],{"class":264},[254,21848,21849,21851],{"class":256,"line":1814},[254,21850,14835],{"class":260},[254,21852,15312],{"class":2103},[254,21854,21855],{"class":256,"line":1819},[254,21856,1686],{"class":264},[254,21858,21859],{"class":256,"line":1833},[254,21860,14857],{"class":260},[254,21862,21863],{"class":256,"line":1838},[254,21864,17135],{"class":323},[254,21866,21867,21869,21871,21873,21875,21877,21879,21882,21885,21887,21890,21893],{"class":256,"line":1867},[254,21868,18660],{"class":2103},[254,21870,265],{"class":264},[254,21872,15058],{"class":2103},[254,21874,15061],{"class":5357},[254,21876,642],{"class":264},[254,21878,15058],{"class":2103},[254,21880,21881],{"class":5357}," pname",[254,21883,21884],{"class":264},"):",[254,21886,15151],{"class":2103},[254,21888,21889],{"class":264},"(name),m_phone.",[254,21891,21892],{"class":2103},"m_PName",[254,21894,21895],{"class":264},"(pname) \n",[254,21897,21898],{"class":256,"line":1872},[254,21899,2170],{"class":264},[254,21901,21902,21904,21906,21909],{"class":256,"line":1889},[254,21903,3591],{"class":264},[254,21905,1308],{"class":260},[254,21907,21908],{"class":369},"\"Person的构造函数调用\"",[254,21910,1430],{"class":264},[254,21912,21913],{"class":256,"line":1894},[254,21914,2327],{"class":264},[254,21916,21917,21919],{"class":256,"line":1899},[254,21918,18693],{"class":2103},[254,21920,2116],{"class":264},[254,21922,21923],{"class":256,"line":1904},[254,21924,2170],{"class":264},[254,21926,21927,21929,21931,21934,21936],{"class":256,"line":1918},[254,21928,3591],{"class":264},[254,21930,1308],{"class":260},[254,21932,21933],{"class":369},"\"Person析构函数调用\"",[254,21935,1308],{"class":260},[254,21937,1331],{"class":264},[254,21939,21940],{"class":256,"line":1923},[254,21941,2327],{"class":264},[254,21943,21944],{"class":256,"line":2717},[254,21945,7921],{"class":323},[254,21947,21948],{"class":256,"line":2731},[254,21949,15033],{"class":264},[254,21951,21952],{"class":256,"line":2739},[254,21953,21954],{"class":323},"    \u002F\u002F手机\n",[254,21956,21957],{"class":256,"line":2744},[254,21958,21959],{"class":264},"    Phone m_Phone;\n",[254,21961,21962],{"class":256,"line":2750},[254,21963,4135],{"class":264},[254,21965,21966,21968,21970],{"class":256,"line":2756},[254,21967,5505],{"class":260},[254,21969,5729],{"class":2103},[254,21971,2116],{"class":264},[254,21973,21974],{"class":256,"line":2761},[254,21975,1686],{"class":264},[254,21977,21978,21980,21982,21984,21986,21988,21991],{"class":256,"line":8089},[254,21979,19572],{"class":264},[254,21981,14],{"class":2103},[254,21983,265],{"class":264},[254,21985,8057],{"class":369},[254,21987,642],{"class":264},[254,21989,21990],{"class":369},"\"安卓\"",[254,21992,2859],{"class":264},[254,21994,21995,21997,21999,22002,22004,22007,22009],{"class":256,"line":8113},[254,21996,1691],{"class":264},[254,21998,1308],{"class":260},[254,22000,22001],{"class":264},"p.Name",[254,22003,1308],{"class":260},[254,22005,22006],{"class":369},"\"拿着：\"",[254,22008,1308],{"class":260},[254,22010,22011],{"class":264},"p.m_phone.m_PName;\n",[254,22013,22014],{"class":256,"line":8118},[254,22015,1705],{"class":264},[254,22017,22018,22020,22022],{"class":256,"line":8124},[254,22019,268],{"class":260},[254,22021,2113],{"class":2103},[254,22023,2116],{"class":264},[254,22025,22026],{"class":256,"line":8151},[254,22027,1686],{"class":264},[254,22029,22030,22032],{"class":256,"line":8156},[254,22031,5774],{"class":2103},[254,22033,5777],{"class":264},[254,22035,22036],{"class":256,"line":8162},[254,22037,1705],{"class":264},[14,22039,9166],{},[245,22041,22043],{"className":247,"code":22042,"language":249,"meta":174,"style":174},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[251,22044,22045,22050],{"__ignoreMap":174},[254,22046,22047],{"class":256,"line":257},[254,22048,22049],{"class":323},"    \u002F\u002F不需要写这个：\n",[254,22051,22052],{"class":256,"line":175},[254,22053,22054],{"class":323},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[14,22056,22057],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[245,22059,22061],{"className":247,"code":22060,"language":249,"meta":174,"style":174},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[251,22062,22063],{"__ignoreMap":174},[254,22064,22065,22067,22070,22072,22075,22078],{"class":256,"line":257},[254,22066,19187],{"class":2103},[254,22068,22069],{"class":264},"(string name.string pname):",[254,22071,15151],{"class":2103},[254,22073,22074],{"class":264},"(name),",[254,22076,22077],{"class":2103},"m_phone",[254,22079,22080],{"class":264},"(pname) {}\n",[14,22082,22083,22084,310,22087],{},"采用的是隐式转换法，实际为如下：\n",[251,22085,22086],{},"m_phone(pname)",[251,22088,22089],{},"Phone m_phone=pname",[14,22091,22092,22095],{},[414,22093,22094],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[14,22097,22098],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[225,22100,22102],{"id":22101},"_828静态对象","8.2.8静态对象",[14,22104,22105],{},"静态对象在成员对象前static，称为静态对象",[14,22107,22108],{},"静态对象分为两类：",[21,22110,22111],{},[24,22112,22113],{},"静态成员变量",[1271,22115,22116,22119,22122],{},[24,22117,22118],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[24,22120,22121],{},"②在编译阶段分配内存",[24,22123,22124],{},"③类内声明，类外初始化",[21,22126,22127],{"start":175},[24,22128,22129],{},"静态成员函数",[1271,22131,22132,22135],{},[24,22133,22134],{},"①所有对象共享同一个函数",[24,22136,22137],{},"②静态成员函数只能访问静态成员变量",[22139,22140,22142],"h4",{"id":22141},"_8281静态成员变量","8.2.8.1静态成员变量",[245,22144,22146],{"className":247,"code":22145,"language":249,"meta":174,"style":174},"#include\u003Ciostream>\nusing namespace std;\nclass Person\n{\npublic:\n    \u002F\u002F非静态成员变量\n    \u002F\u002F int m_A;\n    \u002F\u002F定义静态成员变量\n    static int m_A;\n\n\n};\nvoid test01()\n{\n    Person p;\n    \u002F\u002F输出类成员变量这块内存\n    cout\u003C\u003Cp.m_A\u003C\u003Cendl;\n}\nint main()\n{\n    test01()\n}\n",[251,22147,22148,22154,22164,22170,22174,22178,22183,22188,22193,22201,22205,22209,22213,22221,22225,22229,22234,22247,22251,22259,22263,22269],{"__ignoreMap":174},[254,22149,22150,22152],{"class":256,"line":257},[254,22151,2089],{"class":260},[254,22153,2092],{"class":369},[254,22155,22156,22158,22160,22162],{"class":256,"line":175},[254,22157,2097],{"class":260},[254,22159,2100],{"class":260},[254,22161,2104],{"class":2103},[254,22163,1430],{"class":264},[254,22165,22166,22168],{"class":256,"line":1319},[254,22167,14835],{"class":260},[254,22169,15312],{"class":2103},[254,22171,22172],{"class":256,"line":1334},[254,22173,1686],{"class":264},[254,22175,22176],{"class":256,"line":1340},[254,22177,14857],{"class":260},[254,22179,22180],{"class":256,"line":1354},[254,22181,22182],{"class":323},"    \u002F\u002F非静态成员变量\n",[254,22184,22185],{"class":256,"line":1360},[254,22186,22187],{"class":323},"    \u002F\u002F int m_A;\n",[254,22189,22190],{"class":256,"line":1451},[254,22191,22192],{"class":323},"    \u002F\u002F定义静态成员变量\n",[254,22194,22195,22197,22199],{"class":256,"line":1457},[254,22196,11161],{"class":260},[254,22198,2522],{"class":260},[254,22200,21533],{"class":264},[254,22202,22203],{"class":256,"line":1469},[254,22204,2540],{"emptyLinePlaceholder":184},[254,22206,22207],{"class":256,"line":1752},[254,22208,2540],{"emptyLinePlaceholder":184},[254,22210,22211],{"class":256,"line":1757},[254,22212,4135],{"class":264},[254,22214,22215,22217,22219],{"class":256,"line":1763},[254,22216,5505],{"class":260},[254,22218,5729],{"class":2103},[254,22220,2116],{"class":264},[254,22222,22223],{"class":256,"line":1768},[254,22224,1686],{"class":264},[254,22226,22227],{"class":256,"line":1782},[254,22228,15454],{"class":264},[254,22230,22231],{"class":256,"line":1787},[254,22232,22233],{"class":323},"    \u002F\u002F输出类成员变量这块内存\n",[254,22235,22236,22238,22240,22243,22245],{"class":256,"line":1793},[254,22237,1691],{"class":264},[254,22239,1308],{"class":260},[254,22241,22242],{"class":264},"p.m_A",[254,22244,1308],{"class":260},[254,22246,1331],{"class":264},[254,22248,22249],{"class":256,"line":1814},[254,22250,1705],{"class":264},[254,22252,22253,22255,22257],{"class":256,"line":1819},[254,22254,268],{"class":260},[254,22256,2113],{"class":2103},[254,22258,2116],{"class":264},[254,22260,22261],{"class":256,"line":1833},[254,22262,1686],{"class":264},[254,22264,22265,22267],{"class":256,"line":1838},[254,22266,5774],{"class":2103},[254,22268,2116],{"class":264},[254,22270,22271],{"class":256,"line":1867},[254,22272,1705],{"class":264},[14,22274,22275],{},"此时输出是报错的：无法解析外部命令",[14,22277,22278],{},"解决这一问题：必须用到类内声明，类外初始化操作",[245,22280,22282],{"className":247,"code":22281,"language":249,"meta":174,"style":174},"#include\u003Ciostream>\nusing namespace std;\nclass Person\n{\npublic:\n    \u002F\u002F类内声明\n    static int m_A;\n};\n\u002F\u002F类外初始化\nint Person::m_A=10;\nvoid test01()\n{\n    Person p;\n    \u002F\u002F访问变量的原内存空间\n    \u002F\u002F100\n    cout\u003C\u003Cp.m_A\u003C\u003Cendl;\n    Person p2;\n    p2.m_A=200;\n    \u002F\u002F继续访问这片空间\n    \u002F\u002F200\n    cout\u003C\u003Cp2.m_A\u003C\u003Cendl;\n}\nint main()\n{\n    test01();\n}\n",[251,22283,22284,22290,22300,22306,22310,22314,22319,22327,22331,22336,22351,22359,22363,22367,22372,22377,22389,22394,22405,22410,22415,22428,22432,22440,22444,22450],{"__ignoreMap":174},[254,22285,22286,22288],{"class":256,"line":257},[254,22287,2089],{"class":260},[254,22289,2092],{"class":369},[254,22291,22292,22294,22296,22298],{"class":256,"line":175},[254,22293,2097],{"class":260},[254,22295,2100],{"class":260},[254,22297,2104],{"class":2103},[254,22299,1430],{"class":264},[254,22301,22302,22304],{"class":256,"line":1319},[254,22303,14835],{"class":260},[254,22305,15312],{"class":2103},[254,22307,22308],{"class":256,"line":1334},[254,22309,1686],{"class":264},[254,22311,22312],{"class":256,"line":1340},[254,22313,14857],{"class":260},[254,22315,22316],{"class":256,"line":1354},[254,22317,22318],{"class":323},"    \u002F\u002F类内声明\n",[254,22320,22321,22323,22325],{"class":256,"line":1360},[254,22322,11161],{"class":260},[254,22324,2522],{"class":260},[254,22326,21533],{"class":264},[254,22328,22329],{"class":256,"line":1451},[254,22330,4135],{"class":264},[254,22332,22333],{"class":256,"line":1457},[254,22334,22335],{"class":323},"\u002F\u002F类外初始化\n",[254,22337,22338,22340,22342,22345,22347,22349],{"class":256,"line":1469},[254,22339,268],{"class":260},[254,22341,15710],{"class":2103},[254,22343,22344],{"class":264},"::m_A",[254,22346,310],{"class":260},[254,22348,710],{"class":313},[254,22350,1430],{"class":264},[254,22352,22353,22355,22357],{"class":256,"line":1752},[254,22354,5505],{"class":260},[254,22356,5729],{"class":2103},[254,22358,2116],{"class":264},[254,22360,22361],{"class":256,"line":1757},[254,22362,1686],{"class":264},[254,22364,22365],{"class":256,"line":1763},[254,22366,15454],{"class":264},[254,22368,22369],{"class":256,"line":1768},[254,22370,22371],{"class":323},"    \u002F\u002F访问变量的原内存空间\n",[254,22373,22374],{"class":256,"line":1782},[254,22375,22376],{"class":323},"    \u002F\u002F100\n",[254,22378,22379,22381,22383,22385,22387],{"class":256,"line":1787},[254,22380,1691],{"class":264},[254,22382,1308],{"class":260},[254,22384,22242],{"class":264},[254,22386,1308],{"class":260},[254,22388,1331],{"class":264},[254,22390,22391],{"class":256,"line":1793},[254,22392,22393],{"class":264},"    Person p2;\n",[254,22395,22396,22399,22401,22403],{"class":256,"line":1814},[254,22397,22398],{"class":264},"    p2.m_A",[254,22400,310],{"class":260},[254,22402,1862],{"class":313},[254,22404,1430],{"class":264},[254,22406,22407],{"class":256,"line":1819},[254,22408,22409],{"class":323},"    \u002F\u002F继续访问这片空间\n",[254,22411,22412],{"class":256,"line":1833},[254,22413,22414],{"class":323},"    \u002F\u002F200\n",[254,22416,22417,22419,22421,22424,22426],{"class":256,"line":1838},[254,22418,1691],{"class":264},[254,22420,1308],{"class":260},[254,22422,22423],{"class":264},"p2.m_A",[254,22425,1308],{"class":260},[254,22427,1331],{"class":264},[254,22429,22430],{"class":256,"line":1867},[254,22431,1705],{"class":264},[254,22433,22434,22436,22438],{"class":256,"line":1872},[254,22435,268],{"class":260},[254,22437,2113],{"class":2103},[254,22439,2116],{"class":264},[254,22441,22442],{"class":256,"line":1889},[254,22443,1686],{"class":264},[254,22445,22446,22448],{"class":256,"line":1894},[254,22447,5774],{"class":2103},[254,22449,5777],{"class":264},[254,22451,22452],{"class":256,"line":1899},[254,22453,1705],{"class":264},[14,22455,22456],{},[414,22457,22458],{},"静态变量的访问",[245,22460,22462],{"className":247,"code":22461,"language":249,"meta":174,"style":174},"#include\u003Ciostream>\nusing namespace std;\nclass Person\n{\npublic:\n    \u002F\u002F类内声明\n    static int m_A;\nprivate:\n    \u002F\u002F静态成员变量也是有访问权限的\n    static int m_B;\n};\n\u002F\u002F类外初始化\nint Person::m_A=10;\nint Person::m_B=20;\nvoid test02()\n{\n    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n    \u002F\u002F静态成员变量有两种访问方式：\n    \u002F\u002F1.通过对象进行访问\n    Person p;  \n    cout\u003C\u003Cp.m_A\u003C\u003Cendl;\n    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n    \u002F\u002F2.通过类名进行访问\n    cout\u003C\u003CPerson::m_A\u003C\u003Cendl;\n    cout\u003C\u003CPerson::m_B\u003C\u003Cendl; \u002F\u002F没有访问权限，报错\n}\nint main()\n{\n    test02();\n}\n",[251,22463,22464,22470,22480,22486,22490,22494,22498,22506,22510,22515,22523,22527,22531,22545,22560,22568,22572,22577,22582,22587,22592,22604,22609,22614,22628,22645,22649,22657,22661,22667],{"__ignoreMap":174},[254,22465,22466,22468],{"class":256,"line":257},[254,22467,2089],{"class":260},[254,22469,2092],{"class":369},[254,22471,22472,22474,22476,22478],{"class":256,"line":175},[254,22473,2097],{"class":260},[254,22475,2100],{"class":260},[254,22477,2104],{"class":2103},[254,22479,1430],{"class":264},[254,22481,22482,22484],{"class":256,"line":1319},[254,22483,14835],{"class":260},[254,22485,15312],{"class":2103},[254,22487,22488],{"class":256,"line":1334},[254,22489,1686],{"class":264},[254,22491,22492],{"class":256,"line":1340},[254,22493,14857],{"class":260},[254,22495,22496],{"class":256,"line":1354},[254,22497,22318],{"class":323},[254,22499,22500,22502,22504],{"class":256,"line":1360},[254,22501,11161],{"class":260},[254,22503,2522],{"class":260},[254,22505,21533],{"class":264},[254,22507,22508],{"class":256,"line":1451},[254,22509,15363],{"class":260},[254,22511,22512],{"class":256,"line":1457},[254,22513,22514],{"class":323},"    \u002F\u002F静态成员变量也是有访问权限的\n",[254,22516,22517,22519,22521],{"class":256,"line":1469},[254,22518,11161],{"class":260},[254,22520,2522],{"class":260},[254,22522,21540],{"class":264},[254,22524,22525],{"class":256,"line":1752},[254,22526,4135],{"class":264},[254,22528,22529],{"class":256,"line":1757},[254,22530,22335],{"class":323},[254,22532,22533,22535,22537,22539,22541,22543],{"class":256,"line":1763},[254,22534,268],{"class":260},[254,22536,15710],{"class":2103},[254,22538,22344],{"class":264},[254,22540,310],{"class":260},[254,22542,710],{"class":313},[254,22544,1430],{"class":264},[254,22546,22547,22549,22551,22554,22556,22558],{"class":256,"line":1768},[254,22548,268],{"class":260},[254,22550,15710],{"class":2103},[254,22552,22553],{"class":264},"::m_B",[254,22555,310],{"class":260},[254,22557,964],{"class":313},[254,22559,1430],{"class":264},[254,22561,22562,22564,22566],{"class":256,"line":1782},[254,22563,5505],{"class":260},[254,22565,5798],{"class":2103},[254,22567,2116],{"class":264},[254,22569,22570],{"class":256,"line":1787},[254,22571,1686],{"class":264},[254,22573,22574],{"class":256,"line":1793},[254,22575,22576],{"class":323},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[254,22578,22579],{"class":256,"line":1814},[254,22580,22581],{"class":323},"    \u002F\u002F静态成员变量有两种访问方式：\n",[254,22583,22584],{"class":256,"line":1819},[254,22585,22586],{"class":323},"    \u002F\u002F1.通过对象进行访问\n",[254,22588,22589],{"class":256,"line":1833},[254,22590,22591],{"class":264},"    Person p;  \n",[254,22593,22594,22596,22598,22600,22602],{"class":256,"line":1838},[254,22595,1691],{"class":264},[254,22597,1308],{"class":260},[254,22599,22242],{"class":264},[254,22601,1308],{"class":260},[254,22603,1331],{"class":264},[254,22605,22606],{"class":256,"line":1867},[254,22607,22608],{"class":323},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[254,22610,22611],{"class":256,"line":1872},[254,22612,22613],{"class":323},"    \u002F\u002F2.通过类名进行访问\n",[254,22615,22616,22618,22620,22622,22624,22626],{"class":256,"line":1889},[254,22617,1691],{"class":264},[254,22619,1308],{"class":260},[254,22621,19187],{"class":2103},[254,22623,22344],{"class":264},[254,22625,1308],{"class":260},[254,22627,1331],{"class":264},[254,22629,22630,22632,22634,22636,22638,22640,22642],{"class":256,"line":1894},[254,22631,1691],{"class":264},[254,22633,1308],{"class":260},[254,22635,19187],{"class":2103},[254,22637,22553],{"class":264},[254,22639,1308],{"class":260},[254,22641,1378],{"class":264},[254,22643,22644],{"class":323}," \u002F\u002F没有访问权限，报错\n",[254,22646,22647],{"class":256,"line":1899},[254,22648,1705],{"class":264},[254,22650,22651,22653,22655],{"class":256,"line":1904},[254,22652,268],{"class":260},[254,22654,2113],{"class":2103},[254,22656,2116],{"class":264},[254,22658,22659],{"class":256,"line":1918},[254,22660,1686],{"class":264},[254,22662,22663,22665],{"class":256,"line":1923},[254,22664,5843],{"class":2103},[254,22666,5777],{"class":264},[254,22668,22669],{"class":256,"line":2717},[254,22670,1705],{"class":264},[22139,22672,22674],{"id":22673},"_8282静态成员函数","8.2.8.2静态成员函数",[14,22676,22677],{},"1.静态成员函数定义与访问",[245,22679,22681],{"className":247,"code":22680,"language":249,"meta":174,"style":174},"class Person\n{\npublic:\n    \u002F\u002F在公共权限下定义静态成员函数\n    static void func()\n    {\n        coout\u003C\u003C\"静态成员函数的调用\"\u003C\u003Cendl;\n    }\n};\nvoid test01()\n{\n    \u002F\u002F静态成员函数的调用方式:\n    \u002F\u002F1.通过对象访问\n    Person p;\n    p.func();\n    \u002F\u002F2.通过类名访问\n    Person::func();\n}\n",[251,22682,22683,22689,22693,22697,22702,22713,22717,22731,22735,22739,22747,22751,22756,22761,22765,22773,22778,22788],{"__ignoreMap":174},[254,22684,22685,22687],{"class":256,"line":257},[254,22686,14835],{"class":260},[254,22688,15312],{"class":2103},[254,22690,22691],{"class":256,"line":175},[254,22692,1686],{"class":264},[254,22694,22695],{"class":256,"line":1319},[254,22696,14857],{"class":260},[254,22698,22699],{"class":256,"line":1334},[254,22700,22701],{"class":323},"    \u002F\u002F在公共权限下定义静态成员函数\n",[254,22703,22704,22706,22709,22711],{"class":256,"line":1340},[254,22705,11161],{"class":260},[254,22707,22708],{"class":260}," void",[254,22710,11526],{"class":2103},[254,22712,2116],{"class":264},[254,22714,22715],{"class":256,"line":1354},[254,22716,2170],{"class":264},[254,22718,22719,22722,22724,22727,22729],{"class":256,"line":1360},[254,22720,22721],{"class":264},"        coout",[254,22723,1308],{"class":260},[254,22725,22726],{"class":369},"\"静态成员函数的调用\"",[254,22728,1308],{"class":260},[254,22730,1331],{"class":264},[254,22732,22733],{"class":256,"line":1451},[254,22734,2327],{"class":264},[254,22736,22737],{"class":256,"line":1457},[254,22738,4135],{"class":264},[254,22740,22741,22743,22745],{"class":256,"line":1469},[254,22742,5505],{"class":260},[254,22744,5729],{"class":2103},[254,22746,2116],{"class":264},[254,22748,22749],{"class":256,"line":1752},[254,22750,1686],{"class":264},[254,22752,22753],{"class":256,"line":1757},[254,22754,22755],{"class":323},"    \u002F\u002F静态成员函数的调用方式:\n",[254,22757,22758],{"class":256,"line":1763},[254,22759,22760],{"class":323},"    \u002F\u002F1.通过对象访问\n",[254,22762,22763],{"class":256,"line":1768},[254,22764,15454],{"class":264},[254,22766,22767,22769,22771],{"class":256,"line":1782},[254,22768,16007],{"class":264},[254,22770,11692],{"class":2103},[254,22772,5777],{"class":264},[254,22774,22775],{"class":256,"line":1787},[254,22776,22777],{"class":323},"    \u002F\u002F2.通过类名访问\n",[254,22779,22780,22782,22784,22786],{"class":256,"line":1793},[254,22781,18660],{"class":2103},[254,22783,17873],{"class":264},[254,22785,11692],{"class":2103},[254,22787,5777],{"class":264},[254,22789,22790],{"class":256,"line":1814},[254,22791,1705],{"class":264},[21,22793,22794],{"start":175},[24,22795,22796],{},"静态成员函数只能访问静态成员变量",[245,22798,22800],{"className":247,"code":22799,"language":249,"meta":174,"style":174},"class Person\n{\npublic:\n    \u002F\u002F在公共权限下定义静态成员函数\n    static void func()\n    {\n        m_A=100; \u002F\u002F静态成员函数可以访问 静态成员变量\n        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n        coout\u003C\u003C\"静态成员函数的调用\"\u003C\u003Cendl;\n    }\n    static int m_A; \u002F\u002F静态成员变量\n    int m_B; \u002F\u002F非静态成员变量\n\nprivate:\n    \u002F\u002F静态成员变量也是有访问权限的\n    static void func2()\n    {\n        cout\u003C\u003C\"这是私有权限下的静态函数调用\"\u003C\u003Cendl;\n    }\n\n\n};\nint Person::m_A=0;\nvoid test01()\n{\n    \u002F\u002F静态成员函数的调用方式:\n    \u002F\u002F1.通过对象访问\n    Person p;\n    p.func();\n    \u002F\u002F2.通过类名访问\n    Person::func();\n    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n}\nint main()\n{\n    test01();\n}\n",[251,22801,22802,22808,22812,22816,22820,22830,22834,22848,22853,22865,22869,22880,22890,22894,22898,22902,22912,22916,22929,22933,22937,22941,22945,22959,22967,22971,22975,22979,22983,22991,22995,23005,23010,23014,23022,23026,23032],{"__ignoreMap":174},[254,22803,22804,22806],{"class":256,"line":257},[254,22805,14835],{"class":260},[254,22807,15312],{"class":2103},[254,22809,22810],{"class":256,"line":175},[254,22811,1686],{"class":264},[254,22813,22814],{"class":256,"line":1319},[254,22815,14857],{"class":260},[254,22817,22818],{"class":256,"line":1334},[254,22819,22701],{"class":323},[254,22821,22822,22824,22826,22828],{"class":256,"line":1340},[254,22823,11161],{"class":260},[254,22825,22708],{"class":260},[254,22827,11526],{"class":2103},[254,22829,2116],{"class":264},[254,22831,22832],{"class":256,"line":1354},[254,22833,2170],{"class":264},[254,22835,22836,22839,22841,22843,22845],{"class":256,"line":1360},[254,22837,22838],{"class":264},"        m_A",[254,22840,310],{"class":260},[254,22842,575],{"class":313},[254,22844,320],{"class":264},[254,22846,22847],{"class":323}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[254,22849,22850],{"class":256,"line":1451},[254,22851,22852],{"class":323},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[254,22854,22855,22857,22859,22861,22863],{"class":256,"line":1457},[254,22856,22721],{"class":264},[254,22858,1308],{"class":260},[254,22860,22726],{"class":369},[254,22862,1308],{"class":260},[254,22864,1331],{"class":264},[254,22866,22867],{"class":256,"line":1469},[254,22868,2327],{"class":264},[254,22870,22871,22873,22875,22877],{"class":256,"line":1752},[254,22872,11161],{"class":260},[254,22874,2522],{"class":260},[254,22876,15589],{"class":264},[254,22878,22879],{"class":323}," \u002F\u002F静态成员变量\n",[254,22881,22882,22884,22887],{"class":256,"line":1757},[254,22883,2125],{"class":260},[254,22885,22886],{"class":264}," m_B;",[254,22888,22889],{"class":323}," \u002F\u002F非静态成员变量\n",[254,22891,22892],{"class":256,"line":1763},[254,22893,2540],{"emptyLinePlaceholder":184},[254,22895,22896],{"class":256,"line":1768},[254,22897,15363],{"class":260},[254,22899,22900],{"class":256,"line":1782},[254,22901,22514],{"class":323},[254,22903,22904,22906,22908,22910],{"class":256,"line":1787},[254,22905,11161],{"class":260},[254,22907,22708],{"class":260},[254,22909,13759],{"class":2103},[254,22911,2116],{"class":264},[254,22913,22914],{"class":256,"line":1793},[254,22915,2170],{"class":264},[254,22917,22918,22920,22922,22925,22927],{"class":256,"line":1814},[254,22919,3591],{"class":264},[254,22921,1308],{"class":260},[254,22923,22924],{"class":369},"\"这是私有权限下的静态函数调用\"",[254,22926,1308],{"class":260},[254,22928,1331],{"class":264},[254,22930,22931],{"class":256,"line":1819},[254,22932,2327],{"class":264},[254,22934,22935],{"class":256,"line":1833},[254,22936,2540],{"emptyLinePlaceholder":184},[254,22938,22939],{"class":256,"line":1838},[254,22940,2540],{"emptyLinePlaceholder":184},[254,22942,22943],{"class":256,"line":1867},[254,22944,4135],{"class":264},[254,22946,22947,22949,22951,22953,22955,22957],{"class":256,"line":1872},[254,22948,268],{"class":260},[254,22950,15710],{"class":2103},[254,22952,22344],{"class":264},[254,22954,310],{"class":260},[254,22956,456],{"class":313},[254,22958,1430],{"class":264},[254,22960,22961,22963,22965],{"class":256,"line":1889},[254,22962,5505],{"class":260},[254,22964,5729],{"class":2103},[254,22966,2116],{"class":264},[254,22968,22969],{"class":256,"line":1894},[254,22970,1686],{"class":264},[254,22972,22973],{"class":256,"line":1899},[254,22974,22755],{"class":323},[254,22976,22977],{"class":256,"line":1904},[254,22978,22760],{"class":323},[254,22980,22981],{"class":256,"line":1918},[254,22982,15454],{"class":264},[254,22984,22985,22987,22989],{"class":256,"line":1923},[254,22986,16007],{"class":264},[254,22988,11692],{"class":2103},[254,22990,5777],{"class":264},[254,22992,22993],{"class":256,"line":2717},[254,22994,22777],{"class":323},[254,22996,22997,22999,23001,23003],{"class":256,"line":2731},[254,22998,18660],{"class":2103},[254,23000,17873],{"class":264},[254,23002,11692],{"class":2103},[254,23004,5777],{"class":264},[254,23006,23007],{"class":256,"line":2739},[254,23008,23009],{"class":323},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[254,23011,23012],{"class":256,"line":2744},[254,23013,1705],{"class":264},[254,23015,23016,23018,23020],{"class":256,"line":2750},[254,23017,268],{"class":260},[254,23019,2113],{"class":2103},[254,23021,2116],{"class":264},[254,23023,23024],{"class":256,"line":2756},[254,23025,1686],{"class":264},[254,23027,23028,23030],{"class":256,"line":2761},[254,23029,5774],{"class":2103},[254,23031,5777],{"class":264},[254,23033,23034],{"class":256,"line":8089},[254,23035,1705],{"class":264},[225,23037,23039],{"id":23038},"_83c对象模型和this指针","8.3C++对象模型和this指针",[22139,23041,23043],{"id":23042},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[14,23045,23046],{},"在c++中，类内的成员变量和成员函数分开存储",[14,23048,23049],{},"只有非静态成员变量才属于类的对象上",[23051,23052,23054],"h5",{"id":23053},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[245,23056,23058],{"className":247,"code":23057,"language":249,"meta":174,"style":174},"#include\u003Ciostraem>\nusing namespace std;\nclass Person\n{\n\n};\nvoid test01()\n{\n    Person p;\n    cout\u003C\u003C\"size of p=\"\u003C\u003Csizeoif(p)\u003C\u003Cendl; \u002F\u002F查看这个空类的占用的内存空间\n}\nint main()\n{\n    test01();\n}\n",[251,23059,23060,23067,23077,23083,23087,23091,23095,23103,23107,23111,23134,23138,23146,23150,23156],{"__ignoreMap":174},[254,23061,23062,23064],{"class":256,"line":257},[254,23063,2089],{"class":260},[254,23065,23066],{"class":369},"\u003Ciostraem>\n",[254,23068,23069,23071,23073,23075],{"class":256,"line":175},[254,23070,2097],{"class":260},[254,23072,2100],{"class":260},[254,23074,2104],{"class":2103},[254,23076,1430],{"class":264},[254,23078,23079,23081],{"class":256,"line":1319},[254,23080,14835],{"class":260},[254,23082,15312],{"class":2103},[254,23084,23085],{"class":256,"line":1334},[254,23086,1686],{"class":264},[254,23088,23089],{"class":256,"line":1340},[254,23090,2540],{"emptyLinePlaceholder":184},[254,23092,23093],{"class":256,"line":1354},[254,23094,4135],{"class":264},[254,23096,23097,23099,23101],{"class":256,"line":1360},[254,23098,5505],{"class":260},[254,23100,5729],{"class":2103},[254,23102,2116],{"class":264},[254,23104,23105],{"class":256,"line":1451},[254,23106,1686],{"class":264},[254,23108,23109],{"class":256,"line":1457},[254,23110,15454],{"class":264},[254,23112,23113,23115,23117,23120,23122,23125,23127,23129,23131],{"class":256,"line":1469},[254,23114,1691],{"class":264},[254,23116,1308],{"class":260},[254,23118,23119],{"class":369},"\"size of p=\"",[254,23121,1308],{"class":260},[254,23123,23124],{"class":2103},"sizeoif",[254,23126,6680],{"class":264},[254,23128,1308],{"class":260},[254,23130,1378],{"class":264},[254,23132,23133],{"class":323}," \u002F\u002F查看这个空类的占用的内存空间\n",[254,23135,23136],{"class":256,"line":1752},[254,23137,1705],{"class":264},[254,23139,23140,23142,23144],{"class":256,"line":1757},[254,23141,268],{"class":260},[254,23143,2113],{"class":2103},[254,23145,2116],{"class":264},[254,23147,23148],{"class":256,"line":1763},[254,23149,1686],{"class":264},[254,23151,23152,23154],{"class":256,"line":1768},[254,23153,5774],{"class":2103},[254,23155,5777],{"class":264},[254,23157,23158],{"class":256,"line":1782},[254,23159,1705],{"class":264},[14,23161,23162],{},"输出结果为：size of p=1",[14,23164,23165],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[14,23167,23168],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[23051,23170,23172],{"id":23171},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[245,23174,23176],{"className":247,"code":23175,"language":249,"meta":174,"style":174},"#include\u003Ciostream>\nusing namespace std;\nclass Person \n{\n    int m_A;\u002F\u002F非静态成员变量\n};\nvoid test01()\n{\n    Person p;\n    cout\u003C\u003C\"size of p=\"\u003C\u003Csizeof(p)\u003C\u003Cendl; \u002F\u002F查看不是空对象时占用多少内存\n\n}\nint main()\n{\n    test01();\n}\n",[251,23177,23178,23184,23194,23202,23206,23215,23219,23227,23231,23235,23254,23258,23262,23270,23274,23280],{"__ignoreMap":174},[254,23179,23180,23182],{"class":256,"line":257},[254,23181,2089],{"class":260},[254,23183,2092],{"class":369},[254,23185,23186,23188,23190,23192],{"class":256,"line":175},[254,23187,2097],{"class":260},[254,23189,2100],{"class":260},[254,23191,2104],{"class":2103},[254,23193,1430],{"class":264},[254,23195,23196,23198,23200],{"class":256,"line":1319},[254,23197,14835],{"class":260},[254,23199,15710],{"class":2103},[254,23201,2814],{"class":264},[254,23203,23204],{"class":256,"line":1334},[254,23205,1686],{"class":264},[254,23207,23208,23210,23212],{"class":256,"line":1340},[254,23209,2125],{"class":260},[254,23211,15589],{"class":264},[254,23213,23214],{"class":323},"\u002F\u002F非静态成员变量\n",[254,23216,23217],{"class":256,"line":1354},[254,23218,4135],{"class":264},[254,23220,23221,23223,23225],{"class":256,"line":1360},[254,23222,5505],{"class":260},[254,23224,5729],{"class":2103},[254,23226,2116],{"class":264},[254,23228,23229],{"class":256,"line":1451},[254,23230,1686],{"class":264},[254,23232,23233],{"class":256,"line":1457},[254,23234,15454],{"class":264},[254,23236,23237,23239,23241,23243,23245,23247,23249,23251],{"class":256,"line":1469},[254,23238,1691],{"class":264},[254,23240,1308],{"class":260},[254,23242,23119],{"class":369},[254,23244,1512],{"class":260},[254,23246,6680],{"class":264},[254,23248,1308],{"class":260},[254,23250,1378],{"class":264},[254,23252,23253],{"class":323}," \u002F\u002F查看不是空对象时占用多少内存\n",[254,23255,23256],{"class":256,"line":1752},[254,23257,2540],{"emptyLinePlaceholder":184},[254,23259,23260],{"class":256,"line":1757},[254,23261,1705],{"class":264},[254,23263,23264,23266,23268],{"class":256,"line":1763},[254,23265,268],{"class":260},[254,23267,2113],{"class":2103},[254,23269,2116],{"class":264},[254,23271,23272],{"class":256,"line":1768},[254,23273,1686],{"class":264},[254,23275,23276,23278],{"class":256,"line":1782},[254,23277,5774],{"class":2103},[254,23279,5777],{"class":264},[254,23281,23282],{"class":256,"line":1787},[254,23283,1705],{"class":264},[14,23285,23286],{},"输出结果：size of p=4",[14,23288,23289],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[21,23291,23292],{},[24,23293,23294],{},"如果加上非静态成员变量，Person类修改如下",[245,23296,23298],{"className":247,"code":23297,"language":249,"meta":174,"style":174},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[251,23299,23300,23306,23310,23316,23324,23328,23333],{"__ignoreMap":174},[254,23301,23302,23304],{"class":256,"line":257},[254,23303,14835],{"class":260},[254,23305,15312],{"class":2103},[254,23307,23308],{"class":256,"line":175},[254,23309,1686],{"class":264},[254,23311,23312,23314],{"class":256,"line":1319},[254,23313,2125],{"class":260},[254,23315,21533],{"class":264},[254,23317,23318,23320,23322],{"class":256,"line":1334},[254,23319,11161],{"class":260},[254,23321,2522],{"class":260},[254,23323,21540],{"class":264},[254,23325,23326],{"class":256,"line":1340},[254,23327,4135],{"class":264},[254,23329,23330],{"class":256,"line":1354},[254,23331,23332],{"class":323},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[254,23334,23335,23337,23339,23341,23343,23345],{"class":256,"line":1360},[254,23336,268],{"class":260},[254,23338,15710],{"class":2103},[254,23340,22553],{"class":264},[254,23342,310],{"class":260},[254,23344,456],{"class":313},[254,23346,1430],{"class":264},[14,23348,23349],{},"输出结果：4",[14,23351,23352],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[21,23354,23355],{"start":175},[24,23356,23357],{},"加上非静态成员函数",[245,23359,23361],{"className":247,"code":23360,"language":249,"meta":174,"style":174},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[251,23362,23363,23370,23374,23380,23388,23392,23396,23400],{"__ignoreMap":174},[254,23364,23365,23367],{"class":256,"line":257},[254,23366,14835],{"class":260},[254,23368,23369],{"class":2103},"  Person\n",[254,23371,23372],{"class":256,"line":175},[254,23373,1686],{"class":264},[254,23375,23376,23378],{"class":256,"line":1319},[254,23377,2125],{"class":260},[254,23379,21533],{"class":264},[254,23381,23382,23384,23386],{"class":256,"line":1334},[254,23383,15050],{"class":260},[254,23385,11526],{"class":2103},[254,23387,2116],{"class":264},[254,23389,23390],{"class":256,"line":1340},[254,23391,2170],{"class":264},[254,23393,23394],{"class":256,"line":1354},[254,23395,2540],{"emptyLinePlaceholder":184},[254,23397,23398],{"class":256,"line":1360},[254,23399,2327],{"class":264},[254,23401,23402],{"class":256,"line":1451},[254,23403,4135],{"class":264},[14,23405,23406],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[21,23408,23409],{"start":1319},[24,23410,23411],{},"加上静态成员函数",[245,23413,23415],{"className":247,"code":23414,"language":249,"meta":174,"style":174},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[251,23416,23417,23423,23427,23433,23441,23445,23449,23453,23464,23468,23472,23476],{"__ignoreMap":174},[254,23418,23419,23421],{"class":256,"line":257},[254,23420,14835],{"class":260},[254,23422,23369],{"class":2103},[254,23424,23425],{"class":256,"line":175},[254,23426,1686],{"class":264},[254,23428,23429,23431],{"class":256,"line":1319},[254,23430,2125],{"class":260},[254,23432,21533],{"class":264},[254,23434,23435,23437,23439],{"class":256,"line":1334},[254,23436,15050],{"class":260},[254,23438,11526],{"class":2103},[254,23440,2116],{"class":264},[254,23442,23443],{"class":256,"line":1340},[254,23444,2170],{"class":264},[254,23446,23447],{"class":256,"line":1354},[254,23448,2540],{"emptyLinePlaceholder":184},[254,23450,23451],{"class":256,"line":1360},[254,23452,2327],{"class":264},[254,23454,23455,23457,23459,23462],{"class":256,"line":1451},[254,23456,11161],{"class":260},[254,23458,22708],{"class":260},[254,23460,23461],{"class":2103}," func1",[254,23463,2116],{"class":264},[254,23465,23466],{"class":256,"line":1457},[254,23467,2170],{"class":264},[254,23469,23470],{"class":256,"line":1469},[254,23471,2540],{"emptyLinePlaceholder":184},[254,23473,23474],{"class":256,"line":1752},[254,23475,2327],{"class":264},[254,23477,23478],{"class":256,"line":1757},[254,23479,4135],{"class":264},[14,23481,23349],{},[14,23483,23484],{},"解释：静态成员函数也不属于类上",[5267,23486,7815],{},{"title":174,"searchDepth":175,"depth":175,"links":23488},[23489,23495],{"id":14786,"depth":175,"text":14787,"children":23490},[23491,23492,23493,23494],{"id":14790,"depth":1319,"text":14791},{"id":15515,"depth":1319,"text":15516},{"id":15687,"depth":1319,"text":15688},{"id":16146,"depth":1319,"text":16147},{"id":18518,"depth":175,"text":18519,"children":23496},[23497,23498,23499,23500,23501,23502,23503,23504,23505],{"id":18530,"depth":1319,"text":18531},{"id":18823,"depth":1319,"text":18824},{"id":19314,"depth":1319,"text":19315},{"id":20411,"depth":1319,"text":20412},{"id":20834,"depth":1319,"text":20835},{"id":21313,"depth":1319,"text":21314},{"id":21688,"depth":1319,"text":21689},{"id":22101,"depth":1319,"text":22102},{"id":23038,"depth":1319,"text":23039},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":14751,"description":23506},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":23513,"title":249,"body":23514,"description":23518,"extension":181,"meta":23519,"navigation":184,"path":23520,"seo":23521,"stem":23522,"__hash__":23523},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":23515,"toc":23516},[],{"title":174,"searchDepth":175,"depth":175,"links":23517},[],null,{"category":183},"\u002Fwiki\u002F2026-05-24-c++",{"title":249,"description":23518},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":23525,"title":23526,"body":23527,"description":174,"extension":181,"meta":24117,"navigation":184,"path":24118,"seo":24119,"stem":24120,"__hash__":24121},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":23528,"toc":24099},[23529,23532,23536,23539,23542,23545,23563,23568,23571,23574,23577,23580,23585,23588,23593,23596,23599,23603,23606,23609,23615,23618,23636,23640,23644,23647,23652,23655,23659,23662,23675,23678,23682,23685,23688,23691,23716,23719,23728,23739,23754,23786,23790,23797,23805,23809,23812,23815,23820,23824,23827,23830,23835,23838,23842,23845,23848,23853,23856,23860,23865,23869,23936,23940,23943,23946,23949,23952,23955,23961,23982,23985,23999,24007,24011,24014,24017,24022,24025,24030,24035,24038,24041,24046,24051,24054,24059,24064,24067,24072,24077,24080,24083,24088,24091,24096],[10,23530,23526],{"id":23531},"_1强化学习基本认识",[34,23533,23535],{"id":23534},"_11什么是强化学习","1.1.什么是强化学习",[14,23537,23538],{},"强化学习有两部分组成：智能体和环境；",[14,23540,23541],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[14,23543,23544],{},"强化学习与监督学习的区别:",[21,23546,23547,23550,23553,23556],{},[24,23548,23549],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[24,23551,23552],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[24,23554,23555],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[24,23557,23558,23559,23562],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[414,23560,23561],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[14,23564,23565],{},[1602,23566],{"alt":174,"src":23567},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[14,23569,23570],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[14,23572,23573],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[14,23575,23576],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[14,23578,23579],{},"获取奖励",[14,23581,23582],{},[1602,23583],{"alt":174,"src":23584},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[14,23586,23587],{},"强化学习可以分成标准强化学习和深度强化学习",[14,23589,23590],{},[1602,23591],{"alt":174,"src":23592},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[14,23594,23595],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[14,23597,23598],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[34,23600,23602],{"id":23601},"_12强化学习应用场景","1.2.强化学习应用场景",[14,23604,23605],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[14,23607,23608],{},"具身智能中的应用",[14,23610,23611,23614],{},[414,23612,23613],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[14,23616,23617],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[14,23619,23620,23621,23624,23625,23628,23629,23632,23633],{},"机器人是",[414,23622,23623],{},"躯体","，深度学习是",[414,23626,23627],{},"神经元****网络","，VLA是",[414,23630,23631],{},"通用的行为逻辑","，而强化学习是",[414,23634,23635],{},"教练",[34,23637,23639],{"id":23638},"_13序列决策","1.3.序列决策",[225,23641,23643],{"id":23642},"_131智能体与环境","1.3.1.智能体与环境",[14,23645,23646],{},"强化学习研究的问题是智能体agent与环境交互的问题",[14,23648,23649],{},[1602,23650],{"alt":174,"src":23651},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[14,23653,23654],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[225,23656,23658],{"id":23657},"_132奖励","1.3.2.奖励",[14,23660,23661],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[14,23663,23664,23665,23674],{},"取某个策略的表现如何。强化学习的目的就是",[414,23666,23667,23668,23673],{},"最大化",[414,23669,23670],{},[414,23671,23672],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[14,23676,23677],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[225,23679,23681],{"id":23680},"_133序列决策","1.3.3.序列决策",[14,23683,23684],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[14,23686,23687],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[14,23689,23690],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[14,23692,23693,23697,23698,23700,23701,23703,23704,23706,23707,13936,23710,13936,23713],{},[23694,23695,23696],"em",{},"Ht"," = ",[23694,23699,860],{},"1*, a",[23694,23702,482],{},", r",[23694,23705,482],{},", . . . ,* ",[23694,23708,23709],{},"ot",[23694,23711,23712],{},", at ,",[23694,23714,23715],{},"rt",[14,23717,23718],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[14,23720,23721,23697,23724,1798,23726,693],{},[23694,23722,23723],{},"st",[23694,23725,317],{},[23694,23727,23696],{},[14,23729,23730,23731,23734,23735,23738],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[414,23732,23733],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[414,23736,23737],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[14,23740,23741,23742,23745,23746,23749,23750,23753],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[414,23743,23744],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[414,23747,23748],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[23694,23751,23752],{},"S, A, T, R, Ω, O, γ",")。",[14,23755,23756,23757,23759,23760,23762,23763,265,23765,23768,23769,23771,23772,265,23775,23778,23779,23781,23782,23785],{},"其中 ",[23694,23758,953],{}," 表示状态空间，为隐变量，",[23694,23761,497],{}," 为动作空间，",[23694,23764,978],{},[23694,23766,23767],{},"s ′ |s, a",") 为状态转移概率，",[23694,23770,928],{}," 为奖励函数，",[23694,23773,23774],{},"Ω",[23694,23776,23777],{},"o|s, a",") 为观测概率，",[23694,23780,854],{}," 为观测空间，",[23694,23783,23784],{},"γ"," 为折扣因子。",[34,23787,23789],{"id":23788},"_14动作空间","1.4.动作空间",[14,23791,23792,23793,23796],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[414,23794,23795],{},"动作空间"," ，动作空间分为:",[21,23798,23799,23802],{},[24,23800,23801],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[24,23803,23804],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[34,23806,23808],{"id":23807},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[14,23810,23811],{},"由策略、价值函数、模型三部分组成",[14,23813,23814],{},"这三者组成马尔可夫决策过程",[14,23816,23817],{},[1602,23818],{"alt":174,"src":23819},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[225,23821,23823],{"id":23822},"_151策略","1.5.1.策略",[14,23825,23826],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[14,23828,23829],{},"策略可分为两种：",[14,23831,23832],{},[1602,23833],{"alt":174,"src":23834},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[14,23836,23837],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[225,23839,23841],{"id":23840},"_152价值函数","1.5.2.价值函数",[14,23843,23844],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[14,23846,23847],{},"价值函数中有一个折扣因子，类似于存款利息",[14,23849,23850],{},[1602,23851],{"alt":174,"src":23852},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[14,23854,23855],{},"进入某个状态采取的最优动作可以通过Q函数得到",[225,23857,23859],{"id":23858},"_153模型","1.5.3.模型",[14,23861,23862],{},[1602,23863],{"alt":174,"src":23864},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[34,23866,23868],{"id":23867},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[402,23870,23871,23882],{},[405,23872,23873],{},[408,23874,23875,23879],{},[411,23876,23878],{"align":23877},"left","类型",[411,23880,23881],{"align":23877},"特点",[449,23883,23884,23894,23904,23914,23926],{},[408,23885,23886,23891],{},[454,23887,23888],{"align":23877},[414,23889,23890],{},"基于价值的智能体",[454,23892,23893],{"align":23877},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[408,23895,23896,23901],{},[454,23897,23898],{"align":23877},[414,23899,23900],{},"基于策略的智能体",[454,23902,23903],{"align":23877},"直接学习策略，没有学习价值函数",[408,23905,23906,23911],{},[454,23907,23908],{"align":23877},[414,23909,23910],{},"演员-评论员智能体",[454,23912,23913],{"align":23877},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[408,23915,23916,23921],{},[454,23917,23918],{"align":23877},[414,23919,23920],{},"有模型强化学习智能体",[454,23922,23923],{"align":23877},[1602,23924],{"alt":174,"src":23925},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[408,23927,23928,23933],{},[454,23929,23930],{"align":23877},[414,23931,23932],{},"免模型强化学习智能体",[454,23934,23935],{"align":23877},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[34,23937,23939],{"id":23938},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[14,23941,23942],{},"学习和规划是序列决策的两个基本问题",[14,23944,23945],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[14,23947,23948],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[14,23950,23951],{},"强化学习用到的库：Gym",[14,23953,23954],{},"Gym可以检验强化学习算法的优劣",[14,23956,23957,23960],{},[414,23958,23959],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[245,23962,23966],{"className":23963,"code":23964,"language":23965,"meta":174,"style":174},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[251,23967,23968],{"__ignoreMap":174},[254,23969,23970,23973,23976,23979],{"class":256,"line":257},[254,23971,23972],{"class":2103},"pip",[254,23974,23975],{"class":369}," install",[254,23977,23978],{"class":369}," gym==",[254,23980,23981],{"class":313},"0.25.2\n",[14,23983,23984],{},"显示图形界面需要",[245,23986,23988],{"className":23963,"code":23987,"language":23965,"meta":174,"style":174},"pip install pygame\n",[251,23989,23990],{"__ignoreMap":174},[254,23991,23992,23994,23996],{"class":256,"line":257},[254,23993,23972],{"class":2103},[254,23995,23975],{"class":369},[254,23997,23998],{"class":369}," pygame\n",[14,24000,24001,24002],{},"有关Gym库的相关文档介绍：",[42,24003,24006],{"href":24004,"rel":24005},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[151],"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[34,24008,24010],{"id":24009},"_18一些补充基础概念","1.8.一些补充基础概念",[14,24012,24013],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[14,24015,24016],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[14,24018,24019],{},[1602,24020],{"alt":174,"src":24021},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[14,24023,24024],{},"折扣率需要自己来设定",[14,24026,24027],{},[1602,24028],{"alt":174,"src":24029},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[21,24031,24032],{},[24,24033,24034],{},"状态转移函数：",[14,24036,24037],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[14,24039,24040],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[14,24042,24043],{},[1602,24044],{"alt":174,"src":24045},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[21,24047,24048],{"start":175},[24,24049,24050],{},"动作价值函数：",[14,24052,24053],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[14,24055,24056],{},[1602,24057],{"alt":174,"src":24058},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[21,24060,24061],{"start":1319},[24,24062,24063],{},"最优动作价值函数：",[14,24065,24066],{},"这个函数是对QΠ关于策略Π求最大化，表示不管用什么样的策略函数Π，要使agent在当前状态St下做动作at，回报Ut的期望顶多为Q*，而且Q*函数跟策略函数中的Π是无关的，只要agent现在做了动作a，那么Q*(St,at)就是最好的结果，即使现在你将策略函数Π改进的再好，获得的期望汇报Ut也不可能比Q*(St,at)更好；Q*反映了基于当前状态St做出at的好坏程度，也就是说Q*函数可以指导agent做决策：agent观测当前的状态st，Q*函数会给所有的动作打分，agent会基于这个分数来做决策，这样期望回报会最大化",[14,24068,24069],{},[1602,24070],{"alt":174,"src":24071},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[21,24073,24074],{"start":1334},[24,24075,24076],{},"状态价值函数:",[14,24078,24079],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[14,24081,24082],{},"它衡量的是“一个具体动作”的长期价值",[14,24084,24085],{},[1602,24086],{"alt":174,"src":24087},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[14,24089,24090],{},"几个价值函数之间的比较：",[14,24092,24093],{},[1602,24094],{"alt":174,"src":24095},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[5267,24097,24098],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":174,"searchDepth":175,"depth":175,"links":24100},[24101,24102,24103,24108,24109,24114,24115,24116],{"id":23534,"depth":175,"text":23535},{"id":23601,"depth":175,"text":23602},{"id":23638,"depth":175,"text":23639,"children":24104},[24105,24106,24107],{"id":23642,"depth":1319,"text":23643},{"id":23657,"depth":1319,"text":23658},{"id":23680,"depth":1319,"text":23681},{"id":23788,"depth":175,"text":23789},{"id":23807,"depth":175,"text":23808,"children":24110},[24111,24112,24113],{"id":23822,"depth":1319,"text":23823},{"id":23840,"depth":1319,"text":23841},{"id":23858,"depth":1319,"text":23859},{"id":23867,"depth":175,"text":23868},{"id":23938,"depth":175,"text":23939},{"id":24009,"depth":175,"text":24010},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":23526,"description":174},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":24123,"title":24124,"body":24125,"description":24132,"extension":181,"meta":24143,"navigation":184,"path":24144,"seo":24145,"stem":24146,"__hash__":24147},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":24126,"toc":24141},[24127,24130,24133,24138],[10,24128,24124],{"id":24129},"_2马尔可夫决策过程",[14,24131,24132],{},"这是强化学习的基本框架",[14,24134,24135],{},[1602,24136],{"alt":174,"src":24137},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[14,24139,24140],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":174,"searchDepth":175,"depth":175,"links":24142},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":24124,"description":24132},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":24149,"title":24150,"body":24151,"description":174,"extension":181,"meta":24267,"navigation":184,"path":24268,"seo":24269,"stem":24270,"__hash__":24271},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":24152,"toc":24262},[24153,24156,24160,24163,24168,24173,24176,24181,24184,24189,24192,24196,24201,24204,24209,24214,24219,24222,24226,24231,24234,24239,24244,24249,24254,24257],[10,24154,24150],{"id":24155},"_3动作价值函数",[34,24157,24159],{"id":24158},"_31dqn","3.1.DQN",[14,24161,24162],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[14,24164,24165],{},[1602,24166],{"alt":174,"src":24167},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[14,24169,24170],{},[1602,24171],{"alt":174,"src":24172},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[14,24174,24175],{},"DQN算法的描述：",[14,24177,24178],{},[1602,24179],{"alt":174,"src":24180},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[14,24182,24183],{},"这里的Dense指的是全连接层",[14,24185,24186],{},[1602,24187],{"alt":174,"src":24188},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[14,24190,24191],{},"当前观测的状态为St，用DQN把St作为输入，给所有的动作打分，选出动作最高的动作作为at，agent做出at动作后，环境会改变状态，用状态转移函数p来随机抽一个新的状态st+1，环境还会告诉我们这一步的奖励Rt，这个奖励可以+-0，奖励是强化学习中的监督信号，DQN要靠这些奖励来训练，有了新的状态St+1，DQN会再对所有的动作打分，agent选择分数最高的动作作为at+1，agent执行at+1后，环境会再更新状态s和再给一个奖励R，然后会继续重复之前的动作 训练DQN的最常用方法是TD算法",[34,24193,24195],{"id":24194},"_32dqn的举例","3.2.DQN的举例",[14,24197,24198],{},[1602,24199],{"alt":174,"src":24200},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[14,24202,24203],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[14,24205,24206],{},[1602,24207],{"alt":174,"src":24208},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[14,24210,24211],{},[1602,24212],{"alt":174,"src":24213},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[14,24215,24216],{},[1602,24217],{"alt":174,"src":24218},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[14,24220,24221],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[34,24223,24225],{"id":24224},"_33td算法","3.3.TD算法",[14,24227,24228],{},[1602,24229],{"alt":174,"src":24230},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[14,24232,24233],{},"强化学习TD算法公式的粗略解释：",[14,24235,24236],{},[1602,24237],{"alt":174,"src":24238},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[14,24240,24241],{},[1602,24242],{"alt":174,"src":24243},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[14,24245,24246],{},[1602,24247],{"alt":174,"src":24248},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[14,24250,24251],{},[1602,24252],{"alt":174,"src":24253},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[14,24255,24256],{},"TD算法总结：",[14,24258,24259],{},[1602,24260],{"alt":174,"src":24261},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":174,"searchDepth":175,"depth":175,"links":24263},[24264,24265,24266],{"id":24158,"depth":175,"text":24159},{"id":24194,"depth":175,"text":24195},{"id":24224,"depth":175,"text":24225},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":24150,"description":174},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24273,"title":24274,"body":24275,"description":174,"extension":181,"meta":24508,"navigation":184,"path":24509,"seo":24510,"stem":24511,"__hash__":24512},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24276,"toc":24504},[24277,24280,24284,24287,24290,24295,24300,24303,24308,24313,24316,24321,24324,24329,24332,24337,24340,24345,24348,24353,24358,24361,24366,24369,24372,24377,24380,24385,24390,24394,24397,24400,24405,24410,24413,24418,24423,24426,24431,24434,24437,24442,24445,24450,24453,24458,24463,24466,24471,24476,24479,24484,24487,24492,24495],[10,24278,24274],{"id":24279},"_4策略学习",[34,24281,24283],{"id":24282},"_41概念描述","4.1.概念描述",[14,24285,24286],{},"用神经网络（策略网络）近似策略函数",[14,24288,24289],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[14,24291,24292],{},[1602,24293],{"alt":174,"src":24294},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[14,24296,24297],{},[1602,24298],{"alt":174,"src":24299},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[14,24301,24302],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[14,24304,24305],{},[1602,24306],{"alt":174,"src":24307},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[14,24309,24310],{},[1602,24311],{"alt":174,"src":24312},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[14,24314,24315],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[14,24317,24318],{},[1602,24319],{"alt":174,"src":24320},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[14,24322,24323],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[14,24325,24326],{},[1602,24327],{"alt":174,"src":24328},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[14,24330,24331],{},"改进theta要用到策略梯度算法",[14,24333,24334],{},[1602,24335],{"alt":174,"src":24336},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[14,24338,24339],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[14,24341,24342],{},[1602,24343],{"alt":174,"src":24344},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[14,24346,24347],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[14,24349,24350],{},[1602,24351],{"alt":174,"src":24352},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[14,24354,24355],{},[1602,24356],{"alt":174,"src":24357},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[14,24359,24360],{},"梯度公式总结：",[14,24362,24363],{},[1602,24364],{"alt":174,"src":24365},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[14,24367,24368],{},"两个公式的分别应用场景：",[14,24370,24371],{},"对于离散的动作：",[14,24373,24374],{},[1602,24375],{"alt":174,"src":24376},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[14,24378,24379],{},"对于连续的动作：",[14,24381,24382],{},[1602,24383],{"alt":174,"src":24384},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[14,24386,24387],{},[1602,24388],{"alt":174,"src":24389},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[34,24391,24393],{"id":24392},"_42概率梯度算法总结","4.2.概率梯度算法总结",[14,24395,24396],{},"使用蒙特卡洛来近似计算策略梯度",[14,24398,24399],{},"蒙特卡洛法的解释如下：",[14,24401,24402],{},[1602,24403],{"alt":174,"src":24404},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[14,24406,24407],{},[1602,24408],{"alt":174,"src":24409},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[14,24411,24412],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[21,24414,24415],{},[24,24416,24417],{},"方法一：reinforce算法",[14,24419,24420],{},[1602,24421],{"alt":174,"src":24422},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[14,24424,24425],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[21,24427,24428],{"start":175},[24,24429,24430],{},"方法二：actor-critic算法",[14,24432,24433],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[14,24435,24436],{},"两个网络的构建：",[14,24438,24439],{},[1602,24440],{"alt":174,"src":24441},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[14,24443,24444],{},"actor网路：",[14,24446,24447],{},[1602,24448],{"alt":174,"src":24449},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[14,24451,24452],{},"critic网络",[14,24454,24455],{},[1602,24456],{"alt":174,"src":24457},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[21,24459,24460],{"start":1319},[24,24461,24462],{},"网络的训练",[14,24464,24465],{},"网络描述",[14,24467,24468],{},[1602,24469],{"alt":174,"src":24470},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[14,24472,24473],{},[1602,24474],{"alt":174,"src":24475},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[14,24477,24478],{},"TD算法更新梯度：",[14,24480,24481],{},[1602,24482],{"alt":174,"src":24483},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[14,24485,24486],{},"策略网络更新梯度：",[14,24488,24489],{},[1602,24490],{"alt":174,"src":24491},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[14,24493,24494],{},"训练整个流程的具体描述：",[14,24496,24497,24500,24501],{},[1602,24498],{"alt":174,"src":24499},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[1602,24502],{"alt":174,"src":24503},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":174,"searchDepth":175,"depth":175,"links":24505},[24506,24507],{"id":24282,"depth":175,"text":24283},{"id":24392,"depth":175,"text":24393},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24274,"description":174},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":24514,"title":24515,"body":24516,"description":24523,"extension":181,"meta":24573,"navigation":184,"path":24574,"seo":24575,"stem":24576,"__hash__":24577},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":24517,"toc":24569},[24518,24521,24524,24528,24531,24536,24540,24543,24548,24551,24556,24561,24564],[10,24519,24515],{"id":24520},"_5alphago算法",[14,24522,24523],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[34,24525,24527],{"id":24526},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[14,24529,24530],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[14,24532,24533],{},[1602,24534],{"alt":174,"src":24535},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[34,24537,24539],{"id":24538},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[14,24541,24542],{},"采用强化学习的方式训练策略网络",[14,24544,24545],{},[1602,24546],{"alt":174,"src":24547},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[14,24549,24550],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[14,24552,24553],{},[1602,24554],{"alt":174,"src":24555},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[14,24557,24558],{},[1602,24559],{"alt":174,"src":24560},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[14,24562,24563],{},"强化学习训练策略网络的总结：",[14,24565,24566],{},[1602,24567],{"alt":174,"src":24568},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":174,"searchDepth":175,"depth":175,"links":24570},[24571,24572],{"id":24526,"depth":175,"text":24527},{"id":24538,"depth":175,"text":24539},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":24515,"description":24523},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":24579,"title":24580,"body":24581,"description":24588,"extension":181,"meta":24591,"navigation":184,"path":24592,"seo":24593,"stem":24594,"__hash__":24595},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":24582,"toc":24589},[24583,24586],[10,24584,24580],{"id":24585},"_6价值网络",[14,24587,24588],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":174,"searchDepth":175,"depth":175,"links":24590},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":24580,"description":24588},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":24597,"title":24598,"body":24599,"description":24603,"extension":181,"meta":24604,"navigation":184,"path":24605,"seo":24606,"stem":24607,"__hash__":24608},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":24600,"toc":24601},[],{"title":174,"searchDepth":175,"depth":175,"links":24602},[],"记录自己的强化学习笔记。",{"category":183},"\u002Fwiki\u002F2025-12-04",{"title":24598,"description":24603},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":24610,"title":24611,"body":24612,"description":23518,"extension":181,"meta":24651,"navigation":184,"path":24652,"seo":24653,"stem":24654,"__hash__":24655},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":24613,"toc":24649},[24614,24617,24620,24626,24629,24635,24638,24643,24646],[10,24615,24611],{"id":24616},"_1-项目概览与官方资源",[14,24618,24619],{},"官方文档：",[14,24621,24622],{},[42,24623,24624],{"href":24624,"rel":24625},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[151],[14,24627,24628],{},"官方代码仓库：",[14,24630,24631],{},[42,24632,24633],{"href":24633,"rel":24634},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[151],[14,24636,24637],{},"复现大体流程：",[14,24639,24640],{},[1602,24641],{"alt":174,"src":24642},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[14,24644,24645],{},"本教程的目标是打通这条链路：",[14,24647,24648],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":174,"searchDepth":175,"depth":175,"links":24650},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":24611,"description":23518},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":24657,"title":24658,"body":24659,"description":23518,"extension":181,"meta":24775,"navigation":184,"path":24776,"seo":24777,"stem":24778,"__hash__":24779},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":24660,"toc":24770},[24661,24664,24668,24671,24678,24682,24685,24694,24704,24708,24738,24741,24767],[10,24662,24658],{"id":24663},"_2-环境准备与设备连接",[34,24665,24667],{"id":24666},"_21-系统与环境","2.1 系统与环境",[14,24669,24670],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[14,24672,24673,24674,24677],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[251,24675,24676],{},"lerobot"," 依赖。",[34,24679,24681],{"id":24680},"_22-机械臂串口识别","2.2 机械臂串口识别",[14,24683,24684],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[245,24686,24688],{"className":23963,"code":24687,"language":23965,"meta":174,"style":174},"lerobot-find-out\n",[251,24689,24690],{"__ignoreMap":174},[254,24691,24692],{"class":256,"line":257},[254,24693,24687],{"class":2103},[14,24695,24696,24697,477,24700,24703],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[251,24698,24699],{},"\u002Fdev\u002FttyACM0",[251,24701,24702],{},"\u002Fdev\u002FttyACM1","）。",[34,24705,24707],{"id":24706},"_23-串口授权","2.3 串口授权",[245,24709,24711],{"className":23963,"code":24710,"language":23965,"meta":174,"style":174},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[251,24712,24713,24727],{"__ignoreMap":174},[254,24714,24715,24718,24721,24724],{"class":256,"line":257},[254,24716,24717],{"class":2103},"sudo",[254,24719,24720],{"class":369}," chmod",[254,24722,24723],{"class":313}," 666",[254,24725,24726],{"class":369}," \u002Fdev\u002FttyACM0\n",[254,24728,24729,24731,24733,24735],{"class":256,"line":175},[254,24730,24717],{"class":2103},[254,24732,24720],{"class":369},[254,24734,24723],{"class":313},[254,24736,24737],{"class":369}," \u002Fdev\u002FttyACM1\n",[14,24739,24740],{},"说明：",[1271,24742,24743,24748,24754,24764],{},[24,24744,24745,24747],{},[251,24746,24717],{},"：以 root 权限执行命令。",[24,24749,24750,24753],{},[251,24751,24752],{},"chmod","：修改设备节点权限。",[24,24755,24756,24759,24760,24763],{},[251,24757,24758],{},"666","：",[251,24761,24762],{},"rw-rw-rw-","，所有用户可读写。",[24,24765,24766],{},"串口号必须替换为你机器上的真实端口。",[5267,24768,24769],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":174,"searchDepth":175,"depth":175,"links":24771},[24772,24773,24774],{"id":24666,"depth":175,"text":24667},{"id":24680,"depth":175,"text":24681},{"id":24706,"depth":175,"text":24707},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":24658,"description":23518},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":24781,"title":24782,"body":24783,"description":23518,"extension":181,"meta":24944,"navigation":184,"path":24945,"seo":24946,"stem":24947,"__hash__":24948},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":24784,"toc":24940},[24785,24789,24793,24799,24802,24859,24862,24866,24869,24937],[10,24786,24788],{"id":24787},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[34,24790,24792],{"id":24791},"_31-配置电机-id","3.1 配置电机 ID",[14,24794,24795,24796,24798],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[251,24797,482],{},"，需要改成机械臂链路里不冲突的编号。",[14,24800,24801],{},"方式一：用 LeRobot 命令逐步写入。",[245,24803,24805],{"className":23963,"code":24804,"language":23965,"meta":174,"style":174},"# 主臂舵机配置 ID\nlerobot-setup-motors \\\n  --teleop.type=so101_leader \\\n  --teleop.port=\u002Fdev\u002FttyACM0\n\n# 从臂舵机配置 ID\nlerobot-setup-motors \\\n  --robot.type=so101_follower \\\n  --robot.port=\u002Fdev\u002FttyACM1\n",[251,24806,24807,24812,24820,24827,24832,24836,24841,24847,24854],{"__ignoreMap":174},[254,24808,24809],{"class":256,"line":257},[254,24810,24811],{"class":323},"# 主臂舵机配置 ID\n",[254,24813,24814,24817],{"class":256,"line":175},[254,24815,24816],{"class":2103},"lerobot-setup-motors",[254,24818,24819],{"class":313}," \\\n",[254,24821,24822,24825],{"class":256,"line":1319},[254,24823,24824],{"class":313},"  --teleop.type=so101_leader",[254,24826,24819],{"class":313},[254,24828,24829],{"class":256,"line":1334},[254,24830,24831],{"class":313},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[254,24833,24834],{"class":256,"line":1340},[254,24835,2540],{"emptyLinePlaceholder":184},[254,24837,24838],{"class":256,"line":1354},[254,24839,24840],{"class":323},"# 从臂舵机配置 ID\n",[254,24842,24843,24845],{"class":256,"line":1360},[254,24844,24816],{"class":2103},[254,24846,24819],{"class":313},[254,24848,24849,24852],{"class":256,"line":1451},[254,24850,24851],{"class":313},"  --robot.type=so101_follower",[254,24853,24819],{"class":313},[254,24855,24856],{"class":256,"line":1457},[254,24857,24858],{"class":313},"  --robot.port=\u002Fdev\u002FttyACM1\n",[14,24860,24861],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[34,24863,24865],{"id":24864},"_32-机械臂校准","3.2 机械臂校准",[14,24867,24868],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[245,24870,24872],{"className":23963,"code":24871,"language":23965,"meta":174,"style":174},"# 主臂校准\nlerobot-calibrate \\\n  --teleop.type=so101_leader \\\n  --teleop.port=\u002Fdev\u002FttyACM0 \\\n  --teleop.id=my_awesome_leader_arm\n\n# 从臂校准\nlerobot-calibrate \\\n  --robot.type=so101_follower \\\n  --robot.port=\u002Fdev\u002FttyACM1 \\\n  --robot.id=my_awesome_follower_arm\n",[251,24873,24874,24879,24886,24892,24899,24904,24908,24913,24919,24925,24932],{"__ignoreMap":174},[254,24875,24876],{"class":256,"line":257},[254,24877,24878],{"class":323},"# 主臂校准\n",[254,24880,24881,24884],{"class":256,"line":175},[254,24882,24883],{"class":2103},"lerobot-calibrate",[254,24885,24819],{"class":313},[254,24887,24888,24890],{"class":256,"line":1319},[254,24889,24824],{"class":313},[254,24891,24819],{"class":313},[254,24893,24894,24897],{"class":256,"line":1334},[254,24895,24896],{"class":313},"  --teleop.port=\u002Fdev\u002FttyACM0",[254,24898,24819],{"class":313},[254,24900,24901],{"class":256,"line":1340},[254,24902,24903],{"class":313},"  --teleop.id=my_awesome_leader_arm\n",[254,24905,24906],{"class":256,"line":1354},[254,24907,2540],{"emptyLinePlaceholder":184},[254,24909,24910],{"class":256,"line":1360},[254,24911,24912],{"class":323},"# 从臂校准\n",[254,24914,24915,24917],{"class":256,"line":1451},[254,24916,24883],{"class":2103},[254,24918,24819],{"class":313},[254,24920,24921,24923],{"class":256,"line":1457},[254,24922,24851],{"class":313},[254,24924,24819],{"class":313},[254,24926,24927,24930],{"class":256,"line":1469},[254,24928,24929],{"class":313},"  --robot.port=\u002Fdev\u002FttyACM1",[254,24931,24819],{"class":313},[254,24933,24934],{"class":256,"line":1752},[254,24935,24936],{"class":313},"  --robot.id=my_awesome_follower_arm\n",[5267,24938,24939],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":174,"searchDepth":175,"depth":175,"links":24941},[24942,24943],{"id":24791,"depth":175,"text":24792},{"id":24864,"depth":175,"text":24865},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":24782,"description":23518},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":24950,"title":24951,"body":24952,"description":23518,"extension":181,"meta":25143,"navigation":184,"path":25144,"seo":25145,"stem":25146,"__hash__":25147},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":24953,"toc":25139},[24954,24957,24961,25008,25012,25025,25088,25091,25136],[10,24955,24951],{"id":24956},"_4-遥操与相机接入",[34,24958,24960],{"id":24959},"_41-不带相机遥操","4.1 不带相机遥操",[245,24962,24964],{"className":23963,"code":24963,"language":23965,"meta":174,"style":174},"lerobot-teleoperate \\\n  --robot.type=so101_follower \\\n  --robot.port=\u002Fdev\u002FttyACM1 \\\n  --robot.id=my_awesome_follower_arm \\\n  --teleop.type=so101_leader \\\n  --teleop.port=\u002Fdev\u002FttyACM0 \\\n  --teleop.id=my_awesome_leader_arm\n",[251,24965,24966,24973,24979,24985,24992,24998,25004],{"__ignoreMap":174},[254,24967,24968,24971],{"class":256,"line":257},[254,24969,24970],{"class":2103},"lerobot-teleoperate",[254,24972,24819],{"class":313},[254,24974,24975,24977],{"class":256,"line":175},[254,24976,24851],{"class":313},[254,24978,24819],{"class":313},[254,24980,24981,24983],{"class":256,"line":1319},[254,24982,24929],{"class":313},[254,24984,24819],{"class":313},[254,24986,24987,24990],{"class":256,"line":1334},[254,24988,24989],{"class":313},"  --robot.id=my_awesome_follower_arm",[254,24991,24819],{"class":313},[254,24993,24994,24996],{"class":256,"line":1340},[254,24995,24824],{"class":313},[254,24997,24819],{"class":313},[254,24999,25000,25002],{"class":256,"line":1354},[254,25001,24896],{"class":313},[254,25003,24819],{"class":313},[254,25005,25006],{"class":256,"line":1360},[254,25007,24903],{"class":313},[34,25009,25011],{"id":25010},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[245,25013,25015],{"className":23963,"code":25014,"language":23965,"meta":174,"style":174},"lerobot-find-cameras opencv\n",[251,25016,25017],{"__ignoreMap":174},[254,25018,25019,25022],{"class":256,"line":257},[254,25020,25021],{"class":2103},"lerobot-find-cameras",[254,25023,25024],{"class":369}," opencv\n",[245,25026,25028],{"className":23963,"code":25027,"language":23965,"meta":174,"style":174},"lerobot-teleoperate \\\n  --robot.type=so101_follower \\\n  --robot.port=\u002Fdev\u002FttyACM1 \\\n  --robot.id=my_awesome_follower_arm \\\n  --robot.cameras=\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\" \\\n  --teleop.type=so101_leader \\\n  --teleop.port=\u002Fdev\u002FttyACM0 \\\n  --teleop.id=my_awesome_leader_arm \\\n  --display_data=true\n",[251,25029,25030,25036,25042,25048,25054,25064,25070,25076,25083],{"__ignoreMap":174},[254,25031,25032,25034],{"class":256,"line":257},[254,25033,24970],{"class":2103},[254,25035,24819],{"class":313},[254,25037,25038,25040],{"class":256,"line":175},[254,25039,24851],{"class":313},[254,25041,24819],{"class":313},[254,25043,25044,25046],{"class":256,"line":1319},[254,25045,24929],{"class":313},[254,25047,24819],{"class":313},[254,25049,25050,25052],{"class":256,"line":1334},[254,25051,24989],{"class":313},[254,25053,24819],{"class":313},[254,25055,25056,25059,25062],{"class":256,"line":1340},[254,25057,25058],{"class":313},"  --robot.cameras=",[254,25060,25061],{"class":369},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[254,25063,24819],{"class":313},[254,25065,25066,25068],{"class":256,"line":1354},[254,25067,24824],{"class":313},[254,25069,24819],{"class":313},[254,25071,25072,25074],{"class":256,"line":1360},[254,25073,24896],{"class":313},[254,25075,24819],{"class":313},[254,25077,25078,25081],{"class":256,"line":1451},[254,25079,25080],{"class":313},"  --teleop.id=my_awesome_leader_arm",[254,25082,24819],{"class":313},[254,25084,25085],{"class":256,"line":1457},[254,25086,25087],{"class":313},"  --display_data=true\n",[14,25089,25090],{},"相机参数说明：",[1271,25092,25093,25099,25105,25114,25124,25130],{},[24,25094,25095,25098],{},[251,25096,25097],{},"front","：相机名称。",[24,25100,25101,25104],{},[251,25102,25103],{},"type: opencv","：相机驱动类型。",[24,25106,25107,25110,25111,24703],{},[251,25108,25109],{},"index_or_path","：设备编号或设备路径（如 ",[251,25112,25113],{},"\u002Fdev\u002Fvideo4",[24,25115,25116,25119,25120,25123],{},[251,25117,25118],{},"width"," \u002F ",[251,25121,25122],{},"height","：图像分辨率。",[24,25125,25126,25129],{},[251,25127,25128],{},"fps","：采样帧率。",[24,25131,25132,25135],{},[251,25133,25134],{},"--display_data=true","：启用实时可视化。",[5267,25137,25138],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":174,"searchDepth":175,"depth":175,"links":25140},[25141,25142],{"id":24959,"depth":175,"text":24960},{"id":25010,"depth":175,"text":25011},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":24951,"description":23518},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":25149,"title":25150,"body":25151,"description":23518,"extension":181,"meta":25323,"navigation":184,"path":25324,"seo":25325,"stem":25326,"__hash__":25327},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":25152,"toc":25318},[25153,25157,25161,25166,25171,25174,25216,25222,25226,25275,25280,25284,25287,25295,25300,25305,25310,25315],[10,25154,25156],{"id":25155},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[34,25158,25160],{"id":25159},"_51-生成访问令牌","5.1 生成访问令牌",[14,25162,25163],{},[1602,25164],{"alt":174,"src":25165},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[14,25167,25168],{},[1602,25169],{"alt":174,"src":25170},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[14,25172,25173],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[245,25175,25177],{"className":23963,"code":25176,"language":23965,"meta":174,"style":174},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[251,25178,25179,25192],{"__ignoreMap":174},[254,25180,25181,25184,25187,25189],{"class":256,"line":257},[254,25182,25183],{"class":260},"export",[254,25185,25186],{"class":264}," HF_TOKEN",[254,25188,310],{"class":260},[254,25190,25191],{"class":369},"\"your_huggingface_token\"\n",[254,25193,25194,25197,25200,25203,25206,25208,25211,25213],{"class":256,"line":175},[254,25195,25196],{"class":2103},"hf",[254,25198,25199],{"class":369}," auth",[254,25201,25202],{"class":369}," login",[254,25204,25205],{"class":313}," --token",[254,25207,9865],{"class":369},[254,25209,25210],{"class":264},"$HF_TOKEN",[254,25212,515],{"class":369},[254,25214,25215],{"class":313}," --add-to-git-credential\n",[14,25217,25218,25221],{},[251,25219,25220],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[34,25223,25225],{"id":25224},"_52-验证登录","5.2 验证登录",[245,25227,25229],{"className":23963,"code":25228,"language":23965,"meta":174,"style":174},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[251,25230,25231,25262],{"__ignoreMap":174},[254,25232,25233,25236,25238,25241,25243,25245,25248,25251,25254,25257,25260],{"class":256,"line":257},[254,25234,25235],{"class":264},"HF_USER",[254,25237,310],{"class":260},[254,25239,25240],{"class":264},"$(",[254,25242,25196],{"class":2103},[254,25244,25199],{"class":369},[254,25246,25247],{"class":369}," whoami",[254,25249,25250],{"class":260}," |",[254,25252,25253],{"class":2103}," head",[254,25255,25256],{"class":313}," -n",[254,25258,25259],{"class":313}," 1",[254,25261,271],{"class":264},[254,25263,25264,25267,25269,25272],{"class":256,"line":175},[254,25265,25266],{"class":313},"echo",[254,25268,9865],{"class":369},[254,25270,25271],{"class":264},"$HF_USER",[254,25273,25274],{"class":369},"\"\n",[14,25276,25277],{},[1602,25278],{"alt":174,"src":25279},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[34,25281,25283],{"id":25282},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[14,25285,25286],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[1271,25288,25289,25292],{},[24,25290,25291],{},"Dataset Repo（用于上传演示数据）",[24,25293,25294],{},"Model Repo（用于上传训练后的 ACT 权重）",[14,25296,25297],{},[1602,25298],{"alt":174,"src":25299},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[14,25301,25302],{},[1602,25303],{"alt":174,"src":25304},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[14,25306,25307],{},[1602,25308],{"alt":174,"src":25309},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[14,25311,25312],{},[1602,25313],{"alt":174,"src":25314},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[5267,25316,25317],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":174,"searchDepth":175,"depth":175,"links":25319},[25320,25321,25322],{"id":25159,"depth":175,"text":25160},{"id":25224,"depth":175,"text":25225},{"id":25282,"depth":175,"text":25283},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":25150,"description":23518},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25329,"title":25330,"body":25331,"description":23518,"extension":181,"meta":25528,"navigation":184,"path":25529,"seo":25530,"stem":25531,"__hash__":25532},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25332,"toc":25523},[25333,25337,25341,25437,25445,25450,25454,25470,25473,25477,25520],[10,25334,25336],{"id":25335},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[34,25338,25340],{"id":25339},"_61-录制示教数据","6.1 录制示教数据",[245,25342,25344],{"className":23963,"code":25343,"language":23965,"meta":174,"style":174},"lerobot-record \\\n  --robot.type=so101_follower \\\n  --robot.port=\u002Fdev\u002FttyACM1 \\\n  --robot.id=my_awesome_follower_arm \\\n  --robot.cameras=\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\" \\\n  --teleop.type=so101_leader \\\n  --teleop.port=\u002Fdev\u002FttyACM0 \\\n  --teleop.id=my_awesome_leader_arm \\\n  --display_data=true \\\n  --dataset.repo_id=\"Embodied-AI-6\u002Fso101_test\" \\\n  --dataset.num_episodes=10 \\\n  --dataset.single_task=\"Grab the green cube\" \\\n  --resume=true\n",[251,25345,25346,25353,25359,25365,25371,25380,25386,25392,25398,25405,25415,25422,25432],{"__ignoreMap":174},[254,25347,25348,25351],{"class":256,"line":257},[254,25349,25350],{"class":2103},"lerobot-record",[254,25352,24819],{"class":313},[254,25354,25355,25357],{"class":256,"line":175},[254,25356,24851],{"class":313},[254,25358,24819],{"class":313},[254,25360,25361,25363],{"class":256,"line":1319},[254,25362,24929],{"class":313},[254,25364,24819],{"class":313},[254,25366,25367,25369],{"class":256,"line":1334},[254,25368,24989],{"class":313},[254,25370,24819],{"class":313},[254,25372,25373,25375,25378],{"class":256,"line":1340},[254,25374,25058],{"class":313},[254,25376,25377],{"class":369},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[254,25379,24819],{"class":313},[254,25381,25382,25384],{"class":256,"line":1354},[254,25383,24824],{"class":313},[254,25385,24819],{"class":313},[254,25387,25388,25390],{"class":256,"line":1360},[254,25389,24896],{"class":313},[254,25391,24819],{"class":313},[254,25393,25394,25396],{"class":256,"line":1451},[254,25395,25080],{"class":313},[254,25397,24819],{"class":313},[254,25399,25400,25403],{"class":256,"line":1457},[254,25401,25402],{"class":313},"  --display_data=true",[254,25404,24819],{"class":313},[254,25406,25407,25410,25413],{"class":256,"line":1469},[254,25408,25409],{"class":313},"  --dataset.repo_id=",[254,25411,25412],{"class":369},"\"Embodied-AI-6\u002Fso101_test\"",[254,25414,24819],{"class":313},[254,25416,25417,25420],{"class":256,"line":1752},[254,25418,25419],{"class":313},"  --dataset.num_episodes=10",[254,25421,24819],{"class":313},[254,25423,25424,25427,25430],{"class":256,"line":1757},[254,25425,25426],{"class":313},"  --dataset.single_task=",[254,25428,25429],{"class":369},"\"Grab the green cube\"",[254,25431,24819],{"class":313},[254,25433,25434],{"class":256,"line":1763},[254,25435,25436],{"class":313},"  --resume=true\n",[1271,25438,25439],{},[24,25440,25441,25444],{},[251,25442,25443],{},"--resume=true","：已有同一数据集时继续追加 episode。",[14,25446,25447],{},[1602,25448],{"alt":174,"src":25449},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[34,25451,25453],{"id":25452},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[245,25455,25457],{"className":23963,"code":25456,"language":23965,"meta":174,"style":174},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[251,25458,25459],{"__ignoreMap":174},[254,25460,25461,25464,25467],{"class":256,"line":257},[254,25462,25463],{"class":2103},"rm",[254,25465,25466],{"class":313}," -rf",[254,25468,25469],{"class":369}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[14,25471,25472],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[34,25474,25476],{"id":25475},"_63-回放指定-episode","6.3 回放指定 episode",[245,25478,25480],{"className":23963,"code":25479,"language":23965,"meta":174,"style":174},"lerobot-replay \\\n  --robot.type=so101_follower \\\n  --robot.port=\u002Fdev\u002FttyACM1 \\\n  --robot.id=my_awesome_follower_arm \\\n  --dataset.repo_id=\"Embodied-AI-6\u002Fso101_test\" \\\n  --dataset.episode=0\n",[251,25481,25482,25489,25495,25501,25507,25515],{"__ignoreMap":174},[254,25483,25484,25487],{"class":256,"line":257},[254,25485,25486],{"class":2103},"lerobot-replay",[254,25488,24819],{"class":313},[254,25490,25491,25493],{"class":256,"line":175},[254,25492,24851],{"class":313},[254,25494,24819],{"class":313},[254,25496,25497,25499],{"class":256,"line":1319},[254,25498,24929],{"class":313},[254,25500,24819],{"class":313},[254,25502,25503,25505],{"class":256,"line":1334},[254,25504,24989],{"class":313},[254,25506,24819],{"class":313},[254,25508,25509,25511,25513],{"class":256,"line":1340},[254,25510,25409],{"class":313},[254,25512,25412],{"class":369},[254,25514,24819],{"class":313},[254,25516,25517],{"class":256,"line":1354},[254,25518,25519],{"class":313},"  --dataset.episode=0\n",[5267,25521,25522],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":174,"searchDepth":175,"depth":175,"links":25524},[25525,25526,25527],{"id":25339,"depth":175,"text":25340},{"id":25452,"depth":175,"text":25453},{"id":25475,"depth":175,"text":25476},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25330,"description":23518},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":25534,"title":25535,"body":25536,"description":23518,"extension":181,"meta":25664,"navigation":184,"path":25665,"seo":25666,"stem":25667,"__hash__":25668},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":25537,"toc":25662},[25538,25542,25605,25608,25655,25660],[10,25539,25541],{"id":25540},"_7-act-模型训练","7. ACT 模型训练",[245,25543,25545],{"className":23963,"code":25544,"language":23965,"meta":174,"style":174},"lerobot-train \\\n  --dataset.repo_id=\"Embodied-AI-6\u002Fso101_test\" \\\n  --policy.type=act \\\n  --output_dir=outputs\u002Ftrain\u002Fact_so101_test \\\n  --job_name=act_so101_test \\\n  --policy.device=cuda \\\n  --wandb.enable=false \\\n  --policy.repo_id=\"Embodied-AI-6\u002Flerobot_new\"\n",[251,25546,25547,25554,25562,25569,25576,25583,25590,25597],{"__ignoreMap":174},[254,25548,25549,25552],{"class":256,"line":257},[254,25550,25551],{"class":2103},"lerobot-train",[254,25553,24819],{"class":313},[254,25555,25556,25558,25560],{"class":256,"line":175},[254,25557,25409],{"class":313},[254,25559,25412],{"class":369},[254,25561,24819],{"class":313},[254,25563,25564,25567],{"class":256,"line":1319},[254,25565,25566],{"class":313},"  --policy.type=act",[254,25568,24819],{"class":313},[254,25570,25571,25574],{"class":256,"line":1334},[254,25572,25573],{"class":313},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[254,25575,24819],{"class":313},[254,25577,25578,25581],{"class":256,"line":1340},[254,25579,25580],{"class":313},"  --job_name=act_so101_test",[254,25582,24819],{"class":313},[254,25584,25585,25588],{"class":256,"line":1354},[254,25586,25587],{"class":313},"  --policy.device=cuda",[254,25589,24819],{"class":313},[254,25591,25592,25595],{"class":256,"line":1360},[254,25593,25594],{"class":313},"  --wandb.enable=false",[254,25596,24819],{"class":313},[254,25598,25599,25602],{"class":256,"line":1451},[254,25600,25601],{"class":313},"  --policy.repo_id=",[254,25603,25604],{"class":369},"\"Embodied-AI-6\u002Flerobot_new\"\n",[14,25606,25607],{},"参数说明：",[1271,25609,25610,25616,25622,25628,25634,25643,25649],{},[24,25611,25612,25615],{},[251,25613,25614],{},"--dataset.repo_id","：训练数据集仓库。",[24,25617,25618,25621],{},[251,25619,25620],{},"--policy.type=act","：策略模型类型为 ACT。",[24,25623,25624,25627],{},[251,25625,25626],{},"--output_dir","：本地训练输出目录。",[24,25629,25630,25633],{},[251,25631,25632],{},"--job_name","：训练任务名称。",[24,25635,25636,25639,25640,24703],{},[251,25637,25638],{},"--policy.device","：训练设备（如 ",[251,25641,25642],{},"cuda",[24,25644,25645,25648],{},[251,25646,25647],{},"--wandb.enable","：是否启用 WandB 可视化。",[24,25650,25651,25654],{},[251,25652,25653],{},"--policy.repo_id","：训练后模型推送目标仓库。",[14,25656,25657],{},[1602,25658],{"alt":174,"src":25659},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[5267,25661,25522],{},{"title":174,"searchDepth":175,"depth":175,"links":25663},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":25535,"description":23518},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":25670,"title":25671,"body":25672,"description":23518,"extension":181,"meta":25759,"navigation":184,"path":25760,"seo":25761,"stem":25762,"__hash__":25763},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":25673,"toc":25757},[25674,25677,25680,25747,25755],[10,25675,25671],{"id":25676},"_8-策略部署与自动采集",[14,25678,25679],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[245,25681,25683],{"className":23963,"code":25682,"language":23965,"meta":174,"style":174},"lerobot-record \\\n  --robot.type=so101_follower \\\n  --robot.port=\u002Fdev\u002FttyACM1 \\\n  --robot.cameras=\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\" \\\n  --robot.id=my_awesome_follower_arm \\\n  --display_data=false \\\n  --dataset.repo_id=\"Embodied-AI-6\u002Fso101_test\" \\\n  --dataset.single_task=\"Grab the green cube\" \\\n  --policy.path=\"Embodied-AI-6\u002Flerobot_new\"\n",[251,25684,25685,25691,25697,25703,25711,25717,25724,25732,25740],{"__ignoreMap":174},[254,25686,25687,25689],{"class":256,"line":257},[254,25688,25350],{"class":2103},[254,25690,24819],{"class":313},[254,25692,25693,25695],{"class":256,"line":175},[254,25694,24851],{"class":313},[254,25696,24819],{"class":313},[254,25698,25699,25701],{"class":256,"line":1319},[254,25700,24929],{"class":313},[254,25702,24819],{"class":313},[254,25704,25705,25707,25709],{"class":256,"line":1334},[254,25706,25058],{"class":313},[254,25708,25377],{"class":369},[254,25710,24819],{"class":313},[254,25712,25713,25715],{"class":256,"line":1340},[254,25714,24989],{"class":313},[254,25716,24819],{"class":313},[254,25718,25719,25722],{"class":256,"line":1354},[254,25720,25721],{"class":313},"  --display_data=false",[254,25723,24819],{"class":313},[254,25725,25726,25728,25730],{"class":256,"line":1360},[254,25727,25409],{"class":313},[254,25729,25412],{"class":369},[254,25731,24819],{"class":313},[254,25733,25734,25736,25738],{"class":256,"line":1451},[254,25735,25426],{"class":313},[254,25737,25429],{"class":369},[254,25739,24819],{"class":313},[254,25741,25742,25745],{"class":256,"line":1457},[254,25743,25744],{"class":313},"  --policy.path=",[254,25746,25604],{"class":369},[1271,25748,25749],{},[24,25750,25751,25754],{},[251,25752,25753],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[5267,25756,25522],{},{"title":174,"searchDepth":175,"depth":175,"links":25758},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":25671,"description":23518},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":25765,"title":25766,"body":25767,"description":23518,"extension":181,"meta":25796,"navigation":184,"path":25797,"seo":25798,"stem":25799,"__hash__":25800},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":25768,"toc":25794},[25769,25773,25776,25782,25785,25791],[10,25770,25772],{"id":25771},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[14,25774,25775],{},"项目地址：",[14,25777,25778],{},[42,25779,25780],{"href":25780,"rel":25781},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[151],[14,25783,25784],{},"参考教程：",[14,25786,25787],{},[42,25788,25789],{"href":25789,"rel":25790},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[151],[14,25792,25793],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":174,"searchDepth":175,"depth":175,"links":25795},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":25766,"description":23518},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":25802,"title":25803,"body":25804,"description":25808,"extension":181,"meta":25809,"navigation":184,"path":25810,"seo":25811,"stem":25812,"__hash__":25813},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":25805,"toc":25806},[],{"title":174,"searchDepth":175,"depth":175,"links":25807},[],"act复现",{"category":183},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":25803,"description":25808},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":25815,"title":25816,"body":25817,"description":174,"extension":181,"meta":26119,"navigation":184,"path":26120,"seo":26121,"stem":26122,"__hash__":26123},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":25818,"toc":26111},[25819,25822,25826,25836,25843,25850,25853,25860,25863,25866,25870,25882,25886,25932,25935,25938,25941,25944,25947,25951,25989,25995,25999,26053,26058,26061,26064,26069,26072,26077,26080,26083,26087,26090,26093,26097],[10,25820,25816],{"id":25821},"_1简介",[225,25823,25825],{"id":25824},"_11什么是-docker","1.1什么是 Docker？",[14,25827,25828,25829,25832,25833],{},"Docker 是一个开源的 ",[414,25830,25831],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[414,25834,25835],{},"一次构建，到处运行。",[14,25837,25838,25839,25842],{},"“ ",[414,25840,25841],{},"一次构建，到处运行"," ”也就是说：",[21,25844,25845],{},[24,25846,25847],{},[414,25848,25849],{},"之前：",[14,25851,25852],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[21,25854,25855],{},[24,25856,25857],{},[414,25858,25859],{},"使用docker后：",[14,25861,25862],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[14,25864,25865],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[225,25867,25869],{"id":25868},"_12它是怎么工作的","1.2.它是怎么工作的？",[1271,25871,25872,25875],{},[24,25873,25874],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[24,25876,25877,25878,25881],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[414,25879,25880],{},"无论在哪运行都一样稳定"," 。",[225,25883,25885],{"id":25884},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[402,25887,25888,25898],{},[405,25889,25890],{},[408,25891,25892,25895],{},[411,25893,25894],{"align":23877},"概念",[411,25896,25897],{"align":23877},"解释",[449,25899,25900,25908,25916,25924],{},[408,25901,25902,25905],{},[454,25903,25904],{"align":23877},"镜像",[454,25906,25907],{"align":23877},"Image，运行容器的模板，像是一个应用快照",[408,25909,25910,25913],{},[454,25911,25912],{"align":23877},"容器",[454,25914,25915],{"align":23877},"Container，运行中的镜像实例，有自己的文件系统、网络等",[408,25917,25918,25921],{},[454,25919,25920],{"align":23877},"Dockerfile",[454,25922,25923],{"align":23877},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[408,25925,25926,25929],{},[454,25927,25928],{"align":23877},"仓库",[454,25930,25931],{"align":23877},"Registry，存放镜像的地方，比如 Docker Hub",[14,25933,25934],{},"抽象化理解:",[14,25936,25937],{},"Docker镜像≈C++类",[14,25939,25940],{},"Docker容器≈C++类实例(即对象)",[14,25942,25943],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[14,25945,25946],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[225,25948,25950],{"id":25949},"_14类比理解","1.4.类比理解",[402,25952,25953,25963],{},[405,25954,25955],{},[408,25956,25957,25960],{},[411,25958,25959],{"align":23877},"传统部署",[411,25961,25962],{"align":23877},"Docker部署",[449,25964,25965,25973,25981],{},[408,25966,25967,25970],{},[454,25968,25969],{"align":23877},"手动安装依赖、调试版本不一致问题",[454,25971,25972],{"align":23877},"一次打包环境和代码",[408,25974,25975,25978],{},[454,25976,25977],{"align":23877},"程序“裸奔”跑在系统上",[454,25979,25980],{"align":23877},"程序“穿着容器”隔离运行",[408,25982,25983,25986],{},[454,25984,25985],{"align":23877},"容易“在我电脑上能跑”",[454,25987,25988],{"align":23877},"保证“无论在哪都能跑”",[14,25990,25991,25992],{},"就像快递包裹： ",[414,25993,25994],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[225,25996,25998],{"id":25997},"_15docker-的核心优势","1.5.Docker 的核心优势",[402,26000,26001,26011],{},[405,26002,26003],{},[408,26004,26005,26008],{},[411,26006,26007],{"align":23877},"优势",[411,26009,26010],{"align":23877},"说明",[449,26012,26013,26021,26029,26037,26045],{},[408,26014,26015,26018],{},[454,26016,26017],{"align":23877},"轻量级",[454,26019,26020],{"align":23877},"基于系统内核共享，启动速度快，占资源少",[408,26022,26023,26026],{},[454,26024,26025],{"align":23877},"跨平台",[454,26027,26028],{"align":23877},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[408,26030,26031,26034],{},[454,26032,26033],{"align":23877},"易于迁移部署",[454,26035,26036],{"align":23877},"应用和环境一起封装，不怕依赖不一致",[408,26038,26039,26042],{},[454,26040,26041],{"align":23877},"易于版本控制",[454,26043,26044],{"align":23877},"镜像版本可控，支持回滚",[408,26046,26047,26050],{},[454,26048,26049],{"align":23877},"生态丰富",[454,26051,26052],{"align":23877},"Docker Hub 上有成千上万的现成镜像可用",[21,26054,26055],{},[24,26056,26057],{},"在Linux上可以几乎实现无性能损失。",[14,26059,26060],{},"docker里的发行版和本机共用Linux内核。",[14,26062,26063],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[21,26065,26066],{},[24,26067,26068],{},"可以快速部署在绝大多数Linux发行版",[14,26070,26071],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[21,26073,26074],{},[24,26075,26076],{},"配置环境简单",[14,26078,26079],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[14,26081,26082],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[21,26084,26085],{},[24,26086,26049],{},[14,26088,26089],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[14,26091,26092],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[225,26094,26096],{"id":26095},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[1271,26098,26099,26102,26105,26108],{},[24,26100,26101],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[24,26103,26104],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[24,26106,26107],{},"微服务架构：每个服务一个容器，灵活组合",[24,26109,26110],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":174,"searchDepth":175,"depth":175,"links":26112},[26113,26114,26115,26116,26117,26118],{"id":25824,"depth":1319,"text":25825},{"id":25868,"depth":1319,"text":25869},{"id":25884,"depth":1319,"text":25885},{"id":25949,"depth":1319,"text":25950},{"id":25997,"depth":1319,"text":25998},{"id":26095,"depth":1319,"text":26096},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":25816,"description":174},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":26125,"title":26126,"body":26127,"description":174,"extension":181,"meta":26860,"navigation":184,"path":26861,"seo":26862,"stem":26863,"__hash__":26864},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":26128,"toc":26855},[26129,26132,26136,26139,26142,26148,26154,26158,26167,26170,26227,26230,26281,26284,26367,26370,26407,26411,26422,26435,26442,26445,26525,26528,26578,26581,26604,26608,26615,26618,26634,26640,26643,26659,26665,26668,26684,26698,26704,26724,26730,26733,26745,26751,26754,26768,26774,26777,26797,26802,26805,26808,26812,26815,26818,26821,26828,26831,26834,26837,26842,26847,26852],[10,26130,26126],{"id":26131},"_2安装docker",[225,26133,26135],{"id":26134},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[14,26137,26138],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[14,26140,26141],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[14,26143,26144],{},[42,26145,26146],{"href":26146,"rel":26147},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[151],[14,26149,26150],{},[42,26151,26152],{"href":26152,"rel":26153},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[151],[22139,26155,26157],{"id":26156},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[14,26159,26160,26161,26166],{},"以下内容根据 ",[42,26162,26165],{"href":26163,"rel":26164},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[151],"官方文档"," 修改而来。",[14,26168,26169],{},"如果你过去安装过 docker，先删掉：",[245,26171,26173],{"className":23963,"code":26172,"language":23965,"meta":174,"style":174},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[251,26174,26175],{"__ignoreMap":174},[254,26176,26177,26179,26182,26185,26188,26191,26194,26197,26200,26203,26206,26209,26212,26215,26218,26221,26224],{"class":256,"line":257},[254,26178,3165],{"class":260},[254,26180,26181],{"class":264}," pkg ",[254,26183,26184],{"class":260},"in",[254,26186,26187],{"class":369}," docker.io",[254,26189,26190],{"class":369}," docker-doc",[254,26192,26193],{"class":369}," docker-compose",[254,26195,26196],{"class":369}," docker-compose-v2",[254,26198,26199],{"class":369}," podman-docker",[254,26201,26202],{"class":369}," containerd",[254,26204,26205],{"class":369}," runc",[254,26207,26208],{"class":264},"; ",[254,26210,26211],{"class":260},"do",[254,26213,26214],{"class":2103}," sudo",[254,26216,26217],{"class":369}," apt-get",[254,26219,26220],{"class":369}," remove",[254,26222,26223],{"class":264}," $pkg; ",[254,26225,26226],{"class":260},"done\n",[14,26228,26229],{},"首先安装依赖和GPG：",[245,26231,26235],{"className":26232,"code":26233,"language":26234,"meta":174,"style":174},"language-markdown shiki shiki-themes github-light github-dark","# Add Docker's official GPG key:\nsudo apt-get update\nsudo apt-get install ca-certificates curl\nsudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\nsudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\nsudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n\n# 如果上面这行报错就弄下面这行\nsudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n","markdown",[251,26236,26237,26242,26247,26252,26257,26262,26267,26271,26276],{"__ignoreMap":174},[254,26238,26239],{"class":256,"line":257},[254,26240,26241],{},"# Add Docker's official GPG key:\n",[254,26243,26244],{"class":256,"line":175},[254,26245,26246],{},"sudo apt-get update\n",[254,26248,26249],{"class":256,"line":1319},[254,26250,26251],{},"sudo apt-get install ca-certificates curl\n",[254,26253,26254],{"class":256,"line":1334},[254,26255,26256],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[254,26258,26259],{"class":256,"line":1340},[254,26260,26261],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[254,26263,26264],{"class":256,"line":1354},[254,26265,26266],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[254,26268,26269],{"class":256,"line":1360},[254,26270,2540],{"emptyLinePlaceholder":184},[254,26272,26273],{"class":256,"line":1451},[254,26274,26275],{},"# 如果上面这行报错就弄下面这行\n",[254,26277,26278],{"class":256,"line":1457},[254,26279,26280],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[14,26282,26283],{},"信任 Docker 的 GPG 公钥并添加仓库：",[245,26285,26287],{"className":23963,"code":26286,"language":23965,"meta":174,"style":174},"# Add the repository to Apt sources:\necho \\\n  \"deb [arch=$(dpkg --print-architecture) signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu \\\n  \"$(. \u002Fetc\u002Fos-release && echo \"$VERSION_CODENAME\")\" stable\" | \\\n  sudo tee \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list > \u002Fdev\u002Fnull\n",[251,26288,26289,26294,26300,26317,26350],{"__ignoreMap":174},[254,26290,26291],{"class":256,"line":257},[254,26292,26293],{"class":323},"# Add the repository to Apt sources:\n",[254,26295,26296,26298],{"class":256,"line":175},[254,26297,25266],{"class":313},[254,26299,24819],{"class":313},[254,26301,26302,26305,26308,26311,26314],{"class":256,"line":1319},[254,26303,26304],{"class":369},"  \"deb [arch=$(",[254,26306,26307],{"class":2103},"dpkg",[254,26309,26310],{"class":313}," --print-architecture",[254,26312,26313],{"class":369},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[254,26315,26316],{"class":313},"\\\n",[254,26318,26319,26322,26324,26326,26329,26332,26334,26336,26339,26341,26343,26346,26348],{"class":256,"line":1334},[254,26320,26321],{"class":369},"  \"",[254,26323,25240],{"class":264},[254,26325,822],{"class":313},[254,26327,26328],{"class":369}," \u002Fetc\u002Fos-release",[254,26330,26331],{"class":264}," && ",[254,26333,25266],{"class":313},[254,26335,9865],{"class":369},[254,26337,26338],{"class":264},"$VERSION_CODENAME",[254,26340,515],{"class":369},[254,26342,693],{"class":264},[254,26344,26345],{"class":369},"\" stable\"",[254,26347,25250],{"class":260},[254,26349,24819],{"class":313},[254,26351,26352,26355,26358,26361,26364],{"class":256,"line":1340},[254,26353,26354],{"class":2103},"  sudo",[254,26356,26357],{"class":369}," tee",[254,26359,26360],{"class":369}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[254,26362,26363],{"class":260}," >",[254,26365,26366],{"class":369}," \u002Fdev\u002Fnull\n",[14,26368,26369],{},"最后安装",[245,26371,26373],{"className":23963,"code":26372,"language":23965,"meta":174,"style":174},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[251,26374,26375,26384],{"__ignoreMap":174},[254,26376,26377,26379,26381],{"class":256,"line":257},[254,26378,24717],{"class":2103},[254,26380,26217],{"class":369},[254,26382,26383],{"class":369}," update\n",[254,26385,26386,26388,26390,26392,26395,26398,26401,26404],{"class":256,"line":175},[254,26387,24717],{"class":2103},[254,26389,26217],{"class":369},[254,26391,23975],{"class":369},[254,26393,26394],{"class":369}," docker-ce",[254,26396,26397],{"class":369}," docker-ce-cli",[254,26399,26400],{"class":369}," containerd.io",[254,26402,26403],{"class":369}," docker-buildx-plugin",[254,26405,26406],{"class":369}," docker-compose-plugin\n",[22139,26408,26410],{"id":26409},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[14,26412,26413,26414,26417,26418,26421],{},"查看自己自己包管理工具版本（dnf是 ",[414,26415,26416],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[414,26419,26420],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[245,26423,26425],{"className":23963,"code":26424,"language":23965,"meta":174,"style":174},"dnf --version\n",[251,26426,26427],{"__ignoreMap":174},[254,26428,26429,26432],{"class":256,"line":257},[254,26430,26431],{"class":2103},"dnf",[254,26433,26434],{"class":313}," --version\n",[14,26436,26160,26437,26441],{},[42,26438,26165],{"href":26439,"rel":26440},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[151]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[14,26443,26444],{},"如果你之前安装过 docker，请先删掉",[245,26446,26448],{"className":23963,"code":26447,"language":23965,"meta":174,"style":174},"sudo dnf remove docker \\\n                  docker-client \\\n                  docker-client-latest \\\n                  docker-common \\\n                  docker-latest \\\n                  docker-latest-logrotate \\\n                  docker-logrotate \\\n                  docker-selinux \\\n                  docker-engine-selinux \\\n                  docker-engine\n",[251,26449,26450,26464,26471,26478,26485,26492,26499,26506,26513,26520],{"__ignoreMap":174},[254,26451,26452,26454,26457,26459,26462],{"class":256,"line":257},[254,26453,24717],{"class":2103},[254,26455,26456],{"class":369}," dnf",[254,26458,26220],{"class":369},[254,26460,26461],{"class":369}," docker",[254,26463,24819],{"class":313},[254,26465,26466,26469],{"class":256,"line":175},[254,26467,26468],{"class":369},"                  docker-client",[254,26470,24819],{"class":313},[254,26472,26473,26476],{"class":256,"line":1319},[254,26474,26475],{"class":369},"                  docker-client-latest",[254,26477,24819],{"class":313},[254,26479,26480,26483],{"class":256,"line":1334},[254,26481,26482],{"class":369},"                  docker-common",[254,26484,24819],{"class":313},[254,26486,26487,26490],{"class":256,"line":1340},[254,26488,26489],{"class":369},"                  docker-latest",[254,26491,24819],{"class":313},[254,26493,26494,26497],{"class":256,"line":1354},[254,26495,26496],{"class":369},"                  docker-latest-logrotate",[254,26498,24819],{"class":313},[254,26500,26501,26504],{"class":256,"line":1360},[254,26502,26503],{"class":369},"                  docker-logrotate",[254,26505,24819],{"class":313},[254,26507,26508,26511],{"class":256,"line":1451},[254,26509,26510],{"class":369},"                  docker-selinux",[254,26512,24819],{"class":313},[254,26514,26515,26518],{"class":256,"line":1457},[254,26516,26517],{"class":369},"                  docker-engine-selinux",[254,26519,24819],{"class":313},[254,26521,26522],{"class":256,"line":1469},[254,26523,26524],{"class":369},"                  docker-engine\n",[14,26526,26527],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[245,26529,26531],{"className":23963,"code":26530,"language":23965,"meta":174,"style":174},"sudo dnf -y install dnf-plugins-core\nsudo dnf config-manager addrepo --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\nsudo sed -i 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+' \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[251,26532,26533,26547,26562],{"__ignoreMap":174},[254,26534,26535,26537,26539,26542,26544],{"class":256,"line":257},[254,26536,24717],{"class":2103},[254,26538,26456],{"class":369},[254,26540,26541],{"class":313}," -y",[254,26543,23975],{"class":369},[254,26545,26546],{"class":369}," dnf-plugins-core\n",[254,26548,26549,26551,26553,26556,26559],{"class":256,"line":175},[254,26550,24717],{"class":2103},[254,26552,26456],{"class":369},[254,26554,26555],{"class":369}," config-manager",[254,26557,26558],{"class":369}," addrepo",[254,26560,26561],{"class":313}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[254,26563,26564,26566,26569,26572,26575],{"class":256,"line":1319},[254,26565,24717],{"class":2103},[254,26567,26568],{"class":369}," sed",[254,26570,26571],{"class":313}," -i",[254,26573,26574],{"class":369}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[254,26576,26577],{"class":369}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[14,26579,26580],{},"最后安装：",[245,26582,26584],{"className":23963,"code":26583,"language":23965,"meta":174,"style":174},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[251,26585,26586],{"__ignoreMap":174},[254,26587,26588,26590,26592,26594,26596,26598,26600,26602],{"class":256,"line":257},[254,26589,24717],{"class":2103},[254,26591,26456],{"class":369},[254,26593,23975],{"class":369},[254,26595,26394],{"class":369},[254,26597,26397],{"class":369},[254,26599,26400],{"class":369},[254,26601,26403],{"class":369},[254,26603,26406],{"class":369},[225,26605,26607],{"id":26606},"_22配置环境","2.2.配置环境",[22139,26609,26611,26614],{"id":26610},"_221检查-docker-服务状态",[414,26612,26613],{},"2.2.1.检查 Docker 服务状态"," ：",[14,26616,26617],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[245,26619,26621],{"className":23963,"code":26620,"language":23965,"meta":174,"style":174},"systemctl status docker\n",[251,26622,26623],{"__ignoreMap":174},[254,26624,26625,26628,26631],{"class":256,"line":257},[254,26626,26627],{"class":2103},"systemctl",[254,26629,26630],{"class":369}," status",[254,26632,26633],{"class":369}," docker\n",[22139,26635,26637,26614],{"id":26636},"_222启动-docker-服务",[414,26638,26639],{},"2.2.2.启动 Docker 服务",[14,26641,26642],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[245,26644,26646],{"className":23963,"code":26645,"language":23965,"meta":174,"style":174},"sudo systemctl start docker\n",[251,26647,26648],{"__ignoreMap":174},[254,26649,26650,26652,26655,26657],{"class":256,"line":257},[254,26651,24717],{"class":2103},[254,26653,26654],{"class":369}," systemctl",[254,26656,4324],{"class":369},[254,26658,26633],{"class":369},[22139,26660,26662,26614],{"id":26661},"_223设置-docker-开机自启",[414,26663,26664],{},"2.2.3.设置 Docker 开机自启",[14,26666,26667],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[245,26669,26671],{"className":23963,"code":26670,"language":23965,"meta":174,"style":174},"sudo systemctl enable docker\n",[251,26672,26673],{"__ignoreMap":174},[254,26674,26675,26677,26679,26682],{"class":256,"line":257},[254,26676,24717],{"class":2103},[254,26678,26654],{"class":369},[254,26680,26681],{"class":369}," enable",[254,26683,26633],{"class":369},[22139,26685,26687,13936,26690,13936,26695,26614],{"id":26686},"_224将用户添加到-docker-组",[414,26688,26689],{},"2.2.4.将用户添加到",[414,26691,26692],{},[251,26693,26694],{},"docker",[414,26696,26697],{},"组",[14,26699,26700,26701,26703],{},"使用以下命令将当前用户添加到 ",[251,26702,26694],{}," 组：",[245,26705,26707],{"className":23963,"code":26706,"language":23965,"meta":174,"style":174},"sudo usermod -aG docker $USER\n",[251,26708,26709],{"__ignoreMap":174},[254,26710,26711,26713,26716,26719,26721],{"class":256,"line":257},[254,26712,24717],{"class":2103},[254,26714,26715],{"class":369}," usermod",[254,26717,26718],{"class":313}," -aG",[254,26720,26461],{"class":369},[254,26722,26723],{"class":264}," $USER\n",[22139,26725,26727,26614],{"id":26726},"_225退出并重新登录",[414,26728,26729],{},"2.2.5.退出并重新登录",[14,26731,26732],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[245,26734,26736],{"className":23963,"code":26735,"language":23965,"meta":174,"style":174},"newgrp docker\n",[251,26737,26738],{"__ignoreMap":174},[254,26739,26740,26743],{"class":256,"line":257},[254,26741,26742],{"class":2103},"newgrp",[254,26744,26633],{"class":369},[22139,26746,26748,26614],{"id":26747},"_226重新启动-docker-服务如果需要",[414,26749,26750],{},"2.2.6.重新启动 Docker 服务（如果需要）",[14,26752,26753],{},"确保 Docker 服务正在运行，可以使用以下命令：",[245,26755,26756],{"className":23963,"code":26645,"language":23965,"meta":174,"style":174},[251,26757,26758],{"__ignoreMap":174},[254,26759,26760,26762,26764,26766],{"class":256,"line":257},[254,26761,24717],{"class":2103},[254,26763,26654],{"class":369},[254,26765,4324],{"class":369},[254,26767,26633],{"class":369},[22139,26769,26771,26614],{"id":26770},"_227重启电脑后检查-docker-服务状态",[414,26772,26773],{},"2.2.7.重启电脑后检查 Docker 服务状态",[14,26775,26776],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[245,26778,26780],{"className":23963,"code":26779,"language":23965,"meta":174,"style":174},"sudo reboot\nsystemctl status docker\n",[251,26781,26782,26789],{"__ignoreMap":174},[254,26783,26784,26786],{"class":256,"line":257},[254,26785,24717],{"class":2103},[254,26787,26788],{"class":369}," reboot\n",[254,26790,26791,26793,26795],{"class":256,"line":175},[254,26792,26627],{"class":2103},[254,26794,26630],{"class":369},[254,26796,26633],{"class":369},[14,26798,26799],{},[1602,26800],{"alt":174,"src":26801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[14,26803,26804],{},"第三行显示enabled说明开机自启动成功",[14,26806,26807],{},"按q退出",[225,26809,26811],{"id":26810},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[14,26813,26814],{},"优先使用linux来使用docker是比较好的",[14,26816,26817],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[14,26819,26820],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[14,26822,26823,26824],{},"官方下载安装:",[42,26825,26826],{"href":26826,"rel":26827},"https:\u002F\u002Fwww.docker.com\u002F",[151],[14,26829,26830],{},"Windows的Docker显卡直通与USB直通:",[14,26832,26833],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[14,26835,26836],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[14,26838,26839],{},[1602,26840],{"alt":174,"src":26841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[14,26843,26844],{},[1602,26845],{"alt":174,"src":26846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[14,26848,26849],{},[1602,26850],{"alt":174,"src":26851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[5267,26853,26854],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":174,"searchDepth":175,"depth":175,"links":26856},[26857,26858,26859],{"id":26134,"depth":1319,"text":26135},{"id":26606,"depth":1319,"text":26607},{"id":26810,"depth":1319,"text":26811},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":26126,"description":174},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":26866,"title":26867,"body":26868,"description":26875,"extension":181,"meta":27568,"navigation":184,"path":27569,"seo":27570,"stem":27571,"__hash__":27572},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":26869,"toc":27562},[26870,26873,26876,26880,26885,26890,26893,26921,26926,26935,26938,26943,26947,26954,26959,26965,26969,26972,26976,26981,27073,27078,27096,27101,27122,27127,27143,27147,27152,27181,27186,27232,27237,27281,27289,27306,27311,27327,27332,27346,27349,27352,27355,27358,27387,27390,27395,27399,27402,27405,27411,27414,27417,27420,27482,27489,27494,27497,27515,27519,27522,27539,27542,27545,27559],[10,26871,26867],{"id":26872},"_3docker直通",[14,26874,26875],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[225,26877,26879],{"id":26878},"_31usb直通","3.1.USB直通",[14,26881,26882],{},[1602,26883],{"alt":174,"src":26884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[21,26886,26887],{},[24,26888,26889],{},"方法一(不是很推荐新手)：",[14,26891,26892],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[245,26894,26896],{"className":23963,"code":26895,"language":23965,"meta":174,"style":174},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[251,26897,26898,26906,26911],{"__ignoreMap":174},[254,26899,26900,26903],{"class":256,"line":257},[254,26901,26902],{"class":2103},"ls",[254,26904,26905],{"class":369}," \u002Fdev\n",[254,26907,26908],{"class":256,"line":175},[254,26909,26910],{"class":323},"#例如\n",[254,26912,26913,26916,26918],{"class":256,"line":1319},[254,26914,26915],{"class":264},"--device",[254,26917,310],{"class":260},[254,26919,26920],{"class":369},"\u002Fdev\u002Ftty_USB0\n",[21,26922,26923],{"start":175},[24,26924,26925],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[245,26927,26929],{"className":23963,"code":26928,"language":23965,"meta":174,"style":174},"--privileged\n",[251,26930,26931],{"__ignoreMap":174},[254,26932,26933],{"class":256,"line":257},[254,26934,26928],{"class":2103},[14,26936,26937],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[14,26939,26940],{},[1602,26941],{"alt":174,"src":26942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[225,26944,26946],{"id":26945},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[14,26948,26949,26950,26953],{},"NVIDIA Container Toolkit使用户 ",[414,26951,26952],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[14,26955,26956],{},[1602,26957],{"alt":174,"src":26958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[14,26960,26961],{},[42,26962,26963],{"href":26963,"rel":26964},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[151],[22139,26966,26968],{"id":26967},"_321安装","3.2.1.安装",[14,26970,26971],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[23051,26973,26975],{"id":26974},"_3211ubuntu","3.2.1.1.Ubuntu",[21,26977,26978],{},[24,26979,26980],{},"配置存储库 并更新",[245,26982,26984],{"className":23963,"code":26983,"language":23965,"meta":174,"style":174},"curl -fsSL https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey | sudo gpg --dearmor -o \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg \\\n  && curl -s -L https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list | \\\n    sed 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g' | \\\n    sudo tee \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list \\\n  && \\\n    sudo apt-get update\n",[251,26985,26986,27015,27035,27047,27059,27065],{"__ignoreMap":174},[254,26987,26988,26991,26994,26997,26999,27001,27004,27007,27010,27013],{"class":256,"line":257},[254,26989,26990],{"class":2103},"curl",[254,26992,26993],{"class":313}," -fsSL",[254,26995,26996],{"class":369}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[254,26998,25250],{"class":260},[254,27000,26214],{"class":2103},[254,27002,27003],{"class":369}," gpg",[254,27005,27006],{"class":313}," --dearmor",[254,27008,27009],{"class":313}," -o",[254,27011,27012],{"class":369}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[254,27014,24819],{"class":313},[254,27016,27017,27020,27022,27025,27028,27031,27033],{"class":256,"line":175},[254,27018,27019],{"class":264},"  && ",[254,27021,26990],{"class":2103},[254,27023,27024],{"class":313}," -s",[254,27026,27027],{"class":313}," -L",[254,27029,27030],{"class":369}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[254,27032,25250],{"class":260},[254,27034,24819],{"class":313},[254,27036,27037,27040,27043,27045],{"class":256,"line":1319},[254,27038,27039],{"class":2103},"    sed",[254,27041,27042],{"class":369}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[254,27044,25250],{"class":260},[254,27046,24819],{"class":313},[254,27048,27049,27052,27054,27057],{"class":256,"line":1334},[254,27050,27051],{"class":2103},"    sudo",[254,27053,26357],{"class":369},[254,27055,27056],{"class":369}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[254,27058,24819],{"class":313},[254,27060,27061,27063],{"class":256,"line":1340},[254,27062,27019],{"class":264},[254,27064,26316],{"class":313},[254,27066,27067,27069,27071],{"class":256,"line":1354},[254,27068,27051],{"class":2103},[254,27070,26217],{"class":369},[254,27072,26383],{"class":369},[21,27074,27075],{"start":175},[24,27076,27077],{},"安装nvidia-docker2",[245,27079,27081],{"className":23963,"code":27080,"language":23965,"meta":174,"style":174},"sudo apt-get install -y nvidia-docker2\n",[251,27082,27083],{"__ignoreMap":174},[254,27084,27085,27087,27089,27091,27093],{"class":256,"line":257},[254,27086,24717],{"class":2103},[254,27088,26217],{"class":369},[254,27090,23975],{"class":369},[254,27092,26541],{"class":313},[254,27094,27095],{"class":369}," nvidia-docker2\n",[21,27097,27098],{"start":1319},[24,27099,27100],{},"使用nvidia-ctk命令配置container runtime",[245,27102,27104],{"className":23963,"code":27103,"language":23965,"meta":174,"style":174},"sudo nvidia-ctk runtime configure --runtime=docker\n",[251,27105,27106],{"__ignoreMap":174},[254,27107,27108,27110,27113,27116,27119],{"class":256,"line":257},[254,27109,24717],{"class":2103},[254,27111,27112],{"class":369}," nvidia-ctk",[254,27114,27115],{"class":369}," runtime",[254,27117,27118],{"class":369}," configure",[254,27120,27121],{"class":313}," --runtime=docker\n",[21,27123,27124],{"start":1334},[24,27125,27126],{},"重启docker服务:",[245,27128,27130],{"className":23963,"code":27129,"language":23965,"meta":174,"style":174},"sudo systemctl restart docker\n",[251,27131,27132],{"__ignoreMap":174},[254,27133,27134,27136,27138,27141],{"class":256,"line":257},[254,27135,24717],{"class":2103},[254,27137,26654],{"class":369},[254,27139,27140],{"class":369}," restart",[254,27142,26633],{"class":369},[23051,27144,27146],{"id":27145},"_3212fedora","3.2.1.2.Fedora",[21,27148,27149],{},[24,27150,27151],{},"配置存储库",[245,27153,27155],{"className":23963,"code":27154,"language":23965,"meta":174,"style":174},"curl -s -L https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo | \\\nsudo tee \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[251,27156,27157,27172],{"__ignoreMap":174},[254,27158,27159,27161,27163,27165,27168,27170],{"class":256,"line":257},[254,27160,26990],{"class":2103},[254,27162,27024],{"class":313},[254,27164,27027],{"class":313},[254,27166,27167],{"class":369}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[254,27169,25250],{"class":260},[254,27171,24819],{"class":313},[254,27173,27174,27176,27178],{"class":256,"line":175},[254,27175,24717],{"class":2103},[254,27177,26357],{"class":369},[254,27179,27180],{"class":369}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[21,27182,27183],{"start":175},[24,27184,27185],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[245,27187,27189],{"className":23963,"code":27188,"language":23965,"meta":174,"style":174},"# 如果是RHEL或者Rocky（DNF4）\nsudo dnf config-manager --add-repo https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n\n# 如果是Feodra41+（DNF5）\nsudo dnf config-manager addrepo --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[251,27190,27191,27196,27210,27214,27219],{"__ignoreMap":174},[254,27192,27193],{"class":256,"line":257},[254,27194,27195],{"class":323},"# 如果是RHEL或者Rocky（DNF4）\n",[254,27197,27198,27200,27202,27204,27207],{"class":256,"line":175},[254,27199,24717],{"class":2103},[254,27201,26456],{"class":369},[254,27203,26555],{"class":369},[254,27205,27206],{"class":313}," --add-repo",[254,27208,27209],{"class":369}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[254,27211,27212],{"class":256,"line":1319},[254,27213,2540],{"emptyLinePlaceholder":184},[254,27215,27216],{"class":256,"line":1334},[254,27217,27218],{"class":323},"# 如果是Feodra41+（DNF5）\n",[254,27220,27221,27223,27225,27227,27229],{"class":256,"line":1340},[254,27222,24717],{"class":2103},[254,27224,26456],{"class":369},[254,27226,26555],{"class":369},[254,27228,26558],{"class":369},[254,27230,27231],{"class":313}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[21,27233,27234],{"start":1319},[24,27235,27236],{},"安装NVIDIA Container Toolki包",[245,27238,27240],{"className":23963,"code":27239,"language":23965,"meta":174,"style":174},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[251,27241,27242,27247,27260,27264,27269],{"__ignoreMap":174},[254,27243,27244],{"class":256,"line":257},[254,27245,27246],{"class":323},"# 如果是RHEL或者Rocky\n",[254,27248,27249,27251,27253,27255,27257],{"class":256,"line":175},[254,27250,24717],{"class":2103},[254,27252,26456],{"class":369},[254,27254,23975],{"class":369},[254,27256,26541],{"class":313},[254,27258,27259],{"class":369}," nvidia-container-toolkit\n",[254,27261,27262],{"class":256,"line":1319},[254,27263,2540],{"emptyLinePlaceholder":184},[254,27265,27266],{"class":256,"line":1334},[254,27267,27268],{"class":323},"# 如果是Fedora\n",[254,27270,27271,27273,27275,27277,27279],{"class":256,"line":1340},[254,27272,24717],{"class":2103},[254,27274,26456],{"class":369},[254,27276,23975],{"class":369},[254,27278,26541],{"class":313},[254,27280,27259],{"class":369},[21,27282,27283],{"start":1334},[24,27284,27285,27286,27288],{},"安装nvidia-docker2 ： 在Fedora上使用",[251,27287,26431],{},"进行安装",[245,27290,27292],{"className":23963,"code":27291,"language":23965,"meta":174,"style":174},"sudo dnf install -y nvidia-docker2\n",[251,27293,27294],{"__ignoreMap":174},[254,27295,27296,27298,27300,27302,27304],{"class":256,"line":257},[254,27297,24717],{"class":2103},[254,27299,26456],{"class":369},[254,27301,23975],{"class":369},[254,27303,26541],{"class":313},[254,27305,27095],{"class":369},[21,27307,27308],{"start":1340},[24,27309,27310],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[245,27312,27313],{"className":23963,"code":27103,"language":23965,"meta":174,"style":174},[251,27314,27315],{"__ignoreMap":174},[254,27316,27317,27319,27321,27323,27325],{"class":256,"line":257},[254,27318,24717],{"class":2103},[254,27320,27112],{"class":369},[254,27322,27115],{"class":369},[254,27324,27118],{"class":369},[254,27326,27121],{"class":313},[21,27328,27329],{"start":1354},[24,27330,27331],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[245,27333,27334],{"className":23963,"code":27129,"language":23965,"meta":174,"style":174},[251,27335,27336],{"__ignoreMap":174},[254,27337,27338,27340,27342,27344],{"class":256,"line":257},[254,27339,24717],{"class":2103},[254,27341,26654],{"class":369},[254,27343,27140],{"class":369},[254,27345,26633],{"class":369},[14,27347,27348],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[14,27350,27351],{},"方法：",[14,27353,27354],{},"1️⃣nvidia-smi",[14,27356,27357],{},"2️⃣运行nvidia cuda 容器进行测试",[245,27359,27361],{"className":23963,"code":27360,"language":23965,"meta":174,"style":174},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[251,27362,27363],{"__ignoreMap":174},[254,27364,27365,27367,27369,27372,27375,27378,27381,27384],{"class":256,"line":257},[254,27366,24717],{"class":2103},[254,27368,26461],{"class":369},[254,27370,27371],{"class":369}," run",[254,27373,27374],{"class":313}," --rm",[254,27376,27377],{"class":313}," --gpus",[254,27379,27380],{"class":369}," all",[254,27382,27383],{"class":369}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[254,27385,27386],{"class":369}," nvidia-smi\n",[14,27388,27389],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[14,27391,27392],{},[1602,27393],{"alt":174,"src":27394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[225,27396,27398],{"id":27397},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[14,27400,27401],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[14,27403,27404],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[14,27406,27407],{},[42,27408,27409],{"href":27409,"rel":27410},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[151],[14,27412,27413],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[14,27415,27416],{},"我们只需要找到对应的Docker镜像当底包即可。",[14,27418,27419],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[402,27421,27422,27438],{},[405,27423,27424],{},[408,27425,27426,27429,27432,27435],{},[411,27427,27428],{"align":23877},"镜像类型",[411,27430,27431],{"align":23877},"适用场景",[411,27433,27434],{"align":23877},"示例标签",[411,27436,27437],{"align":23877},"大小",[449,27439,27440,27454,27468],{},[408,27441,27442,27445,27448,27451],{},[454,27443,27444],{"align":23877},"base",[454,27446,27447],{"align":23877},"仅需 CUDA 运行时库",[454,27449,27450],{"align":23877},"12.4.0-base-ubuntu22.04",[454,27452,27453],{"align":23877},"~240MB",[408,27455,27456,27459,27462,27465],{},[454,27457,27458],{"align":23877},"runtime",[454,27460,27461],{"align":23877},"部署编译后的应用（含数学库）",[454,27463,27464],{"align":23877},"12.4.0-runtime-ubuntu22.04",[454,27466,27467],{"align":23877},"~2GB",[408,27469,27470,27473,27476,27479],{},[454,27471,27472],{"align":23877},"devel",[454,27474,27475],{"align":23877},"开发环境（含编译工具）",[454,27477,27478],{"align":23877},"12.4.0-devel-ubuntu22.04",[454,27480,27481],{"align":23877},"~3GB",[14,27483,27484,27485,27488],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[251,27486,27487],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[14,27490,27491],{},[1602,27492],{"alt":174,"src":27493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[14,27495,27496],{},"在dockerfile里就可以开头这么写：",[245,27498,27500],{"className":23963,"code":27499,"language":23965,"meta":174,"style":174},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[251,27501,27502,27507],{"__ignoreMap":174},[254,27503,27504],{"class":256,"line":257},[254,27505,27506],{"class":323},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[254,27508,27509,27512],{"class":256,"line":175},[254,27510,27511],{"class":2103},"FROM",[254,27513,27514],{"class":369}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[225,27516,27518],{"id":27517},"_34配置以太网","3.4.配置以太网",[14,27520,27521],{},"指定网络模式",[245,27523,27525],{"className":23963,"code":27524,"language":23965,"meta":174,"style":174},"--net=host \\\n",[251,27526,27527],{"__ignoreMap":174},[254,27528,27529,27532,27534,27537],{"class":256,"line":257},[254,27530,27531],{"class":264},"--net",[254,27533,310],{"class":260},[254,27535,27536],{"class":369},"host",[254,27538,24819],{"class":2103},[14,27540,27541],{},"启动参数里加上这行即可。具体在下方",[14,27543,27544],{},"--net选项：指定网络模式，该选项有以下参数可选：",[1271,27546,27547,27550,27553,27556],{},[24,27548,27549],{},"--net=bridge:默认选项，表示连接到默认的网桥",[24,27551,27552],{},"--net=host:容器使用宿主机的网络",[24,27554,27555],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[24,27557,27558],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[5267,27560,27561],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":174,"searchDepth":175,"depth":175,"links":27563},[27564,27565,27566,27567],{"id":26878,"depth":1319,"text":26879},{"id":26945,"depth":1319,"text":26946},{"id":27397,"depth":1319,"text":27398},{"id":27517,"depth":1319,"text":27518},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":26867,"description":26875},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":27574,"title":27575,"body":27576,"description":27583,"extension":181,"meta":27589,"navigation":184,"path":27590,"seo":27591,"stem":27592,"__hash__":27593},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":27577,"toc":27587},[27578,27581,27584],[10,27579,27575],{"id":27580},"_4dockerhub换源",[14,27582,27583],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[14,27585,27586],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":174,"searchDepth":175,"depth":175,"links":27588},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":27575,"description":27583},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":27595,"title":27596,"body":27597,"description":174,"extension":181,"meta":28609,"navigation":184,"path":28610,"seo":28611,"stem":28612,"__hash__":28613},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":27598,"toc":28604},[27599,27602,27606,27612,27616,27619,27959,27962,27965,27968,27973,27978,27981,27984,27987,27990,28009,28012,28023,28029,28211,28221,28237,28500,28502,28527,28542,28551,28601],[10,27600,27596],{"id":27601},"_5docker命令学习",[225,27603,27605],{"id":27604},"_51参考文档","5.1.参考文档",[14,27607,27608],{},[42,27609,27610],{"href":27610,"rel":27611},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[151],[225,27613,27615],{"id":27614},"_52常用命令","5.2.常用命令",[14,27617,27618],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[402,27620,27621,27634],{},[405,27622,27623],{},[408,27624,27625,27628,27631],{},[411,27626,27627],{"align":23877},"命令",[411,27629,27630],{"align":23877},"描述",[411,27632,27633],{"align":23877},"示例",[449,27635,27636,27647,27658,27669,27680,27691,27702,27713,27723,27734,27745,27756,27766,27777,27788,27799,27809,27819,27829,27839,27850,27861,27872,27883,27894,27905,27915,27926,27937,27948],{},[408,27637,27638,27641,27644],{},[454,27639,27640],{"align":23877},"docker run",[454,27642,27643],{"align":23877},"创建并启动一个新的容器。",[454,27645,27646],{"align":23877},"docker run -it ubuntu bash",[408,27648,27649,27652,27655],{},[454,27650,27651],{"align":23877},"docker build",[454,27653,27654],{"align":23877},"通过指定的 Dockerfile 创建一个新的镜像。",[454,27656,27657],{"align":23877},"docker build -t myimage .",[408,27659,27660,27663,27666],{},[454,27661,27662],{"align":23877},"docker pull",[454,27664,27665],{"align":23877},"从 Docker 仓库拉取镜像。",[454,27667,27668],{"align":23877},"docker pull ubuntu",[408,27670,27671,27674,27677],{},[454,27672,27673],{"align":23877},"docker push",[454,27675,27676],{"align":23877},"将本地镜像推送到 Docker 仓库。",[454,27678,27679],{"align":23877},"docker push myimage",[408,27681,27682,27685,27688],{},[454,27683,27684],{"align":23877},"docker stop",[454,27686,27687],{"align":23877},"停止一个正在运行的容器。",[454,27689,27690],{"align":23877},"docker stop container_id",[408,27692,27693,27696,27699],{},[454,27694,27695],{"align":23877},"docker start",[454,27697,27698],{"align":23877},"启动一个已经存在的容器。",[454,27700,27701],{"align":23877},"docker start container_id",[408,27703,27704,27707,27710],{},[454,27705,27706],{"align":23877},"docker restart",[454,27708,27709],{"align":23877},"重新启动容器。",[454,27711,27712],{"align":23877},"docker restart container_id",[408,27714,27715,27718,27721],{},[454,27716,27717],{"align":23877},"docker ps",[454,27719,27720],{"align":23877},"列出当前正在运行的容器。",[454,27722,27717],{"align":23877},[408,27724,27725,27728,27731],{},[454,27726,27727],{"align":23877},"docker rm",[454,27729,27730],{"align":23877},"删除一个或多个停止的容器。",[454,27732,27733],{"align":23877},"docker rm container_id",[408,27735,27736,27739,27742],{},[454,27737,27738],{"align":23877},"docker exec",[454,27740,27741],{"align":23877},"在一个正在运行的容器中执行命令。",[454,27743,27744],{"align":23877},"docker exec -it container_id bash",[408,27746,27747,27750,27753],{},[454,27748,27749],{"align":23877},"docker logs",[454,27751,27752],{"align":23877},"查看容器的日志输出。",[454,27754,27755],{"align":23877},"docker logs container_id",[408,27757,27758,27761,27764],{},[454,27759,27760],{"align":23877},"docker images",[454,27762,27763],{"align":23877},"列出本地所有镜像。",[454,27765,27760],{"align":23877},[408,27767,27768,27771,27774],{},[454,27769,27770],{"align":23877},"docker rmi",[454,27772,27773],{"align":23877},"删除一个或多个镜像。",[454,27775,27776],{"align":23877},"docker rmi myimage",[408,27778,27779,27782,27785],{},[454,27780,27781],{"align":23877},"docker network",[454,27783,27784],{"align":23877},"管理 Docker 网络。",[454,27786,27787],{"align":23877},"docker network ls",[408,27789,27790,27793,27796],{},[454,27791,27792],{"align":23877},"docker volume",[454,27794,27795],{"align":23877},"管理 Docker 数据卷。",[454,27797,27798],{"align":23877},"docker volume ls",[408,27800,27801,27804,27807],{},[454,27802,27803],{"align":23877},"docker-compose up",[454,27805,27806],{"align":23877},"启动 docker-compose.yml 中定义的所有服务。",[454,27808,27803],{"align":23877},[408,27810,27811,27814,27817],{},[454,27812,27813],{"align":23877},"docker-compose down",[454,27815,27816],{"align":23877},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[454,27818,27813],{"align":23877},[408,27820,27821,27824,27827],{},[454,27822,27823],{"align":23877},"docker info",[454,27825,27826],{"align":23877},"显示 Docker 系统的详细信息。",[454,27828,27823],{"align":23877},[408,27830,27831,27834,27837],{},[454,27832,27833],{"align":23877},"docker stats",[454,27835,27836],{"align":23877},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[454,27838,27833],{"align":23877},[408,27840,27841,27844,27847],{},[454,27842,27843],{"align":23877},"docker inspect",[454,27845,27846],{"align":23877},"查看容器或镜像的详细信息（JSON 格式）。",[454,27848,27849],{"align":23877},"docker inspect container_id",[408,27851,27852,27855,27858],{},[454,27853,27854],{"align":23877},"docker save",[454,27856,27857],{"align":23877},"将一个镜像保存为 tar 文件。",[454,27859,27860],{"align":23877},"docker save -o myimage.tar myimage",[408,27862,27863,27866,27869],{},[454,27864,27865],{"align":23877},"docker load",[454,27867,27868],{"align":23877},"从 tar 文件中加载镜像。",[454,27870,27871],{"align":23877},"docker load -i myimage.tar",[408,27873,27874,27877,27880],{},[454,27875,27876],{"align":23877},"docker tag",[454,27878,27879],{"align":23877},"为镜像添加标签（tag）。",[454,27881,27882],{"align":23877},"docker tag myimage myimage:v1",[408,27884,27885,27888,27891],{},[454,27886,27887],{"align":23877},"docker buildx build",[454,27889,27890],{"align":23877},"使用 Buildx 构建多架构镜像。",[454,27892,27893],{"align":23877},"docker buildx build -t myimage .",[408,27895,27896,27899,27902],{},[454,27897,27898],{"align":23877},"docker buildx create",[454,27900,27901],{"align":23877},"创建一个新的 Buildx 构建实例。",[454,27903,27904],{"align":23877},"docker buildx create –use",[408,27906,27907,27910,27913],{},[454,27908,27909],{"align":23877},"docker buildx ls",[454,27911,27912],{"align":23877},"列出所有可用的 Buildx 构建实例。",[454,27914,27909],{"align":23877},[408,27916,27917,27920,27923],{},[454,27918,27919],{"align":23877},"docker buildx use",[454,27921,27922],{"align":23877},"设置当前的 Buildx 构建实例。",[454,27924,27925],{"align":23877},"docker buildx use mybuilder",[408,27927,27928,27931,27934],{},[454,27929,27930],{"align":23877},"docker buildx bake",[454,27932,27933],{"align":23877},"使用 Bake 文件批量构建镜像。",[454,27935,27936],{"align":23877},"docker buildx bake -f bake.hcl",[408,27938,27939,27942,27945],{},[454,27940,27941],{"align":23877},"docker buildx build –push",[454,27943,27944],{"align":23877},"构建镜像并推送到镜像仓库。",[454,27946,27947],{"align":23877},"docker buildx build –push -t myimage .",[408,27949,27950,27953,27956],{},[454,27951,27952],{"align":23877},"docker buildx build –platform",[454,27954,27955],{"align":23877},"构建镜像并为多个平台生成支持。",[454,27957,27958],{"align":23877},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[14,27960,27961],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[14,27963,27964],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[14,27966,27967],{},"docker images 可以查看已经下载的镜像",[14,27969,27970],{},[1602,27971],{"alt":174,"src":27972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[14,27974,27975],{},[414,27976,27977],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[14,27979,27980],{},"docker rmi $(docker images -q) 删除所有的镜像",[14,27982,27983],{},"docker container logs 查看容器日志",[14,27985,27986],{},"docker top 查看容器里的进程",[14,27988,27989],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[245,27991,27993],{"className":23963,"code":27992,"language":23965,"meta":174,"style":174},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[251,27994,27995],{"__ignoreMap":174},[254,27996,27997,28000,28003,28006],{"class":256,"line":257},[254,27998,27999],{"class":2103},"如：docker",[254,28001,28002],{"class":369}," cp",[254,28004,28005],{"class":369}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[254,28007,28008],{"class":369}," \u002Fmydata\u002Fnginx\n",[14,28010,28011],{},"docker run时在启动容器的时候会有几个常用的选项：",[1271,28013,28014,28017,28020],{},[24,28015,28016],{},"-d选项：表示后台运行",[24,28018,28019],{},"-P选项：随机端口映射",[24,28021,28022],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[225,28024,28026],{"id":28025},"_53run命令的参数非常重要",[414,28027,28028],{},"5.3.run命令的参数（非常重要）",[402,28030,28031,28044],{},[405,28032,28033],{},[408,28034,28035,28038,28041],{},[411,28036,28037],{"align":23877},"参数\u002F配置",[411,28039,28040],{"align":23877},"功能说明",[411,28042,28043],{"align":23877},"重要性与参考依据",[449,28045,28046,28057,28068,28079,28090,28101,28112,28123,28134,28145,28156,28167,28178,28189,28200],{},[408,28047,28048,28051,28054],{},[454,28049,28050],{"align":23877},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[454,28052,28053],{"align":23877},"指定容器名称，便于后续管理",[454,28055,28056],{"align":23877},"替代随机生成的容器名。",[408,28058,28059,28062,28065],{},[454,28060,28061],{"align":23877},"–gpus all",[454,28063,28064],{"align":23877},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[454,28066,28067],{"align":23877},"用于CUDA加速等GPU依赖任务。",[408,28069,28070,28073,28076],{},[454,28071,28072],{"align":23877},"-e NVIDIA_DRIVER_CAPABILITIES=all",[454,28074,28075],{"align":23877},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[454,28077,28078],{"align":23877},"确保容器内GPU功能完整67。",[408,28080,28081,28084,28087],{},[454,28082,28083],{"align":23877},"-dit",[454,28085,28086],{"align":23877},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[454,28088,28089],{"align":23877},"允许容器在后台运行并支持交互操作。",[408,28091,28092,28095,28098],{},[454,28093,28094],{"align":23877},"–privileged",[454,28096,28097],{"align":23877},"赋予容器完全主机权限（可访问设备、内核模块等）",[454,28099,28100],{"align":23877},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[408,28102,28103,28106,28109],{},[454,28104,28105],{"align":23877},"–net=host",[454,28107,28108],{"align":23877},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[454,28110,28111],{"align":23877},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[408,28113,28114,28117,28120],{},[454,28115,28116],{"align":23877},"–group-add audio–group-add video–group-add dialout",[454,28118,28119],{"align":23877},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[454,28121,28122],{"align":23877},"避免权限问题（如避免无法调用摄像头、麦克风）。",[408,28124,28125,28128,28131],{},[454,28126,28127],{"align":23877},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[454,28129,28130],{"align":23877},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[454,28132,28133],{"align":23877},"支持容器内运行图形界面应用（如OpenCV可视化）。",[408,28135,28136,28139,28142],{},[454,28137,28138],{"align":23877},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[454,28140,28141],{"align":23877},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[454,28143,28144],{"align":23877},"实现容器内图形显示。",[408,28146,28147,28150,28153],{},[454,28148,28149],{"align":23877},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[454,28151,28152],{"align":23877},"挂载X11认证文件（只读）",[454,28154,28155],{"align":23877},"确保容器有权连接宿主机显示服务。",[408,28157,28158,28161,28164],{},[454,28159,28160],{"align":23877},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[454,28162,28163],{"align":23877},"挂载Wayland显示协议相关目录",[454,28165,28166],{"align":23877},"支持Wayland协议的图形显示。",[408,28168,28169,28172,28175],{},[454,28170,28171],{"align":23877},"–ulimit nofile=1024:524288",[454,28173,28174],{"align":23877},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[454,28176,28177],{"align":23877},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[408,28179,28180,28183,28186],{},[454,28181,28182],{"align":23877},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[454,28184,28185],{"align":23877},"挂载宿主机用户目录到容器内同名路径",[454,28187,28188],{"align":23877},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[408,28190,28191,28194,28197],{},[454,28192,28193],{"align":23877},"-w \u002Fhome\u002Ftungchiahui",[454,28195,28196],{"align":23877},"设置容器启动后的默认工作目录",[454,28198,28199],{"align":23877},"直接进入项目路径，方便执行命令2324。",[408,28201,28202,28205,28208],{},[454,28203,28204],{"align":23877},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[454,28206,28207],{"align":23877},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[454,28209,28210],{"align":23877},"提供预配置的深度学习与机器人开发环境。",[14,28212,28213,28214,28216,28217,28220],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[251,28215,24717],{},"加不加",[251,28218,28219],{},"sudo -E","都无所谓。",[14,28222,28223,28224,28226,28227,28229,28230,28233,28234,28236],{},"用户已经被加到docker组了，不用",[251,28225,24717],{},"也行跑，其次，",[251,28228,24717],{},"运行的话，你的",[251,28231,28232],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[251,28235,28232],{},"更不可能变了。",[245,28238,28240],{"className":23963,"code":28239,"language":23965,"meta":174,"style":174},"sudo docker run --name=ros_opencv_cuda \\\n--gpus all \\\n-e NVIDIA_DRIVER_CAPABILITIES=all \\\n-e DISPLAY=$DISPLAY \\\n-dit \\\n--privileged \\\n--net=host \\\n--group-add audio \\\n--group-add video \\\n--group-add dialout \\\n-e XAUTHORITY=$HOME\u002F.Xauthority \\\n-e WAYLAND_DISPLAY=$WAYLAND_DISPLAY \\\n-e XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR \\\n-e QT_QPA_PLATFORM=xcb \\\n-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw \\\n-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri \\\n-v $HOME\u002F.Xauthority:$HOME\u002F.Xauthority:ro \\\n-v \u002Frun\u002Fuser\u002F$(id -u)\u002Fwayland-0:\u002Frun\u002Fuser\u002F$(id -u)\u002Fwayland-0 \\\n-v \u002Frun\u002Fuser\u002F$(id -u):\u002Frun\u002Fuser\u002F$(id -u) \\\n-v $HOME:$HOME \\\n-w $HOME \\\ntungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[251,28241,28242,28255,28265,28275,28287,28294,28301,28308,28318,28327,28336,28350,28362,28374,28383,28393,28402,28417,28450,28477,28488,28495],{"__ignoreMap":174},[254,28243,28244,28246,28248,28250,28253],{"class":256,"line":257},[254,28245,24717],{"class":2103},[254,28247,26461],{"class":369},[254,28249,27371],{"class":369},[254,28251,28252],{"class":313}," --name=ros_opencv_cuda",[254,28254,24819],{"class":313},[254,28256,28257,28260,28263],{"class":256,"line":175},[254,28258,28259],{"class":264},"--gpus ",[254,28261,28262],{"class":369},"all",[254,28264,24819],{"class":313},[254,28266,28267,28270,28273],{"class":256,"line":1319},[254,28268,28269],{"class":264},"-e ",[254,28271,28272],{"class":369},"NVIDIA_DRIVER_CAPABILITIES=all",[254,28274,24819],{"class":313},[254,28276,28277,28279,28282,28285],{"class":256,"line":1334},[254,28278,28269],{"class":264},[254,28280,28281],{"class":369},"DISPLAY=",[254,28283,28284],{"class":264},"$DISPLAY ",[254,28286,26316],{"class":313},[254,28288,28289,28292],{"class":256,"line":1340},[254,28290,28291],{"class":264},"-dit ",[254,28293,26316],{"class":313},[254,28295,28296,28299],{"class":256,"line":1354},[254,28297,28298],{"class":264},"--privileged ",[254,28300,26316],{"class":313},[254,28302,28303,28306],{"class":256,"line":1360},[254,28304,28305],{"class":264},"--net=host ",[254,28307,26316],{"class":313},[254,28309,28310,28313,28316],{"class":256,"line":1451},[254,28311,28312],{"class":264},"--group-add ",[254,28314,28315],{"class":369},"audio",[254,28317,24819],{"class":313},[254,28319,28320,28322,28325],{"class":256,"line":1457},[254,28321,28312],{"class":264},[254,28323,28324],{"class":369},"video",[254,28326,24819],{"class":313},[254,28328,28329,28331,28334],{"class":256,"line":1469},[254,28330,28312],{"class":264},[254,28332,28333],{"class":369},"dialout",[254,28335,24819],{"class":313},[254,28337,28338,28340,28343,28345,28348],{"class":256,"line":1752},[254,28339,28269],{"class":264},[254,28341,28342],{"class":369},"XAUTHORITY=",[254,28344,28232],{"class":264},[254,28346,28347],{"class":369},"\u002F.Xauthority",[254,28349,24819],{"class":313},[254,28351,28352,28354,28357,28360],{"class":256,"line":1757},[254,28353,28269],{"class":264},[254,28355,28356],{"class":369},"WAYLAND_DISPLAY=",[254,28358,28359],{"class":264},"$WAYLAND_DISPLAY ",[254,28361,26316],{"class":313},[254,28363,28364,28366,28369,28372],{"class":256,"line":1763},[254,28365,28269],{"class":264},[254,28367,28368],{"class":369},"XDG_RUNTIME_DIR=",[254,28370,28371],{"class":264},"$XDG_RUNTIME_DIR ",[254,28373,26316],{"class":313},[254,28375,28376,28378,28381],{"class":256,"line":1768},[254,28377,28269],{"class":264},[254,28379,28380],{"class":369},"QT_QPA_PLATFORM=xcb",[254,28382,24819],{"class":313},[254,28384,28385,28388,28391],{"class":256,"line":1782},[254,28386,28387],{"class":264},"-v ",[254,28389,28390],{"class":369},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[254,28392,24819],{"class":313},[254,28394,28395,28397,28400],{"class":256,"line":1787},[254,28396,28387],{"class":264},[254,28398,28399],{"class":369},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[254,28401,24819],{"class":313},[254,28403,28404,28407,28410,28412,28415],{"class":256,"line":1793},[254,28405,28406],{"class":264},"-v $HOME",[254,28408,28409],{"class":369},"\u002F.Xauthority:",[254,28411,28232],{"class":264},[254,28413,28414],{"class":369},"\u002F.Xauthority:ro",[254,28416,24819],{"class":313},[254,28418,28419,28421,28424,28426,28429,28432,28434,28437,28439,28441,28443,28445,28448],{"class":256,"line":1814},[254,28420,28387],{"class":264},[254,28422,28423],{"class":369},"\u002Frun\u002Fuser\u002F",[254,28425,25240],{"class":264},[254,28427,28428],{"class":2103},"id",[254,28430,28431],{"class":313}," -u",[254,28433,693],{"class":264},[254,28435,28436],{"class":369},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[254,28438,25240],{"class":264},[254,28440,28428],{"class":2103},[254,28442,28431],{"class":313},[254,28444,693],{"class":264},[254,28446,28447],{"class":369},"\u002Fwayland-0",[254,28449,24819],{"class":313},[254,28451,28452,28454,28456,28458,28460,28462,28464,28467,28469,28471,28473,28475],{"class":256,"line":1819},[254,28453,28387],{"class":264},[254,28455,28423],{"class":369},[254,28457,25240],{"class":264},[254,28459,28428],{"class":2103},[254,28461,28431],{"class":313},[254,28463,693],{"class":264},[254,28465,28466],{"class":369},":\u002Frun\u002Fuser\u002F",[254,28468,25240],{"class":264},[254,28470,28428],{"class":2103},[254,28472,28431],{"class":313},[254,28474,13855],{"class":264},[254,28476,26316],{"class":313},[254,28478,28479,28481,28483,28486],{"class":256,"line":1833},[254,28480,28406],{"class":264},[254,28482,1123],{"class":369},[254,28484,28485],{"class":264},"$HOME ",[254,28487,26316],{"class":313},[254,28489,28490,28493],{"class":256,"line":1838},[254,28491,28492],{"class":264},"-w $HOME ",[254,28494,26316],{"class":313},[254,28496,28497],{"class":256,"line":1867},[254,28498,28499],{"class":264},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[14,28501,9166],{},[21,28503,28504,28512,28515,28518],{},[24,28505,28506,13936,28508,28511],{},[251,28507,28272],{},[251,28509,28510],{},"--gpus all","没有英伟达显卡请注释。",[24,28513,28514],{},"--name后面请自己为容器起名。",[24,28516,28517],{},"最后一行仓库名称请你自己找对应的镜像填上。",[24,28519,28520,28521,28526],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[23694,28522,28523],{},[414,28524,28525],{},"请不要加","。",[245,28528,28530],{"className":23963,"code":28529,"language":23965,"meta":174,"style":174},"--ulimit nofile=1024:524288 \\\n",[251,28531,28532],{"__ignoreMap":174},[254,28533,28534,28537,28540],{"class":256,"line":257},[254,28535,28536],{"class":2103},"--ulimit",[254,28538,28539],{"class":369}," nofile=1024:524288",[254,28541,24819],{"class":313},[14,28543,28544,28545,28550],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[23694,28546,28547],{},[414,28548,28549],{},"不建议","**.**",[245,28552,28554],{"className":23963,"code":28553,"language":23965,"meta":174,"style":174},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[251,28555,28556,28583,28592],{"__ignoreMap":174},[254,28557,28558,28561,28564,28566,28568,28570,28572,28574,28576,28579,28581],{"class":256,"line":257},[254,28559,28560],{"class":2103},"--user",[254,28562,28563],{"class":264}," $(",[254,28565,28428],{"class":2103},[254,28567,28431],{"class":313},[254,28569,693],{"class":264},[254,28571,1123],{"class":369},[254,28573,25240],{"class":264},[254,28575,28428],{"class":2103},[254,28577,28578],{"class":313}," -g",[254,28580,13855],{"class":264},[254,28582,26316],{"class":313},[254,28584,28585,28587,28590],{"class":256,"line":175},[254,28586,28387],{"class":264},[254,28588,28589],{"class":369},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[254,28591,24819],{"class":313},[254,28593,28594,28596,28599],{"class":256,"line":1319},[254,28595,28387],{"class":264},[254,28597,28598],{"class":369},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[254,28600,24819],{"class":313},[5267,28602,28603],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":174,"searchDepth":175,"depth":175,"links":28605},[28606,28607,28608],{"id":27604,"depth":1319,"text":27605},{"id":27614,"depth":1319,"text":27615},{"id":28025,"depth":1319,"text":28028},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":27596,"description":174},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":28615,"title":28616,"body":28617,"description":174,"extension":181,"meta":30240,"navigation":184,"path":30241,"seo":30242,"stem":30243,"__hash__":30244},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":28618,"toc":30235},[28619,28622,28626,28629,28851,28855,28859,28862,28968,28973,28976,28981,28984,28989,28992,28997,29000,29012,29015,29020,29027,29055,29062,29138,29143,29146,29169,29171,29246,29251,29254,29258,29266,29271,29276,29280,29291,29297,29300,29303,29327,29330,29333,29361,29364,29367,29832,29835,29840,29845,29849,29872,29877,29881,29885,29888,29891,29894,29921,29924,29927,29945,29948,29951,29973,29981,29986,29991,29995,29998,30001,30004,30007,30052,30055,30073,30076,30081,30084,30105,30108,30164,30167,30172,30176,30179,30186,30189,30192,30197,30200,30216,30219,30232],[10,28620,28616],{"id":28621},"_6手动创建docker镜像",[225,28623,28625],{"id":28624},"_61dockerfile","6.1.DockerFile",[14,28627,28628],{},"常用命令：",[402,28630,28631,28642],{},[405,28632,28633],{},[408,28634,28635,28638,28640],{},[411,28636,28637],{"align":23877},"指令",[411,28639,26010],{"align":23877},[411,28641,27633],{"align":23877},[449,28643,28644,28654,28670,28681,28692,28703,28714,28725,28736,28750,28764,28775,28789,28800,28811,28825,28840],{},[408,28645,28646,28648,28651],{},[454,28647,27511],{"align":23877},[454,28649,28650],{"align":23877},"指定基础镜像，是 Dockerfile 的起点",[454,28652,28653],{"align":23877},"FROM ubuntu:22.04",[408,28655,28656,28659,28662],{},[454,28657,28658],{"align":23877},"LABEL",[454,28660,28661],{"align":23877},"添加元数据（如作者、版本等）",[454,28663,28664,28665,28669],{"align":23877},"LABEL maintainer=”",[42,28666,28668],{"href":28667},"mailto:you@example.com","you@example.com","”",[408,28671,28672,28675,28678],{},[454,28673,28674],{"align":23877},"ENV",[454,28676,28677],{"align":23877},"设置环境变量",[454,28679,28680],{"align":23877},"ENV PORT=8080",[408,28682,28683,28686,28689],{},[454,28684,28685],{"align":23877},"ARG",[454,28687,28688],{"align":23877},"构建参数，只在构建期间可用",[454,28690,28691],{"align":23877},"ARG VERSION=1.0",[408,28693,28694,28697,28700],{},[454,28695,28696],{"align":23877},"RUN",[454,28698,28699],{"align":23877},"构建镜像时运行命令",[454,28701,28702],{"align":23877},"RUN apt-get update && apt-get install -y curl",[408,28704,28705,28708,28711],{},[454,28706,28707],{"align":23877},"COPY",[454,28709,28710],{"align":23877},"复制文件到镜像中",[454,28712,28713],{"align":23877},"COPY . \u002Fapp",[408,28715,28716,28719,28722],{},[454,28717,28718],{"align":23877},"ADD",[454,28720,28721],{"align":23877},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[454,28723,28724],{"align":23877},"ADD archive.tar.gz \u002Fdata\u002F",[408,28726,28727,28730,28733],{},[454,28728,28729],{"align":23877},"WORKDIR",[454,28731,28732],{"align":23877},"设置工作目录",[454,28734,28735],{"align":23877},"WORKDIR \u002Fopt",[408,28737,28738,28741,28744],{},[454,28739,28740],{"align":23877},"CMD",[454,28742,28743],{"align":23877},"设置容器启动时默认命令（可被 docker run 覆盖）",[454,28745,28746,28747],{"align":23877},"CMD ",[254,28748,28749],{},"“node”, “index.js”",[408,28751,28752,28755,28758],{},[454,28753,28754],{"align":23877},"ENTRYPOINT",[454,28756,28757],{"align":23877},"设置容器启动时固定命令（通常用于 CLI 工具等）",[454,28759,28760,28761],{"align":23877},"ENTRYPOINT ",[254,28762,28763],{},"“python3”",[408,28765,28766,28769,28772],{},[454,28767,28768],{"align":23877},"EXPOSE",[454,28770,28771],{"align":23877},"声明镜像内服务监听的端口（不会自动映射）",[454,28773,28774],{"align":23877},"EXPOSE 80",[408,28776,28777,28780,28783],{},[454,28778,28779],{"align":23877},"VOLUME",[454,28781,28782],{"align":23877},"声明数据卷挂载点",[454,28784,28785,28786],{"align":23877},"VOLUME ",[254,28787,28788],{},"“\u002Fdata”",[408,28790,28791,28794,28797],{},[454,28792,28793],{"align":23877},"USER",[454,28795,28796],{"align":23877},"设置后续命令执行的用户",[454,28798,28799],{"align":23877},"USER appuser",[408,28801,28802,28805,28808],{},[454,28803,28804],{"align":23877},"ONBUILD",[454,28806,28807],{"align":23877},"当镜像作为其他镜像基础镜像时触发的构建指令",[454,28809,28810],{"align":23877},"ONBUILD COPY . \u002Fsrc",[408,28812,28813,28816,28819],{},[454,28814,28815],{"align":23877},"SHELL",[454,28817,28818],{"align":23877},"更改默认 shell，比如将 sh -c 改为 bash -c",[454,28820,28821,28822],{"align":23877},"SHELL ",[254,28823,28824],{},"“\u002Fbin\u002Fbash”, “-c”",[408,28826,28827,28830,28833],{},[454,28828,28829],{"align":23877},"HEALTHCHECK",[454,28831,28832],{"align":23877},"定义容器运行时的健康检查命令",[454,28834,28835,28836],{"align":23877},"`HEALTHCHECK CMD curl –fail ",[42,28837,28838],{"href":28838,"rel":28839},"http:\u002F\u002Flocalhost:8080",[151],[408,28841,28842,28845,28848],{},[454,28843,28844],{"align":23877},"STOPSIGNAL",[454,28846,28847],{"align":23877},"容器停止时发送的信号",[454,28849,28850],{"align":23877},"STOPSIGNAL SIGKILL",[225,28852,28854],{"id":28853},"_62自己创建容器","6.2.自己创建容器",[22139,28856,28858],{"id":28857},"_621手动创建","6.2.1.手动创建",[14,28860,28861],{},"在x86电脑上编译x86的：",[245,28863,28865],{"className":23963,"code":28864,"language":23965,"meta":174,"style":174},"docker build -t ros-melodic-cuda118-cudnn8-bionic:latest .\n\ndocker build -t ros-noetic-focal:latest .\n\ndocker build -t ros-humble-jammy:latest .\n\ndocker build -t ros-jazzy-noble:latest .\n\ndocker build -t ros-humble-opencv411-cuda128-cudnn970-jammy:latest .\n\ndocker build -t ros-jazzy-opencv411-cuda128-cudnn970-noble:latest .\n",[251,28866,28867,28883,28887,28900,28904,28917,28921,28934,28938,28951,28955],{"__ignoreMap":174},[254,28868,28869,28871,28874,28877,28880],{"class":256,"line":257},[254,28870,26694],{"class":2103},[254,28872,28873],{"class":369}," build",[254,28875,28876],{"class":313}," -t",[254,28878,28879],{"class":369}," ros-melodic-cuda118-cudnn8-bionic:latest",[254,28881,28882],{"class":369}," .\n",[254,28884,28885],{"class":256,"line":175},[254,28886,2540],{"emptyLinePlaceholder":184},[254,28888,28889,28891,28893,28895,28898],{"class":256,"line":1319},[254,28890,26694],{"class":2103},[254,28892,28873],{"class":369},[254,28894,28876],{"class":313},[254,28896,28897],{"class":369}," ros-noetic-focal:latest",[254,28899,28882],{"class":369},[254,28901,28902],{"class":256,"line":1334},[254,28903,2540],{"emptyLinePlaceholder":184},[254,28905,28906,28908,28910,28912,28915],{"class":256,"line":1340},[254,28907,26694],{"class":2103},[254,28909,28873],{"class":369},[254,28911,28876],{"class":313},[254,28913,28914],{"class":369}," ros-humble-jammy:latest",[254,28916,28882],{"class":369},[254,28918,28919],{"class":256,"line":1354},[254,28920,2540],{"emptyLinePlaceholder":184},[254,28922,28923,28925,28927,28929,28932],{"class":256,"line":1360},[254,28924,26694],{"class":2103},[254,28926,28873],{"class":369},[254,28928,28876],{"class":313},[254,28930,28931],{"class":369}," ros-jazzy-noble:latest",[254,28933,28882],{"class":369},[254,28935,28936],{"class":256,"line":1451},[254,28937,2540],{"emptyLinePlaceholder":184},[254,28939,28940,28942,28944,28946,28949],{"class":256,"line":1457},[254,28941,26694],{"class":2103},[254,28943,28873],{"class":369},[254,28945,28876],{"class":313},[254,28947,28948],{"class":369}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[254,28950,28882],{"class":369},[254,28952,28953],{"class":256,"line":1469},[254,28954,2540],{"emptyLinePlaceholder":184},[254,28956,28957,28959,28961,28963,28966],{"class":256,"line":1752},[254,28958,26694],{"class":2103},[254,28960,28873],{"class":369},[254,28962,28876],{"class":313},[254,28964,28965],{"class":369}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[254,28967,28882],{"class":369},[14,28969,28970],{},[1602,28971],{"alt":174,"src":28972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[14,28974,28975],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[14,28977,28978],{},[1602,28979],{"alt":174,"src":28980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[14,28982,28983],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[21,28985,28986],{},[24,28987,28988],{},"创建 Docker Hub 账户",[14,28990,28991],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[21,28993,28994],{"start":175},[24,28995,28996],{},"登录 Docker Hub",[14,28998,28999],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[245,29001,29003],{"className":23963,"code":29002,"language":23965,"meta":174,"style":174},"docker login\n",[251,29004,29005],{"__ignoreMap":174},[254,29006,29007,29009],{"class":256,"line":257},[254,29008,26694],{"class":2103},[254,29010,29011],{"class":369}," login\n",[14,29013,29014],{},"输入你的 Docker Hub 用户名和密码进行验证。",[21,29016,29017],{},[24,29018,29019],{},"为你的镜像打标签",[14,29021,29022,29023,29026],{},"Docker Hub 使用 ",[251,29024,29025],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[245,29028,29030],{"className":23963,"code":29029,"language":23965,"meta":174,"style":174},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[251,29031,29032],{"__ignoreMap":174},[254,29033,29034,29036,29039,29041,29044,29047,29050,29052],{"class":256,"line":257},[254,29035,26694],{"class":2103},[254,29037,29038],{"class":369}," tag",[254,29040,28931],{"class":369},[254,29042,29043],{"class":260}," \u003C",[254,29045,29046],{"class":369},"你的用户",[254,29048,29049],{"class":264},"名",[254,29051,1224],{"class":260},[254,29053,29054],{"class":369},"\u002Fros-jazzy-noble:latest\n",[14,29056,29057,29058,29061],{},"例如，如果你的 Docker Hub 用户名是 ",[251,29059,29060],{},"tungchiahui","，你应该执行：",[245,29063,29065],{"className":23963,"code":29064,"language":23965,"meta":174,"style":174},"docker tag ros-noetic-focal:latest tungchiahui\u002Fros-noetic-focal:latest\n\ndocker tag ros-humble-jammy:latest tungchiahui\u002Fros-humble-jammy:latest\n\ndocker tag ros-jazzy-noble:latest tungchiahui\u002Fros-jazzy-noble:latest\n\ndocker tag ros-humble-opencv411-cuda128-cudnn970-jammy:latest \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n\ndocker tag ros-jazzy-opencv411-cuda128-cudnn970-noble:latest tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[251,29066,29067,29078,29082,29093,29097,29108,29112,29123,29127],{"__ignoreMap":174},[254,29068,29069,29071,29073,29075],{"class":256,"line":257},[254,29070,26694],{"class":2103},[254,29072,29038],{"class":369},[254,29074,28897],{"class":369},[254,29076,29077],{"class":369}," tungchiahui\u002Fros-noetic-focal:latest\n",[254,29079,29080],{"class":256,"line":175},[254,29081,2540],{"emptyLinePlaceholder":184},[254,29083,29084,29086,29088,29090],{"class":256,"line":1319},[254,29085,26694],{"class":2103},[254,29087,29038],{"class":369},[254,29089,28914],{"class":369},[254,29091,29092],{"class":369}," tungchiahui\u002Fros-humble-jammy:latest\n",[254,29094,29095],{"class":256,"line":1334},[254,29096,2540],{"emptyLinePlaceholder":184},[254,29098,29099,29101,29103,29105],{"class":256,"line":1340},[254,29100,26694],{"class":2103},[254,29102,29038],{"class":369},[254,29104,28931],{"class":369},[254,29106,29107],{"class":369}," tungchiahui\u002Fros-jazzy-noble:latest\n",[254,29109,29110],{"class":256,"line":1354},[254,29111,2540],{"emptyLinePlaceholder":184},[254,29113,29114,29116,29118,29120],{"class":256,"line":1360},[254,29115,26694],{"class":2103},[254,29117,29038],{"class":369},[254,29119,28948],{"class":369},[254,29121,29122],{"class":369}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[254,29124,29125],{"class":256,"line":1451},[254,29126,2540],{"emptyLinePlaceholder":184},[254,29128,29129,29131,29133,29135],{"class":256,"line":1457},[254,29130,26694],{"class":2103},[254,29132,29038],{"class":369},[254,29134,28965],{"class":369},[254,29136,29137],{"class":369}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[21,29139,29140],{"start":175},[24,29141,29142],{},"推送镜像到 Docker Hub",[14,29144,29145],{},"使用以下命令将镜像推送到 Docker Hub：",[245,29147,29149],{"className":23963,"code":29148,"language":23965,"meta":174,"style":174},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[251,29150,29151],{"__ignoreMap":174},[254,29152,29153,29155,29158,29160,29162,29164,29166],{"class":256,"line":257},[254,29154,26694],{"class":2103},[254,29156,29157],{"class":369}," push",[254,29159,29043],{"class":260},[254,29161,29046],{"class":369},[254,29163,29049],{"class":264},[254,29165,1224],{"class":260},[254,29167,29168],{"class":369},"\u002Fros-noetic-jazzy-noble:latest\n",[14,29170,14774],{},[245,29172,29174],{"className":23963,"code":29173,"language":23965,"meta":174,"style":174},"docker push tungchiahui\u002Fros-noetic-focal:latest\n\ndocker push tungchiahui\u002Fros-humble-jammy:latest\n\ndocker push tungchiahui\u002Fros-jazzy-noble:latest\n\ndocker push tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n\ndocker push tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n\ndocker push tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[251,29175,29176,29184,29188,29196,29200,29208,29212,29221,29225,29233,29237],{"__ignoreMap":174},[254,29177,29178,29180,29182],{"class":256,"line":257},[254,29179,26694],{"class":2103},[254,29181,29157],{"class":369},[254,29183,29077],{"class":369},[254,29185,29186],{"class":256,"line":175},[254,29187,2540],{"emptyLinePlaceholder":184},[254,29189,29190,29192,29194],{"class":256,"line":1319},[254,29191,26694],{"class":2103},[254,29193,29157],{"class":369},[254,29195,29092],{"class":369},[254,29197,29198],{"class":256,"line":1334},[254,29199,2540],{"emptyLinePlaceholder":184},[254,29201,29202,29204,29206],{"class":256,"line":1340},[254,29203,26694],{"class":2103},[254,29205,29157],{"class":369},[254,29207,29107],{"class":369},[254,29209,29210],{"class":256,"line":1354},[254,29211,2540],{"emptyLinePlaceholder":184},[254,29213,29214,29216,29218],{"class":256,"line":1360},[254,29215,26694],{"class":2103},[254,29217,29157],{"class":369},[254,29219,29220],{"class":369}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[254,29222,29223],{"class":256,"line":1451},[254,29224,2540],{"emptyLinePlaceholder":184},[254,29226,29227,29229,29231],{"class":256,"line":1457},[254,29228,26694],{"class":2103},[254,29230,29157],{"class":369},[254,29232,29137],{"class":369},[254,29234,29235],{"class":256,"line":1469},[254,29236,2540],{"emptyLinePlaceholder":184},[254,29238,29239,29241,29243],{"class":256,"line":1752},[254,29240,26694],{"class":2103},[254,29242,29157],{"class":369},[254,29244,29245],{"class":369}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[21,29247,29248],{"start":1319},[24,29249,29250],{},"验证推送成功",[14,29252,29253],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[14,29255,29256],{},[414,29257,3924],{},[1271,29259,29260,29263],{},[24,29261,29262],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[24,29264,29265],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[14,29267,29268],{},[1602,29269],{"alt":174,"src":29270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[14,29272,29273],{},[1602,29274],{"alt":174,"src":29275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[22139,29277,29279],{"id":29278},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[14,29281,29282,29283,29286,29287,29290],{},"如果您想在 ",[414,29284,29285],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[414,29288,29289],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[14,29292,29293,29294],{},"1. ",[414,29295,29296],{},"启用 Docker 跨平台构建",[14,29298,29299],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[14,29301,29302],{},"第一步：启用 buildx（只需执行一次）",[245,29304,29306],{"className":23963,"code":29305,"language":23965,"meta":174,"style":174},"docker buildx create --name multiarch_builder --use\n",[251,29307,29308],{"__ignoreMap":174},[254,29309,29310,29312,29315,29318,29321,29324],{"class":256,"line":257},[254,29311,26694],{"class":2103},[254,29313,29314],{"class":369}," buildx",[254,29316,29317],{"class":369}," create",[254,29319,29320],{"class":313}," --name",[254,29322,29323],{"class":369}," multiarch_builder",[254,29325,29326],{"class":313}," --use\n",[14,29328,29329],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[14,29331,29332],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[245,29334,29336],{"className":23963,"code":29335,"language":23965,"meta":174,"style":174},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[251,29337,29338],{"__ignoreMap":174},[254,29339,29340,29342,29344,29346,29349,29352,29355,29358],{"class":256,"line":257},[254,29341,26694],{"class":2103},[254,29343,27371],{"class":369},[254,29345,27374],{"class":313},[254,29347,29348],{"class":313}," --privileged",[254,29350,29351],{"class":369}," multiarch\u002Fqemu-user-static",[254,29353,29354],{"class":313}," --reset",[254,29356,29357],{"class":313}," -p",[254,29359,29360],{"class":369}," yes\n",[14,29362,29363],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[14,29365,29366],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[245,29368,29370],{"className":23963,"code":29369,"language":23965,"meta":174,"style":174},"docker buildx build --platform linux\u002Famd64,linux\u002Farm64 -t \u003C你的镜像名>:\u003C标签> --push .\n\n# 例子：\ndocker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fros:noetic-focal \\\n --push \\\n .\n\ndocker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fros:humble-jammy \\\n --push \\\n .\n\ndocker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fros:jazzy-noble \\\n --push \\\n .\n\n docker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal \\\n --push \\\n .\n\ndocker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy \\\n --push \\\n .\n\n docker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble \\\n --push \\\n .\n\ndocker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal \\\n --push \\\n .\n\ndocker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy \\\n --push \\\n .\n\n docker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble \\\n --push \\\n .\n\n  docker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy \\\n --push \\\n .\n",[251,29371,29372,29414,29418,29423,29433,29443,29452,29458,29462,29466,29476,29484,29493,29499,29503,29507,29517,29525,29534,29540,29544,29548,29558,29566,29575,29581,29585,29589,29599,29607,29616,29622,29626,29630,29640,29648,29657,29663,29667,29671,29681,29689,29698,29704,29708,29712,29722,29730,29739,29745,29749,29753,29763,29771,29780,29786,29790,29794,29805,29813,29822,29828],{"__ignoreMap":174},[254,29373,29374,29376,29378,29380,29383,29386,29388,29390,29393,29395,29397,29399,29401,29404,29407,29409,29412],{"class":256,"line":257},[254,29375,26694],{"class":2103},[254,29377,29314],{"class":369},[254,29379,28873],{"class":369},[254,29381,29382],{"class":313}," --platform",[254,29384,29385],{"class":369}," linux\u002Famd64,linux\u002Farm64",[254,29387,28876],{"class":313},[254,29389,29043],{"class":260},[254,29391,29392],{"class":369},"你的镜像",[254,29394,29049],{"class":264},[254,29396,1224],{"class":260},[254,29398,1123],{"class":369},[254,29400,1174],{"class":260},[254,29402,29403],{"class":369},"标",[254,29405,29406],{"class":264},"签",[254,29408,1224],{"class":260},[254,29410,29411],{"class":313}," --push",[254,29413,28882],{"class":369},[254,29415,29416],{"class":256,"line":175},[254,29417,2540],{"emptyLinePlaceholder":184},[254,29419,29420],{"class":256,"line":1319},[254,29421,29422],{"class":323},"# 例子：\n",[254,29424,29425,29427,29429,29431],{"class":256,"line":1334},[254,29426,26694],{"class":2103},[254,29428,29314],{"class":369},[254,29430,28873],{"class":369},[254,29432,24819],{"class":313},[254,29434,29435,29438,29441],{"class":256,"line":1340},[254,29436,29437],{"class":264},"--platform ",[254,29439,29440],{"class":369},"linux\u002Famd64,linux\u002Farm64",[254,29442,24819],{"class":313},[254,29444,29445,29447,29450],{"class":256,"line":1354},[254,29446,28876],{"class":313},[254,29448,29449],{"class":369}," tungchiahui\u002Fros:noetic-focal",[254,29451,24819],{"class":313},[254,29453,29454,29456],{"class":256,"line":1360},[254,29455,29411],{"class":313},[254,29457,24819],{"class":313},[254,29459,29460],{"class":256,"line":1451},[254,29461,28882],{"class":369},[254,29463,29464],{"class":256,"line":1457},[254,29465,2540],{"emptyLinePlaceholder":184},[254,29467,29468,29470,29472,29474],{"class":256,"line":1469},[254,29469,26694],{"class":2103},[254,29471,29314],{"class":369},[254,29473,28873],{"class":369},[254,29475,24819],{"class":313},[254,29477,29478,29480,29482],{"class":256,"line":1752},[254,29479,29437],{"class":264},[254,29481,29440],{"class":369},[254,29483,24819],{"class":313},[254,29485,29486,29488,29491],{"class":256,"line":1757},[254,29487,28876],{"class":313},[254,29489,29490],{"class":369}," tungchiahui\u002Fros:humble-jammy",[254,29492,24819],{"class":313},[254,29494,29495,29497],{"class":256,"line":1763},[254,29496,29411],{"class":313},[254,29498,24819],{"class":313},[254,29500,29501],{"class":256,"line":1768},[254,29502,28882],{"class":369},[254,29504,29505],{"class":256,"line":1782},[254,29506,2540],{"emptyLinePlaceholder":184},[254,29508,29509,29511,29513,29515],{"class":256,"line":1787},[254,29510,26694],{"class":2103},[254,29512,29314],{"class":369},[254,29514,28873],{"class":369},[254,29516,24819],{"class":313},[254,29518,29519,29521,29523],{"class":256,"line":1793},[254,29520,29437],{"class":264},[254,29522,29440],{"class":369},[254,29524,24819],{"class":313},[254,29526,29527,29529,29532],{"class":256,"line":1814},[254,29528,28876],{"class":313},[254,29530,29531],{"class":369}," tungchiahui\u002Fros:jazzy-noble",[254,29533,24819],{"class":313},[254,29535,29536,29538],{"class":256,"line":1819},[254,29537,29411],{"class":313},[254,29539,24819],{"class":313},[254,29541,29542],{"class":256,"line":1833},[254,29543,28882],{"class":369},[254,29545,29546],{"class":256,"line":1838},[254,29547,2540],{"emptyLinePlaceholder":184},[254,29549,29550,29552,29554,29556],{"class":256,"line":1867},[254,29551,26461],{"class":2103},[254,29553,29314],{"class":369},[254,29555,28873],{"class":369},[254,29557,24819],{"class":313},[254,29559,29560,29562,29564],{"class":256,"line":1872},[254,29561,29437],{"class":264},[254,29563,29440],{"class":369},[254,29565,24819],{"class":313},[254,29567,29568,29570,29573],{"class":256,"line":1889},[254,29569,28876],{"class":313},[254,29571,29572],{"class":369}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[254,29574,24819],{"class":313},[254,29576,29577,29579],{"class":256,"line":1894},[254,29578,29411],{"class":313},[254,29580,24819],{"class":313},[254,29582,29583],{"class":256,"line":1899},[254,29584,28882],{"class":369},[254,29586,29587],{"class":256,"line":1904},[254,29588,2540],{"emptyLinePlaceholder":184},[254,29590,29591,29593,29595,29597],{"class":256,"line":1918},[254,29592,26694],{"class":2103},[254,29594,29314],{"class":369},[254,29596,28873],{"class":369},[254,29598,24819],{"class":313},[254,29600,29601,29603,29605],{"class":256,"line":1923},[254,29602,29437],{"class":264},[254,29604,29440],{"class":369},[254,29606,24819],{"class":313},[254,29608,29609,29611,29614],{"class":256,"line":2717},[254,29610,28876],{"class":313},[254,29612,29613],{"class":369}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[254,29615,24819],{"class":313},[254,29617,29618,29620],{"class":256,"line":2731},[254,29619,29411],{"class":313},[254,29621,24819],{"class":313},[254,29623,29624],{"class":256,"line":2739},[254,29625,28882],{"class":369},[254,29627,29628],{"class":256,"line":2744},[254,29629,2540],{"emptyLinePlaceholder":184},[254,29631,29632,29634,29636,29638],{"class":256,"line":2750},[254,29633,26461],{"class":2103},[254,29635,29314],{"class":369},[254,29637,28873],{"class":369},[254,29639,24819],{"class":313},[254,29641,29642,29644,29646],{"class":256,"line":2756},[254,29643,29437],{"class":264},[254,29645,29440],{"class":369},[254,29647,24819],{"class":313},[254,29649,29650,29652,29655],{"class":256,"line":2761},[254,29651,28876],{"class":313},[254,29653,29654],{"class":369}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[254,29656,24819],{"class":313},[254,29658,29659,29661],{"class":256,"line":8089},[254,29660,29411],{"class":313},[254,29662,24819],{"class":313},[254,29664,29665],{"class":256,"line":8113},[254,29666,28882],{"class":369},[254,29668,29669],{"class":256,"line":8118},[254,29670,2540],{"emptyLinePlaceholder":184},[254,29672,29673,29675,29677,29679],{"class":256,"line":8124},[254,29674,26694],{"class":2103},[254,29676,29314],{"class":369},[254,29678,28873],{"class":369},[254,29680,24819],{"class":313},[254,29682,29683,29685,29687],{"class":256,"line":8151},[254,29684,29437],{"class":264},[254,29686,29440],{"class":369},[254,29688,24819],{"class":313},[254,29690,29691,29693,29696],{"class":256,"line":8156},[254,29692,28876],{"class":313},[254,29694,29695],{"class":369}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[254,29697,24819],{"class":313},[254,29699,29700,29702],{"class":256,"line":8162},[254,29701,29411],{"class":313},[254,29703,24819],{"class":313},[254,29705,29706],{"class":256,"line":8174},[254,29707,28882],{"class":369},[254,29709,29710],{"class":256,"line":8186},[254,29711,2540],{"emptyLinePlaceholder":184},[254,29713,29714,29716,29718,29720],{"class":256,"line":8198},[254,29715,26694],{"class":2103},[254,29717,29314],{"class":369},[254,29719,28873],{"class":369},[254,29721,24819],{"class":313},[254,29723,29724,29726,29728],{"class":256,"line":9857},[254,29725,29437],{"class":264},[254,29727,29440],{"class":369},[254,29729,24819],{"class":313},[254,29731,29732,29734,29737],{"class":256,"line":9882},[254,29733,28876],{"class":313},[254,29735,29736],{"class":369}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[254,29738,24819],{"class":313},[254,29740,29741,29743],{"class":256,"line":9905},[254,29742,29411],{"class":313},[254,29744,24819],{"class":313},[254,29746,29747],{"class":256,"line":9929},[254,29748,28882],{"class":369},[254,29750,29751],{"class":256,"line":9934},[254,29752,2540],{"emptyLinePlaceholder":184},[254,29754,29755,29757,29759,29761],{"class":256,"line":9939},[254,29756,26461],{"class":2103},[254,29758,29314],{"class":369},[254,29760,28873],{"class":369},[254,29762,24819],{"class":313},[254,29764,29765,29767,29769],{"class":256,"line":9944},[254,29766,29437],{"class":264},[254,29768,29440],{"class":369},[254,29770,24819],{"class":313},[254,29772,29773,29775,29778],{"class":256,"line":9953},[254,29774,28876],{"class":313},[254,29776,29777],{"class":369}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[254,29779,24819],{"class":313},[254,29781,29782,29784],{"class":256,"line":9958},[254,29783,29411],{"class":313},[254,29785,24819],{"class":313},[254,29787,29788],{"class":256,"line":9964},[254,29789,28882],{"class":369},[254,29791,29792],{"class":256,"line":9985},[254,29793,2540],{"emptyLinePlaceholder":184},[254,29795,29796,29799,29801,29803],{"class":256,"line":9991},[254,29797,29798],{"class":2103},"  docker",[254,29800,29314],{"class":369},[254,29802,28873],{"class":369},[254,29804,24819],{"class":313},[254,29806,29807,29809,29811],{"class":256,"line":10005},[254,29808,29437],{"class":264},[254,29810,29440],{"class":369},[254,29812,24819],{"class":313},[254,29814,29815,29817,29820],{"class":256,"line":10011},[254,29816,28876],{"class":313},[254,29818,29819],{"class":369}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[254,29821,24819],{"class":313},[254,29823,29824,29826],{"class":256,"line":10038},[254,29825,29411],{"class":313},[254,29827,24819],{"class":313},[254,29829,29830],{"class":256,"line":10047},[254,29831,28882],{"class":369},[14,29833,29834],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[14,29836,29837],{},[1602,29838],{"alt":174,"src":29839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[14,29841,29842],{},[1602,29843],{"alt":174,"src":29844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[22139,29846,29848],{"id":29847},"_623清除构建缓存","6.2.3.清除构建缓存",[245,29850,29852],{"className":23963,"code":29851,"language":23965,"meta":174,"style":174},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[251,29853,29854,29859],{"__ignoreMap":174},[254,29855,29856],{"class":256,"line":257},[254,29857,29858],{"class":323},"# 清理BuildKit构建缓存\n",[254,29860,29861,29863,29866,29869],{"class":256,"line":175},[254,29862,26694],{"class":2103},[254,29864,29865],{"class":369}," builder",[254,29867,29868],{"class":369}," prune",[254,29870,29871],{"class":313}," -f\n",[14,29873,29874],{},[1602,29875],{"alt":174,"src":29876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[225,29878,29880],{"id":29879},"_63补充","6.3.补充",[22139,29882,29884],{"id":29883},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[14,29886,29887],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[14,29889,29890],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[14,29892,29893],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[245,29895,29897],{"className":23963,"code":29896,"language":23965,"meta":174,"style":174},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[251,29898,29899,29906],{"__ignoreMap":174},[254,29900,29901,29903],{"class":256,"line":257},[254,29902,27511],{"class":2103},[254,29904,29905],{"class":369}," nginx\n",[254,29907,29908,29910,29913,29916,29918],{"class":256,"line":175},[254,29909,28696],{"class":2103},[254,29911,29912],{"class":369}," echo",[254,29914,29915],{"class":369}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[254,29917,26363],{"class":260},[254,29919,29920],{"class":369}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[14,29922,29923],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[14,29925,29926],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[245,29928,29930],{"className":23963,"code":29929,"language":23965,"meta":174,"style":174},"docker build -t nginx:tuling .\n",[251,29931,29932],{"__ignoreMap":174},[254,29933,29934,29936,29938,29940,29943],{"class":256,"line":257},[254,29935,26694],{"class":2103},[254,29937,28873],{"class":369},[254,29939,28876],{"class":313},[254,29941,29942],{"class":369}," nginx:tuling",[254,29944,28882],{"class":369},[14,29946,29947],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[14,29949,29950],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[245,29952,29954],{"className":23963,"code":29953,"language":23965,"meta":174,"style":174},"docker run -d -p 92:80 nginx:tuling\n",[251,29955,29956],{"__ignoreMap":174},[254,29957,29958,29960,29962,29965,29967,29970],{"class":256,"line":257},[254,29959,26694],{"class":2103},[254,29961,27371],{"class":369},[254,29963,29964],{"class":313}," -d",[254,29966,29357],{"class":313},[254,29968,29969],{"class":369}," 92:80",[254,29971,29972],{"class":369}," nginx:tuling\n",[14,29974,29975,29976],{},"4、访问 ",[42,29977,29980],{"href":29978,"rel":29979},"http:\u002F\u002FDocker%E5%AE%BF%E4%B8%BB%E6%9C%BAIP:92\u002F%EF%BC%8C%E5%8F%AF%E7%9C%8B%E5%88%B0%E4%B8%8B%E5%9B%BE%E6%89%80%E7%A4%BA%E7%95%8C%E9%9D%A2",[151],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[14,29982,29983],{},[1602,29984],{"alt":174,"src":29985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[14,29987,29988],{},[1602,29989],{"alt":174,"src":29990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[22139,29992,29994],{"id":29993},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[14,29996,29997],{},"只需要知道大体流程即可",[14,29999,30000],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[14,30002,30003],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[14,30005,30006],{},"2、在Dockerfile中添加以下内容",[245,30008,30010],{"className":26232,"code":30009,"language":26234,"meta":174,"style":174},"# 基于哪个镜像\nFrom java:8\n# 复制文件到容器\nADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n# 声明需要暴露的端口\nEXPOSE 8877\n# 配置容器启动后执行的命令\nENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[251,30011,30012,30017,30022,30027,30032,30037,30042,30047],{"__ignoreMap":174},[254,30013,30014],{"class":256,"line":257},[254,30015,30016],{},"# 基于哪个镜像\n",[254,30018,30019],{"class":256,"line":175},[254,30020,30021],{},"From java:8\n",[254,30023,30024],{"class":256,"line":1319},[254,30025,30026],{},"# 复制文件到容器\n",[254,30028,30029],{"class":256,"line":1334},[254,30030,30031],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[254,30033,30034],{"class":256,"line":1340},[254,30035,30036],{},"# 声明需要暴露的端口\n",[254,30038,30039],{"class":256,"line":1354},[254,30040,30041],{},"EXPOSE 8877\n",[254,30043,30044],{"class":256,"line":1360},[254,30045,30046],{},"# 配置容器启动后执行的命令\n",[254,30048,30049],{"class":256,"line":1451},[254,30050,30051],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[14,30053,30054],{},"3、使用docker build命令构建镜像",[245,30056,30058],{"className":23963,"code":30057,"language":23965,"meta":174,"style":174},"docker build -t tulingmall-member:0.0.5 .\n",[251,30059,30060],{"__ignoreMap":174},[254,30061,30062,30064,30066,30068,30071],{"class":256,"line":257},[254,30063,26694],{"class":2103},[254,30065,28873],{"class":369},[254,30067,28876],{"class":313},[254,30069,30070],{"class":369}," tulingmall-member:0.0.5",[254,30072,28882],{"class":369},[14,30074,30075],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[14,30077,30078],{},[1602,30079],{"alt":174,"src":30080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[14,30082,30083],{},"4、启动镜像，加-d可在后台启动",[245,30085,30087],{"className":23963,"code":30086,"language":23965,"meta":174,"style":174},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[251,30088,30089],{"__ignoreMap":174},[254,30090,30091,30093,30095,30097,30099,30102],{"class":256,"line":257},[254,30092,26694],{"class":2103},[254,30094,27371],{"class":369},[254,30096,29964],{"class":313},[254,30098,29357],{"class":313},[254,30100,30101],{"class":369}," 8877:8877",[254,30103,30104],{"class":369}," tulingmall-member:0.0.5\n",[14,30106,30107],{},"加上JVM参数：",[245,30109,30111],{"className":23963,"code":30110,"language":23965,"meta":174,"style":174},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\ndocker run  -d -p 8877:8877 \\\n-e SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848  \\\n-e JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'  \\\n--cap-add=SYS_PTRACE  \\\ntulingmall-member:0.0.5\n",[251,30112,30113,30118,30133,30143,30152,30159],{"__ignoreMap":174},[254,30114,30115],{"class":256,"line":257},[254,30116,30117],{"class":323},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[254,30119,30120,30122,30124,30127,30129,30131],{"class":256,"line":175},[254,30121,26694],{"class":2103},[254,30123,27371],{"class":369},[254,30125,30126],{"class":313},"  -d",[254,30128,29357],{"class":313},[254,30130,30101],{"class":369},[254,30132,24819],{"class":313},[254,30134,30135,30137,30140],{"class":256,"line":1319},[254,30136,28269],{"class":264},[254,30138,30139],{"class":369},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[254,30141,30142],{"class":313},"  \\\n",[254,30144,30145,30147,30150],{"class":256,"line":1334},[254,30146,28269],{"class":264},[254,30148,30149],{"class":369},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[254,30151,30142],{"class":313},[254,30153,30154,30157],{"class":256,"line":1340},[254,30155,30156],{"class":264},"--cap-add=SYS_PTRACE  ",[254,30158,26316],{"class":313},[254,30160,30161],{"class":256,"line":1354},[254,30162,30163],{"class":264},"tulingmall-member:0.0.5\n",[14,30165,30166],{},"5、访问会员服务接口",[14,30168,30169],{},[1602,30170],{"alt":174,"src":30171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[22139,30173,30175],{"id":30174},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[14,30177,30178],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[14,30180,30181,30182],{},"阿里云docker镜像仓库：",[42,30183,30184],{"href":30184,"rel":30185},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[151],[14,30187,30188],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[14,30190,30191],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[14,30193,30194],{},[1602,30195],{"alt":174,"src":30196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[14,30198,30199],{},"要把镜像推送到镜像仓库",[245,30201,30203],{"className":23963,"code":30202,"language":23965,"meta":174,"style":174},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[251,30204,30205],{"__ignoreMap":174},[254,30206,30207,30209,30211,30213],{"class":256,"line":257},[254,30208,26694],{"class":2103},[254,30210,29038],{"class":369},[254,30212,30070],{"class":369},[254,30214,30215],{"class":369}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[14,30217,30218],{},"最后将镜像推送到远程仓库",[245,30220,30222],{"className":23963,"code":30221,"language":23965,"meta":174,"style":174},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[251,30223,30224],{"__ignoreMap":174},[254,30225,30226,30228,30230],{"class":256,"line":257},[254,30227,26694],{"class":2103},[254,30229,29157],{"class":369},[254,30231,30215],{"class":369},[5267,30233,30234],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":174,"searchDepth":175,"depth":175,"links":30236},[30237,30238,30239],{"id":28624,"depth":1319,"text":28625},{"id":28853,"depth":1319,"text":28854},{"id":29879,"depth":1319,"text":29880},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":28616,"description":174},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30246,"title":30247,"body":30248,"description":174,"extension":181,"meta":30391,"navigation":184,"path":30392,"seo":30393,"stem":30394,"__hash__":30395},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30249,"toc":30389},[30250,30253,30258,30263,30266,30271,30276,30279,30284,30289,30292,30297,30300,30303,30306,30309,30312,30315,30335,30357,30360,30363,30383,30386],[10,30251,30247],{"id":30252},"_7vscode远程开发",[21,30254,30255],{},[24,30256,30257],{},"插件1：微软Docker工具",[14,30259,30260],{},[1602,30261],{"alt":174,"src":30262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[14,30264,30265],{},"docker扩展插件已经进化为container tools了，请安装container tools",[14,30267,30268],{},[1602,30269],{"alt":174,"src":30270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[21,30272,30273],{"start":175},[24,30274,30275],{},"插件2：微软Docker远程开发工具",[14,30277,30278],{},"下面这是远程开发的插件。",[14,30280,30281],{},[1602,30282],{"alt":174,"src":30283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[14,30285,30286],{},[1602,30287],{"alt":174,"src":30288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[14,30290,30291],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[14,30293,30294],{},[1602,30295],{"alt":174,"src":30296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[14,30298,30299],{},"安装完拓展之后，vscode进行链接：",[14,30301,30302],{},"1.按ctrl+shift+p",[14,30304,30305],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[14,30307,30308],{},"3.选择目前运行的容器",[14,30310,30311],{},"4.VS Code 会在新窗口中打开并连接到容器",[14,30313,30314],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[245,30316,30318],{"className":23963,"code":30317,"language":23965,"meta":174,"style":174},"docker run -v 主机目录:容器目录 image-name\n",[251,30319,30320],{"__ignoreMap":174},[254,30321,30322,30324,30326,30329,30332],{"class":256,"line":257},[254,30323,26694],{"class":2103},[254,30325,27371],{"class":369},[254,30327,30328],{"class":313}," -v",[254,30330,30331],{"class":369}," 主机目录:容器目录",[254,30333,30334],{"class":369}," image-name\n",[245,30336,30338],{"className":23963,"code":30337,"language":23965,"meta":174,"style":174},"docker run -it -v \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[251,30339,30340],{"__ignoreMap":174},[254,30341,30342,30344,30346,30349,30351,30354],{"class":256,"line":257},[254,30343,26694],{"class":2103},[254,30345,27371],{"class":369},[254,30347,30348],{"class":313}," -it",[254,30350,30328],{"class":313},[254,30352,30353],{"class":369}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[254,30355,30356],{"class":369}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[14,30358,30359],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[14,30361,30362],{},"查看挂载情况：",[245,30364,30366],{"className":23963,"code":30365,"language":23965,"meta":174,"style":174},"mount | grep -i project\n",[251,30367,30368],{"__ignoreMap":174},[254,30369,30370,30373,30375,30378,30380],{"class":256,"line":257},[254,30371,30372],{"class":2103},"mount",[254,30374,25250],{"class":260},[254,30376,30377],{"class":2103}," grep",[254,30379,26571],{"class":313},[254,30381,30382],{"class":369}," project\n",[14,30384,30385],{},"也可以通过ls来进行查看",[5267,30387,30388],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":174,"searchDepth":175,"depth":175,"links":30390},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30247,"description":174},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30397,"title":30398,"body":30399,"description":23518,"extension":181,"meta":30403,"navigation":184,"path":30405,"seo":30406,"stem":30407,"__hash__":30408},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30400,"toc":30401},[],{"title":174,"searchDepth":175,"depth":175,"links":30402},[],{"category":30404},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30398,"description":23518},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30410,"title":30411,"body":30412,"description":23518,"extension":181,"meta":30416,"navigation":184,"path":30417,"seo":30418,"stem":30419,"__hash__":30420},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30413,"toc":30414},[],{"title":174,"searchDepth":175,"depth":175,"links":30415},[],{"category":30404},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30411,"description":23518},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30422,"title":30423,"body":30424,"description":23518,"extension":181,"meta":30717,"navigation":184,"path":30718,"seo":30719,"stem":30720,"__hash__":30721},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":30425,"toc":30715},[30426,30429,30437,30452,30457,30508,30511,30517,30704,30709,30712],[10,30427,30423],{"id":30428},"_1验证深度学习环境",[14,30430,30431,30432],{},"关于环境的安装，看",[42,30433,30436],{"href":30434,"rel":30435},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[151],"Pytorch-->深度学习",[14,30438,30439,30440,30443,30444,30447,30448,30451],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[251,30441,30442],{},"pytorch-cuda=12.4"," 是一个“ ",[414,30445,30446],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[414,30449,30450],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[14,30453,30454],{},[1602,30455],{"alt":174,"src":30456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-001.png",[245,30458,30460],{"className":23963,"code":30459,"language":23965,"meta":174,"style":174},"# CUDA 12.4\nconda install pytorch==2.5.1 torchvision==0.20.1 torchaudio==2.5.1 pytorch-cuda=12.4 -c pytorch -c nvidia\n",[251,30461,30462,30467],{"__ignoreMap":174},[254,30463,30464],{"class":256,"line":257},[254,30465,30466],{"class":323},"# CUDA 12.4\n",[254,30468,30469,30472,30474,30477,30480,30483,30486,30489,30491,30494,30497,30500,30503,30505],{"class":256,"line":175},[254,30470,30471],{"class":2103},"conda",[254,30473,23975],{"class":369},[254,30475,30476],{"class":369}," pytorch==",[254,30478,30479],{"class":313},"2.5.1",[254,30481,30482],{"class":369}," torchvision==",[254,30484,30485],{"class":313},"0.20.1",[254,30487,30488],{"class":369}," torchaudio==",[254,30490,30479],{"class":313},[254,30492,30493],{"class":369}," pytorch-cuda=",[254,30495,30496],{"class":313},"12.4",[254,30498,30499],{"class":313}," -c",[254,30501,30502],{"class":369}," pytorch",[254,30504,30499],{"class":313},[254,30506,30507],{"class":369}," nvidia\n",[14,30509,30510],{},"）：",[14,30512,30513],{},[42,30514,30515],{"href":30515,"rel":30516},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[151],[245,30518,30522],{"className":30519,"code":30520,"language":30521,"meta":174,"style":174},"language-python shiki shiki-themes github-light github-dark","# 对深度学习环境进行测试\nimport torch\n# 查看cuda是否被激活\nflag=torch.cuda.is_available()\nprint(\"cuda:\", flag)   #返回true的话说明被激活\n# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\nngpu=1\ndevice=torch.device(\"cuda:0\" if(torch.cuda.is_available() and ngpu>0) else \"cpu\")\nprint(device)\nprint(torch.cuda.get_device_name(0))\nprint(torch.rand(3,3).cuda())\n# 查看cuda和cudnn的版本\ncuda_version=torch.version.cuda\nprint(\"cuda version\",cuda_version)\ncudnn_version=torch.backends.cudnn.version()\nprint(\"cudnn version\",cudnn_version)\n","python",[251,30523,30524,30529,30537,30542,30552,30568,30573,30583,30620,30627,30639,30655,30660,30670,30682,30692],{"__ignoreMap":174},[254,30525,30526],{"class":256,"line":257},[254,30527,30528],{"class":323},"# 对深度学习环境进行测试\n",[254,30530,30531,30534],{"class":256,"line":175},[254,30532,30533],{"class":260},"import",[254,30535,30536],{"class":264}," torch\n",[254,30538,30539],{"class":256,"line":1319},[254,30540,30541],{"class":323},"# 查看cuda是否被激活\n",[254,30543,30544,30547,30549],{"class":256,"line":1334},[254,30545,30546],{"class":264},"flag",[254,30548,310],{"class":260},[254,30550,30551],{"class":264},"torch.cuda.is_available()\n",[254,30553,30554,30557,30559,30562,30565],{"class":256,"line":1340},[254,30555,30556],{"class":313},"print",[254,30558,265],{"class":264},[254,30560,30561],{"class":369},"\"cuda:\"",[254,30563,30564],{"class":264},", flag)   ",[254,30566,30567],{"class":323},"#返回true的话说明被激活\n",[254,30569,30570],{"class":256,"line":1354},[254,30571,30572],{"class":323},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[254,30574,30575,30578,30580],{"class":256,"line":1360},[254,30576,30577],{"class":264},"ngpu",[254,30579,310],{"class":260},[254,30581,30582],{"class":313},"1\n",[254,30584,30585,30588,30590,30593,30596,30598,30601,30604,30607,30609,30611,30613,30615,30618],{"class":256,"line":1451},[254,30586,30587],{"class":264},"device",[254,30589,310],{"class":260},[254,30591,30592],{"class":264},"torch.device(",[254,30594,30595],{"class":369},"\"cuda:0\"",[254,30597,1844],{"class":260},[254,30599,30600],{"class":264},"(torch.cuda.is_available() ",[254,30602,30603],{"class":260},"and",[254,30605,30606],{"class":264}," ngpu",[254,30608,1224],{"class":260},[254,30610,456],{"class":313},[254,30612,13855],{"class":264},[254,30614,1841],{"class":260},[254,30616,30617],{"class":369}," \"cpu\"",[254,30619,271],{"class":264},[254,30621,30622,30624],{"class":256,"line":1457},[254,30623,30556],{"class":313},[254,30625,30626],{"class":264},"(device)\n",[254,30628,30629,30631,30634,30636],{"class":256,"line":1469},[254,30630,30556],{"class":313},[254,30632,30633],{"class":264},"(torch.cuda.get_device_name(",[254,30635,456],{"class":313},[254,30637,30638],{"class":264},"))\n",[254,30640,30641,30643,30646,30648,30650,30652],{"class":256,"line":1752},[254,30642,30556],{"class":313},[254,30644,30645],{"class":264},"(torch.rand(",[254,30647,336],{"class":313},[254,30649,642],{"class":264},[254,30651,336],{"class":313},[254,30653,30654],{"class":264},").cuda())\n",[254,30656,30657],{"class":256,"line":1757},[254,30658,30659],{"class":323},"# 查看cuda和cudnn的版本\n",[254,30661,30662,30665,30667],{"class":256,"line":1763},[254,30663,30664],{"class":264},"cuda_version",[254,30666,310],{"class":260},[254,30668,30669],{"class":264},"torch.version.cuda\n",[254,30671,30672,30674,30676,30679],{"class":256,"line":1768},[254,30673,30556],{"class":313},[254,30675,265],{"class":264},[254,30677,30678],{"class":369},"\"cuda version\"",[254,30680,30681],{"class":264},",cuda_version)\n",[254,30683,30684,30687,30689],{"class":256,"line":1782},[254,30685,30686],{"class":264},"cudnn_version",[254,30688,310],{"class":260},[254,30690,30691],{"class":264},"torch.backends.cudnn.version()\n",[254,30693,30694,30696,30698,30701],{"class":256,"line":1787},[254,30695,30556],{"class":313},[254,30697,265],{"class":264},[254,30699,30700],{"class":369},"\"cudnn version\"",[254,30702,30703],{"class":264},",cudnn_version)\n",[14,30705,30706],{},[1602,30707],{"alt":174,"src":30708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-002.png",[14,30710,30711],{},"cuda:0 指的是一块显卡",[5267,30713,30714],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":174,"searchDepth":175,"depth":175,"links":30716},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30423,"description":23518},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":30723,"title":30724,"body":30725,"description":23518,"extension":181,"meta":50529,"navigation":184,"path":50530,"seo":50531,"stem":50532,"__hash__":50533},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":30726,"toc":50523},[30727,30730,30734,30738,30741,30746,30751,30754,30759,30764,30769,30772,30776,30781,30785,30790,30793,30798,30801,30804,30807,30810,30815,30818,30823,30828,30833,30838,30841,30845,30848,30853,31457,31462,31465,31470,31473,31476,31940,31943,31946,31949,31952,34003,34006,34011,34016,34811,34814,34819,35597,35601,37260,37264,37978,37982,37986,37991,37996,38001,38004,38009,38014,38019,38024,38029,38033,38038,39320,39325,39328,39331,39334,39489,39492,39495,40711,40716,41411,41415,41419,41424,41429,41432,41437,41442,41447,41452,41457,41462,41467,41472,41477,41482,41487,41492,41497,41502,41507,41512,41517,41522,41527,41532,41537,41542,41547,41552,41557,41562,41567,41572,41577,41582,41586,41590,41593,43071,43075,44722,44726,45420,45424,45427,45430,45974,45977,45981,45984,47381,47385,47388,47966,49753,49757,49760,50520],[10,30728,30724],{"id":30729},"_2经典神经网络",[225,30731,30733],{"id":30732},"_21lenet与alexnet","2.1.LeNet与AlexNet",[22139,30735,30737],{"id":30736},"_211原理介绍","2.1.1.原理介绍",[14,30739,30740],{},"LeNet-5",[21,30742,30743],{},[24,30744,30745],{},"原理",[14,30747,30748],{},[1602,30749],{"alt":174,"src":30750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-003.png",[14,30752,30753],{},"B是batch批次；C是channel通道",[21,30755,30756],{"start":175},[24,30757,30758],{},"网络参数详细",[14,30760,30761],{},[1602,30762],{"alt":174,"src":30763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-004.png",[14,30765,30766],{},[1602,30767],{"alt":174,"src":30768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-005.png",[14,30770,30771],{},"AlexNet",[21,30773,30774],{},[24,30775,30745],{},[14,30777,30778],{},[1602,30779],{"alt":174,"src":30780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-006.png",[21,30782,30783],{"start":175},[24,30784,30758],{},[14,30786,30787],{},[1602,30788],{"alt":174,"src":30789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-007.png",[14,30791,30792],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[14,30794,30795],{},[1602,30796],{"alt":174,"src":30797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-008.png",[14,30799,30800],{},"数据处理中的图像增强操作:",[14,30802,30803],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[14,30805,30806],{},"①增加数据量，保证训练数据充足；②防止过拟合",[14,30808,30809],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[14,30811,30812],{},[1602,30813],{"alt":174,"src":30814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-009.png",[14,30816,30817],{},"提升网络精确度的方法：LRN正则化",[14,30819,30820],{},[1602,30821],{"alt":174,"src":30822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-010.png",[14,30824,30825],{},[1602,30826],{"alt":174,"src":30827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-011.png",[21,30829,30830],{"start":1319},[24,30831,30832],{},"AlexNet的总结",[14,30834,30835],{},[1602,30836],{"alt":174,"src":30837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-012.png",[14,30839,30840],{},"比LeNet模型要深一丢丢",[22139,30842,30844],{"id":30843},"_212代码实现","2.1.2.代码实现",[14,30846,30847],{},"（1）LeNet",[21,30849,30850],{},[24,30851,30852],{},"模型搭建",[245,30854,30856],{"className":30519,"code":30855,"language":30521,"meta":174,"style":174},"# 导入库\nimport torch\n# 导入神经网络层\nfrom torch import nn\n# 导入展示神经网络参数的包\nfrom torchsummary import summary\n\nclass LeNet(nn.Module):\n    # 模型初始化:\n    # 定义一些网络层和激活函数\n    def __init__(self):\n        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n        super(LeNet,self).__init__()\n\n        # 定义网络层\n        self.c1=nn.Conv2d(in_channels=1,out_channels=6,kernel_size=5,padding=2)\n        self.sig=nn.Sigmoid()\n        # 定义池化\n        self.s2=nn.AvgPool2d(kernel_size=2,stride=2)\n        self.c3=nn.Conv2d(in_channels=6,out_channels=16,kernel_size=5)\n        self.s4=nn.AvgPool2d(kernel_size=2,stride=2)\n        # 定义平展层\n        self.flatten=nn.Flatten()\n        # 定义全连接层\n        self.f5=nn.Linear(400,120)\n        self.f6=nn.Linear(120,84)\n        self.f7=nn.Linear(84,10)\n\n    # 写工具->写前向传播\n    def forward(self,x):\n        x=self.sig(self.c1(x))\n        x=self.s2(x)\n        x=self.sig(self.c3(x))\n        x=self.s4(x)\n        x=self.flatten(x)\n        x=self.sig(self.f5(x))\n        x=self.sig(self.f6(x))\n        x=self.f7(x)\n        return x\n\nif __name__==\"__main__\":\n    # 判断是否有cuda是否激活,有GPU会返回cuda\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n    # 如果就是想指定用cpu用下方代码:\n    # device=\"cpu\"\n    # print(device)\n\n    # 实例化模型\n    # 将模型放到设备中去运行\n    model=LeNet().to(device)\n    print(summary(model,(1,28,28)))\n",[251,30857,30858,30863,30869,30874,30887,30892,30904,30908,30928,30933,30938,30949,30954,30973,30977,30982,31031,31043,31048,31077,31112,31139,31144,31156,31161,31181,31200,31219,31223,31228,31238,31255,31266,31281,31292,31303,31318,31333,31344,31351,31355,31369,31374,31397,31402,31407,31412,31416,31421,31426,31436],{"__ignoreMap":174},[254,30859,30860],{"class":256,"line":257},[254,30861,30862],{"class":323},"# 导入库\n",[254,30864,30865,30867],{"class":256,"line":175},[254,30866,30533],{"class":260},[254,30868,30536],{"class":264},[254,30870,30871],{"class":256,"line":1319},[254,30872,30873],{"class":323},"# 导入神经网络层\n",[254,30875,30876,30879,30882,30884],{"class":256,"line":1334},[254,30877,30878],{"class":260},"from",[254,30880,30881],{"class":264}," torch ",[254,30883,30533],{"class":260},[254,30885,30886],{"class":264}," nn\n",[254,30888,30889],{"class":256,"line":1340},[254,30890,30891],{"class":323},"# 导入展示神经网络参数的包\n",[254,30893,30894,30896,30899,30901],{"class":256,"line":1354},[254,30895,30878],{"class":260},[254,30897,30898],{"class":264}," torchsummary ",[254,30900,30533],{"class":260},[254,30902,30903],{"class":264}," summary\n",[254,30905,30906],{"class":256,"line":1360},[254,30907,2540],{"emptyLinePlaceholder":184},[254,30909,30910,30912,30915,30917,30920,30922,30925],{"class":256,"line":1451},[254,30911,14835],{"class":260},[254,30913,30914],{"class":2103}," LeNet",[254,30916,265],{"class":264},[254,30918,30919],{"class":2103},"nn",[254,30921,822],{"class":264},[254,30923,30924],{"class":2103},"Module",[254,30926,30927],{"class":264},"):\n",[254,30929,30930],{"class":256,"line":1457},[254,30931,30932],{"class":323},"    # 模型初始化:\n",[254,30934,30935],{"class":256,"line":1469},[254,30936,30937],{"class":323},"    # 定义一些网络层和激活函数\n",[254,30939,30940,30943,30946],{"class":256,"line":1752},[254,30941,30942],{"class":260},"    def",[254,30944,30945],{"class":313}," __init__",[254,30947,30948],{"class":264},"(self):\n",[254,30950,30951],{"class":256,"line":1757},[254,30952,30953],{"class":323},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[254,30955,30956,30959,30962,30965,30968,30971],{"class":256,"line":1763},[254,30957,30958],{"class":313},"        super",[254,30960,30961],{"class":264},"(LeNet,",[254,30963,30964],{"class":313},"self",[254,30966,30967],{"class":264},").",[254,30969,30970],{"class":313},"__init__",[254,30972,2116],{"class":264},[254,30974,30975],{"class":256,"line":1768},[254,30976,2540],{"emptyLinePlaceholder":184},[254,30978,30979],{"class":256,"line":1782},[254,30980,30981],{"class":323},"        # 定义网络层\n",[254,30983,30984,30987,30990,30992,30995,30998,31000,31002,31004,31007,31009,31011,31013,31016,31018,31020,31022,31025,31027,31029],{"class":256,"line":1787},[254,30985,30986],{"class":313},"        self",[254,30988,30989],{"class":264},".c1",[254,30991,310],{"class":260},[254,30993,30994],{"class":264},"nn.Conv2d(",[254,30996,30997],{"class":5357},"in_channels",[254,30999,310],{"class":260},[254,31001,482],{"class":313},[254,31003,642],{"class":264},[254,31005,31006],{"class":5357},"out_channels",[254,31008,310],{"class":260},[254,31010,608],{"class":313},[254,31012,642],{"class":264},[254,31014,31015],{"class":5357},"kernel_size",[254,31017,310],{"class":260},[254,31019,583],{"class":313},[254,31021,642],{"class":264},[254,31023,31024],{"class":5357},"padding",[254,31026,310],{"class":260},[254,31028,342],{"class":313},[254,31030,271],{"class":264},[254,31032,31033,31035,31038,31040],{"class":256,"line":1793},[254,31034,30986],{"class":313},[254,31036,31037],{"class":264},".sig",[254,31039,310],{"class":260},[254,31041,31042],{"class":264},"nn.Sigmoid()\n",[254,31044,31045],{"class":256,"line":1814},[254,31046,31047],{"class":323},"        # 定义池化\n",[254,31049,31050,31052,31055,31057,31060,31062,31064,31066,31068,31071,31073,31075],{"class":256,"line":1819},[254,31051,30986],{"class":313},[254,31053,31054],{"class":264},".s2",[254,31056,310],{"class":260},[254,31058,31059],{"class":264},"nn.AvgPool2d(",[254,31061,31015],{"class":5357},[254,31063,310],{"class":260},[254,31065,342],{"class":313},[254,31067,642],{"class":264},[254,31069,31070],{"class":5357},"stride",[254,31072,310],{"class":260},[254,31074,342],{"class":313},[254,31076,271],{"class":264},[254,31078,31079,31081,31084,31086,31088,31090,31092,31094,31096,31098,31100,31102,31104,31106,31108,31110],{"class":256,"line":1833},[254,31080,30986],{"class":313},[254,31082,31083],{"class":264},".c3",[254,31085,310],{"class":260},[254,31087,30994],{"class":264},[254,31089,30997],{"class":5357},[254,31091,310],{"class":260},[254,31093,608],{"class":313},[254,31095,642],{"class":264},[254,31097,31006],{"class":5357},[254,31099,310],{"class":260},[254,31101,865],{"class":313},[254,31103,642],{"class":264},[254,31105,31015],{"class":5357},[254,31107,310],{"class":260},[254,31109,583],{"class":313},[254,31111,271],{"class":264},[254,31113,31114,31116,31119,31121,31123,31125,31127,31129,31131,31133,31135,31137],{"class":256,"line":1838},[254,31115,30986],{"class":313},[254,31117,31118],{"class":264},".s4",[254,31120,310],{"class":260},[254,31122,31059],{"class":264},[254,31124,31015],{"class":5357},[254,31126,310],{"class":260},[254,31128,342],{"class":313},[254,31130,642],{"class":264},[254,31132,31070],{"class":5357},[254,31134,310],{"class":260},[254,31136,342],{"class":313},[254,31138,271],{"class":264},[254,31140,31141],{"class":256,"line":1867},[254,31142,31143],{"class":323},"        # 定义平展层\n",[254,31145,31146,31148,31151,31153],{"class":256,"line":1872},[254,31147,30986],{"class":313},[254,31149,31150],{"class":264},".flatten",[254,31152,310],{"class":260},[254,31154,31155],{"class":264},"nn.Flatten()\n",[254,31157,31158],{"class":256,"line":1889},[254,31159,31160],{"class":323},"        # 定义全连接层\n",[254,31162,31163,31165,31168,31170,31173,31175,31177,31179],{"class":256,"line":1894},[254,31164,30986],{"class":313},[254,31166,31167],{"class":264},".f5",[254,31169,310],{"class":260},[254,31171,31172],{"class":264},"nn.Linear(",[254,31174,4127],{"class":313},[254,31176,642],{"class":264},[254,31178,1081],{"class":313},[254,31180,271],{"class":264},[254,31182,31183,31185,31188,31190,31192,31194,31196,31198],{"class":256,"line":1899},[254,31184,30986],{"class":313},[254,31186,31187],{"class":264},".f6",[254,31189,310],{"class":260},[254,31191,31172],{"class":264},[254,31193,1081],{"class":313},[254,31195,642],{"class":264},[254,31197,975],{"class":313},[254,31199,271],{"class":264},[254,31201,31202,31204,31207,31209,31211,31213,31215,31217],{"class":256,"line":1904},[254,31203,30986],{"class":313},[254,31205,31206],{"class":264},".f7",[254,31208,310],{"class":260},[254,31210,31172],{"class":264},[254,31212,975],{"class":313},[254,31214,642],{"class":264},[254,31216,710],{"class":313},[254,31218,271],{"class":264},[254,31220,31221],{"class":256,"line":1918},[254,31222,2540],{"emptyLinePlaceholder":184},[254,31224,31225],{"class":256,"line":1923},[254,31226,31227],{"class":323},"    # 写工具->写前向传播\n",[254,31229,31230,31232,31235],{"class":256,"line":2717},[254,31231,30942],{"class":260},[254,31233,31234],{"class":2103}," forward",[254,31236,31237],{"class":264},"(self,x):\n",[254,31239,31240,31243,31245,31247,31250,31252],{"class":256,"line":2731},[254,31241,31242],{"class":264},"        x",[254,31244,310],{"class":260},[254,31246,30964],{"class":313},[254,31248,31249],{"class":264},".sig(",[254,31251,30964],{"class":313},[254,31253,31254],{"class":264},".c1(x))\n",[254,31256,31257,31259,31261,31263],{"class":256,"line":2739},[254,31258,31242],{"class":264},[254,31260,310],{"class":260},[254,31262,30964],{"class":313},[254,31264,31265],{"class":264},".s2(x)\n",[254,31267,31268,31270,31272,31274,31276,31278],{"class":256,"line":2744},[254,31269,31242],{"class":264},[254,31271,310],{"class":260},[254,31273,30964],{"class":313},[254,31275,31249],{"class":264},[254,31277,30964],{"class":313},[254,31279,31280],{"class":264},".c3(x))\n",[254,31282,31283,31285,31287,31289],{"class":256,"line":2750},[254,31284,31242],{"class":264},[254,31286,310],{"class":260},[254,31288,30964],{"class":313},[254,31290,31291],{"class":264},".s4(x)\n",[254,31293,31294,31296,31298,31300],{"class":256,"line":2756},[254,31295,31242],{"class":264},[254,31297,310],{"class":260},[254,31299,30964],{"class":313},[254,31301,31302],{"class":264},".flatten(x)\n",[254,31304,31305,31307,31309,31311,31313,31315],{"class":256,"line":2761},[254,31306,31242],{"class":264},[254,31308,310],{"class":260},[254,31310,30964],{"class":313},[254,31312,31249],{"class":264},[254,31314,30964],{"class":313},[254,31316,31317],{"class":264},".f5(x))\n",[254,31319,31320,31322,31324,31326,31328,31330],{"class":256,"line":8089},[254,31321,31242],{"class":264},[254,31323,310],{"class":260},[254,31325,30964],{"class":313},[254,31327,31249],{"class":264},[254,31329,30964],{"class":313},[254,31331,31332],{"class":264},".f6(x))\n",[254,31334,31335,31337,31339,31341],{"class":256,"line":8113},[254,31336,31242],{"class":264},[254,31338,310],{"class":260},[254,31340,30964],{"class":313},[254,31342,31343],{"class":264},".f7(x)\n",[254,31345,31346,31348],{"class":256,"line":8118},[254,31347,14893],{"class":260},[254,31349,31350],{"class":264}," x\n",[254,31352,31353],{"class":256,"line":8124},[254,31354,2540],{"emptyLinePlaceholder":184},[254,31356,31357,31359,31362,31364,31367],{"class":256,"line":8151},[254,31358,1671],{"class":260},[254,31360,31361],{"class":313}," __name__",[254,31363,3089],{"class":260},[254,31365,31366],{"class":369},"\"__main__\"",[254,31368,3879],{"class":264},[254,31370,31371],{"class":256,"line":8156},[254,31372,31373],{"class":323},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[254,31375,31376,31379,31381,31383,31386,31388,31391,31393,31395],{"class":256,"line":8162},[254,31377,31378],{"class":264},"    device",[254,31380,310],{"class":260},[254,31382,30592],{"class":264},[254,31384,31385],{"class":369},"\"cuda\"",[254,31387,1844],{"class":260},[254,31389,31390],{"class":264}," torch.cuda.is_available() ",[254,31392,1841],{"class":260},[254,31394,30617],{"class":369},[254,31396,271],{"class":264},[254,31398,31399],{"class":256,"line":8174},[254,31400,31401],{"class":323},"    # 如果就是想指定用cpu用下方代码:\n",[254,31403,31404],{"class":256,"line":8186},[254,31405,31406],{"class":323},"    # device=\"cpu\"\n",[254,31408,31409],{"class":256,"line":8198},[254,31410,31411],{"class":323},"    # print(device)\n",[254,31413,31414],{"class":256,"line":9857},[254,31415,2540],{"emptyLinePlaceholder":184},[254,31417,31418],{"class":256,"line":9882},[254,31419,31420],{"class":323},"    # 实例化模型\n",[254,31422,31423],{"class":256,"line":9905},[254,31424,31425],{"class":323},"    # 将模型放到设备中去运行\n",[254,31427,31428,31431,31433],{"class":256,"line":9929},[254,31429,31430],{"class":264},"    model",[254,31432,310],{"class":260},[254,31434,31435],{"class":264},"LeNet().to(device)\n",[254,31437,31438,31441,31444,31446,31448,31450,31452,31454],{"class":256,"line":9934},[254,31439,31440],{"class":313},"    print",[254,31442,31443],{"class":264},"(summary(model,(",[254,31445,482],{"class":313},[254,31447,642],{"class":264},[254,31449,1165],{"class":313},[254,31451,642],{"class":264},[254,31453,1165],{"class":313},[254,31455,31456],{"class":264},")))\n",[14,31458,31459],{},[1602,31460],{"alt":174,"src":31461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-013.png",[14,31463,31464],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[21,31466,31467],{"start":175},[24,31468,31469],{},"训练",[14,31471,31472],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[14,31474,31475],{},"在训练之前可以将数据展示看一下",[245,31477,31479],{"className":30519,"code":31478,"language":30521,"meta":174,"style":174},"# 建立画图的函数，用于展示数据\n# torchvision中包含很多内置的数据集\nfrom sklearn.externals.array_api_compat.torch import squeeze\nfrom torchvision.datasets import FashionMNIST\nimport numpy as np\n# 引入处理数据集的包\nfrom torchvision import transforms\n# 从torch库中引入数据处理的包\nimport torch.utils.data as Data\n# 导入画图的库\nimport matplotlib.pyplot as plt\n\n\ntrain_data=FashionMNIST(root='.\u002Fdata',\n                        train=True,\n                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n                        transform=transforms.Compose([transforms.Resize(size=224),transforms.ToTensor()]),\n                        download=True)\n\n# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\ntrain_loader=Data.DataLoader(dataset=train_data,\n                             batch_size=64,\n                             # 数据是否打乱\n                             shuffle=True,\n                             # 规定加载数据的进程\n                             num_workers=0)\n\n# 获得一个batch的数据\nfor step,(b_x,b_y) in enumerate(train_loader):\n    if step > 0:\n        break\n# squeeze()这个函数是去除张量中所有大小为1的维度\nbatch_x=b_x.squeeze().numpy()  #将四维张量移除所有维度为1的维度,并转换成numpy数组\nbatch_y=b_y.numpy()   #将张量转换成功numpy数组\nclass_label=train_data.classes  #训练集标签\n# print(class_label)\n\n# 可视化一个batch的图像\nplt.figure(figsize=(12,5))\nfor ii in np.arange(len(batch_y)):\n    plt.subplot(4,16,ii + 1)\n    plt.imshow(batch_x[ii,:,:],cmap=plt.cm.gray)\n    plt.title(class_label[batch_y[ii]],size=10)\n    plt.axis(\"off\")\n    plt.subplots_adjust(wspace=0.05)\nplt.show()\n",[251,31480,31481,31486,31491,31503,31515,31528,31533,31545,31550,31562,31567,31579,31583,31587,31608,31620,31625,31646,31657,31661,31666,31684,31695,31700,31711,31716,31727,31731,31736,31751,31764,31769,31774,31787,31800,31813,31818,31822,31827,31847,31864,31884,31897,31910,31920,31935],{"__ignoreMap":174},[254,31482,31483],{"class":256,"line":257},[254,31484,31485],{"class":323},"# 建立画图的函数，用于展示数据\n",[254,31487,31488],{"class":256,"line":175},[254,31489,31490],{"class":323},"# torchvision中包含很多内置的数据集\n",[254,31492,31493,31495,31498,31500],{"class":256,"line":1319},[254,31494,30878],{"class":260},[254,31496,31497],{"class":264}," sklearn.externals.array_api_compat.torch ",[254,31499,30533],{"class":260},[254,31501,31502],{"class":264}," squeeze\n",[254,31504,31505,31507,31510,31512],{"class":256,"line":1334},[254,31506,30878],{"class":260},[254,31508,31509],{"class":264}," torchvision.datasets ",[254,31511,30533],{"class":260},[254,31513,31514],{"class":264}," FashionMNIST\n",[254,31516,31517,31519,31522,31525],{"class":256,"line":1340},[254,31518,30533],{"class":260},[254,31520,31521],{"class":264}," numpy ",[254,31523,31524],{"class":260},"as",[254,31526,31527],{"class":264}," np\n",[254,31529,31530],{"class":256,"line":1354},[254,31531,31532],{"class":323},"# 引入处理数据集的包\n",[254,31534,31535,31537,31540,31542],{"class":256,"line":1360},[254,31536,30878],{"class":260},[254,31538,31539],{"class":264}," torchvision ",[254,31541,30533],{"class":260},[254,31543,31544],{"class":264}," transforms\n",[254,31546,31547],{"class":256,"line":1451},[254,31548,31549],{"class":323},"# 从torch库中引入数据处理的包\n",[254,31551,31552,31554,31557,31559],{"class":256,"line":1457},[254,31553,30533],{"class":260},[254,31555,31556],{"class":264}," torch.utils.data ",[254,31558,31524],{"class":260},[254,31560,31561],{"class":264}," Data\n",[254,31563,31564],{"class":256,"line":1469},[254,31565,31566],{"class":323},"# 导入画图的库\n",[254,31568,31569,31571,31574,31576],{"class":256,"line":1752},[254,31570,30533],{"class":260},[254,31572,31573],{"class":264}," matplotlib.pyplot ",[254,31575,31524],{"class":260},[254,31577,31578],{"class":264}," plt\n",[254,31580,31581],{"class":256,"line":1757},[254,31582,2540],{"emptyLinePlaceholder":184},[254,31584,31585],{"class":256,"line":1763},[254,31586,2540],{"emptyLinePlaceholder":184},[254,31588,31589,31592,31594,31597,31600,31602,31605],{"class":256,"line":1768},[254,31590,31591],{"class":264},"train_data",[254,31593,310],{"class":260},[254,31595,31596],{"class":264},"FashionMNIST(",[254,31598,31599],{"class":5357},"root",[254,31601,310],{"class":260},[254,31603,31604],{"class":369},"'.\u002Fdata'",[254,31606,31607],{"class":264},",\n",[254,31609,31610,31613,31615,31618],{"class":256,"line":1782},[254,31611,31612],{"class":5357},"                        train",[254,31614,310],{"class":260},[254,31616,31617],{"class":313},"True",[254,31619,31607],{"class":264},[254,31621,31622],{"class":256,"line":1787},[254,31623,31624],{"class":323},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[254,31626,31627,31630,31632,31635,31638,31640,31643],{"class":256,"line":1793},[254,31628,31629],{"class":5357},"                        transform",[254,31631,310],{"class":260},[254,31633,31634],{"class":264},"transforms.Compose([transforms.Resize(",[254,31636,31637],{"class":5357},"size",[254,31639,310],{"class":260},[254,31641,31642],{"class":313},"224",[254,31644,31645],{"class":264},"),transforms.ToTensor()]),\n",[254,31647,31648,31651,31653,31655],{"class":256,"line":1814},[254,31649,31650],{"class":5357},"                        download",[254,31652,310],{"class":260},[254,31654,31617],{"class":313},[254,31656,271],{"class":264},[254,31658,31659],{"class":256,"line":1819},[254,31660,2540],{"emptyLinePlaceholder":184},[254,31662,31663],{"class":256,"line":1833},[254,31664,31665],{"class":323},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[254,31667,31668,31671,31673,31676,31679,31681],{"class":256,"line":1838},[254,31669,31670],{"class":264},"train_loader",[254,31672,310],{"class":260},[254,31674,31675],{"class":264},"Data.DataLoader(",[254,31677,31678],{"class":5357},"dataset",[254,31680,310],{"class":260},[254,31682,31683],{"class":264},"train_data,\n",[254,31685,31686,31689,31691,31693],{"class":256,"line":1867},[254,31687,31688],{"class":5357},"                             batch_size",[254,31690,310],{"class":260},[254,31692,468],{"class":313},[254,31694,31607],{"class":264},[254,31696,31697],{"class":256,"line":1872},[254,31698,31699],{"class":323},"                             # 数据是否打乱\n",[254,31701,31702,31705,31707,31709],{"class":256,"line":1889},[254,31703,31704],{"class":5357},"                             shuffle",[254,31706,310],{"class":260},[254,31708,31617],{"class":313},[254,31710,31607],{"class":264},[254,31712,31713],{"class":256,"line":1894},[254,31714,31715],{"class":323},"                             # 规定加载数据的进程\n",[254,31717,31718,31721,31723,31725],{"class":256,"line":1899},[254,31719,31720],{"class":5357},"                             num_workers",[254,31722,310],{"class":260},[254,31724,456],{"class":313},[254,31726,271],{"class":264},[254,31728,31729],{"class":256,"line":1904},[254,31730,2540],{"emptyLinePlaceholder":184},[254,31732,31733],{"class":256,"line":1918},[254,31734,31735],{"class":323},"# 获得一个batch的数据\n",[254,31737,31738,31740,31743,31745,31748],{"class":256,"line":1923},[254,31739,3165],{"class":260},[254,31741,31742],{"class":264}," step,(b_x,b_y) ",[254,31744,26184],{"class":260},[254,31746,31747],{"class":313}," enumerate",[254,31749,31750],{"class":264},"(train_loader):\n",[254,31752,31753,31755,31758,31760,31762],{"class":256,"line":2717},[254,31754,3241],{"class":260},[254,31756,31757],{"class":264}," step ",[254,31759,1224],{"class":260},[254,31761,4233],{"class":313},[254,31763,3879],{"class":264},[254,31765,31766],{"class":256,"line":2731},[254,31767,31768],{"class":260},"        break\n",[254,31770,31771],{"class":256,"line":2739},[254,31772,31773],{"class":323},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[254,31775,31776,31779,31781,31784],{"class":256,"line":2744},[254,31777,31778],{"class":264},"batch_x",[254,31780,310],{"class":260},[254,31782,31783],{"class":264},"b_x.squeeze().numpy()  ",[254,31785,31786],{"class":323},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[254,31788,31789,31792,31794,31797],{"class":256,"line":2750},[254,31790,31791],{"class":264},"batch_y",[254,31793,310],{"class":260},[254,31795,31796],{"class":264},"b_y.numpy()   ",[254,31798,31799],{"class":323},"#将张量转换成功numpy数组\n",[254,31801,31802,31805,31807,31810],{"class":256,"line":2756},[254,31803,31804],{"class":264},"class_label",[254,31806,310],{"class":260},[254,31808,31809],{"class":264},"train_data.classes  ",[254,31811,31812],{"class":323},"#训练集标签\n",[254,31814,31815],{"class":256,"line":2761},[254,31816,31817],{"class":323},"# print(class_label)\n",[254,31819,31820],{"class":256,"line":8089},[254,31821,2540],{"emptyLinePlaceholder":184},[254,31823,31824],{"class":256,"line":8113},[254,31825,31826],{"class":323},"# 可视化一个batch的图像\n",[254,31828,31829,31832,31835,31837,31839,31841,31843,31845],{"class":256,"line":8118},[254,31830,31831],{"class":264},"plt.figure(",[254,31833,31834],{"class":5357},"figsize",[254,31836,310],{"class":260},[254,31838,265],{"class":264},[254,31840,762],{"class":313},[254,31842,642],{"class":264},[254,31844,583],{"class":313},[254,31846,30638],{"class":264},[254,31848,31849,31851,31854,31856,31859,31861],{"class":256,"line":8124},[254,31850,3165],{"class":260},[254,31852,31853],{"class":264}," ii ",[254,31855,26184],{"class":260},[254,31857,31858],{"class":264}," np.arange(",[254,31860,7499],{"class":313},[254,31862,31863],{"class":264},"(batch_y)):\n",[254,31865,31866,31869,31871,31873,31875,31878,31880,31882],{"class":256,"line":8151},[254,31867,31868],{"class":264},"    plt.subplot(",[254,31870,557],{"class":313},[254,31872,642],{"class":264},[254,31874,865],{"class":313},[254,31876,31877],{"class":264},",ii ",[254,31879,745],{"class":260},[254,31881,25259],{"class":313},[254,31883,271],{"class":264},[254,31885,31886,31889,31892,31894],{"class":256,"line":8156},[254,31887,31888],{"class":264},"    plt.imshow(batch_x[ii,:,:],",[254,31890,31891],{"class":5357},"cmap",[254,31893,310],{"class":260},[254,31895,31896],{"class":264},"plt.cm.gray)\n",[254,31898,31899,31902,31904,31906,31908],{"class":256,"line":8162},[254,31900,31901],{"class":264},"    plt.title(class_label[batch_y[ii]],",[254,31903,31637],{"class":5357},[254,31905,310],{"class":260},[254,31907,710],{"class":313},[254,31909,271],{"class":264},[254,31911,31912,31915,31918],{"class":256,"line":8174},[254,31913,31914],{"class":264},"    plt.axis(",[254,31916,31917],{"class":369},"\"off\"",[254,31919,271],{"class":264},[254,31921,31922,31925,31928,31930,31933],{"class":256,"line":8186},[254,31923,31924],{"class":264},"    plt.subplots_adjust(",[254,31926,31927],{"class":5357},"wspace",[254,31929,310],{"class":260},[254,31931,31932],{"class":313},"0.05",[254,31934,271],{"class":264},[254,31936,31937],{"class":256,"line":8198},[254,31938,31939],{"class":264},"plt.show()\n",[14,31941,31942],{},"用matplotlib进行展示的过程可以后续再补",[14,31944,31945],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[14,31947,31948],{},"训练次数就是按照批次过整个训练集数据的次数",[14,31950,31951],{},"模型训练：",[245,31953,31955],{"className":30519,"code":31954,"language":30521,"meta":174,"style":174},"import copy\nimport time\n\nimport pandas as pd\nimport torch\nfrom torch.utils.data import Dataset\nfrom torchvision.datasets import FashionMNIST\nfrom torchvision import transforms\nimport torch.utils.data as Data\nimport matplotlib.pyplot as plt\n# 导入模型\nfrom model import LeNet\nfrom torch import nn\n\n\n# 处理训练集与验证集函数--->划分数据集\ndef train_val_data_process():\n    train_data=FashionMNIST('.\u002Fdata',\n                            train=True,\n                            transform=transforms.Compose([transforms.Resize(size=28),transforms.ToTensor()]),\n                            download=True)\n    train_data,val_data=Data.random_split(train_data,[round(0.8*len(train_data)),round(0.2*len(train_data))])\n    train_dataloader = Data.DataLoader(dataset=train_data,\n                                       batch_size=128,\n                                       shuffle=True,\n                                       # 规定8个进程\n                                       num_workers=8)\n    val_dataloader=Data.DataLoader(dataset=val_data,\n                                   batch_size=128,\n                                   shuffle=True,\n                                   num_workers=8)\n    return train_dataloader,val_dataloader\n\n# 验证是否出错\n# train_val_data_process()\n\n# 定义模型训练函数\ndef train_model_process(model,train_dataloader,val_dataloader,num_epochs):\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else 'cpu')\n\n\n    # 定义优化器\n    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n    # lr为学习率\n    optimizer=torch.optim.Adam(model.parameters(),lr=0.001)\n\n    # 定义损失函数使用交叉熵损失函数\n    criterion=nn.CrossEntropyLoss()\n\n    # 将模型放到GPU中进行训练\n    model=model.to(device)\n    # 复制当前模型的参数\n    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n    best_model_wts=copy.deepcopy(model.state_dict())\n\n\n    # 初始化参数\n    # 最高准确度\n    best_acc=0.0\n    # 训练集损失列表\n    train_loss_all=[]\n    # 验证集函数列表\n    val_loss_all=[]\n    # 训练集准确度列表\n    train_acc_all=[]\n    # 验证集准确度列表\n    val_acc_all=[]\n\n    # 保存当前时间--->方便看每轮训练的时间\n    since=time.time()\n\n\n    # 准备工作完成--->开始训练模型\n    for epoch in range(num_epochs):\n        print(\"Epoch {}\u002F{}\".format(epoch,num_epochs-1))\n        print(\"-\"*10)\n\n        # 初始化参数\n        # 训练集损失函数\n        train_loss=0.0\n        # 训练集准确度\n        train_corrects=0\n        # 验证集损失函数\n        val_loss=0.0\n        # 验证集准确度\n        val_corrects=0\n        # 训练集样本数量\n        train_num=0\n        # 验证集样本数量\n        val_num=0\n        # 将数据放到设备,并开始训练\n        for step,(b_x,b_y) in enumerate(train_dataloader):\n            # 将特征放入到训练设备\n            b_x=b_x.to(device)\n            # 将标签放入到训练设备当中\n            b_y=b_y.to(device)\n            # 设置模型为训练模式\n            model.train()\n            # 将数据放到模型当中,开始前向传播\n            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n            output=model(b_x)\n            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算每一个batch的损失函数\n            loss=criterion(output,b_y)\n            # 将梯度初始化为0\n            optimizer.zero_grad()\n            # 梯度置为0后再进行反向传播\n            loss.backward()\n            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n            optimizer.step()\n            # loss.item()指的是batch的平均损失\n            train_loss+=loss.item()*b_x.size(0)\n            # 计算每个批次中正确预测的数量\n            train_corrects+=torch.sum(pre_lab==b_y.data)\n            # 计算目前为止一共处理了多少样本\n            train_num+=b_x.size(0)\n        # 验证数据\n        for step ,(b_x,b_y) in enumerate(val_dataloader):\n            # 将特征放到验证设备当中\n            b_x=b_x.to(device)\n            # 将标签放到放到训练设备当中\n            b_y=b_y.to(device)\n            # 开启验证模式，设置模型为评估模式\n            model.eval()\n            with torch.no_grad():\n                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n                output = model(b_x)\n                # 查找每一行中最大值对应的下标\n                pre_lab = torch.argmax(output, dim=1)\n                # 计算验证集上的当前 batch 损失\n                val_batch_loss = criterion(output, b_y)\n                # 对损失函数进行累加（按样本数加权）\n                val_loss += val_batch_loss.item() * b_x.size(0)\n                val_corrects += torch.sum(pre_lab == b_y.data)\n                # 当前用于验证的样本数量\n            val_num += b_x.size(0)\n        # 计算并保存每一次迭代的loss值和准确率\n        # 计算并保存训练集的loss值\n        train_loss_all.append(train_loss\u002Ftrain_num)\n        # 取双精度\n        # 计算并保存训练集的准确率\n        train_acc_all.append(train_corrects.double().item()\u002Ftrain_num)\n        # 计算并保存验证集的loss值\n        val_loss_all.append(val_loss\u002Fval_num)\n        # 计算并保存验证集的准确率\n        val_acc_all.append(val_corrects.double().item()\u002Fval_num)\n\n        # 打印训练一轮的loss值和准确率\n        print('{}train loss:{:.4f} train acc:{:.4f}'.format(epoch,train_loss_all[-1],train_acc_all[-1]))\n        print('{}val loss:{:.4f} val acc:{:.4f}'.format(epoch,val_loss_all[-1],val_acc_all[-1]))\n\n        # 判断准确度--->保存最优模型\n        if val_acc_all[-1]>best_acc:\n            # 保存当前模型准确度\n            best_acc:float=val_acc_all[-1]\n            # 保存当前的准确度\n            # model.state_dict()是当前模型的所有参数（权重和偏置）\n            best_model_wts=copy.deepcopy(model.state_dict())\n\n        # 计算耗时\n        time_use=time.time()-since\n        print('训练和验证耗费的时间{:.0f}m{:.0f}s'.format(time_use\u002F\u002F60,time_use%60))\n    # 选择最优参数\n    # 加载最高准确率下的模型参数\n    # model.load_state_dict(best_model_wts)\n    torch.save(model.state_dict(best_model_wts), '.\u002Fbest_model.pth')\n    # 或者写成\n    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n    train_process=pd.DataFrame(data={\n        \"epoch\":range(num_epochs),\n        \"train_loss_all\":train_loss_all,\n        \"val_loss_all\":val_loss_all,\n        \"train_acc_all\":train_acc_all,\n        \"val_acc_all\":val_acc_all\n    })\n    # 返回训练保存的过程\n    return train_process\n\n# 将loss值和精度按照图片的形式展示出来\ndef matplot_acc_loss(train_process):\n    # 设置图的大小\n    plt.figure(figsize=(12,4))\n    # 设置图中有几张图\n    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n    # ①loss图\n    plt.subplot(1,2,1)\n    # 补充:\n    # plt.subplot(nrows, ncols, index)\n    # nrows：行数\n    # ncols：列数\n    # index：目前选中第几个子图（从1开始）\n    plt.plot(train_process[\"epoch\"],train_process.train_loss_all,'ro-',label='train loss')\n    plt.plot(train_process[\"epoch\"],train_process.val_loss_all,'bs--',label='val loss')\n    # 添加一个图例\n    plt.legend()\n    # 给轴添加标签\n    plt.xlabel('epoch')\n    plt.ylabel('loss')\n    # ②准确度图\n    plt.subplot(1,2,2)\n    plt.plot(train_process[\"epoch\"],train_process.train_acc_all,'ro-',label='train acc')\n    plt.plot(train_process[\"epoch\"],train_process.val_acc_all,'bs--',label='val acc')\n    # 添加图例\n    plt.legend()\n    plt.xlabel(\"epoch\")\n    plt.ylabel(\"acc\")\n    plt.show()\n\n# 正式开始训练:\nif __name__==\"__main__\":\n    # 将模型实例化\n    LeNet=LeNet()\n    train_dataloader,val_dataloader=train_val_data_process()\n    train_process=train_model_process(LeNet,train_dataloader,val_dataloader,num_epochs=20)\n    matplot_acc_loss(train_process)\n",[251,31956,31957,31964,31971,31975,31987,31993,32004,32014,32024,32034,32044,32049,32061,32071,32075,32079,32084,32095,32108,32119,32136,32147,32186,32202,32214,32225,32230,32241,32257,32268,32279,32290,32297,32301,32306,32311,32315,32320,32330,32351,32355,32359,32364,32369,32374,32394,32398,32403,32413,32417,32422,32431,32436,32441,32446,32456,32460,32464,32469,32474,32484,32489,32499,32504,32513,32518,32527,32532,32541,32545,32550,32560,32564,32568,32573,32588,32616,32631,32635,32640,32645,32654,32659,32668,32673,32682,32687,32696,32701,32710,32715,32724,32729,32742,32747,32757,32762,32772,32778,32784,32790,32796,32807,32813,32833,32839,32850,32856,32862,32868,32874,32880,32886,32892,32912,32918,32934,32940,32954,32960,32975,32981,32990,32996,33005,33011,33017,33026,33032,33043,33049,33068,33074,33085,33091,33111,33127,33133,33147,33153,33159,33170,33176,33182,33192,33198,33209,33215,33225,33230,33236,33285,33332,33337,33343,33362,33368,33388,33394,33400,33410,33415,33421,33437,33482,33488,33494,33500,33511,33517,33523,33529,33547,33561,33570,33579,33588,33597,33603,33609,33617,33622,33628,33639,33645,33665,33671,33677,33683,33700,33706,33712,33718,33724,33730,33757,33781,33787,33793,33799,33810,33821,33827,33844,33867,33890,33896,33901,33910,33920,33926,33931,33937,33950,33956,33967,33978,33997],{"__ignoreMap":174},[254,31958,31959,31961],{"class":256,"line":257},[254,31960,30533],{"class":260},[254,31962,31963],{"class":264}," copy\n",[254,31965,31966,31968],{"class":256,"line":175},[254,31967,30533],{"class":260},[254,31969,31970],{"class":264}," time\n",[254,31972,31973],{"class":256,"line":1319},[254,31974,2540],{"emptyLinePlaceholder":184},[254,31976,31977,31979,31982,31984],{"class":256,"line":1334},[254,31978,30533],{"class":260},[254,31980,31981],{"class":264}," pandas ",[254,31983,31524],{"class":260},[254,31985,31986],{"class":264}," pd\n",[254,31988,31989,31991],{"class":256,"line":1340},[254,31990,30533],{"class":260},[254,31992,30536],{"class":264},[254,31994,31995,31997,31999,32001],{"class":256,"line":1354},[254,31996,30878],{"class":260},[254,31998,31556],{"class":264},[254,32000,30533],{"class":260},[254,32002,32003],{"class":264}," Dataset\n",[254,32005,32006,32008,32010,32012],{"class":256,"line":1360},[254,32007,30878],{"class":260},[254,32009,31509],{"class":264},[254,32011,30533],{"class":260},[254,32013,31514],{"class":264},[254,32015,32016,32018,32020,32022],{"class":256,"line":1451},[254,32017,30878],{"class":260},[254,32019,31539],{"class":264},[254,32021,30533],{"class":260},[254,32023,31544],{"class":264},[254,32025,32026,32028,32030,32032],{"class":256,"line":1457},[254,32027,30533],{"class":260},[254,32029,31556],{"class":264},[254,32031,31524],{"class":260},[254,32033,31561],{"class":264},[254,32035,32036,32038,32040,32042],{"class":256,"line":1469},[254,32037,30533],{"class":260},[254,32039,31573],{"class":264},[254,32041,31524],{"class":260},[254,32043,31578],{"class":264},[254,32045,32046],{"class":256,"line":1752},[254,32047,32048],{"class":323},"# 导入模型\n",[254,32050,32051,32053,32056,32058],{"class":256,"line":1757},[254,32052,30878],{"class":260},[254,32054,32055],{"class":264}," model ",[254,32057,30533],{"class":260},[254,32059,32060],{"class":264}," LeNet\n",[254,32062,32063,32065,32067,32069],{"class":256,"line":1763},[254,32064,30878],{"class":260},[254,32066,30881],{"class":264},[254,32068,30533],{"class":260},[254,32070,30886],{"class":264},[254,32072,32073],{"class":256,"line":1768},[254,32074,2540],{"emptyLinePlaceholder":184},[254,32076,32077],{"class":256,"line":1782},[254,32078,2540],{"emptyLinePlaceholder":184},[254,32080,32081],{"class":256,"line":1787},[254,32082,32083],{"class":323},"# 处理训练集与验证集函数--->划分数据集\n",[254,32085,32086,32089,32092],{"class":256,"line":1793},[254,32087,32088],{"class":260},"def",[254,32090,32091],{"class":2103}," train_val_data_process",[254,32093,32094],{"class":264},"():\n",[254,32096,32097,32100,32102,32104,32106],{"class":256,"line":1814},[254,32098,32099],{"class":264},"    train_data",[254,32101,310],{"class":260},[254,32103,31596],{"class":264},[254,32105,31604],{"class":369},[254,32107,31607],{"class":264},[254,32109,32110,32113,32115,32117],{"class":256,"line":1819},[254,32111,32112],{"class":5357},"                            train",[254,32114,310],{"class":260},[254,32116,31617],{"class":313},[254,32118,31607],{"class":264},[254,32120,32121,32124,32126,32128,32130,32132,32134],{"class":256,"line":1833},[254,32122,32123],{"class":5357},"                            transform",[254,32125,310],{"class":260},[254,32127,31634],{"class":264},[254,32129,31637],{"class":5357},[254,32131,310],{"class":260},[254,32133,1165],{"class":313},[254,32135,31645],{"class":264},[254,32137,32138,32141,32143,32145],{"class":256,"line":1838},[254,32139,32140],{"class":5357},"                            download",[254,32142,310],{"class":260},[254,32144,31617],{"class":313},[254,32146,271],{"class":264},[254,32148,32149,32152,32154,32157,32160,32162,32165,32167,32169,32172,32174,32176,32179,32181,32183],{"class":256,"line":1867},[254,32150,32151],{"class":264},"    train_data,val_data",[254,32153,310],{"class":260},[254,32155,32156],{"class":264},"Data.random_split(train_data,[",[254,32158,32159],{"class":313},"round",[254,32161,265],{"class":264},[254,32163,32164],{"class":313},"0.8",[254,32166,719],{"class":260},[254,32168,7499],{"class":313},[254,32170,32171],{"class":264},"(train_data)),",[254,32173,32159],{"class":313},[254,32175,265],{"class":264},[254,32177,32178],{"class":313},"0.2",[254,32180,719],{"class":260},[254,32182,7499],{"class":313},[254,32184,32185],{"class":264},"(train_data))])\n",[254,32187,32188,32191,32193,32196,32198,32200],{"class":256,"line":1872},[254,32189,32190],{"class":264},"    train_dataloader ",[254,32192,310],{"class":260},[254,32194,32195],{"class":264}," Data.DataLoader(",[254,32197,31678],{"class":5357},[254,32199,310],{"class":260},[254,32201,31683],{"class":264},[254,32203,32204,32207,32209,32212],{"class":256,"line":1889},[254,32205,32206],{"class":5357},"                                       batch_size",[254,32208,310],{"class":260},[254,32210,32211],{"class":313},"128",[254,32213,31607],{"class":264},[254,32215,32216,32219,32221,32223],{"class":256,"line":1894},[254,32217,32218],{"class":5357},"                                       shuffle",[254,32220,310],{"class":260},[254,32222,31617],{"class":313},[254,32224,31607],{"class":264},[254,32226,32227],{"class":256,"line":1899},[254,32228,32229],{"class":323},"                                       # 规定8个进程\n",[254,32231,32232,32235,32237,32239],{"class":256,"line":1904},[254,32233,32234],{"class":5357},"                                       num_workers",[254,32236,310],{"class":260},[254,32238,659],{"class":313},[254,32240,271],{"class":264},[254,32242,32243,32246,32248,32250,32252,32254],{"class":256,"line":1918},[254,32244,32245],{"class":264},"    val_dataloader",[254,32247,310],{"class":260},[254,32249,31675],{"class":264},[254,32251,31678],{"class":5357},[254,32253,310],{"class":260},[254,32255,32256],{"class":264},"val_data,\n",[254,32258,32259,32262,32264,32266],{"class":256,"line":1923},[254,32260,32261],{"class":5357},"                                   batch_size",[254,32263,310],{"class":260},[254,32265,32211],{"class":313},[254,32267,31607],{"class":264},[254,32269,32270,32273,32275,32277],{"class":256,"line":2717},[254,32271,32272],{"class":5357},"                                   shuffle",[254,32274,310],{"class":260},[254,32276,31617],{"class":313},[254,32278,31607],{"class":264},[254,32280,32281,32284,32286,32288],{"class":256,"line":2731},[254,32282,32283],{"class":5357},"                                   num_workers",[254,32285,310],{"class":260},[254,32287,659],{"class":313},[254,32289,271],{"class":264},[254,32291,32292,32294],{"class":256,"line":2739},[254,32293,4230],{"class":260},[254,32295,32296],{"class":264}," train_dataloader,val_dataloader\n",[254,32298,32299],{"class":256,"line":2744},[254,32300,2540],{"emptyLinePlaceholder":184},[254,32302,32303],{"class":256,"line":2750},[254,32304,32305],{"class":323},"# 验证是否出错\n",[254,32307,32308],{"class":256,"line":2756},[254,32309,32310],{"class":323},"# train_val_data_process()\n",[254,32312,32313],{"class":256,"line":2761},[254,32314,2540],{"emptyLinePlaceholder":184},[254,32316,32317],{"class":256,"line":8089},[254,32318,32319],{"class":323},"# 定义模型训练函数\n",[254,32321,32322,32324,32327],{"class":256,"line":8113},[254,32323,32088],{"class":260},[254,32325,32326],{"class":2103}," train_model_process",[254,32328,32329],{"class":264},"(model,train_dataloader,val_dataloader,num_epochs):\n",[254,32331,32332,32334,32336,32338,32340,32342,32344,32346,32349],{"class":256,"line":8118},[254,32333,31378],{"class":264},[254,32335,310],{"class":260},[254,32337,30592],{"class":264},[254,32339,31385],{"class":369},[254,32341,1844],{"class":260},[254,32343,31390],{"class":264},[254,32345,1841],{"class":260},[254,32347,32348],{"class":369}," 'cpu'",[254,32350,271],{"class":264},[254,32352,32353],{"class":256,"line":8124},[254,32354,2540],{"emptyLinePlaceholder":184},[254,32356,32357],{"class":256,"line":8151},[254,32358,2540],{"emptyLinePlaceholder":184},[254,32360,32361],{"class":256,"line":8156},[254,32362,32363],{"class":323},"    # 定义优化器\n",[254,32365,32366],{"class":256,"line":8162},[254,32367,32368],{"class":323},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[254,32370,32371],{"class":256,"line":8174},[254,32372,32373],{"class":323},"    # lr为学习率\n",[254,32375,32376,32379,32381,32384,32387,32389,32392],{"class":256,"line":8186},[254,32377,32378],{"class":264},"    optimizer",[254,32380,310],{"class":260},[254,32382,32383],{"class":264},"torch.optim.Adam(model.parameters(),",[254,32385,32386],{"class":5357},"lr",[254,32388,310],{"class":260},[254,32390,32391],{"class":313},"0.001",[254,32393,271],{"class":264},[254,32395,32396],{"class":256,"line":8198},[254,32397,2540],{"emptyLinePlaceholder":184},[254,32399,32400],{"class":256,"line":9857},[254,32401,32402],{"class":323},"    # 定义损失函数使用交叉熵损失函数\n",[254,32404,32405,32408,32410],{"class":256,"line":9882},[254,32406,32407],{"class":264},"    criterion",[254,32409,310],{"class":260},[254,32411,32412],{"class":264},"nn.CrossEntropyLoss()\n",[254,32414,32415],{"class":256,"line":9905},[254,32416,2540],{"emptyLinePlaceholder":184},[254,32418,32419],{"class":256,"line":9929},[254,32420,32421],{"class":323},"    # 将模型放到GPU中进行训练\n",[254,32423,32424,32426,32428],{"class":256,"line":9934},[254,32425,31430],{"class":264},[254,32427,310],{"class":260},[254,32429,32430],{"class":264},"model.to(device)\n",[254,32432,32433],{"class":256,"line":9939},[254,32434,32435],{"class":323},"    # 复制当前模型的参数\n",[254,32437,32438],{"class":256,"line":9944},[254,32439,32440],{"class":323},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[254,32442,32443],{"class":256,"line":9953},[254,32444,32445],{"class":323},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[254,32447,32448,32451,32453],{"class":256,"line":9958},[254,32449,32450],{"class":264},"    best_model_wts",[254,32452,310],{"class":260},[254,32454,32455],{"class":264},"copy.deepcopy(model.state_dict())\n",[254,32457,32458],{"class":256,"line":9964},[254,32459,2540],{"emptyLinePlaceholder":184},[254,32461,32462],{"class":256,"line":9985},[254,32463,2540],{"emptyLinePlaceholder":184},[254,32465,32466],{"class":256,"line":9991},[254,32467,32468],{"class":323},"    # 初始化参数\n",[254,32470,32471],{"class":256,"line":10005},[254,32472,32473],{"class":323},"    # 最高准确度\n",[254,32475,32476,32479,32481],{"class":256,"line":10011},[254,32477,32478],{"class":264},"    best_acc",[254,32480,310],{"class":260},[254,32482,32483],{"class":313},"0.0\n",[254,32485,32486],{"class":256,"line":10038},[254,32487,32488],{"class":323},"    # 训练集损失列表\n",[254,32490,32491,32494,32496],{"class":256,"line":10047},[254,32492,32493],{"class":264},"    train_loss_all",[254,32495,310],{"class":260},[254,32497,32498],{"class":264},"[]\n",[254,32500,32501],{"class":256,"line":10053},[254,32502,32503],{"class":323},"    # 验证集函数列表\n",[254,32505,32506,32509,32511],{"class":256,"line":10061},[254,32507,32508],{"class":264},"    val_loss_all",[254,32510,310],{"class":260},[254,32512,32498],{"class":264},[254,32514,32515],{"class":256,"line":10066},[254,32516,32517],{"class":323},"    # 训练集准确度列表\n",[254,32519,32520,32523,32525],{"class":256,"line":16745},[254,32521,32522],{"class":264},"    train_acc_all",[254,32524,310],{"class":260},[254,32526,32498],{"class":264},[254,32528,32529],{"class":256,"line":16751},[254,32530,32531],{"class":323},"    # 验证集准确度列表\n",[254,32533,32534,32537,32539],{"class":256,"line":16774},[254,32535,32536],{"class":264},"    val_acc_all",[254,32538,310],{"class":260},[254,32540,32498],{"class":264},[254,32542,32543],{"class":256,"line":16780},[254,32544,2540],{"emptyLinePlaceholder":184},[254,32546,32547],{"class":256,"line":16803},[254,32548,32549],{"class":323},"    # 保存当前时间--->方便看每轮训练的时间\n",[254,32551,32552,32555,32557],{"class":256,"line":16817},[254,32553,32554],{"class":264},"    since",[254,32556,310],{"class":260},[254,32558,32559],{"class":264},"time.time()\n",[254,32561,32562],{"class":256,"line":16837},[254,32563,2540],{"emptyLinePlaceholder":184},[254,32565,32566],{"class":256,"line":16843},[254,32567,2540],{"emptyLinePlaceholder":184},[254,32569,32570],{"class":256,"line":16854},[254,32571,32572],{"class":323},"    # 准备工作完成--->开始训练模型\n",[254,32574,32575,32577,32580,32582,32585],{"class":256,"line":16877},[254,32576,3341],{"class":260},[254,32578,32579],{"class":264}," epoch ",[254,32581,26184],{"class":260},[254,32583,32584],{"class":313}," range",[254,32586,32587],{"class":264},"(num_epochs):\n",[254,32589,32590,32593,32595,32598,32601,32603,32605,32607,32610,32612,32614],{"class":256,"line":16899},[254,32591,32592],{"class":313},"        print",[254,32594,265],{"class":264},[254,32596,32597],{"class":369},"\"Epoch ",[254,32599,32600],{"class":313},"{}",[254,32602,848],{"class":369},[254,32604,32600],{"class":313},[254,32606,515],{"class":369},[254,32608,32609],{"class":264},".format(epoch,num_epochs",[254,32611,796],{"class":260},[254,32613,482],{"class":313},[254,32615,30638],{"class":264},[254,32617,32618,32620,32622,32625,32627,32629],{"class":256,"line":16904},[254,32619,32592],{"class":313},[254,32621,265],{"class":264},[254,32623,32624],{"class":369},"\"-\"",[254,32626,719],{"class":260},[254,32628,710],{"class":313},[254,32630,271],{"class":264},[254,32632,32633],{"class":256,"line":16910},[254,32634,2540],{"emptyLinePlaceholder":184},[254,32636,32637],{"class":256,"line":16924},[254,32638,32639],{"class":323},"        # 初始化参数\n",[254,32641,32642],{"class":256,"line":16937},[254,32643,32644],{"class":323},"        # 训练集损失函数\n",[254,32646,32647,32650,32652],{"class":256,"line":16942},[254,32648,32649],{"class":264},"        train_loss",[254,32651,310],{"class":260},[254,32653,32483],{"class":313},[254,32655,32656],{"class":256,"line":16956},[254,32657,32658],{"class":323},"        # 训练集准确度\n",[254,32660,32661,32664,32666],{"class":256,"line":16961},[254,32662,32663],{"class":264},"        train_corrects",[254,32665,310],{"class":260},[254,32667,3225],{"class":313},[254,32669,32670],{"class":256,"line":16967},[254,32671,32672],{"class":323},"        # 验证集损失函数\n",[254,32674,32675,32678,32680],{"class":256,"line":16972},[254,32676,32677],{"class":264},"        val_loss",[254,32679,310],{"class":260},[254,32681,32483],{"class":313},[254,32683,32684],{"class":256,"line":16986},[254,32685,32686],{"class":323},"        # 验证集准确度\n",[254,32688,32689,32692,32694],{"class":256,"line":16991},[254,32690,32691],{"class":264},"        val_corrects",[254,32693,310],{"class":260},[254,32695,3225],{"class":313},[254,32697,32698],{"class":256,"line":16996},[254,32699,32700],{"class":323},"        # 训练集样本数量\n",[254,32702,32703,32706,32708],{"class":256,"line":17010},[254,32704,32705],{"class":264},"        train_num",[254,32707,310],{"class":260},[254,32709,3225],{"class":313},[254,32711,32712],{"class":256,"line":17022},[254,32713,32714],{"class":323},"        # 验证集样本数量\n",[254,32716,32717,32720,32722],{"class":256,"line":17027},[254,32718,32719],{"class":264},"        val_num",[254,32721,310],{"class":260},[254,32723,3225],{"class":313},[254,32725,32726],{"class":256,"line":17040},[254,32727,32728],{"class":323},"        # 将数据放到设备,并开始训练\n",[254,32730,32731,32733,32735,32737,32739],{"class":256,"line":17045},[254,32732,3543],{"class":260},[254,32734,31742],{"class":264},[254,32736,26184],{"class":260},[254,32738,31747],{"class":313},[254,32740,32741],{"class":264},"(train_dataloader):\n",[254,32743,32744],{"class":256,"line":17050},[254,32745,32746],{"class":323},"            # 将特征放入到训练设备\n",[254,32748,32749,32752,32754],{"class":256,"line":17055},[254,32750,32751],{"class":264},"            b_x",[254,32753,310],{"class":260},[254,32755,32756],{"class":264},"b_x.to(device)\n",[254,32758,32759],{"class":256,"line":17068},[254,32760,32761],{"class":323},"            # 将标签放入到训练设备当中\n",[254,32763,32764,32767,32769],{"class":256,"line":17073},[254,32765,32766],{"class":264},"            b_y",[254,32768,310],{"class":260},[254,32770,32771],{"class":264},"b_y.to(device)\n",[254,32773,32775],{"class":256,"line":32774},98,[254,32776,32777],{"class":323},"            # 设置模型为训练模式\n",[254,32779,32781],{"class":256,"line":32780},99,[254,32782,32783],{"class":264},"            model.train()\n",[254,32785,32787],{"class":256,"line":32786},100,[254,32788,32789],{"class":323},"            # 将数据放到模型当中,开始前向传播\n",[254,32791,32793],{"class":256,"line":32792},101,[254,32794,32795],{"class":323},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[254,32797,32799,32802,32804],{"class":256,"line":32798},102,[254,32800,32801],{"class":264},"            output",[254,32803,310],{"class":260},[254,32805,32806],{"class":264},"model(b_x)\n",[254,32808,32810],{"class":256,"line":32809},103,[254,32811,32812],{"class":323},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[254,32814,32816,32819,32821,32824,32827,32829,32831],{"class":256,"line":32815},104,[254,32817,32818],{"class":264},"            pre_lab",[254,32820,310],{"class":260},[254,32822,32823],{"class":264},"torch.argmax(output,",[254,32825,32826],{"class":5357},"dim",[254,32828,310],{"class":260},[254,32830,482],{"class":313},[254,32832,271],{"class":264},[254,32834,32836],{"class":256,"line":32835},105,[254,32837,32838],{"class":323},"            # 计算每一个batch的损失函数\n",[254,32840,32842,32845,32847],{"class":256,"line":32841},106,[254,32843,32844],{"class":264},"            loss",[254,32846,310],{"class":260},[254,32848,32849],{"class":264},"criterion(output,b_y)\n",[254,32851,32853],{"class":256,"line":32852},107,[254,32854,32855],{"class":323},"            # 将梯度初始化为0\n",[254,32857,32859],{"class":256,"line":32858},108,[254,32860,32861],{"class":264},"            optimizer.zero_grad()\n",[254,32863,32865],{"class":256,"line":32864},109,[254,32866,32867],{"class":323},"            # 梯度置为0后再进行反向传播\n",[254,32869,32871],{"class":256,"line":32870},110,[254,32872,32873],{"class":264},"            loss.backward()\n",[254,32875,32877],{"class":256,"line":32876},111,[254,32878,32879],{"class":323},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[254,32881,32883],{"class":256,"line":32882},112,[254,32884,32885],{"class":264},"            optimizer.step()\n",[254,32887,32889],{"class":256,"line":32888},113,[254,32890,32891],{"class":323},"            # loss.item()指的是batch的平均损失\n",[254,32893,32895,32898,32900,32903,32905,32908,32910],{"class":256,"line":32894},114,[254,32896,32897],{"class":264},"            train_loss",[254,32899,9618],{"class":260},[254,32901,32902],{"class":264},"loss.item()",[254,32904,719],{"class":260},[254,32906,32907],{"class":264},"b_x.size(",[254,32909,456],{"class":313},[254,32911,271],{"class":264},[254,32913,32915],{"class":256,"line":32914},115,[254,32916,32917],{"class":323},"            # 计算每个批次中正确预测的数量\n",[254,32919,32921,32924,32926,32929,32931],{"class":256,"line":32920},116,[254,32922,32923],{"class":264},"            train_corrects",[254,32925,9618],{"class":260},[254,32927,32928],{"class":264},"torch.sum(pre_lab",[254,32930,3089],{"class":260},[254,32932,32933],{"class":264},"b_y.data)\n",[254,32935,32937],{"class":256,"line":32936},117,[254,32938,32939],{"class":323},"            # 计算目前为止一共处理了多少样本\n",[254,32941,32943,32946,32948,32950,32952],{"class":256,"line":32942},118,[254,32944,32945],{"class":264},"            train_num",[254,32947,9618],{"class":260},[254,32949,32907],{"class":264},[254,32951,456],{"class":313},[254,32953,271],{"class":264},[254,32955,32957],{"class":256,"line":32956},119,[254,32958,32959],{"class":323},"        # 验证数据\n",[254,32961,32963,32965,32968,32970,32972],{"class":256,"line":32962},120,[254,32964,3543],{"class":260},[254,32966,32967],{"class":264}," step ,(b_x,b_y) ",[254,32969,26184],{"class":260},[254,32971,31747],{"class":313},[254,32973,32974],{"class":264},"(val_dataloader):\n",[254,32976,32978],{"class":256,"line":32977},121,[254,32979,32980],{"class":323},"            # 将特征放到验证设备当中\n",[254,32982,32984,32986,32988],{"class":256,"line":32983},122,[254,32985,32751],{"class":264},[254,32987,310],{"class":260},[254,32989,32756],{"class":264},[254,32991,32993],{"class":256,"line":32992},123,[254,32994,32995],{"class":323},"            # 将标签放到放到训练设备当中\n",[254,32997,32999,33001,33003],{"class":256,"line":32998},124,[254,33000,32766],{"class":264},[254,33002,310],{"class":260},[254,33004,32771],{"class":264},[254,33006,33008],{"class":256,"line":33007},125,[254,33009,33010],{"class":323},"            # 开启验证模式，设置模型为评估模式\n",[254,33012,33014],{"class":256,"line":33013},126,[254,33015,33016],{"class":264},"            model.eval()\n",[254,33018,33020,33023],{"class":256,"line":33019},127,[254,33021,33022],{"class":260},"            with",[254,33024,33025],{"class":264}," torch.no_grad():\n",[254,33027,33029],{"class":256,"line":33028},128,[254,33030,33031],{"class":323},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[254,33033,33035,33038,33040],{"class":256,"line":33034},129,[254,33036,33037],{"class":264},"                output ",[254,33039,310],{"class":260},[254,33041,33042],{"class":264}," model(b_x)\n",[254,33044,33046],{"class":256,"line":33045},130,[254,33047,33048],{"class":323},"                # 查找每一行中最大值对应的下标\n",[254,33050,33052,33055,33057,33060,33062,33064,33066],{"class":256,"line":33051},131,[254,33053,33054],{"class":264},"                pre_lab ",[254,33056,310],{"class":260},[254,33058,33059],{"class":264}," torch.argmax(output, ",[254,33061,32826],{"class":5357},[254,33063,310],{"class":260},[254,33065,482],{"class":313},[254,33067,271],{"class":264},[254,33069,33071],{"class":256,"line":33070},132,[254,33072,33073],{"class":323},"                # 计算验证集上的当前 batch 损失\n",[254,33075,33077,33080,33082],{"class":256,"line":33076},133,[254,33078,33079],{"class":264},"                val_batch_loss ",[254,33081,310],{"class":260},[254,33083,33084],{"class":264}," criterion(output, b_y)\n",[254,33086,33088],{"class":256,"line":33087},134,[254,33089,33090],{"class":323},"                # 对损失函数进行累加（按样本数加权）\n",[254,33092,33094,33097,33099,33102,33104,33107,33109],{"class":256,"line":33093},135,[254,33095,33096],{"class":264},"                val_loss ",[254,33098,9618],{"class":260},[254,33100,33101],{"class":264}," val_batch_loss.item() ",[254,33103,719],{"class":260},[254,33105,33106],{"class":264}," b_x.size(",[254,33108,456],{"class":313},[254,33110,271],{"class":264},[254,33112,33114,33117,33119,33122,33124],{"class":256,"line":33113},136,[254,33115,33116],{"class":264},"                val_corrects ",[254,33118,9618],{"class":260},[254,33120,33121],{"class":264}," torch.sum(pre_lab ",[254,33123,3089],{"class":260},[254,33125,33126],{"class":264}," b_y.data)\n",[254,33128,33130],{"class":256,"line":33129},137,[254,33131,33132],{"class":323},"                # 当前用于验证的样本数量\n",[254,33134,33136,33139,33141,33143,33145],{"class":256,"line":33135},138,[254,33137,33138],{"class":264},"            val_num ",[254,33140,9618],{"class":260},[254,33142,33106],{"class":264},[254,33144,456],{"class":313},[254,33146,271],{"class":264},[254,33148,33150],{"class":256,"line":33149},139,[254,33151,33152],{"class":323},"        # 计算并保存每一次迭代的loss值和准确率\n",[254,33154,33156],{"class":256,"line":33155},140,[254,33157,33158],{"class":323},"        # 计算并保存训练集的loss值\n",[254,33160,33162,33165,33167],{"class":256,"line":33161},141,[254,33163,33164],{"class":264},"        train_loss_all.append(train_loss",[254,33166,848],{"class":260},[254,33168,33169],{"class":264},"train_num)\n",[254,33171,33173],{"class":256,"line":33172},142,[254,33174,33175],{"class":323},"        # 取双精度\n",[254,33177,33179],{"class":256,"line":33178},143,[254,33180,33181],{"class":323},"        # 计算并保存训练集的准确率\n",[254,33183,33185,33188,33190],{"class":256,"line":33184},144,[254,33186,33187],{"class":264},"        train_acc_all.append(train_corrects.double().item()",[254,33189,848],{"class":260},[254,33191,33169],{"class":264},[254,33193,33195],{"class":256,"line":33194},145,[254,33196,33197],{"class":323},"        # 计算并保存验证集的loss值\n",[254,33199,33201,33204,33206],{"class":256,"line":33200},146,[254,33202,33203],{"class":264},"        val_loss_all.append(val_loss",[254,33205,848],{"class":260},[254,33207,33208],{"class":264},"val_num)\n",[254,33210,33212],{"class":256,"line":33211},147,[254,33213,33214],{"class":323},"        # 计算并保存验证集的准确率\n",[254,33216,33218,33221,33223],{"class":256,"line":33217},148,[254,33219,33220],{"class":264},"        val_acc_all.append(val_corrects.double().item()",[254,33222,848],{"class":260},[254,33224,33208],{"class":264},[254,33226,33228],{"class":256,"line":33227},149,[254,33229,2540],{"emptyLinePlaceholder":184},[254,33231,33233],{"class":256,"line":33232},150,[254,33234,33235],{"class":323},"        # 打印训练一轮的loss值和准确率\n",[254,33237,33239,33241,33243,33245,33247,33250,33252,33255,33257,33260,33262,33264,33266,33268,33271,33273,33275,33278,33280,33282],{"class":256,"line":33238},151,[254,33240,32592],{"class":313},[254,33242,265],{"class":264},[254,33244,3732],{"class":369},[254,33246,32600],{"class":313},[254,33248,33249],{"class":369},"train loss:",[254,33251,1160],{"class":313},[254,33253,33254],{"class":260},":.4f",[254,33256,1210],{"class":313},[254,33258,33259],{"class":369}," train acc:",[254,33261,1160],{"class":313},[254,33263,33254],{"class":260},[254,33265,1210],{"class":313},[254,33267,3732],{"class":369},[254,33269,33270],{"class":264},".format(epoch,train_loss_all[",[254,33272,796],{"class":260},[254,33274,482],{"class":313},[254,33276,33277],{"class":264},"],train_acc_all[",[254,33279,796],{"class":260},[254,33281,482],{"class":313},[254,33283,33284],{"class":264},"]))\n",[254,33286,33288,33290,33292,33294,33296,33299,33301,33303,33305,33308,33310,33312,33314,33316,33319,33321,33323,33326,33328,33330],{"class":256,"line":33287},152,[254,33289,32592],{"class":313},[254,33291,265],{"class":264},[254,33293,3732],{"class":369},[254,33295,32600],{"class":313},[254,33297,33298],{"class":369},"val loss:",[254,33300,1160],{"class":313},[254,33302,33254],{"class":260},[254,33304,1210],{"class":313},[254,33306,33307],{"class":369}," val acc:",[254,33309,1160],{"class":313},[254,33311,33254],{"class":260},[254,33313,1210],{"class":313},[254,33315,3732],{"class":369},[254,33317,33318],{"class":264},".format(epoch,val_loss_all[",[254,33320,796],{"class":260},[254,33322,482],{"class":313},[254,33324,33325],{"class":264},"],val_acc_all[",[254,33327,796],{"class":260},[254,33329,482],{"class":313},[254,33331,33284],{"class":264},[254,33333,33335],{"class":256,"line":33334},153,[254,33336,2540],{"emptyLinePlaceholder":184},[254,33338,33340],{"class":256,"line":33339},154,[254,33341,33342],{"class":323},"        # 判断准确度--->保存最优模型\n",[254,33344,33346,33348,33351,33353,33355,33357,33359],{"class":256,"line":33345},155,[254,33347,2637],{"class":260},[254,33349,33350],{"class":264}," val_acc_all[",[254,33352,796],{"class":260},[254,33354,482],{"class":313},[254,33356,1204],{"class":264},[254,33358,1224],{"class":260},[254,33360,33361],{"class":264},"best_acc:\n",[254,33363,33365],{"class":256,"line":33364},156,[254,33366,33367],{"class":323},"            # 保存当前模型准确度\n",[254,33369,33371,33374,33376,33378,33381,33383,33385],{"class":256,"line":33370},157,[254,33372,33373],{"class":264},"            best_acc:",[254,33375,304],{"class":313},[254,33377,310],{"class":260},[254,33379,33380],{"class":264},"val_acc_all[",[254,33382,796],{"class":260},[254,33384,482],{"class":313},[254,33386,33387],{"class":264},"]\n",[254,33389,33391],{"class":256,"line":33390},158,[254,33392,33393],{"class":323},"            # 保存当前的准确度\n",[254,33395,33397],{"class":256,"line":33396},159,[254,33398,33399],{"class":323},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[254,33401,33403,33406,33408],{"class":256,"line":33402},160,[254,33404,33405],{"class":264},"            best_model_wts",[254,33407,310],{"class":260},[254,33409,32455],{"class":264},[254,33411,33413],{"class":256,"line":33412},161,[254,33414,2540],{"emptyLinePlaceholder":184},[254,33416,33418],{"class":256,"line":33417},162,[254,33419,33420],{"class":323},"        # 计算耗时\n",[254,33422,33424,33427,33429,33432,33434],{"class":256,"line":33423},163,[254,33425,33426],{"class":264},"        time_use",[254,33428,310],{"class":260},[254,33430,33431],{"class":264},"time.time()",[254,33433,796],{"class":260},[254,33435,33436],{"class":264},"since\n",[254,33438,33440,33442,33444,33447,33449,33452,33454,33456,33458,33460,33462,33465,33468,33471,33473,33476,33478,33480],{"class":256,"line":33439},164,[254,33441,32592],{"class":313},[254,33443,265],{"class":264},[254,33445,33446],{"class":369},"'训练和验证耗费的时间",[254,33448,1160],{"class":313},[254,33450,33451],{"class":260},":.0f",[254,33453,1210],{"class":313},[254,33455,808],{"class":369},[254,33457,1160],{"class":313},[254,33459,33451],{"class":260},[254,33461,1210],{"class":313},[254,33463,33464],{"class":369},"s'",[254,33466,33467],{"class":264},".format(time_use",[254,33469,33470],{"class":260},"\u002F\u002F",[254,33472,1171],{"class":313},[254,33474,33475],{"class":264},",time_use",[254,33477,592],{"class":260},[254,33479,1171],{"class":313},[254,33481,30638],{"class":264},[254,33483,33485],{"class":256,"line":33484},165,[254,33486,33487],{"class":323},"    # 选择最优参数\n",[254,33489,33491],{"class":256,"line":33490},166,[254,33492,33493],{"class":323},"    # 加载最高准确率下的模型参数\n",[254,33495,33497],{"class":256,"line":33496},167,[254,33498,33499],{"class":323},"    # model.load_state_dict(best_model_wts)\n",[254,33501,33503,33506,33509],{"class":256,"line":33502},168,[254,33504,33505],{"class":264},"    torch.save(model.state_dict(best_model_wts), ",[254,33507,33508],{"class":369},"'.\u002Fbest_model.pth'",[254,33510,271],{"class":264},[254,33512,33514],{"class":256,"line":33513},169,[254,33515,33516],{"class":323},"    # 或者写成\n",[254,33518,33520],{"class":256,"line":33519},170,[254,33521,33522],{"class":323},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[254,33524,33526],{"class":256,"line":33525},171,[254,33527,33528],{"class":323},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[254,33530,33532,33535,33537,33540,33543,33545],{"class":256,"line":33531},172,[254,33533,33534],{"class":264},"    train_process",[254,33536,310],{"class":260},[254,33538,33539],{"class":264},"pd.DataFrame(",[254,33541,33542],{"class":5357},"data",[254,33544,310],{"class":260},[254,33546,1686],{"class":264},[254,33548,33550,33553,33555,33558],{"class":256,"line":33549},173,[254,33551,33552],{"class":369},"        \"epoch\"",[254,33554,1123],{"class":264},[254,33556,33557],{"class":313},"range",[254,33559,33560],{"class":264},"(num_epochs),\n",[254,33562,33564,33567],{"class":256,"line":33563},174,[254,33565,33566],{"class":369},"        \"train_loss_all\"",[254,33568,33569],{"class":264},":train_loss_all,\n",[254,33571,33573,33576],{"class":256,"line":33572},175,[254,33574,33575],{"class":369},"        \"val_loss_all\"",[254,33577,33578],{"class":264},":val_loss_all,\n",[254,33580,33582,33585],{"class":256,"line":33581},176,[254,33583,33584],{"class":369},"        \"train_acc_all\"",[254,33586,33587],{"class":264},":train_acc_all,\n",[254,33589,33591,33594],{"class":256,"line":33590},177,[254,33592,33593],{"class":369},"        \"val_acc_all\"",[254,33595,33596],{"class":264},":val_acc_all\n",[254,33598,33600],{"class":256,"line":33599},178,[254,33601,33602],{"class":264},"    })\n",[254,33604,33606],{"class":256,"line":33605},179,[254,33607,33608],{"class":323},"    # 返回训练保存的过程\n",[254,33610,33612,33614],{"class":256,"line":33611},180,[254,33613,4230],{"class":260},[254,33615,33616],{"class":264}," train_process\n",[254,33618,33620],{"class":256,"line":33619},181,[254,33621,2540],{"emptyLinePlaceholder":184},[254,33623,33625],{"class":256,"line":33624},182,[254,33626,33627],{"class":323},"# 将loss值和精度按照图片的形式展示出来\n",[254,33629,33631,33633,33636],{"class":256,"line":33630},183,[254,33632,32088],{"class":260},[254,33634,33635],{"class":2103}," matplot_acc_loss",[254,33637,33638],{"class":264},"(train_process):\n",[254,33640,33642],{"class":256,"line":33641},184,[254,33643,33644],{"class":323},"    # 设置图的大小\n",[254,33646,33648,33651,33653,33655,33657,33659,33661,33663],{"class":256,"line":33647},185,[254,33649,33650],{"class":264},"    plt.figure(",[254,33652,31834],{"class":5357},[254,33654,310],{"class":260},[254,33656,265],{"class":264},[254,33658,762],{"class":313},[254,33660,642],{"class":264},[254,33662,557],{"class":313},[254,33664,30638],{"class":264},[254,33666,33668],{"class":256,"line":33667},186,[254,33669,33670],{"class":323},"    # 设置图中有几张图\n",[254,33672,33674],{"class":256,"line":33673},187,[254,33675,33676],{"class":323},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[254,33678,33680],{"class":256,"line":33679},188,[254,33681,33682],{"class":323},"    # ①loss图\n",[254,33684,33686,33688,33690,33692,33694,33696,33698],{"class":256,"line":33685},189,[254,33687,31868],{"class":264},[254,33689,482],{"class":313},[254,33691,642],{"class":264},[254,33693,342],{"class":313},[254,33695,642],{"class":264},[254,33697,482],{"class":313},[254,33699,271],{"class":264},[254,33701,33703],{"class":256,"line":33702},190,[254,33704,33705],{"class":323},"    # 补充:\n",[254,33707,33709],{"class":256,"line":33708},191,[254,33710,33711],{"class":323},"    # plt.subplot(nrows, ncols, index)\n",[254,33713,33715],{"class":256,"line":33714},192,[254,33716,33717],{"class":323},"    # nrows：行数\n",[254,33719,33721],{"class":256,"line":33720},193,[254,33722,33723],{"class":323},"    # ncols：列数\n",[254,33725,33727],{"class":256,"line":33726},194,[254,33728,33729],{"class":323},"    # index：目前选中第几个子图（从1开始）\n",[254,33731,33733,33736,33739,33742,33745,33747,33750,33752,33755],{"class":256,"line":33732},195,[254,33734,33735],{"class":264},"    plt.plot(train_process[",[254,33737,33738],{"class":369},"\"epoch\"",[254,33740,33741],{"class":264},"],train_process.train_loss_all,",[254,33743,33744],{"class":369},"'ro-'",[254,33746,642],{"class":264},[254,33748,33749],{"class":5357},"label",[254,33751,310],{"class":260},[254,33753,33754],{"class":369},"'train loss'",[254,33756,271],{"class":264},[254,33758,33760,33762,33764,33767,33770,33772,33774,33776,33779],{"class":256,"line":33759},196,[254,33761,33735],{"class":264},[254,33763,33738],{"class":369},[254,33765,33766],{"class":264},"],train_process.val_loss_all,",[254,33768,33769],{"class":369},"'bs--'",[254,33771,642],{"class":264},[254,33773,33749],{"class":5357},[254,33775,310],{"class":260},[254,33777,33778],{"class":369},"'val loss'",[254,33780,271],{"class":264},[254,33782,33784],{"class":256,"line":33783},197,[254,33785,33786],{"class":323},"    # 添加一个图例\n",[254,33788,33790],{"class":256,"line":33789},198,[254,33791,33792],{"class":264},"    plt.legend()\n",[254,33794,33796],{"class":256,"line":33795},199,[254,33797,33798],{"class":323},"    # 给轴添加标签\n",[254,33800,33802,33805,33808],{"class":256,"line":33801},200,[254,33803,33804],{"class":264},"    plt.xlabel(",[254,33806,33807],{"class":369},"'epoch'",[254,33809,271],{"class":264},[254,33811,33813,33816,33819],{"class":256,"line":33812},201,[254,33814,33815],{"class":264},"    plt.ylabel(",[254,33817,33818],{"class":369},"'loss'",[254,33820,271],{"class":264},[254,33822,33824],{"class":256,"line":33823},202,[254,33825,33826],{"class":323},"    # ②准确度图\n",[254,33828,33830,33832,33834,33836,33838,33840,33842],{"class":256,"line":33829},203,[254,33831,31868],{"class":264},[254,33833,482],{"class":313},[254,33835,642],{"class":264},[254,33837,342],{"class":313},[254,33839,642],{"class":264},[254,33841,342],{"class":313},[254,33843,271],{"class":264},[254,33845,33847,33849,33851,33854,33856,33858,33860,33862,33865],{"class":256,"line":33846},204,[254,33848,33735],{"class":264},[254,33850,33738],{"class":369},[254,33852,33853],{"class":264},"],train_process.train_acc_all,",[254,33855,33744],{"class":369},[254,33857,642],{"class":264},[254,33859,33749],{"class":5357},[254,33861,310],{"class":260},[254,33863,33864],{"class":369},"'train acc'",[254,33866,271],{"class":264},[254,33868,33870,33872,33874,33877,33879,33881,33883,33885,33888],{"class":256,"line":33869},205,[254,33871,33735],{"class":264},[254,33873,33738],{"class":369},[254,33875,33876],{"class":264},"],train_process.val_acc_all,",[254,33878,33769],{"class":369},[254,33880,642],{"class":264},[254,33882,33749],{"class":5357},[254,33884,310],{"class":260},[254,33886,33887],{"class":369},"'val acc'",[254,33889,271],{"class":264},[254,33891,33893],{"class":256,"line":33892},206,[254,33894,33895],{"class":323},"    # 添加图例\n",[254,33897,33899],{"class":256,"line":33898},207,[254,33900,33792],{"class":264},[254,33902,33904,33906,33908],{"class":256,"line":33903},208,[254,33905,33804],{"class":264},[254,33907,33738],{"class":369},[254,33909,271],{"class":264},[254,33911,33913,33915,33918],{"class":256,"line":33912},209,[254,33914,33815],{"class":264},[254,33916,33917],{"class":369},"\"acc\"",[254,33919,271],{"class":264},[254,33921,33923],{"class":256,"line":33922},210,[254,33924,33925],{"class":264},"    plt.show()\n",[254,33927,33929],{"class":256,"line":33928},211,[254,33930,2540],{"emptyLinePlaceholder":184},[254,33932,33934],{"class":256,"line":33933},212,[254,33935,33936],{"class":323},"# 正式开始训练:\n",[254,33938,33940,33942,33944,33946,33948],{"class":256,"line":33939},213,[254,33941,1671],{"class":260},[254,33943,31361],{"class":313},[254,33945,3089],{"class":260},[254,33947,31366],{"class":369},[254,33949,3879],{"class":264},[254,33951,33953],{"class":256,"line":33952},214,[254,33954,33955],{"class":323},"    # 将模型实例化\n",[254,33957,33959,33962,33964],{"class":256,"line":33958},215,[254,33960,33961],{"class":264},"    LeNet",[254,33963,310],{"class":260},[254,33965,33966],{"class":264},"LeNet()\n",[254,33968,33970,33973,33975],{"class":256,"line":33969},216,[254,33971,33972],{"class":264},"    train_dataloader,val_dataloader",[254,33974,310],{"class":260},[254,33976,33977],{"class":264},"train_val_data_process()\n",[254,33979,33981,33983,33985,33988,33991,33993,33995],{"class":256,"line":33980},217,[254,33982,33534],{"class":264},[254,33984,310],{"class":260},[254,33986,33987],{"class":264},"train_model_process(LeNet,train_dataloader,val_dataloader,",[254,33989,33990],{"class":5357},"num_epochs",[254,33992,310],{"class":260},[254,33994,964],{"class":313},[254,33996,271],{"class":264},[254,33998,34000],{"class":256,"line":33999},218,[254,34001,34002],{"class":264},"    matplot_acc_loss(train_process)\n",[14,34004,34005],{},"画图的补充点学习：",[14,34007,34008],{},[1602,34009],{"alt":174,"src":34010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-014.png",[21,34012,34013],{"start":1319},[24,34014,34015],{},"测试",[245,34017,34019],{"className":30519,"code":34018,"language":30521,"meta":174,"style":174},"import torch\nimport torch.utils.data as Data\nfrom jupyter_client.consoleapp import classes\nfrom torchvision import transforms\n# 导入数据集\nfrom torchvision.datasets import FashionMNIST\nfrom model import LeNet\n\n# 测试数据处理\ndef test_data_process():\n    test_data=FashionMNIST(root='.\u002Fdata',\n                           train=False,\n                           transform=transforms.Compose([transforms.Resize(size=28),transforms.ToTensor()]),\n                           download=True)\n    test_dataloader=Data.DataLoader(dataset=test_data,\n                                    # 这里是一张一张进行测试\n                                    batch_size=1,\n                                    shuffle=True,\n                                    num_workers=0)\n    return test_dataloader\n\n# 定义模型测试函数\ndef test_model_process(model,test_dataloader):\n    # 将模型放到设备当中，先进行判断\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n\n    # 设置初始化参数\n    test_corrects=0.0\n    test_num=0\n\n    # 进行模型测试\n    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n    # 不进行梯度计算，可以节省内存，加快运行速度\n    with torch.no_grad():\n        # 从数据中进行\n        for test_data_x,test_data_y in test_dataloader:\n            test_data_x=test_data_x.to(device)\n            test_data_y=test_data_y.to(device)\n            # 设置为验证模式\n            model.eval()\n            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n            output=model(test_data_x)\n            # 查找每一行中最大值对应的下标\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算正确率\n            # .data表示是一个不带梯度信息的tensor\n            # 如果预测正确，则准确度test_corrects加1\n            test_corrects+=torch.sum(pre_lab==test_data_y.data)\n            # 将所有的测试样本进行累计\n            test_num+=test_data_x.size(0)\n\n        # 计算准确度\n        test_acc=test_corrects.double().item()\u002Ftest_num\n        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n        print(\"测试的准确率：\",test_acc)\n\n# 实现模型的测试功能\nif __name__==\"__main__\":\n    # 加载模型\n    model=LeNet()\n    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n    model.load_state_dict(torch.load('best_model.pth'))\n    # 数据加载\n    test_dataloader=test_data_process()\n    # 加载模型测试的函数\n    test_model_process(model,test_dataloader)\n\n    # 验证集推理实现：\n    # 加载数据加载的更详细一些\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n    # 顺序不可改变\n    classes=['T-shirt\u002Ftop','Trouser','Pullover','Dress','Coat','Sandal','Shirt','Sneaker','Bag','Ankle boot']\n    with torch.no_grad():\n        # 将数据和标签都放到设备当中\n        for b_x,b_y in test_dataloader:\n            b_x=b_x.to(device)\n            b_y=b_y.to(device)\n\n            # 设置模型为验证模式\n            model.eval()\n            # 模型推理结果\n            output=model(b_x)\n            # 获取最大下标，最大下标就是类别号\n            pre_lab=torch.argmax(output,dim=1)\n            # 取出张量中的数值\n            result=pre_lab.item()\n            label=b_y.item()\n            print(\"预测值：\",classes[result],\"------\",\"真实值：\",classes[label])\n",[251,34020,34021,34027,34037,34049,34059,34064,34074,34084,34088,34093,34102,34119,34131,34148,34159,34175,34180,34191,34202,34213,34220,34224,34229,34239,34244,34261,34269,34273,34278,34287,34296,34300,34305,34310,34315,34322,34327,34339,34349,34359,34364,34368,34373,34382,34387,34403,34408,34413,34418,34432,34437,34451,34455,34460,34475,34480,34492,34496,34501,34513,34518,34526,34531,34536,34546,34551,34560,34565,34570,34574,34579,34584,34600,34608,34613,34618,34677,34683,34688,34699,34707,34715,34719,34724,34728,34733,34741,34746,34762,34767,34777,34787],{"__ignoreMap":174},[254,34022,34023,34025],{"class":256,"line":257},[254,34024,30533],{"class":260},[254,34026,30536],{"class":264},[254,34028,34029,34031,34033,34035],{"class":256,"line":175},[254,34030,30533],{"class":260},[254,34032,31556],{"class":264},[254,34034,31524],{"class":260},[254,34036,31561],{"class":264},[254,34038,34039,34041,34044,34046],{"class":256,"line":1319},[254,34040,30878],{"class":260},[254,34042,34043],{"class":264}," jupyter_client.consoleapp ",[254,34045,30533],{"class":260},[254,34047,34048],{"class":264}," classes\n",[254,34050,34051,34053,34055,34057],{"class":256,"line":1334},[254,34052,30878],{"class":260},[254,34054,31539],{"class":264},[254,34056,30533],{"class":260},[254,34058,31544],{"class":264},[254,34060,34061],{"class":256,"line":1340},[254,34062,34063],{"class":323},"# 导入数据集\n",[254,34065,34066,34068,34070,34072],{"class":256,"line":1354},[254,34067,30878],{"class":260},[254,34069,31509],{"class":264},[254,34071,30533],{"class":260},[254,34073,31514],{"class":264},[254,34075,34076,34078,34080,34082],{"class":256,"line":1360},[254,34077,30878],{"class":260},[254,34079,32055],{"class":264},[254,34081,30533],{"class":260},[254,34083,32060],{"class":264},[254,34085,34086],{"class":256,"line":1451},[254,34087,2540],{"emptyLinePlaceholder":184},[254,34089,34090],{"class":256,"line":1457},[254,34091,34092],{"class":323},"# 测试数据处理\n",[254,34094,34095,34097,34100],{"class":256,"line":1469},[254,34096,32088],{"class":260},[254,34098,34099],{"class":2103}," test_data_process",[254,34101,32094],{"class":264},[254,34103,34104,34107,34109,34111,34113,34115,34117],{"class":256,"line":1752},[254,34105,34106],{"class":264},"    test_data",[254,34108,310],{"class":260},[254,34110,31596],{"class":264},[254,34112,31599],{"class":5357},[254,34114,310],{"class":260},[254,34116,31604],{"class":369},[254,34118,31607],{"class":264},[254,34120,34121,34124,34126,34129],{"class":256,"line":1757},[254,34122,34123],{"class":5357},"                           train",[254,34125,310],{"class":260},[254,34127,34128],{"class":313},"False",[254,34130,31607],{"class":264},[254,34132,34133,34136,34138,34140,34142,34144,34146],{"class":256,"line":1763},[254,34134,34135],{"class":5357},"                           transform",[254,34137,310],{"class":260},[254,34139,31634],{"class":264},[254,34141,31637],{"class":5357},[254,34143,310],{"class":260},[254,34145,1165],{"class":313},[254,34147,31645],{"class":264},[254,34149,34150,34153,34155,34157],{"class":256,"line":1768},[254,34151,34152],{"class":5357},"                           download",[254,34154,310],{"class":260},[254,34156,31617],{"class":313},[254,34158,271],{"class":264},[254,34160,34161,34164,34166,34168,34170,34172],{"class":256,"line":1782},[254,34162,34163],{"class":264},"    test_dataloader",[254,34165,310],{"class":260},[254,34167,31675],{"class":264},[254,34169,31678],{"class":5357},[254,34171,310],{"class":260},[254,34173,34174],{"class":264},"test_data,\n",[254,34176,34177],{"class":256,"line":1787},[254,34178,34179],{"class":323},"                                    # 这里是一张一张进行测试\n",[254,34181,34182,34185,34187,34189],{"class":256,"line":1793},[254,34183,34184],{"class":5357},"                                    batch_size",[254,34186,310],{"class":260},[254,34188,482],{"class":313},[254,34190,31607],{"class":264},[254,34192,34193,34196,34198,34200],{"class":256,"line":1814},[254,34194,34195],{"class":5357},"                                    shuffle",[254,34197,310],{"class":260},[254,34199,31617],{"class":313},[254,34201,31607],{"class":264},[254,34203,34204,34207,34209,34211],{"class":256,"line":1819},[254,34205,34206],{"class":5357},"                                    num_workers",[254,34208,310],{"class":260},[254,34210,456],{"class":313},[254,34212,271],{"class":264},[254,34214,34215,34217],{"class":256,"line":1833},[254,34216,4230],{"class":260},[254,34218,34219],{"class":264}," test_dataloader\n",[254,34221,34222],{"class":256,"line":1838},[254,34223,2540],{"emptyLinePlaceholder":184},[254,34225,34226],{"class":256,"line":1867},[254,34227,34228],{"class":323},"# 定义模型测试函数\n",[254,34230,34231,34233,34236],{"class":256,"line":1872},[254,34232,32088],{"class":260},[254,34234,34235],{"class":2103}," test_model_process",[254,34237,34238],{"class":264},"(model,test_dataloader):\n",[254,34240,34241],{"class":256,"line":1889},[254,34242,34243],{"class":323},"    # 将模型放到设备当中，先进行判断\n",[254,34245,34246,34248,34250,34252,34254,34256,34258],{"class":256,"line":1894},[254,34247,31378],{"class":264},[254,34249,310],{"class":260},[254,34251,31385],{"class":369},[254,34253,1844],{"class":260},[254,34255,31390],{"class":264},[254,34257,1841],{"class":260},[254,34259,34260],{"class":369}," \"cpu\"\n",[254,34262,34263,34265,34267],{"class":256,"line":1899},[254,34264,31430],{"class":264},[254,34266,310],{"class":260},[254,34268,32430],{"class":264},[254,34270,34271],{"class":256,"line":1904},[254,34272,2540],{"emptyLinePlaceholder":184},[254,34274,34275],{"class":256,"line":1918},[254,34276,34277],{"class":323},"    # 设置初始化参数\n",[254,34279,34280,34283,34285],{"class":256,"line":1923},[254,34281,34282],{"class":264},"    test_corrects",[254,34284,310],{"class":260},[254,34286,32483],{"class":313},[254,34288,34289,34292,34294],{"class":256,"line":2717},[254,34290,34291],{"class":264},"    test_num",[254,34293,310],{"class":260},[254,34295,3225],{"class":313},[254,34297,34298],{"class":256,"line":2731},[254,34299,2540],{"emptyLinePlaceholder":184},[254,34301,34302],{"class":256,"line":2739},[254,34303,34304],{"class":323},"    # 进行模型测试\n",[254,34306,34307],{"class":256,"line":2744},[254,34308,34309],{"class":323},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[254,34311,34312],{"class":256,"line":2750},[254,34313,34314],{"class":323},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[254,34316,34317,34320],{"class":256,"line":2756},[254,34318,34319],{"class":260},"    with",[254,34321,33025],{"class":264},[254,34323,34324],{"class":256,"line":2761},[254,34325,34326],{"class":323},"        # 从数据中进行\n",[254,34328,34329,34331,34334,34336],{"class":256,"line":8089},[254,34330,3543],{"class":260},[254,34332,34333],{"class":264}," test_data_x,test_data_y ",[254,34335,26184],{"class":260},[254,34337,34338],{"class":264}," test_dataloader:\n",[254,34340,34341,34344,34346],{"class":256,"line":8113},[254,34342,34343],{"class":264},"            test_data_x",[254,34345,310],{"class":260},[254,34347,34348],{"class":264},"test_data_x.to(device)\n",[254,34350,34351,34354,34356],{"class":256,"line":8118},[254,34352,34353],{"class":264},"            test_data_y",[254,34355,310],{"class":260},[254,34357,34358],{"class":264},"test_data_y.to(device)\n",[254,34360,34361],{"class":256,"line":8124},[254,34362,34363],{"class":323},"            # 设置为验证模式\n",[254,34365,34366],{"class":256,"line":8151},[254,34367,33016],{"class":264},[254,34369,34370],{"class":256,"line":8156},[254,34371,34372],{"class":323},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[254,34374,34375,34377,34379],{"class":256,"line":8162},[254,34376,32801],{"class":264},[254,34378,310],{"class":260},[254,34380,34381],{"class":264},"model(test_data_x)\n",[254,34383,34384],{"class":256,"line":8174},[254,34385,34386],{"class":323},"            # 查找每一行中最大值对应的下标\n",[254,34388,34389,34391,34393,34395,34397,34399,34401],{"class":256,"line":8186},[254,34390,32818],{"class":264},[254,34392,310],{"class":260},[254,34394,32823],{"class":264},[254,34396,32826],{"class":5357},[254,34398,310],{"class":260},[254,34400,482],{"class":313},[254,34402,271],{"class":264},[254,34404,34405],{"class":256,"line":8198},[254,34406,34407],{"class":323},"            # 计算正确率\n",[254,34409,34410],{"class":256,"line":9857},[254,34411,34412],{"class":323},"            # .data表示是一个不带梯度信息的tensor\n",[254,34414,34415],{"class":256,"line":9882},[254,34416,34417],{"class":323},"            # 如果预测正确，则准确度test_corrects加1\n",[254,34419,34420,34423,34425,34427,34429],{"class":256,"line":9905},[254,34421,34422],{"class":264},"            test_corrects",[254,34424,9618],{"class":260},[254,34426,32928],{"class":264},[254,34428,3089],{"class":260},[254,34430,34431],{"class":264},"test_data_y.data)\n",[254,34433,34434],{"class":256,"line":9929},[254,34435,34436],{"class":323},"            # 将所有的测试样本进行累计\n",[254,34438,34439,34442,34444,34447,34449],{"class":256,"line":9934},[254,34440,34441],{"class":264},"            test_num",[254,34443,9618],{"class":260},[254,34445,34446],{"class":264},"test_data_x.size(",[254,34448,456],{"class":313},[254,34450,271],{"class":264},[254,34452,34453],{"class":256,"line":9939},[254,34454,2540],{"emptyLinePlaceholder":184},[254,34456,34457],{"class":256,"line":9944},[254,34458,34459],{"class":323},"        # 计算准确度\n",[254,34461,34462,34465,34467,34470,34472],{"class":256,"line":9953},[254,34463,34464],{"class":264},"        test_acc",[254,34466,310],{"class":260},[254,34468,34469],{"class":264},"test_corrects.double().item()",[254,34471,848],{"class":260},[254,34473,34474],{"class":264},"test_num\n",[254,34476,34477],{"class":256,"line":9958},[254,34478,34479],{"class":323},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[254,34481,34482,34484,34486,34489],{"class":256,"line":9964},[254,34483,32592],{"class":313},[254,34485,265],{"class":264},[254,34487,34488],{"class":369},"\"测试的准确率：\"",[254,34490,34491],{"class":264},",test_acc)\n",[254,34493,34494],{"class":256,"line":9985},[254,34495,2540],{"emptyLinePlaceholder":184},[254,34497,34498],{"class":256,"line":9991},[254,34499,34500],{"class":323},"# 实现模型的测试功能\n",[254,34502,34503,34505,34507,34509,34511],{"class":256,"line":10005},[254,34504,1671],{"class":260},[254,34506,31361],{"class":313},[254,34508,3089],{"class":260},[254,34510,31366],{"class":369},[254,34512,3879],{"class":264},[254,34514,34515],{"class":256,"line":10011},[254,34516,34517],{"class":323},"    # 加载模型\n",[254,34519,34520,34522,34524],{"class":256,"line":10038},[254,34521,31430],{"class":264},[254,34523,310],{"class":260},[254,34525,33966],{"class":264},[254,34527,34528],{"class":256,"line":10047},[254,34529,34530],{"class":323},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[254,34532,34533],{"class":256,"line":10053},[254,34534,34535],{"class":323},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[254,34537,34538,34541,34544],{"class":256,"line":10061},[254,34539,34540],{"class":264},"    model.load_state_dict(torch.load(",[254,34542,34543],{"class":369},"'best_model.pth'",[254,34545,30638],{"class":264},[254,34547,34548],{"class":256,"line":10066},[254,34549,34550],{"class":323},"    # 数据加载\n",[254,34552,34553,34555,34557],{"class":256,"line":16745},[254,34554,34163],{"class":264},[254,34556,310],{"class":260},[254,34558,34559],{"class":264},"test_data_process()\n",[254,34561,34562],{"class":256,"line":16751},[254,34563,34564],{"class":323},"    # 加载模型测试的函数\n",[254,34566,34567],{"class":256,"line":16774},[254,34568,34569],{"class":264},"    test_model_process(model,test_dataloader)\n",[254,34571,34572],{"class":256,"line":16780},[254,34573,2540],{"emptyLinePlaceholder":184},[254,34575,34576],{"class":256,"line":16803},[254,34577,34578],{"class":323},"    # 验证集推理实现：\n",[254,34580,34581],{"class":256,"line":16817},[254,34582,34583],{"class":323},"    # 加载数据加载的更详细一些\n",[254,34585,34586,34588,34590,34592,34594,34596,34598],{"class":256,"line":16837},[254,34587,31378],{"class":264},[254,34589,310],{"class":260},[254,34591,31385],{"class":369},[254,34593,1844],{"class":260},[254,34595,31390],{"class":264},[254,34597,1841],{"class":260},[254,34599,34260],{"class":369},[254,34601,34602,34604,34606],{"class":256,"line":16843},[254,34603,31430],{"class":264},[254,34605,310],{"class":260},[254,34607,32430],{"class":264},[254,34609,34610],{"class":256,"line":16854},[254,34611,34612],{"class":323},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[254,34614,34615],{"class":256,"line":16877},[254,34616,34617],{"class":323},"    # 顺序不可改变\n",[254,34619,34620,34623,34625,34627,34630,34632,34635,34637,34640,34642,34645,34647,34650,34652,34655,34657,34660,34662,34665,34667,34670,34672,34675],{"class":256,"line":16899},[254,34621,34622],{"class":264},"    classes",[254,34624,310],{"class":260},[254,34626,1154],{"class":264},[254,34628,34629],{"class":369},"'T-shirt\u002Ftop'",[254,34631,642],{"class":264},[254,34633,34634],{"class":369},"'Trouser'",[254,34636,642],{"class":264},[254,34638,34639],{"class":369},"'Pullover'",[254,34641,642],{"class":264},[254,34643,34644],{"class":369},"'Dress'",[254,34646,642],{"class":264},[254,34648,34649],{"class":369},"'Coat'",[254,34651,642],{"class":264},[254,34653,34654],{"class":369},"'Sandal'",[254,34656,642],{"class":264},[254,34658,34659],{"class":369},"'Shirt'",[254,34661,642],{"class":264},[254,34663,34664],{"class":369},"'Sneaker'",[254,34666,642],{"class":264},[254,34668,34669],{"class":369},"'Bag'",[254,34671,642],{"class":264},[254,34673,34674],{"class":369},"'Ankle boot'",[254,34676,33387],{"class":264},[254,34678,34679,34681],{"class":256,"line":16904},[254,34680,34319],{"class":260},[254,34682,33025],{"class":264},[254,34684,34685],{"class":256,"line":16910},[254,34686,34687],{"class":323},"        # 将数据和标签都放到设备当中\n",[254,34689,34690,34692,34695,34697],{"class":256,"line":16924},[254,34691,3543],{"class":260},[254,34693,34694],{"class":264}," b_x,b_y ",[254,34696,26184],{"class":260},[254,34698,34338],{"class":264},[254,34700,34701,34703,34705],{"class":256,"line":16937},[254,34702,32751],{"class":264},[254,34704,310],{"class":260},[254,34706,32756],{"class":264},[254,34708,34709,34711,34713],{"class":256,"line":16942},[254,34710,32766],{"class":264},[254,34712,310],{"class":260},[254,34714,32771],{"class":264},[254,34716,34717],{"class":256,"line":16956},[254,34718,2540],{"emptyLinePlaceholder":184},[254,34720,34721],{"class":256,"line":16961},[254,34722,34723],{"class":323},"            # 设置模型为验证模式\n",[254,34725,34726],{"class":256,"line":16967},[254,34727,33016],{"class":264},[254,34729,34730],{"class":256,"line":16972},[254,34731,34732],{"class":323},"            # 模型推理结果\n",[254,34734,34735,34737,34739],{"class":256,"line":16986},[254,34736,32801],{"class":264},[254,34738,310],{"class":260},[254,34740,32806],{"class":264},[254,34742,34743],{"class":256,"line":16991},[254,34744,34745],{"class":323},"            # 获取最大下标，最大下标就是类别号\n",[254,34747,34748,34750,34752,34754,34756,34758,34760],{"class":256,"line":16996},[254,34749,32818],{"class":264},[254,34751,310],{"class":260},[254,34753,32823],{"class":264},[254,34755,32826],{"class":5357},[254,34757,310],{"class":260},[254,34759,482],{"class":313},[254,34761,271],{"class":264},[254,34763,34764],{"class":256,"line":17010},[254,34765,34766],{"class":323},"            # 取出张量中的数值\n",[254,34768,34769,34772,34774],{"class":256,"line":17022},[254,34770,34771],{"class":264},"            result",[254,34773,310],{"class":260},[254,34775,34776],{"class":264},"pre_lab.item()\n",[254,34778,34779,34782,34784],{"class":256,"line":17027},[254,34780,34781],{"class":264},"            label",[254,34783,310],{"class":260},[254,34785,34786],{"class":264},"b_y.item()\n",[254,34788,34789,34792,34794,34797,34800,34803,34805,34808],{"class":256,"line":17040},[254,34790,34791],{"class":313},"            print",[254,34793,265],{"class":264},[254,34795,34796],{"class":369},"\"预测值：\"",[254,34798,34799],{"class":264},",classes[result],",[254,34801,34802],{"class":369},"\"------\"",[254,34804,642],{"class":264},[254,34806,34807],{"class":369},"\"真实值：\"",[254,34809,34810],{"class":264},",classes[label])\n",[14,34812,34813],{},"（2）AlexNet",[21,34815,34816],{},[24,34817,34818],{},"神经网络构建",[245,34820,34822],{"className":30519,"code":34821,"language":30521,"meta":174,"style":174},"import torch\nfrom torch import nn\nfrom torchsummary import summary\nimport torch.nn.functional as F\n\nclass AlexNet(nn.Module):\n    def __init__(self):\n        super(AlexNet,self).__init__()\n        self.ReLu=nn.ReLU()\n        self.c1=nn.Conv2d(in_channels=1,out_channels=96,kernel_size=11,stride=4)\n        self.s2=nn.MaxPool2d(kernel_size=3,stride=2)\n        self.c3=nn.Conv2d(in_channels=96,out_channels=256,kernel_size=5,padding=2)\n        self.s4=nn.MaxPool2d(kernel_size=3,stride=2)\n        self.c5=nn.Conv2d(in_channels=256,out_channels=384,kernel_size=3,padding=1)\n        self.c6=nn.Conv2d(in_channels=384,out_channels=384,kernel_size=3,padding=1)\n        self.c7=nn.Conv2d(in_channels=384,out_channels=256,kernel_size=3,padding=1)\n        self.s8=nn.MaxPool2d(kernel_size=3,stride=2)\n        # 定义平展层\n        self.flatten=nn.Flatten()\n       # 定义全连接层\n        self.f1=nn.Linear(6*6*256,4096)\n        self.f2=nn.Linear(4096,4096)\n        self.f3=nn.Linear(4096,10)\n\n    # 定义前向传播\n    def forward(self,x):\n        x=self.ReLu(self.c1(x))\n        x=self.s2(x)\n        x=self.ReLu(self.c3(x))\n        x=self.s4(x)\n        x=self.ReLu(self.c5(x))\n        x=self.ReLu(self.c6(x))\n        x=self.ReLu(self.c7(x))\n        x=self.s8(x)\n\n        # 展平加线性全连接层\n        x=self.flatten(x)\n        x=self.ReLu(self.f1(x))\n        # 还需要dropout对神经元随机进行失活\n        x=F.dropout(x,0.5)\n        x=self.ReLu(self.f2(x))\n        x=F.dropout(x,0.5)\n        # 直接输出\n        x=self.f3(x)\n        # 前向传播输出\n        return x\n# 定义主函数，用于测试神经网络是否可以正常工作\nif __name__==\"__main__\":\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n    # 模型实例化，然后将实例化的模型放到设备中\n    model=AlexNet().to(device)\n    print(summary(model,(1,227,227)))\n",[251,34823,34824,34830,34840,34850,34862,34866,34883,34891,34906,34918,34960,34987,35030,35056,35100,35143,35186,35213,35217,35227,35232,35260,35279,35298,35302,35307,35315,35330,35340,35354,35364,35379,35394,35409,35420,35424,35429,35439,35454,35459,35473,35488,35500,35505,35516,35521,35527,35532,35544,35564,35569,35578],{"__ignoreMap":174},[254,34825,34826,34828],{"class":256,"line":257},[254,34827,30533],{"class":260},[254,34829,30536],{"class":264},[254,34831,34832,34834,34836,34838],{"class":256,"line":175},[254,34833,30878],{"class":260},[254,34835,30881],{"class":264},[254,34837,30533],{"class":260},[254,34839,30886],{"class":264},[254,34841,34842,34844,34846,34848],{"class":256,"line":1319},[254,34843,30878],{"class":260},[254,34845,30898],{"class":264},[254,34847,30533],{"class":260},[254,34849,30903],{"class":264},[254,34851,34852,34854,34857,34859],{"class":256,"line":1334},[254,34853,30533],{"class":260},[254,34855,34856],{"class":264}," torch.nn.functional ",[254,34858,31524],{"class":260},[254,34860,34861],{"class":264}," F\n",[254,34863,34864],{"class":256,"line":1340},[254,34865,2540],{"emptyLinePlaceholder":184},[254,34867,34868,34870,34873,34875,34877,34879,34881],{"class":256,"line":1354},[254,34869,14835],{"class":260},[254,34871,34872],{"class":2103}," AlexNet",[254,34874,265],{"class":264},[254,34876,30919],{"class":2103},[254,34878,822],{"class":264},[254,34880,30924],{"class":2103},[254,34882,30927],{"class":264},[254,34884,34885,34887,34889],{"class":256,"line":1360},[254,34886,30942],{"class":260},[254,34888,30945],{"class":313},[254,34890,30948],{"class":264},[254,34892,34893,34895,34898,34900,34902,34904],{"class":256,"line":1451},[254,34894,30958],{"class":313},[254,34896,34897],{"class":264},"(AlexNet,",[254,34899,30964],{"class":313},[254,34901,30967],{"class":264},[254,34903,30970],{"class":313},[254,34905,2116],{"class":264},[254,34907,34908,34910,34913,34915],{"class":256,"line":1457},[254,34909,30986],{"class":313},[254,34911,34912],{"class":264},".ReLu",[254,34914,310],{"class":260},[254,34916,34917],{"class":264},"nn.ReLU()\n",[254,34919,34920,34922,34924,34926,34928,34930,34932,34934,34936,34938,34940,34942,34944,34946,34948,34950,34952,34954,34956,34958],{"class":256,"line":1469},[254,34921,30986],{"class":313},[254,34923,30989],{"class":264},[254,34925,310],{"class":260},[254,34927,30994],{"class":264},[254,34929,30997],{"class":5357},[254,34931,310],{"class":260},[254,34933,482],{"class":313},[254,34935,642],{"class":264},[254,34937,31006],{"class":5357},[254,34939,310],{"class":260},[254,34941,474],{"class":313},[254,34943,642],{"class":264},[254,34945,31015],{"class":5357},[254,34947,310],{"class":260},[254,34949,736],{"class":313},[254,34951,642],{"class":264},[254,34953,31070],{"class":5357},[254,34955,310],{"class":260},[254,34957,557],{"class":313},[254,34959,271],{"class":264},[254,34961,34962,34964,34966,34968,34971,34973,34975,34977,34979,34981,34983,34985],{"class":256,"line":1752},[254,34963,30986],{"class":313},[254,34965,31054],{"class":264},[254,34967,310],{"class":260},[254,34969,34970],{"class":264},"nn.MaxPool2d(",[254,34972,31015],{"class":5357},[254,34974,310],{"class":260},[254,34976,336],{"class":313},[254,34978,642],{"class":264},[254,34980,31070],{"class":5357},[254,34982,310],{"class":260},[254,34984,342],{"class":313},[254,34986,271],{"class":264},[254,34988,34989,34991,34993,34995,34997,34999,35001,35003,35005,35007,35009,35012,35014,35016,35018,35020,35022,35024,35026,35028],{"class":256,"line":1757},[254,34990,30986],{"class":313},[254,34992,31083],{"class":264},[254,34994,310],{"class":260},[254,34996,30994],{"class":264},[254,34998,30997],{"class":5357},[254,35000,310],{"class":260},[254,35002,474],{"class":313},[254,35004,642],{"class":264},[254,35006,31006],{"class":5357},[254,35008,310],{"class":260},[254,35010,35011],{"class":313},"256",[254,35013,642],{"class":264},[254,35015,31015],{"class":5357},[254,35017,310],{"class":260},[254,35019,583],{"class":313},[254,35021,642],{"class":264},[254,35023,31024],{"class":5357},[254,35025,310],{"class":260},[254,35027,342],{"class":313},[254,35029,271],{"class":264},[254,35031,35032,35034,35036,35038,35040,35042,35044,35046,35048,35050,35052,35054],{"class":256,"line":1763},[254,35033,30986],{"class":313},[254,35035,31118],{"class":264},[254,35037,310],{"class":260},[254,35039,34970],{"class":264},[254,35041,31015],{"class":5357},[254,35043,310],{"class":260},[254,35045,336],{"class":313},[254,35047,642],{"class":264},[254,35049,31070],{"class":5357},[254,35051,310],{"class":260},[254,35053,342],{"class":313},[254,35055,271],{"class":264},[254,35057,35058,35060,35063,35065,35067,35069,35071,35073,35075,35077,35079,35082,35084,35086,35088,35090,35092,35094,35096,35098],{"class":256,"line":1768},[254,35059,30986],{"class":313},[254,35061,35062],{"class":264},".c5",[254,35064,310],{"class":260},[254,35066,30994],{"class":264},[254,35068,30997],{"class":5357},[254,35070,310],{"class":260},[254,35072,35011],{"class":313},[254,35074,642],{"class":264},[254,35076,31006],{"class":5357},[254,35078,310],{"class":260},[254,35080,35081],{"class":313},"384",[254,35083,642],{"class":264},[254,35085,31015],{"class":5357},[254,35087,310],{"class":260},[254,35089,336],{"class":313},[254,35091,642],{"class":264},[254,35093,31024],{"class":5357},[254,35095,310],{"class":260},[254,35097,482],{"class":313},[254,35099,271],{"class":264},[254,35101,35102,35104,35107,35109,35111,35113,35115,35117,35119,35121,35123,35125,35127,35129,35131,35133,35135,35137,35139,35141],{"class":256,"line":1782},[254,35103,30986],{"class":313},[254,35105,35106],{"class":264},".c6",[254,35108,310],{"class":260},[254,35110,30994],{"class":264},[254,35112,30997],{"class":5357},[254,35114,310],{"class":260},[254,35116,35081],{"class":313},[254,35118,642],{"class":264},[254,35120,31006],{"class":5357},[254,35122,310],{"class":260},[254,35124,35081],{"class":313},[254,35126,642],{"class":264},[254,35128,31015],{"class":5357},[254,35130,310],{"class":260},[254,35132,336],{"class":313},[254,35134,642],{"class":264},[254,35136,31024],{"class":5357},[254,35138,310],{"class":260},[254,35140,482],{"class":313},[254,35142,271],{"class":264},[254,35144,35145,35147,35150,35152,35154,35156,35158,35160,35162,35164,35166,35168,35170,35172,35174,35176,35178,35180,35182,35184],{"class":256,"line":1787},[254,35146,30986],{"class":313},[254,35148,35149],{"class":264},".c7",[254,35151,310],{"class":260},[254,35153,30994],{"class":264},[254,35155,30997],{"class":5357},[254,35157,310],{"class":260},[254,35159,35081],{"class":313},[254,35161,642],{"class":264},[254,35163,31006],{"class":5357},[254,35165,310],{"class":260},[254,35167,35011],{"class":313},[254,35169,642],{"class":264},[254,35171,31015],{"class":5357},[254,35173,310],{"class":260},[254,35175,336],{"class":313},[254,35177,642],{"class":264},[254,35179,31024],{"class":5357},[254,35181,310],{"class":260},[254,35183,482],{"class":313},[254,35185,271],{"class":264},[254,35187,35188,35190,35193,35195,35197,35199,35201,35203,35205,35207,35209,35211],{"class":256,"line":1793},[254,35189,30986],{"class":313},[254,35191,35192],{"class":264},".s8",[254,35194,310],{"class":260},[254,35196,34970],{"class":264},[254,35198,31015],{"class":5357},[254,35200,310],{"class":260},[254,35202,336],{"class":313},[254,35204,642],{"class":264},[254,35206,31070],{"class":5357},[254,35208,310],{"class":260},[254,35210,342],{"class":313},[254,35212,271],{"class":264},[254,35214,35215],{"class":256,"line":1814},[254,35216,31143],{"class":323},[254,35218,35219,35221,35223,35225],{"class":256,"line":1819},[254,35220,30986],{"class":313},[254,35222,31150],{"class":264},[254,35224,310],{"class":260},[254,35226,31155],{"class":264},[254,35228,35229],{"class":256,"line":1833},[254,35230,35231],{"class":323},"       # 定义全连接层\n",[254,35233,35234,35236,35239,35241,35243,35245,35247,35249,35251,35253,35255,35258],{"class":256,"line":1838},[254,35235,30986],{"class":313},[254,35237,35238],{"class":264},".f1",[254,35240,310],{"class":260},[254,35242,31172],{"class":264},[254,35244,608],{"class":313},[254,35246,719],{"class":260},[254,35248,608],{"class":313},[254,35250,719],{"class":260},[254,35252,35011],{"class":313},[254,35254,642],{"class":264},[254,35256,35257],{"class":313},"4096",[254,35259,271],{"class":264},[254,35261,35262,35264,35267,35269,35271,35273,35275,35277],{"class":256,"line":1867},[254,35263,30986],{"class":313},[254,35265,35266],{"class":264},".f2",[254,35268,310],{"class":260},[254,35270,31172],{"class":264},[254,35272,35257],{"class":313},[254,35274,642],{"class":264},[254,35276,35257],{"class":313},[254,35278,271],{"class":264},[254,35280,35281,35283,35286,35288,35290,35292,35294,35296],{"class":256,"line":1872},[254,35282,30986],{"class":313},[254,35284,35285],{"class":264},".f3",[254,35287,310],{"class":260},[254,35289,31172],{"class":264},[254,35291,35257],{"class":313},[254,35293,642],{"class":264},[254,35295,710],{"class":313},[254,35297,271],{"class":264},[254,35299,35300],{"class":256,"line":1889},[254,35301,2540],{"emptyLinePlaceholder":184},[254,35303,35304],{"class":256,"line":1894},[254,35305,35306],{"class":323},"    # 定义前向传播\n",[254,35308,35309,35311,35313],{"class":256,"line":1899},[254,35310,30942],{"class":260},[254,35312,31234],{"class":2103},[254,35314,31237],{"class":264},[254,35316,35317,35319,35321,35323,35326,35328],{"class":256,"line":1904},[254,35318,31242],{"class":264},[254,35320,310],{"class":260},[254,35322,30964],{"class":313},[254,35324,35325],{"class":264},".ReLu(",[254,35327,30964],{"class":313},[254,35329,31254],{"class":264},[254,35331,35332,35334,35336,35338],{"class":256,"line":1918},[254,35333,31242],{"class":264},[254,35335,310],{"class":260},[254,35337,30964],{"class":313},[254,35339,31265],{"class":264},[254,35341,35342,35344,35346,35348,35350,35352],{"class":256,"line":1923},[254,35343,31242],{"class":264},[254,35345,310],{"class":260},[254,35347,30964],{"class":313},[254,35349,35325],{"class":264},[254,35351,30964],{"class":313},[254,35353,31280],{"class":264},[254,35355,35356,35358,35360,35362],{"class":256,"line":2717},[254,35357,31242],{"class":264},[254,35359,310],{"class":260},[254,35361,30964],{"class":313},[254,35363,31291],{"class":264},[254,35365,35366,35368,35370,35372,35374,35376],{"class":256,"line":2731},[254,35367,31242],{"class":264},[254,35369,310],{"class":260},[254,35371,30964],{"class":313},[254,35373,35325],{"class":264},[254,35375,30964],{"class":313},[254,35377,35378],{"class":264},".c5(x))\n",[254,35380,35381,35383,35385,35387,35389,35391],{"class":256,"line":2739},[254,35382,31242],{"class":264},[254,35384,310],{"class":260},[254,35386,30964],{"class":313},[254,35388,35325],{"class":264},[254,35390,30964],{"class":313},[254,35392,35393],{"class":264},".c6(x))\n",[254,35395,35396,35398,35400,35402,35404,35406],{"class":256,"line":2744},[254,35397,31242],{"class":264},[254,35399,310],{"class":260},[254,35401,30964],{"class":313},[254,35403,35325],{"class":264},[254,35405,30964],{"class":313},[254,35407,35408],{"class":264},".c7(x))\n",[254,35410,35411,35413,35415,35417],{"class":256,"line":2750},[254,35412,31242],{"class":264},[254,35414,310],{"class":260},[254,35416,30964],{"class":313},[254,35418,35419],{"class":264},".s8(x)\n",[254,35421,35422],{"class":256,"line":2756},[254,35423,2540],{"emptyLinePlaceholder":184},[254,35425,35426],{"class":256,"line":2761},[254,35427,35428],{"class":323},"        # 展平加线性全连接层\n",[254,35430,35431,35433,35435,35437],{"class":256,"line":8089},[254,35432,31242],{"class":264},[254,35434,310],{"class":260},[254,35436,30964],{"class":313},[254,35438,31302],{"class":264},[254,35440,35441,35443,35445,35447,35449,35451],{"class":256,"line":8113},[254,35442,31242],{"class":264},[254,35444,310],{"class":260},[254,35446,30964],{"class":313},[254,35448,35325],{"class":264},[254,35450,30964],{"class":313},[254,35452,35453],{"class":264},".f1(x))\n",[254,35455,35456],{"class":256,"line":8118},[254,35457,35458],{"class":323},"        # 还需要dropout对神经元随机进行失活\n",[254,35460,35461,35463,35465,35468,35471],{"class":256,"line":8124},[254,35462,31242],{"class":264},[254,35464,310],{"class":260},[254,35466,35467],{"class":264},"F.dropout(x,",[254,35469,35470],{"class":313},"0.5",[254,35472,271],{"class":264},[254,35474,35475,35477,35479,35481,35483,35485],{"class":256,"line":8151},[254,35476,31242],{"class":264},[254,35478,310],{"class":260},[254,35480,30964],{"class":313},[254,35482,35325],{"class":264},[254,35484,30964],{"class":313},[254,35486,35487],{"class":264},".f2(x))\n",[254,35489,35490,35492,35494,35496,35498],{"class":256,"line":8156},[254,35491,31242],{"class":264},[254,35493,310],{"class":260},[254,35495,35467],{"class":264},[254,35497,35470],{"class":313},[254,35499,271],{"class":264},[254,35501,35502],{"class":256,"line":8162},[254,35503,35504],{"class":323},"        # 直接输出\n",[254,35506,35507,35509,35511,35513],{"class":256,"line":8174},[254,35508,31242],{"class":264},[254,35510,310],{"class":260},[254,35512,30964],{"class":313},[254,35514,35515],{"class":264},".f3(x)\n",[254,35517,35518],{"class":256,"line":8186},[254,35519,35520],{"class":323},"        # 前向传播输出\n",[254,35522,35523,35525],{"class":256,"line":8198},[254,35524,14893],{"class":260},[254,35526,31350],{"class":264},[254,35528,35529],{"class":256,"line":9857},[254,35530,35531],{"class":323},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[254,35533,35534,35536,35538,35540,35542],{"class":256,"line":9882},[254,35535,1671],{"class":260},[254,35537,31361],{"class":313},[254,35539,3089],{"class":260},[254,35541,31366],{"class":369},[254,35543,3879],{"class":264},[254,35545,35546,35548,35550,35552,35554,35556,35558,35560,35562],{"class":256,"line":9905},[254,35547,31378],{"class":264},[254,35549,310],{"class":260},[254,35551,30592],{"class":264},[254,35553,31385],{"class":369},[254,35555,1844],{"class":260},[254,35557,31390],{"class":264},[254,35559,1841],{"class":260},[254,35561,30617],{"class":369},[254,35563,271],{"class":264},[254,35565,35566],{"class":256,"line":9929},[254,35567,35568],{"class":323},"    # 模型实例化，然后将实例化的模型放到设备中\n",[254,35570,35571,35573,35575],{"class":256,"line":9934},[254,35572,31430],{"class":264},[254,35574,310],{"class":260},[254,35576,35577],{"class":264},"AlexNet().to(device)\n",[254,35579,35580,35582,35584,35586,35588,35591,35593,35595],{"class":256,"line":9939},[254,35581,31440],{"class":313},[254,35583,31443],{"class":264},[254,35585,482],{"class":313},[254,35587,642],{"class":264},[254,35589,35590],{"class":313},"227",[254,35592,642],{"class":264},[254,35594,35590],{"class":313},[254,35596,31456],{"class":264},[21,35598,35599],{"start":175},[24,35600,31469],{},[245,35602,35604],{"className":30519,"code":35603,"language":30521,"meta":174,"style":174},"import copy\nimport time\nimport pandas as pd\nimport torch\nfrom torch.utils.data import Dataset\nfrom torchvision.datasets import FashionMNIST\nfrom torchvision import transforms\nimport torch.utils.data as Data\nimport matplotlib.pyplot as plt\n# 导入模型\nfrom model import AlexNet\nfrom torch import nn\n\n\n# 处理训练集与验证集函数--->划分数据集\ndef train_val_data_process():\n    train_data=FashionMNIST('.\u002Fdata',\n                            train=True,\n                            transform=transforms.Compose([transforms.Resize(size=227),transforms.ToTensor()]),\n                            download=True)\n    train_data,val_data=Data.random_split(train_data,[round(0.8*len(train_data)),round(0.2*len(train_data))])\n    train_dataloader = Data.DataLoader(dataset=train_data,\n                                       batch_size=128,\n                                       shuffle=True,\n                                       # 规定8个进程\n                                       num_workers=8)\n    val_dataloader=Data.DataLoader(dataset=val_data,\n                                   batch_size=128,\n                                   shuffle=True,\n                                   num_workers=8)\n    return train_dataloader,val_dataloader\n\n# 验证是否出错\n# train_val_data_process()\n\n# 定义模型训练函数\ndef train_model_process(model,train_dataloader,val_dataloader,num_epochs):\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else 'cpu')\n\n\n    # 定义优化器\n    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n    # lr为学习率\n    optimizer=torch.optim.Adam(model.parameters(),lr=0.001)\n\n    # 定义损失函数使用交叉熵损失函数\n    criterion=nn.CrossEntropyLoss()\n\n    # 将模型放到GPU中进行训练\n    model=model.to(device)\n    # 复制当前模型的参数\n    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n    best_model_wts=copy.deepcopy(model.state_dict())\n\n\n    # 初始化参数\n    # 最高准确度\n    best_acc=0.0\n    # 训练集损失列表\n    train_loss_all=[]\n    # 验证集函数列表\n    val_loss_all=[]\n    # 训练集准确度列表\n    train_acc_all=[]\n    # 验证集准确度列表\n    val_acc_all=[]\n\n    # 保存当前时间--->方便看每轮训练的时间\n    since=time.time()\n\n\n    # 准备工作完成--->开始训练模型\n    for epoch in range(num_epochs):\n        print(\"Epoch {}\u002F{}\".format(epoch,num_epochs-1))\n        print(\"-\"*10)\n\n        # 初始化参数\n        # 训练集损失函数\n        train_loss=0.0\n        # 训练集准确度\n        train_corrects=0\n        # 验证集损失函数\n        val_loss=0.0\n        # 验证集准确度\n        val_corrects=0\n        # 训练集样本数量\n        train_num=0\n        # 验证集样本数量\n        val_num=0\n        # 将数据放到设备,并开始训练\n        for step,(b_x,b_y) in enumerate(train_dataloader):\n            # 将特征放入到训练设备\n            b_x=b_x.to(device)\n            # 将标签放入到训练设备当中\n            b_y=b_y.to(device)\n            # 设置模型为训练模式\n            model.train()\n            # 将数据放到模型当中,开始前向传播\n            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n            output=model(b_x)\n            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算每一个batch的损失函数\n            loss=criterion(output,b_y)\n            # 将梯度初始化为0\n            optimizer.zero_grad()\n            # 梯度置为0后再进行反向传播\n            loss.backward()\n            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n            optimizer.step()\n            # loss.item()指的是batch的平均损失\n            train_loss+=loss.item()*b_x.size(0)\n            # 计算每个批次中正确预测的数量\n            train_corrects+=torch.sum(pre_lab==b_y.data)\n            # 计算目前为止一共处理了多少样本\n            train_num+=b_x.size(0)\n        # 验证数据\n        for step ,(b_x,b_y) in enumerate(val_dataloader):\n            # 将特征放到验证设备当中\n            b_x=b_x.to(device)\n            # 将标签放到放到训练设备当中\n            b_y=b_y.to(device)\n            # 开启验证模式，设置模型为评估模式\n            model.eval()\n            # 验证时不计算梯度以节省内存\u002F计算\n            with torch.no_grad():\n                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n                output=model(b_x)\n                # 查找每一行中最大值对应的下标\n                pre_lab=torch.argmax(output,dim=1)\n                # 计算验证集上的当前 batch 损失\n                val_batch_loss=criterion(output,b_y)\n                # 对损失函数进行累加（按样本数加权）\n                val_loss+=val_batch_loss.item()*b_x.size(0)\n                val_corrects+=torch.sum(pre_lab==b_y.data)\n            # 当前用于验证的样本数量\n            val_num+=b_x.size(0)\n        # 计算并保存每一次迭代的loss值和准确率\n        # 计算并保存训练集的loss值\n        train_loss_all.append(train_loss\u002Ftrain_num)\n        # 取双精度\n        # 计算并保存训练集的准确率\n        train_acc_all.append(train_corrects.double().item()\u002Ftrain_num)\n        # 计算并保存验证集的loss值\n        val_loss_all.append(val_loss\u002Fval_num)\n        # 计算并保存验证集的准确率\n        val_acc_all.append(val_corrects.double().item()\u002Fval_num)\n\n        # 打印训练一轮的loss值和准确率\n        print('{}train loss:{:.4f} train acc:{:.4f}'.format(epoch,train_loss_all[-1],train_acc_all[-1]))\n        print('{}val loss:{:.4f} val acc:{:.4f}'.format(epoch,val_loss_all[-1],val_acc_all[-1]))\n\n        # 判断准确度--->保存最优模型\n        if val_acc_all[-1]>best_acc:\n            # 保存当前模型准确度\n            best_acc:float=val_acc_all[-1]\n            # 保存当前的准确度\n            # model.state_dict()是当前模型的所有参数（权重和偏置）\n            best_model_wts=copy.deepcopy(model.state_dict())\n\n        # 计算耗时\n        time_use=time.time()-since\n        print('训练和验证耗费的时间{:.0f}m{:.0f}s'.format(time_use\u002F\u002F60,time_use%60))\n    # 选择最优参数并保存\n    # 保存最佳模型权重字典\n    torch.save(best_model_wts,'.\u002Fbest_model.pth')\n    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n    train_process=pd.DataFrame(data={\n        \"epoch\":range(num_epochs),\n        \"train_loss_all\":train_loss_all,\n        \"val_loss_all\":val_loss_all,\n        \"train_acc_all\":train_acc_all,\n        \"val_acc_all\":val_acc_all\n    })\n    # 返回训练保存的过程\n    return train_process\n\n# 将loss值和精度按照图片的形式展示出来\ndef matplot_acc_loss(train_process):\n    # 设置图的大小\n    plt.figure(figsize=(12,4))\n    # 设置图中有几张图\n    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n    # ①loss图\n    plt.subplot(1,2,1)\n    # 补充:\n    # plt.subplot(nrows, ncols, index)\n    # nrows：行数\n    # ncols：列数\n    # index：目前选中第几个子图（从1开始）\n    plt.plot(train_process[\"epoch\"],train_process.train_loss_all,'ro-',label='train loss')\n    plt.plot(train_process[\"epoch\"],train_process.val_loss_all,'bs--',label='val loss')\n    # 添加一个图例\n    plt.legend()\n    # 给轴添加标签\n    plt.xlabel('epoch')\n    plt.ylabel('loss')\n    # ②准确度图\n    plt.subplot(1,2,2)\n    plt.plot(train_process[\"epoch\"],train_process.train_acc_all,'ro-',label='train acc')\n    plt.plot(train_process[\"epoch\"],train_process.val_acc_all,'bs--',label='val acc')\n    # 添加图例\n    plt.legend()\n    plt.xlabel(\"epoch\")\n    plt.ylabel(\"acc\")\n    plt.show()\n\n# 正式开始训练:\nif __name__==\"__main__\":\n    # 将模型实例化\n    AlexNet=AlexNet()\n    train_dataloader,val_dataloader=train_val_data_process()\n    train_process=train_model_process(AlexNet,train_dataloader,val_dataloader,num_epochs=20)\n    matplot_acc_loss(train_process)\n",[251,35605,35606,35612,35618,35628,35634,35644,35654,35664,35674,35684,35688,35699,35709,35713,35717,35721,35729,35741,35751,35767,35777,35809,35823,35833,35843,35847,35857,35871,35881,35891,35901,35907,35911,35915,35919,35923,35927,35935,35955,35959,35963,35967,35971,35975,35991,35995,35999,36007,36011,36015,36023,36027,36031,36035,36043,36047,36051,36055,36059,36067,36071,36079,36083,36091,36095,36103,36107,36115,36119,36123,36131,36135,36139,36143,36155,36179,36193,36197,36201,36205,36213,36217,36225,36229,36237,36241,36249,36253,36261,36265,36273,36277,36289,36293,36301,36305,36313,36317,36321,36325,36329,36337,36341,36357,36361,36369,36373,36377,36381,36385,36389,36393,36397,36413,36417,36429,36433,36445,36449,36461,36465,36473,36477,36485,36489,36493,36498,36504,36508,36517,36521,36538,36542,36551,36555,36573,36586,36591,36604,36608,36612,36620,36624,36628,36636,36640,36648,36652,36660,36664,36668,36710,36752,36756,36760,36776,36780,36796,36800,36804,36812,36816,36820,36832,36870,36875,36880,36889,36893,36907,36917,36923,36929,36935,36941,36945,36949,36955,36959,36963,36971,36975,36993,36997,37001,37005,37021,37025,37029,37033,37037,37041,37061,37081,37085,37089,37093,37101,37109,37113,37129,37149,37169,37173,37177,37185,37193,37197,37201,37205,37217,37221,37231,37239,37256],{"__ignoreMap":174},[254,35607,35608,35610],{"class":256,"line":257},[254,35609,30533],{"class":260},[254,35611,31963],{"class":264},[254,35613,35614,35616],{"class":256,"line":175},[254,35615,30533],{"class":260},[254,35617,31970],{"class":264},[254,35619,35620,35622,35624,35626],{"class":256,"line":1319},[254,35621,30533],{"class":260},[254,35623,31981],{"class":264},[254,35625,31524],{"class":260},[254,35627,31986],{"class":264},[254,35629,35630,35632],{"class":256,"line":1334},[254,35631,30533],{"class":260},[254,35633,30536],{"class":264},[254,35635,35636,35638,35640,35642],{"class":256,"line":1340},[254,35637,30878],{"class":260},[254,35639,31556],{"class":264},[254,35641,30533],{"class":260},[254,35643,32003],{"class":264},[254,35645,35646,35648,35650,35652],{"class":256,"line":1354},[254,35647,30878],{"class":260},[254,35649,31509],{"class":264},[254,35651,30533],{"class":260},[254,35653,31514],{"class":264},[254,35655,35656,35658,35660,35662],{"class":256,"line":1360},[254,35657,30878],{"class":260},[254,35659,31539],{"class":264},[254,35661,30533],{"class":260},[254,35663,31544],{"class":264},[254,35665,35666,35668,35670,35672],{"class":256,"line":1451},[254,35667,30533],{"class":260},[254,35669,31556],{"class":264},[254,35671,31524],{"class":260},[254,35673,31561],{"class":264},[254,35675,35676,35678,35680,35682],{"class":256,"line":1457},[254,35677,30533],{"class":260},[254,35679,31573],{"class":264},[254,35681,31524],{"class":260},[254,35683,31578],{"class":264},[254,35685,35686],{"class":256,"line":1469},[254,35687,32048],{"class":323},[254,35689,35690,35692,35694,35696],{"class":256,"line":1752},[254,35691,30878],{"class":260},[254,35693,32055],{"class":264},[254,35695,30533],{"class":260},[254,35697,35698],{"class":264}," AlexNet\n",[254,35700,35701,35703,35705,35707],{"class":256,"line":1757},[254,35702,30878],{"class":260},[254,35704,30881],{"class":264},[254,35706,30533],{"class":260},[254,35708,30886],{"class":264},[254,35710,35711],{"class":256,"line":1763},[254,35712,2540],{"emptyLinePlaceholder":184},[254,35714,35715],{"class":256,"line":1768},[254,35716,2540],{"emptyLinePlaceholder":184},[254,35718,35719],{"class":256,"line":1782},[254,35720,32083],{"class":323},[254,35722,35723,35725,35727],{"class":256,"line":1787},[254,35724,32088],{"class":260},[254,35726,32091],{"class":2103},[254,35728,32094],{"class":264},[254,35730,35731,35733,35735,35737,35739],{"class":256,"line":1793},[254,35732,32099],{"class":264},[254,35734,310],{"class":260},[254,35736,31596],{"class":264},[254,35738,31604],{"class":369},[254,35740,31607],{"class":264},[254,35742,35743,35745,35747,35749],{"class":256,"line":1814},[254,35744,32112],{"class":5357},[254,35746,310],{"class":260},[254,35748,31617],{"class":313},[254,35750,31607],{"class":264},[254,35752,35753,35755,35757,35759,35761,35763,35765],{"class":256,"line":1819},[254,35754,32123],{"class":5357},[254,35756,310],{"class":260},[254,35758,31634],{"class":264},[254,35760,31637],{"class":5357},[254,35762,310],{"class":260},[254,35764,35590],{"class":313},[254,35766,31645],{"class":264},[254,35768,35769,35771,35773,35775],{"class":256,"line":1833},[254,35770,32140],{"class":5357},[254,35772,310],{"class":260},[254,35774,31617],{"class":313},[254,35776,271],{"class":264},[254,35778,35779,35781,35783,35785,35787,35789,35791,35793,35795,35797,35799,35801,35803,35805,35807],{"class":256,"line":1838},[254,35780,32151],{"class":264},[254,35782,310],{"class":260},[254,35784,32156],{"class":264},[254,35786,32159],{"class":313},[254,35788,265],{"class":264},[254,35790,32164],{"class":313},[254,35792,719],{"class":260},[254,35794,7499],{"class":313},[254,35796,32171],{"class":264},[254,35798,32159],{"class":313},[254,35800,265],{"class":264},[254,35802,32178],{"class":313},[254,35804,719],{"class":260},[254,35806,7499],{"class":313},[254,35808,32185],{"class":264},[254,35810,35811,35813,35815,35817,35819,35821],{"class":256,"line":1867},[254,35812,32190],{"class":264},[254,35814,310],{"class":260},[254,35816,32195],{"class":264},[254,35818,31678],{"class":5357},[254,35820,310],{"class":260},[254,35822,31683],{"class":264},[254,35824,35825,35827,35829,35831],{"class":256,"line":1872},[254,35826,32206],{"class":5357},[254,35828,310],{"class":260},[254,35830,32211],{"class":313},[254,35832,31607],{"class":264},[254,35834,35835,35837,35839,35841],{"class":256,"line":1889},[254,35836,32218],{"class":5357},[254,35838,310],{"class":260},[254,35840,31617],{"class":313},[254,35842,31607],{"class":264},[254,35844,35845],{"class":256,"line":1894},[254,35846,32229],{"class":323},[254,35848,35849,35851,35853,35855],{"class":256,"line":1899},[254,35850,32234],{"class":5357},[254,35852,310],{"class":260},[254,35854,659],{"class":313},[254,35856,271],{"class":264},[254,35858,35859,35861,35863,35865,35867,35869],{"class":256,"line":1904},[254,35860,32245],{"class":264},[254,35862,310],{"class":260},[254,35864,31675],{"class":264},[254,35866,31678],{"class":5357},[254,35868,310],{"class":260},[254,35870,32256],{"class":264},[254,35872,35873,35875,35877,35879],{"class":256,"line":1918},[254,35874,32261],{"class":5357},[254,35876,310],{"class":260},[254,35878,32211],{"class":313},[254,35880,31607],{"class":264},[254,35882,35883,35885,35887,35889],{"class":256,"line":1923},[254,35884,32272],{"class":5357},[254,35886,310],{"class":260},[254,35888,31617],{"class":313},[254,35890,31607],{"class":264},[254,35892,35893,35895,35897,35899],{"class":256,"line":2717},[254,35894,32283],{"class":5357},[254,35896,310],{"class":260},[254,35898,659],{"class":313},[254,35900,271],{"class":264},[254,35902,35903,35905],{"class":256,"line":2731},[254,35904,4230],{"class":260},[254,35906,32296],{"class":264},[254,35908,35909],{"class":256,"line":2739},[254,35910,2540],{"emptyLinePlaceholder":184},[254,35912,35913],{"class":256,"line":2744},[254,35914,32305],{"class":323},[254,35916,35917],{"class":256,"line":2750},[254,35918,32310],{"class":323},[254,35920,35921],{"class":256,"line":2756},[254,35922,2540],{"emptyLinePlaceholder":184},[254,35924,35925],{"class":256,"line":2761},[254,35926,32319],{"class":323},[254,35928,35929,35931,35933],{"class":256,"line":8089},[254,35930,32088],{"class":260},[254,35932,32326],{"class":2103},[254,35934,32329],{"class":264},[254,35936,35937,35939,35941,35943,35945,35947,35949,35951,35953],{"class":256,"line":8113},[254,35938,31378],{"class":264},[254,35940,310],{"class":260},[254,35942,30592],{"class":264},[254,35944,31385],{"class":369},[254,35946,1844],{"class":260},[254,35948,31390],{"class":264},[254,35950,1841],{"class":260},[254,35952,32348],{"class":369},[254,35954,271],{"class":264},[254,35956,35957],{"class":256,"line":8118},[254,35958,2540],{"emptyLinePlaceholder":184},[254,35960,35961],{"class":256,"line":8124},[254,35962,2540],{"emptyLinePlaceholder":184},[254,35964,35965],{"class":256,"line":8151},[254,35966,32363],{"class":323},[254,35968,35969],{"class":256,"line":8156},[254,35970,32368],{"class":323},[254,35972,35973],{"class":256,"line":8162},[254,35974,32373],{"class":323},[254,35976,35977,35979,35981,35983,35985,35987,35989],{"class":256,"line":8174},[254,35978,32378],{"class":264},[254,35980,310],{"class":260},[254,35982,32383],{"class":264},[254,35984,32386],{"class":5357},[254,35986,310],{"class":260},[254,35988,32391],{"class":313},[254,35990,271],{"class":264},[254,35992,35993],{"class":256,"line":8186},[254,35994,2540],{"emptyLinePlaceholder":184},[254,35996,35997],{"class":256,"line":8198},[254,35998,32402],{"class":323},[254,36000,36001,36003,36005],{"class":256,"line":9857},[254,36002,32407],{"class":264},[254,36004,310],{"class":260},[254,36006,32412],{"class":264},[254,36008,36009],{"class":256,"line":9882},[254,36010,2540],{"emptyLinePlaceholder":184},[254,36012,36013],{"class":256,"line":9905},[254,36014,32421],{"class":323},[254,36016,36017,36019,36021],{"class":256,"line":9929},[254,36018,31430],{"class":264},[254,36020,310],{"class":260},[254,36022,32430],{"class":264},[254,36024,36025],{"class":256,"line":9934},[254,36026,32435],{"class":323},[254,36028,36029],{"class":256,"line":9939},[254,36030,32440],{"class":323},[254,36032,36033],{"class":256,"line":9944},[254,36034,32445],{"class":323},[254,36036,36037,36039,36041],{"class":256,"line":9953},[254,36038,32450],{"class":264},[254,36040,310],{"class":260},[254,36042,32455],{"class":264},[254,36044,36045],{"class":256,"line":9958},[254,36046,2540],{"emptyLinePlaceholder":184},[254,36048,36049],{"class":256,"line":9964},[254,36050,2540],{"emptyLinePlaceholder":184},[254,36052,36053],{"class":256,"line":9985},[254,36054,32468],{"class":323},[254,36056,36057],{"class":256,"line":9991},[254,36058,32473],{"class":323},[254,36060,36061,36063,36065],{"class":256,"line":10005},[254,36062,32478],{"class":264},[254,36064,310],{"class":260},[254,36066,32483],{"class":313},[254,36068,36069],{"class":256,"line":10011},[254,36070,32488],{"class":323},[254,36072,36073,36075,36077],{"class":256,"line":10038},[254,36074,32493],{"class":264},[254,36076,310],{"class":260},[254,36078,32498],{"class":264},[254,36080,36081],{"class":256,"line":10047},[254,36082,32503],{"class":323},[254,36084,36085,36087,36089],{"class":256,"line":10053},[254,36086,32508],{"class":264},[254,36088,310],{"class":260},[254,36090,32498],{"class":264},[254,36092,36093],{"class":256,"line":10061},[254,36094,32517],{"class":323},[254,36096,36097,36099,36101],{"class":256,"line":10066},[254,36098,32522],{"class":264},[254,36100,310],{"class":260},[254,36102,32498],{"class":264},[254,36104,36105],{"class":256,"line":16745},[254,36106,32531],{"class":323},[254,36108,36109,36111,36113],{"class":256,"line":16751},[254,36110,32536],{"class":264},[254,36112,310],{"class":260},[254,36114,32498],{"class":264},[254,36116,36117],{"class":256,"line":16774},[254,36118,2540],{"emptyLinePlaceholder":184},[254,36120,36121],{"class":256,"line":16780},[254,36122,32549],{"class":323},[254,36124,36125,36127,36129],{"class":256,"line":16803},[254,36126,32554],{"class":264},[254,36128,310],{"class":260},[254,36130,32559],{"class":264},[254,36132,36133],{"class":256,"line":16817},[254,36134,2540],{"emptyLinePlaceholder":184},[254,36136,36137],{"class":256,"line":16837},[254,36138,2540],{"emptyLinePlaceholder":184},[254,36140,36141],{"class":256,"line":16843},[254,36142,32572],{"class":323},[254,36144,36145,36147,36149,36151,36153],{"class":256,"line":16854},[254,36146,3341],{"class":260},[254,36148,32579],{"class":264},[254,36150,26184],{"class":260},[254,36152,32584],{"class":313},[254,36154,32587],{"class":264},[254,36156,36157,36159,36161,36163,36165,36167,36169,36171,36173,36175,36177],{"class":256,"line":16877},[254,36158,32592],{"class":313},[254,36160,265],{"class":264},[254,36162,32597],{"class":369},[254,36164,32600],{"class":313},[254,36166,848],{"class":369},[254,36168,32600],{"class":313},[254,36170,515],{"class":369},[254,36172,32609],{"class":264},[254,36174,796],{"class":260},[254,36176,482],{"class":313},[254,36178,30638],{"class":264},[254,36180,36181,36183,36185,36187,36189,36191],{"class":256,"line":16899},[254,36182,32592],{"class":313},[254,36184,265],{"class":264},[254,36186,32624],{"class":369},[254,36188,719],{"class":260},[254,36190,710],{"class":313},[254,36192,271],{"class":264},[254,36194,36195],{"class":256,"line":16904},[254,36196,2540],{"emptyLinePlaceholder":184},[254,36198,36199],{"class":256,"line":16910},[254,36200,32639],{"class":323},[254,36202,36203],{"class":256,"line":16924},[254,36204,32644],{"class":323},[254,36206,36207,36209,36211],{"class":256,"line":16937},[254,36208,32649],{"class":264},[254,36210,310],{"class":260},[254,36212,32483],{"class":313},[254,36214,36215],{"class":256,"line":16942},[254,36216,32658],{"class":323},[254,36218,36219,36221,36223],{"class":256,"line":16956},[254,36220,32663],{"class":264},[254,36222,310],{"class":260},[254,36224,3225],{"class":313},[254,36226,36227],{"class":256,"line":16961},[254,36228,32672],{"class":323},[254,36230,36231,36233,36235],{"class":256,"line":16967},[254,36232,32677],{"class":264},[254,36234,310],{"class":260},[254,36236,32483],{"class":313},[254,36238,36239],{"class":256,"line":16972},[254,36240,32686],{"class":323},[254,36242,36243,36245,36247],{"class":256,"line":16986},[254,36244,32691],{"class":264},[254,36246,310],{"class":260},[254,36248,3225],{"class":313},[254,36250,36251],{"class":256,"line":16991},[254,36252,32700],{"class":323},[254,36254,36255,36257,36259],{"class":256,"line":16996},[254,36256,32705],{"class":264},[254,36258,310],{"class":260},[254,36260,3225],{"class":313},[254,36262,36263],{"class":256,"line":17010},[254,36264,32714],{"class":323},[254,36266,36267,36269,36271],{"class":256,"line":17022},[254,36268,32719],{"class":264},[254,36270,310],{"class":260},[254,36272,3225],{"class":313},[254,36274,36275],{"class":256,"line":17027},[254,36276,32728],{"class":323},[254,36278,36279,36281,36283,36285,36287],{"class":256,"line":17040},[254,36280,3543],{"class":260},[254,36282,31742],{"class":264},[254,36284,26184],{"class":260},[254,36286,31747],{"class":313},[254,36288,32741],{"class":264},[254,36290,36291],{"class":256,"line":17045},[254,36292,32746],{"class":323},[254,36294,36295,36297,36299],{"class":256,"line":17050},[254,36296,32751],{"class":264},[254,36298,310],{"class":260},[254,36300,32756],{"class":264},[254,36302,36303],{"class":256,"line":17055},[254,36304,32761],{"class":323},[254,36306,36307,36309,36311],{"class":256,"line":17068},[254,36308,32766],{"class":264},[254,36310,310],{"class":260},[254,36312,32771],{"class":264},[254,36314,36315],{"class":256,"line":17073},[254,36316,32777],{"class":323},[254,36318,36319],{"class":256,"line":32774},[254,36320,32783],{"class":264},[254,36322,36323],{"class":256,"line":32780},[254,36324,32789],{"class":323},[254,36326,36327],{"class":256,"line":32786},[254,36328,32795],{"class":323},[254,36330,36331,36333,36335],{"class":256,"line":32792},[254,36332,32801],{"class":264},[254,36334,310],{"class":260},[254,36336,32806],{"class":264},[254,36338,36339],{"class":256,"line":32798},[254,36340,32812],{"class":323},[254,36342,36343,36345,36347,36349,36351,36353,36355],{"class":256,"line":32809},[254,36344,32818],{"class":264},[254,36346,310],{"class":260},[254,36348,32823],{"class":264},[254,36350,32826],{"class":5357},[254,36352,310],{"class":260},[254,36354,482],{"class":313},[254,36356,271],{"class":264},[254,36358,36359],{"class":256,"line":32815},[254,36360,32838],{"class":323},[254,36362,36363,36365,36367],{"class":256,"line":32835},[254,36364,32844],{"class":264},[254,36366,310],{"class":260},[254,36368,32849],{"class":264},[254,36370,36371],{"class":256,"line":32841},[254,36372,32855],{"class":323},[254,36374,36375],{"class":256,"line":32852},[254,36376,32861],{"class":264},[254,36378,36379],{"class":256,"line":32858},[254,36380,32867],{"class":323},[254,36382,36383],{"class":256,"line":32864},[254,36384,32873],{"class":264},[254,36386,36387],{"class":256,"line":32870},[254,36388,32879],{"class":323},[254,36390,36391],{"class":256,"line":32876},[254,36392,32885],{"class":264},[254,36394,36395],{"class":256,"line":32882},[254,36396,32891],{"class":323},[254,36398,36399,36401,36403,36405,36407,36409,36411],{"class":256,"line":32888},[254,36400,32897],{"class":264},[254,36402,9618],{"class":260},[254,36404,32902],{"class":264},[254,36406,719],{"class":260},[254,36408,32907],{"class":264},[254,36410,456],{"class":313},[254,36412,271],{"class":264},[254,36414,36415],{"class":256,"line":32894},[254,36416,32917],{"class":323},[254,36418,36419,36421,36423,36425,36427],{"class":256,"line":32914},[254,36420,32923],{"class":264},[254,36422,9618],{"class":260},[254,36424,32928],{"class":264},[254,36426,3089],{"class":260},[254,36428,32933],{"class":264},[254,36430,36431],{"class":256,"line":32920},[254,36432,32939],{"class":323},[254,36434,36435,36437,36439,36441,36443],{"class":256,"line":32936},[254,36436,32945],{"class":264},[254,36438,9618],{"class":260},[254,36440,32907],{"class":264},[254,36442,456],{"class":313},[254,36444,271],{"class":264},[254,36446,36447],{"class":256,"line":32942},[254,36448,32959],{"class":323},[254,36450,36451,36453,36455,36457,36459],{"class":256,"line":32956},[254,36452,3543],{"class":260},[254,36454,32967],{"class":264},[254,36456,26184],{"class":260},[254,36458,31747],{"class":313},[254,36460,32974],{"class":264},[254,36462,36463],{"class":256,"line":32962},[254,36464,32980],{"class":323},[254,36466,36467,36469,36471],{"class":256,"line":32977},[254,36468,32751],{"class":264},[254,36470,310],{"class":260},[254,36472,32756],{"class":264},[254,36474,36475],{"class":256,"line":32983},[254,36476,32995],{"class":323},[254,36478,36479,36481,36483],{"class":256,"line":32992},[254,36480,32766],{"class":264},[254,36482,310],{"class":260},[254,36484,32771],{"class":264},[254,36486,36487],{"class":256,"line":32998},[254,36488,33010],{"class":323},[254,36490,36491],{"class":256,"line":33007},[254,36492,33016],{"class":264},[254,36494,36495],{"class":256,"line":33013},[254,36496,36497],{"class":323},"            # 验证时不计算梯度以节省内存\u002F计算\n",[254,36499,36500,36502],{"class":256,"line":33019},[254,36501,33022],{"class":260},[254,36503,33025],{"class":264},[254,36505,36506],{"class":256,"line":33028},[254,36507,33031],{"class":323},[254,36509,36510,36513,36515],{"class":256,"line":33034},[254,36511,36512],{"class":264},"                output",[254,36514,310],{"class":260},[254,36516,32806],{"class":264},[254,36518,36519],{"class":256,"line":33045},[254,36520,33048],{"class":323},[254,36522,36523,36526,36528,36530,36532,36534,36536],{"class":256,"line":33051},[254,36524,36525],{"class":264},"                pre_lab",[254,36527,310],{"class":260},[254,36529,32823],{"class":264},[254,36531,32826],{"class":5357},[254,36533,310],{"class":260},[254,36535,482],{"class":313},[254,36537,271],{"class":264},[254,36539,36540],{"class":256,"line":33070},[254,36541,33073],{"class":323},[254,36543,36544,36547,36549],{"class":256,"line":33076},[254,36545,36546],{"class":264},"                val_batch_loss",[254,36548,310],{"class":260},[254,36550,32849],{"class":264},[254,36552,36553],{"class":256,"line":33087},[254,36554,33090],{"class":323},[254,36556,36557,36560,36562,36565,36567,36569,36571],{"class":256,"line":33093},[254,36558,36559],{"class":264},"                val_loss",[254,36561,9618],{"class":260},[254,36563,36564],{"class":264},"val_batch_loss.item()",[254,36566,719],{"class":260},[254,36568,32907],{"class":264},[254,36570,456],{"class":313},[254,36572,271],{"class":264},[254,36574,36575,36578,36580,36582,36584],{"class":256,"line":33113},[254,36576,36577],{"class":264},"                val_corrects",[254,36579,9618],{"class":260},[254,36581,32928],{"class":264},[254,36583,3089],{"class":260},[254,36585,32933],{"class":264},[254,36587,36588],{"class":256,"line":33129},[254,36589,36590],{"class":323},"            # 当前用于验证的样本数量\n",[254,36592,36593,36596,36598,36600,36602],{"class":256,"line":33135},[254,36594,36595],{"class":264},"            val_num",[254,36597,9618],{"class":260},[254,36599,32907],{"class":264},[254,36601,456],{"class":313},[254,36603,271],{"class":264},[254,36605,36606],{"class":256,"line":33149},[254,36607,33152],{"class":323},[254,36609,36610],{"class":256,"line":33155},[254,36611,33158],{"class":323},[254,36613,36614,36616,36618],{"class":256,"line":33161},[254,36615,33164],{"class":264},[254,36617,848],{"class":260},[254,36619,33169],{"class":264},[254,36621,36622],{"class":256,"line":33172},[254,36623,33175],{"class":323},[254,36625,36626],{"class":256,"line":33178},[254,36627,33181],{"class":323},[254,36629,36630,36632,36634],{"class":256,"line":33184},[254,36631,33187],{"class":264},[254,36633,848],{"class":260},[254,36635,33169],{"class":264},[254,36637,36638],{"class":256,"line":33194},[254,36639,33197],{"class":323},[254,36641,36642,36644,36646],{"class":256,"line":33200},[254,36643,33203],{"class":264},[254,36645,848],{"class":260},[254,36647,33208],{"class":264},[254,36649,36650],{"class":256,"line":33211},[254,36651,33214],{"class":323},[254,36653,36654,36656,36658],{"class":256,"line":33217},[254,36655,33220],{"class":264},[254,36657,848],{"class":260},[254,36659,33208],{"class":264},[254,36661,36662],{"class":256,"line":33227},[254,36663,2540],{"emptyLinePlaceholder":184},[254,36665,36666],{"class":256,"line":33232},[254,36667,33235],{"class":323},[254,36669,36670,36672,36674,36676,36678,36680,36682,36684,36686,36688,36690,36692,36694,36696,36698,36700,36702,36704,36706,36708],{"class":256,"line":33238},[254,36671,32592],{"class":313},[254,36673,265],{"class":264},[254,36675,3732],{"class":369},[254,36677,32600],{"class":313},[254,36679,33249],{"class":369},[254,36681,1160],{"class":313},[254,36683,33254],{"class":260},[254,36685,1210],{"class":313},[254,36687,33259],{"class":369},[254,36689,1160],{"class":313},[254,36691,33254],{"class":260},[254,36693,1210],{"class":313},[254,36695,3732],{"class":369},[254,36697,33270],{"class":264},[254,36699,796],{"class":260},[254,36701,482],{"class":313},[254,36703,33277],{"class":264},[254,36705,796],{"class":260},[254,36707,482],{"class":313},[254,36709,33284],{"class":264},[254,36711,36712,36714,36716,36718,36720,36722,36724,36726,36728,36730,36732,36734,36736,36738,36740,36742,36744,36746,36748,36750],{"class":256,"line":33287},[254,36713,32592],{"class":313},[254,36715,265],{"class":264},[254,36717,3732],{"class":369},[254,36719,32600],{"class":313},[254,36721,33298],{"class":369},[254,36723,1160],{"class":313},[254,36725,33254],{"class":260},[254,36727,1210],{"class":313},[254,36729,33307],{"class":369},[254,36731,1160],{"class":313},[254,36733,33254],{"class":260},[254,36735,1210],{"class":313},[254,36737,3732],{"class":369},[254,36739,33318],{"class":264},[254,36741,796],{"class":260},[254,36743,482],{"class":313},[254,36745,33325],{"class":264},[254,36747,796],{"class":260},[254,36749,482],{"class":313},[254,36751,33284],{"class":264},[254,36753,36754],{"class":256,"line":33334},[254,36755,2540],{"emptyLinePlaceholder":184},[254,36757,36758],{"class":256,"line":33339},[254,36759,33342],{"class":323},[254,36761,36762,36764,36766,36768,36770,36772,36774],{"class":256,"line":33345},[254,36763,2637],{"class":260},[254,36765,33350],{"class":264},[254,36767,796],{"class":260},[254,36769,482],{"class":313},[254,36771,1204],{"class":264},[254,36773,1224],{"class":260},[254,36775,33361],{"class":264},[254,36777,36778],{"class":256,"line":33364},[254,36779,33367],{"class":323},[254,36781,36782,36784,36786,36788,36790,36792,36794],{"class":256,"line":33370},[254,36783,33373],{"class":264},[254,36785,304],{"class":313},[254,36787,310],{"class":260},[254,36789,33380],{"class":264},[254,36791,796],{"class":260},[254,36793,482],{"class":313},[254,36795,33387],{"class":264},[254,36797,36798],{"class":256,"line":33390},[254,36799,33393],{"class":323},[254,36801,36802],{"class":256,"line":33396},[254,36803,33399],{"class":323},[254,36805,36806,36808,36810],{"class":256,"line":33402},[254,36807,33405],{"class":264},[254,36809,310],{"class":260},[254,36811,32455],{"class":264},[254,36813,36814],{"class":256,"line":33412},[254,36815,2540],{"emptyLinePlaceholder":184},[254,36817,36818],{"class":256,"line":33417},[254,36819,33420],{"class":323},[254,36821,36822,36824,36826,36828,36830],{"class":256,"line":33423},[254,36823,33426],{"class":264},[254,36825,310],{"class":260},[254,36827,33431],{"class":264},[254,36829,796],{"class":260},[254,36831,33436],{"class":264},[254,36833,36834,36836,36838,36840,36842,36844,36846,36848,36850,36852,36854,36856,36858,36860,36862,36864,36866,36868],{"class":256,"line":33439},[254,36835,32592],{"class":313},[254,36837,265],{"class":264},[254,36839,33446],{"class":369},[254,36841,1160],{"class":313},[254,36843,33451],{"class":260},[254,36845,1210],{"class":313},[254,36847,808],{"class":369},[254,36849,1160],{"class":313},[254,36851,33451],{"class":260},[254,36853,1210],{"class":313},[254,36855,33464],{"class":369},[254,36857,33467],{"class":264},[254,36859,33470],{"class":260},[254,36861,1171],{"class":313},[254,36863,33475],{"class":264},[254,36865,592],{"class":260},[254,36867,1171],{"class":313},[254,36869,30638],{"class":264},[254,36871,36872],{"class":256,"line":33484},[254,36873,36874],{"class":323},"    # 选择最优参数并保存\n",[254,36876,36877],{"class":256,"line":33490},[254,36878,36879],{"class":323},"    # 保存最佳模型权重字典\n",[254,36881,36882,36885,36887],{"class":256,"line":33496},[254,36883,36884],{"class":264},"    torch.save(best_model_wts,",[254,36886,33508],{"class":369},[254,36888,271],{"class":264},[254,36890,36891],{"class":256,"line":33502},[254,36892,33528],{"class":323},[254,36894,36895,36897,36899,36901,36903,36905],{"class":256,"line":33513},[254,36896,33534],{"class":264},[254,36898,310],{"class":260},[254,36900,33539],{"class":264},[254,36902,33542],{"class":5357},[254,36904,310],{"class":260},[254,36906,1686],{"class":264},[254,36908,36909,36911,36913,36915],{"class":256,"line":33519},[254,36910,33552],{"class":369},[254,36912,1123],{"class":264},[254,36914,33557],{"class":313},[254,36916,33560],{"class":264},[254,36918,36919,36921],{"class":256,"line":33525},[254,36920,33566],{"class":369},[254,36922,33569],{"class":264},[254,36924,36925,36927],{"class":256,"line":33531},[254,36926,33575],{"class":369},[254,36928,33578],{"class":264},[254,36930,36931,36933],{"class":256,"line":33549},[254,36932,33584],{"class":369},[254,36934,33587],{"class":264},[254,36936,36937,36939],{"class":256,"line":33563},[254,36938,33593],{"class":369},[254,36940,33596],{"class":264},[254,36942,36943],{"class":256,"line":33572},[254,36944,33602],{"class":264},[254,36946,36947],{"class":256,"line":33581},[254,36948,33608],{"class":323},[254,36950,36951,36953],{"class":256,"line":33590},[254,36952,4230],{"class":260},[254,36954,33616],{"class":264},[254,36956,36957],{"class":256,"line":33599},[254,36958,2540],{"emptyLinePlaceholder":184},[254,36960,36961],{"class":256,"line":33605},[254,36962,33627],{"class":323},[254,36964,36965,36967,36969],{"class":256,"line":33611},[254,36966,32088],{"class":260},[254,36968,33635],{"class":2103},[254,36970,33638],{"class":264},[254,36972,36973],{"class":256,"line":33619},[254,36974,33644],{"class":323},[254,36976,36977,36979,36981,36983,36985,36987,36989,36991],{"class":256,"line":33624},[254,36978,33650],{"class":264},[254,36980,31834],{"class":5357},[254,36982,310],{"class":260},[254,36984,265],{"class":264},[254,36986,762],{"class":313},[254,36988,642],{"class":264},[254,36990,557],{"class":313},[254,36992,30638],{"class":264},[254,36994,36995],{"class":256,"line":33630},[254,36996,33670],{"class":323},[254,36998,36999],{"class":256,"line":33641},[254,37000,33676],{"class":323},[254,37002,37003],{"class":256,"line":33647},[254,37004,33682],{"class":323},[254,37006,37007,37009,37011,37013,37015,37017,37019],{"class":256,"line":33667},[254,37008,31868],{"class":264},[254,37010,482],{"class":313},[254,37012,642],{"class":264},[254,37014,342],{"class":313},[254,37016,642],{"class":264},[254,37018,482],{"class":313},[254,37020,271],{"class":264},[254,37022,37023],{"class":256,"line":33673},[254,37024,33705],{"class":323},[254,37026,37027],{"class":256,"line":33679},[254,37028,33711],{"class":323},[254,37030,37031],{"class":256,"line":33685},[254,37032,33717],{"class":323},[254,37034,37035],{"class":256,"line":33702},[254,37036,33723],{"class":323},[254,37038,37039],{"class":256,"line":33708},[254,37040,33729],{"class":323},[254,37042,37043,37045,37047,37049,37051,37053,37055,37057,37059],{"class":256,"line":33714},[254,37044,33735],{"class":264},[254,37046,33738],{"class":369},[254,37048,33741],{"class":264},[254,37050,33744],{"class":369},[254,37052,642],{"class":264},[254,37054,33749],{"class":5357},[254,37056,310],{"class":260},[254,37058,33754],{"class":369},[254,37060,271],{"class":264},[254,37062,37063,37065,37067,37069,37071,37073,37075,37077,37079],{"class":256,"line":33720},[254,37064,33735],{"class":264},[254,37066,33738],{"class":369},[254,37068,33766],{"class":264},[254,37070,33769],{"class":369},[254,37072,642],{"class":264},[254,37074,33749],{"class":5357},[254,37076,310],{"class":260},[254,37078,33778],{"class":369},[254,37080,271],{"class":264},[254,37082,37083],{"class":256,"line":33726},[254,37084,33786],{"class":323},[254,37086,37087],{"class":256,"line":33732},[254,37088,33792],{"class":264},[254,37090,37091],{"class":256,"line":33759},[254,37092,33798],{"class":323},[254,37094,37095,37097,37099],{"class":256,"line":33783},[254,37096,33804],{"class":264},[254,37098,33807],{"class":369},[254,37100,271],{"class":264},[254,37102,37103,37105,37107],{"class":256,"line":33789},[254,37104,33815],{"class":264},[254,37106,33818],{"class":369},[254,37108,271],{"class":264},[254,37110,37111],{"class":256,"line":33795},[254,37112,33826],{"class":323},[254,37114,37115,37117,37119,37121,37123,37125,37127],{"class":256,"line":33801},[254,37116,31868],{"class":264},[254,37118,482],{"class":313},[254,37120,642],{"class":264},[254,37122,342],{"class":313},[254,37124,642],{"class":264},[254,37126,342],{"class":313},[254,37128,271],{"class":264},[254,37130,37131,37133,37135,37137,37139,37141,37143,37145,37147],{"class":256,"line":33812},[254,37132,33735],{"class":264},[254,37134,33738],{"class":369},[254,37136,33853],{"class":264},[254,37138,33744],{"class":369},[254,37140,642],{"class":264},[254,37142,33749],{"class":5357},[254,37144,310],{"class":260},[254,37146,33864],{"class":369},[254,37148,271],{"class":264},[254,37150,37151,37153,37155,37157,37159,37161,37163,37165,37167],{"class":256,"line":33823},[254,37152,33735],{"class":264},[254,37154,33738],{"class":369},[254,37156,33876],{"class":264},[254,37158,33769],{"class":369},[254,37160,642],{"class":264},[254,37162,33749],{"class":5357},[254,37164,310],{"class":260},[254,37166,33887],{"class":369},[254,37168,271],{"class":264},[254,37170,37171],{"class":256,"line":33829},[254,37172,33895],{"class":323},[254,37174,37175],{"class":256,"line":33846},[254,37176,33792],{"class":264},[254,37178,37179,37181,37183],{"class":256,"line":33869},[254,37180,33804],{"class":264},[254,37182,33738],{"class":369},[254,37184,271],{"class":264},[254,37186,37187,37189,37191],{"class":256,"line":33892},[254,37188,33815],{"class":264},[254,37190,33917],{"class":369},[254,37192,271],{"class":264},[254,37194,37195],{"class":256,"line":33898},[254,37196,33925],{"class":264},[254,37198,37199],{"class":256,"line":33903},[254,37200,2540],{"emptyLinePlaceholder":184},[254,37202,37203],{"class":256,"line":33912},[254,37204,33936],{"class":323},[254,37206,37207,37209,37211,37213,37215],{"class":256,"line":33922},[254,37208,1671],{"class":260},[254,37210,31361],{"class":313},[254,37212,3089],{"class":260},[254,37214,31366],{"class":369},[254,37216,3879],{"class":264},[254,37218,37219],{"class":256,"line":33928},[254,37220,33955],{"class":323},[254,37222,37223,37226,37228],{"class":256,"line":33933},[254,37224,37225],{"class":264},"    AlexNet",[254,37227,310],{"class":260},[254,37229,37230],{"class":264},"AlexNet()\n",[254,37232,37233,37235,37237],{"class":256,"line":33939},[254,37234,33972],{"class":264},[254,37236,310],{"class":260},[254,37238,33977],{"class":264},[254,37240,37241,37243,37245,37248,37250,37252,37254],{"class":256,"line":33952},[254,37242,33534],{"class":264},[254,37244,310],{"class":260},[254,37246,37247],{"class":264},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[254,37249,33990],{"class":5357},[254,37251,310],{"class":260},[254,37253,964],{"class":313},[254,37255,271],{"class":264},[254,37257,37258],{"class":256,"line":33958},[254,37259,34002],{"class":264},[21,37261,37262],{"start":1319},[24,37263,34015],{},[245,37265,37267],{"className":30519,"code":37266,"language":30521,"meta":174,"style":174},"import torch\nimport torch.utils.data as Data\nfrom jupyter_client.consoleapp import classes\nfrom torchvision import transforms\n# 导入数据集\nfrom torchvision.datasets import FashionMNIST\nfrom model import AlexNet\nfrom 练习.AlexNet.model import AlexNet\n\n\n# 测试数据处理\ndef test_data_process():\n    test_data=FashionMNIST(root='.\u002Fdata',\n                           train=False,\n                           transform=transforms.Compose([transforms.Resize(size=227),transforms.ToTensor()]),\n                           download=True)\n    test_dataloader=Data.DataLoader(dataset=test_data,\n                                    # 这里是一张一张进行测试\n                                    batch_size=1,\n                                    shuffle=True,\n                                    num_workers=0)\n    return test_dataloader\n\n# 定义模型测试函数\ndef test_model_process(model,test_dataloader):\n    # 将模型放到设备当中，先进行判断\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n\n    # 设置初始化参数\n    test_corrects=0.0\n    test_num=0\n\n    # 进行模型测试\n    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n    # 不进行梯度计算，可以节省内存，加快运行速度\n    with torch.no_grad():\n        # 从数据中进行\n        for test_data_x,test_data_y in test_dataloader:\n            test_data_x=test_data_x.to(device)\n            test_data_y=test_data_y.to(device)\n            # 设置为验证模式\n            model.eval()\n            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n            output=model(test_data_x)\n            # 查找每一行中最大值对应的下标\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算正确率\n            # .data表示是一个不带梯度信息的tensor\n            # 如果预测正确，则准确度test_corrects加1\n            test_corrects+=torch.sum(pre_lab==test_data_y.data)\n            # 将所有的测试样本进行累计\n            test_num+=test_data_x.size(0)\n\n        # 计算准确度\n        test_acc=test_corrects.double().item()\u002Ftest_num\n        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n        print(\"测试的准确率：\",test_acc)\n\n# 实现模型的测试功能\nif __name__==\"__main__\":\n    # 加载模型\n    model=AlexNet()\n    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n    model.load_state_dict(torch.load('best_model.pth'))\n    # 数据加载\n    test_dataloader=test_data_process()\n    # 加载模型测试的函数\n    test_model_process(model,test_dataloader)\n\n    # 验证集推理实现：\n    # 加载数据加载的更详细一些\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n    # 顺序不可改变\n    classes=['T-shirt\u002Ftop','Trouser','Pullover','Dress','Coat','Sandal','Shirt','Sneaker','Bag','Ankle boot']\n    with torch.no_grad():\n        # 将数据和标签都放到设备当中\n        for b_x,b_y in test_dataloader:\n            b_x=b_x.to(device)\n            b_y=b_y.to(device)\n\n            # 设置模型为验证模式\n            model.eval()\n            # 模型推理结果\n            output=model(b_x)\n            # 获取最大下标，最大下标就是类别号\n            pre_lab=torch.argmax(output,dim=1)\n            # 取出张量中的数值\n            result=pre_lab.item()\n            label=b_y.item()\n            print(\"预测值：\",classes[result],\"------\",\"真实值：\",classes[label])\n",[251,37268,37269,37275,37285,37295,37305,37309,37319,37329,37340,37344,37348,37352,37360,37376,37386,37402,37412,37426,37430,37440,37450,37460,37466,37470,37474,37482,37486,37502,37510,37514,37518,37526,37534,37538,37542,37546,37550,37556,37560,37570,37578,37586,37590,37594,37598,37606,37610,37626,37630,37634,37638,37650,37654,37666,37670,37674,37686,37690,37700,37704,37708,37720,37724,37732,37736,37740,37748,37752,37760,37764,37768,37772,37776,37780,37796,37804,37808,37812,37860,37866,37870,37880,37888,37896,37900,37904,37908,37912,37920,37924,37940,37944,37952,37960],{"__ignoreMap":174},[254,37270,37271,37273],{"class":256,"line":257},[254,37272,30533],{"class":260},[254,37274,30536],{"class":264},[254,37276,37277,37279,37281,37283],{"class":256,"line":175},[254,37278,30533],{"class":260},[254,37280,31556],{"class":264},[254,37282,31524],{"class":260},[254,37284,31561],{"class":264},[254,37286,37287,37289,37291,37293],{"class":256,"line":1319},[254,37288,30878],{"class":260},[254,37290,34043],{"class":264},[254,37292,30533],{"class":260},[254,37294,34048],{"class":264},[254,37296,37297,37299,37301,37303],{"class":256,"line":1334},[254,37298,30878],{"class":260},[254,37300,31539],{"class":264},[254,37302,30533],{"class":260},[254,37304,31544],{"class":264},[254,37306,37307],{"class":256,"line":1340},[254,37308,34063],{"class":323},[254,37310,37311,37313,37315,37317],{"class":256,"line":1354},[254,37312,30878],{"class":260},[254,37314,31509],{"class":264},[254,37316,30533],{"class":260},[254,37318,31514],{"class":264},[254,37320,37321,37323,37325,37327],{"class":256,"line":1360},[254,37322,30878],{"class":260},[254,37324,32055],{"class":264},[254,37326,30533],{"class":260},[254,37328,35698],{"class":264},[254,37330,37331,37333,37336,37338],{"class":256,"line":1451},[254,37332,30878],{"class":260},[254,37334,37335],{"class":264}," 练习.AlexNet.model ",[254,37337,30533],{"class":260},[254,37339,35698],{"class":264},[254,37341,37342],{"class":256,"line":1457},[254,37343,2540],{"emptyLinePlaceholder":184},[254,37345,37346],{"class":256,"line":1469},[254,37347,2540],{"emptyLinePlaceholder":184},[254,37349,37350],{"class":256,"line":1752},[254,37351,34092],{"class":323},[254,37353,37354,37356,37358],{"class":256,"line":1757},[254,37355,32088],{"class":260},[254,37357,34099],{"class":2103},[254,37359,32094],{"class":264},[254,37361,37362,37364,37366,37368,37370,37372,37374],{"class":256,"line":1763},[254,37363,34106],{"class":264},[254,37365,310],{"class":260},[254,37367,31596],{"class":264},[254,37369,31599],{"class":5357},[254,37371,310],{"class":260},[254,37373,31604],{"class":369},[254,37375,31607],{"class":264},[254,37377,37378,37380,37382,37384],{"class":256,"line":1768},[254,37379,34123],{"class":5357},[254,37381,310],{"class":260},[254,37383,34128],{"class":313},[254,37385,31607],{"class":264},[254,37387,37388,37390,37392,37394,37396,37398,37400],{"class":256,"line":1782},[254,37389,34135],{"class":5357},[254,37391,310],{"class":260},[254,37393,31634],{"class":264},[254,37395,31637],{"class":5357},[254,37397,310],{"class":260},[254,37399,35590],{"class":313},[254,37401,31645],{"class":264},[254,37403,37404,37406,37408,37410],{"class":256,"line":1787},[254,37405,34152],{"class":5357},[254,37407,310],{"class":260},[254,37409,31617],{"class":313},[254,37411,271],{"class":264},[254,37413,37414,37416,37418,37420,37422,37424],{"class":256,"line":1793},[254,37415,34163],{"class":264},[254,37417,310],{"class":260},[254,37419,31675],{"class":264},[254,37421,31678],{"class":5357},[254,37423,310],{"class":260},[254,37425,34174],{"class":264},[254,37427,37428],{"class":256,"line":1814},[254,37429,34179],{"class":323},[254,37431,37432,37434,37436,37438],{"class":256,"line":1819},[254,37433,34184],{"class":5357},[254,37435,310],{"class":260},[254,37437,482],{"class":313},[254,37439,31607],{"class":264},[254,37441,37442,37444,37446,37448],{"class":256,"line":1833},[254,37443,34195],{"class":5357},[254,37445,310],{"class":260},[254,37447,31617],{"class":313},[254,37449,31607],{"class":264},[254,37451,37452,37454,37456,37458],{"class":256,"line":1838},[254,37453,34206],{"class":5357},[254,37455,310],{"class":260},[254,37457,456],{"class":313},[254,37459,271],{"class":264},[254,37461,37462,37464],{"class":256,"line":1867},[254,37463,4230],{"class":260},[254,37465,34219],{"class":264},[254,37467,37468],{"class":256,"line":1872},[254,37469,2540],{"emptyLinePlaceholder":184},[254,37471,37472],{"class":256,"line":1889},[254,37473,34228],{"class":323},[254,37475,37476,37478,37480],{"class":256,"line":1894},[254,37477,32088],{"class":260},[254,37479,34235],{"class":2103},[254,37481,34238],{"class":264},[254,37483,37484],{"class":256,"line":1899},[254,37485,34243],{"class":323},[254,37487,37488,37490,37492,37494,37496,37498,37500],{"class":256,"line":1904},[254,37489,31378],{"class":264},[254,37491,310],{"class":260},[254,37493,31385],{"class":369},[254,37495,1844],{"class":260},[254,37497,31390],{"class":264},[254,37499,1841],{"class":260},[254,37501,34260],{"class":369},[254,37503,37504,37506,37508],{"class":256,"line":1918},[254,37505,31430],{"class":264},[254,37507,310],{"class":260},[254,37509,32430],{"class":264},[254,37511,37512],{"class":256,"line":1923},[254,37513,2540],{"emptyLinePlaceholder":184},[254,37515,37516],{"class":256,"line":2717},[254,37517,34277],{"class":323},[254,37519,37520,37522,37524],{"class":256,"line":2731},[254,37521,34282],{"class":264},[254,37523,310],{"class":260},[254,37525,32483],{"class":313},[254,37527,37528,37530,37532],{"class":256,"line":2739},[254,37529,34291],{"class":264},[254,37531,310],{"class":260},[254,37533,3225],{"class":313},[254,37535,37536],{"class":256,"line":2744},[254,37537,2540],{"emptyLinePlaceholder":184},[254,37539,37540],{"class":256,"line":2750},[254,37541,34304],{"class":323},[254,37543,37544],{"class":256,"line":2756},[254,37545,34309],{"class":323},[254,37547,37548],{"class":256,"line":2761},[254,37549,34314],{"class":323},[254,37551,37552,37554],{"class":256,"line":8089},[254,37553,34319],{"class":260},[254,37555,33025],{"class":264},[254,37557,37558],{"class":256,"line":8113},[254,37559,34326],{"class":323},[254,37561,37562,37564,37566,37568],{"class":256,"line":8118},[254,37563,3543],{"class":260},[254,37565,34333],{"class":264},[254,37567,26184],{"class":260},[254,37569,34338],{"class":264},[254,37571,37572,37574,37576],{"class":256,"line":8124},[254,37573,34343],{"class":264},[254,37575,310],{"class":260},[254,37577,34348],{"class":264},[254,37579,37580,37582,37584],{"class":256,"line":8151},[254,37581,34353],{"class":264},[254,37583,310],{"class":260},[254,37585,34358],{"class":264},[254,37587,37588],{"class":256,"line":8156},[254,37589,34363],{"class":323},[254,37591,37592],{"class":256,"line":8162},[254,37593,33016],{"class":264},[254,37595,37596],{"class":256,"line":8174},[254,37597,34372],{"class":323},[254,37599,37600,37602,37604],{"class":256,"line":8186},[254,37601,32801],{"class":264},[254,37603,310],{"class":260},[254,37605,34381],{"class":264},[254,37607,37608],{"class":256,"line":8198},[254,37609,34386],{"class":323},[254,37611,37612,37614,37616,37618,37620,37622,37624],{"class":256,"line":9857},[254,37613,32818],{"class":264},[254,37615,310],{"class":260},[254,37617,32823],{"class":264},[254,37619,32826],{"class":5357},[254,37621,310],{"class":260},[254,37623,482],{"class":313},[254,37625,271],{"class":264},[254,37627,37628],{"class":256,"line":9882},[254,37629,34407],{"class":323},[254,37631,37632],{"class":256,"line":9905},[254,37633,34412],{"class":323},[254,37635,37636],{"class":256,"line":9929},[254,37637,34417],{"class":323},[254,37639,37640,37642,37644,37646,37648],{"class":256,"line":9934},[254,37641,34422],{"class":264},[254,37643,9618],{"class":260},[254,37645,32928],{"class":264},[254,37647,3089],{"class":260},[254,37649,34431],{"class":264},[254,37651,37652],{"class":256,"line":9939},[254,37653,34436],{"class":323},[254,37655,37656,37658,37660,37662,37664],{"class":256,"line":9944},[254,37657,34441],{"class":264},[254,37659,9618],{"class":260},[254,37661,34446],{"class":264},[254,37663,456],{"class":313},[254,37665,271],{"class":264},[254,37667,37668],{"class":256,"line":9953},[254,37669,2540],{"emptyLinePlaceholder":184},[254,37671,37672],{"class":256,"line":9958},[254,37673,34459],{"class":323},[254,37675,37676,37678,37680,37682,37684],{"class":256,"line":9964},[254,37677,34464],{"class":264},[254,37679,310],{"class":260},[254,37681,34469],{"class":264},[254,37683,848],{"class":260},[254,37685,34474],{"class":264},[254,37687,37688],{"class":256,"line":9985},[254,37689,34479],{"class":323},[254,37691,37692,37694,37696,37698],{"class":256,"line":9991},[254,37693,32592],{"class":313},[254,37695,265],{"class":264},[254,37697,34488],{"class":369},[254,37699,34491],{"class":264},[254,37701,37702],{"class":256,"line":10005},[254,37703,2540],{"emptyLinePlaceholder":184},[254,37705,37706],{"class":256,"line":10011},[254,37707,34500],{"class":323},[254,37709,37710,37712,37714,37716,37718],{"class":256,"line":10038},[254,37711,1671],{"class":260},[254,37713,31361],{"class":313},[254,37715,3089],{"class":260},[254,37717,31366],{"class":369},[254,37719,3879],{"class":264},[254,37721,37722],{"class":256,"line":10047},[254,37723,34517],{"class":323},[254,37725,37726,37728,37730],{"class":256,"line":10053},[254,37727,31430],{"class":264},[254,37729,310],{"class":260},[254,37731,37230],{"class":264},[254,37733,37734],{"class":256,"line":10061},[254,37735,34530],{"class":323},[254,37737,37738],{"class":256,"line":10066},[254,37739,34535],{"class":323},[254,37741,37742,37744,37746],{"class":256,"line":16745},[254,37743,34540],{"class":264},[254,37745,34543],{"class":369},[254,37747,30638],{"class":264},[254,37749,37750],{"class":256,"line":16751},[254,37751,34550],{"class":323},[254,37753,37754,37756,37758],{"class":256,"line":16774},[254,37755,34163],{"class":264},[254,37757,310],{"class":260},[254,37759,34559],{"class":264},[254,37761,37762],{"class":256,"line":16780},[254,37763,34564],{"class":323},[254,37765,37766],{"class":256,"line":16803},[254,37767,34569],{"class":264},[254,37769,37770],{"class":256,"line":16817},[254,37771,2540],{"emptyLinePlaceholder":184},[254,37773,37774],{"class":256,"line":16837},[254,37775,34578],{"class":323},[254,37777,37778],{"class":256,"line":16843},[254,37779,34583],{"class":323},[254,37781,37782,37784,37786,37788,37790,37792,37794],{"class":256,"line":16854},[254,37783,31378],{"class":264},[254,37785,310],{"class":260},[254,37787,31385],{"class":369},[254,37789,1844],{"class":260},[254,37791,31390],{"class":264},[254,37793,1841],{"class":260},[254,37795,34260],{"class":369},[254,37797,37798,37800,37802],{"class":256,"line":16877},[254,37799,31430],{"class":264},[254,37801,310],{"class":260},[254,37803,32430],{"class":264},[254,37805,37806],{"class":256,"line":16899},[254,37807,34612],{"class":323},[254,37809,37810],{"class":256,"line":16904},[254,37811,34617],{"class":323},[254,37813,37814,37816,37818,37820,37822,37824,37826,37828,37830,37832,37834,37836,37838,37840,37842,37844,37846,37848,37850,37852,37854,37856,37858],{"class":256,"line":16910},[254,37815,34622],{"class":264},[254,37817,310],{"class":260},[254,37819,1154],{"class":264},[254,37821,34629],{"class":369},[254,37823,642],{"class":264},[254,37825,34634],{"class":369},[254,37827,642],{"class":264},[254,37829,34639],{"class":369},[254,37831,642],{"class":264},[254,37833,34644],{"class":369},[254,37835,642],{"class":264},[254,37837,34649],{"class":369},[254,37839,642],{"class":264},[254,37841,34654],{"class":369},[254,37843,642],{"class":264},[254,37845,34659],{"class":369},[254,37847,642],{"class":264},[254,37849,34664],{"class":369},[254,37851,642],{"class":264},[254,37853,34669],{"class":369},[254,37855,642],{"class":264},[254,37857,34674],{"class":369},[254,37859,33387],{"class":264},[254,37861,37862,37864],{"class":256,"line":16924},[254,37863,34319],{"class":260},[254,37865,33025],{"class":264},[254,37867,37868],{"class":256,"line":16937},[254,37869,34687],{"class":323},[254,37871,37872,37874,37876,37878],{"class":256,"line":16942},[254,37873,3543],{"class":260},[254,37875,34694],{"class":264},[254,37877,26184],{"class":260},[254,37879,34338],{"class":264},[254,37881,37882,37884,37886],{"class":256,"line":16956},[254,37883,32751],{"class":264},[254,37885,310],{"class":260},[254,37887,32756],{"class":264},[254,37889,37890,37892,37894],{"class":256,"line":16961},[254,37891,32766],{"class":264},[254,37893,310],{"class":260},[254,37895,32771],{"class":264},[254,37897,37898],{"class":256,"line":16967},[254,37899,2540],{"emptyLinePlaceholder":184},[254,37901,37902],{"class":256,"line":16972},[254,37903,34723],{"class":323},[254,37905,37906],{"class":256,"line":16986},[254,37907,33016],{"class":264},[254,37909,37910],{"class":256,"line":16991},[254,37911,34732],{"class":323},[254,37913,37914,37916,37918],{"class":256,"line":16996},[254,37915,32801],{"class":264},[254,37917,310],{"class":260},[254,37919,32806],{"class":264},[254,37921,37922],{"class":256,"line":17010},[254,37923,34745],{"class":323},[254,37925,37926,37928,37930,37932,37934,37936,37938],{"class":256,"line":17022},[254,37927,32818],{"class":264},[254,37929,310],{"class":260},[254,37931,32823],{"class":264},[254,37933,32826],{"class":5357},[254,37935,310],{"class":260},[254,37937,482],{"class":313},[254,37939,271],{"class":264},[254,37941,37942],{"class":256,"line":17027},[254,37943,34766],{"class":323},[254,37945,37946,37948,37950],{"class":256,"line":17040},[254,37947,34771],{"class":264},[254,37949,310],{"class":260},[254,37951,34776],{"class":264},[254,37953,37954,37956,37958],{"class":256,"line":17045},[254,37955,34781],{"class":264},[254,37957,310],{"class":260},[254,37959,34786],{"class":264},[254,37961,37962,37964,37966,37968,37970,37972,37974,37976],{"class":256,"line":17050},[254,37963,34791],{"class":313},[254,37965,265],{"class":264},[254,37967,34796],{"class":369},[254,37969,34799],{"class":264},[254,37971,34802],{"class":369},[254,37973,642],{"class":264},[254,37975,34807],{"class":369},[254,37977,34810],{"class":264},[225,37979,37981],{"id":37980},"_22vgg","2.2.VGG",[22139,37983,37985],{"id":37984},"_221原理","2.2.1.原理",[14,37987,37988],{},[1602,37989],{"alt":174,"src":37990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-015.png",[14,37992,37993],{},[1602,37994],{"alt":174,"src":37995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-016.png",[14,37997,37998],{},[1602,37999],{"alt":174,"src":38000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-017.png",[14,38002,38003],{},"参数详细描述：",[14,38005,38006],{},[1602,38007],{"alt":174,"src":38008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-018.png",[14,38010,38011],{},[1602,38012],{"alt":174,"src":38013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-019.png",[14,38015,38016],{},[1602,38017],{"alt":174,"src":38018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-020.png",[14,38020,38021],{},[1602,38022],{"alt":174,"src":38023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-021.png",[14,38025,38026],{},[1602,38027],{"alt":174,"src":38028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-022.png",[22139,38030,38032],{"id":38031},"_222代码实现","2.2.2.代码实现",[21,38034,38035],{},[24,38036,38037],{},"网络搭建",[245,38039,38041],{"className":30519,"code":38040,"language":30521,"meta":174,"style":174},"import torch\nfrom sympy.core.sympify import kernS\nfrom torch import nn\nfrom torchsummary import summary\n\nclass VGG16(nn.Module):\n    def __init__(self):\n        super(VGG16, self).__init__()\n        # 按照块来进行搭建神经网络层,按照序列来写\n        # 这里用的是灰度图\n        self.block1=nn.Sequential(\n            nn.Conv2d(in_channels=1,out_channels=64,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=64,out_channels=64,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=2,stride=2,padding=0)\n        )\n        # 第二层\n        self.block2=nn.Sequential(\n            nn.Conv2d(in_channels=64,out_channels=128,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=128,out_channels=128,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=2,stride=2,padding=0)\n        )\n        # 第三层\n        self.block3=nn.Sequential(\n            nn.Conv2d(in_channels=128,out_channels=256,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=256,out_channels=256,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=256,out_channels=256,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=2,stride=2,padding=0)\n        )\n        # 第四层\n        self.block4=nn.Sequential(\n            nn.Conv2d(in_channels=256,out_channels=512,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=512,out_channels=512,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=512,out_channels=512,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=2,stride=2,padding=0)\n        )\n        # 第五层\n        self.block5=nn.Sequential(\n            nn.Conv2d(in_channels=512,out_channels=512,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=512,out_channels=512,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=512,out_channels=512,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=2,stride=2,padding=0)\n        )\n        # 全连接层\n        self.block6=nn.Sequential(\n            # 平展操作\n            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n            nn.Flatten(),\n            nn.Linear(7*7*512,256),\n            nn.ReLU(),\n            nn.Linear(256,128),\n            nn.ReLU(),\n            nn.Linear(128,10)\n        )\n\n        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n        # 循环遍历模型\n        for m in self.modules():\n            # print(m)\n            if isinstance(m,nn.Conv2d):\n                # 凯明初始化,初始化w,对应的激活函数是relu\n                nn.init.kaiming_normal_(m.weight,nonlinearity='relu')\n                # 判断b参数是否存在\n                if m.bias is not None:\n                    # 如果参数不存在的化初始化b=0\n                    nn.init.constant_(m.bias,0)\n            # 全连接层初始化\n            elif isinstance(m,nn.Linear):\n                # 这个初始化方法是利用的是正太分布的方式\n                # 均值为0，方差为0.01\n                nn.init.normal_(m.weight,0,0.01)\n                # 初始化b参数\n                if m.bias is not None:\n                    nn.init.constant_(m.bias,0)\n\n    # 定义前向传播\n    def forward(self,x):\n        x=self.block1(x)\n        x=self.block2(x)\n        x=self.block3(x)\n        x=self.block4(x)\n        x=self.block5(x)\n        x=self.block6(x)\n        return x\n\n# 验证模型\nif __name__=='__main__':\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n    print(device)\n    model=VGG16().to(device)\n    print(summary(model,(1,224,224)))\n",[251,38042,38043,38049,38061,38071,38081,38085,38102,38110,38129,38134,38139,38151,38189,38194,38230,38234,38263,38268,38273,38284,38320,38324,38360,38364,38392,38396,38401,38412,38448,38452,38488,38492,38528,38532,38560,38564,38569,38580,38617,38621,38657,38661,38697,38701,38729,38733,38738,38749,38785,38789,38825,38829,38865,38869,38897,38901,38906,38917,38922,38927,38932,38953,38957,38969,38973,38985,38989,38993,38998,39003,39018,39023,39033,39038,39053,39058,39077,39082,39091,39096,39106,39111,39116,39130,39135,39149,39157,39161,39165,39173,39184,39195,39206,39217,39228,39239,39245,39249,39254,39267,39287,39293,39302],{"__ignoreMap":174},[254,38044,38045,38047],{"class":256,"line":257},[254,38046,30533],{"class":260},[254,38048,30536],{"class":264},[254,38050,38051,38053,38056,38058],{"class":256,"line":175},[254,38052,30878],{"class":260},[254,38054,38055],{"class":264}," sympy.core.sympify ",[254,38057,30533],{"class":260},[254,38059,38060],{"class":264}," kernS\n",[254,38062,38063,38065,38067,38069],{"class":256,"line":1319},[254,38064,30878],{"class":260},[254,38066,30881],{"class":264},[254,38068,30533],{"class":260},[254,38070,30886],{"class":264},[254,38072,38073,38075,38077,38079],{"class":256,"line":1334},[254,38074,30878],{"class":260},[254,38076,30898],{"class":264},[254,38078,30533],{"class":260},[254,38080,30903],{"class":264},[254,38082,38083],{"class":256,"line":1340},[254,38084,2540],{"emptyLinePlaceholder":184},[254,38086,38087,38089,38092,38094,38096,38098,38100],{"class":256,"line":1354},[254,38088,14835],{"class":260},[254,38090,38091],{"class":2103}," VGG16",[254,38093,265],{"class":264},[254,38095,30919],{"class":2103},[254,38097,822],{"class":264},[254,38099,30924],{"class":2103},[254,38101,30927],{"class":264},[254,38103,38104,38106,38108],{"class":256,"line":1360},[254,38105,30942],{"class":260},[254,38107,30945],{"class":313},[254,38109,30948],{"class":264},[254,38111,38112,38114,38116,38119,38121,38123,38125,38127],{"class":256,"line":1451},[254,38113,30958],{"class":313},[254,38115,265],{"class":264},[254,38117,38118],{"class":313},"VGG16",[254,38120,12576],{"class":264},[254,38122,30964],{"class":313},[254,38124,30967],{"class":264},[254,38126,30970],{"class":313},[254,38128,2116],{"class":264},[254,38130,38131],{"class":256,"line":1457},[254,38132,38133],{"class":323},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[254,38135,38136],{"class":256,"line":1469},[254,38137,38138],{"class":323},"        # 这里用的是灰度图\n",[254,38140,38141,38143,38146,38148],{"class":256,"line":1752},[254,38142,30986],{"class":313},[254,38144,38145],{"class":264},".block1",[254,38147,310],{"class":260},[254,38149,38150],{"class":264},"nn.Sequential(\n",[254,38152,38153,38156,38158,38160,38162,38164,38166,38168,38170,38172,38174,38176,38178,38180,38182,38184,38186],{"class":256,"line":1757},[254,38154,38155],{"class":264},"            nn.Conv2d(",[254,38157,30997],{"class":5357},[254,38159,310],{"class":260},[254,38161,482],{"class":313},[254,38163,642],{"class":264},[254,38165,31006],{"class":5357},[254,38167,310],{"class":260},[254,38169,468],{"class":313},[254,38171,642],{"class":264},[254,38173,31015],{"class":5357},[254,38175,310],{"class":260},[254,38177,336],{"class":313},[254,38179,642],{"class":264},[254,38181,31024],{"class":5357},[254,38183,310],{"class":260},[254,38185,482],{"class":313},[254,38187,38188],{"class":264},"),\n",[254,38190,38191],{"class":256,"line":1763},[254,38192,38193],{"class":264},"            nn.ReLU(),\n",[254,38195,38196,38198,38200,38202,38204,38206,38208,38210,38212,38214,38216,38218,38220,38222,38224,38226,38228],{"class":256,"line":1768},[254,38197,38155],{"class":264},[254,38199,30997],{"class":5357},[254,38201,310],{"class":260},[254,38203,468],{"class":313},[254,38205,642],{"class":264},[254,38207,31006],{"class":5357},[254,38209,310],{"class":260},[254,38211,468],{"class":313},[254,38213,642],{"class":264},[254,38215,31015],{"class":5357},[254,38217,310],{"class":260},[254,38219,336],{"class":313},[254,38221,642],{"class":264},[254,38223,31024],{"class":5357},[254,38225,310],{"class":260},[254,38227,482],{"class":313},[254,38229,38188],{"class":264},[254,38231,38232],{"class":256,"line":1782},[254,38233,38193],{"class":264},[254,38235,38236,38239,38241,38243,38245,38247,38249,38251,38253,38255,38257,38259,38261],{"class":256,"line":1787},[254,38237,38238],{"class":264},"            nn.MaxPool2d(",[254,38240,31015],{"class":5357},[254,38242,310],{"class":260},[254,38244,342],{"class":313},[254,38246,642],{"class":264},[254,38248,31070],{"class":5357},[254,38250,310],{"class":260},[254,38252,342],{"class":313},[254,38254,642],{"class":264},[254,38256,31024],{"class":5357},[254,38258,310],{"class":260},[254,38260,456],{"class":313},[254,38262,271],{"class":264},[254,38264,38265],{"class":256,"line":1793},[254,38266,38267],{"class":264},"        )\n",[254,38269,38270],{"class":256,"line":1814},[254,38271,38272],{"class":323},"        # 第二层\n",[254,38274,38275,38277,38280,38282],{"class":256,"line":1819},[254,38276,30986],{"class":313},[254,38278,38279],{"class":264},".block2",[254,38281,310],{"class":260},[254,38283,38150],{"class":264},[254,38285,38286,38288,38290,38292,38294,38296,38298,38300,38302,38304,38306,38308,38310,38312,38314,38316,38318],{"class":256,"line":1833},[254,38287,38155],{"class":264},[254,38289,30997],{"class":5357},[254,38291,310],{"class":260},[254,38293,468],{"class":313},[254,38295,642],{"class":264},[254,38297,31006],{"class":5357},[254,38299,310],{"class":260},[254,38301,32211],{"class":313},[254,38303,642],{"class":264},[254,38305,31015],{"class":5357},[254,38307,310],{"class":260},[254,38309,336],{"class":313},[254,38311,642],{"class":264},[254,38313,31024],{"class":5357},[254,38315,310],{"class":260},[254,38317,482],{"class":313},[254,38319,38188],{"class":264},[254,38321,38322],{"class":256,"line":1838},[254,38323,38193],{"class":264},[254,38325,38326,38328,38330,38332,38334,38336,38338,38340,38342,38344,38346,38348,38350,38352,38354,38356,38358],{"class":256,"line":1867},[254,38327,38155],{"class":264},[254,38329,30997],{"class":5357},[254,38331,310],{"class":260},[254,38333,32211],{"class":313},[254,38335,642],{"class":264},[254,38337,31006],{"class":5357},[254,38339,310],{"class":260},[254,38341,32211],{"class":313},[254,38343,642],{"class":264},[254,38345,31015],{"class":5357},[254,38347,310],{"class":260},[254,38349,336],{"class":313},[254,38351,642],{"class":264},[254,38353,31024],{"class":5357},[254,38355,310],{"class":260},[254,38357,482],{"class":313},[254,38359,38188],{"class":264},[254,38361,38362],{"class":256,"line":1872},[254,38363,38193],{"class":264},[254,38365,38366,38368,38370,38372,38374,38376,38378,38380,38382,38384,38386,38388,38390],{"class":256,"line":1889},[254,38367,38238],{"class":264},[254,38369,31015],{"class":5357},[254,38371,310],{"class":260},[254,38373,342],{"class":313},[254,38375,642],{"class":264},[254,38377,31070],{"class":5357},[254,38379,310],{"class":260},[254,38381,342],{"class":313},[254,38383,642],{"class":264},[254,38385,31024],{"class":5357},[254,38387,310],{"class":260},[254,38389,456],{"class":313},[254,38391,271],{"class":264},[254,38393,38394],{"class":256,"line":1894},[254,38395,38267],{"class":264},[254,38397,38398],{"class":256,"line":1899},[254,38399,38400],{"class":323},"        # 第三层\n",[254,38402,38403,38405,38408,38410],{"class":256,"line":1904},[254,38404,30986],{"class":313},[254,38406,38407],{"class":264},".block3",[254,38409,310],{"class":260},[254,38411,38150],{"class":264},[254,38413,38414,38416,38418,38420,38422,38424,38426,38428,38430,38432,38434,38436,38438,38440,38442,38444,38446],{"class":256,"line":1918},[254,38415,38155],{"class":264},[254,38417,30997],{"class":5357},[254,38419,310],{"class":260},[254,38421,32211],{"class":313},[254,38423,642],{"class":264},[254,38425,31006],{"class":5357},[254,38427,310],{"class":260},[254,38429,35011],{"class":313},[254,38431,642],{"class":264},[254,38433,31015],{"class":5357},[254,38435,310],{"class":260},[254,38437,336],{"class":313},[254,38439,642],{"class":264},[254,38441,31024],{"class":5357},[254,38443,310],{"class":260},[254,38445,482],{"class":313},[254,38447,38188],{"class":264},[254,38449,38450],{"class":256,"line":1923},[254,38451,38193],{"class":264},[254,38453,38454,38456,38458,38460,38462,38464,38466,38468,38470,38472,38474,38476,38478,38480,38482,38484,38486],{"class":256,"line":2717},[254,38455,38155],{"class":264},[254,38457,30997],{"class":5357},[254,38459,310],{"class":260},[254,38461,35011],{"class":313},[254,38463,642],{"class":264},[254,38465,31006],{"class":5357},[254,38467,310],{"class":260},[254,38469,35011],{"class":313},[254,38471,642],{"class":264},[254,38473,31015],{"class":5357},[254,38475,310],{"class":260},[254,38477,336],{"class":313},[254,38479,642],{"class":264},[254,38481,31024],{"class":5357},[254,38483,310],{"class":260},[254,38485,482],{"class":313},[254,38487,38188],{"class":264},[254,38489,38490],{"class":256,"line":2731},[254,38491,38193],{"class":264},[254,38493,38494,38496,38498,38500,38502,38504,38506,38508,38510,38512,38514,38516,38518,38520,38522,38524,38526],{"class":256,"line":2739},[254,38495,38155],{"class":264},[254,38497,30997],{"class":5357},[254,38499,310],{"class":260},[254,38501,35011],{"class":313},[254,38503,642],{"class":264},[254,38505,31006],{"class":5357},[254,38507,310],{"class":260},[254,38509,35011],{"class":313},[254,38511,642],{"class":264},[254,38513,31015],{"class":5357},[254,38515,310],{"class":260},[254,38517,336],{"class":313},[254,38519,642],{"class":264},[254,38521,31024],{"class":5357},[254,38523,310],{"class":260},[254,38525,482],{"class":313},[254,38527,38188],{"class":264},[254,38529,38530],{"class":256,"line":2744},[254,38531,38193],{"class":264},[254,38533,38534,38536,38538,38540,38542,38544,38546,38548,38550,38552,38554,38556,38558],{"class":256,"line":2750},[254,38535,38238],{"class":264},[254,38537,31015],{"class":5357},[254,38539,310],{"class":260},[254,38541,342],{"class":313},[254,38543,642],{"class":264},[254,38545,31070],{"class":5357},[254,38547,310],{"class":260},[254,38549,342],{"class":313},[254,38551,642],{"class":264},[254,38553,31024],{"class":5357},[254,38555,310],{"class":260},[254,38557,456],{"class":313},[254,38559,271],{"class":264},[254,38561,38562],{"class":256,"line":2756},[254,38563,38267],{"class":264},[254,38565,38566],{"class":256,"line":2761},[254,38567,38568],{"class":323},"        # 第四层\n",[254,38570,38571,38573,38576,38578],{"class":256,"line":8089},[254,38572,30986],{"class":313},[254,38574,38575],{"class":264},".block4",[254,38577,310],{"class":260},[254,38579,38150],{"class":264},[254,38581,38582,38584,38586,38588,38590,38592,38594,38596,38599,38601,38603,38605,38607,38609,38611,38613,38615],{"class":256,"line":8113},[254,38583,38155],{"class":264},[254,38585,30997],{"class":5357},[254,38587,310],{"class":260},[254,38589,35011],{"class":313},[254,38591,642],{"class":264},[254,38593,31006],{"class":5357},[254,38595,310],{"class":260},[254,38597,38598],{"class":313},"512",[254,38600,642],{"class":264},[254,38602,31015],{"class":5357},[254,38604,310],{"class":260},[254,38606,336],{"class":313},[254,38608,642],{"class":264},[254,38610,31024],{"class":5357},[254,38612,310],{"class":260},[254,38614,482],{"class":313},[254,38616,38188],{"class":264},[254,38618,38619],{"class":256,"line":8118},[254,38620,38193],{"class":264},[254,38622,38623,38625,38627,38629,38631,38633,38635,38637,38639,38641,38643,38645,38647,38649,38651,38653,38655],{"class":256,"line":8124},[254,38624,38155],{"class":264},[254,38626,30997],{"class":5357},[254,38628,310],{"class":260},[254,38630,38598],{"class":313},[254,38632,642],{"class":264},[254,38634,31006],{"class":5357},[254,38636,310],{"class":260},[254,38638,38598],{"class":313},[254,38640,642],{"class":264},[254,38642,31015],{"class":5357},[254,38644,310],{"class":260},[254,38646,336],{"class":313},[254,38648,642],{"class":264},[254,38650,31024],{"class":5357},[254,38652,310],{"class":260},[254,38654,482],{"class":313},[254,38656,38188],{"class":264},[254,38658,38659],{"class":256,"line":8151},[254,38660,38193],{"class":264},[254,38662,38663,38665,38667,38669,38671,38673,38675,38677,38679,38681,38683,38685,38687,38689,38691,38693,38695],{"class":256,"line":8156},[254,38664,38155],{"class":264},[254,38666,30997],{"class":5357},[254,38668,310],{"class":260},[254,38670,38598],{"class":313},[254,38672,642],{"class":264},[254,38674,31006],{"class":5357},[254,38676,310],{"class":260},[254,38678,38598],{"class":313},[254,38680,642],{"class":264},[254,38682,31015],{"class":5357},[254,38684,310],{"class":260},[254,38686,336],{"class":313},[254,38688,642],{"class":264},[254,38690,31024],{"class":5357},[254,38692,310],{"class":260},[254,38694,482],{"class":313},[254,38696,38188],{"class":264},[254,38698,38699],{"class":256,"line":8162},[254,38700,38193],{"class":264},[254,38702,38703,38705,38707,38709,38711,38713,38715,38717,38719,38721,38723,38725,38727],{"class":256,"line":8174},[254,38704,38238],{"class":264},[254,38706,31015],{"class":5357},[254,38708,310],{"class":260},[254,38710,342],{"class":313},[254,38712,642],{"class":264},[254,38714,31070],{"class":5357},[254,38716,310],{"class":260},[254,38718,342],{"class":313},[254,38720,642],{"class":264},[254,38722,31024],{"class":5357},[254,38724,310],{"class":260},[254,38726,456],{"class":313},[254,38728,271],{"class":264},[254,38730,38731],{"class":256,"line":8186},[254,38732,38267],{"class":264},[254,38734,38735],{"class":256,"line":8198},[254,38736,38737],{"class":323},"        # 第五层\n",[254,38739,38740,38742,38745,38747],{"class":256,"line":9857},[254,38741,30986],{"class":313},[254,38743,38744],{"class":264},".block5",[254,38746,310],{"class":260},[254,38748,38150],{"class":264},[254,38750,38751,38753,38755,38757,38759,38761,38763,38765,38767,38769,38771,38773,38775,38777,38779,38781,38783],{"class":256,"line":9882},[254,38752,38155],{"class":264},[254,38754,30997],{"class":5357},[254,38756,310],{"class":260},[254,38758,38598],{"class":313},[254,38760,642],{"class":264},[254,38762,31006],{"class":5357},[254,38764,310],{"class":260},[254,38766,38598],{"class":313},[254,38768,642],{"class":264},[254,38770,31015],{"class":5357},[254,38772,310],{"class":260},[254,38774,336],{"class":313},[254,38776,642],{"class":264},[254,38778,31024],{"class":5357},[254,38780,310],{"class":260},[254,38782,482],{"class":313},[254,38784,38188],{"class":264},[254,38786,38787],{"class":256,"line":9905},[254,38788,38193],{"class":264},[254,38790,38791,38793,38795,38797,38799,38801,38803,38805,38807,38809,38811,38813,38815,38817,38819,38821,38823],{"class":256,"line":9929},[254,38792,38155],{"class":264},[254,38794,30997],{"class":5357},[254,38796,310],{"class":260},[254,38798,38598],{"class":313},[254,38800,642],{"class":264},[254,38802,31006],{"class":5357},[254,38804,310],{"class":260},[254,38806,38598],{"class":313},[254,38808,642],{"class":264},[254,38810,31015],{"class":5357},[254,38812,310],{"class":260},[254,38814,336],{"class":313},[254,38816,642],{"class":264},[254,38818,31024],{"class":5357},[254,38820,310],{"class":260},[254,38822,482],{"class":313},[254,38824,38188],{"class":264},[254,38826,38827],{"class":256,"line":9934},[254,38828,38193],{"class":264},[254,38830,38831,38833,38835,38837,38839,38841,38843,38845,38847,38849,38851,38853,38855,38857,38859,38861,38863],{"class":256,"line":9939},[254,38832,38155],{"class":264},[254,38834,30997],{"class":5357},[254,38836,310],{"class":260},[254,38838,38598],{"class":313},[254,38840,642],{"class":264},[254,38842,31006],{"class":5357},[254,38844,310],{"class":260},[254,38846,38598],{"class":313},[254,38848,642],{"class":264},[254,38850,31015],{"class":5357},[254,38852,310],{"class":260},[254,38854,336],{"class":313},[254,38856,642],{"class":264},[254,38858,31024],{"class":5357},[254,38860,310],{"class":260},[254,38862,482],{"class":313},[254,38864,38188],{"class":264},[254,38866,38867],{"class":256,"line":9944},[254,38868,38193],{"class":264},[254,38870,38871,38873,38875,38877,38879,38881,38883,38885,38887,38889,38891,38893,38895],{"class":256,"line":9953},[254,38872,38238],{"class":264},[254,38874,31015],{"class":5357},[254,38876,310],{"class":260},[254,38878,342],{"class":313},[254,38880,642],{"class":264},[254,38882,31070],{"class":5357},[254,38884,310],{"class":260},[254,38886,342],{"class":313},[254,38888,642],{"class":264},[254,38890,31024],{"class":5357},[254,38892,310],{"class":260},[254,38894,456],{"class":313},[254,38896,271],{"class":264},[254,38898,38899],{"class":256,"line":9958},[254,38900,38267],{"class":264},[254,38902,38903],{"class":256,"line":9964},[254,38904,38905],{"class":323},"        # 全连接层\n",[254,38907,38908,38910,38913,38915],{"class":256,"line":9985},[254,38909,30986],{"class":313},[254,38911,38912],{"class":264},".block6",[254,38914,310],{"class":260},[254,38916,38150],{"class":264},[254,38918,38919],{"class":256,"line":9991},[254,38920,38921],{"class":323},"            # 平展操作\n",[254,38923,38924],{"class":256,"line":10005},[254,38925,38926],{"class":323},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[254,38928,38929],{"class":256,"line":10011},[254,38930,38931],{"class":264},"            nn.Flatten(),\n",[254,38933,38934,38937,38939,38941,38943,38945,38947,38949,38951],{"class":256,"line":10038},[254,38935,38936],{"class":264},"            nn.Linear(",[254,38938,633],{"class":313},[254,38940,719],{"class":260},[254,38942,633],{"class":313},[254,38944,719],{"class":260},[254,38946,38598],{"class":313},[254,38948,642],{"class":264},[254,38950,35011],{"class":313},[254,38952,38188],{"class":264},[254,38954,38955],{"class":256,"line":10047},[254,38956,38193],{"class":264},[254,38958,38959,38961,38963,38965,38967],{"class":256,"line":10053},[254,38960,38936],{"class":264},[254,38962,35011],{"class":313},[254,38964,642],{"class":264},[254,38966,32211],{"class":313},[254,38968,38188],{"class":264},[254,38970,38971],{"class":256,"line":10061},[254,38972,38193],{"class":264},[254,38974,38975,38977,38979,38981,38983],{"class":256,"line":10066},[254,38976,38936],{"class":264},[254,38978,32211],{"class":313},[254,38980,642],{"class":264},[254,38982,710],{"class":313},[254,38984,271],{"class":264},[254,38986,38987],{"class":256,"line":16745},[254,38988,38267],{"class":264},[254,38990,38991],{"class":256,"line":16751},[254,38992,2540],{"emptyLinePlaceholder":184},[254,38994,38995],{"class":256,"line":16774},[254,38996,38997],{"class":323},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[254,38999,39000],{"class":256,"line":16780},[254,39001,39002],{"class":323},"        # 循环遍历模型\n",[254,39004,39005,39007,39010,39012,39015],{"class":256,"line":16803},[254,39006,3543],{"class":260},[254,39008,39009],{"class":264}," m ",[254,39011,26184],{"class":260},[254,39013,39014],{"class":313}," self",[254,39016,39017],{"class":264},".modules():\n",[254,39019,39020],{"class":256,"line":16817},[254,39021,39022],{"class":323},"            # print(m)\n",[254,39024,39025,39027,39030],{"class":256,"line":16837},[254,39026,4782],{"class":260},[254,39028,39029],{"class":313}," isinstance",[254,39031,39032],{"class":264},"(m,nn.Conv2d):\n",[254,39034,39035],{"class":256,"line":16843},[254,39036,39037],{"class":323},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[254,39039,39040,39043,39046,39048,39051],{"class":256,"line":16854},[254,39041,39042],{"class":264},"                nn.init.kaiming_normal_(m.weight,",[254,39044,39045],{"class":5357},"nonlinearity",[254,39047,310],{"class":260},[254,39049,39050],{"class":369},"'relu'",[254,39052,271],{"class":264},[254,39054,39055],{"class":256,"line":16877},[254,39056,39057],{"class":323},"                # 判断b参数是否存在\n",[254,39059,39060,39063,39066,39069,39072,39075],{"class":256,"line":16899},[254,39061,39062],{"class":260},"                if",[254,39064,39065],{"class":264}," m.bias ",[254,39067,39068],{"class":260},"is",[254,39070,39071],{"class":260}," not",[254,39073,39074],{"class":313}," None",[254,39076,3879],{"class":264},[254,39078,39079],{"class":256,"line":16904},[254,39080,39081],{"class":323},"                    # 如果参数不存在的化初始化b=0\n",[254,39083,39084,39087,39089],{"class":256,"line":16910},[254,39085,39086],{"class":264},"                    nn.init.constant_(m.bias,",[254,39088,456],{"class":313},[254,39090,271],{"class":264},[254,39092,39093],{"class":256,"line":16924},[254,39094,39095],{"class":323},"            # 全连接层初始化\n",[254,39097,39098,39101,39103],{"class":256,"line":16937},[254,39099,39100],{"class":260},"            elif",[254,39102,39029],{"class":313},[254,39104,39105],{"class":264},"(m,nn.Linear):\n",[254,39107,39108],{"class":256,"line":16942},[254,39109,39110],{"class":323},"                # 这个初始化方法是利用的是正太分布的方式\n",[254,39112,39113],{"class":256,"line":16956},[254,39114,39115],{"class":323},"                # 均值为0，方差为0.01\n",[254,39117,39118,39121,39123,39125,39128],{"class":256,"line":16961},[254,39119,39120],{"class":264},"                nn.init.normal_(m.weight,",[254,39122,456],{"class":313},[254,39124,642],{"class":264},[254,39126,39127],{"class":313},"0.01",[254,39129,271],{"class":264},[254,39131,39132],{"class":256,"line":16967},[254,39133,39134],{"class":323},"                # 初始化b参数\n",[254,39136,39137,39139,39141,39143,39145,39147],{"class":256,"line":16972},[254,39138,39062],{"class":260},[254,39140,39065],{"class":264},[254,39142,39068],{"class":260},[254,39144,39071],{"class":260},[254,39146,39074],{"class":313},[254,39148,3879],{"class":264},[254,39150,39151,39153,39155],{"class":256,"line":16986},[254,39152,39086],{"class":264},[254,39154,456],{"class":313},[254,39156,271],{"class":264},[254,39158,39159],{"class":256,"line":16991},[254,39160,2540],{"emptyLinePlaceholder":184},[254,39162,39163],{"class":256,"line":16996},[254,39164,35306],{"class":323},[254,39166,39167,39169,39171],{"class":256,"line":17010},[254,39168,30942],{"class":260},[254,39170,31234],{"class":2103},[254,39172,31237],{"class":264},[254,39174,39175,39177,39179,39181],{"class":256,"line":17022},[254,39176,31242],{"class":264},[254,39178,310],{"class":260},[254,39180,30964],{"class":313},[254,39182,39183],{"class":264},".block1(x)\n",[254,39185,39186,39188,39190,39192],{"class":256,"line":17027},[254,39187,31242],{"class":264},[254,39189,310],{"class":260},[254,39191,30964],{"class":313},[254,39193,39194],{"class":264},".block2(x)\n",[254,39196,39197,39199,39201,39203],{"class":256,"line":17040},[254,39198,31242],{"class":264},[254,39200,310],{"class":260},[254,39202,30964],{"class":313},[254,39204,39205],{"class":264},".block3(x)\n",[254,39207,39208,39210,39212,39214],{"class":256,"line":17045},[254,39209,31242],{"class":264},[254,39211,310],{"class":260},[254,39213,30964],{"class":313},[254,39215,39216],{"class":264},".block4(x)\n",[254,39218,39219,39221,39223,39225],{"class":256,"line":17050},[254,39220,31242],{"class":264},[254,39222,310],{"class":260},[254,39224,30964],{"class":313},[254,39226,39227],{"class":264},".block5(x)\n",[254,39229,39230,39232,39234,39236],{"class":256,"line":17055},[254,39231,31242],{"class":264},[254,39233,310],{"class":260},[254,39235,30964],{"class":313},[254,39237,39238],{"class":264},".block6(x)\n",[254,39240,39241,39243],{"class":256,"line":17068},[254,39242,14893],{"class":260},[254,39244,31350],{"class":264},[254,39246,39247],{"class":256,"line":17073},[254,39248,2540],{"emptyLinePlaceholder":184},[254,39250,39251],{"class":256,"line":32774},[254,39252,39253],{"class":323},"# 验证模型\n",[254,39255,39256,39258,39260,39262,39265],{"class":256,"line":32780},[254,39257,1671],{"class":260},[254,39259,31361],{"class":313},[254,39261,3089],{"class":260},[254,39263,39264],{"class":369},"'__main__'",[254,39266,3879],{"class":264},[254,39268,39269,39271,39273,39275,39277,39279,39281,39283,39285],{"class":256,"line":32786},[254,39270,31378],{"class":264},[254,39272,310],{"class":260},[254,39274,30592],{"class":264},[254,39276,31385],{"class":369},[254,39278,1844],{"class":260},[254,39280,31390],{"class":264},[254,39282,1841],{"class":260},[254,39284,30617],{"class":369},[254,39286,271],{"class":264},[254,39288,39289,39291],{"class":256,"line":32792},[254,39290,31440],{"class":313},[254,39292,30626],{"class":264},[254,39294,39295,39297,39299],{"class":256,"line":32798},[254,39296,31430],{"class":264},[254,39298,310],{"class":260},[254,39300,39301],{"class":264},"VGG16().to(device)\n",[254,39303,39304,39306,39308,39310,39312,39314,39316,39318],{"class":256,"line":32809},[254,39305,31440],{"class":313},[254,39307,31443],{"class":264},[254,39309,482],{"class":313},[254,39311,642],{"class":264},[254,39313,31642],{"class":313},[254,39315,642],{"class":264},[254,39317,31642],{"class":313},[254,39319,31456],{"class":264},[21,39321,39322],{"start":175},[24,39323,39324],{},"训练代码",[14,39326,39327],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[14,39329,39330],{},"解决方式:",[14,39332,39333],{},"①权重初始化",[245,39335,39337],{"className":30519,"code":39336,"language":30521,"meta":174,"style":174},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n# 循环遍历模型\nfor m in self.modules():\n    # print(m)\n    if isinstance(m,nn.Conv2d):\n        # 凯明初始化,初始化w,对应的激活函数是relu\n        nn.init.kaiming_normal_(m.weight,nonlinearity='relu')\n        # 判断b参数是否存在\n        if m.bias is not None:\n            # 如果参数不存在的化初始化b=0\n            nn.init.constant_(m.bias,0)\n    # 全连接层初始化\n    elif isinstance(m,nn.Linear):\n        # 这个初始化方法是利用的是正太分布的方式\n        # 均值为0，方差为0.01\n        nn.init.normal_(m.weight,0,0.01)\n        # 初始化b参数\n        if m.bias is not None:\n            nn.init.constant_(m.bias,0)\n",[251,39338,39339,39344,39349,39361,39366,39374,39379,39392,39397,39411,39416,39425,39430,39439,39444,39449,39462,39467,39481],{"__ignoreMap":174},[254,39340,39341],{"class":256,"line":257},[254,39342,39343],{"class":323},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[254,39345,39346],{"class":256,"line":175},[254,39347,39348],{"class":323},"# 循环遍历模型\n",[254,39350,39351,39353,39355,39357,39359],{"class":256,"line":1319},[254,39352,3165],{"class":260},[254,39354,39009],{"class":264},[254,39356,26184],{"class":260},[254,39358,39014],{"class":313},[254,39360,39017],{"class":264},[254,39362,39363],{"class":256,"line":1334},[254,39364,39365],{"class":323},"    # print(m)\n",[254,39367,39368,39370,39372],{"class":256,"line":1340},[254,39369,3241],{"class":260},[254,39371,39029],{"class":313},[254,39373,39032],{"class":264},[254,39375,39376],{"class":256,"line":1354},[254,39377,39378],{"class":323},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[254,39380,39381,39384,39386,39388,39390],{"class":256,"line":1360},[254,39382,39383],{"class":264},"        nn.init.kaiming_normal_(m.weight,",[254,39385,39045],{"class":5357},[254,39387,310],{"class":260},[254,39389,39050],{"class":369},[254,39391,271],{"class":264},[254,39393,39394],{"class":256,"line":1451},[254,39395,39396],{"class":323},"        # 判断b参数是否存在\n",[254,39398,39399,39401,39403,39405,39407,39409],{"class":256,"line":1457},[254,39400,2637],{"class":260},[254,39402,39065],{"class":264},[254,39404,39068],{"class":260},[254,39406,39071],{"class":260},[254,39408,39074],{"class":313},[254,39410,3879],{"class":264},[254,39412,39413],{"class":256,"line":1469},[254,39414,39415],{"class":323},"            # 如果参数不存在的化初始化b=0\n",[254,39417,39418,39421,39423],{"class":256,"line":1752},[254,39419,39420],{"class":264},"            nn.init.constant_(m.bias,",[254,39422,456],{"class":313},[254,39424,271],{"class":264},[254,39426,39427],{"class":256,"line":1757},[254,39428,39429],{"class":323},"    # 全连接层初始化\n",[254,39431,39432,39435,39437],{"class":256,"line":1763},[254,39433,39434],{"class":260},"    elif",[254,39436,39029],{"class":313},[254,39438,39105],{"class":264},[254,39440,39441],{"class":256,"line":1768},[254,39442,39443],{"class":323},"        # 这个初始化方法是利用的是正太分布的方式\n",[254,39445,39446],{"class":256,"line":1782},[254,39447,39448],{"class":323},"        # 均值为0，方差为0.01\n",[254,39450,39451,39454,39456,39458,39460],{"class":256,"line":1787},[254,39452,39453],{"class":264},"        nn.init.normal_(m.weight,",[254,39455,456],{"class":313},[254,39457,642],{"class":264},[254,39459,39127],{"class":313},[254,39461,271],{"class":264},[254,39463,39464],{"class":256,"line":1793},[254,39465,39466],{"class":323},"        # 初始化b参数\n",[254,39468,39469,39471,39473,39475,39477,39479],{"class":256,"line":1814},[254,39470,2637],{"class":260},[254,39472,39065],{"class":264},[254,39474,39068],{"class":260},[254,39476,39071],{"class":260},[254,39478,39074],{"class":313},[254,39480,3879],{"class":264},[254,39482,39483,39485,39487],{"class":256,"line":1819},[254,39484,39420],{"class":264},[254,39486,456],{"class":313},[254,39488,271],{"class":264},[14,39490,39491],{},"②尽可能地增加批次",[14,39493,39494],{},"训练完整代码：",[245,39496,39497],{"className":30519,"code":38040,"language":30521,"meta":174,"style":174},[251,39498,39499,39505,39515,39525,39535,39539,39555,39563,39581,39585,39589,39599,39635,39639,39675,39679,39707,39711,39715,39725,39761,39765,39801,39805,39833,39837,39841,39851,39887,39891,39927,39931,39967,39971,39999,40003,40007,40017,40053,40057,40093,40097,40133,40137,40165,40169,40173,40183,40219,40223,40259,40263,40299,40303,40331,40335,40339,40349,40353,40357,40361,40381,40385,40397,40401,40413,40417,40421,40425,40429,40441,40445,40453,40457,40469,40473,40487,40491,40499,40503,40511,40515,40519,40531,40535,40549,40557,40561,40565,40573,40583,40593,40603,40613,40623,40633,40639,40643,40647,40659,40679,40685,40693],{"__ignoreMap":174},[254,39500,39501,39503],{"class":256,"line":257},[254,39502,30533],{"class":260},[254,39504,30536],{"class":264},[254,39506,39507,39509,39511,39513],{"class":256,"line":175},[254,39508,30878],{"class":260},[254,39510,38055],{"class":264},[254,39512,30533],{"class":260},[254,39514,38060],{"class":264},[254,39516,39517,39519,39521,39523],{"class":256,"line":1319},[254,39518,30878],{"class":260},[254,39520,30881],{"class":264},[254,39522,30533],{"class":260},[254,39524,30886],{"class":264},[254,39526,39527,39529,39531,39533],{"class":256,"line":1334},[254,39528,30878],{"class":260},[254,39530,30898],{"class":264},[254,39532,30533],{"class":260},[254,39534,30903],{"class":264},[254,39536,39537],{"class":256,"line":1340},[254,39538,2540],{"emptyLinePlaceholder":184},[254,39540,39541,39543,39545,39547,39549,39551,39553],{"class":256,"line":1354},[254,39542,14835],{"class":260},[254,39544,38091],{"class":2103},[254,39546,265],{"class":264},[254,39548,30919],{"class":2103},[254,39550,822],{"class":264},[254,39552,30924],{"class":2103},[254,39554,30927],{"class":264},[254,39556,39557,39559,39561],{"class":256,"line":1360},[254,39558,30942],{"class":260},[254,39560,30945],{"class":313},[254,39562,30948],{"class":264},[254,39564,39565,39567,39569,39571,39573,39575,39577,39579],{"class":256,"line":1451},[254,39566,30958],{"class":313},[254,39568,265],{"class":264},[254,39570,38118],{"class":313},[254,39572,12576],{"class":264},[254,39574,30964],{"class":313},[254,39576,30967],{"class":264},[254,39578,30970],{"class":313},[254,39580,2116],{"class":264},[254,39582,39583],{"class":256,"line":1457},[254,39584,38133],{"class":323},[254,39586,39587],{"class":256,"line":1469},[254,39588,38138],{"class":323},[254,39590,39591,39593,39595,39597],{"class":256,"line":1752},[254,39592,30986],{"class":313},[254,39594,38145],{"class":264},[254,39596,310],{"class":260},[254,39598,38150],{"class":264},[254,39600,39601,39603,39605,39607,39609,39611,39613,39615,39617,39619,39621,39623,39625,39627,39629,39631,39633],{"class":256,"line":1757},[254,39602,38155],{"class":264},[254,39604,30997],{"class":5357},[254,39606,310],{"class":260},[254,39608,482],{"class":313},[254,39610,642],{"class":264},[254,39612,31006],{"class":5357},[254,39614,310],{"class":260},[254,39616,468],{"class":313},[254,39618,642],{"class":264},[254,39620,31015],{"class":5357},[254,39622,310],{"class":260},[254,39624,336],{"class":313},[254,39626,642],{"class":264},[254,39628,31024],{"class":5357},[254,39630,310],{"class":260},[254,39632,482],{"class":313},[254,39634,38188],{"class":264},[254,39636,39637],{"class":256,"line":1763},[254,39638,38193],{"class":264},[254,39640,39641,39643,39645,39647,39649,39651,39653,39655,39657,39659,39661,39663,39665,39667,39669,39671,39673],{"class":256,"line":1768},[254,39642,38155],{"class":264},[254,39644,30997],{"class":5357},[254,39646,310],{"class":260},[254,39648,468],{"class":313},[254,39650,642],{"class":264},[254,39652,31006],{"class":5357},[254,39654,310],{"class":260},[254,39656,468],{"class":313},[254,39658,642],{"class":264},[254,39660,31015],{"class":5357},[254,39662,310],{"class":260},[254,39664,336],{"class":313},[254,39666,642],{"class":264},[254,39668,31024],{"class":5357},[254,39670,310],{"class":260},[254,39672,482],{"class":313},[254,39674,38188],{"class":264},[254,39676,39677],{"class":256,"line":1782},[254,39678,38193],{"class":264},[254,39680,39681,39683,39685,39687,39689,39691,39693,39695,39697,39699,39701,39703,39705],{"class":256,"line":1787},[254,39682,38238],{"class":264},[254,39684,31015],{"class":5357},[254,39686,310],{"class":260},[254,39688,342],{"class":313},[254,39690,642],{"class":264},[254,39692,31070],{"class":5357},[254,39694,310],{"class":260},[254,39696,342],{"class":313},[254,39698,642],{"class":264},[254,39700,31024],{"class":5357},[254,39702,310],{"class":260},[254,39704,456],{"class":313},[254,39706,271],{"class":264},[254,39708,39709],{"class":256,"line":1793},[254,39710,38267],{"class":264},[254,39712,39713],{"class":256,"line":1814},[254,39714,38272],{"class":323},[254,39716,39717,39719,39721,39723],{"class":256,"line":1819},[254,39718,30986],{"class":313},[254,39720,38279],{"class":264},[254,39722,310],{"class":260},[254,39724,38150],{"class":264},[254,39726,39727,39729,39731,39733,39735,39737,39739,39741,39743,39745,39747,39749,39751,39753,39755,39757,39759],{"class":256,"line":1833},[254,39728,38155],{"class":264},[254,39730,30997],{"class":5357},[254,39732,310],{"class":260},[254,39734,468],{"class":313},[254,39736,642],{"class":264},[254,39738,31006],{"class":5357},[254,39740,310],{"class":260},[254,39742,32211],{"class":313},[254,39744,642],{"class":264},[254,39746,31015],{"class":5357},[254,39748,310],{"class":260},[254,39750,336],{"class":313},[254,39752,642],{"class":264},[254,39754,31024],{"class":5357},[254,39756,310],{"class":260},[254,39758,482],{"class":313},[254,39760,38188],{"class":264},[254,39762,39763],{"class":256,"line":1838},[254,39764,38193],{"class":264},[254,39766,39767,39769,39771,39773,39775,39777,39779,39781,39783,39785,39787,39789,39791,39793,39795,39797,39799],{"class":256,"line":1867},[254,39768,38155],{"class":264},[254,39770,30997],{"class":5357},[254,39772,310],{"class":260},[254,39774,32211],{"class":313},[254,39776,642],{"class":264},[254,39778,31006],{"class":5357},[254,39780,310],{"class":260},[254,39782,32211],{"class":313},[254,39784,642],{"class":264},[254,39786,31015],{"class":5357},[254,39788,310],{"class":260},[254,39790,336],{"class":313},[254,39792,642],{"class":264},[254,39794,31024],{"class":5357},[254,39796,310],{"class":260},[254,39798,482],{"class":313},[254,39800,38188],{"class":264},[254,39802,39803],{"class":256,"line":1872},[254,39804,38193],{"class":264},[254,39806,39807,39809,39811,39813,39815,39817,39819,39821,39823,39825,39827,39829,39831],{"class":256,"line":1889},[254,39808,38238],{"class":264},[254,39810,31015],{"class":5357},[254,39812,310],{"class":260},[254,39814,342],{"class":313},[254,39816,642],{"class":264},[254,39818,31070],{"class":5357},[254,39820,310],{"class":260},[254,39822,342],{"class":313},[254,39824,642],{"class":264},[254,39826,31024],{"class":5357},[254,39828,310],{"class":260},[254,39830,456],{"class":313},[254,39832,271],{"class":264},[254,39834,39835],{"class":256,"line":1894},[254,39836,38267],{"class":264},[254,39838,39839],{"class":256,"line":1899},[254,39840,38400],{"class":323},[254,39842,39843,39845,39847,39849],{"class":256,"line":1904},[254,39844,30986],{"class":313},[254,39846,38407],{"class":264},[254,39848,310],{"class":260},[254,39850,38150],{"class":264},[254,39852,39853,39855,39857,39859,39861,39863,39865,39867,39869,39871,39873,39875,39877,39879,39881,39883,39885],{"class":256,"line":1918},[254,39854,38155],{"class":264},[254,39856,30997],{"class":5357},[254,39858,310],{"class":260},[254,39860,32211],{"class":313},[254,39862,642],{"class":264},[254,39864,31006],{"class":5357},[254,39866,310],{"class":260},[254,39868,35011],{"class":313},[254,39870,642],{"class":264},[254,39872,31015],{"class":5357},[254,39874,310],{"class":260},[254,39876,336],{"class":313},[254,39878,642],{"class":264},[254,39880,31024],{"class":5357},[254,39882,310],{"class":260},[254,39884,482],{"class":313},[254,39886,38188],{"class":264},[254,39888,39889],{"class":256,"line":1923},[254,39890,38193],{"class":264},[254,39892,39893,39895,39897,39899,39901,39903,39905,39907,39909,39911,39913,39915,39917,39919,39921,39923,39925],{"class":256,"line":2717},[254,39894,38155],{"class":264},[254,39896,30997],{"class":5357},[254,39898,310],{"class":260},[254,39900,35011],{"class":313},[254,39902,642],{"class":264},[254,39904,31006],{"class":5357},[254,39906,310],{"class":260},[254,39908,35011],{"class":313},[254,39910,642],{"class":264},[254,39912,31015],{"class":5357},[254,39914,310],{"class":260},[254,39916,336],{"class":313},[254,39918,642],{"class":264},[254,39920,31024],{"class":5357},[254,39922,310],{"class":260},[254,39924,482],{"class":313},[254,39926,38188],{"class":264},[254,39928,39929],{"class":256,"line":2731},[254,39930,38193],{"class":264},[254,39932,39933,39935,39937,39939,39941,39943,39945,39947,39949,39951,39953,39955,39957,39959,39961,39963,39965],{"class":256,"line":2739},[254,39934,38155],{"class":264},[254,39936,30997],{"class":5357},[254,39938,310],{"class":260},[254,39940,35011],{"class":313},[254,39942,642],{"class":264},[254,39944,31006],{"class":5357},[254,39946,310],{"class":260},[254,39948,35011],{"class":313},[254,39950,642],{"class":264},[254,39952,31015],{"class":5357},[254,39954,310],{"class":260},[254,39956,336],{"class":313},[254,39958,642],{"class":264},[254,39960,31024],{"class":5357},[254,39962,310],{"class":260},[254,39964,482],{"class":313},[254,39966,38188],{"class":264},[254,39968,39969],{"class":256,"line":2744},[254,39970,38193],{"class":264},[254,39972,39973,39975,39977,39979,39981,39983,39985,39987,39989,39991,39993,39995,39997],{"class":256,"line":2750},[254,39974,38238],{"class":264},[254,39976,31015],{"class":5357},[254,39978,310],{"class":260},[254,39980,342],{"class":313},[254,39982,642],{"class":264},[254,39984,31070],{"class":5357},[254,39986,310],{"class":260},[254,39988,342],{"class":313},[254,39990,642],{"class":264},[254,39992,31024],{"class":5357},[254,39994,310],{"class":260},[254,39996,456],{"class":313},[254,39998,271],{"class":264},[254,40000,40001],{"class":256,"line":2756},[254,40002,38267],{"class":264},[254,40004,40005],{"class":256,"line":2761},[254,40006,38568],{"class":323},[254,40008,40009,40011,40013,40015],{"class":256,"line":8089},[254,40010,30986],{"class":313},[254,40012,38575],{"class":264},[254,40014,310],{"class":260},[254,40016,38150],{"class":264},[254,40018,40019,40021,40023,40025,40027,40029,40031,40033,40035,40037,40039,40041,40043,40045,40047,40049,40051],{"class":256,"line":8113},[254,40020,38155],{"class":264},[254,40022,30997],{"class":5357},[254,40024,310],{"class":260},[254,40026,35011],{"class":313},[254,40028,642],{"class":264},[254,40030,31006],{"class":5357},[254,40032,310],{"class":260},[254,40034,38598],{"class":313},[254,40036,642],{"class":264},[254,40038,31015],{"class":5357},[254,40040,310],{"class":260},[254,40042,336],{"class":313},[254,40044,642],{"class":264},[254,40046,31024],{"class":5357},[254,40048,310],{"class":260},[254,40050,482],{"class":313},[254,40052,38188],{"class":264},[254,40054,40055],{"class":256,"line":8118},[254,40056,38193],{"class":264},[254,40058,40059,40061,40063,40065,40067,40069,40071,40073,40075,40077,40079,40081,40083,40085,40087,40089,40091],{"class":256,"line":8124},[254,40060,38155],{"class":264},[254,40062,30997],{"class":5357},[254,40064,310],{"class":260},[254,40066,38598],{"class":313},[254,40068,642],{"class":264},[254,40070,31006],{"class":5357},[254,40072,310],{"class":260},[254,40074,38598],{"class":313},[254,40076,642],{"class":264},[254,40078,31015],{"class":5357},[254,40080,310],{"class":260},[254,40082,336],{"class":313},[254,40084,642],{"class":264},[254,40086,31024],{"class":5357},[254,40088,310],{"class":260},[254,40090,482],{"class":313},[254,40092,38188],{"class":264},[254,40094,40095],{"class":256,"line":8151},[254,40096,38193],{"class":264},[254,40098,40099,40101,40103,40105,40107,40109,40111,40113,40115,40117,40119,40121,40123,40125,40127,40129,40131],{"class":256,"line":8156},[254,40100,38155],{"class":264},[254,40102,30997],{"class":5357},[254,40104,310],{"class":260},[254,40106,38598],{"class":313},[254,40108,642],{"class":264},[254,40110,31006],{"class":5357},[254,40112,310],{"class":260},[254,40114,38598],{"class":313},[254,40116,642],{"class":264},[254,40118,31015],{"class":5357},[254,40120,310],{"class":260},[254,40122,336],{"class":313},[254,40124,642],{"class":264},[254,40126,31024],{"class":5357},[254,40128,310],{"class":260},[254,40130,482],{"class":313},[254,40132,38188],{"class":264},[254,40134,40135],{"class":256,"line":8162},[254,40136,38193],{"class":264},[254,40138,40139,40141,40143,40145,40147,40149,40151,40153,40155,40157,40159,40161,40163],{"class":256,"line":8174},[254,40140,38238],{"class":264},[254,40142,31015],{"class":5357},[254,40144,310],{"class":260},[254,40146,342],{"class":313},[254,40148,642],{"class":264},[254,40150,31070],{"class":5357},[254,40152,310],{"class":260},[254,40154,342],{"class":313},[254,40156,642],{"class":264},[254,40158,31024],{"class":5357},[254,40160,310],{"class":260},[254,40162,456],{"class":313},[254,40164,271],{"class":264},[254,40166,40167],{"class":256,"line":8186},[254,40168,38267],{"class":264},[254,40170,40171],{"class":256,"line":8198},[254,40172,38737],{"class":323},[254,40174,40175,40177,40179,40181],{"class":256,"line":9857},[254,40176,30986],{"class":313},[254,40178,38744],{"class":264},[254,40180,310],{"class":260},[254,40182,38150],{"class":264},[254,40184,40185,40187,40189,40191,40193,40195,40197,40199,40201,40203,40205,40207,40209,40211,40213,40215,40217],{"class":256,"line":9882},[254,40186,38155],{"class":264},[254,40188,30997],{"class":5357},[254,40190,310],{"class":260},[254,40192,38598],{"class":313},[254,40194,642],{"class":264},[254,40196,31006],{"class":5357},[254,40198,310],{"class":260},[254,40200,38598],{"class":313},[254,40202,642],{"class":264},[254,40204,31015],{"class":5357},[254,40206,310],{"class":260},[254,40208,336],{"class":313},[254,40210,642],{"class":264},[254,40212,31024],{"class":5357},[254,40214,310],{"class":260},[254,40216,482],{"class":313},[254,40218,38188],{"class":264},[254,40220,40221],{"class":256,"line":9905},[254,40222,38193],{"class":264},[254,40224,40225,40227,40229,40231,40233,40235,40237,40239,40241,40243,40245,40247,40249,40251,40253,40255,40257],{"class":256,"line":9929},[254,40226,38155],{"class":264},[254,40228,30997],{"class":5357},[254,40230,310],{"class":260},[254,40232,38598],{"class":313},[254,40234,642],{"class":264},[254,40236,31006],{"class":5357},[254,40238,310],{"class":260},[254,40240,38598],{"class":313},[254,40242,642],{"class":264},[254,40244,31015],{"class":5357},[254,40246,310],{"class":260},[254,40248,336],{"class":313},[254,40250,642],{"class":264},[254,40252,31024],{"class":5357},[254,40254,310],{"class":260},[254,40256,482],{"class":313},[254,40258,38188],{"class":264},[254,40260,40261],{"class":256,"line":9934},[254,40262,38193],{"class":264},[254,40264,40265,40267,40269,40271,40273,40275,40277,40279,40281,40283,40285,40287,40289,40291,40293,40295,40297],{"class":256,"line":9939},[254,40266,38155],{"class":264},[254,40268,30997],{"class":5357},[254,40270,310],{"class":260},[254,40272,38598],{"class":313},[254,40274,642],{"class":264},[254,40276,31006],{"class":5357},[254,40278,310],{"class":260},[254,40280,38598],{"class":313},[254,40282,642],{"class":264},[254,40284,31015],{"class":5357},[254,40286,310],{"class":260},[254,40288,336],{"class":313},[254,40290,642],{"class":264},[254,40292,31024],{"class":5357},[254,40294,310],{"class":260},[254,40296,482],{"class":313},[254,40298,38188],{"class":264},[254,40300,40301],{"class":256,"line":9944},[254,40302,38193],{"class":264},[254,40304,40305,40307,40309,40311,40313,40315,40317,40319,40321,40323,40325,40327,40329],{"class":256,"line":9953},[254,40306,38238],{"class":264},[254,40308,31015],{"class":5357},[254,40310,310],{"class":260},[254,40312,342],{"class":313},[254,40314,642],{"class":264},[254,40316,31070],{"class":5357},[254,40318,310],{"class":260},[254,40320,342],{"class":313},[254,40322,642],{"class":264},[254,40324,31024],{"class":5357},[254,40326,310],{"class":260},[254,40328,456],{"class":313},[254,40330,271],{"class":264},[254,40332,40333],{"class":256,"line":9958},[254,40334,38267],{"class":264},[254,40336,40337],{"class":256,"line":9964},[254,40338,38905],{"class":323},[254,40340,40341,40343,40345,40347],{"class":256,"line":9985},[254,40342,30986],{"class":313},[254,40344,38912],{"class":264},[254,40346,310],{"class":260},[254,40348,38150],{"class":264},[254,40350,40351],{"class":256,"line":9991},[254,40352,38921],{"class":323},[254,40354,40355],{"class":256,"line":10005},[254,40356,38926],{"class":323},[254,40358,40359],{"class":256,"line":10011},[254,40360,38931],{"class":264},[254,40362,40363,40365,40367,40369,40371,40373,40375,40377,40379],{"class":256,"line":10038},[254,40364,38936],{"class":264},[254,40366,633],{"class":313},[254,40368,719],{"class":260},[254,40370,633],{"class":313},[254,40372,719],{"class":260},[254,40374,38598],{"class":313},[254,40376,642],{"class":264},[254,40378,35011],{"class":313},[254,40380,38188],{"class":264},[254,40382,40383],{"class":256,"line":10047},[254,40384,38193],{"class":264},[254,40386,40387,40389,40391,40393,40395],{"class":256,"line":10053},[254,40388,38936],{"class":264},[254,40390,35011],{"class":313},[254,40392,642],{"class":264},[254,40394,32211],{"class":313},[254,40396,38188],{"class":264},[254,40398,40399],{"class":256,"line":10061},[254,40400,38193],{"class":264},[254,40402,40403,40405,40407,40409,40411],{"class":256,"line":10066},[254,40404,38936],{"class":264},[254,40406,32211],{"class":313},[254,40408,642],{"class":264},[254,40410,710],{"class":313},[254,40412,271],{"class":264},[254,40414,40415],{"class":256,"line":16745},[254,40416,38267],{"class":264},[254,40418,40419],{"class":256,"line":16751},[254,40420,2540],{"emptyLinePlaceholder":184},[254,40422,40423],{"class":256,"line":16774},[254,40424,38997],{"class":323},[254,40426,40427],{"class":256,"line":16780},[254,40428,39002],{"class":323},[254,40430,40431,40433,40435,40437,40439],{"class":256,"line":16803},[254,40432,3543],{"class":260},[254,40434,39009],{"class":264},[254,40436,26184],{"class":260},[254,40438,39014],{"class":313},[254,40440,39017],{"class":264},[254,40442,40443],{"class":256,"line":16817},[254,40444,39022],{"class":323},[254,40446,40447,40449,40451],{"class":256,"line":16837},[254,40448,4782],{"class":260},[254,40450,39029],{"class":313},[254,40452,39032],{"class":264},[254,40454,40455],{"class":256,"line":16843},[254,40456,39037],{"class":323},[254,40458,40459,40461,40463,40465,40467],{"class":256,"line":16854},[254,40460,39042],{"class":264},[254,40462,39045],{"class":5357},[254,40464,310],{"class":260},[254,40466,39050],{"class":369},[254,40468,271],{"class":264},[254,40470,40471],{"class":256,"line":16877},[254,40472,39057],{"class":323},[254,40474,40475,40477,40479,40481,40483,40485],{"class":256,"line":16899},[254,40476,39062],{"class":260},[254,40478,39065],{"class":264},[254,40480,39068],{"class":260},[254,40482,39071],{"class":260},[254,40484,39074],{"class":313},[254,40486,3879],{"class":264},[254,40488,40489],{"class":256,"line":16904},[254,40490,39081],{"class":323},[254,40492,40493,40495,40497],{"class":256,"line":16910},[254,40494,39086],{"class":264},[254,40496,456],{"class":313},[254,40498,271],{"class":264},[254,40500,40501],{"class":256,"line":16924},[254,40502,39095],{"class":323},[254,40504,40505,40507,40509],{"class":256,"line":16937},[254,40506,39100],{"class":260},[254,40508,39029],{"class":313},[254,40510,39105],{"class":264},[254,40512,40513],{"class":256,"line":16942},[254,40514,39110],{"class":323},[254,40516,40517],{"class":256,"line":16956},[254,40518,39115],{"class":323},[254,40520,40521,40523,40525,40527,40529],{"class":256,"line":16961},[254,40522,39120],{"class":264},[254,40524,456],{"class":313},[254,40526,642],{"class":264},[254,40528,39127],{"class":313},[254,40530,271],{"class":264},[254,40532,40533],{"class":256,"line":16967},[254,40534,39134],{"class":323},[254,40536,40537,40539,40541,40543,40545,40547],{"class":256,"line":16972},[254,40538,39062],{"class":260},[254,40540,39065],{"class":264},[254,40542,39068],{"class":260},[254,40544,39071],{"class":260},[254,40546,39074],{"class":313},[254,40548,3879],{"class":264},[254,40550,40551,40553,40555],{"class":256,"line":16986},[254,40552,39086],{"class":264},[254,40554,456],{"class":313},[254,40556,271],{"class":264},[254,40558,40559],{"class":256,"line":16991},[254,40560,2540],{"emptyLinePlaceholder":184},[254,40562,40563],{"class":256,"line":16996},[254,40564,35306],{"class":323},[254,40566,40567,40569,40571],{"class":256,"line":17010},[254,40568,30942],{"class":260},[254,40570,31234],{"class":2103},[254,40572,31237],{"class":264},[254,40574,40575,40577,40579,40581],{"class":256,"line":17022},[254,40576,31242],{"class":264},[254,40578,310],{"class":260},[254,40580,30964],{"class":313},[254,40582,39183],{"class":264},[254,40584,40585,40587,40589,40591],{"class":256,"line":17027},[254,40586,31242],{"class":264},[254,40588,310],{"class":260},[254,40590,30964],{"class":313},[254,40592,39194],{"class":264},[254,40594,40595,40597,40599,40601],{"class":256,"line":17040},[254,40596,31242],{"class":264},[254,40598,310],{"class":260},[254,40600,30964],{"class":313},[254,40602,39205],{"class":264},[254,40604,40605,40607,40609,40611],{"class":256,"line":17045},[254,40606,31242],{"class":264},[254,40608,310],{"class":260},[254,40610,30964],{"class":313},[254,40612,39216],{"class":264},[254,40614,40615,40617,40619,40621],{"class":256,"line":17050},[254,40616,31242],{"class":264},[254,40618,310],{"class":260},[254,40620,30964],{"class":313},[254,40622,39227],{"class":264},[254,40624,40625,40627,40629,40631],{"class":256,"line":17055},[254,40626,31242],{"class":264},[254,40628,310],{"class":260},[254,40630,30964],{"class":313},[254,40632,39238],{"class":264},[254,40634,40635,40637],{"class":256,"line":17068},[254,40636,14893],{"class":260},[254,40638,31350],{"class":264},[254,40640,40641],{"class":256,"line":17073},[254,40642,2540],{"emptyLinePlaceholder":184},[254,40644,40645],{"class":256,"line":32774},[254,40646,39253],{"class":323},[254,40648,40649,40651,40653,40655,40657],{"class":256,"line":32780},[254,40650,1671],{"class":260},[254,40652,31361],{"class":313},[254,40654,3089],{"class":260},[254,40656,39264],{"class":369},[254,40658,3879],{"class":264},[254,40660,40661,40663,40665,40667,40669,40671,40673,40675,40677],{"class":256,"line":32786},[254,40662,31378],{"class":264},[254,40664,310],{"class":260},[254,40666,30592],{"class":264},[254,40668,31385],{"class":369},[254,40670,1844],{"class":260},[254,40672,31390],{"class":264},[254,40674,1841],{"class":260},[254,40676,30617],{"class":369},[254,40678,271],{"class":264},[254,40680,40681,40683],{"class":256,"line":32792},[254,40682,31440],{"class":313},[254,40684,30626],{"class":264},[254,40686,40687,40689,40691],{"class":256,"line":32798},[254,40688,31430],{"class":264},[254,40690,310],{"class":260},[254,40692,39301],{"class":264},[254,40694,40695,40697,40699,40701,40703,40705,40707,40709],{"class":256,"line":32809},[254,40696,31440],{"class":313},[254,40698,31443],{"class":264},[254,40700,482],{"class":313},[254,40702,642],{"class":264},[254,40704,31642],{"class":313},[254,40706,642],{"class":264},[254,40708,31642],{"class":313},[254,40710,31456],{"class":264},[21,40712,40713],{"start":1319},[24,40714,40715],{},"测试代码",[245,40717,40719],{"className":30519,"code":40718,"language":30521,"meta":174,"style":174},"import torch\nimport torch.utils.data as Data\nfrom torchvision import transforms\n# 导入数据集\nfrom torchvision.datasets import FashionMNIST\nfrom model import VGG16\n\n\n# 测试数据处理\ndef test_data_process():\n    test_data=FashionMNIST(root='.\u002Fdata',\n                           train=False,\n                           transform=transforms.Compose([transforms.Resize(size=224),transforms.ToTensor()]),\n                           download=True)\n    test_dataloader=Data.DataLoader(dataset=test_data,\n                                    # 这里是一张一张进行测试\n                                    batch_size=1,\n                                    shuffle=True,\n                                    num_workers=0)\n    return test_dataloader\n\n# 定义模型测试函数\ndef test_model_process(model,test_dataloader):\n    # 将模型放到设备当中，先进行判断\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n\n    # 设置初始化参数\n    test_corrects=0.0\n    test_num=0\n\n    # 进行模型测试\n    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n    # 不进行梯度计算，可以节省内存，加快运行速度\n    with torch.no_grad():\n        # 从数据中进行\n        for test_data_x,test_data_y in test_dataloader:\n            test_data_x=test_data_x.to(device)\n            test_data_y=test_data_y.to(device)\n            # 设置为验证模式\n            model.eval()\n            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n            output=model(test_data_x)\n            # 查找每一行中最大值对应的下标\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算正确率\n            # .data表示是一个不带梯度信息的tensor\n            # 如果预测正确，则准确度test_corrects加1\n            test_corrects+=torch.sum(pre_lab==test_data_y.data)\n            # 将所有的测试样本进行累计\n            test_num+=test_data_x.size(0)\n\n        # 计算准确度\n        test_acc=test_corrects.double().item()\u002Ftest_num\n        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n        print(\"测试的准确率：\",test_acc)\n\n# 实现模型的测试功能\nif __name__==\"__main__\":\n    # 加载模型\n    model=VGG16()\n    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n    model.load_state_dict(torch.load('best_model.pth'))\n    # 数据加载\n    test_dataloader=test_data_process()\n    # 加载模型测试的函数\n    test_model_process(model,test_dataloader)\n\n    # 验证集推理实现：\n    # 加载数据加载的更详细一些\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n    # 顺序不可改变\n    classes=['T-shirt\u002Ftop','Trouser','Pullover','Dress','Coat','Sandal','Shirt','Sneaker','Bag','Ankle boot']\n    with torch.no_grad():\n        # 将数据和标签都放到设备当中\n        for b_x,b_y in test_dataloader:\n            b_x=b_x.to(device)\n            b_y=b_y.to(device)\n\n            # 设置模型为验证模式\n            model.eval()\n            # 模型推理结果\n            output=model(b_x)\n            # 获取最大下标，最大下标就是类别号\n            pre_lab=torch.argmax(output,dim=1)\n            # 取出张量中的数值\n            result=pre_lab.item()\n            label=b_y.item()\n            print(\"预测值：\",classes[result],\"------\",\"真实值：\",classes[label])\n",[251,40720,40721,40727,40737,40747,40751,40761,40772,40776,40780,40784,40792,40808,40818,40834,40844,40858,40862,40872,40882,40892,40898,40902,40906,40914,40918,40934,40942,40946,40950,40958,40966,40970,40974,40978,40982,40988,40992,41002,41010,41018,41022,41026,41030,41038,41042,41058,41062,41066,41070,41082,41086,41098,41102,41106,41118,41122,41132,41136,41140,41152,41156,41165,41169,41173,41181,41185,41193,41197,41201,41205,41209,41213,41229,41237,41241,41245,41293,41299,41303,41313,41321,41329,41333,41337,41341,41345,41353,41357,41373,41377,41385,41393],{"__ignoreMap":174},[254,40722,40723,40725],{"class":256,"line":257},[254,40724,30533],{"class":260},[254,40726,30536],{"class":264},[254,40728,40729,40731,40733,40735],{"class":256,"line":175},[254,40730,30533],{"class":260},[254,40732,31556],{"class":264},[254,40734,31524],{"class":260},[254,40736,31561],{"class":264},[254,40738,40739,40741,40743,40745],{"class":256,"line":1319},[254,40740,30878],{"class":260},[254,40742,31539],{"class":264},[254,40744,30533],{"class":260},[254,40746,31544],{"class":264},[254,40748,40749],{"class":256,"line":1334},[254,40750,34063],{"class":323},[254,40752,40753,40755,40757,40759],{"class":256,"line":1340},[254,40754,30878],{"class":260},[254,40756,31509],{"class":264},[254,40758,30533],{"class":260},[254,40760,31514],{"class":264},[254,40762,40763,40765,40767,40769],{"class":256,"line":1354},[254,40764,30878],{"class":260},[254,40766,32055],{"class":264},[254,40768,30533],{"class":260},[254,40770,40771],{"class":313}," VGG16\n",[254,40773,40774],{"class":256,"line":1360},[254,40775,2540],{"emptyLinePlaceholder":184},[254,40777,40778],{"class":256,"line":1451},[254,40779,2540],{"emptyLinePlaceholder":184},[254,40781,40782],{"class":256,"line":1457},[254,40783,34092],{"class":323},[254,40785,40786,40788,40790],{"class":256,"line":1469},[254,40787,32088],{"class":260},[254,40789,34099],{"class":2103},[254,40791,32094],{"class":264},[254,40793,40794,40796,40798,40800,40802,40804,40806],{"class":256,"line":1752},[254,40795,34106],{"class":264},[254,40797,310],{"class":260},[254,40799,31596],{"class":264},[254,40801,31599],{"class":5357},[254,40803,310],{"class":260},[254,40805,31604],{"class":369},[254,40807,31607],{"class":264},[254,40809,40810,40812,40814,40816],{"class":256,"line":1757},[254,40811,34123],{"class":5357},[254,40813,310],{"class":260},[254,40815,34128],{"class":313},[254,40817,31607],{"class":264},[254,40819,40820,40822,40824,40826,40828,40830,40832],{"class":256,"line":1763},[254,40821,34135],{"class":5357},[254,40823,310],{"class":260},[254,40825,31634],{"class":264},[254,40827,31637],{"class":5357},[254,40829,310],{"class":260},[254,40831,31642],{"class":313},[254,40833,31645],{"class":264},[254,40835,40836,40838,40840,40842],{"class":256,"line":1768},[254,40837,34152],{"class":5357},[254,40839,310],{"class":260},[254,40841,31617],{"class":313},[254,40843,271],{"class":264},[254,40845,40846,40848,40850,40852,40854,40856],{"class":256,"line":1782},[254,40847,34163],{"class":264},[254,40849,310],{"class":260},[254,40851,31675],{"class":264},[254,40853,31678],{"class":5357},[254,40855,310],{"class":260},[254,40857,34174],{"class":264},[254,40859,40860],{"class":256,"line":1787},[254,40861,34179],{"class":323},[254,40863,40864,40866,40868,40870],{"class":256,"line":1793},[254,40865,34184],{"class":5357},[254,40867,310],{"class":260},[254,40869,482],{"class":313},[254,40871,31607],{"class":264},[254,40873,40874,40876,40878,40880],{"class":256,"line":1814},[254,40875,34195],{"class":5357},[254,40877,310],{"class":260},[254,40879,31617],{"class":313},[254,40881,31607],{"class":264},[254,40883,40884,40886,40888,40890],{"class":256,"line":1819},[254,40885,34206],{"class":5357},[254,40887,310],{"class":260},[254,40889,456],{"class":313},[254,40891,271],{"class":264},[254,40893,40894,40896],{"class":256,"line":1833},[254,40895,4230],{"class":260},[254,40897,34219],{"class":264},[254,40899,40900],{"class":256,"line":1838},[254,40901,2540],{"emptyLinePlaceholder":184},[254,40903,40904],{"class":256,"line":1867},[254,40905,34228],{"class":323},[254,40907,40908,40910,40912],{"class":256,"line":1872},[254,40909,32088],{"class":260},[254,40911,34235],{"class":2103},[254,40913,34238],{"class":264},[254,40915,40916],{"class":256,"line":1889},[254,40917,34243],{"class":323},[254,40919,40920,40922,40924,40926,40928,40930,40932],{"class":256,"line":1894},[254,40921,31378],{"class":264},[254,40923,310],{"class":260},[254,40925,31385],{"class":369},[254,40927,1844],{"class":260},[254,40929,31390],{"class":264},[254,40931,1841],{"class":260},[254,40933,34260],{"class":369},[254,40935,40936,40938,40940],{"class":256,"line":1899},[254,40937,31430],{"class":264},[254,40939,310],{"class":260},[254,40941,32430],{"class":264},[254,40943,40944],{"class":256,"line":1904},[254,40945,2540],{"emptyLinePlaceholder":184},[254,40947,40948],{"class":256,"line":1918},[254,40949,34277],{"class":323},[254,40951,40952,40954,40956],{"class":256,"line":1923},[254,40953,34282],{"class":264},[254,40955,310],{"class":260},[254,40957,32483],{"class":313},[254,40959,40960,40962,40964],{"class":256,"line":2717},[254,40961,34291],{"class":264},[254,40963,310],{"class":260},[254,40965,3225],{"class":313},[254,40967,40968],{"class":256,"line":2731},[254,40969,2540],{"emptyLinePlaceholder":184},[254,40971,40972],{"class":256,"line":2739},[254,40973,34304],{"class":323},[254,40975,40976],{"class":256,"line":2744},[254,40977,34309],{"class":323},[254,40979,40980],{"class":256,"line":2750},[254,40981,34314],{"class":323},[254,40983,40984,40986],{"class":256,"line":2756},[254,40985,34319],{"class":260},[254,40987,33025],{"class":264},[254,40989,40990],{"class":256,"line":2761},[254,40991,34326],{"class":323},[254,40993,40994,40996,40998,41000],{"class":256,"line":8089},[254,40995,3543],{"class":260},[254,40997,34333],{"class":264},[254,40999,26184],{"class":260},[254,41001,34338],{"class":264},[254,41003,41004,41006,41008],{"class":256,"line":8113},[254,41005,34343],{"class":264},[254,41007,310],{"class":260},[254,41009,34348],{"class":264},[254,41011,41012,41014,41016],{"class":256,"line":8118},[254,41013,34353],{"class":264},[254,41015,310],{"class":260},[254,41017,34358],{"class":264},[254,41019,41020],{"class":256,"line":8124},[254,41021,34363],{"class":323},[254,41023,41024],{"class":256,"line":8151},[254,41025,33016],{"class":264},[254,41027,41028],{"class":256,"line":8156},[254,41029,34372],{"class":323},[254,41031,41032,41034,41036],{"class":256,"line":8162},[254,41033,32801],{"class":264},[254,41035,310],{"class":260},[254,41037,34381],{"class":264},[254,41039,41040],{"class":256,"line":8174},[254,41041,34386],{"class":323},[254,41043,41044,41046,41048,41050,41052,41054,41056],{"class":256,"line":8186},[254,41045,32818],{"class":264},[254,41047,310],{"class":260},[254,41049,32823],{"class":264},[254,41051,32826],{"class":5357},[254,41053,310],{"class":260},[254,41055,482],{"class":313},[254,41057,271],{"class":264},[254,41059,41060],{"class":256,"line":8198},[254,41061,34407],{"class":323},[254,41063,41064],{"class":256,"line":9857},[254,41065,34412],{"class":323},[254,41067,41068],{"class":256,"line":9882},[254,41069,34417],{"class":323},[254,41071,41072,41074,41076,41078,41080],{"class":256,"line":9905},[254,41073,34422],{"class":264},[254,41075,9618],{"class":260},[254,41077,32928],{"class":264},[254,41079,3089],{"class":260},[254,41081,34431],{"class":264},[254,41083,41084],{"class":256,"line":9929},[254,41085,34436],{"class":323},[254,41087,41088,41090,41092,41094,41096],{"class":256,"line":9934},[254,41089,34441],{"class":264},[254,41091,9618],{"class":260},[254,41093,34446],{"class":264},[254,41095,456],{"class":313},[254,41097,271],{"class":264},[254,41099,41100],{"class":256,"line":9939},[254,41101,2540],{"emptyLinePlaceholder":184},[254,41103,41104],{"class":256,"line":9944},[254,41105,34459],{"class":323},[254,41107,41108,41110,41112,41114,41116],{"class":256,"line":9953},[254,41109,34464],{"class":264},[254,41111,310],{"class":260},[254,41113,34469],{"class":264},[254,41115,848],{"class":260},[254,41117,34474],{"class":264},[254,41119,41120],{"class":256,"line":9958},[254,41121,34479],{"class":323},[254,41123,41124,41126,41128,41130],{"class":256,"line":9964},[254,41125,32592],{"class":313},[254,41127,265],{"class":264},[254,41129,34488],{"class":369},[254,41131,34491],{"class":264},[254,41133,41134],{"class":256,"line":9985},[254,41135,2540],{"emptyLinePlaceholder":184},[254,41137,41138],{"class":256,"line":9991},[254,41139,34500],{"class":323},[254,41141,41142,41144,41146,41148,41150],{"class":256,"line":10005},[254,41143,1671],{"class":260},[254,41145,31361],{"class":313},[254,41147,3089],{"class":260},[254,41149,31366],{"class":369},[254,41151,3879],{"class":264},[254,41153,41154],{"class":256,"line":10011},[254,41155,34517],{"class":323},[254,41157,41158,41160,41162],{"class":256,"line":10038},[254,41159,31430],{"class":264},[254,41161,310],{"class":260},[254,41163,41164],{"class":264},"VGG16()\n",[254,41166,41167],{"class":256,"line":10047},[254,41168,34530],{"class":323},[254,41170,41171],{"class":256,"line":10053},[254,41172,34535],{"class":323},[254,41174,41175,41177,41179],{"class":256,"line":10061},[254,41176,34540],{"class":264},[254,41178,34543],{"class":369},[254,41180,30638],{"class":264},[254,41182,41183],{"class":256,"line":10066},[254,41184,34550],{"class":323},[254,41186,41187,41189,41191],{"class":256,"line":16745},[254,41188,34163],{"class":264},[254,41190,310],{"class":260},[254,41192,34559],{"class":264},[254,41194,41195],{"class":256,"line":16751},[254,41196,34564],{"class":323},[254,41198,41199],{"class":256,"line":16774},[254,41200,34569],{"class":264},[254,41202,41203],{"class":256,"line":16780},[254,41204,2540],{"emptyLinePlaceholder":184},[254,41206,41207],{"class":256,"line":16803},[254,41208,34578],{"class":323},[254,41210,41211],{"class":256,"line":16817},[254,41212,34583],{"class":323},[254,41214,41215,41217,41219,41221,41223,41225,41227],{"class":256,"line":16837},[254,41216,31378],{"class":264},[254,41218,310],{"class":260},[254,41220,31385],{"class":369},[254,41222,1844],{"class":260},[254,41224,31390],{"class":264},[254,41226,1841],{"class":260},[254,41228,34260],{"class":369},[254,41230,41231,41233,41235],{"class":256,"line":16843},[254,41232,31430],{"class":264},[254,41234,310],{"class":260},[254,41236,32430],{"class":264},[254,41238,41239],{"class":256,"line":16854},[254,41240,34612],{"class":323},[254,41242,41243],{"class":256,"line":16877},[254,41244,34617],{"class":323},[254,41246,41247,41249,41251,41253,41255,41257,41259,41261,41263,41265,41267,41269,41271,41273,41275,41277,41279,41281,41283,41285,41287,41289,41291],{"class":256,"line":16899},[254,41248,34622],{"class":264},[254,41250,310],{"class":260},[254,41252,1154],{"class":264},[254,41254,34629],{"class":369},[254,41256,642],{"class":264},[254,41258,34634],{"class":369},[254,41260,642],{"class":264},[254,41262,34639],{"class":369},[254,41264,642],{"class":264},[254,41266,34644],{"class":369},[254,41268,642],{"class":264},[254,41270,34649],{"class":369},[254,41272,642],{"class":264},[254,41274,34654],{"class":369},[254,41276,642],{"class":264},[254,41278,34659],{"class":369},[254,41280,642],{"class":264},[254,41282,34664],{"class":369},[254,41284,642],{"class":264},[254,41286,34669],{"class":369},[254,41288,642],{"class":264},[254,41290,34674],{"class":369},[254,41292,33387],{"class":264},[254,41294,41295,41297],{"class":256,"line":16904},[254,41296,34319],{"class":260},[254,41298,33025],{"class":264},[254,41300,41301],{"class":256,"line":16910},[254,41302,34687],{"class":323},[254,41304,41305,41307,41309,41311],{"class":256,"line":16924},[254,41306,3543],{"class":260},[254,41308,34694],{"class":264},[254,41310,26184],{"class":260},[254,41312,34338],{"class":264},[254,41314,41315,41317,41319],{"class":256,"line":16937},[254,41316,32751],{"class":264},[254,41318,310],{"class":260},[254,41320,32756],{"class":264},[254,41322,41323,41325,41327],{"class":256,"line":16942},[254,41324,32766],{"class":264},[254,41326,310],{"class":260},[254,41328,32771],{"class":264},[254,41330,41331],{"class":256,"line":16956},[254,41332,2540],{"emptyLinePlaceholder":184},[254,41334,41335],{"class":256,"line":16961},[254,41336,34723],{"class":323},[254,41338,41339],{"class":256,"line":16967},[254,41340,33016],{"class":264},[254,41342,41343],{"class":256,"line":16972},[254,41344,34732],{"class":323},[254,41346,41347,41349,41351],{"class":256,"line":16986},[254,41348,32801],{"class":264},[254,41350,310],{"class":260},[254,41352,32806],{"class":264},[254,41354,41355],{"class":256,"line":16991},[254,41356,34745],{"class":323},[254,41358,41359,41361,41363,41365,41367,41369,41371],{"class":256,"line":16996},[254,41360,32818],{"class":264},[254,41362,310],{"class":260},[254,41364,32823],{"class":264},[254,41366,32826],{"class":5357},[254,41368,310],{"class":260},[254,41370,482],{"class":313},[254,41372,271],{"class":264},[254,41374,41375],{"class":256,"line":17010},[254,41376,34766],{"class":323},[254,41378,41379,41381,41383],{"class":256,"line":17022},[254,41380,34771],{"class":264},[254,41382,310],{"class":260},[254,41384,34776],{"class":264},[254,41386,41387,41389,41391],{"class":256,"line":17027},[254,41388,34781],{"class":264},[254,41390,310],{"class":260},[254,41392,34786],{"class":264},[254,41394,41395,41397,41399,41401,41403,41405,41407,41409],{"class":256,"line":17040},[254,41396,34791],{"class":313},[254,41398,265],{"class":264},[254,41400,34796],{"class":369},[254,41402,34799],{"class":264},[254,41404,34802],{"class":369},[254,41406,642],{"class":264},[254,41408,34807],{"class":369},[254,41410,34810],{"class":264},[225,41412,41414],{"id":41413},"_23googlenet","2.3.GoogLeNet",[22139,41416,41418],{"id":41417},"_231原理","2.3.1.原理",[21,41420,41421],{},[24,41422,41423],{},"网络结构",[14,41425,41426],{},[1602,41427],{"alt":174,"src":41428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-023.png",[14,41430,41431],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[14,41433,41434],{},[1602,41435],{"alt":174,"src":41436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-024.png",[14,41438,41439],{},[1602,41440],{"alt":174,"src":41441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-025.png",[14,41443,41444],{},[1602,41445],{"alt":174,"src":41446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-026.png",[21,41448,41449],{"start":175},[24,41450,41451],{},"1x1卷积的优点",[14,41453,41454],{},[1602,41455],{"alt":174,"src":41456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-027.png",[21,41458,41459],{"start":1319},[24,41460,41461],{},"全局平均池化层优点",[14,41463,41464],{},[1602,41465],{"alt":174,"src":41466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-028.png",[14,41468,41469],{},[1602,41470],{"alt":174,"src":41471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-029.png",[21,41473,41474],{"start":1334},[24,41475,41476],{},"参数详细描述",[14,41478,41479],{},[1602,41480],{"alt":174,"src":41481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-030.png",[14,41483,41484],{},[1602,41485],{"alt":174,"src":41486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-031.png",[14,41488,41489],{},[1602,41490],{"alt":174,"src":41491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-032.png",[14,41493,41494],{},[1602,41495],{"alt":174,"src":41496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-033.png",[14,41498,41499],{},[1602,41500],{"alt":174,"src":41501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-034.png",[14,41503,41504],{},[1602,41505],{"alt":174,"src":41506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-035.png",[14,41508,41509],{},[1602,41510],{"alt":174,"src":41511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-036.png",[14,41513,41514],{},[1602,41515],{"alt":174,"src":41516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-037.png",[14,41518,41519],{},[1602,41520],{"alt":174,"src":41521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-038.png",[14,41523,41524],{},[1602,41525],{"alt":174,"src":41526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-039.png",[14,41528,41529],{},[1602,41530],{"alt":174,"src":41531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-040.png",[14,41533,41534],{},[1602,41535],{"alt":174,"src":41536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-041.png",[14,41538,41539],{},[1602,41540],{"alt":174,"src":41541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-042.png",[14,41543,41544],{},[1602,41545],{"alt":174,"src":41546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-043.png",[14,41548,41549],{},[1602,41550],{"alt":174,"src":41551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-044.png",[14,41553,41554],{},[1602,41555],{"alt":174,"src":41556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-045.png",[14,41558,41559],{},[1602,41560],{"alt":174,"src":41561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-046.png",[14,41563,41564],{},[1602,41565],{"alt":174,"src":41566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-047.png",[14,41568,41569],{},[1602,41570],{"alt":174,"src":41571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-048.png",[14,41573,41574],{},[1602,41575],{"alt":174,"src":41576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-049.png",[14,41578,41579],{},[1602,41580],{"alt":174,"src":41581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-050.png",[22139,41583,41585],{"id":41584},"_232代码实现","2.3.2.代码实现",[21,41587,41588],{},[24,41589,30852],{},[14,41591,41592],{},"根据原理一步一步搭建即可",[245,41594,41596],{"className":30519,"code":41595,"language":30521,"meta":174,"style":174},"import torch\nfrom torch import nn\nfrom torchsummary import summary\n\nclass Inception(nn.Module):\n    def __init__(self,in_channels,c1,c2,c3,c4):\n        super(Inception,self).__init__()\n        self.ReLu=nn.ReLU()\n        # 路线1：定义1*1卷积\n        self.p1_1=nn.Conv2d(in_channels=in_channels,out_channels=c1,kernel_size=1)\n        # 路线2：定义1*1卷积和3*3\n        self.p2_1=nn.Conv2d(in_channels=in_channels,out_channels=c2[0],kernel_size=1)\n        self.p2_2=nn.Conv2d(in_channels=c2[0],out_channels=c2[1],kernel_size=3,padding=1)\n        # 路线3：定义1*1卷积和5*5\n        self.p3_1=nn.Conv2d(in_channels=in_channels,out_channels=c3[0],kernel_size=1)\n        self.p3_2=nn.Conv2d(in_channels=c3[0],out_channels=c3[1],kernel_size=5,padding=2)\n        # 路线4：定义3*3最大池化和1*1卷积\n        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n        self.p4_1=nn.MaxPool2d(kernel_size=3,stride=1,padding=1)\n        self.p4_2=nn.Conv2d(in_channels=in_channels,out_channels=c4,kernel_size=1)\n\n    def forward(self,x):\n        p1=self.ReLu(self.p1_1(x))\n        p2=self.ReLu(self.p2_2(self.ReLu(self.p2_1(x))))\n        p3=self.ReLu(self.p3_2(self.ReLu(self.p3_1(x))))\n        p4=self.ReLu(self.p4_2(self.p4_1(x)))\n        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n        return torch.cat((p1,p2,p3,p4),dim=1)\n\n\n# 搭建GoogLeNet网络\nclass GoogLeNet(nn.Module):\n    # 必须把Inception导入到里边\n    def __init__(self,Inception):\n        super(GoogLeNet,self).__init__()\n        self.b1=nn.Sequential(\n            nn.Conv2d(in_channels=1,out_channels=64,kernel_size=7,stride=2,padding=3),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b2=nn.Sequential(\n            nn.Conv2d(in_channels=64,out_channels=64,kernel_size=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=64,out_channels=192,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b3=nn.Sequential(\n            Inception(192,64,(96,128),(16,32),32),\n            Inception(256,128,(128,192),(32,96),64),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b4=nn.Sequential(\n            Inception(480,192,(96,208),(16,48),64),\n            Inception(512,160,(112,224),(24,64),64),\n            Inception(512,128,(128,256),(24,64),64),\n            Inception(512,112,(128,288),(32,64),64),\n            Inception(528,256,(160,320),(32,128),128),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b5=nn.Sequential(\n            Inception(832,256,(160,320),(32,128),128),\n            Inception(832,384,(192,384),(48,128),128),\n            nn.AdaptiveAvgPool2d((1,1)),\n            nn.Flatten(),\n            nn.Linear(1024,10)\n        )\n        # 对模型参数初始化\n        for m in self.modules():\n            if isinstance(m,nn.Conv2d):\n                nn.init.kaiming_normal_(m.weight,mode='fan_out',nonlinearity='relu')\n                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n                # ② mode = 'fan_out'决定使用的fan值：\n                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n                if m.bias is not None:\n                    nn.init.constant_(m.bias,0)\n                elif isinstance(m,nn.Linear):\n                    nn.init.normal_(m.weight,0,0.01)\n                    if m.bias is not None:\n                        nn.init.constant_(m.bias,0)\n    # 定义前向传播\n    def forward(self,x):\n        x=self.b1(x)\n        x=self.b2(x)\n        x=self.b3(x)\n        x=self.b4(x)\n        x=self.b5(x)\n        return x\n\n# 模型展示\nif __name__==\"__main__\":\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n    model=GoogLeNet(Inception).to(device)\n    print(summary(model,(1,224,224)))\n",[251,41597,41598,41604,41614,41624,41628,41645,41654,41669,41679,41684,41717,41722,41759,41806,41811,41847,41894,41899,41904,41939,41971,41975,41983,41999,42023,42048,42069,42074,42089,42093,42097,42102,42119,42124,42133,42148,42159,42203,42207,42235,42239,42250,42278,42282,42319,42323,42351,42355,42366,42402,42434,42462,42466,42477,42511,42543,42575,42608,42642,42670,42674,42685,42718,42750,42764,42768,42781,42785,42790,42802,42810,42832,42837,42842,42847,42852,42857,42862,42876,42884,42893,42906,42921,42930,42934,42942,42953,42964,42975,42986,42997,43003,43007,43012,43024,43044,43053],{"__ignoreMap":174},[254,41599,41600,41602],{"class":256,"line":257},[254,41601,30533],{"class":260},[254,41603,30536],{"class":264},[254,41605,41606,41608,41610,41612],{"class":256,"line":175},[254,41607,30878],{"class":260},[254,41609,30881],{"class":264},[254,41611,30533],{"class":260},[254,41613,30886],{"class":264},[254,41615,41616,41618,41620,41622],{"class":256,"line":1319},[254,41617,30878],{"class":260},[254,41619,30898],{"class":264},[254,41621,30533],{"class":260},[254,41623,30903],{"class":264},[254,41625,41626],{"class":256,"line":1334},[254,41627,2540],{"emptyLinePlaceholder":184},[254,41629,41630,41632,41635,41637,41639,41641,41643],{"class":256,"line":1340},[254,41631,14835],{"class":260},[254,41633,41634],{"class":2103}," Inception",[254,41636,265],{"class":264},[254,41638,30919],{"class":2103},[254,41640,822],{"class":264},[254,41642,30924],{"class":2103},[254,41644,30927],{"class":264},[254,41646,41647,41649,41651],{"class":256,"line":1354},[254,41648,30942],{"class":260},[254,41650,30945],{"class":313},[254,41652,41653],{"class":264},"(self,in_channels,c1,c2,c3,c4):\n",[254,41655,41656,41658,41661,41663,41665,41667],{"class":256,"line":1360},[254,41657,30958],{"class":313},[254,41659,41660],{"class":264},"(Inception,",[254,41662,30964],{"class":313},[254,41664,30967],{"class":264},[254,41666,30970],{"class":313},[254,41668,2116],{"class":264},[254,41670,41671,41673,41675,41677],{"class":256,"line":1451},[254,41672,30986],{"class":313},[254,41674,34912],{"class":264},[254,41676,310],{"class":260},[254,41678,34917],{"class":264},[254,41680,41681],{"class":256,"line":1457},[254,41682,41683],{"class":323},"        # 路线1：定义1*1卷积\n",[254,41685,41686,41688,41691,41693,41695,41697,41699,41702,41704,41706,41709,41711,41713,41715],{"class":256,"line":1469},[254,41687,30986],{"class":313},[254,41689,41690],{"class":264},".p1_1",[254,41692,310],{"class":260},[254,41694,30994],{"class":264},[254,41696,30997],{"class":5357},[254,41698,310],{"class":260},[254,41700,41701],{"class":264},"in_channels,",[254,41703,31006],{"class":5357},[254,41705,310],{"class":260},[254,41707,41708],{"class":264},"c1,",[254,41710,31015],{"class":5357},[254,41712,310],{"class":260},[254,41714,482],{"class":313},[254,41716,271],{"class":264},[254,41718,41719],{"class":256,"line":1752},[254,41720,41721],{"class":323},"        # 路线2：定义1*1卷积和3*3\n",[254,41723,41724,41726,41729,41731,41733,41735,41737,41739,41741,41743,41746,41748,41751,41753,41755,41757],{"class":256,"line":1757},[254,41725,30986],{"class":313},[254,41727,41728],{"class":264},".p2_1",[254,41730,310],{"class":260},[254,41732,30994],{"class":264},[254,41734,30997],{"class":5357},[254,41736,310],{"class":260},[254,41738,41701],{"class":264},[254,41740,31006],{"class":5357},[254,41742,310],{"class":260},[254,41744,41745],{"class":264},"c2[",[254,41747,456],{"class":313},[254,41749,41750],{"class":264},"],",[254,41752,31015],{"class":5357},[254,41754,310],{"class":260},[254,41756,482],{"class":313},[254,41758,271],{"class":264},[254,41760,41761,41763,41766,41768,41770,41772,41774,41776,41778,41780,41782,41784,41786,41788,41790,41792,41794,41796,41798,41800,41802,41804],{"class":256,"line":1763},[254,41762,30986],{"class":313},[254,41764,41765],{"class":264},".p2_2",[254,41767,310],{"class":260},[254,41769,30994],{"class":264},[254,41771,30997],{"class":5357},[254,41773,310],{"class":260},[254,41775,41745],{"class":264},[254,41777,456],{"class":313},[254,41779,41750],{"class":264},[254,41781,31006],{"class":5357},[254,41783,310],{"class":260},[254,41785,41745],{"class":264},[254,41787,482],{"class":313},[254,41789,41750],{"class":264},[254,41791,31015],{"class":5357},[254,41793,310],{"class":260},[254,41795,336],{"class":313},[254,41797,642],{"class":264},[254,41799,31024],{"class":5357},[254,41801,310],{"class":260},[254,41803,482],{"class":313},[254,41805,271],{"class":264},[254,41807,41808],{"class":256,"line":1768},[254,41809,41810],{"class":323},"        # 路线3：定义1*1卷积和5*5\n",[254,41812,41813,41815,41818,41820,41822,41824,41826,41828,41830,41832,41835,41837,41839,41841,41843,41845],{"class":256,"line":1782},[254,41814,30986],{"class":313},[254,41816,41817],{"class":264},".p3_1",[254,41819,310],{"class":260},[254,41821,30994],{"class":264},[254,41823,30997],{"class":5357},[254,41825,310],{"class":260},[254,41827,41701],{"class":264},[254,41829,31006],{"class":5357},[254,41831,310],{"class":260},[254,41833,41834],{"class":264},"c3[",[254,41836,456],{"class":313},[254,41838,41750],{"class":264},[254,41840,31015],{"class":5357},[254,41842,310],{"class":260},[254,41844,482],{"class":313},[254,41846,271],{"class":264},[254,41848,41849,41851,41854,41856,41858,41860,41862,41864,41866,41868,41870,41872,41874,41876,41878,41880,41882,41884,41886,41888,41890,41892],{"class":256,"line":1787},[254,41850,30986],{"class":313},[254,41852,41853],{"class":264},".p3_2",[254,41855,310],{"class":260},[254,41857,30994],{"class":264},[254,41859,30997],{"class":5357},[254,41861,310],{"class":260},[254,41863,41834],{"class":264},[254,41865,456],{"class":313},[254,41867,41750],{"class":264},[254,41869,31006],{"class":5357},[254,41871,310],{"class":260},[254,41873,41834],{"class":264},[254,41875,482],{"class":313},[254,41877,41750],{"class":264},[254,41879,31015],{"class":5357},[254,41881,310],{"class":260},[254,41883,583],{"class":313},[254,41885,642],{"class":264},[254,41887,31024],{"class":5357},[254,41889,310],{"class":260},[254,41891,342],{"class":313},[254,41893,271],{"class":264},[254,41895,41896],{"class":256,"line":1793},[254,41897,41898],{"class":323},"        # 路线4：定义3*3最大池化和1*1卷积\n",[254,41900,41901],{"class":256,"line":1814},[254,41902,41903],{"class":323},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[254,41905,41906,41908,41911,41913,41915,41917,41919,41921,41923,41925,41927,41929,41931,41933,41935,41937],{"class":256,"line":1819},[254,41907,30986],{"class":313},[254,41909,41910],{"class":264},".p4_1",[254,41912,310],{"class":260},[254,41914,34970],{"class":264},[254,41916,31015],{"class":5357},[254,41918,310],{"class":260},[254,41920,336],{"class":313},[254,41922,642],{"class":264},[254,41924,31070],{"class":5357},[254,41926,310],{"class":260},[254,41928,482],{"class":313},[254,41930,642],{"class":264},[254,41932,31024],{"class":5357},[254,41934,310],{"class":260},[254,41936,482],{"class":313},[254,41938,271],{"class":264},[254,41940,41941,41943,41946,41948,41950,41952,41954,41956,41958,41960,41963,41965,41967,41969],{"class":256,"line":1833},[254,41942,30986],{"class":313},[254,41944,41945],{"class":264},".p4_2",[254,41947,310],{"class":260},[254,41949,30994],{"class":264},[254,41951,30997],{"class":5357},[254,41953,310],{"class":260},[254,41955,41701],{"class":264},[254,41957,31006],{"class":5357},[254,41959,310],{"class":260},[254,41961,41962],{"class":264},"c4,",[254,41964,31015],{"class":5357},[254,41966,310],{"class":260},[254,41968,482],{"class":313},[254,41970,271],{"class":264},[254,41972,41973],{"class":256,"line":1838},[254,41974,2540],{"emptyLinePlaceholder":184},[254,41976,41977,41979,41981],{"class":256,"line":1867},[254,41978,30942],{"class":260},[254,41980,31234],{"class":2103},[254,41982,31237],{"class":264},[254,41984,41985,41988,41990,41992,41994,41996],{"class":256,"line":1872},[254,41986,41987],{"class":264},"        p1",[254,41989,310],{"class":260},[254,41991,30964],{"class":313},[254,41993,35325],{"class":264},[254,41995,30964],{"class":313},[254,41997,41998],{"class":264},".p1_1(x))\n",[254,42000,42001,42003,42005,42007,42009,42011,42014,42016,42018,42020],{"class":256,"line":1889},[254,42002,7226],{"class":264},[254,42004,310],{"class":260},[254,42006,30964],{"class":313},[254,42008,35325],{"class":264},[254,42010,30964],{"class":313},[254,42012,42013],{"class":264},".p2_2(",[254,42015,30964],{"class":313},[254,42017,35325],{"class":264},[254,42019,30964],{"class":313},[254,42021,42022],{"class":264},".p2_1(x))))\n",[254,42024,42025,42028,42030,42032,42034,42036,42039,42041,42043,42045],{"class":256,"line":1894},[254,42026,42027],{"class":264},"        p3",[254,42029,310],{"class":260},[254,42031,30964],{"class":313},[254,42033,35325],{"class":264},[254,42035,30964],{"class":313},[254,42037,42038],{"class":264},".p3_2(",[254,42040,30964],{"class":313},[254,42042,35325],{"class":264},[254,42044,30964],{"class":313},[254,42046,42047],{"class":264},".p3_1(x))))\n",[254,42049,42050,42053,42055,42057,42059,42061,42064,42066],{"class":256,"line":1899},[254,42051,42052],{"class":264},"        p4",[254,42054,310],{"class":260},[254,42056,30964],{"class":313},[254,42058,35325],{"class":264},[254,42060,30964],{"class":313},[254,42062,42063],{"class":264},".p4_2(",[254,42065,30964],{"class":313},[254,42067,42068],{"class":264},".p4_1(x)))\n",[254,42070,42071],{"class":256,"line":1904},[254,42072,42073],{"class":323},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[254,42075,42076,42078,42081,42083,42085,42087],{"class":256,"line":1918},[254,42077,14893],{"class":260},[254,42079,42080],{"class":264}," torch.cat((p1,p2,p3,p4),",[254,42082,32826],{"class":5357},[254,42084,310],{"class":260},[254,42086,482],{"class":313},[254,42088,271],{"class":264},[254,42090,42091],{"class":256,"line":1923},[254,42092,2540],{"emptyLinePlaceholder":184},[254,42094,42095],{"class":256,"line":2717},[254,42096,2540],{"emptyLinePlaceholder":184},[254,42098,42099],{"class":256,"line":2731},[254,42100,42101],{"class":323},"# 搭建GoogLeNet网络\n",[254,42103,42104,42106,42109,42111,42113,42115,42117],{"class":256,"line":2739},[254,42105,14835],{"class":260},[254,42107,42108],{"class":2103}," GoogLeNet",[254,42110,265],{"class":264},[254,42112,30919],{"class":2103},[254,42114,822],{"class":264},[254,42116,30924],{"class":2103},[254,42118,30927],{"class":264},[254,42120,42121],{"class":256,"line":2744},[254,42122,42123],{"class":323},"    # 必须把Inception导入到里边\n",[254,42125,42126,42128,42130],{"class":256,"line":2750},[254,42127,30942],{"class":260},[254,42129,30945],{"class":313},[254,42131,42132],{"class":264},"(self,Inception):\n",[254,42134,42135,42137,42140,42142,42144,42146],{"class":256,"line":2756},[254,42136,30958],{"class":313},[254,42138,42139],{"class":264},"(GoogLeNet,",[254,42141,30964],{"class":313},[254,42143,30967],{"class":264},[254,42145,30970],{"class":313},[254,42147,2116],{"class":264},[254,42149,42150,42152,42155,42157],{"class":256,"line":2761},[254,42151,30986],{"class":313},[254,42153,42154],{"class":264},".b1",[254,42156,310],{"class":260},[254,42158,38150],{"class":264},[254,42160,42161,42163,42165,42167,42169,42171,42173,42175,42177,42179,42181,42183,42185,42187,42189,42191,42193,42195,42197,42199,42201],{"class":256,"line":8089},[254,42162,38155],{"class":264},[254,42164,30997],{"class":5357},[254,42166,310],{"class":260},[254,42168,482],{"class":313},[254,42170,642],{"class":264},[254,42172,31006],{"class":5357},[254,42174,310],{"class":260},[254,42176,468],{"class":313},[254,42178,642],{"class":264},[254,42180,31015],{"class":5357},[254,42182,310],{"class":260},[254,42184,633],{"class":313},[254,42186,642],{"class":264},[254,42188,31070],{"class":5357},[254,42190,310],{"class":260},[254,42192,342],{"class":313},[254,42194,642],{"class":264},[254,42196,31024],{"class":5357},[254,42198,310],{"class":260},[254,42200,336],{"class":313},[254,42202,38188],{"class":264},[254,42204,42205],{"class":256,"line":8113},[254,42206,38193],{"class":264},[254,42208,42209,42211,42213,42215,42217,42219,42221,42223,42225,42227,42229,42231,42233],{"class":256,"line":8118},[254,42210,38238],{"class":264},[254,42212,31015],{"class":5357},[254,42214,310],{"class":260},[254,42216,336],{"class":313},[254,42218,642],{"class":264},[254,42220,31070],{"class":5357},[254,42222,310],{"class":260},[254,42224,342],{"class":313},[254,42226,642],{"class":264},[254,42228,31024],{"class":5357},[254,42230,310],{"class":260},[254,42232,482],{"class":313},[254,42234,271],{"class":264},[254,42236,42237],{"class":256,"line":8124},[254,42238,38267],{"class":264},[254,42240,42241,42243,42246,42248],{"class":256,"line":8151},[254,42242,30986],{"class":313},[254,42244,42245],{"class":264},".b2",[254,42247,310],{"class":260},[254,42249,38150],{"class":264},[254,42251,42252,42254,42256,42258,42260,42262,42264,42266,42268,42270,42272,42274,42276],{"class":256,"line":8156},[254,42253,38155],{"class":264},[254,42255,30997],{"class":5357},[254,42257,310],{"class":260},[254,42259,468],{"class":313},[254,42261,642],{"class":264},[254,42263,31006],{"class":5357},[254,42265,310],{"class":260},[254,42267,468],{"class":313},[254,42269,642],{"class":264},[254,42271,31015],{"class":5357},[254,42273,310],{"class":260},[254,42275,482],{"class":313},[254,42277,38188],{"class":264},[254,42279,42280],{"class":256,"line":8162},[254,42281,38193],{"class":264},[254,42283,42284,42286,42288,42290,42292,42294,42296,42298,42301,42303,42305,42307,42309,42311,42313,42315,42317],{"class":256,"line":8174},[254,42285,38155],{"class":264},[254,42287,30997],{"class":5357},[254,42289,310],{"class":260},[254,42291,468],{"class":313},[254,42293,642],{"class":264},[254,42295,31006],{"class":5357},[254,42297,310],{"class":260},[254,42299,42300],{"class":313},"192",[254,42302,642],{"class":264},[254,42304,31015],{"class":5357},[254,42306,310],{"class":260},[254,42308,336],{"class":313},[254,42310,642],{"class":264},[254,42312,31024],{"class":5357},[254,42314,310],{"class":260},[254,42316,482],{"class":313},[254,42318,38188],{"class":264},[254,42320,42321],{"class":256,"line":8186},[254,42322,38193],{"class":264},[254,42324,42325,42327,42329,42331,42333,42335,42337,42339,42341,42343,42345,42347,42349],{"class":256,"line":8198},[254,42326,38238],{"class":264},[254,42328,31015],{"class":5357},[254,42330,310],{"class":260},[254,42332,336],{"class":313},[254,42334,642],{"class":264},[254,42336,31070],{"class":5357},[254,42338,310],{"class":260},[254,42340,342],{"class":313},[254,42342,642],{"class":264},[254,42344,31024],{"class":5357},[254,42346,310],{"class":260},[254,42348,482],{"class":313},[254,42350,271],{"class":264},[254,42352,42353],{"class":256,"line":9857},[254,42354,38267],{"class":264},[254,42356,42357,42359,42362,42364],{"class":256,"line":9882},[254,42358,30986],{"class":313},[254,42360,42361],{"class":264},".b3",[254,42363,310],{"class":260},[254,42365,38150],{"class":264},[254,42367,42368,42371,42373,42375,42377,42380,42382,42384,42386,42389,42391,42393,42395,42398,42400],{"class":256,"line":9905},[254,42369,42370],{"class":264},"            Inception(",[254,42372,42300],{"class":313},[254,42374,642],{"class":264},[254,42376,468],{"class":313},[254,42378,42379],{"class":264},",(",[254,42381,474],{"class":313},[254,42383,642],{"class":264},[254,42385,32211],{"class":313},[254,42387,42388],{"class":264},"),(",[254,42390,865],{"class":313},[254,42392,642],{"class":264},[254,42394,462],{"class":313},[254,42396,42397],{"class":264},"),",[254,42399,462],{"class":313},[254,42401,38188],{"class":264},[254,42403,42404,42406,42408,42410,42412,42414,42416,42418,42420,42422,42424,42426,42428,42430,42432],{"class":256,"line":9929},[254,42405,42370],{"class":264},[254,42407,35011],{"class":313},[254,42409,642],{"class":264},[254,42411,32211],{"class":313},[254,42413,42379],{"class":264},[254,42415,32211],{"class":313},[254,42417,642],{"class":264},[254,42419,42300],{"class":313},[254,42421,42388],{"class":264},[254,42423,462],{"class":313},[254,42425,642],{"class":264},[254,42427,474],{"class":313},[254,42429,42397],{"class":264},[254,42431,468],{"class":313},[254,42433,38188],{"class":264},[254,42435,42436,42438,42440,42442,42444,42446,42448,42450,42452,42454,42456,42458,42460],{"class":256,"line":9934},[254,42437,38238],{"class":264},[254,42439,31015],{"class":5357},[254,42441,310],{"class":260},[254,42443,336],{"class":313},[254,42445,642],{"class":264},[254,42447,31070],{"class":5357},[254,42449,310],{"class":260},[254,42451,342],{"class":313},[254,42453,642],{"class":264},[254,42455,31024],{"class":5357},[254,42457,310],{"class":260},[254,42459,482],{"class":313},[254,42461,271],{"class":264},[254,42463,42464],{"class":256,"line":9939},[254,42465,38267],{"class":264},[254,42467,42468,42470,42473,42475],{"class":256,"line":9944},[254,42469,30986],{"class":313},[254,42471,42472],{"class":264},".b4",[254,42474,310],{"class":260},[254,42476,38150],{"class":264},[254,42478,42479,42481,42484,42486,42488,42490,42492,42494,42497,42499,42501,42503,42505,42507,42509],{"class":256,"line":9953},[254,42480,42370],{"class":264},[254,42482,42483],{"class":313},"480",[254,42485,642],{"class":264},[254,42487,42300],{"class":313},[254,42489,42379],{"class":264},[254,42491,474],{"class":313},[254,42493,642],{"class":264},[254,42495,42496],{"class":313},"208",[254,42498,42388],{"class":264},[254,42500,865],{"class":313},[254,42502,642],{"class":264},[254,42504,871],{"class":313},[254,42506,42397],{"class":264},[254,42508,468],{"class":313},[254,42510,38188],{"class":264},[254,42512,42513,42515,42517,42519,42521,42523,42525,42527,42529,42531,42533,42535,42537,42539,42541],{"class":256,"line":9958},[254,42514,42370],{"class":264},[254,42516,38598],{"class":313},[254,42518,642],{"class":264},[254,42520,21189],{"class":313},[254,42522,42379],{"class":264},[254,42524,882],{"class":313},[254,42526,642],{"class":264},[254,42528,31642],{"class":313},[254,42530,42388],{"class":264},[254,42532,1064],{"class":313},[254,42534,642],{"class":264},[254,42536,468],{"class":313},[254,42538,42397],{"class":264},[254,42540,468],{"class":313},[254,42542,38188],{"class":264},[254,42544,42545,42547,42549,42551,42553,42555,42557,42559,42561,42563,42565,42567,42569,42571,42573],{"class":256,"line":9964},[254,42546,42370],{"class":264},[254,42548,38598],{"class":313},[254,42550,642],{"class":264},[254,42552,32211],{"class":313},[254,42554,42379],{"class":264},[254,42556,32211],{"class":313},[254,42558,642],{"class":264},[254,42560,35011],{"class":313},[254,42562,42388],{"class":264},[254,42564,1064],{"class":313},[254,42566,642],{"class":264},[254,42568,468],{"class":313},[254,42570,42397],{"class":264},[254,42572,468],{"class":313},[254,42574,38188],{"class":264},[254,42576,42577,42579,42581,42583,42585,42587,42589,42591,42594,42596,42598,42600,42602,42604,42606],{"class":256,"line":9985},[254,42578,42370],{"class":264},[254,42580,38598],{"class":313},[254,42582,642],{"class":264},[254,42584,882],{"class":313},[254,42586,42379],{"class":264},[254,42588,32211],{"class":313},[254,42590,642],{"class":264},[254,42592,42593],{"class":313},"288",[254,42595,42388],{"class":264},[254,42597,462],{"class":313},[254,42599,642],{"class":264},[254,42601,468],{"class":313},[254,42603,42397],{"class":264},[254,42605,468],{"class":313},[254,42607,38188],{"class":264},[254,42609,42610,42612,42615,42617,42619,42621,42623,42625,42628,42630,42632,42634,42636,42638,42640],{"class":256,"line":9991},[254,42611,42370],{"class":264},[254,42613,42614],{"class":313},"528",[254,42616,642],{"class":264},[254,42618,35011],{"class":313},[254,42620,42379],{"class":264},[254,42622,21189],{"class":313},[254,42624,642],{"class":264},[254,42626,42627],{"class":313},"320",[254,42629,42388],{"class":264},[254,42631,462],{"class":313},[254,42633,642],{"class":264},[254,42635,32211],{"class":313},[254,42637,42397],{"class":264},[254,42639,32211],{"class":313},[254,42641,38188],{"class":264},[254,42643,42644,42646,42648,42650,42652,42654,42656,42658,42660,42662,42664,42666,42668],{"class":256,"line":10005},[254,42645,38238],{"class":264},[254,42647,31015],{"class":5357},[254,42649,310],{"class":260},[254,42651,336],{"class":313},[254,42653,642],{"class":264},[254,42655,31070],{"class":5357},[254,42657,310],{"class":260},[254,42659,342],{"class":313},[254,42661,642],{"class":264},[254,42663,31024],{"class":5357},[254,42665,310],{"class":260},[254,42667,482],{"class":313},[254,42669,271],{"class":264},[254,42671,42672],{"class":256,"line":10011},[254,42673,38267],{"class":264},[254,42675,42676,42678,42681,42683],{"class":256,"line":10038},[254,42677,30986],{"class":313},[254,42679,42680],{"class":264},".b5",[254,42682,310],{"class":260},[254,42684,38150],{"class":264},[254,42686,42687,42689,42692,42694,42696,42698,42700,42702,42704,42706,42708,42710,42712,42714,42716],{"class":256,"line":10047},[254,42688,42370],{"class":264},[254,42690,42691],{"class":313},"832",[254,42693,642],{"class":264},[254,42695,35011],{"class":313},[254,42697,42379],{"class":264},[254,42699,21189],{"class":313},[254,42701,642],{"class":264},[254,42703,42627],{"class":313},[254,42705,42388],{"class":264},[254,42707,462],{"class":313},[254,42709,642],{"class":264},[254,42711,32211],{"class":313},[254,42713,42397],{"class":264},[254,42715,32211],{"class":313},[254,42717,38188],{"class":264},[254,42719,42720,42722,42724,42726,42728,42730,42732,42734,42736,42738,42740,42742,42744,42746,42748],{"class":256,"line":10053},[254,42721,42370],{"class":264},[254,42723,42691],{"class":313},[254,42725,642],{"class":264},[254,42727,35081],{"class":313},[254,42729,42379],{"class":264},[254,42731,42300],{"class":313},[254,42733,642],{"class":264},[254,42735,35081],{"class":313},[254,42737,42388],{"class":264},[254,42739,871],{"class":313},[254,42741,642],{"class":264},[254,42743,32211],{"class":313},[254,42745,42397],{"class":264},[254,42747,32211],{"class":313},[254,42749,38188],{"class":264},[254,42751,42752,42755,42757,42759,42761],{"class":256,"line":10061},[254,42753,42754],{"class":264},"            nn.AdaptiveAvgPool2d((",[254,42756,482],{"class":313},[254,42758,642],{"class":264},[254,42760,482],{"class":313},[254,42762,42763],{"class":264},")),\n",[254,42765,42766],{"class":256,"line":10066},[254,42767,38931],{"class":264},[254,42769,42770,42772,42775,42777,42779],{"class":256,"line":16745},[254,42771,38936],{"class":264},[254,42773,42774],{"class":313},"1024",[254,42776,642],{"class":264},[254,42778,710],{"class":313},[254,42780,271],{"class":264},[254,42782,42783],{"class":256,"line":16751},[254,42784,38267],{"class":264},[254,42786,42787],{"class":256,"line":16774},[254,42788,42789],{"class":323},"        # 对模型参数初始化\n",[254,42791,42792,42794,42796,42798,42800],{"class":256,"line":16780},[254,42793,3543],{"class":260},[254,42795,39009],{"class":264},[254,42797,26184],{"class":260},[254,42799,39014],{"class":313},[254,42801,39017],{"class":264},[254,42803,42804,42806,42808],{"class":256,"line":16803},[254,42805,4782],{"class":260},[254,42807,39029],{"class":313},[254,42809,39032],{"class":264},[254,42811,42812,42814,42817,42819,42822,42824,42826,42828,42830],{"class":256,"line":16817},[254,42813,39042],{"class":264},[254,42815,42816],{"class":5357},"mode",[254,42818,310],{"class":260},[254,42820,42821],{"class":369},"'fan_out'",[254,42823,642],{"class":264},[254,42825,39045],{"class":5357},[254,42827,310],{"class":260},[254,42829,39050],{"class":369},[254,42831,271],{"class":264},[254,42833,42834],{"class":256,"line":16837},[254,42835,42836],{"class":323},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[254,42838,42839],{"class":256,"line":16843},[254,42840,42841],{"class":323},"                # ② mode = 'fan_out'决定使用的fan值：\n",[254,42843,42844],{"class":256,"line":16854},[254,42845,42846],{"class":323},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[254,42848,42849],{"class":256,"line":16877},[254,42850,42851],{"class":323},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[254,42853,42854],{"class":256,"line":16899},[254,42855,42856],{"class":323},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[254,42858,42859],{"class":256,"line":16904},[254,42860,42861],{"class":323},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[254,42863,42864,42866,42868,42870,42872,42874],{"class":256,"line":16910},[254,42865,39062],{"class":260},[254,42867,39065],{"class":264},[254,42869,39068],{"class":260},[254,42871,39071],{"class":260},[254,42873,39074],{"class":313},[254,42875,3879],{"class":264},[254,42877,42878,42880,42882],{"class":256,"line":16924},[254,42879,39086],{"class":264},[254,42881,456],{"class":313},[254,42883,271],{"class":264},[254,42885,42886,42889,42891],{"class":256,"line":16937},[254,42887,42888],{"class":260},"                elif",[254,42890,39029],{"class":313},[254,42892,39105],{"class":264},[254,42894,42895,42898,42900,42902,42904],{"class":256,"line":16942},[254,42896,42897],{"class":264},"                    nn.init.normal_(m.weight,",[254,42899,456],{"class":313},[254,42901,642],{"class":264},[254,42903,39127],{"class":313},[254,42905,271],{"class":264},[254,42907,42908,42911,42913,42915,42917,42919],{"class":256,"line":16956},[254,42909,42910],{"class":260},"                    if",[254,42912,39065],{"class":264},[254,42914,39068],{"class":260},[254,42916,39071],{"class":260},[254,42918,39074],{"class":313},[254,42920,3879],{"class":264},[254,42922,42923,42926,42928],{"class":256,"line":16961},[254,42924,42925],{"class":264},"                        nn.init.constant_(m.bias,",[254,42927,456],{"class":313},[254,42929,271],{"class":264},[254,42931,42932],{"class":256,"line":16967},[254,42933,35306],{"class":323},[254,42935,42936,42938,42940],{"class":256,"line":16972},[254,42937,30942],{"class":260},[254,42939,31234],{"class":2103},[254,42941,31237],{"class":264},[254,42943,42944,42946,42948,42950],{"class":256,"line":16986},[254,42945,31242],{"class":264},[254,42947,310],{"class":260},[254,42949,30964],{"class":313},[254,42951,42952],{"class":264},".b1(x)\n",[254,42954,42955,42957,42959,42961],{"class":256,"line":16991},[254,42956,31242],{"class":264},[254,42958,310],{"class":260},[254,42960,30964],{"class":313},[254,42962,42963],{"class":264},".b2(x)\n",[254,42965,42966,42968,42970,42972],{"class":256,"line":16996},[254,42967,31242],{"class":264},[254,42969,310],{"class":260},[254,42971,30964],{"class":313},[254,42973,42974],{"class":264},".b3(x)\n",[254,42976,42977,42979,42981,42983],{"class":256,"line":17010},[254,42978,31242],{"class":264},[254,42980,310],{"class":260},[254,42982,30964],{"class":313},[254,42984,42985],{"class":264},".b4(x)\n",[254,42987,42988,42990,42992,42994],{"class":256,"line":17022},[254,42989,31242],{"class":264},[254,42991,310],{"class":260},[254,42993,30964],{"class":313},[254,42995,42996],{"class":264},".b5(x)\n",[254,42998,42999,43001],{"class":256,"line":17027},[254,43000,14893],{"class":260},[254,43002,31350],{"class":264},[254,43004,43005],{"class":256,"line":17040},[254,43006,2540],{"emptyLinePlaceholder":184},[254,43008,43009],{"class":256,"line":17045},[254,43010,43011],{"class":323},"# 模型展示\n",[254,43013,43014,43016,43018,43020,43022],{"class":256,"line":17050},[254,43015,1671],{"class":260},[254,43017,31361],{"class":313},[254,43019,3089],{"class":260},[254,43021,31366],{"class":369},[254,43023,3879],{"class":264},[254,43025,43026,43028,43030,43032,43034,43036,43038,43040,43042],{"class":256,"line":17055},[254,43027,31378],{"class":264},[254,43029,310],{"class":260},[254,43031,30592],{"class":264},[254,43033,31385],{"class":369},[254,43035,1844],{"class":260},[254,43037,31390],{"class":264},[254,43039,1841],{"class":260},[254,43041,30617],{"class":369},[254,43043,271],{"class":264},[254,43045,43046,43048,43050],{"class":256,"line":17068},[254,43047,31430],{"class":264},[254,43049,310],{"class":260},[254,43051,43052],{"class":264},"GoogLeNet(Inception).to(device)\n",[254,43054,43055,43057,43059,43061,43063,43065,43067,43069],{"class":256,"line":17073},[254,43056,31440],{"class":313},[254,43058,31443],{"class":264},[254,43060,482],{"class":313},[254,43062,642],{"class":264},[254,43064,31642],{"class":313},[254,43066,642],{"class":264},[254,43068,31642],{"class":313},[254,43070,31456],{"class":264},[21,43072,43073],{"start":175},[24,43074,39324],{},[245,43076,43078],{"className":30519,"code":43077,"language":30521,"meta":174,"style":174},"import copy\nimport time\nimport pandas as pd\nimport torch\nfrom torch.utils.data import Dataset\nfrom torchvision.datasets import FashionMNIST\nfrom torchvision import transforms\nimport torch.utils.data as Data\nimport matplotlib.pyplot as plt\n# 导入模型\nfrom model import GoogLeNet, Inception\nfrom torch import nn\n\n\n# 处理训练集与验证集函数--->划分数据集\ndef train_val_data_process():\n    train_data=FashionMNIST('.\u002Fdata',\n                            train=True,\n                            transform=transforms.Compose([transforms.Resize(size=227),transforms.ToTensor()]),\n                            download=True)\n    train_data,val_data=Data.random_split(train_data,[round(0.8*len(train_data)),round(0.2*len(train_data))])\n    train_dataloader = Data.DataLoader(dataset=train_data,\n                                       batch_size=32,\n                                       shuffle=True,\n                                       # 规定8个进程\n                                       num_workers=8)\n    val_dataloader=Data.DataLoader(dataset=val_data,\n                                   batch_size=32,\n                                   shuffle=True,\n                                   num_workers=8)\n    return train_dataloader,val_dataloader\n\n# 验证是否出错\n# train_val_data_process()\n\n# 定义模型训练函数\ndef train_model_process(model,train_dataloader,val_dataloader,num_epochs):\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else 'cpu')\n\n\n    # 定义优化器\n    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n    # lr为学习率\n    optimizer=torch.optim.Adam(model.parameters(),lr=0.001)\n\n    # 定义损失函数使用交叉熵损失函数\n    criterion=nn.CrossEntropyLoss()\n\n    # 将模型放到GPU中进行训练\n    model=model.to(device)\n    # 复制当前模型的参数\n    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n    best_model_wts=copy.deepcopy(model.state_dict())\n\n\n    # 初始化参数\n    # 最高准确度\n    best_acc=0.0\n    # 训练集损失列表\n    train_loss_all=[]\n    # 验证集函数列表\n    val_loss_all=[]\n    # 训练集准确度列表\n    train_acc_all=[]\n    # 验证集准确度列表\n    val_acc_all=[]\n\n    # 保存当前时间--->方便看每轮训练的时间\n    since=time.time()\n\n\n    # 准备工作完成--->开始训练模型\n    for epoch in range(num_epochs):\n        print(\"Epoch {}\u002F{}\".format(epoch,num_epochs-1))\n        print(\"-\"*10)\n\n        # 初始化参数\n        # 训练集损失函数\n        train_loss=0.0\n        # 训练集准确度\n        train_corrects=0\n        # 验证集损失函数\n        val_loss=0.0\n        # 验证集准确度\n        val_corrects=0\n        # 训练集样本数量\n        train_num=0\n        # 验证集样本数量\n        val_num=0\n        # 将数据放到设备,并开始训练\n        for step,(b_x,b_y) in enumerate(train_dataloader):\n            # 将特征放入到训练设备\n            b_x=b_x.to(device)\n            # 将标签放入到训练设备当中\n            b_y=b_y.to(device)\n            # 设置模型为训练模式\n            model.train()\n            # 将数据放到模型当中,开始前向传播\n            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n            output=model(b_x)\n            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算每一个batch的损失函数\n            loss=criterion(output,b_y)\n            # 将梯度初始化为0\n            optimizer.zero_grad()\n            # 梯度置为0后再进行反向传播\n            loss.backward()\n            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n            optimizer.step()\n            # loss.item()指的是batch的平均损失\n            train_loss+=loss.item()*b_x.size(0)\n            # 计算每个批次中正确预测的数量\n            train_corrects+=torch.sum(pre_lab==b_y.data)\n            # 计算目前为止一共处理了多少样本\n            train_num+=b_x.size(0)\n        # 验证数据\n        for step ,(b_x,b_y) in enumerate(val_dataloader):\n            # 将特征放到验证设备当中\n            b_x=b_x.to(device)\n            # 将标签放到放到训练设备当中\n            b_y=b_y.to(device)\n            # 开启验证模式，设置模型为评估模式\n            model.eval()\n            # 验证时不计算梯度以节省内存\u002F计算\n            with torch.no_grad():\n                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n                output=model(b_x)\n                # 查找每一行中最大值对应的下标\n                pre_lab=torch.argmax(output,dim=1)\n                # 计算验证集上的当前 batch 损失\n                val_batch_loss=criterion(output,b_y)\n                # 对损失函数进行累加（按样本数加权）\n                val_loss+=val_batch_loss.item()*b_x.size(0)\n                val_corrects+=torch.sum(pre_lab==b_y.data)\n            # 当前用于验证的样本数量\n            val_num+=b_x.size(0)\n        # 计算并保存每一次迭代的loss值和准确率\n        # 计算并保存训练集的loss值\n        train_loss_all.append(train_loss\u002Ftrain_num)\n        # 取双精度\n        # 计算并保存训练集的准确率\n        train_acc_all.append(train_corrects.double().item()\u002Ftrain_num)\n        # 计算并保存验证集的loss值\n        val_loss_all.append(val_loss\u002Fval_num)\n        # 计算并保存验证集的准确率\n        val_acc_all.append(val_corrects.double().item()\u002Fval_num)\n\n        # 打印训练一轮的loss值和准确率\n        print('{}train loss:{:.4f} train acc:{:.4f}'.format(epoch,train_loss_all[-1],train_acc_all[-1]))\n        print('{}val loss:{:.4f} val acc:{:.4f}'.format(epoch,val_loss_all[-1],val_acc_all[-1]))\n\n        # 判断准确度--->保存最优模型\n        if val_acc_all[-1]>best_acc:\n            # 保存当前模型准确度\n            best_acc:float=val_acc_all[-1]\n            # 保存当前的准确度\n            # model.state_dict()是当前模型的所有参数（权重和偏置）\n            best_model_wts=copy.deepcopy(model.state_dict())\n\n        # 计算耗时\n        time_use=time.time()-since\n        print('训练和验证耗费的时间{:.0f}m{:.0f}s'.format(time_use\u002F\u002F60,time_use%60))\n    # 选择最优参数并保存\n    # 保存最佳模型权重字典\n    torch.save(best_model_wts,'.\u002Fbest_model.pth')\n    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n    train_process=pd.DataFrame(data={\n        \"epoch\":range(num_epochs),\n        \"train_loss_all\":train_loss_all,\n        \"val_loss_all\":val_loss_all,\n        \"train_acc_all\":train_acc_all,\n        \"val_acc_all\":val_acc_all\n    })\n    # 返回训练保存的过程\n    return train_process\n\n# 将loss值和精度按照图片的形式展示出来\ndef matplot_acc_loss(train_process):\n    # 设置图的大小\n    plt.figure(figsize=(12,4))\n    # 设置图中有几张图\n    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n    # ①loss图\n    plt.subplot(1,2,1)\n    # 补充:\n    # plt.subplot(nrows, ncols, index)\n    # nrows：行数\n    # ncols：列数\n    # index：目前选中第几个子图（从1开始）\n    plt.plot(train_process[\"epoch\"],train_process.train_loss_all,'ro-',label='train loss')\n    plt.plot(train_process[\"epoch\"],train_process.val_loss_all,'bs--',label='val loss')\n    # 添加一个图例\n    plt.legend()\n    # 给轴添加标签\n    plt.xlabel('epoch')\n    plt.ylabel('loss')\n    # ②准确度图\n    plt.subplot(1,2,2)\n    plt.plot(train_process[\"epoch\"],train_process.train_acc_all,'ro-',label='train acc')\n    plt.plot(train_process[\"epoch\"],train_process.val_acc_all,'bs--',label='val acc')\n    # 添加图例\n    plt.legend()\n    plt.xlabel(\"epoch\")\n    plt.ylabel(\"acc\")\n    plt.show()\n\n# 正式开始训练:\nif __name__==\"__main__\":\n    # 将模型实例化\n    GoogLeNet=GoogLeNet(Inception)\n    train_dataloader,val_dataloader=train_val_data_process()\n    train_process=train_model_process(GoogLeNet,train_dataloader,val_dataloader,num_epochs=30)\n    matplot_acc_loss(train_process)\n",[251,43079,43080,43086,43092,43102,43108,43118,43128,43138,43148,43158,43162,43173,43183,43187,43191,43195,43203,43215,43225,43241,43251,43283,43297,43307,43317,43321,43331,43345,43355,43365,43375,43381,43385,43389,43393,43397,43401,43409,43429,43433,43437,43441,43445,43449,43465,43469,43473,43481,43485,43489,43497,43501,43505,43509,43517,43521,43525,43529,43533,43541,43545,43553,43557,43565,43569,43577,43581,43589,43593,43597,43605,43609,43613,43617,43629,43653,43667,43671,43675,43679,43687,43691,43699,43703,43711,43715,43723,43727,43735,43739,43747,43751,43763,43767,43775,43779,43787,43791,43795,43799,43803,43811,43815,43831,43835,43843,43847,43851,43855,43859,43863,43867,43871,43887,43891,43903,43907,43919,43923,43935,43939,43947,43951,43959,43963,43967,43971,43977,43981,43989,43993,44009,44013,44021,44025,44041,44053,44057,44069,44073,44077,44085,44089,44093,44101,44105,44113,44117,44125,44129,44133,44175,44217,44221,44225,44241,44245,44261,44265,44269,44277,44281,44285,44297,44335,44339,44343,44351,44355,44369,44379,44385,44391,44397,44403,44407,44411,44417,44421,44425,44433,44437,44455,44459,44463,44467,44483,44487,44491,44495,44499,44503,44523,44543,44547,44551,44555,44563,44571,44575,44591,44611,44631,44635,44639,44647,44655,44659,44663,44667,44679,44683,44693,44701,44718],{"__ignoreMap":174},[254,43081,43082,43084],{"class":256,"line":257},[254,43083,30533],{"class":260},[254,43085,31963],{"class":264},[254,43087,43088,43090],{"class":256,"line":175},[254,43089,30533],{"class":260},[254,43091,31970],{"class":264},[254,43093,43094,43096,43098,43100],{"class":256,"line":1319},[254,43095,30533],{"class":260},[254,43097,31981],{"class":264},[254,43099,31524],{"class":260},[254,43101,31986],{"class":264},[254,43103,43104,43106],{"class":256,"line":1334},[254,43105,30533],{"class":260},[254,43107,30536],{"class":264},[254,43109,43110,43112,43114,43116],{"class":256,"line":1340},[254,43111,30878],{"class":260},[254,43113,31556],{"class":264},[254,43115,30533],{"class":260},[254,43117,32003],{"class":264},[254,43119,43120,43122,43124,43126],{"class":256,"line":1354},[254,43121,30878],{"class":260},[254,43123,31509],{"class":264},[254,43125,30533],{"class":260},[254,43127,31514],{"class":264},[254,43129,43130,43132,43134,43136],{"class":256,"line":1360},[254,43131,30878],{"class":260},[254,43133,31539],{"class":264},[254,43135,30533],{"class":260},[254,43137,31544],{"class":264},[254,43139,43140,43142,43144,43146],{"class":256,"line":1451},[254,43141,30533],{"class":260},[254,43143,31556],{"class":264},[254,43145,31524],{"class":260},[254,43147,31561],{"class":264},[254,43149,43150,43152,43154,43156],{"class":256,"line":1457},[254,43151,30533],{"class":260},[254,43153,31573],{"class":264},[254,43155,31524],{"class":260},[254,43157,31578],{"class":264},[254,43159,43160],{"class":256,"line":1469},[254,43161,32048],{"class":323},[254,43163,43164,43166,43168,43170],{"class":256,"line":1752},[254,43165,30878],{"class":260},[254,43167,32055],{"class":264},[254,43169,30533],{"class":260},[254,43171,43172],{"class":264}," GoogLeNet, Inception\n",[254,43174,43175,43177,43179,43181],{"class":256,"line":1757},[254,43176,30878],{"class":260},[254,43178,30881],{"class":264},[254,43180,30533],{"class":260},[254,43182,30886],{"class":264},[254,43184,43185],{"class":256,"line":1763},[254,43186,2540],{"emptyLinePlaceholder":184},[254,43188,43189],{"class":256,"line":1768},[254,43190,2540],{"emptyLinePlaceholder":184},[254,43192,43193],{"class":256,"line":1782},[254,43194,32083],{"class":323},[254,43196,43197,43199,43201],{"class":256,"line":1787},[254,43198,32088],{"class":260},[254,43200,32091],{"class":2103},[254,43202,32094],{"class":264},[254,43204,43205,43207,43209,43211,43213],{"class":256,"line":1793},[254,43206,32099],{"class":264},[254,43208,310],{"class":260},[254,43210,31596],{"class":264},[254,43212,31604],{"class":369},[254,43214,31607],{"class":264},[254,43216,43217,43219,43221,43223],{"class":256,"line":1814},[254,43218,32112],{"class":5357},[254,43220,310],{"class":260},[254,43222,31617],{"class":313},[254,43224,31607],{"class":264},[254,43226,43227,43229,43231,43233,43235,43237,43239],{"class":256,"line":1819},[254,43228,32123],{"class":5357},[254,43230,310],{"class":260},[254,43232,31634],{"class":264},[254,43234,31637],{"class":5357},[254,43236,310],{"class":260},[254,43238,35590],{"class":313},[254,43240,31645],{"class":264},[254,43242,43243,43245,43247,43249],{"class":256,"line":1833},[254,43244,32140],{"class":5357},[254,43246,310],{"class":260},[254,43248,31617],{"class":313},[254,43250,271],{"class":264},[254,43252,43253,43255,43257,43259,43261,43263,43265,43267,43269,43271,43273,43275,43277,43279,43281],{"class":256,"line":1838},[254,43254,32151],{"class":264},[254,43256,310],{"class":260},[254,43258,32156],{"class":264},[254,43260,32159],{"class":313},[254,43262,265],{"class":264},[254,43264,32164],{"class":313},[254,43266,719],{"class":260},[254,43268,7499],{"class":313},[254,43270,32171],{"class":264},[254,43272,32159],{"class":313},[254,43274,265],{"class":264},[254,43276,32178],{"class":313},[254,43278,719],{"class":260},[254,43280,7499],{"class":313},[254,43282,32185],{"class":264},[254,43284,43285,43287,43289,43291,43293,43295],{"class":256,"line":1867},[254,43286,32190],{"class":264},[254,43288,310],{"class":260},[254,43290,32195],{"class":264},[254,43292,31678],{"class":5357},[254,43294,310],{"class":260},[254,43296,31683],{"class":264},[254,43298,43299,43301,43303,43305],{"class":256,"line":1872},[254,43300,32206],{"class":5357},[254,43302,310],{"class":260},[254,43304,462],{"class":313},[254,43306,31607],{"class":264},[254,43308,43309,43311,43313,43315],{"class":256,"line":1889},[254,43310,32218],{"class":5357},[254,43312,310],{"class":260},[254,43314,31617],{"class":313},[254,43316,31607],{"class":264},[254,43318,43319],{"class":256,"line":1894},[254,43320,32229],{"class":323},[254,43322,43323,43325,43327,43329],{"class":256,"line":1899},[254,43324,32234],{"class":5357},[254,43326,310],{"class":260},[254,43328,659],{"class":313},[254,43330,271],{"class":264},[254,43332,43333,43335,43337,43339,43341,43343],{"class":256,"line":1904},[254,43334,32245],{"class":264},[254,43336,310],{"class":260},[254,43338,31675],{"class":264},[254,43340,31678],{"class":5357},[254,43342,310],{"class":260},[254,43344,32256],{"class":264},[254,43346,43347,43349,43351,43353],{"class":256,"line":1918},[254,43348,32261],{"class":5357},[254,43350,310],{"class":260},[254,43352,462],{"class":313},[254,43354,31607],{"class":264},[254,43356,43357,43359,43361,43363],{"class":256,"line":1923},[254,43358,32272],{"class":5357},[254,43360,310],{"class":260},[254,43362,31617],{"class":313},[254,43364,31607],{"class":264},[254,43366,43367,43369,43371,43373],{"class":256,"line":2717},[254,43368,32283],{"class":5357},[254,43370,310],{"class":260},[254,43372,659],{"class":313},[254,43374,271],{"class":264},[254,43376,43377,43379],{"class":256,"line":2731},[254,43378,4230],{"class":260},[254,43380,32296],{"class":264},[254,43382,43383],{"class":256,"line":2739},[254,43384,2540],{"emptyLinePlaceholder":184},[254,43386,43387],{"class":256,"line":2744},[254,43388,32305],{"class":323},[254,43390,43391],{"class":256,"line":2750},[254,43392,32310],{"class":323},[254,43394,43395],{"class":256,"line":2756},[254,43396,2540],{"emptyLinePlaceholder":184},[254,43398,43399],{"class":256,"line":2761},[254,43400,32319],{"class":323},[254,43402,43403,43405,43407],{"class":256,"line":8089},[254,43404,32088],{"class":260},[254,43406,32326],{"class":2103},[254,43408,32329],{"class":264},[254,43410,43411,43413,43415,43417,43419,43421,43423,43425,43427],{"class":256,"line":8113},[254,43412,31378],{"class":264},[254,43414,310],{"class":260},[254,43416,30592],{"class":264},[254,43418,31385],{"class":369},[254,43420,1844],{"class":260},[254,43422,31390],{"class":264},[254,43424,1841],{"class":260},[254,43426,32348],{"class":369},[254,43428,271],{"class":264},[254,43430,43431],{"class":256,"line":8118},[254,43432,2540],{"emptyLinePlaceholder":184},[254,43434,43435],{"class":256,"line":8124},[254,43436,2540],{"emptyLinePlaceholder":184},[254,43438,43439],{"class":256,"line":8151},[254,43440,32363],{"class":323},[254,43442,43443],{"class":256,"line":8156},[254,43444,32368],{"class":323},[254,43446,43447],{"class":256,"line":8162},[254,43448,32373],{"class":323},[254,43450,43451,43453,43455,43457,43459,43461,43463],{"class":256,"line":8174},[254,43452,32378],{"class":264},[254,43454,310],{"class":260},[254,43456,32383],{"class":264},[254,43458,32386],{"class":5357},[254,43460,310],{"class":260},[254,43462,32391],{"class":313},[254,43464,271],{"class":264},[254,43466,43467],{"class":256,"line":8186},[254,43468,2540],{"emptyLinePlaceholder":184},[254,43470,43471],{"class":256,"line":8198},[254,43472,32402],{"class":323},[254,43474,43475,43477,43479],{"class":256,"line":9857},[254,43476,32407],{"class":264},[254,43478,310],{"class":260},[254,43480,32412],{"class":264},[254,43482,43483],{"class":256,"line":9882},[254,43484,2540],{"emptyLinePlaceholder":184},[254,43486,43487],{"class":256,"line":9905},[254,43488,32421],{"class":323},[254,43490,43491,43493,43495],{"class":256,"line":9929},[254,43492,31430],{"class":264},[254,43494,310],{"class":260},[254,43496,32430],{"class":264},[254,43498,43499],{"class":256,"line":9934},[254,43500,32435],{"class":323},[254,43502,43503],{"class":256,"line":9939},[254,43504,32440],{"class":323},[254,43506,43507],{"class":256,"line":9944},[254,43508,32445],{"class":323},[254,43510,43511,43513,43515],{"class":256,"line":9953},[254,43512,32450],{"class":264},[254,43514,310],{"class":260},[254,43516,32455],{"class":264},[254,43518,43519],{"class":256,"line":9958},[254,43520,2540],{"emptyLinePlaceholder":184},[254,43522,43523],{"class":256,"line":9964},[254,43524,2540],{"emptyLinePlaceholder":184},[254,43526,43527],{"class":256,"line":9985},[254,43528,32468],{"class":323},[254,43530,43531],{"class":256,"line":9991},[254,43532,32473],{"class":323},[254,43534,43535,43537,43539],{"class":256,"line":10005},[254,43536,32478],{"class":264},[254,43538,310],{"class":260},[254,43540,32483],{"class":313},[254,43542,43543],{"class":256,"line":10011},[254,43544,32488],{"class":323},[254,43546,43547,43549,43551],{"class":256,"line":10038},[254,43548,32493],{"class":264},[254,43550,310],{"class":260},[254,43552,32498],{"class":264},[254,43554,43555],{"class":256,"line":10047},[254,43556,32503],{"class":323},[254,43558,43559,43561,43563],{"class":256,"line":10053},[254,43560,32508],{"class":264},[254,43562,310],{"class":260},[254,43564,32498],{"class":264},[254,43566,43567],{"class":256,"line":10061},[254,43568,32517],{"class":323},[254,43570,43571,43573,43575],{"class":256,"line":10066},[254,43572,32522],{"class":264},[254,43574,310],{"class":260},[254,43576,32498],{"class":264},[254,43578,43579],{"class":256,"line":16745},[254,43580,32531],{"class":323},[254,43582,43583,43585,43587],{"class":256,"line":16751},[254,43584,32536],{"class":264},[254,43586,310],{"class":260},[254,43588,32498],{"class":264},[254,43590,43591],{"class":256,"line":16774},[254,43592,2540],{"emptyLinePlaceholder":184},[254,43594,43595],{"class":256,"line":16780},[254,43596,32549],{"class":323},[254,43598,43599,43601,43603],{"class":256,"line":16803},[254,43600,32554],{"class":264},[254,43602,310],{"class":260},[254,43604,32559],{"class":264},[254,43606,43607],{"class":256,"line":16817},[254,43608,2540],{"emptyLinePlaceholder":184},[254,43610,43611],{"class":256,"line":16837},[254,43612,2540],{"emptyLinePlaceholder":184},[254,43614,43615],{"class":256,"line":16843},[254,43616,32572],{"class":323},[254,43618,43619,43621,43623,43625,43627],{"class":256,"line":16854},[254,43620,3341],{"class":260},[254,43622,32579],{"class":264},[254,43624,26184],{"class":260},[254,43626,32584],{"class":313},[254,43628,32587],{"class":264},[254,43630,43631,43633,43635,43637,43639,43641,43643,43645,43647,43649,43651],{"class":256,"line":16877},[254,43632,32592],{"class":313},[254,43634,265],{"class":264},[254,43636,32597],{"class":369},[254,43638,32600],{"class":313},[254,43640,848],{"class":369},[254,43642,32600],{"class":313},[254,43644,515],{"class":369},[254,43646,32609],{"class":264},[254,43648,796],{"class":260},[254,43650,482],{"class":313},[254,43652,30638],{"class":264},[254,43654,43655,43657,43659,43661,43663,43665],{"class":256,"line":16899},[254,43656,32592],{"class":313},[254,43658,265],{"class":264},[254,43660,32624],{"class":369},[254,43662,719],{"class":260},[254,43664,710],{"class":313},[254,43666,271],{"class":264},[254,43668,43669],{"class":256,"line":16904},[254,43670,2540],{"emptyLinePlaceholder":184},[254,43672,43673],{"class":256,"line":16910},[254,43674,32639],{"class":323},[254,43676,43677],{"class":256,"line":16924},[254,43678,32644],{"class":323},[254,43680,43681,43683,43685],{"class":256,"line":16937},[254,43682,32649],{"class":264},[254,43684,310],{"class":260},[254,43686,32483],{"class":313},[254,43688,43689],{"class":256,"line":16942},[254,43690,32658],{"class":323},[254,43692,43693,43695,43697],{"class":256,"line":16956},[254,43694,32663],{"class":264},[254,43696,310],{"class":260},[254,43698,3225],{"class":313},[254,43700,43701],{"class":256,"line":16961},[254,43702,32672],{"class":323},[254,43704,43705,43707,43709],{"class":256,"line":16967},[254,43706,32677],{"class":264},[254,43708,310],{"class":260},[254,43710,32483],{"class":313},[254,43712,43713],{"class":256,"line":16972},[254,43714,32686],{"class":323},[254,43716,43717,43719,43721],{"class":256,"line":16986},[254,43718,32691],{"class":264},[254,43720,310],{"class":260},[254,43722,3225],{"class":313},[254,43724,43725],{"class":256,"line":16991},[254,43726,32700],{"class":323},[254,43728,43729,43731,43733],{"class":256,"line":16996},[254,43730,32705],{"class":264},[254,43732,310],{"class":260},[254,43734,3225],{"class":313},[254,43736,43737],{"class":256,"line":17010},[254,43738,32714],{"class":323},[254,43740,43741,43743,43745],{"class":256,"line":17022},[254,43742,32719],{"class":264},[254,43744,310],{"class":260},[254,43746,3225],{"class":313},[254,43748,43749],{"class":256,"line":17027},[254,43750,32728],{"class":323},[254,43752,43753,43755,43757,43759,43761],{"class":256,"line":17040},[254,43754,3543],{"class":260},[254,43756,31742],{"class":264},[254,43758,26184],{"class":260},[254,43760,31747],{"class":313},[254,43762,32741],{"class":264},[254,43764,43765],{"class":256,"line":17045},[254,43766,32746],{"class":323},[254,43768,43769,43771,43773],{"class":256,"line":17050},[254,43770,32751],{"class":264},[254,43772,310],{"class":260},[254,43774,32756],{"class":264},[254,43776,43777],{"class":256,"line":17055},[254,43778,32761],{"class":323},[254,43780,43781,43783,43785],{"class":256,"line":17068},[254,43782,32766],{"class":264},[254,43784,310],{"class":260},[254,43786,32771],{"class":264},[254,43788,43789],{"class":256,"line":17073},[254,43790,32777],{"class":323},[254,43792,43793],{"class":256,"line":32774},[254,43794,32783],{"class":264},[254,43796,43797],{"class":256,"line":32780},[254,43798,32789],{"class":323},[254,43800,43801],{"class":256,"line":32786},[254,43802,32795],{"class":323},[254,43804,43805,43807,43809],{"class":256,"line":32792},[254,43806,32801],{"class":264},[254,43808,310],{"class":260},[254,43810,32806],{"class":264},[254,43812,43813],{"class":256,"line":32798},[254,43814,32812],{"class":323},[254,43816,43817,43819,43821,43823,43825,43827,43829],{"class":256,"line":32809},[254,43818,32818],{"class":264},[254,43820,310],{"class":260},[254,43822,32823],{"class":264},[254,43824,32826],{"class":5357},[254,43826,310],{"class":260},[254,43828,482],{"class":313},[254,43830,271],{"class":264},[254,43832,43833],{"class":256,"line":32815},[254,43834,32838],{"class":323},[254,43836,43837,43839,43841],{"class":256,"line":32835},[254,43838,32844],{"class":264},[254,43840,310],{"class":260},[254,43842,32849],{"class":264},[254,43844,43845],{"class":256,"line":32841},[254,43846,32855],{"class":323},[254,43848,43849],{"class":256,"line":32852},[254,43850,32861],{"class":264},[254,43852,43853],{"class":256,"line":32858},[254,43854,32867],{"class":323},[254,43856,43857],{"class":256,"line":32864},[254,43858,32873],{"class":264},[254,43860,43861],{"class":256,"line":32870},[254,43862,32879],{"class":323},[254,43864,43865],{"class":256,"line":32876},[254,43866,32885],{"class":264},[254,43868,43869],{"class":256,"line":32882},[254,43870,32891],{"class":323},[254,43872,43873,43875,43877,43879,43881,43883,43885],{"class":256,"line":32888},[254,43874,32897],{"class":264},[254,43876,9618],{"class":260},[254,43878,32902],{"class":264},[254,43880,719],{"class":260},[254,43882,32907],{"class":264},[254,43884,456],{"class":313},[254,43886,271],{"class":264},[254,43888,43889],{"class":256,"line":32894},[254,43890,32917],{"class":323},[254,43892,43893,43895,43897,43899,43901],{"class":256,"line":32914},[254,43894,32923],{"class":264},[254,43896,9618],{"class":260},[254,43898,32928],{"class":264},[254,43900,3089],{"class":260},[254,43902,32933],{"class":264},[254,43904,43905],{"class":256,"line":32920},[254,43906,32939],{"class":323},[254,43908,43909,43911,43913,43915,43917],{"class":256,"line":32936},[254,43910,32945],{"class":264},[254,43912,9618],{"class":260},[254,43914,32907],{"class":264},[254,43916,456],{"class":313},[254,43918,271],{"class":264},[254,43920,43921],{"class":256,"line":32942},[254,43922,32959],{"class":323},[254,43924,43925,43927,43929,43931,43933],{"class":256,"line":32956},[254,43926,3543],{"class":260},[254,43928,32967],{"class":264},[254,43930,26184],{"class":260},[254,43932,31747],{"class":313},[254,43934,32974],{"class":264},[254,43936,43937],{"class":256,"line":32962},[254,43938,32980],{"class":323},[254,43940,43941,43943,43945],{"class":256,"line":32977},[254,43942,32751],{"class":264},[254,43944,310],{"class":260},[254,43946,32756],{"class":264},[254,43948,43949],{"class":256,"line":32983},[254,43950,32995],{"class":323},[254,43952,43953,43955,43957],{"class":256,"line":32992},[254,43954,32766],{"class":264},[254,43956,310],{"class":260},[254,43958,32771],{"class":264},[254,43960,43961],{"class":256,"line":32998},[254,43962,33010],{"class":323},[254,43964,43965],{"class":256,"line":33007},[254,43966,33016],{"class":264},[254,43968,43969],{"class":256,"line":33013},[254,43970,36497],{"class":323},[254,43972,43973,43975],{"class":256,"line":33019},[254,43974,33022],{"class":260},[254,43976,33025],{"class":264},[254,43978,43979],{"class":256,"line":33028},[254,43980,33031],{"class":323},[254,43982,43983,43985,43987],{"class":256,"line":33034},[254,43984,36512],{"class":264},[254,43986,310],{"class":260},[254,43988,32806],{"class":264},[254,43990,43991],{"class":256,"line":33045},[254,43992,33048],{"class":323},[254,43994,43995,43997,43999,44001,44003,44005,44007],{"class":256,"line":33051},[254,43996,36525],{"class":264},[254,43998,310],{"class":260},[254,44000,32823],{"class":264},[254,44002,32826],{"class":5357},[254,44004,310],{"class":260},[254,44006,482],{"class":313},[254,44008,271],{"class":264},[254,44010,44011],{"class":256,"line":33070},[254,44012,33073],{"class":323},[254,44014,44015,44017,44019],{"class":256,"line":33076},[254,44016,36546],{"class":264},[254,44018,310],{"class":260},[254,44020,32849],{"class":264},[254,44022,44023],{"class":256,"line":33087},[254,44024,33090],{"class":323},[254,44026,44027,44029,44031,44033,44035,44037,44039],{"class":256,"line":33093},[254,44028,36559],{"class":264},[254,44030,9618],{"class":260},[254,44032,36564],{"class":264},[254,44034,719],{"class":260},[254,44036,32907],{"class":264},[254,44038,456],{"class":313},[254,44040,271],{"class":264},[254,44042,44043,44045,44047,44049,44051],{"class":256,"line":33113},[254,44044,36577],{"class":264},[254,44046,9618],{"class":260},[254,44048,32928],{"class":264},[254,44050,3089],{"class":260},[254,44052,32933],{"class":264},[254,44054,44055],{"class":256,"line":33129},[254,44056,36590],{"class":323},[254,44058,44059,44061,44063,44065,44067],{"class":256,"line":33135},[254,44060,36595],{"class":264},[254,44062,9618],{"class":260},[254,44064,32907],{"class":264},[254,44066,456],{"class":313},[254,44068,271],{"class":264},[254,44070,44071],{"class":256,"line":33149},[254,44072,33152],{"class":323},[254,44074,44075],{"class":256,"line":33155},[254,44076,33158],{"class":323},[254,44078,44079,44081,44083],{"class":256,"line":33161},[254,44080,33164],{"class":264},[254,44082,848],{"class":260},[254,44084,33169],{"class":264},[254,44086,44087],{"class":256,"line":33172},[254,44088,33175],{"class":323},[254,44090,44091],{"class":256,"line":33178},[254,44092,33181],{"class":323},[254,44094,44095,44097,44099],{"class":256,"line":33184},[254,44096,33187],{"class":264},[254,44098,848],{"class":260},[254,44100,33169],{"class":264},[254,44102,44103],{"class":256,"line":33194},[254,44104,33197],{"class":323},[254,44106,44107,44109,44111],{"class":256,"line":33200},[254,44108,33203],{"class":264},[254,44110,848],{"class":260},[254,44112,33208],{"class":264},[254,44114,44115],{"class":256,"line":33211},[254,44116,33214],{"class":323},[254,44118,44119,44121,44123],{"class":256,"line":33217},[254,44120,33220],{"class":264},[254,44122,848],{"class":260},[254,44124,33208],{"class":264},[254,44126,44127],{"class":256,"line":33227},[254,44128,2540],{"emptyLinePlaceholder":184},[254,44130,44131],{"class":256,"line":33232},[254,44132,33235],{"class":323},[254,44134,44135,44137,44139,44141,44143,44145,44147,44149,44151,44153,44155,44157,44159,44161,44163,44165,44167,44169,44171,44173],{"class":256,"line":33238},[254,44136,32592],{"class":313},[254,44138,265],{"class":264},[254,44140,3732],{"class":369},[254,44142,32600],{"class":313},[254,44144,33249],{"class":369},[254,44146,1160],{"class":313},[254,44148,33254],{"class":260},[254,44150,1210],{"class":313},[254,44152,33259],{"class":369},[254,44154,1160],{"class":313},[254,44156,33254],{"class":260},[254,44158,1210],{"class":313},[254,44160,3732],{"class":369},[254,44162,33270],{"class":264},[254,44164,796],{"class":260},[254,44166,482],{"class":313},[254,44168,33277],{"class":264},[254,44170,796],{"class":260},[254,44172,482],{"class":313},[254,44174,33284],{"class":264},[254,44176,44177,44179,44181,44183,44185,44187,44189,44191,44193,44195,44197,44199,44201,44203,44205,44207,44209,44211,44213,44215],{"class":256,"line":33287},[254,44178,32592],{"class":313},[254,44180,265],{"class":264},[254,44182,3732],{"class":369},[254,44184,32600],{"class":313},[254,44186,33298],{"class":369},[254,44188,1160],{"class":313},[254,44190,33254],{"class":260},[254,44192,1210],{"class":313},[254,44194,33307],{"class":369},[254,44196,1160],{"class":313},[254,44198,33254],{"class":260},[254,44200,1210],{"class":313},[254,44202,3732],{"class":369},[254,44204,33318],{"class":264},[254,44206,796],{"class":260},[254,44208,482],{"class":313},[254,44210,33325],{"class":264},[254,44212,796],{"class":260},[254,44214,482],{"class":313},[254,44216,33284],{"class":264},[254,44218,44219],{"class":256,"line":33334},[254,44220,2540],{"emptyLinePlaceholder":184},[254,44222,44223],{"class":256,"line":33339},[254,44224,33342],{"class":323},[254,44226,44227,44229,44231,44233,44235,44237,44239],{"class":256,"line":33345},[254,44228,2637],{"class":260},[254,44230,33350],{"class":264},[254,44232,796],{"class":260},[254,44234,482],{"class":313},[254,44236,1204],{"class":264},[254,44238,1224],{"class":260},[254,44240,33361],{"class":264},[254,44242,44243],{"class":256,"line":33364},[254,44244,33367],{"class":323},[254,44246,44247,44249,44251,44253,44255,44257,44259],{"class":256,"line":33370},[254,44248,33373],{"class":264},[254,44250,304],{"class":313},[254,44252,310],{"class":260},[254,44254,33380],{"class":264},[254,44256,796],{"class":260},[254,44258,482],{"class":313},[254,44260,33387],{"class":264},[254,44262,44263],{"class":256,"line":33390},[254,44264,33393],{"class":323},[254,44266,44267],{"class":256,"line":33396},[254,44268,33399],{"class":323},[254,44270,44271,44273,44275],{"class":256,"line":33402},[254,44272,33405],{"class":264},[254,44274,310],{"class":260},[254,44276,32455],{"class":264},[254,44278,44279],{"class":256,"line":33412},[254,44280,2540],{"emptyLinePlaceholder":184},[254,44282,44283],{"class":256,"line":33417},[254,44284,33420],{"class":323},[254,44286,44287,44289,44291,44293,44295],{"class":256,"line":33423},[254,44288,33426],{"class":264},[254,44290,310],{"class":260},[254,44292,33431],{"class":264},[254,44294,796],{"class":260},[254,44296,33436],{"class":264},[254,44298,44299,44301,44303,44305,44307,44309,44311,44313,44315,44317,44319,44321,44323,44325,44327,44329,44331,44333],{"class":256,"line":33439},[254,44300,32592],{"class":313},[254,44302,265],{"class":264},[254,44304,33446],{"class":369},[254,44306,1160],{"class":313},[254,44308,33451],{"class":260},[254,44310,1210],{"class":313},[254,44312,808],{"class":369},[254,44314,1160],{"class":313},[254,44316,33451],{"class":260},[254,44318,1210],{"class":313},[254,44320,33464],{"class":369},[254,44322,33467],{"class":264},[254,44324,33470],{"class":260},[254,44326,1171],{"class":313},[254,44328,33475],{"class":264},[254,44330,592],{"class":260},[254,44332,1171],{"class":313},[254,44334,30638],{"class":264},[254,44336,44337],{"class":256,"line":33484},[254,44338,36874],{"class":323},[254,44340,44341],{"class":256,"line":33490},[254,44342,36879],{"class":323},[254,44344,44345,44347,44349],{"class":256,"line":33496},[254,44346,36884],{"class":264},[254,44348,33508],{"class":369},[254,44350,271],{"class":264},[254,44352,44353],{"class":256,"line":33502},[254,44354,33528],{"class":323},[254,44356,44357,44359,44361,44363,44365,44367],{"class":256,"line":33513},[254,44358,33534],{"class":264},[254,44360,310],{"class":260},[254,44362,33539],{"class":264},[254,44364,33542],{"class":5357},[254,44366,310],{"class":260},[254,44368,1686],{"class":264},[254,44370,44371,44373,44375,44377],{"class":256,"line":33519},[254,44372,33552],{"class":369},[254,44374,1123],{"class":264},[254,44376,33557],{"class":313},[254,44378,33560],{"class":264},[254,44380,44381,44383],{"class":256,"line":33525},[254,44382,33566],{"class":369},[254,44384,33569],{"class":264},[254,44386,44387,44389],{"class":256,"line":33531},[254,44388,33575],{"class":369},[254,44390,33578],{"class":264},[254,44392,44393,44395],{"class":256,"line":33549},[254,44394,33584],{"class":369},[254,44396,33587],{"class":264},[254,44398,44399,44401],{"class":256,"line":33563},[254,44400,33593],{"class":369},[254,44402,33596],{"class":264},[254,44404,44405],{"class":256,"line":33572},[254,44406,33602],{"class":264},[254,44408,44409],{"class":256,"line":33581},[254,44410,33608],{"class":323},[254,44412,44413,44415],{"class":256,"line":33590},[254,44414,4230],{"class":260},[254,44416,33616],{"class":264},[254,44418,44419],{"class":256,"line":33599},[254,44420,2540],{"emptyLinePlaceholder":184},[254,44422,44423],{"class":256,"line":33605},[254,44424,33627],{"class":323},[254,44426,44427,44429,44431],{"class":256,"line":33611},[254,44428,32088],{"class":260},[254,44430,33635],{"class":2103},[254,44432,33638],{"class":264},[254,44434,44435],{"class":256,"line":33619},[254,44436,33644],{"class":323},[254,44438,44439,44441,44443,44445,44447,44449,44451,44453],{"class":256,"line":33624},[254,44440,33650],{"class":264},[254,44442,31834],{"class":5357},[254,44444,310],{"class":260},[254,44446,265],{"class":264},[254,44448,762],{"class":313},[254,44450,642],{"class":264},[254,44452,557],{"class":313},[254,44454,30638],{"class":264},[254,44456,44457],{"class":256,"line":33630},[254,44458,33670],{"class":323},[254,44460,44461],{"class":256,"line":33641},[254,44462,33676],{"class":323},[254,44464,44465],{"class":256,"line":33647},[254,44466,33682],{"class":323},[254,44468,44469,44471,44473,44475,44477,44479,44481],{"class":256,"line":33667},[254,44470,31868],{"class":264},[254,44472,482],{"class":313},[254,44474,642],{"class":264},[254,44476,342],{"class":313},[254,44478,642],{"class":264},[254,44480,482],{"class":313},[254,44482,271],{"class":264},[254,44484,44485],{"class":256,"line":33673},[254,44486,33705],{"class":323},[254,44488,44489],{"class":256,"line":33679},[254,44490,33711],{"class":323},[254,44492,44493],{"class":256,"line":33685},[254,44494,33717],{"class":323},[254,44496,44497],{"class":256,"line":33702},[254,44498,33723],{"class":323},[254,44500,44501],{"class":256,"line":33708},[254,44502,33729],{"class":323},[254,44504,44505,44507,44509,44511,44513,44515,44517,44519,44521],{"class":256,"line":33714},[254,44506,33735],{"class":264},[254,44508,33738],{"class":369},[254,44510,33741],{"class":264},[254,44512,33744],{"class":369},[254,44514,642],{"class":264},[254,44516,33749],{"class":5357},[254,44518,310],{"class":260},[254,44520,33754],{"class":369},[254,44522,271],{"class":264},[254,44524,44525,44527,44529,44531,44533,44535,44537,44539,44541],{"class":256,"line":33720},[254,44526,33735],{"class":264},[254,44528,33738],{"class":369},[254,44530,33766],{"class":264},[254,44532,33769],{"class":369},[254,44534,642],{"class":264},[254,44536,33749],{"class":5357},[254,44538,310],{"class":260},[254,44540,33778],{"class":369},[254,44542,271],{"class":264},[254,44544,44545],{"class":256,"line":33726},[254,44546,33786],{"class":323},[254,44548,44549],{"class":256,"line":33732},[254,44550,33792],{"class":264},[254,44552,44553],{"class":256,"line":33759},[254,44554,33798],{"class":323},[254,44556,44557,44559,44561],{"class":256,"line":33783},[254,44558,33804],{"class":264},[254,44560,33807],{"class":369},[254,44562,271],{"class":264},[254,44564,44565,44567,44569],{"class":256,"line":33789},[254,44566,33815],{"class":264},[254,44568,33818],{"class":369},[254,44570,271],{"class":264},[254,44572,44573],{"class":256,"line":33795},[254,44574,33826],{"class":323},[254,44576,44577,44579,44581,44583,44585,44587,44589],{"class":256,"line":33801},[254,44578,31868],{"class":264},[254,44580,482],{"class":313},[254,44582,642],{"class":264},[254,44584,342],{"class":313},[254,44586,642],{"class":264},[254,44588,342],{"class":313},[254,44590,271],{"class":264},[254,44592,44593,44595,44597,44599,44601,44603,44605,44607,44609],{"class":256,"line":33812},[254,44594,33735],{"class":264},[254,44596,33738],{"class":369},[254,44598,33853],{"class":264},[254,44600,33744],{"class":369},[254,44602,642],{"class":264},[254,44604,33749],{"class":5357},[254,44606,310],{"class":260},[254,44608,33864],{"class":369},[254,44610,271],{"class":264},[254,44612,44613,44615,44617,44619,44621,44623,44625,44627,44629],{"class":256,"line":33823},[254,44614,33735],{"class":264},[254,44616,33738],{"class":369},[254,44618,33876],{"class":264},[254,44620,33769],{"class":369},[254,44622,642],{"class":264},[254,44624,33749],{"class":5357},[254,44626,310],{"class":260},[254,44628,33887],{"class":369},[254,44630,271],{"class":264},[254,44632,44633],{"class":256,"line":33829},[254,44634,33895],{"class":323},[254,44636,44637],{"class":256,"line":33846},[254,44638,33792],{"class":264},[254,44640,44641,44643,44645],{"class":256,"line":33869},[254,44642,33804],{"class":264},[254,44644,33738],{"class":369},[254,44646,271],{"class":264},[254,44648,44649,44651,44653],{"class":256,"line":33892},[254,44650,33815],{"class":264},[254,44652,33917],{"class":369},[254,44654,271],{"class":264},[254,44656,44657],{"class":256,"line":33898},[254,44658,33925],{"class":264},[254,44660,44661],{"class":256,"line":33903},[254,44662,2540],{"emptyLinePlaceholder":184},[254,44664,44665],{"class":256,"line":33912},[254,44666,33936],{"class":323},[254,44668,44669,44671,44673,44675,44677],{"class":256,"line":33922},[254,44670,1671],{"class":260},[254,44672,31361],{"class":313},[254,44674,3089],{"class":260},[254,44676,31366],{"class":369},[254,44678,3879],{"class":264},[254,44680,44681],{"class":256,"line":33928},[254,44682,33955],{"class":323},[254,44684,44685,44688,44690],{"class":256,"line":33933},[254,44686,44687],{"class":264},"    GoogLeNet",[254,44689,310],{"class":260},[254,44691,44692],{"class":264},"GoogLeNet(Inception)\n",[254,44694,44695,44697,44699],{"class":256,"line":33939},[254,44696,33972],{"class":264},[254,44698,310],{"class":260},[254,44700,33977],{"class":264},[254,44702,44703,44705,44707,44710,44712,44714,44716],{"class":256,"line":33952},[254,44704,33534],{"class":264},[254,44706,310],{"class":260},[254,44708,44709],{"class":264},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[254,44711,33990],{"class":5357},[254,44713,310],{"class":260},[254,44715,1215],{"class":313},[254,44717,271],{"class":264},[254,44719,44720],{"class":256,"line":33958},[254,44721,34002],{"class":264},[21,44723,44724],{"start":1319},[24,44725,40715],{},[245,44727,44729],{"className":30519,"code":44728,"language":30521,"meta":174,"style":174},"import torch\nimport torch.utils.data as Data\nfrom torchvision import transforms\n# 导入数据集\nfrom torchvision.datasets import FashionMNIST\nfrom model import GoogLeNet,Inception\n\n\n# 测试数据处理\ndef test_data_process():\n    test_data=FashionMNIST(root='.\u002Fdata',\n                           train=False,\n                           transform=transforms.Compose([transforms.Resize(size=227),transforms.ToTensor()]),\n                           download=True)\n    test_dataloader=Data.DataLoader(dataset=test_data,\n                                    # 这里是一张一张进行测试\n                                    batch_size=1,\n                                    shuffle=True,\n                                    num_workers=0)\n    return test_dataloader\n\n# 定义模型测试函数\ndef test_model_process(model,test_dataloader):\n    # 将模型放到设备当中，先进行判断\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n\n    # 设置初始化参数\n    test_corrects=0.0\n    test_num=0\n\n    # 进行模型测试\n    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n    # 不进行梯度计算，可以节省内存，加快运行速度\n    with torch.no_grad():\n        # 从数据中进行\n        for test_data_x,test_data_y in test_dataloader:\n            test_data_x=test_data_x.to(device)\n            test_data_y=test_data_y.to(device)\n            # 设置为验证模式\n            model.eval()\n            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n            output=model(test_data_x)\n            # 查找每一行中最大值对应的下标\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算正确率\n            # .data表示是一个不带梯度信息的tensor\n            # 如果预测正确，则准确度test_corrects加1\n            test_corrects+=torch.sum(pre_lab==test_data_y.data)\n            # 将所有的测试样本进行累计\n            test_num+=test_data_x.size(0)\n\n        # 计算准确度\n        test_acc=test_corrects.double().item()\u002Ftest_num\n        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n        print(\"测试的准确率：\",test_acc)\n\n# 实现模型的测试功能\nif __name__==\"__main__\":\n    # 加载模型\n    model=GoogLeNet(Inception)\n    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n    model.load_state_dict(torch.load('best_model.pth'))\n    # 数据加载\n    test_dataloader=test_data_process()\n    # 加载模型测试的函数\n    test_model_process(model,test_dataloader)\n\n    # 验证集推理实现：\n    # 加载数据加载的更详细一些\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n    # 顺序不可改变\n    classes=['T-shirt\u002Ftop','Trouser','Pullover','Dress','Coat','Sandal','Shirt','Sneaker','Bag','Ankle boot']\n    with torch.no_grad():\n        # 将数据和标签都放到设备当中\n        for b_x,b_y in test_dataloader:\n            b_x=b_x.to(device)\n            b_y=b_y.to(device)\n\n            # 设置模型为验证模式\n            model.eval()\n            # 模型推理结果\n            output=model(b_x)\n            # 获取最大下标，最大下标就是类别号\n            pre_lab=torch.argmax(output,dim=1)\n            # 取出张量中的数值\n            result=pre_lab.item()\n            label=b_y.item()\n            print(\"预测值：\",classes[result],\"------\",\"真实值：\",classes[label])\n",[251,44730,44731,44737,44747,44757,44761,44771,44782,44786,44790,44794,44802,44818,44828,44844,44854,44868,44872,44882,44892,44902,44908,44912,44916,44924,44928,44944,44952,44956,44960,44968,44976,44980,44984,44988,44992,44998,45002,45012,45020,45028,45032,45036,45040,45048,45052,45068,45072,45076,45080,45092,45096,45108,45112,45116,45128,45132,45142,45146,45150,45162,45166,45174,45178,45182,45190,45194,45202,45206,45210,45214,45218,45222,45238,45246,45250,45254,45302,45308,45312,45322,45330,45338,45342,45346,45350,45354,45362,45366,45382,45386,45394,45402],{"__ignoreMap":174},[254,44732,44733,44735],{"class":256,"line":257},[254,44734,30533],{"class":260},[254,44736,30536],{"class":264},[254,44738,44739,44741,44743,44745],{"class":256,"line":175},[254,44740,30533],{"class":260},[254,44742,31556],{"class":264},[254,44744,31524],{"class":260},[254,44746,31561],{"class":264},[254,44748,44749,44751,44753,44755],{"class":256,"line":1319},[254,44750,30878],{"class":260},[254,44752,31539],{"class":264},[254,44754,30533],{"class":260},[254,44756,31544],{"class":264},[254,44758,44759],{"class":256,"line":1334},[254,44760,34063],{"class":323},[254,44762,44763,44765,44767,44769],{"class":256,"line":1340},[254,44764,30878],{"class":260},[254,44766,31509],{"class":264},[254,44768,30533],{"class":260},[254,44770,31514],{"class":264},[254,44772,44773,44775,44777,44779],{"class":256,"line":1354},[254,44774,30878],{"class":260},[254,44776,32055],{"class":264},[254,44778,30533],{"class":260},[254,44780,44781],{"class":264}," GoogLeNet,Inception\n",[254,44783,44784],{"class":256,"line":1360},[254,44785,2540],{"emptyLinePlaceholder":184},[254,44787,44788],{"class":256,"line":1451},[254,44789,2540],{"emptyLinePlaceholder":184},[254,44791,44792],{"class":256,"line":1457},[254,44793,34092],{"class":323},[254,44795,44796,44798,44800],{"class":256,"line":1469},[254,44797,32088],{"class":260},[254,44799,34099],{"class":2103},[254,44801,32094],{"class":264},[254,44803,44804,44806,44808,44810,44812,44814,44816],{"class":256,"line":1752},[254,44805,34106],{"class":264},[254,44807,310],{"class":260},[254,44809,31596],{"class":264},[254,44811,31599],{"class":5357},[254,44813,310],{"class":260},[254,44815,31604],{"class":369},[254,44817,31607],{"class":264},[254,44819,44820,44822,44824,44826],{"class":256,"line":1757},[254,44821,34123],{"class":5357},[254,44823,310],{"class":260},[254,44825,34128],{"class":313},[254,44827,31607],{"class":264},[254,44829,44830,44832,44834,44836,44838,44840,44842],{"class":256,"line":1763},[254,44831,34135],{"class":5357},[254,44833,310],{"class":260},[254,44835,31634],{"class":264},[254,44837,31637],{"class":5357},[254,44839,310],{"class":260},[254,44841,35590],{"class":313},[254,44843,31645],{"class":264},[254,44845,44846,44848,44850,44852],{"class":256,"line":1768},[254,44847,34152],{"class":5357},[254,44849,310],{"class":260},[254,44851,31617],{"class":313},[254,44853,271],{"class":264},[254,44855,44856,44858,44860,44862,44864,44866],{"class":256,"line":1782},[254,44857,34163],{"class":264},[254,44859,310],{"class":260},[254,44861,31675],{"class":264},[254,44863,31678],{"class":5357},[254,44865,310],{"class":260},[254,44867,34174],{"class":264},[254,44869,44870],{"class":256,"line":1787},[254,44871,34179],{"class":323},[254,44873,44874,44876,44878,44880],{"class":256,"line":1793},[254,44875,34184],{"class":5357},[254,44877,310],{"class":260},[254,44879,482],{"class":313},[254,44881,31607],{"class":264},[254,44883,44884,44886,44888,44890],{"class":256,"line":1814},[254,44885,34195],{"class":5357},[254,44887,310],{"class":260},[254,44889,31617],{"class":313},[254,44891,31607],{"class":264},[254,44893,44894,44896,44898,44900],{"class":256,"line":1819},[254,44895,34206],{"class":5357},[254,44897,310],{"class":260},[254,44899,456],{"class":313},[254,44901,271],{"class":264},[254,44903,44904,44906],{"class":256,"line":1833},[254,44905,4230],{"class":260},[254,44907,34219],{"class":264},[254,44909,44910],{"class":256,"line":1838},[254,44911,2540],{"emptyLinePlaceholder":184},[254,44913,44914],{"class":256,"line":1867},[254,44915,34228],{"class":323},[254,44917,44918,44920,44922],{"class":256,"line":1872},[254,44919,32088],{"class":260},[254,44921,34235],{"class":2103},[254,44923,34238],{"class":264},[254,44925,44926],{"class":256,"line":1889},[254,44927,34243],{"class":323},[254,44929,44930,44932,44934,44936,44938,44940,44942],{"class":256,"line":1894},[254,44931,31378],{"class":264},[254,44933,310],{"class":260},[254,44935,31385],{"class":369},[254,44937,1844],{"class":260},[254,44939,31390],{"class":264},[254,44941,1841],{"class":260},[254,44943,34260],{"class":369},[254,44945,44946,44948,44950],{"class":256,"line":1899},[254,44947,31430],{"class":264},[254,44949,310],{"class":260},[254,44951,32430],{"class":264},[254,44953,44954],{"class":256,"line":1904},[254,44955,2540],{"emptyLinePlaceholder":184},[254,44957,44958],{"class":256,"line":1918},[254,44959,34277],{"class":323},[254,44961,44962,44964,44966],{"class":256,"line":1923},[254,44963,34282],{"class":264},[254,44965,310],{"class":260},[254,44967,32483],{"class":313},[254,44969,44970,44972,44974],{"class":256,"line":2717},[254,44971,34291],{"class":264},[254,44973,310],{"class":260},[254,44975,3225],{"class":313},[254,44977,44978],{"class":256,"line":2731},[254,44979,2540],{"emptyLinePlaceholder":184},[254,44981,44982],{"class":256,"line":2739},[254,44983,34304],{"class":323},[254,44985,44986],{"class":256,"line":2744},[254,44987,34309],{"class":323},[254,44989,44990],{"class":256,"line":2750},[254,44991,34314],{"class":323},[254,44993,44994,44996],{"class":256,"line":2756},[254,44995,34319],{"class":260},[254,44997,33025],{"class":264},[254,44999,45000],{"class":256,"line":2761},[254,45001,34326],{"class":323},[254,45003,45004,45006,45008,45010],{"class":256,"line":8089},[254,45005,3543],{"class":260},[254,45007,34333],{"class":264},[254,45009,26184],{"class":260},[254,45011,34338],{"class":264},[254,45013,45014,45016,45018],{"class":256,"line":8113},[254,45015,34343],{"class":264},[254,45017,310],{"class":260},[254,45019,34348],{"class":264},[254,45021,45022,45024,45026],{"class":256,"line":8118},[254,45023,34353],{"class":264},[254,45025,310],{"class":260},[254,45027,34358],{"class":264},[254,45029,45030],{"class":256,"line":8124},[254,45031,34363],{"class":323},[254,45033,45034],{"class":256,"line":8151},[254,45035,33016],{"class":264},[254,45037,45038],{"class":256,"line":8156},[254,45039,34372],{"class":323},[254,45041,45042,45044,45046],{"class":256,"line":8162},[254,45043,32801],{"class":264},[254,45045,310],{"class":260},[254,45047,34381],{"class":264},[254,45049,45050],{"class":256,"line":8174},[254,45051,34386],{"class":323},[254,45053,45054,45056,45058,45060,45062,45064,45066],{"class":256,"line":8186},[254,45055,32818],{"class":264},[254,45057,310],{"class":260},[254,45059,32823],{"class":264},[254,45061,32826],{"class":5357},[254,45063,310],{"class":260},[254,45065,482],{"class":313},[254,45067,271],{"class":264},[254,45069,45070],{"class":256,"line":8198},[254,45071,34407],{"class":323},[254,45073,45074],{"class":256,"line":9857},[254,45075,34412],{"class":323},[254,45077,45078],{"class":256,"line":9882},[254,45079,34417],{"class":323},[254,45081,45082,45084,45086,45088,45090],{"class":256,"line":9905},[254,45083,34422],{"class":264},[254,45085,9618],{"class":260},[254,45087,32928],{"class":264},[254,45089,3089],{"class":260},[254,45091,34431],{"class":264},[254,45093,45094],{"class":256,"line":9929},[254,45095,34436],{"class":323},[254,45097,45098,45100,45102,45104,45106],{"class":256,"line":9934},[254,45099,34441],{"class":264},[254,45101,9618],{"class":260},[254,45103,34446],{"class":264},[254,45105,456],{"class":313},[254,45107,271],{"class":264},[254,45109,45110],{"class":256,"line":9939},[254,45111,2540],{"emptyLinePlaceholder":184},[254,45113,45114],{"class":256,"line":9944},[254,45115,34459],{"class":323},[254,45117,45118,45120,45122,45124,45126],{"class":256,"line":9953},[254,45119,34464],{"class":264},[254,45121,310],{"class":260},[254,45123,34469],{"class":264},[254,45125,848],{"class":260},[254,45127,34474],{"class":264},[254,45129,45130],{"class":256,"line":9958},[254,45131,34479],{"class":323},[254,45133,45134,45136,45138,45140],{"class":256,"line":9964},[254,45135,32592],{"class":313},[254,45137,265],{"class":264},[254,45139,34488],{"class":369},[254,45141,34491],{"class":264},[254,45143,45144],{"class":256,"line":9985},[254,45145,2540],{"emptyLinePlaceholder":184},[254,45147,45148],{"class":256,"line":9991},[254,45149,34500],{"class":323},[254,45151,45152,45154,45156,45158,45160],{"class":256,"line":10005},[254,45153,1671],{"class":260},[254,45155,31361],{"class":313},[254,45157,3089],{"class":260},[254,45159,31366],{"class":369},[254,45161,3879],{"class":264},[254,45163,45164],{"class":256,"line":10011},[254,45165,34517],{"class":323},[254,45167,45168,45170,45172],{"class":256,"line":10038},[254,45169,31430],{"class":264},[254,45171,310],{"class":260},[254,45173,44692],{"class":264},[254,45175,45176],{"class":256,"line":10047},[254,45177,34530],{"class":323},[254,45179,45180],{"class":256,"line":10053},[254,45181,34535],{"class":323},[254,45183,45184,45186,45188],{"class":256,"line":10061},[254,45185,34540],{"class":264},[254,45187,34543],{"class":369},[254,45189,30638],{"class":264},[254,45191,45192],{"class":256,"line":10066},[254,45193,34550],{"class":323},[254,45195,45196,45198,45200],{"class":256,"line":16745},[254,45197,34163],{"class":264},[254,45199,310],{"class":260},[254,45201,34559],{"class":264},[254,45203,45204],{"class":256,"line":16751},[254,45205,34564],{"class":323},[254,45207,45208],{"class":256,"line":16774},[254,45209,34569],{"class":264},[254,45211,45212],{"class":256,"line":16780},[254,45213,2540],{"emptyLinePlaceholder":184},[254,45215,45216],{"class":256,"line":16803},[254,45217,34578],{"class":323},[254,45219,45220],{"class":256,"line":16817},[254,45221,34583],{"class":323},[254,45223,45224,45226,45228,45230,45232,45234,45236],{"class":256,"line":16837},[254,45225,31378],{"class":264},[254,45227,310],{"class":260},[254,45229,31385],{"class":369},[254,45231,1844],{"class":260},[254,45233,31390],{"class":264},[254,45235,1841],{"class":260},[254,45237,34260],{"class":369},[254,45239,45240,45242,45244],{"class":256,"line":16843},[254,45241,31430],{"class":264},[254,45243,310],{"class":260},[254,45245,32430],{"class":264},[254,45247,45248],{"class":256,"line":16854},[254,45249,34612],{"class":323},[254,45251,45252],{"class":256,"line":16877},[254,45253,34617],{"class":323},[254,45255,45256,45258,45260,45262,45264,45266,45268,45270,45272,45274,45276,45278,45280,45282,45284,45286,45288,45290,45292,45294,45296,45298,45300],{"class":256,"line":16899},[254,45257,34622],{"class":264},[254,45259,310],{"class":260},[254,45261,1154],{"class":264},[254,45263,34629],{"class":369},[254,45265,642],{"class":264},[254,45267,34634],{"class":369},[254,45269,642],{"class":264},[254,45271,34639],{"class":369},[254,45273,642],{"class":264},[254,45275,34644],{"class":369},[254,45277,642],{"class":264},[254,45279,34649],{"class":369},[254,45281,642],{"class":264},[254,45283,34654],{"class":369},[254,45285,642],{"class":264},[254,45287,34659],{"class":369},[254,45289,642],{"class":264},[254,45291,34664],{"class":369},[254,45293,642],{"class":264},[254,45295,34669],{"class":369},[254,45297,642],{"class":264},[254,45299,34674],{"class":369},[254,45301,33387],{"class":264},[254,45303,45304,45306],{"class":256,"line":16904},[254,45305,34319],{"class":260},[254,45307,33025],{"class":264},[254,45309,45310],{"class":256,"line":16910},[254,45311,34687],{"class":323},[254,45313,45314,45316,45318,45320],{"class":256,"line":16924},[254,45315,3543],{"class":260},[254,45317,34694],{"class":264},[254,45319,26184],{"class":260},[254,45321,34338],{"class":264},[254,45323,45324,45326,45328],{"class":256,"line":16937},[254,45325,32751],{"class":264},[254,45327,310],{"class":260},[254,45329,32756],{"class":264},[254,45331,45332,45334,45336],{"class":256,"line":16942},[254,45333,32766],{"class":264},[254,45335,310],{"class":260},[254,45337,32771],{"class":264},[254,45339,45340],{"class":256,"line":16956},[254,45341,2540],{"emptyLinePlaceholder":184},[254,45343,45344],{"class":256,"line":16961},[254,45345,34723],{"class":323},[254,45347,45348],{"class":256,"line":16967},[254,45349,33016],{"class":264},[254,45351,45352],{"class":256,"line":16972},[254,45353,34732],{"class":323},[254,45355,45356,45358,45360],{"class":256,"line":16986},[254,45357,32801],{"class":264},[254,45359,310],{"class":260},[254,45361,32806],{"class":264},[254,45363,45364],{"class":256,"line":16991},[254,45365,34745],{"class":323},[254,45367,45368,45370,45372,45374,45376,45378,45380],{"class":256,"line":16996},[254,45369,32818],{"class":264},[254,45371,310],{"class":260},[254,45373,32823],{"class":264},[254,45375,32826],{"class":5357},[254,45377,310],{"class":260},[254,45379,482],{"class":313},[254,45381,271],{"class":264},[254,45383,45384],{"class":256,"line":17010},[254,45385,34766],{"class":323},[254,45387,45388,45390,45392],{"class":256,"line":17022},[254,45389,34771],{"class":264},[254,45391,310],{"class":260},[254,45393,34776],{"class":264},[254,45395,45396,45398,45400],{"class":256,"line":17027},[254,45397,34781],{"class":264},[254,45399,310],{"class":260},[254,45401,34786],{"class":264},[254,45403,45404,45406,45408,45410,45412,45414,45416,45418],{"class":256,"line":17040},[254,45405,34791],{"class":313},[254,45407,265],{"class":264},[254,45409,34796],{"class":369},[254,45411,34799],{"class":264},[254,45413,34802],{"class":369},[254,45415,642],{"class":264},[254,45417,34807],{"class":369},[254,45419,34810],{"class":264},[225,45421,45423],{"id":45422},"_24训练自己的数据集","2.4.训练自己的数据集",[14,45425,45426],{},"猫狗分类任务",[14,45428,45429],{},"划分数据集和验证集",[245,45431,45433],{"className":30519,"code":45432,"language":30521,"meta":174,"style":174},"# 创建脚本，用于划分数据集和验证集\nimport os\n# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\nfrom shutil import copy\nimport random\n\ndef mkfile(file):\n    if not os.path.exists(file):\n        os.makedirs(file)\n\n# 获取data文件夹下所有文件夹名（即需要分类的类名）\nfile_path='data_cat_dog'\nflower_class=[cla for cla in os.listdir(file_path)]\n\n# 创建训练集train文件夹\nmkfile('data\u002Ftrain')\nfor cla in flower_class:\n    mkfile('data\u002Ftrain\u002F'+cla)\n\n# 创建验证集val文件夹\nmkfile('data\u002Ftest')\nfor cla in flower_class:\n    mkfile('data\u002Ftest\u002F'+cla)\n\n# 划分比例，训练集：测试集=9：1\nsplit_rate=0.1\n\n# 遍历所有类别的全部图像并按比例分成训练集和验证集\n# cla_path：当前类别的原始图片路径\n# images：当前类别下所有图片的文件名列表\n# num：该类别图片总数\n# eval_index：从 images 随机抽取 10% 的图片作为验证集\n\nfor cla in flower_class:\n    cla_path = file_path + '\u002F' + cla + '\u002F'  # 某一类别的子目录\n    images = os.listdir(cla_path)  # iamges 列表存储了该目录下所有图像的名称\n    num = len(images)\n    eval_index = random.sample(images, k=int(num * split_rate))  # 从images列表中随机抽取 k 个图像名称\n    # 遍历该类别下的所有图片\n    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n    for index, image in enumerate(images):\n        # eval_index 中保存验证集val的图像名称\n        if image in eval_index:\n            image_path = cla_path + image\n            new_path = 'data\u002Ftest\u002F' + cla\n            copy(image_path, new_path)  # 将选中的图像复制到新路径\n\n        # 其余的图像保存在训练集train中\n        else:\n            image_path = cla_path + image\n            new_path = 'data\u002Ftrain\u002F' + cla\n            copy(image_path, new_path)\n            # 打印进度条信息\n            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n        print(\"\\r[{}] processing [{}\u002F{}]\".format(cla, index + 1, num), end=\"\")  # processing bar\n    print()\n\nprint(\"processing done!\")\n",[251,45434,45435,45440,45447,45452,45463,45470,45474,45484,45498,45507,45511,45516,45526,45546,45550,45555,45565,45576,45589,45593,45598,45607,45617,45628,45632,45637,45647,45651,45656,45661,45666,45671,45676,45680,45690,45717,45730,45742,45769,45774,45779,45793,45798,45810,45825,45840,45848,45852,45857,45863,45875,45888,45893,45898,45903,45953,45959,45963],{"__ignoreMap":174},[254,45436,45437],{"class":256,"line":257},[254,45438,45439],{"class":323},"# 创建脚本，用于划分数据集和验证集\n",[254,45441,45442,45444],{"class":256,"line":175},[254,45443,30533],{"class":260},[254,45445,45446],{"class":264}," os\n",[254,45448,45449],{"class":256,"line":1319},[254,45450,45451],{"class":323},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[254,45453,45454,45456,45459,45461],{"class":256,"line":1334},[254,45455,30878],{"class":260},[254,45457,45458],{"class":264}," shutil ",[254,45460,30533],{"class":260},[254,45462,31963],{"class":264},[254,45464,45465,45467],{"class":256,"line":1340},[254,45466,30533],{"class":260},[254,45468,45469],{"class":264}," random\n",[254,45471,45472],{"class":256,"line":1354},[254,45473,2540],{"emptyLinePlaceholder":184},[254,45475,45476,45478,45481],{"class":256,"line":1360},[254,45477,32088],{"class":260},[254,45479,45480],{"class":2103}," mkfile",[254,45482,45483],{"class":264},"(file):\n",[254,45485,45486,45488,45490,45493,45496],{"class":256,"line":1451},[254,45487,3241],{"class":260},[254,45489,39071],{"class":260},[254,45491,45492],{"class":264}," os.path.exists(",[254,45494,45495],{"class":5357},"file",[254,45497,30927],{"class":264},[254,45499,45500,45503,45505],{"class":256,"line":1457},[254,45501,45502],{"class":264},"        os.makedirs(",[254,45504,45495],{"class":5357},[254,45506,271],{"class":264},[254,45508,45509],{"class":256,"line":1469},[254,45510,2540],{"emptyLinePlaceholder":184},[254,45512,45513],{"class":256,"line":1752},[254,45514,45515],{"class":323},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[254,45517,45518,45521,45523],{"class":256,"line":1757},[254,45519,45520],{"class":264},"file_path",[254,45522,310],{"class":260},[254,45524,45525],{"class":369},"'data_cat_dog'\n",[254,45527,45528,45531,45533,45536,45538,45541,45543],{"class":256,"line":1763},[254,45529,45530],{"class":264},"flower_class",[254,45532,310],{"class":260},[254,45534,45535],{"class":264},"[cla ",[254,45537,3165],{"class":260},[254,45539,45540],{"class":264}," cla ",[254,45542,26184],{"class":260},[254,45544,45545],{"class":264}," os.listdir(file_path)]\n",[254,45547,45548],{"class":256,"line":1768},[254,45549,2540],{"emptyLinePlaceholder":184},[254,45551,45552],{"class":256,"line":1782},[254,45553,45554],{"class":323},"# 创建训练集train文件夹\n",[254,45556,45557,45560,45563],{"class":256,"line":1787},[254,45558,45559],{"class":264},"mkfile(",[254,45561,45562],{"class":369},"'data\u002Ftrain'",[254,45564,271],{"class":264},[254,45566,45567,45569,45571,45573],{"class":256,"line":1793},[254,45568,3165],{"class":260},[254,45570,45540],{"class":264},[254,45572,26184],{"class":260},[254,45574,45575],{"class":264}," flower_class:\n",[254,45577,45578,45581,45584,45586],{"class":256,"line":1814},[254,45579,45580],{"class":264},"    mkfile(",[254,45582,45583],{"class":369},"'data\u002Ftrain\u002F'",[254,45585,745],{"class":260},[254,45587,45588],{"class":264},"cla)\n",[254,45590,45591],{"class":256,"line":1819},[254,45592,2540],{"emptyLinePlaceholder":184},[254,45594,45595],{"class":256,"line":1833},[254,45596,45597],{"class":323},"# 创建验证集val文件夹\n",[254,45599,45600,45602,45605],{"class":256,"line":1838},[254,45601,45559],{"class":264},[254,45603,45604],{"class":369},"'data\u002Ftest'",[254,45606,271],{"class":264},[254,45608,45609,45611,45613,45615],{"class":256,"line":1867},[254,45610,3165],{"class":260},[254,45612,45540],{"class":264},[254,45614,26184],{"class":260},[254,45616,45575],{"class":264},[254,45618,45619,45621,45624,45626],{"class":256,"line":1872},[254,45620,45580],{"class":264},[254,45622,45623],{"class":369},"'data\u002Ftest\u002F'",[254,45625,745],{"class":260},[254,45627,45588],{"class":264},[254,45629,45630],{"class":256,"line":1889},[254,45631,2540],{"emptyLinePlaceholder":184},[254,45633,45634],{"class":256,"line":1894},[254,45635,45636],{"class":323},"# 划分比例，训练集：测试集=9：1\n",[254,45638,45639,45642,45644],{"class":256,"line":1899},[254,45640,45641],{"class":264},"split_rate",[254,45643,310],{"class":260},[254,45645,45646],{"class":313},"0.1\n",[254,45648,45649],{"class":256,"line":1904},[254,45650,2540],{"emptyLinePlaceholder":184},[254,45652,45653],{"class":256,"line":1918},[254,45654,45655],{"class":323},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[254,45657,45658],{"class":256,"line":1923},[254,45659,45660],{"class":323},"# cla_path：当前类别的原始图片路径\n",[254,45662,45663],{"class":256,"line":2717},[254,45664,45665],{"class":323},"# images：当前类别下所有图片的文件名列表\n",[254,45667,45668],{"class":256,"line":2731},[254,45669,45670],{"class":323},"# num：该类别图片总数\n",[254,45672,45673],{"class":256,"line":2739},[254,45674,45675],{"class":323},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[254,45677,45678],{"class":256,"line":2744},[254,45679,2540],{"emptyLinePlaceholder":184},[254,45681,45682,45684,45686,45688],{"class":256,"line":2750},[254,45683,3165],{"class":260},[254,45685,45540],{"class":264},[254,45687,26184],{"class":260},[254,45689,45575],{"class":264},[254,45691,45692,45695,45697,45700,45702,45705,45708,45710,45712,45714],{"class":256,"line":2756},[254,45693,45694],{"class":264},"    cla_path ",[254,45696,310],{"class":260},[254,45698,45699],{"class":264}," file_path ",[254,45701,745],{"class":260},[254,45703,45704],{"class":369}," '\u002F'",[254,45706,45707],{"class":260}," +",[254,45709,45540],{"class":264},[254,45711,745],{"class":260},[254,45713,45704],{"class":369},[254,45715,45716],{"class":323},"  # 某一类别的子目录\n",[254,45718,45719,45722,45724,45727],{"class":256,"line":2761},[254,45720,45721],{"class":264},"    images ",[254,45723,310],{"class":260},[254,45725,45726],{"class":264}," os.listdir(cla_path)  ",[254,45728,45729],{"class":323},"# iamges 列表存储了该目录下所有图像的名称\n",[254,45731,45732,45735,45737,45739],{"class":256,"line":8089},[254,45733,45734],{"class":264},"    num ",[254,45736,310],{"class":260},[254,45738,7472],{"class":313},[254,45740,45741],{"class":264},"(images)\n",[254,45743,45744,45747,45749,45752,45754,45756,45758,45761,45763,45766],{"class":256,"line":8113},[254,45745,45746],{"class":264},"    eval_index ",[254,45748,310],{"class":260},[254,45750,45751],{"class":264}," random.sample(images, ",[254,45753,757],{"class":5357},[254,45755,310],{"class":260},[254,45757,268],{"class":313},[254,45759,45760],{"class":264},"(num ",[254,45762,719],{"class":260},[254,45764,45765],{"class":264}," split_rate))  ",[254,45767,45768],{"class":323},"# 从images列表中随机抽取 k 个图像名称\n",[254,45770,45771],{"class":256,"line":8118},[254,45772,45773],{"class":323},"    # 遍历该类别下的所有图片\n",[254,45775,45776],{"class":256,"line":8124},[254,45777,45778],{"class":323},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[254,45780,45781,45783,45786,45788,45790],{"class":256,"line":8151},[254,45782,3341],{"class":260},[254,45784,45785],{"class":264}," index, image ",[254,45787,26184],{"class":260},[254,45789,31747],{"class":313},[254,45791,45792],{"class":264},"(images):\n",[254,45794,45795],{"class":256,"line":8156},[254,45796,45797],{"class":323},"        # eval_index 中保存验证集val的图像名称\n",[254,45799,45800,45802,45805,45807],{"class":256,"line":8162},[254,45801,2637],{"class":260},[254,45803,45804],{"class":264}," image ",[254,45806,26184],{"class":260},[254,45808,45809],{"class":264}," eval_index:\n",[254,45811,45812,45815,45817,45820,45822],{"class":256,"line":8174},[254,45813,45814],{"class":264},"            image_path ",[254,45816,310],{"class":260},[254,45818,45819],{"class":264}," cla_path ",[254,45821,745],{"class":260},[254,45823,45824],{"class":264}," image\n",[254,45826,45827,45830,45832,45835,45837],{"class":256,"line":8186},[254,45828,45829],{"class":264},"            new_path ",[254,45831,310],{"class":260},[254,45833,45834],{"class":369}," 'data\u002Ftest\u002F'",[254,45836,45707],{"class":260},[254,45838,45839],{"class":264}," cla\n",[254,45841,45842,45845],{"class":256,"line":8198},[254,45843,45844],{"class":264},"            copy(image_path, new_path)  ",[254,45846,45847],{"class":323},"# 将选中的图像复制到新路径\n",[254,45849,45850],{"class":256,"line":9857},[254,45851,2540],{"emptyLinePlaceholder":184},[254,45853,45854],{"class":256,"line":9882},[254,45855,45856],{"class":323},"        # 其余的图像保存在训练集train中\n",[254,45858,45859,45861],{"class":256,"line":9905},[254,45860,2674],{"class":260},[254,45862,3879],{"class":264},[254,45864,45865,45867,45869,45871,45873],{"class":256,"line":9929},[254,45866,45814],{"class":264},[254,45868,310],{"class":260},[254,45870,45819],{"class":264},[254,45872,745],{"class":260},[254,45874,45824],{"class":264},[254,45876,45877,45879,45881,45884,45886],{"class":256,"line":9934},[254,45878,45829],{"class":264},[254,45880,310],{"class":260},[254,45882,45883],{"class":369}," 'data\u002Ftrain\u002F'",[254,45885,45707],{"class":260},[254,45887,45839],{"class":264},[254,45889,45890],{"class":256,"line":9939},[254,45891,45892],{"class":264},"            copy(image_path, new_path)\n",[254,45894,45895],{"class":256,"line":9944},[254,45896,45897],{"class":323},"            # 打印进度条信息\n",[254,45899,45900],{"class":256,"line":9953},[254,45901,45902],{"class":323},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[254,45904,45905,45907,45909,45911,45914,45916,45918,45921,45923,45925,45927,45930,45933,45935,45937,45940,45943,45945,45947,45950],{"class":256,"line":9958},[254,45906,32592],{"class":313},[254,45908,265],{"class":264},[254,45910,515],{"class":369},[254,45912,45913],{"class":313},"\\r",[254,45915,1154],{"class":369},[254,45917,32600],{"class":313},[254,45919,45920],{"class":369},"] processing [",[254,45922,32600],{"class":313},[254,45924,848],{"class":369},[254,45926,32600],{"class":313},[254,45928,45929],{"class":369},"]\"",[254,45931,45932],{"class":264},".format(cla, index ",[254,45934,745],{"class":260},[254,45936,25259],{"class":313},[254,45938,45939],{"class":264},", num), ",[254,45941,45942],{"class":5357},"end",[254,45944,310],{"class":260},[254,45946,7793],{"class":369},[254,45948,45949],{"class":264},")  ",[254,45951,45952],{"class":323},"# processing bar\n",[254,45954,45955,45957],{"class":256,"line":9964},[254,45956,31440],{"class":313},[254,45958,2116],{"class":264},[254,45960,45961],{"class":256,"line":9985},[254,45962,2540],{"emptyLinePlaceholder":184},[254,45964,45965,45967,45969,45972],{"class":256,"line":9991},[254,45966,30556],{"class":313},[254,45968,265],{"class":264},[254,45970,45971],{"class":369},"\"processing done!\"",[254,45973,271],{"class":264},[14,45975,45976],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[22139,45978,45980],{"id":45979},"_242模型代码","2.4.2.模型代码",[14,45982,45983],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[245,45985,45987],{"className":30519,"code":45986,"language":30521,"meta":174,"style":174},"import torch\nfrom torch import nn\nfrom torchsummary import summary\n\nclass Inception(nn.Module):\n    def __init__(self,in_channels,c1,c2,c3,c4):\n        super(Inception,self).__init__()\n        self.ReLu=nn.ReLU()\n        # 路线1：定义1*1卷积\n        self.p1_1=nn.Conv2d(in_channels=in_channels,out_channels=c1,kernel_size=1)\n        # 路线2：定义1*1卷积和3*3\n        self.p2_1=nn.Conv2d(in_channels=in_channels,out_channels=c2[0],kernel_size=1)\n        self.p2_2=nn.Conv2d(in_channels=c2[0],out_channels=c2[1],kernel_size=3,padding=1)\n        # 路线3：定义1*1卷积和5*5\n        self.p3_1=nn.Conv2d(in_channels=in_channels,out_channels=c3[0],kernel_size=1)\n        self.p3_2=nn.Conv2d(in_channels=c3[0],out_channels=c3[1],kernel_size=5,padding=2)\n        # 路线4：定义3*3最大池化和1*1卷积\n        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n        self.p4_1=nn.MaxPool2d(kernel_size=3,stride=1,padding=1)\n        self.p4_2=nn.Conv2d(in_channels=in_channels,out_channels=c4,kernel_size=1)\n\n    def forward(self,x):\n        p1=self.ReLu(self.p1_1(x))\n        p2=self.ReLu(self.p2_2(self.ReLu(self.p2_1(x))))\n        p3=self.ReLu(self.p3_2(self.ReLu(self.p3_1(x))))\n        p4=self.ReLu(self.p4_2(self.p4_1(x)))\n        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n        return torch.cat((p1,p2,p3,p4),dim=1)\n\n# 搭建GoogLeNet网络\nclass GoogLeNet(nn.Module):\n    # 必须把Inception导入到里边\n    def __init__(self,Inception):\n        super(GoogLeNet,self).__init__()\n        self.b1=nn.Sequential(\n            nn.Conv2d(in_channels=3,out_channels=64,kernel_size=7,stride=2,padding=3),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b2=nn.Sequential(\n            nn.Conv2d(in_channels=64,out_channels=64,kernel_size=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=64,out_channels=192,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b3=nn.Sequential(\n            Inception(192,64,(96,128),(16,32),32),\n            Inception(256,128,(128,192),(32,96),64),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b4=nn.Sequential(\n            Inception(480,192,(96,208),(16,48),64),\n            Inception(512,160,(112,224),(24,64),64),\n            Inception(512,128,(128,256),(24,64),64),\n            Inception(512,112,(128,288),(32,64),64),\n            Inception(528,256,(160,320),(32,128),128),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b5=nn.Sequential(\n            Inception(832,256,(160,320),(32,128),128),\n            Inception(832,384,(192,384),(48,128),128),\n            nn.AdaptiveAvgPool2d((1,1)),\n            nn.Flatten(),\n            nn.Linear(1024,2)\n        )\n        # 对模型参数初始化\n        for m in self.modules():\n            if isinstance(m,nn.Conv2d):\n                nn.init.kaiming_normal_(m.weight,mode='fan_out',nonlinearity='relu')\n                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n                # ② mode = 'fan_out'决定使用的fan值：\n                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n                if m.bias is not None:\n                    nn.init.constant_(m.bias,0)\n                elif isinstance(m,nn.Linear):\n                    nn.init.normal_(m.weight,0,0.01)\n                    if m.bias is not None:\n                        nn.init.constant_(m.bias,0)\n    # 定义前向传播\n    def forward(self,x):\n        x=self.b1(x)\n        x=self.b2(x)\n        x=self.b3(x)\n        x=self.b4(x)\n        x=self.b5(x)\n        return x\n\n# 模型展示\nif __name__==\"__main__\":\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n    model=GoogLeNet(Inception).to(device)\n    print(summary(model,(1,224,224)))\n",[251,45988,45989,45995,46005,46015,46019,46035,46043,46057,46067,46071,46101,46105,46139,46185,46189,46223,46269,46273,46277,46311,46341,46345,46353,46367,46389,46411,46429,46433,46447,46451,46455,46471,46475,46483,46497,46507,46551,46555,46583,46587,46597,46625,46629,46665,46669,46697,46701,46711,46743,46775,46803,46807,46817,46849,46881,46913,46945,46977,47005,47009,47019,47051,47083,47095,47099,47111,47115,47119,47131,47139,47159,47163,47167,47171,47175,47179,47183,47197,47205,47213,47225,47239,47247,47251,47259,47269,47279,47289,47299,47309,47315,47319,47323,47335,47355,47363],{"__ignoreMap":174},[254,45990,45991,45993],{"class":256,"line":257},[254,45992,30533],{"class":260},[254,45994,30536],{"class":264},[254,45996,45997,45999,46001,46003],{"class":256,"line":175},[254,45998,30878],{"class":260},[254,46000,30881],{"class":264},[254,46002,30533],{"class":260},[254,46004,30886],{"class":264},[254,46006,46007,46009,46011,46013],{"class":256,"line":1319},[254,46008,30878],{"class":260},[254,46010,30898],{"class":264},[254,46012,30533],{"class":260},[254,46014,30903],{"class":264},[254,46016,46017],{"class":256,"line":1334},[254,46018,2540],{"emptyLinePlaceholder":184},[254,46020,46021,46023,46025,46027,46029,46031,46033],{"class":256,"line":1340},[254,46022,14835],{"class":260},[254,46024,41634],{"class":2103},[254,46026,265],{"class":264},[254,46028,30919],{"class":2103},[254,46030,822],{"class":264},[254,46032,30924],{"class":2103},[254,46034,30927],{"class":264},[254,46036,46037,46039,46041],{"class":256,"line":1354},[254,46038,30942],{"class":260},[254,46040,30945],{"class":313},[254,46042,41653],{"class":264},[254,46044,46045,46047,46049,46051,46053,46055],{"class":256,"line":1360},[254,46046,30958],{"class":313},[254,46048,41660],{"class":264},[254,46050,30964],{"class":313},[254,46052,30967],{"class":264},[254,46054,30970],{"class":313},[254,46056,2116],{"class":264},[254,46058,46059,46061,46063,46065],{"class":256,"line":1451},[254,46060,30986],{"class":313},[254,46062,34912],{"class":264},[254,46064,310],{"class":260},[254,46066,34917],{"class":264},[254,46068,46069],{"class":256,"line":1457},[254,46070,41683],{"class":323},[254,46072,46073,46075,46077,46079,46081,46083,46085,46087,46089,46091,46093,46095,46097,46099],{"class":256,"line":1469},[254,46074,30986],{"class":313},[254,46076,41690],{"class":264},[254,46078,310],{"class":260},[254,46080,30994],{"class":264},[254,46082,30997],{"class":5357},[254,46084,310],{"class":260},[254,46086,41701],{"class":264},[254,46088,31006],{"class":5357},[254,46090,310],{"class":260},[254,46092,41708],{"class":264},[254,46094,31015],{"class":5357},[254,46096,310],{"class":260},[254,46098,482],{"class":313},[254,46100,271],{"class":264},[254,46102,46103],{"class":256,"line":1752},[254,46104,41721],{"class":323},[254,46106,46107,46109,46111,46113,46115,46117,46119,46121,46123,46125,46127,46129,46131,46133,46135,46137],{"class":256,"line":1757},[254,46108,30986],{"class":313},[254,46110,41728],{"class":264},[254,46112,310],{"class":260},[254,46114,30994],{"class":264},[254,46116,30997],{"class":5357},[254,46118,310],{"class":260},[254,46120,41701],{"class":264},[254,46122,31006],{"class":5357},[254,46124,310],{"class":260},[254,46126,41745],{"class":264},[254,46128,456],{"class":313},[254,46130,41750],{"class":264},[254,46132,31015],{"class":5357},[254,46134,310],{"class":260},[254,46136,482],{"class":313},[254,46138,271],{"class":264},[254,46140,46141,46143,46145,46147,46149,46151,46153,46155,46157,46159,46161,46163,46165,46167,46169,46171,46173,46175,46177,46179,46181,46183],{"class":256,"line":1763},[254,46142,30986],{"class":313},[254,46144,41765],{"class":264},[254,46146,310],{"class":260},[254,46148,30994],{"class":264},[254,46150,30997],{"class":5357},[254,46152,310],{"class":260},[254,46154,41745],{"class":264},[254,46156,456],{"class":313},[254,46158,41750],{"class":264},[254,46160,31006],{"class":5357},[254,46162,310],{"class":260},[254,46164,41745],{"class":264},[254,46166,482],{"class":313},[254,46168,41750],{"class":264},[254,46170,31015],{"class":5357},[254,46172,310],{"class":260},[254,46174,336],{"class":313},[254,46176,642],{"class":264},[254,46178,31024],{"class":5357},[254,46180,310],{"class":260},[254,46182,482],{"class":313},[254,46184,271],{"class":264},[254,46186,46187],{"class":256,"line":1768},[254,46188,41810],{"class":323},[254,46190,46191,46193,46195,46197,46199,46201,46203,46205,46207,46209,46211,46213,46215,46217,46219,46221],{"class":256,"line":1782},[254,46192,30986],{"class":313},[254,46194,41817],{"class":264},[254,46196,310],{"class":260},[254,46198,30994],{"class":264},[254,46200,30997],{"class":5357},[254,46202,310],{"class":260},[254,46204,41701],{"class":264},[254,46206,31006],{"class":5357},[254,46208,310],{"class":260},[254,46210,41834],{"class":264},[254,46212,456],{"class":313},[254,46214,41750],{"class":264},[254,46216,31015],{"class":5357},[254,46218,310],{"class":260},[254,46220,482],{"class":313},[254,46222,271],{"class":264},[254,46224,46225,46227,46229,46231,46233,46235,46237,46239,46241,46243,46245,46247,46249,46251,46253,46255,46257,46259,46261,46263,46265,46267],{"class":256,"line":1787},[254,46226,30986],{"class":313},[254,46228,41853],{"class":264},[254,46230,310],{"class":260},[254,46232,30994],{"class":264},[254,46234,30997],{"class":5357},[254,46236,310],{"class":260},[254,46238,41834],{"class":264},[254,46240,456],{"class":313},[254,46242,41750],{"class":264},[254,46244,31006],{"class":5357},[254,46246,310],{"class":260},[254,46248,41834],{"class":264},[254,46250,482],{"class":313},[254,46252,41750],{"class":264},[254,46254,31015],{"class":5357},[254,46256,310],{"class":260},[254,46258,583],{"class":313},[254,46260,642],{"class":264},[254,46262,31024],{"class":5357},[254,46264,310],{"class":260},[254,46266,342],{"class":313},[254,46268,271],{"class":264},[254,46270,46271],{"class":256,"line":1793},[254,46272,41898],{"class":323},[254,46274,46275],{"class":256,"line":1814},[254,46276,41903],{"class":323},[254,46278,46279,46281,46283,46285,46287,46289,46291,46293,46295,46297,46299,46301,46303,46305,46307,46309],{"class":256,"line":1819},[254,46280,30986],{"class":313},[254,46282,41910],{"class":264},[254,46284,310],{"class":260},[254,46286,34970],{"class":264},[254,46288,31015],{"class":5357},[254,46290,310],{"class":260},[254,46292,336],{"class":313},[254,46294,642],{"class":264},[254,46296,31070],{"class":5357},[254,46298,310],{"class":260},[254,46300,482],{"class":313},[254,46302,642],{"class":264},[254,46304,31024],{"class":5357},[254,46306,310],{"class":260},[254,46308,482],{"class":313},[254,46310,271],{"class":264},[254,46312,46313,46315,46317,46319,46321,46323,46325,46327,46329,46331,46333,46335,46337,46339],{"class":256,"line":1833},[254,46314,30986],{"class":313},[254,46316,41945],{"class":264},[254,46318,310],{"class":260},[254,46320,30994],{"class":264},[254,46322,30997],{"class":5357},[254,46324,310],{"class":260},[254,46326,41701],{"class":264},[254,46328,31006],{"class":5357},[254,46330,310],{"class":260},[254,46332,41962],{"class":264},[254,46334,31015],{"class":5357},[254,46336,310],{"class":260},[254,46338,482],{"class":313},[254,46340,271],{"class":264},[254,46342,46343],{"class":256,"line":1838},[254,46344,2540],{"emptyLinePlaceholder":184},[254,46346,46347,46349,46351],{"class":256,"line":1867},[254,46348,30942],{"class":260},[254,46350,31234],{"class":2103},[254,46352,31237],{"class":264},[254,46354,46355,46357,46359,46361,46363,46365],{"class":256,"line":1872},[254,46356,41987],{"class":264},[254,46358,310],{"class":260},[254,46360,30964],{"class":313},[254,46362,35325],{"class":264},[254,46364,30964],{"class":313},[254,46366,41998],{"class":264},[254,46368,46369,46371,46373,46375,46377,46379,46381,46383,46385,46387],{"class":256,"line":1889},[254,46370,7226],{"class":264},[254,46372,310],{"class":260},[254,46374,30964],{"class":313},[254,46376,35325],{"class":264},[254,46378,30964],{"class":313},[254,46380,42013],{"class":264},[254,46382,30964],{"class":313},[254,46384,35325],{"class":264},[254,46386,30964],{"class":313},[254,46388,42022],{"class":264},[254,46390,46391,46393,46395,46397,46399,46401,46403,46405,46407,46409],{"class":256,"line":1894},[254,46392,42027],{"class":264},[254,46394,310],{"class":260},[254,46396,30964],{"class":313},[254,46398,35325],{"class":264},[254,46400,30964],{"class":313},[254,46402,42038],{"class":264},[254,46404,30964],{"class":313},[254,46406,35325],{"class":264},[254,46408,30964],{"class":313},[254,46410,42047],{"class":264},[254,46412,46413,46415,46417,46419,46421,46423,46425,46427],{"class":256,"line":1899},[254,46414,42052],{"class":264},[254,46416,310],{"class":260},[254,46418,30964],{"class":313},[254,46420,35325],{"class":264},[254,46422,30964],{"class":313},[254,46424,42063],{"class":264},[254,46426,30964],{"class":313},[254,46428,42068],{"class":264},[254,46430,46431],{"class":256,"line":1904},[254,46432,42073],{"class":323},[254,46434,46435,46437,46439,46441,46443,46445],{"class":256,"line":1918},[254,46436,14893],{"class":260},[254,46438,42080],{"class":264},[254,46440,32826],{"class":5357},[254,46442,310],{"class":260},[254,46444,482],{"class":313},[254,46446,271],{"class":264},[254,46448,46449],{"class":256,"line":1923},[254,46450,2540],{"emptyLinePlaceholder":184},[254,46452,46453],{"class":256,"line":2717},[254,46454,42101],{"class":323},[254,46456,46457,46459,46461,46463,46465,46467,46469],{"class":256,"line":2731},[254,46458,14835],{"class":260},[254,46460,42108],{"class":2103},[254,46462,265],{"class":264},[254,46464,30919],{"class":2103},[254,46466,822],{"class":264},[254,46468,30924],{"class":2103},[254,46470,30927],{"class":264},[254,46472,46473],{"class":256,"line":2739},[254,46474,42123],{"class":323},[254,46476,46477,46479,46481],{"class":256,"line":2744},[254,46478,30942],{"class":260},[254,46480,30945],{"class":313},[254,46482,42132],{"class":264},[254,46484,46485,46487,46489,46491,46493,46495],{"class":256,"line":2750},[254,46486,30958],{"class":313},[254,46488,42139],{"class":264},[254,46490,30964],{"class":313},[254,46492,30967],{"class":264},[254,46494,30970],{"class":313},[254,46496,2116],{"class":264},[254,46498,46499,46501,46503,46505],{"class":256,"line":2756},[254,46500,30986],{"class":313},[254,46502,42154],{"class":264},[254,46504,310],{"class":260},[254,46506,38150],{"class":264},[254,46508,46509,46511,46513,46515,46517,46519,46521,46523,46525,46527,46529,46531,46533,46535,46537,46539,46541,46543,46545,46547,46549],{"class":256,"line":2761},[254,46510,38155],{"class":264},[254,46512,30997],{"class":5357},[254,46514,310],{"class":260},[254,46516,336],{"class":313},[254,46518,642],{"class":264},[254,46520,31006],{"class":5357},[254,46522,310],{"class":260},[254,46524,468],{"class":313},[254,46526,642],{"class":264},[254,46528,31015],{"class":5357},[254,46530,310],{"class":260},[254,46532,633],{"class":313},[254,46534,642],{"class":264},[254,46536,31070],{"class":5357},[254,46538,310],{"class":260},[254,46540,342],{"class":313},[254,46542,642],{"class":264},[254,46544,31024],{"class":5357},[254,46546,310],{"class":260},[254,46548,336],{"class":313},[254,46550,38188],{"class":264},[254,46552,46553],{"class":256,"line":8089},[254,46554,38193],{"class":264},[254,46556,46557,46559,46561,46563,46565,46567,46569,46571,46573,46575,46577,46579,46581],{"class":256,"line":8113},[254,46558,38238],{"class":264},[254,46560,31015],{"class":5357},[254,46562,310],{"class":260},[254,46564,336],{"class":313},[254,46566,642],{"class":264},[254,46568,31070],{"class":5357},[254,46570,310],{"class":260},[254,46572,342],{"class":313},[254,46574,642],{"class":264},[254,46576,31024],{"class":5357},[254,46578,310],{"class":260},[254,46580,482],{"class":313},[254,46582,271],{"class":264},[254,46584,46585],{"class":256,"line":8118},[254,46586,38267],{"class":264},[254,46588,46589,46591,46593,46595],{"class":256,"line":8124},[254,46590,30986],{"class":313},[254,46592,42245],{"class":264},[254,46594,310],{"class":260},[254,46596,38150],{"class":264},[254,46598,46599,46601,46603,46605,46607,46609,46611,46613,46615,46617,46619,46621,46623],{"class":256,"line":8151},[254,46600,38155],{"class":264},[254,46602,30997],{"class":5357},[254,46604,310],{"class":260},[254,46606,468],{"class":313},[254,46608,642],{"class":264},[254,46610,31006],{"class":5357},[254,46612,310],{"class":260},[254,46614,468],{"class":313},[254,46616,642],{"class":264},[254,46618,31015],{"class":5357},[254,46620,310],{"class":260},[254,46622,482],{"class":313},[254,46624,38188],{"class":264},[254,46626,46627],{"class":256,"line":8156},[254,46628,38193],{"class":264},[254,46630,46631,46633,46635,46637,46639,46641,46643,46645,46647,46649,46651,46653,46655,46657,46659,46661,46663],{"class":256,"line":8162},[254,46632,38155],{"class":264},[254,46634,30997],{"class":5357},[254,46636,310],{"class":260},[254,46638,468],{"class":313},[254,46640,642],{"class":264},[254,46642,31006],{"class":5357},[254,46644,310],{"class":260},[254,46646,42300],{"class":313},[254,46648,642],{"class":264},[254,46650,31015],{"class":5357},[254,46652,310],{"class":260},[254,46654,336],{"class":313},[254,46656,642],{"class":264},[254,46658,31024],{"class":5357},[254,46660,310],{"class":260},[254,46662,482],{"class":313},[254,46664,38188],{"class":264},[254,46666,46667],{"class":256,"line":8174},[254,46668,38193],{"class":264},[254,46670,46671,46673,46675,46677,46679,46681,46683,46685,46687,46689,46691,46693,46695],{"class":256,"line":8186},[254,46672,38238],{"class":264},[254,46674,31015],{"class":5357},[254,46676,310],{"class":260},[254,46678,336],{"class":313},[254,46680,642],{"class":264},[254,46682,31070],{"class":5357},[254,46684,310],{"class":260},[254,46686,342],{"class":313},[254,46688,642],{"class":264},[254,46690,31024],{"class":5357},[254,46692,310],{"class":260},[254,46694,482],{"class":313},[254,46696,271],{"class":264},[254,46698,46699],{"class":256,"line":8198},[254,46700,38267],{"class":264},[254,46702,46703,46705,46707,46709],{"class":256,"line":9857},[254,46704,30986],{"class":313},[254,46706,42361],{"class":264},[254,46708,310],{"class":260},[254,46710,38150],{"class":264},[254,46712,46713,46715,46717,46719,46721,46723,46725,46727,46729,46731,46733,46735,46737,46739,46741],{"class":256,"line":9882},[254,46714,42370],{"class":264},[254,46716,42300],{"class":313},[254,46718,642],{"class":264},[254,46720,468],{"class":313},[254,46722,42379],{"class":264},[254,46724,474],{"class":313},[254,46726,642],{"class":264},[254,46728,32211],{"class":313},[254,46730,42388],{"class":264},[254,46732,865],{"class":313},[254,46734,642],{"class":264},[254,46736,462],{"class":313},[254,46738,42397],{"class":264},[254,46740,462],{"class":313},[254,46742,38188],{"class":264},[254,46744,46745,46747,46749,46751,46753,46755,46757,46759,46761,46763,46765,46767,46769,46771,46773],{"class":256,"line":9905},[254,46746,42370],{"class":264},[254,46748,35011],{"class":313},[254,46750,642],{"class":264},[254,46752,32211],{"class":313},[254,46754,42379],{"class":264},[254,46756,32211],{"class":313},[254,46758,642],{"class":264},[254,46760,42300],{"class":313},[254,46762,42388],{"class":264},[254,46764,462],{"class":313},[254,46766,642],{"class":264},[254,46768,474],{"class":313},[254,46770,42397],{"class":264},[254,46772,468],{"class":313},[254,46774,38188],{"class":264},[254,46776,46777,46779,46781,46783,46785,46787,46789,46791,46793,46795,46797,46799,46801],{"class":256,"line":9929},[254,46778,38238],{"class":264},[254,46780,31015],{"class":5357},[254,46782,310],{"class":260},[254,46784,336],{"class":313},[254,46786,642],{"class":264},[254,46788,31070],{"class":5357},[254,46790,310],{"class":260},[254,46792,342],{"class":313},[254,46794,642],{"class":264},[254,46796,31024],{"class":5357},[254,46798,310],{"class":260},[254,46800,482],{"class":313},[254,46802,271],{"class":264},[254,46804,46805],{"class":256,"line":9934},[254,46806,38267],{"class":264},[254,46808,46809,46811,46813,46815],{"class":256,"line":9939},[254,46810,30986],{"class":313},[254,46812,42472],{"class":264},[254,46814,310],{"class":260},[254,46816,38150],{"class":264},[254,46818,46819,46821,46823,46825,46827,46829,46831,46833,46835,46837,46839,46841,46843,46845,46847],{"class":256,"line":9944},[254,46820,42370],{"class":264},[254,46822,42483],{"class":313},[254,46824,642],{"class":264},[254,46826,42300],{"class":313},[254,46828,42379],{"class":264},[254,46830,474],{"class":313},[254,46832,642],{"class":264},[254,46834,42496],{"class":313},[254,46836,42388],{"class":264},[254,46838,865],{"class":313},[254,46840,642],{"class":264},[254,46842,871],{"class":313},[254,46844,42397],{"class":264},[254,46846,468],{"class":313},[254,46848,38188],{"class":264},[254,46850,46851,46853,46855,46857,46859,46861,46863,46865,46867,46869,46871,46873,46875,46877,46879],{"class":256,"line":9953},[254,46852,42370],{"class":264},[254,46854,38598],{"class":313},[254,46856,642],{"class":264},[254,46858,21189],{"class":313},[254,46860,42379],{"class":264},[254,46862,882],{"class":313},[254,46864,642],{"class":264},[254,46866,31642],{"class":313},[254,46868,42388],{"class":264},[254,46870,1064],{"class":313},[254,46872,642],{"class":264},[254,46874,468],{"class":313},[254,46876,42397],{"class":264},[254,46878,468],{"class":313},[254,46880,38188],{"class":264},[254,46882,46883,46885,46887,46889,46891,46893,46895,46897,46899,46901,46903,46905,46907,46909,46911],{"class":256,"line":9958},[254,46884,42370],{"class":264},[254,46886,38598],{"class":313},[254,46888,642],{"class":264},[254,46890,32211],{"class":313},[254,46892,42379],{"class":264},[254,46894,32211],{"class":313},[254,46896,642],{"class":264},[254,46898,35011],{"class":313},[254,46900,42388],{"class":264},[254,46902,1064],{"class":313},[254,46904,642],{"class":264},[254,46906,468],{"class":313},[254,46908,42397],{"class":264},[254,46910,468],{"class":313},[254,46912,38188],{"class":264},[254,46914,46915,46917,46919,46921,46923,46925,46927,46929,46931,46933,46935,46937,46939,46941,46943],{"class":256,"line":9964},[254,46916,42370],{"class":264},[254,46918,38598],{"class":313},[254,46920,642],{"class":264},[254,46922,882],{"class":313},[254,46924,42379],{"class":264},[254,46926,32211],{"class":313},[254,46928,642],{"class":264},[254,46930,42593],{"class":313},[254,46932,42388],{"class":264},[254,46934,462],{"class":313},[254,46936,642],{"class":264},[254,46938,468],{"class":313},[254,46940,42397],{"class":264},[254,46942,468],{"class":313},[254,46944,38188],{"class":264},[254,46946,46947,46949,46951,46953,46955,46957,46959,46961,46963,46965,46967,46969,46971,46973,46975],{"class":256,"line":9985},[254,46948,42370],{"class":264},[254,46950,42614],{"class":313},[254,46952,642],{"class":264},[254,46954,35011],{"class":313},[254,46956,42379],{"class":264},[254,46958,21189],{"class":313},[254,46960,642],{"class":264},[254,46962,42627],{"class":313},[254,46964,42388],{"class":264},[254,46966,462],{"class":313},[254,46968,642],{"class":264},[254,46970,32211],{"class":313},[254,46972,42397],{"class":264},[254,46974,32211],{"class":313},[254,46976,38188],{"class":264},[254,46978,46979,46981,46983,46985,46987,46989,46991,46993,46995,46997,46999,47001,47003],{"class":256,"line":9991},[254,46980,38238],{"class":264},[254,46982,31015],{"class":5357},[254,46984,310],{"class":260},[254,46986,336],{"class":313},[254,46988,642],{"class":264},[254,46990,31070],{"class":5357},[254,46992,310],{"class":260},[254,46994,342],{"class":313},[254,46996,642],{"class":264},[254,46998,31024],{"class":5357},[254,47000,310],{"class":260},[254,47002,482],{"class":313},[254,47004,271],{"class":264},[254,47006,47007],{"class":256,"line":10005},[254,47008,38267],{"class":264},[254,47010,47011,47013,47015,47017],{"class":256,"line":10011},[254,47012,30986],{"class":313},[254,47014,42680],{"class":264},[254,47016,310],{"class":260},[254,47018,38150],{"class":264},[254,47020,47021,47023,47025,47027,47029,47031,47033,47035,47037,47039,47041,47043,47045,47047,47049],{"class":256,"line":10038},[254,47022,42370],{"class":264},[254,47024,42691],{"class":313},[254,47026,642],{"class":264},[254,47028,35011],{"class":313},[254,47030,42379],{"class":264},[254,47032,21189],{"class":313},[254,47034,642],{"class":264},[254,47036,42627],{"class":313},[254,47038,42388],{"class":264},[254,47040,462],{"class":313},[254,47042,642],{"class":264},[254,47044,32211],{"class":313},[254,47046,42397],{"class":264},[254,47048,32211],{"class":313},[254,47050,38188],{"class":264},[254,47052,47053,47055,47057,47059,47061,47063,47065,47067,47069,47071,47073,47075,47077,47079,47081],{"class":256,"line":10047},[254,47054,42370],{"class":264},[254,47056,42691],{"class":313},[254,47058,642],{"class":264},[254,47060,35081],{"class":313},[254,47062,42379],{"class":264},[254,47064,42300],{"class":313},[254,47066,642],{"class":264},[254,47068,35081],{"class":313},[254,47070,42388],{"class":264},[254,47072,871],{"class":313},[254,47074,642],{"class":264},[254,47076,32211],{"class":313},[254,47078,42397],{"class":264},[254,47080,32211],{"class":313},[254,47082,38188],{"class":264},[254,47084,47085,47087,47089,47091,47093],{"class":256,"line":10053},[254,47086,42754],{"class":264},[254,47088,482],{"class":313},[254,47090,642],{"class":264},[254,47092,482],{"class":313},[254,47094,42763],{"class":264},[254,47096,47097],{"class":256,"line":10061},[254,47098,38931],{"class":264},[254,47100,47101,47103,47105,47107,47109],{"class":256,"line":10066},[254,47102,38936],{"class":264},[254,47104,42774],{"class":313},[254,47106,642],{"class":264},[254,47108,342],{"class":313},[254,47110,271],{"class":264},[254,47112,47113],{"class":256,"line":16745},[254,47114,38267],{"class":264},[254,47116,47117],{"class":256,"line":16751},[254,47118,42789],{"class":323},[254,47120,47121,47123,47125,47127,47129],{"class":256,"line":16774},[254,47122,3543],{"class":260},[254,47124,39009],{"class":264},[254,47126,26184],{"class":260},[254,47128,39014],{"class":313},[254,47130,39017],{"class":264},[254,47132,47133,47135,47137],{"class":256,"line":16780},[254,47134,4782],{"class":260},[254,47136,39029],{"class":313},[254,47138,39032],{"class":264},[254,47140,47141,47143,47145,47147,47149,47151,47153,47155,47157],{"class":256,"line":16803},[254,47142,39042],{"class":264},[254,47144,42816],{"class":5357},[254,47146,310],{"class":260},[254,47148,42821],{"class":369},[254,47150,642],{"class":264},[254,47152,39045],{"class":5357},[254,47154,310],{"class":260},[254,47156,39050],{"class":369},[254,47158,271],{"class":264},[254,47160,47161],{"class":256,"line":16817},[254,47162,42836],{"class":323},[254,47164,47165],{"class":256,"line":16837},[254,47166,42841],{"class":323},[254,47168,47169],{"class":256,"line":16843},[254,47170,42846],{"class":323},[254,47172,47173],{"class":256,"line":16854},[254,47174,42851],{"class":323},[254,47176,47177],{"class":256,"line":16877},[254,47178,42856],{"class":323},[254,47180,47181],{"class":256,"line":16899},[254,47182,42861],{"class":323},[254,47184,47185,47187,47189,47191,47193,47195],{"class":256,"line":16904},[254,47186,39062],{"class":260},[254,47188,39065],{"class":264},[254,47190,39068],{"class":260},[254,47192,39071],{"class":260},[254,47194,39074],{"class":313},[254,47196,3879],{"class":264},[254,47198,47199,47201,47203],{"class":256,"line":16910},[254,47200,39086],{"class":264},[254,47202,456],{"class":313},[254,47204,271],{"class":264},[254,47206,47207,47209,47211],{"class":256,"line":16924},[254,47208,42888],{"class":260},[254,47210,39029],{"class":313},[254,47212,39105],{"class":264},[254,47214,47215,47217,47219,47221,47223],{"class":256,"line":16937},[254,47216,42897],{"class":264},[254,47218,456],{"class":313},[254,47220,642],{"class":264},[254,47222,39127],{"class":313},[254,47224,271],{"class":264},[254,47226,47227,47229,47231,47233,47235,47237],{"class":256,"line":16942},[254,47228,42910],{"class":260},[254,47230,39065],{"class":264},[254,47232,39068],{"class":260},[254,47234,39071],{"class":260},[254,47236,39074],{"class":313},[254,47238,3879],{"class":264},[254,47240,47241,47243,47245],{"class":256,"line":16956},[254,47242,42925],{"class":264},[254,47244,456],{"class":313},[254,47246,271],{"class":264},[254,47248,47249],{"class":256,"line":16961},[254,47250,35306],{"class":323},[254,47252,47253,47255,47257],{"class":256,"line":16967},[254,47254,30942],{"class":260},[254,47256,31234],{"class":2103},[254,47258,31237],{"class":264},[254,47260,47261,47263,47265,47267],{"class":256,"line":16972},[254,47262,31242],{"class":264},[254,47264,310],{"class":260},[254,47266,30964],{"class":313},[254,47268,42952],{"class":264},[254,47270,47271,47273,47275,47277],{"class":256,"line":16986},[254,47272,31242],{"class":264},[254,47274,310],{"class":260},[254,47276,30964],{"class":313},[254,47278,42963],{"class":264},[254,47280,47281,47283,47285,47287],{"class":256,"line":16991},[254,47282,31242],{"class":264},[254,47284,310],{"class":260},[254,47286,30964],{"class":313},[254,47288,42974],{"class":264},[254,47290,47291,47293,47295,47297],{"class":256,"line":16996},[254,47292,31242],{"class":264},[254,47294,310],{"class":260},[254,47296,30964],{"class":313},[254,47298,42985],{"class":264},[254,47300,47301,47303,47305,47307],{"class":256,"line":17010},[254,47302,31242],{"class":264},[254,47304,310],{"class":260},[254,47306,30964],{"class":313},[254,47308,42996],{"class":264},[254,47310,47311,47313],{"class":256,"line":17022},[254,47312,14893],{"class":260},[254,47314,31350],{"class":264},[254,47316,47317],{"class":256,"line":17027},[254,47318,2540],{"emptyLinePlaceholder":184},[254,47320,47321],{"class":256,"line":17040},[254,47322,43011],{"class":323},[254,47324,47325,47327,47329,47331,47333],{"class":256,"line":17045},[254,47326,1671],{"class":260},[254,47328,31361],{"class":313},[254,47330,3089],{"class":260},[254,47332,31366],{"class":369},[254,47334,3879],{"class":264},[254,47336,47337,47339,47341,47343,47345,47347,47349,47351,47353],{"class":256,"line":17050},[254,47338,31378],{"class":264},[254,47340,310],{"class":260},[254,47342,30592],{"class":264},[254,47344,31385],{"class":369},[254,47346,1844],{"class":260},[254,47348,31390],{"class":264},[254,47350,1841],{"class":260},[254,47352,30617],{"class":369},[254,47354,271],{"class":264},[254,47356,47357,47359,47361],{"class":256,"line":17055},[254,47358,31430],{"class":264},[254,47360,310],{"class":260},[254,47362,43052],{"class":264},[254,47364,47365,47367,47369,47371,47373,47375,47377,47379],{"class":256,"line":17068},[254,47366,31440],{"class":313},[254,47368,31443],{"class":264},[254,47370,482],{"class":313},[254,47372,642],{"class":264},[254,47374,31642],{"class":313},[254,47376,642],{"class":264},[254,47378,31642],{"class":313},[254,47380,31456],{"class":264},[22139,47382,47384],{"id":47383},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[14,47386,47387],{},"计算图片的均值与方差，用于训练中归一化处理操作",[245,47389,47391],{"className":30519,"code":47390,"language":30521,"meta":174,"style":174},"# PIL（Python Imaging Library）里的 Image 用来读取图片\nfrom PIL import Image\n# os 用来处理文件夹和文件路径\nimport os\n# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\nimport numpy as np\n\n# 文件夹路径，包含所有图片文件\nfolder_path = 'data_cat_dog'\n\n# 初始化累积变量\ntotal_pixels = 0\nsum_normalized_pixel_values = np.zeros(3)  # 如果是RGB图像，需要三个通道的均值和方差\n\n# 遍历文件夹中的图片文件\nfor root, dirs, files in os.walk(folder_path):\n    for filename in files:\n        if filename.endswith(('.jpg', '.jpeg', '.png', '.bmp')):  # 可根据实际情况添加其他格式\n            image_path = os.path.join(root, filename)\n            image = Image.open(image_path)\n            image_array = np.array(image)\n\n            # 归一化像素值到0-1之间\n            normalized_image_array = image_array \u002F 255.0\n\n            # print(image_path)\n            # print(normalized_image_array.shape)\n            # 累积归一化后的像素值和像素数量\n            total_pixels += normalized_image_array.size\n            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n            sum_normalized_pixel_values += np.sum(normalized_image_array, axis=(0, 1))\n\n# 用像素总和\u002F像素总数 就得到每个通道的均值\nmean = sum_normalized_pixel_values \u002F total_pixels\n\nsum_squared_diff = np.zeros(3)\n\n# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n# os.path.join(root, filename)：得到每张图片的完整路径\n# Image.open(image_path)：打开图片\n# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\nfor root, dirs, files in os.walk(folder_path):\n    for filename in files:\n        if filename.endswith(('.jpg', '.jpeg', '.png', '.bmp')):\n            image_path = os.path.join(root, filename)\n            image = Image.open(image_path)\n            image_array = np.array(image)\n            # 归一化像素值到0-1之间\n            normalized_image_array = image_array \u002F 255.0\n            # print(normalized_image_array.shape)\n            # print(mean.shape)\n            # print(image_path)\n\n            try:\n                diff = (normalized_image_array - mean) ** 2\n                sum_squared_diff += np.sum(diff, axis=(0, 1))\n            except:\n                print(f\"捕获到自定义异常\")\n            # diff = (normalized_image_array - mean) ** 2\n            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n\nvariance = sum_squared_diff \u002F total_pixels\n\nprint(\"Mean:\", mean)\nprint(\"Variance:\", variance)\n\n",[251,47392,47393,47398,47411,47416,47422,47427,47437,47441,47446,47456,47460,47465,47475,47492,47496,47501,47513,47525,47556,47565,47575,47585,47589,47594,47609,47613,47618,47623,47628,47638,47643,47668,47672,47677,47692,47696,47709,47713,47718,47723,47728,47733,47738,47748,47758,47781,47789,47797,47805,47809,47821,47825,47830,47834,47838,47845,47865,47889,47896,47910,47915,47920,47924,47938,47942,47954],{"__ignoreMap":174},[254,47394,47395],{"class":256,"line":257},[254,47396,47397],{"class":323},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[254,47399,47400,47402,47405,47408],{"class":256,"line":175},[254,47401,30878],{"class":260},[254,47403,47404],{"class":313}," PIL",[254,47406,47407],{"class":260}," import",[254,47409,47410],{"class":264}," Image\n",[254,47412,47413],{"class":256,"line":1319},[254,47414,47415],{"class":323},"# os 用来处理文件夹和文件路径\n",[254,47417,47418,47420],{"class":256,"line":1334},[254,47419,30533],{"class":260},[254,47421,45446],{"class":264},[254,47423,47424],{"class":256,"line":1340},[254,47425,47426],{"class":323},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[254,47428,47429,47431,47433,47435],{"class":256,"line":1354},[254,47430,30533],{"class":260},[254,47432,31521],{"class":264},[254,47434,31524],{"class":260},[254,47436,31527],{"class":264},[254,47438,47439],{"class":256,"line":1360},[254,47440,2540],{"emptyLinePlaceholder":184},[254,47442,47443],{"class":256,"line":1451},[254,47444,47445],{"class":323},"# 文件夹路径，包含所有图片文件\n",[254,47447,47448,47451,47453],{"class":256,"line":1457},[254,47449,47450],{"class":264},"folder_path ",[254,47452,310],{"class":260},[254,47454,47455],{"class":369}," 'data_cat_dog'\n",[254,47457,47458],{"class":256,"line":1469},[254,47459,2540],{"emptyLinePlaceholder":184},[254,47461,47462],{"class":256,"line":1752},[254,47463,47464],{"class":323},"# 初始化累积变量\n",[254,47466,47467,47470,47472],{"class":256,"line":1757},[254,47468,47469],{"class":264},"total_pixels ",[254,47471,310],{"class":260},[254,47473,47474],{"class":313}," 0\n",[254,47476,47477,47480,47482,47485,47487,47489],{"class":256,"line":1763},[254,47478,47479],{"class":264},"sum_normalized_pixel_values ",[254,47481,310],{"class":260},[254,47483,47484],{"class":264}," np.zeros(",[254,47486,336],{"class":313},[254,47488,45949],{"class":264},[254,47490,47491],{"class":323},"# 如果是RGB图像，需要三个通道的均值和方差\n",[254,47493,47494],{"class":256,"line":1768},[254,47495,2540],{"emptyLinePlaceholder":184},[254,47497,47498],{"class":256,"line":1782},[254,47499,47500],{"class":323},"# 遍历文件夹中的图片文件\n",[254,47502,47503,47505,47508,47510],{"class":256,"line":1787},[254,47504,3165],{"class":260},[254,47506,47507],{"class":264}," root, dirs, files ",[254,47509,26184],{"class":260},[254,47511,47512],{"class":264}," os.walk(folder_path):\n",[254,47514,47515,47517,47520,47522],{"class":256,"line":1793},[254,47516,3341],{"class":260},[254,47518,47519],{"class":264}," filename ",[254,47521,26184],{"class":260},[254,47523,47524],{"class":264}," files:\n",[254,47526,47527,47529,47532,47535,47537,47540,47542,47545,47547,47550,47553],{"class":256,"line":1814},[254,47528,2637],{"class":260},[254,47530,47531],{"class":264}," filename.endswith((",[254,47533,47534],{"class":369},"'.jpg'",[254,47536,12576],{"class":264},[254,47538,47539],{"class":369},"'.jpeg'",[254,47541,12576],{"class":264},[254,47543,47544],{"class":369},"'.png'",[254,47546,12576],{"class":264},[254,47548,47549],{"class":369},"'.bmp'",[254,47551,47552],{"class":264},")):  ",[254,47554,47555],{"class":323},"# 可根据实际情况添加其他格式\n",[254,47557,47558,47560,47562],{"class":256,"line":1819},[254,47559,45814],{"class":264},[254,47561,310],{"class":260},[254,47563,47564],{"class":264}," os.path.join(root, filename)\n",[254,47566,47567,47570,47572],{"class":256,"line":1833},[254,47568,47569],{"class":264},"            image ",[254,47571,310],{"class":260},[254,47573,47574],{"class":264}," Image.open(image_path)\n",[254,47576,47577,47580,47582],{"class":256,"line":1838},[254,47578,47579],{"class":264},"            image_array ",[254,47581,310],{"class":260},[254,47583,47584],{"class":264}," np.array(image)\n",[254,47586,47587],{"class":256,"line":1867},[254,47588,2540],{"emptyLinePlaceholder":184},[254,47590,47591],{"class":256,"line":1872},[254,47592,47593],{"class":323},"            # 归一化像素值到0-1之间\n",[254,47595,47596,47599,47601,47604,47606],{"class":256,"line":1889},[254,47597,47598],{"class":264},"            normalized_image_array ",[254,47600,310],{"class":260},[254,47602,47603],{"class":264}," image_array ",[254,47605,848],{"class":260},[254,47607,47608],{"class":313}," 255.0\n",[254,47610,47611],{"class":256,"line":1894},[254,47612,2540],{"emptyLinePlaceholder":184},[254,47614,47615],{"class":256,"line":1899},[254,47616,47617],{"class":323},"            # print(image_path)\n",[254,47619,47620],{"class":256,"line":1904},[254,47621,47622],{"class":323},"            # print(normalized_image_array.shape)\n",[254,47624,47625],{"class":256,"line":1918},[254,47626,47627],{"class":323},"            # 累积归一化后的像素值和像素数量\n",[254,47629,47630,47633,47635],{"class":256,"line":1923},[254,47631,47632],{"class":264},"            total_pixels ",[254,47634,9618],{"class":260},[254,47636,47637],{"class":264}," normalized_image_array.size\n",[254,47639,47640],{"class":256,"line":2717},[254,47641,47642],{"class":323},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[254,47644,47645,47648,47650,47653,47656,47658,47660,47662,47664,47666],{"class":256,"line":2731},[254,47646,47647],{"class":264},"            sum_normalized_pixel_values ",[254,47649,9618],{"class":260},[254,47651,47652],{"class":264}," np.sum(normalized_image_array, ",[254,47654,47655],{"class":5357},"axis",[254,47657,310],{"class":260},[254,47659,265],{"class":264},[254,47661,456],{"class":313},[254,47663,12576],{"class":264},[254,47665,482],{"class":313},[254,47667,30638],{"class":264},[254,47669,47670],{"class":256,"line":2739},[254,47671,2540],{"emptyLinePlaceholder":184},[254,47673,47674],{"class":256,"line":2744},[254,47675,47676],{"class":323},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[254,47678,47679,47682,47684,47687,47689],{"class":256,"line":2750},[254,47680,47681],{"class":264},"mean ",[254,47683,310],{"class":260},[254,47685,47686],{"class":264}," sum_normalized_pixel_values ",[254,47688,848],{"class":260},[254,47690,47691],{"class":264}," total_pixels\n",[254,47693,47694],{"class":256,"line":2756},[254,47695,2540],{"emptyLinePlaceholder":184},[254,47697,47698,47701,47703,47705,47707],{"class":256,"line":2761},[254,47699,47700],{"class":264},"sum_squared_diff ",[254,47702,310],{"class":260},[254,47704,47484],{"class":264},[254,47706,336],{"class":313},[254,47708,271],{"class":264},[254,47710,47711],{"class":256,"line":8089},[254,47712,2540],{"emptyLinePlaceholder":184},[254,47714,47715],{"class":256,"line":8113},[254,47716,47717],{"class":323},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[254,47719,47720],{"class":256,"line":8118},[254,47721,47722],{"class":323},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[254,47724,47725],{"class":256,"line":8124},[254,47726,47727],{"class":323},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[254,47729,47730],{"class":256,"line":8151},[254,47731,47732],{"class":323},"# Image.open(image_path)：打开图片\n",[254,47734,47735],{"class":256,"line":8156},[254,47736,47737],{"class":323},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[254,47739,47740,47742,47744,47746],{"class":256,"line":8162},[254,47741,3165],{"class":260},[254,47743,47507],{"class":264},[254,47745,26184],{"class":260},[254,47747,47512],{"class":264},[254,47749,47750,47752,47754,47756],{"class":256,"line":8174},[254,47751,3341],{"class":260},[254,47753,47519],{"class":264},[254,47755,26184],{"class":260},[254,47757,47524],{"class":264},[254,47759,47760,47762,47764,47766,47768,47770,47772,47774,47776,47778],{"class":256,"line":8186},[254,47761,2637],{"class":260},[254,47763,47531],{"class":264},[254,47765,47534],{"class":369},[254,47767,12576],{"class":264},[254,47769,47539],{"class":369},[254,47771,12576],{"class":264},[254,47773,47544],{"class":369},[254,47775,12576],{"class":264},[254,47777,47549],{"class":369},[254,47779,47780],{"class":264},")):\n",[254,47782,47783,47785,47787],{"class":256,"line":8198},[254,47784,45814],{"class":264},[254,47786,310],{"class":260},[254,47788,47564],{"class":264},[254,47790,47791,47793,47795],{"class":256,"line":9857},[254,47792,47569],{"class":264},[254,47794,310],{"class":260},[254,47796,47574],{"class":264},[254,47798,47799,47801,47803],{"class":256,"line":9882},[254,47800,47579],{"class":264},[254,47802,310],{"class":260},[254,47804,47584],{"class":264},[254,47806,47807],{"class":256,"line":9905},[254,47808,47593],{"class":323},[254,47810,47811,47813,47815,47817,47819],{"class":256,"line":9929},[254,47812,47598],{"class":264},[254,47814,310],{"class":260},[254,47816,47603],{"class":264},[254,47818,848],{"class":260},[254,47820,47608],{"class":313},[254,47822,47823],{"class":256,"line":9934},[254,47824,47622],{"class":323},[254,47826,47827],{"class":256,"line":9939},[254,47828,47829],{"class":323},"            # print(mean.shape)\n",[254,47831,47832],{"class":256,"line":9944},[254,47833,47617],{"class":323},[254,47835,47836],{"class":256,"line":9953},[254,47837,2540],{"emptyLinePlaceholder":184},[254,47839,47840,47843],{"class":256,"line":9958},[254,47841,47842],{"class":260},"            try",[254,47844,3879],{"class":264},[254,47846,47847,47850,47852,47855,47857,47860,47862],{"class":256,"line":9964},[254,47848,47849],{"class":264},"                diff ",[254,47851,310],{"class":260},[254,47853,47854],{"class":264}," (normalized_image_array ",[254,47856,796],{"class":260},[254,47858,47859],{"class":264}," mean) ",[254,47861,10802],{"class":260},[254,47863,47864],{"class":313}," 2\n",[254,47866,47867,47870,47872,47875,47877,47879,47881,47883,47885,47887],{"class":256,"line":9985},[254,47868,47869],{"class":264},"                sum_squared_diff ",[254,47871,9618],{"class":260},[254,47873,47874],{"class":264}," np.sum(diff, ",[254,47876,47655],{"class":5357},[254,47878,310],{"class":260},[254,47880,265],{"class":264},[254,47882,456],{"class":313},[254,47884,12576],{"class":264},[254,47886,482],{"class":313},[254,47888,30638],{"class":264},[254,47890,47891,47894],{"class":256,"line":9991},[254,47892,47893],{"class":260},"            except",[254,47895,3879],{"class":264},[254,47897,47898,47901,47903,47905,47908],{"class":256,"line":10005},[254,47899,47900],{"class":313},"                print",[254,47902,265],{"class":264},[254,47904,317],{"class":260},[254,47906,47907],{"class":369},"\"捕获到自定义异常\"",[254,47909,271],{"class":264},[254,47911,47912],{"class":256,"line":10011},[254,47913,47914],{"class":323},"            # diff = (normalized_image_array - mean) ** 2\n",[254,47916,47917],{"class":256,"line":10038},[254,47918,47919],{"class":323},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[254,47921,47922],{"class":256,"line":10047},[254,47923,2540],{"emptyLinePlaceholder":184},[254,47925,47926,47929,47931,47934,47936],{"class":256,"line":10053},[254,47927,47928],{"class":264},"variance ",[254,47930,310],{"class":260},[254,47932,47933],{"class":264}," sum_squared_diff ",[254,47935,848],{"class":260},[254,47937,47691],{"class":264},[254,47939,47940],{"class":256,"line":10061},[254,47941,2540],{"emptyLinePlaceholder":184},[254,47943,47944,47946,47948,47951],{"class":256,"line":10066},[254,47945,30556],{"class":313},[254,47947,265],{"class":264},[254,47949,47950],{"class":369},"\"Mean:\"",[254,47952,47953],{"class":264},", mean)\n",[254,47955,47956,47958,47960,47963],{"class":256,"line":16745},[254,47957,30556],{"class":313},[254,47959,265],{"class":264},[254,47961,47962],{"class":369},"\"Variance:\"",[254,47964,47965],{"class":264},", variance)\n",[245,47967,47969],{"className":30519,"code":47968,"language":30521,"meta":174,"style":174},"import copy\nimport time\nimport pandas as pd\nimport torch\nfrom torch.utils.data import Dataset\nfrom torchvision.datasets import ImageFolder # 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \nfrom torchvision import transforms\nimport torch.utils.data as Data\nimport matplotlib.pyplot as plt\n# 导入模型\nfrom model import GoogLeNet, Inception\nfrom torch import nn\n\n# 处理训练集与验证集函数--->划分数据集\ndef train_val_data_process():\n    # 导入自己的数据集，并进行数据处理\n    # 定义数据集的路径\n    ROOT_PATH=r\".\u002Fdata\u002Ftrain\"\n\n    # 定义归一化方法\n    # 这里需要先计算一下数据集的均值和方差\n    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n    # 第一个参数是均值，第二个参数是方差\n    normalize=transforms.Normalize([0.162,0.151,0.138],[0.058,0.052,0.048])\n    # 定义数据集处理方法变量\n    train_transform=transforms.Compose([\n        # 调整图像大小为224*224\n        transforms.Resize((224,224)),\n        # 将图像转换为张量\n        transforms.ToTensor(),\n        normalize])\n    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n\n    # 加载数据集\n    # 传入数据集路径与处理方法\n    train_data=ImageFolder(ROOT_PATH,transform=train_transform)\n\n    train_data,val_data=Data.random_split(train_data,[round(0.8*len(train_data)),round(0.2*len(train_data))])\n    train_dataloader = Data.DataLoader(dataset=train_data,\n                                       batch_size=32,\n                                       shuffle=True,\n                                       # 规定8个进程\n                                       num_workers=8)\n    val_dataloader=Data.DataLoader(dataset=val_data,\n                                   batch_size=32,\n                                   shuffle=True,\n                                   num_workers=8)\n    return train_dataloader,val_dataloader\n\n# 验证是否出错\n# train_val_data_process()\n\n# 定义模型训练函数\ndef train_model_process(model,train_dataloader,val_dataloader,num_epochs):\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else 'cpu')\n\n    # 定义优化器\n    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n    # lr为学习率\n    optimizer=torch.optim.Adam(model.parameters(),lr=0.001)\n\n    # 定义损失函数使用交叉熵损失函数\n    criterion=nn.CrossEntropyLoss()\n\n    # 将模型放到GPU中进行训练\n    model=model.to(device)\n    # 复制当前模型的参数\n    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n    best_model_wts=copy.deepcopy(model.state_dict())\n\n    # 初始化参数\n    # 最高准确度\n    best_acc=0.0\n    # 训练集损失列表\n    train_loss_all=[]\n    # 验证集函数列表\n    val_loss_all=[]\n    # 训练集准确度列表\n    train_acc_all=[]\n    # 验证集准确度列表\n    val_acc_all=[]\n\n    # 保存当前时间--->方便看每轮训练的时间\n    since=time.time()\n\n    # 准备工作完成--->开始训练模型\n    for epoch in range(num_epochs):\n        print(\"Epoch {}\u002F{}\".format(epoch,num_epochs-1))\n        print(\"-\"*10)\n\n        # 初始化参数\n        # 训练集损失函数\n        train_loss=0.0\n        # 训练集准确度\n        train_corrects=0\n        # 验证集损失函数\n        val_loss=0.0\n        # 验证集准确度\n        val_corrects=0\n        # 训练集样本数量\n        train_num=0\n        # 验证集样本数量\n        val_num=0\n        # 将数据放到设备,并开始训练\n        for step,(b_x,b_y) in enumerate(train_dataloader):\n            # 将特征放入到训练设备\n            b_x=b_x.to(device)\n            # 将标签放入到训练设备当中\n            b_y=b_y.to(device)\n            # 设置模型为训练模式\n            model.train()\n            # 将数据放到模型当中,开始前向传播\n            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n            output=model(b_x)\n            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算每一个batch的损失函数\n            loss=criterion(output,b_y)\n            # 将梯度初始化为0\n            optimizer.zero_grad()\n            # 梯度置为0后再进行反向传播\n            loss.backward()\n            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n            optimizer.step()\n            # loss.item()指的是batch的平均损失\n            train_loss+=loss.item()*b_x.size(0)\n            # 计算每个批次中正确预测的数量\n            train_corrects+=torch.sum(pre_lab==b_y.data)\n            # 计算目前为止一共处理了多少样本\n            train_num+=b_x.size(0)\n        # 验证数据\n        for step ,(b_x,b_y) in enumerate(val_dataloader):\n            # 将特征放到验证设备当中\n            b_x=b_x.to(device)\n            # 将标签放到放到训练设备当中\n            b_y=b_y.to(device)\n            # 开启验证模式，设置模型为评估模式\n            model.eval()\n            # 验证时不计算梯度以节省内存\u002F计算\n            with torch.no_grad():\n                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n                output=model(b_x)\n                # 查找每一行中最大值对应的下标\n                pre_lab=torch.argmax(output,dim=1)\n                # 计算验证集上的当前 batch 损失\n                val_batch_loss=criterion(output,b_y)\n                # 对损失函数进行累加（按样本数加权）\n                val_loss+=val_batch_loss.item()*b_x.size(0)\n                val_corrects+=torch.sum(pre_lab==b_y.data)\n            # 当前用于验证的样本数量\n            val_num+=b_x.size(0)\n        # 计算并保存每一次迭代的loss值和准确率\n        # 计算并保存训练集的loss值\n        train_loss_all.append(train_loss\u002Ftrain_num)\n        # 取双精度\n        # 计算并保存训练集的准确率\n        train_acc_all.append(train_corrects.double().item()\u002Ftrain_num)\n        # 计算并保存验证集的loss值\n        val_loss_all.append(val_loss\u002Fval_num)\n        # 计算并保存验证集的准确率\n        val_acc_all.append(val_corrects.double().item()\u002Fval_num)\n\n        # 打印训练一轮的loss值和准确率\n        print('{}train loss:{:.4f} train acc:{:.4f}'.format(epoch,train_loss_all[-1],train_acc_all[-1]))\n        print('{}val loss:{:.4f} val acc:{:.4f}'.format(epoch,val_loss_all[-1],val_acc_all[-1]))\n\n        # 判断准确度--->保存最优模型\n        if val_acc_all[-1]>best_acc:\n            # 保存当前模型准确度\n            best_acc:float=val_acc_all[-1]\n            # 保存当前的准确度\n            # model.state_dict()是当前模型的所有参数（权重和偏置）\n            best_model_wts=copy.deepcopy(model.state_dict())\n\n        # 计算耗时\n        time_use=time.time()-since\n        print('训练和验证耗费的时间{:.0f}m{:.0f}s'.format(time_use\u002F\u002F60,time_use%60))\n    # 选择最优参数并保存\n    # 保存最佳模型权重字典\n    torch.save(best_model_wts,'.\u002Fbest_model.pth')\n    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n    train_process=pd.DataFrame(data={\n        \"epoch\":range(num_epochs),\n        \"train_loss_all\":train_loss_all,\n        \"val_loss_all\":val_loss_all,\n        \"train_acc_all\":train_acc_all,\n        \"val_acc_all\":val_acc_all\n    })\n    # 返回训练保存的过程\n    return train_process\n\n# 将loss值和精度按照图片的形式展示出来\ndef matplot_acc_loss(train_process):\n    # 设置图的大小\n    plt.figure(figsize=(12,4))\n    # 设置图中有几张图\n    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n    # ①loss图\n    plt.subplot(1,2,1)\n    # 补充:\n    # plt.subplot(nrows, ncols, index)\n    # nrows：行数\n    # ncols：列数\n    # index：目前选中第几个子图（从1开始）\n    plt.plot(train_process[\"epoch\"],train_process.train_loss_all,'ro-',label='train loss')\n    plt.plot(train_process[\"epoch\"],train_process.val_loss_all,'bs--',label='val loss')\n    # 添加一个图例\n    plt.legend()\n    # 给轴添加标签\n    plt.xlabel('epoch')\n    plt.ylabel('loss')\n    # ②准确度图\n    plt.subplot(1,2,2)\n    plt.plot(train_process[\"epoch\"],train_process.train_acc_all,'ro-',label='train acc')\n    plt.plot(train_process[\"epoch\"],train_process.val_acc_all,'bs--',label='val acc')\n    # 添加图例\n    plt.legend()\n    plt.xlabel(\"epoch\")\n    plt.ylabel(\"acc\")\n    plt.show()\n\n# 正式开始训练:\nif __name__==\"__main__\":\n    # 将模型实例化\n    GoogLeNet=GoogLeNet(Inception)\n    train_dataloader,val_dataloader=train_val_data_process()\n    train_process=train_model_process(GoogLeNet,train_dataloader,val_dataloader,num_epochs=60)\n    matplot_acc_loss(train_process)\n",[251,47970,47971,47977,47983,47993,47999,48009,48023,48033,48043,48053,48057,48067,48077,48081,48085,48093,48098,48103,48122,48126,48131,48136,48141,48146,48187,48192,48202,48207,48220,48225,48230,48235,48240,48245,48249,48254,48259,48281,48285,48317,48331,48341,48351,48355,48365,48379,48389,48399,48409,48415,48419,48423,48427,48431,48435,48443,48463,48467,48471,48475,48479,48495,48499,48503,48511,48515,48519,48527,48531,48535,48539,48547,48551,48555,48559,48567,48571,48579,48583,48591,48595,48603,48607,48615,48619,48623,48631,48635,48639,48651,48675,48689,48693,48697,48701,48709,48713,48721,48725,48733,48737,48745,48749,48757,48761,48769,48773,48785,48789,48797,48801,48809,48813,48817,48821,48825,48833,48837,48853,48857,48865,48869,48873,48877,48881,48885,48889,48893,48909,48913,48925,48929,48941,48945,48957,48961,48969,48973,48981,48985,48989,48993,48999,49003,49011,49015,49031,49035,49043,49047,49063,49075,49079,49091,49095,49099,49107,49111,49115,49123,49127,49135,49139,49147,49151,49155,49197,49239,49243,49247,49263,49267,49283,49287,49291,49299,49303,49307,49319,49357,49361,49365,49373,49377,49391,49401,49407,49413,49419,49425,49429,49433,49439,49443,49447,49455,49459,49477,49481,49485,49489,49505,49509,49513,49517,49521,49525,49545,49565,49569,49573,49577,49585,49593,49597,49613,49633,49653,49657,49662,49671,49680,49685,49690,49695,49708,49713,49722,49731,49748],{"__ignoreMap":174},[254,47972,47973,47975],{"class":256,"line":257},[254,47974,30533],{"class":260},[254,47976,31963],{"class":264},[254,47978,47979,47981],{"class":256,"line":175},[254,47980,30533],{"class":260},[254,47982,31970],{"class":264},[254,47984,47985,47987,47989,47991],{"class":256,"line":1319},[254,47986,30533],{"class":260},[254,47988,31981],{"class":264},[254,47990,31524],{"class":260},[254,47992,31986],{"class":264},[254,47994,47995,47997],{"class":256,"line":1334},[254,47996,30533],{"class":260},[254,47998,30536],{"class":264},[254,48000,48001,48003,48005,48007],{"class":256,"line":1340},[254,48002,30878],{"class":260},[254,48004,31556],{"class":264},[254,48006,30533],{"class":260},[254,48008,32003],{"class":264},[254,48010,48011,48013,48015,48017,48020],{"class":256,"line":1354},[254,48012,30878],{"class":260},[254,48014,31509],{"class":264},[254,48016,30533],{"class":260},[254,48018,48019],{"class":264}," ImageFolder ",[254,48021,48022],{"class":323},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[254,48024,48025,48027,48029,48031],{"class":256,"line":1360},[254,48026,30878],{"class":260},[254,48028,31539],{"class":264},[254,48030,30533],{"class":260},[254,48032,31544],{"class":264},[254,48034,48035,48037,48039,48041],{"class":256,"line":1451},[254,48036,30533],{"class":260},[254,48038,31556],{"class":264},[254,48040,31524],{"class":260},[254,48042,31561],{"class":264},[254,48044,48045,48047,48049,48051],{"class":256,"line":1457},[254,48046,30533],{"class":260},[254,48048,31573],{"class":264},[254,48050,31524],{"class":260},[254,48052,31578],{"class":264},[254,48054,48055],{"class":256,"line":1469},[254,48056,32048],{"class":323},[254,48058,48059,48061,48063,48065],{"class":256,"line":1752},[254,48060,30878],{"class":260},[254,48062,32055],{"class":264},[254,48064,30533],{"class":260},[254,48066,43172],{"class":264},[254,48068,48069,48071,48073,48075],{"class":256,"line":1757},[254,48070,30878],{"class":260},[254,48072,30881],{"class":264},[254,48074,30533],{"class":260},[254,48076,30886],{"class":264},[254,48078,48079],{"class":256,"line":1763},[254,48080,2540],{"emptyLinePlaceholder":184},[254,48082,48083],{"class":256,"line":1768},[254,48084,32083],{"class":323},[254,48086,48087,48089,48091],{"class":256,"line":1782},[254,48088,32088],{"class":260},[254,48090,32091],{"class":2103},[254,48092,32094],{"class":264},[254,48094,48095],{"class":256,"line":1787},[254,48096,48097],{"class":323},"    # 导入自己的数据集，并进行数据处理\n",[254,48099,48100],{"class":256,"line":1793},[254,48101,48102],{"class":323},"    # 定义数据集的路径\n",[254,48104,48105,48108,48110,48112,48114,48116,48120],{"class":256,"line":1814},[254,48106,48107],{"class":313},"    ROOT_PATH",[254,48109,310],{"class":260},[254,48111,934],{"class":260},[254,48113,515],{"class":369},[254,48115,822],{"class":313},[254,48117,48119],{"class":48118},"sA_wV","\u002Fdata\u002Ftrain",[254,48121,25274],{"class":369},[254,48123,48124],{"class":256,"line":1819},[254,48125,2540],{"emptyLinePlaceholder":184},[254,48127,48128],{"class":256,"line":1833},[254,48129,48130],{"class":323},"    # 定义归一化方法\n",[254,48132,48133],{"class":256,"line":1838},[254,48134,48135],{"class":323},"    # 这里需要先计算一下数据集的均值和方差\n",[254,48137,48138],{"class":256,"line":1867},[254,48139,48140],{"class":323},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[254,48142,48143],{"class":256,"line":1872},[254,48144,48145],{"class":323},"    # 第一个参数是均值，第二个参数是方差\n",[254,48147,48148,48151,48153,48156,48159,48161,48164,48166,48169,48172,48175,48177,48180,48182,48185],{"class":256,"line":1889},[254,48149,48150],{"class":264},"    normalize",[254,48152,310],{"class":260},[254,48154,48155],{"class":264},"transforms.Normalize([",[254,48157,48158],{"class":313},"0.162",[254,48160,642],{"class":264},[254,48162,48163],{"class":313},"0.151",[254,48165,642],{"class":264},[254,48167,48168],{"class":313},"0.138",[254,48170,48171],{"class":264},"],[",[254,48173,48174],{"class":313},"0.058",[254,48176,642],{"class":264},[254,48178,48179],{"class":313},"0.052",[254,48181,642],{"class":264},[254,48183,48184],{"class":313},"0.048",[254,48186,4797],{"class":264},[254,48188,48189],{"class":256,"line":1894},[254,48190,48191],{"class":323},"    # 定义数据集处理方法变量\n",[254,48193,48194,48197,48199],{"class":256,"line":1899},[254,48195,48196],{"class":264},"    train_transform",[254,48198,310],{"class":260},[254,48200,48201],{"class":264},"transforms.Compose([\n",[254,48203,48204],{"class":256,"line":1904},[254,48205,48206],{"class":323},"        # 调整图像大小为224*224\n",[254,48208,48209,48212,48214,48216,48218],{"class":256,"line":1918},[254,48210,48211],{"class":264},"        transforms.Resize((",[254,48213,31642],{"class":313},[254,48215,642],{"class":264},[254,48217,31642],{"class":313},[254,48219,42763],{"class":264},[254,48221,48222],{"class":256,"line":1923},[254,48223,48224],{"class":323},"        # 将图像转换为张量\n",[254,48226,48227],{"class":256,"line":2717},[254,48228,48229],{"class":264},"        transforms.ToTensor(),\n",[254,48231,48232],{"class":256,"line":2731},[254,48233,48234],{"class":264},"        normalize])\n",[254,48236,48237],{"class":256,"line":2739},[254,48238,48239],{"class":323},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[254,48241,48242],{"class":256,"line":2744},[254,48243,48244],{"class":323},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[254,48246,48247],{"class":256,"line":2750},[254,48248,2540],{"emptyLinePlaceholder":184},[254,48250,48251],{"class":256,"line":2756},[254,48252,48253],{"class":323},"    # 加载数据集\n",[254,48255,48256],{"class":256,"line":2761},[254,48257,48258],{"class":323},"    # 传入数据集路径与处理方法\n",[254,48260,48261,48263,48265,48268,48271,48273,48276,48278],{"class":256,"line":8089},[254,48262,32099],{"class":264},[254,48264,310],{"class":260},[254,48266,48267],{"class":264},"ImageFolder(",[254,48269,48270],{"class":313},"ROOT_PATH",[254,48272,642],{"class":264},[254,48274,48275],{"class":5357},"transform",[254,48277,310],{"class":260},[254,48279,48280],{"class":264},"train_transform)\n",[254,48282,48283],{"class":256,"line":8113},[254,48284,2540],{"emptyLinePlaceholder":184},[254,48286,48287,48289,48291,48293,48295,48297,48299,48301,48303,48305,48307,48309,48311,48313,48315],{"class":256,"line":8118},[254,48288,32151],{"class":264},[254,48290,310],{"class":260},[254,48292,32156],{"class":264},[254,48294,32159],{"class":313},[254,48296,265],{"class":264},[254,48298,32164],{"class":313},[254,48300,719],{"class":260},[254,48302,7499],{"class":313},[254,48304,32171],{"class":264},[254,48306,32159],{"class":313},[254,48308,265],{"class":264},[254,48310,32178],{"class":313},[254,48312,719],{"class":260},[254,48314,7499],{"class":313},[254,48316,32185],{"class":264},[254,48318,48319,48321,48323,48325,48327,48329],{"class":256,"line":8124},[254,48320,32190],{"class":264},[254,48322,310],{"class":260},[254,48324,32195],{"class":264},[254,48326,31678],{"class":5357},[254,48328,310],{"class":260},[254,48330,31683],{"class":264},[254,48332,48333,48335,48337,48339],{"class":256,"line":8151},[254,48334,32206],{"class":5357},[254,48336,310],{"class":260},[254,48338,462],{"class":313},[254,48340,31607],{"class":264},[254,48342,48343,48345,48347,48349],{"class":256,"line":8156},[254,48344,32218],{"class":5357},[254,48346,310],{"class":260},[254,48348,31617],{"class":313},[254,48350,31607],{"class":264},[254,48352,48353],{"class":256,"line":8162},[254,48354,32229],{"class":323},[254,48356,48357,48359,48361,48363],{"class":256,"line":8174},[254,48358,32234],{"class":5357},[254,48360,310],{"class":260},[254,48362,659],{"class":313},[254,48364,271],{"class":264},[254,48366,48367,48369,48371,48373,48375,48377],{"class":256,"line":8186},[254,48368,32245],{"class":264},[254,48370,310],{"class":260},[254,48372,31675],{"class":264},[254,48374,31678],{"class":5357},[254,48376,310],{"class":260},[254,48378,32256],{"class":264},[254,48380,48381,48383,48385,48387],{"class":256,"line":8198},[254,48382,32261],{"class":5357},[254,48384,310],{"class":260},[254,48386,462],{"class":313},[254,48388,31607],{"class":264},[254,48390,48391,48393,48395,48397],{"class":256,"line":9857},[254,48392,32272],{"class":5357},[254,48394,310],{"class":260},[254,48396,31617],{"class":313},[254,48398,31607],{"class":264},[254,48400,48401,48403,48405,48407],{"class":256,"line":9882},[254,48402,32283],{"class":5357},[254,48404,310],{"class":260},[254,48406,659],{"class":313},[254,48408,271],{"class":264},[254,48410,48411,48413],{"class":256,"line":9905},[254,48412,4230],{"class":260},[254,48414,32296],{"class":264},[254,48416,48417],{"class":256,"line":9929},[254,48418,2540],{"emptyLinePlaceholder":184},[254,48420,48421],{"class":256,"line":9934},[254,48422,32305],{"class":323},[254,48424,48425],{"class":256,"line":9939},[254,48426,32310],{"class":323},[254,48428,48429],{"class":256,"line":9944},[254,48430,2540],{"emptyLinePlaceholder":184},[254,48432,48433],{"class":256,"line":9953},[254,48434,32319],{"class":323},[254,48436,48437,48439,48441],{"class":256,"line":9958},[254,48438,32088],{"class":260},[254,48440,32326],{"class":2103},[254,48442,32329],{"class":264},[254,48444,48445,48447,48449,48451,48453,48455,48457,48459,48461],{"class":256,"line":9964},[254,48446,31378],{"class":264},[254,48448,310],{"class":260},[254,48450,30592],{"class":264},[254,48452,31385],{"class":369},[254,48454,1844],{"class":260},[254,48456,31390],{"class":264},[254,48458,1841],{"class":260},[254,48460,32348],{"class":369},[254,48462,271],{"class":264},[254,48464,48465],{"class":256,"line":9985},[254,48466,2540],{"emptyLinePlaceholder":184},[254,48468,48469],{"class":256,"line":9991},[254,48470,32363],{"class":323},[254,48472,48473],{"class":256,"line":10005},[254,48474,32368],{"class":323},[254,48476,48477],{"class":256,"line":10011},[254,48478,32373],{"class":323},[254,48480,48481,48483,48485,48487,48489,48491,48493],{"class":256,"line":10038},[254,48482,32378],{"class":264},[254,48484,310],{"class":260},[254,48486,32383],{"class":264},[254,48488,32386],{"class":5357},[254,48490,310],{"class":260},[254,48492,32391],{"class":313},[254,48494,271],{"class":264},[254,48496,48497],{"class":256,"line":10047},[254,48498,2540],{"emptyLinePlaceholder":184},[254,48500,48501],{"class":256,"line":10053},[254,48502,32402],{"class":323},[254,48504,48505,48507,48509],{"class":256,"line":10061},[254,48506,32407],{"class":264},[254,48508,310],{"class":260},[254,48510,32412],{"class":264},[254,48512,48513],{"class":256,"line":10066},[254,48514,2540],{"emptyLinePlaceholder":184},[254,48516,48517],{"class":256,"line":16745},[254,48518,32421],{"class":323},[254,48520,48521,48523,48525],{"class":256,"line":16751},[254,48522,31430],{"class":264},[254,48524,310],{"class":260},[254,48526,32430],{"class":264},[254,48528,48529],{"class":256,"line":16774},[254,48530,32435],{"class":323},[254,48532,48533],{"class":256,"line":16780},[254,48534,32440],{"class":323},[254,48536,48537],{"class":256,"line":16803},[254,48538,32445],{"class":323},[254,48540,48541,48543,48545],{"class":256,"line":16817},[254,48542,32450],{"class":264},[254,48544,310],{"class":260},[254,48546,32455],{"class":264},[254,48548,48549],{"class":256,"line":16837},[254,48550,2540],{"emptyLinePlaceholder":184},[254,48552,48553],{"class":256,"line":16843},[254,48554,32468],{"class":323},[254,48556,48557],{"class":256,"line":16854},[254,48558,32473],{"class":323},[254,48560,48561,48563,48565],{"class":256,"line":16877},[254,48562,32478],{"class":264},[254,48564,310],{"class":260},[254,48566,32483],{"class":313},[254,48568,48569],{"class":256,"line":16899},[254,48570,32488],{"class":323},[254,48572,48573,48575,48577],{"class":256,"line":16904},[254,48574,32493],{"class":264},[254,48576,310],{"class":260},[254,48578,32498],{"class":264},[254,48580,48581],{"class":256,"line":16910},[254,48582,32503],{"class":323},[254,48584,48585,48587,48589],{"class":256,"line":16924},[254,48586,32508],{"class":264},[254,48588,310],{"class":260},[254,48590,32498],{"class":264},[254,48592,48593],{"class":256,"line":16937},[254,48594,32517],{"class":323},[254,48596,48597,48599,48601],{"class":256,"line":16942},[254,48598,32522],{"class":264},[254,48600,310],{"class":260},[254,48602,32498],{"class":264},[254,48604,48605],{"class":256,"line":16956},[254,48606,32531],{"class":323},[254,48608,48609,48611,48613],{"class":256,"line":16961},[254,48610,32536],{"class":264},[254,48612,310],{"class":260},[254,48614,32498],{"class":264},[254,48616,48617],{"class":256,"line":16967},[254,48618,2540],{"emptyLinePlaceholder":184},[254,48620,48621],{"class":256,"line":16972},[254,48622,32549],{"class":323},[254,48624,48625,48627,48629],{"class":256,"line":16986},[254,48626,32554],{"class":264},[254,48628,310],{"class":260},[254,48630,32559],{"class":264},[254,48632,48633],{"class":256,"line":16991},[254,48634,2540],{"emptyLinePlaceholder":184},[254,48636,48637],{"class":256,"line":16996},[254,48638,32572],{"class":323},[254,48640,48641,48643,48645,48647,48649],{"class":256,"line":17010},[254,48642,3341],{"class":260},[254,48644,32579],{"class":264},[254,48646,26184],{"class":260},[254,48648,32584],{"class":313},[254,48650,32587],{"class":264},[254,48652,48653,48655,48657,48659,48661,48663,48665,48667,48669,48671,48673],{"class":256,"line":17022},[254,48654,32592],{"class":313},[254,48656,265],{"class":264},[254,48658,32597],{"class":369},[254,48660,32600],{"class":313},[254,48662,848],{"class":369},[254,48664,32600],{"class":313},[254,48666,515],{"class":369},[254,48668,32609],{"class":264},[254,48670,796],{"class":260},[254,48672,482],{"class":313},[254,48674,30638],{"class":264},[254,48676,48677,48679,48681,48683,48685,48687],{"class":256,"line":17027},[254,48678,32592],{"class":313},[254,48680,265],{"class":264},[254,48682,32624],{"class":369},[254,48684,719],{"class":260},[254,48686,710],{"class":313},[254,48688,271],{"class":264},[254,48690,48691],{"class":256,"line":17040},[254,48692,2540],{"emptyLinePlaceholder":184},[254,48694,48695],{"class":256,"line":17045},[254,48696,32639],{"class":323},[254,48698,48699],{"class":256,"line":17050},[254,48700,32644],{"class":323},[254,48702,48703,48705,48707],{"class":256,"line":17055},[254,48704,32649],{"class":264},[254,48706,310],{"class":260},[254,48708,32483],{"class":313},[254,48710,48711],{"class":256,"line":17068},[254,48712,32658],{"class":323},[254,48714,48715,48717,48719],{"class":256,"line":17073},[254,48716,32663],{"class":264},[254,48718,310],{"class":260},[254,48720,3225],{"class":313},[254,48722,48723],{"class":256,"line":32774},[254,48724,32672],{"class":323},[254,48726,48727,48729,48731],{"class":256,"line":32780},[254,48728,32677],{"class":264},[254,48730,310],{"class":260},[254,48732,32483],{"class":313},[254,48734,48735],{"class":256,"line":32786},[254,48736,32686],{"class":323},[254,48738,48739,48741,48743],{"class":256,"line":32792},[254,48740,32691],{"class":264},[254,48742,310],{"class":260},[254,48744,3225],{"class":313},[254,48746,48747],{"class":256,"line":32798},[254,48748,32700],{"class":323},[254,48750,48751,48753,48755],{"class":256,"line":32809},[254,48752,32705],{"class":264},[254,48754,310],{"class":260},[254,48756,3225],{"class":313},[254,48758,48759],{"class":256,"line":32815},[254,48760,32714],{"class":323},[254,48762,48763,48765,48767],{"class":256,"line":32835},[254,48764,32719],{"class":264},[254,48766,310],{"class":260},[254,48768,3225],{"class":313},[254,48770,48771],{"class":256,"line":32841},[254,48772,32728],{"class":323},[254,48774,48775,48777,48779,48781,48783],{"class":256,"line":32852},[254,48776,3543],{"class":260},[254,48778,31742],{"class":264},[254,48780,26184],{"class":260},[254,48782,31747],{"class":313},[254,48784,32741],{"class":264},[254,48786,48787],{"class":256,"line":32858},[254,48788,32746],{"class":323},[254,48790,48791,48793,48795],{"class":256,"line":32864},[254,48792,32751],{"class":264},[254,48794,310],{"class":260},[254,48796,32756],{"class":264},[254,48798,48799],{"class":256,"line":32870},[254,48800,32761],{"class":323},[254,48802,48803,48805,48807],{"class":256,"line":32876},[254,48804,32766],{"class":264},[254,48806,310],{"class":260},[254,48808,32771],{"class":264},[254,48810,48811],{"class":256,"line":32882},[254,48812,32777],{"class":323},[254,48814,48815],{"class":256,"line":32888},[254,48816,32783],{"class":264},[254,48818,48819],{"class":256,"line":32894},[254,48820,32789],{"class":323},[254,48822,48823],{"class":256,"line":32914},[254,48824,32795],{"class":323},[254,48826,48827,48829,48831],{"class":256,"line":32920},[254,48828,32801],{"class":264},[254,48830,310],{"class":260},[254,48832,32806],{"class":264},[254,48834,48835],{"class":256,"line":32936},[254,48836,32812],{"class":323},[254,48838,48839,48841,48843,48845,48847,48849,48851],{"class":256,"line":32942},[254,48840,32818],{"class":264},[254,48842,310],{"class":260},[254,48844,32823],{"class":264},[254,48846,32826],{"class":5357},[254,48848,310],{"class":260},[254,48850,482],{"class":313},[254,48852,271],{"class":264},[254,48854,48855],{"class":256,"line":32956},[254,48856,32838],{"class":323},[254,48858,48859,48861,48863],{"class":256,"line":32962},[254,48860,32844],{"class":264},[254,48862,310],{"class":260},[254,48864,32849],{"class":264},[254,48866,48867],{"class":256,"line":32977},[254,48868,32855],{"class":323},[254,48870,48871],{"class":256,"line":32983},[254,48872,32861],{"class":264},[254,48874,48875],{"class":256,"line":32992},[254,48876,32867],{"class":323},[254,48878,48879],{"class":256,"line":32998},[254,48880,32873],{"class":264},[254,48882,48883],{"class":256,"line":33007},[254,48884,32879],{"class":323},[254,48886,48887],{"class":256,"line":33013},[254,48888,32885],{"class":264},[254,48890,48891],{"class":256,"line":33019},[254,48892,32891],{"class":323},[254,48894,48895,48897,48899,48901,48903,48905,48907],{"class":256,"line":33028},[254,48896,32897],{"class":264},[254,48898,9618],{"class":260},[254,48900,32902],{"class":264},[254,48902,719],{"class":260},[254,48904,32907],{"class":264},[254,48906,456],{"class":313},[254,48908,271],{"class":264},[254,48910,48911],{"class":256,"line":33034},[254,48912,32917],{"class":323},[254,48914,48915,48917,48919,48921,48923],{"class":256,"line":33045},[254,48916,32923],{"class":264},[254,48918,9618],{"class":260},[254,48920,32928],{"class":264},[254,48922,3089],{"class":260},[254,48924,32933],{"class":264},[254,48926,48927],{"class":256,"line":33051},[254,48928,32939],{"class":323},[254,48930,48931,48933,48935,48937,48939],{"class":256,"line":33070},[254,48932,32945],{"class":264},[254,48934,9618],{"class":260},[254,48936,32907],{"class":264},[254,48938,456],{"class":313},[254,48940,271],{"class":264},[254,48942,48943],{"class":256,"line":33076},[254,48944,32959],{"class":323},[254,48946,48947,48949,48951,48953,48955],{"class":256,"line":33087},[254,48948,3543],{"class":260},[254,48950,32967],{"class":264},[254,48952,26184],{"class":260},[254,48954,31747],{"class":313},[254,48956,32974],{"class":264},[254,48958,48959],{"class":256,"line":33093},[254,48960,32980],{"class":323},[254,48962,48963,48965,48967],{"class":256,"line":33113},[254,48964,32751],{"class":264},[254,48966,310],{"class":260},[254,48968,32756],{"class":264},[254,48970,48971],{"class":256,"line":33129},[254,48972,32995],{"class":323},[254,48974,48975,48977,48979],{"class":256,"line":33135},[254,48976,32766],{"class":264},[254,48978,310],{"class":260},[254,48980,32771],{"class":264},[254,48982,48983],{"class":256,"line":33149},[254,48984,33010],{"class":323},[254,48986,48987],{"class":256,"line":33155},[254,48988,33016],{"class":264},[254,48990,48991],{"class":256,"line":33161},[254,48992,36497],{"class":323},[254,48994,48995,48997],{"class":256,"line":33172},[254,48996,33022],{"class":260},[254,48998,33025],{"class":264},[254,49000,49001],{"class":256,"line":33178},[254,49002,33031],{"class":323},[254,49004,49005,49007,49009],{"class":256,"line":33184},[254,49006,36512],{"class":264},[254,49008,310],{"class":260},[254,49010,32806],{"class":264},[254,49012,49013],{"class":256,"line":33194},[254,49014,33048],{"class":323},[254,49016,49017,49019,49021,49023,49025,49027,49029],{"class":256,"line":33200},[254,49018,36525],{"class":264},[254,49020,310],{"class":260},[254,49022,32823],{"class":264},[254,49024,32826],{"class":5357},[254,49026,310],{"class":260},[254,49028,482],{"class":313},[254,49030,271],{"class":264},[254,49032,49033],{"class":256,"line":33211},[254,49034,33073],{"class":323},[254,49036,49037,49039,49041],{"class":256,"line":33217},[254,49038,36546],{"class":264},[254,49040,310],{"class":260},[254,49042,32849],{"class":264},[254,49044,49045],{"class":256,"line":33227},[254,49046,33090],{"class":323},[254,49048,49049,49051,49053,49055,49057,49059,49061],{"class":256,"line":33232},[254,49050,36559],{"class":264},[254,49052,9618],{"class":260},[254,49054,36564],{"class":264},[254,49056,719],{"class":260},[254,49058,32907],{"class":264},[254,49060,456],{"class":313},[254,49062,271],{"class":264},[254,49064,49065,49067,49069,49071,49073],{"class":256,"line":33238},[254,49066,36577],{"class":264},[254,49068,9618],{"class":260},[254,49070,32928],{"class":264},[254,49072,3089],{"class":260},[254,49074,32933],{"class":264},[254,49076,49077],{"class":256,"line":33287},[254,49078,36590],{"class":323},[254,49080,49081,49083,49085,49087,49089],{"class":256,"line":33334},[254,49082,36595],{"class":264},[254,49084,9618],{"class":260},[254,49086,32907],{"class":264},[254,49088,456],{"class":313},[254,49090,271],{"class":264},[254,49092,49093],{"class":256,"line":33339},[254,49094,33152],{"class":323},[254,49096,49097],{"class":256,"line":33345},[254,49098,33158],{"class":323},[254,49100,49101,49103,49105],{"class":256,"line":33364},[254,49102,33164],{"class":264},[254,49104,848],{"class":260},[254,49106,33169],{"class":264},[254,49108,49109],{"class":256,"line":33370},[254,49110,33175],{"class":323},[254,49112,49113],{"class":256,"line":33390},[254,49114,33181],{"class":323},[254,49116,49117,49119,49121],{"class":256,"line":33396},[254,49118,33187],{"class":264},[254,49120,848],{"class":260},[254,49122,33169],{"class":264},[254,49124,49125],{"class":256,"line":33402},[254,49126,33197],{"class":323},[254,49128,49129,49131,49133],{"class":256,"line":33412},[254,49130,33203],{"class":264},[254,49132,848],{"class":260},[254,49134,33208],{"class":264},[254,49136,49137],{"class":256,"line":33417},[254,49138,33214],{"class":323},[254,49140,49141,49143,49145],{"class":256,"line":33423},[254,49142,33220],{"class":264},[254,49144,848],{"class":260},[254,49146,33208],{"class":264},[254,49148,49149],{"class":256,"line":33439},[254,49150,2540],{"emptyLinePlaceholder":184},[254,49152,49153],{"class":256,"line":33484},[254,49154,33235],{"class":323},[254,49156,49157,49159,49161,49163,49165,49167,49169,49171,49173,49175,49177,49179,49181,49183,49185,49187,49189,49191,49193,49195],{"class":256,"line":33490},[254,49158,32592],{"class":313},[254,49160,265],{"class":264},[254,49162,3732],{"class":369},[254,49164,32600],{"class":313},[254,49166,33249],{"class":369},[254,49168,1160],{"class":313},[254,49170,33254],{"class":260},[254,49172,1210],{"class":313},[254,49174,33259],{"class":369},[254,49176,1160],{"class":313},[254,49178,33254],{"class":260},[254,49180,1210],{"class":313},[254,49182,3732],{"class":369},[254,49184,33270],{"class":264},[254,49186,796],{"class":260},[254,49188,482],{"class":313},[254,49190,33277],{"class":264},[254,49192,796],{"class":260},[254,49194,482],{"class":313},[254,49196,33284],{"class":264},[254,49198,49199,49201,49203,49205,49207,49209,49211,49213,49215,49217,49219,49221,49223,49225,49227,49229,49231,49233,49235,49237],{"class":256,"line":33496},[254,49200,32592],{"class":313},[254,49202,265],{"class":264},[254,49204,3732],{"class":369},[254,49206,32600],{"class":313},[254,49208,33298],{"class":369},[254,49210,1160],{"class":313},[254,49212,33254],{"class":260},[254,49214,1210],{"class":313},[254,49216,33307],{"class":369},[254,49218,1160],{"class":313},[254,49220,33254],{"class":260},[254,49222,1210],{"class":313},[254,49224,3732],{"class":369},[254,49226,33318],{"class":264},[254,49228,796],{"class":260},[254,49230,482],{"class":313},[254,49232,33325],{"class":264},[254,49234,796],{"class":260},[254,49236,482],{"class":313},[254,49238,33284],{"class":264},[254,49240,49241],{"class":256,"line":33502},[254,49242,2540],{"emptyLinePlaceholder":184},[254,49244,49245],{"class":256,"line":33513},[254,49246,33342],{"class":323},[254,49248,49249,49251,49253,49255,49257,49259,49261],{"class":256,"line":33519},[254,49250,2637],{"class":260},[254,49252,33350],{"class":264},[254,49254,796],{"class":260},[254,49256,482],{"class":313},[254,49258,1204],{"class":264},[254,49260,1224],{"class":260},[254,49262,33361],{"class":264},[254,49264,49265],{"class":256,"line":33525},[254,49266,33367],{"class":323},[254,49268,49269,49271,49273,49275,49277,49279,49281],{"class":256,"line":33531},[254,49270,33373],{"class":264},[254,49272,304],{"class":313},[254,49274,310],{"class":260},[254,49276,33380],{"class":264},[254,49278,796],{"class":260},[254,49280,482],{"class":313},[254,49282,33387],{"class":264},[254,49284,49285],{"class":256,"line":33549},[254,49286,33393],{"class":323},[254,49288,49289],{"class":256,"line":33563},[254,49290,33399],{"class":323},[254,49292,49293,49295,49297],{"class":256,"line":33572},[254,49294,33405],{"class":264},[254,49296,310],{"class":260},[254,49298,32455],{"class":264},[254,49300,49301],{"class":256,"line":33581},[254,49302,2540],{"emptyLinePlaceholder":184},[254,49304,49305],{"class":256,"line":33590},[254,49306,33420],{"class":323},[254,49308,49309,49311,49313,49315,49317],{"class":256,"line":33599},[254,49310,33426],{"class":264},[254,49312,310],{"class":260},[254,49314,33431],{"class":264},[254,49316,796],{"class":260},[254,49318,33436],{"class":264},[254,49320,49321,49323,49325,49327,49329,49331,49333,49335,49337,49339,49341,49343,49345,49347,49349,49351,49353,49355],{"class":256,"line":33605},[254,49322,32592],{"class":313},[254,49324,265],{"class":264},[254,49326,33446],{"class":369},[254,49328,1160],{"class":313},[254,49330,33451],{"class":260},[254,49332,1210],{"class":313},[254,49334,808],{"class":369},[254,49336,1160],{"class":313},[254,49338,33451],{"class":260},[254,49340,1210],{"class":313},[254,49342,33464],{"class":369},[254,49344,33467],{"class":264},[254,49346,33470],{"class":260},[254,49348,1171],{"class":313},[254,49350,33475],{"class":264},[254,49352,592],{"class":260},[254,49354,1171],{"class":313},[254,49356,30638],{"class":264},[254,49358,49359],{"class":256,"line":33611},[254,49360,36874],{"class":323},[254,49362,49363],{"class":256,"line":33619},[254,49364,36879],{"class":323},[254,49366,49367,49369,49371],{"class":256,"line":33624},[254,49368,36884],{"class":264},[254,49370,33508],{"class":369},[254,49372,271],{"class":264},[254,49374,49375],{"class":256,"line":33630},[254,49376,33528],{"class":323},[254,49378,49379,49381,49383,49385,49387,49389],{"class":256,"line":33641},[254,49380,33534],{"class":264},[254,49382,310],{"class":260},[254,49384,33539],{"class":264},[254,49386,33542],{"class":5357},[254,49388,310],{"class":260},[254,49390,1686],{"class":264},[254,49392,49393,49395,49397,49399],{"class":256,"line":33647},[254,49394,33552],{"class":369},[254,49396,1123],{"class":264},[254,49398,33557],{"class":313},[254,49400,33560],{"class":264},[254,49402,49403,49405],{"class":256,"line":33667},[254,49404,33566],{"class":369},[254,49406,33569],{"class":264},[254,49408,49409,49411],{"class":256,"line":33673},[254,49410,33575],{"class":369},[254,49412,33578],{"class":264},[254,49414,49415,49417],{"class":256,"line":33679},[254,49416,33584],{"class":369},[254,49418,33587],{"class":264},[254,49420,49421,49423],{"class":256,"line":33685},[254,49422,33593],{"class":369},[254,49424,33596],{"class":264},[254,49426,49427],{"class":256,"line":33702},[254,49428,33602],{"class":264},[254,49430,49431],{"class":256,"line":33708},[254,49432,33608],{"class":323},[254,49434,49435,49437],{"class":256,"line":33714},[254,49436,4230],{"class":260},[254,49438,33616],{"class":264},[254,49440,49441],{"class":256,"line":33720},[254,49442,2540],{"emptyLinePlaceholder":184},[254,49444,49445],{"class":256,"line":33726},[254,49446,33627],{"class":323},[254,49448,49449,49451,49453],{"class":256,"line":33732},[254,49450,32088],{"class":260},[254,49452,33635],{"class":2103},[254,49454,33638],{"class":264},[254,49456,49457],{"class":256,"line":33759},[254,49458,33644],{"class":323},[254,49460,49461,49463,49465,49467,49469,49471,49473,49475],{"class":256,"line":33783},[254,49462,33650],{"class":264},[254,49464,31834],{"class":5357},[254,49466,310],{"class":260},[254,49468,265],{"class":264},[254,49470,762],{"class":313},[254,49472,642],{"class":264},[254,49474,557],{"class":313},[254,49476,30638],{"class":264},[254,49478,49479],{"class":256,"line":33789},[254,49480,33670],{"class":323},[254,49482,49483],{"class":256,"line":33795},[254,49484,33676],{"class":323},[254,49486,49487],{"class":256,"line":33801},[254,49488,33682],{"class":323},[254,49490,49491,49493,49495,49497,49499,49501,49503],{"class":256,"line":33812},[254,49492,31868],{"class":264},[254,49494,482],{"class":313},[254,49496,642],{"class":264},[254,49498,342],{"class":313},[254,49500,642],{"class":264},[254,49502,482],{"class":313},[254,49504,271],{"class":264},[254,49506,49507],{"class":256,"line":33823},[254,49508,33705],{"class":323},[254,49510,49511],{"class":256,"line":33829},[254,49512,33711],{"class":323},[254,49514,49515],{"class":256,"line":33846},[254,49516,33717],{"class":323},[254,49518,49519],{"class":256,"line":33869},[254,49520,33723],{"class":323},[254,49522,49523],{"class":256,"line":33892},[254,49524,33729],{"class":323},[254,49526,49527,49529,49531,49533,49535,49537,49539,49541,49543],{"class":256,"line":33898},[254,49528,33735],{"class":264},[254,49530,33738],{"class":369},[254,49532,33741],{"class":264},[254,49534,33744],{"class":369},[254,49536,642],{"class":264},[254,49538,33749],{"class":5357},[254,49540,310],{"class":260},[254,49542,33754],{"class":369},[254,49544,271],{"class":264},[254,49546,49547,49549,49551,49553,49555,49557,49559,49561,49563],{"class":256,"line":33903},[254,49548,33735],{"class":264},[254,49550,33738],{"class":369},[254,49552,33766],{"class":264},[254,49554,33769],{"class":369},[254,49556,642],{"class":264},[254,49558,33749],{"class":5357},[254,49560,310],{"class":260},[254,49562,33778],{"class":369},[254,49564,271],{"class":264},[254,49566,49567],{"class":256,"line":33912},[254,49568,33786],{"class":323},[254,49570,49571],{"class":256,"line":33922},[254,49572,33792],{"class":264},[254,49574,49575],{"class":256,"line":33928},[254,49576,33798],{"class":323},[254,49578,49579,49581,49583],{"class":256,"line":33933},[254,49580,33804],{"class":264},[254,49582,33807],{"class":369},[254,49584,271],{"class":264},[254,49586,49587,49589,49591],{"class":256,"line":33939},[254,49588,33815],{"class":264},[254,49590,33818],{"class":369},[254,49592,271],{"class":264},[254,49594,49595],{"class":256,"line":33952},[254,49596,33826],{"class":323},[254,49598,49599,49601,49603,49605,49607,49609,49611],{"class":256,"line":33958},[254,49600,31868],{"class":264},[254,49602,482],{"class":313},[254,49604,642],{"class":264},[254,49606,342],{"class":313},[254,49608,642],{"class":264},[254,49610,342],{"class":313},[254,49612,271],{"class":264},[254,49614,49615,49617,49619,49621,49623,49625,49627,49629,49631],{"class":256,"line":33969},[254,49616,33735],{"class":264},[254,49618,33738],{"class":369},[254,49620,33853],{"class":264},[254,49622,33744],{"class":369},[254,49624,642],{"class":264},[254,49626,33749],{"class":5357},[254,49628,310],{"class":260},[254,49630,33864],{"class":369},[254,49632,271],{"class":264},[254,49634,49635,49637,49639,49641,49643,49645,49647,49649,49651],{"class":256,"line":33980},[254,49636,33735],{"class":264},[254,49638,33738],{"class":369},[254,49640,33876],{"class":264},[254,49642,33769],{"class":369},[254,49644,642],{"class":264},[254,49646,33749],{"class":5357},[254,49648,310],{"class":260},[254,49650,33887],{"class":369},[254,49652,271],{"class":264},[254,49654,49655],{"class":256,"line":33999},[254,49656,33895],{"class":323},[254,49658,49660],{"class":256,"line":49659},219,[254,49661,33792],{"class":264},[254,49663,49665,49667,49669],{"class":256,"line":49664},220,[254,49666,33804],{"class":264},[254,49668,33738],{"class":369},[254,49670,271],{"class":264},[254,49672,49674,49676,49678],{"class":256,"line":49673},221,[254,49675,33815],{"class":264},[254,49677,33917],{"class":369},[254,49679,271],{"class":264},[254,49681,49683],{"class":256,"line":49682},222,[254,49684,33925],{"class":264},[254,49686,49688],{"class":256,"line":49687},223,[254,49689,2540],{"emptyLinePlaceholder":184},[254,49691,49693],{"class":256,"line":49692},224,[254,49694,33936],{"class":323},[254,49696,49698,49700,49702,49704,49706],{"class":256,"line":49697},225,[254,49699,1671],{"class":260},[254,49701,31361],{"class":313},[254,49703,3089],{"class":260},[254,49705,31366],{"class":369},[254,49707,3879],{"class":264},[254,49709,49711],{"class":256,"line":49710},226,[254,49712,33955],{"class":323},[254,49714,49716,49718,49720],{"class":256,"line":49715},227,[254,49717,44687],{"class":264},[254,49719,310],{"class":260},[254,49721,44692],{"class":264},[254,49723,49725,49727,49729],{"class":256,"line":49724},228,[254,49726,33972],{"class":264},[254,49728,310],{"class":260},[254,49730,33977],{"class":264},[254,49732,49734,49736,49738,49740,49742,49744,49746],{"class":256,"line":49733},229,[254,49735,33534],{"class":264},[254,49737,310],{"class":260},[254,49739,44709],{"class":264},[254,49741,33990],{"class":5357},[254,49743,310],{"class":260},[254,49745,1171],{"class":313},[254,49747,271],{"class":264},[254,49749,49751],{"class":256,"line":49750},230,[254,49752,34002],{"class":264},[22139,49754,49756],{"id":49755},"_242测试代码","2.4.2.测试代码",[14,49758,49759],{},"使用测试集进行测试与推理",[245,49761,49763],{"className":30519,"code":49762,"language":30521,"meta":174,"style":174},"import torch\nimport torch.utils.data as Data\nfrom torchvision import transforms\nfrom torchvision.datasets import ImageFolder\nfrom model import GoogLeNet,Inception\n\n# 测试数据处理\ndef test_data_process():\n   # 导入自己的数据集，并进行数据处理\n    # 定义数据集的路径\n    ROOT_PATH=r\".\u002Fdata\u002Ftest\"\n\n    # 定义归一化方法\n    # 这里需要先计算一下数据集的均值和方差\n    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n    # 第一个参数是均值，第二个参数是方差\n    normalize=transforms.Normalize([0.162,0.151,0.138],[0.058,0.052,0.048])\n    # 定义数据集处理方法变量\n    train_transform=transforms.Compose([\n        # 调整图像大小为224*224\n        transforms.Resize((224,224)),\n        # 将图像转换为张量\n        transforms.ToTensor(),\n        normalize])\n    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n\n    # 加载数据集\n    # 传入数据集路径与处理方法\n    test_data=ImageFolder(ROOT_PATH,transform=train_transform)\n    test_dataloader=Data.DataLoader(dataset=test_data,\n                                    # 这里是一张一张进行测试\n                                    batch_size=1,\n                                    shuffle=True,\n                                    num_workers=0)\n    return test_dataloader\n\n# 定义模型测试函数\ndef test_model_process(model,test_dataloader):\n    # 将模型放到设备当中，先进行判断\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n\n    # 设置初始化参数\n    test_corrects=0.0\n    test_num=0\n\n    # 进行模型测试\n    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n    # 不进行梯度计算，可以节省内存，加快运行速度\n    with torch.no_grad():\n        # 从数据中进行\n        for test_data_x,test_data_y in test_dataloader:\n            test_data_x=test_data_x.to(device)\n            test_data_y=test_data_y.to(device)\n            # 设置为验证模式\n            model.eval()\n            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n            output=model(test_data_x)\n            # 查找每一行中最大值对应的下标\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算正确率\n            # .data表示是一个不带梯度信息的tensor\n            # 如果预测正确，则准确度test_corrects加1\n            test_corrects+=torch.sum(pre_lab==test_data_y.data)\n            # 将所有的测试样本进行累计\n            test_num+=test_data_x.size(0)\n\n        # 计算准确度\n        test_acc=test_corrects.double().item()\u002Ftest_num\n        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n        print(\"测试的准确率：\",test_acc)\n\n# 实现模型的测试功能\nif __name__==\"__main__\":\n    # 加载模型\n    model=GoogLeNet(Inception)\n    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n    model.load_state_dict(torch.load('best_model.pth'))\n    # 数据加载\n    test_dataloader=test_data_process()\n    # 加载模型测试的函数\n    test_model_process(model,test_dataloader)\n\n    # 验证集推理实现：\n    # 加载数据加载的更详细一些\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n    # 顺序不可改变\n    classes=['猫','狗']\n    with torch.no_grad():\n        # 将数据和标签都放到设备当中\n        for b_x,b_y in test_dataloader:\n            b_x=b_x.to(device)\n            b_y=b_y.to(device)\n\n            # 设置模型为验证模式\n            model.eval()\n            # 模型推理结果\n            output=model(b_x)\n            # 获取最大下标，最大下标就是类别号\n            pre_lab=torch.argmax(output,dim=1)\n            # 取出张量中的数值\n            result=pre_lab.item()\n            label=b_y.item()\n            print(\"预测值：\",classes[result],\"------\",\"真实值：\",classes[label])\n",[251,49764,49765,49771,49781,49791,49802,49812,49816,49820,49828,49833,49837,49854,49858,49862,49866,49870,49874,49906,49910,49918,49922,49934,49938,49942,49946,49950,49954,49958,49962,49966,49984,49998,50002,50012,50022,50032,50038,50042,50046,50054,50058,50074,50082,50086,50090,50098,50106,50110,50114,50118,50122,50128,50132,50142,50150,50158,50162,50166,50170,50178,50182,50198,50202,50206,50210,50222,50226,50238,50242,50246,50258,50262,50272,50276,50280,50292,50296,50304,50308,50312,50320,50324,50332,50336,50340,50344,50348,50352,50368,50376,50380,50384,50402,50408,50412,50422,50430,50438,50442,50446,50450,50454,50462,50466,50482,50486,50494,50502],{"__ignoreMap":174},[254,49766,49767,49769],{"class":256,"line":257},[254,49768,30533],{"class":260},[254,49770,30536],{"class":264},[254,49772,49773,49775,49777,49779],{"class":256,"line":175},[254,49774,30533],{"class":260},[254,49776,31556],{"class":264},[254,49778,31524],{"class":260},[254,49780,31561],{"class":264},[254,49782,49783,49785,49787,49789],{"class":256,"line":1319},[254,49784,30878],{"class":260},[254,49786,31539],{"class":264},[254,49788,30533],{"class":260},[254,49790,31544],{"class":264},[254,49792,49793,49795,49797,49799],{"class":256,"line":1334},[254,49794,30878],{"class":260},[254,49796,31509],{"class":264},[254,49798,30533],{"class":260},[254,49800,49801],{"class":264}," ImageFolder\n",[254,49803,49804,49806,49808,49810],{"class":256,"line":1340},[254,49805,30878],{"class":260},[254,49807,32055],{"class":264},[254,49809,30533],{"class":260},[254,49811,44781],{"class":264},[254,49813,49814],{"class":256,"line":1354},[254,49815,2540],{"emptyLinePlaceholder":184},[254,49817,49818],{"class":256,"line":1360},[254,49819,34092],{"class":323},[254,49821,49822,49824,49826],{"class":256,"line":1451},[254,49823,32088],{"class":260},[254,49825,34099],{"class":2103},[254,49827,32094],{"class":264},[254,49829,49830],{"class":256,"line":1457},[254,49831,49832],{"class":323},"   # 导入自己的数据集，并进行数据处理\n",[254,49834,49835],{"class":256,"line":1469},[254,49836,48102],{"class":323},[254,49838,49839,49841,49843,49845,49847,49849,49852],{"class":256,"line":1752},[254,49840,48107],{"class":313},[254,49842,310],{"class":260},[254,49844,934],{"class":260},[254,49846,515],{"class":369},[254,49848,822],{"class":313},[254,49850,49851],{"class":48118},"\u002Fdata\u002Ftest",[254,49853,25274],{"class":369},[254,49855,49856],{"class":256,"line":1757},[254,49857,2540],{"emptyLinePlaceholder":184},[254,49859,49860],{"class":256,"line":1763},[254,49861,48130],{"class":323},[254,49863,49864],{"class":256,"line":1768},[254,49865,48135],{"class":323},[254,49867,49868],{"class":256,"line":1782},[254,49869,48140],{"class":323},[254,49871,49872],{"class":256,"line":1787},[254,49873,48145],{"class":323},[254,49875,49876,49878,49880,49882,49884,49886,49888,49890,49892,49894,49896,49898,49900,49902,49904],{"class":256,"line":1793},[254,49877,48150],{"class":264},[254,49879,310],{"class":260},[254,49881,48155],{"class":264},[254,49883,48158],{"class":313},[254,49885,642],{"class":264},[254,49887,48163],{"class":313},[254,49889,642],{"class":264},[254,49891,48168],{"class":313},[254,49893,48171],{"class":264},[254,49895,48174],{"class":313},[254,49897,642],{"class":264},[254,49899,48179],{"class":313},[254,49901,642],{"class":264},[254,49903,48184],{"class":313},[254,49905,4797],{"class":264},[254,49907,49908],{"class":256,"line":1814},[254,49909,48191],{"class":323},[254,49911,49912,49914,49916],{"class":256,"line":1819},[254,49913,48196],{"class":264},[254,49915,310],{"class":260},[254,49917,48201],{"class":264},[254,49919,49920],{"class":256,"line":1833},[254,49921,48206],{"class":323},[254,49923,49924,49926,49928,49930,49932],{"class":256,"line":1838},[254,49925,48211],{"class":264},[254,49927,31642],{"class":313},[254,49929,642],{"class":264},[254,49931,31642],{"class":313},[254,49933,42763],{"class":264},[254,49935,49936],{"class":256,"line":1867},[254,49937,48224],{"class":323},[254,49939,49940],{"class":256,"line":1872},[254,49941,48229],{"class":264},[254,49943,49944],{"class":256,"line":1889},[254,49945,48234],{"class":264},[254,49947,49948],{"class":256,"line":1894},[254,49949,48239],{"class":323},[254,49951,49952],{"class":256,"line":1899},[254,49953,48244],{"class":323},[254,49955,49956],{"class":256,"line":1904},[254,49957,2540],{"emptyLinePlaceholder":184},[254,49959,49960],{"class":256,"line":1918},[254,49961,48253],{"class":323},[254,49963,49964],{"class":256,"line":1923},[254,49965,48258],{"class":323},[254,49967,49968,49970,49972,49974,49976,49978,49980,49982],{"class":256,"line":2717},[254,49969,34106],{"class":264},[254,49971,310],{"class":260},[254,49973,48267],{"class":264},[254,49975,48270],{"class":313},[254,49977,642],{"class":264},[254,49979,48275],{"class":5357},[254,49981,310],{"class":260},[254,49983,48280],{"class":264},[254,49985,49986,49988,49990,49992,49994,49996],{"class":256,"line":2731},[254,49987,34163],{"class":264},[254,49989,310],{"class":260},[254,49991,31675],{"class":264},[254,49993,31678],{"class":5357},[254,49995,310],{"class":260},[254,49997,34174],{"class":264},[254,49999,50000],{"class":256,"line":2739},[254,50001,34179],{"class":323},[254,50003,50004,50006,50008,50010],{"class":256,"line":2744},[254,50005,34184],{"class":5357},[254,50007,310],{"class":260},[254,50009,482],{"class":313},[254,50011,31607],{"class":264},[254,50013,50014,50016,50018,50020],{"class":256,"line":2750},[254,50015,34195],{"class":5357},[254,50017,310],{"class":260},[254,50019,31617],{"class":313},[254,50021,31607],{"class":264},[254,50023,50024,50026,50028,50030],{"class":256,"line":2756},[254,50025,34206],{"class":5357},[254,50027,310],{"class":260},[254,50029,456],{"class":313},[254,50031,271],{"class":264},[254,50033,50034,50036],{"class":256,"line":2761},[254,50035,4230],{"class":260},[254,50037,34219],{"class":264},[254,50039,50040],{"class":256,"line":8089},[254,50041,2540],{"emptyLinePlaceholder":184},[254,50043,50044],{"class":256,"line":8113},[254,50045,34228],{"class":323},[254,50047,50048,50050,50052],{"class":256,"line":8118},[254,50049,32088],{"class":260},[254,50051,34235],{"class":2103},[254,50053,34238],{"class":264},[254,50055,50056],{"class":256,"line":8124},[254,50057,34243],{"class":323},[254,50059,50060,50062,50064,50066,50068,50070,50072],{"class":256,"line":8151},[254,50061,31378],{"class":264},[254,50063,310],{"class":260},[254,50065,31385],{"class":369},[254,50067,1844],{"class":260},[254,50069,31390],{"class":264},[254,50071,1841],{"class":260},[254,50073,34260],{"class":369},[254,50075,50076,50078,50080],{"class":256,"line":8156},[254,50077,31430],{"class":264},[254,50079,310],{"class":260},[254,50081,32430],{"class":264},[254,50083,50084],{"class":256,"line":8162},[254,50085,2540],{"emptyLinePlaceholder":184},[254,50087,50088],{"class":256,"line":8174},[254,50089,34277],{"class":323},[254,50091,50092,50094,50096],{"class":256,"line":8186},[254,50093,34282],{"class":264},[254,50095,310],{"class":260},[254,50097,32483],{"class":313},[254,50099,50100,50102,50104],{"class":256,"line":8198},[254,50101,34291],{"class":264},[254,50103,310],{"class":260},[254,50105,3225],{"class":313},[254,50107,50108],{"class":256,"line":9857},[254,50109,2540],{"emptyLinePlaceholder":184},[254,50111,50112],{"class":256,"line":9882},[254,50113,34304],{"class":323},[254,50115,50116],{"class":256,"line":9905},[254,50117,34309],{"class":323},[254,50119,50120],{"class":256,"line":9929},[254,50121,34314],{"class":323},[254,50123,50124,50126],{"class":256,"line":9934},[254,50125,34319],{"class":260},[254,50127,33025],{"class":264},[254,50129,50130],{"class":256,"line":9939},[254,50131,34326],{"class":323},[254,50133,50134,50136,50138,50140],{"class":256,"line":9944},[254,50135,3543],{"class":260},[254,50137,34333],{"class":264},[254,50139,26184],{"class":260},[254,50141,34338],{"class":264},[254,50143,50144,50146,50148],{"class":256,"line":9953},[254,50145,34343],{"class":264},[254,50147,310],{"class":260},[254,50149,34348],{"class":264},[254,50151,50152,50154,50156],{"class":256,"line":9958},[254,50153,34353],{"class":264},[254,50155,310],{"class":260},[254,50157,34358],{"class":264},[254,50159,50160],{"class":256,"line":9964},[254,50161,34363],{"class":323},[254,50163,50164],{"class":256,"line":9985},[254,50165,33016],{"class":264},[254,50167,50168],{"class":256,"line":9991},[254,50169,34372],{"class":323},[254,50171,50172,50174,50176],{"class":256,"line":10005},[254,50173,32801],{"class":264},[254,50175,310],{"class":260},[254,50177,34381],{"class":264},[254,50179,50180],{"class":256,"line":10011},[254,50181,34386],{"class":323},[254,50183,50184,50186,50188,50190,50192,50194,50196],{"class":256,"line":10038},[254,50185,32818],{"class":264},[254,50187,310],{"class":260},[254,50189,32823],{"class":264},[254,50191,32826],{"class":5357},[254,50193,310],{"class":260},[254,50195,482],{"class":313},[254,50197,271],{"class":264},[254,50199,50200],{"class":256,"line":10047},[254,50201,34407],{"class":323},[254,50203,50204],{"class":256,"line":10053},[254,50205,34412],{"class":323},[254,50207,50208],{"class":256,"line":10061},[254,50209,34417],{"class":323},[254,50211,50212,50214,50216,50218,50220],{"class":256,"line":10066},[254,50213,34422],{"class":264},[254,50215,9618],{"class":260},[254,50217,32928],{"class":264},[254,50219,3089],{"class":260},[254,50221,34431],{"class":264},[254,50223,50224],{"class":256,"line":16745},[254,50225,34436],{"class":323},[254,50227,50228,50230,50232,50234,50236],{"class":256,"line":16751},[254,50229,34441],{"class":264},[254,50231,9618],{"class":260},[254,50233,34446],{"class":264},[254,50235,456],{"class":313},[254,50237,271],{"class":264},[254,50239,50240],{"class":256,"line":16774},[254,50241,2540],{"emptyLinePlaceholder":184},[254,50243,50244],{"class":256,"line":16780},[254,50245,34459],{"class":323},[254,50247,50248,50250,50252,50254,50256],{"class":256,"line":16803},[254,50249,34464],{"class":264},[254,50251,310],{"class":260},[254,50253,34469],{"class":264},[254,50255,848],{"class":260},[254,50257,34474],{"class":264},[254,50259,50260],{"class":256,"line":16817},[254,50261,34479],{"class":323},[254,50263,50264,50266,50268,50270],{"class":256,"line":16837},[254,50265,32592],{"class":313},[254,50267,265],{"class":264},[254,50269,34488],{"class":369},[254,50271,34491],{"class":264},[254,50273,50274],{"class":256,"line":16843},[254,50275,2540],{"emptyLinePlaceholder":184},[254,50277,50278],{"class":256,"line":16854},[254,50279,34500],{"class":323},[254,50281,50282,50284,50286,50288,50290],{"class":256,"line":16877},[254,50283,1671],{"class":260},[254,50285,31361],{"class":313},[254,50287,3089],{"class":260},[254,50289,31366],{"class":369},[254,50291,3879],{"class":264},[254,50293,50294],{"class":256,"line":16899},[254,50295,34517],{"class":323},[254,50297,50298,50300,50302],{"class":256,"line":16904},[254,50299,31430],{"class":264},[254,50301,310],{"class":260},[254,50303,44692],{"class":264},[254,50305,50306],{"class":256,"line":16910},[254,50307,34530],{"class":323},[254,50309,50310],{"class":256,"line":16924},[254,50311,34535],{"class":323},[254,50313,50314,50316,50318],{"class":256,"line":16937},[254,50315,34540],{"class":264},[254,50317,34543],{"class":369},[254,50319,30638],{"class":264},[254,50321,50322],{"class":256,"line":16942},[254,50323,34550],{"class":323},[254,50325,50326,50328,50330],{"class":256,"line":16956},[254,50327,34163],{"class":264},[254,50329,310],{"class":260},[254,50331,34559],{"class":264},[254,50333,50334],{"class":256,"line":16961},[254,50335,34564],{"class":323},[254,50337,50338],{"class":256,"line":16967},[254,50339,34569],{"class":264},[254,50341,50342],{"class":256,"line":16972},[254,50343,2540],{"emptyLinePlaceholder":184},[254,50345,50346],{"class":256,"line":16986},[254,50347,34578],{"class":323},[254,50349,50350],{"class":256,"line":16991},[254,50351,34583],{"class":323},[254,50353,50354,50356,50358,50360,50362,50364,50366],{"class":256,"line":16996},[254,50355,31378],{"class":264},[254,50357,310],{"class":260},[254,50359,31385],{"class":369},[254,50361,1844],{"class":260},[254,50363,31390],{"class":264},[254,50365,1841],{"class":260},[254,50367,34260],{"class":369},[254,50369,50370,50372,50374],{"class":256,"line":17010},[254,50371,31430],{"class":264},[254,50373,310],{"class":260},[254,50375,32430],{"class":264},[254,50377,50378],{"class":256,"line":17022},[254,50379,34612],{"class":323},[254,50381,50382],{"class":256,"line":17027},[254,50383,34617],{"class":323},[254,50385,50386,50388,50390,50392,50395,50397,50400],{"class":256,"line":17040},[254,50387,34622],{"class":264},[254,50389,310],{"class":260},[254,50391,1154],{"class":264},[254,50393,50394],{"class":369},"'猫'",[254,50396,642],{"class":264},[254,50398,50399],{"class":369},"'狗'",[254,50401,33387],{"class":264},[254,50403,50404,50406],{"class":256,"line":17045},[254,50405,34319],{"class":260},[254,50407,33025],{"class":264},[254,50409,50410],{"class":256,"line":17050},[254,50411,34687],{"class":323},[254,50413,50414,50416,50418,50420],{"class":256,"line":17055},[254,50415,3543],{"class":260},[254,50417,34694],{"class":264},[254,50419,26184],{"class":260},[254,50421,34338],{"class":264},[254,50423,50424,50426,50428],{"class":256,"line":17068},[254,50425,32751],{"class":264},[254,50427,310],{"class":260},[254,50429,32756],{"class":264},[254,50431,50432,50434,50436],{"class":256,"line":17073},[254,50433,32766],{"class":264},[254,50435,310],{"class":260},[254,50437,32771],{"class":264},[254,50439,50440],{"class":256,"line":32774},[254,50441,2540],{"emptyLinePlaceholder":184},[254,50443,50444],{"class":256,"line":32780},[254,50445,34723],{"class":323},[254,50447,50448],{"class":256,"line":32786},[254,50449,33016],{"class":264},[254,50451,50452],{"class":256,"line":32792},[254,50453,34732],{"class":323},[254,50455,50456,50458,50460],{"class":256,"line":32798},[254,50457,32801],{"class":264},[254,50459,310],{"class":260},[254,50461,32806],{"class":264},[254,50463,50464],{"class":256,"line":32809},[254,50465,34745],{"class":323},[254,50467,50468,50470,50472,50474,50476,50478,50480],{"class":256,"line":32815},[254,50469,32818],{"class":264},[254,50471,310],{"class":260},[254,50473,32823],{"class":264},[254,50475,32826],{"class":5357},[254,50477,310],{"class":260},[254,50479,482],{"class":313},[254,50481,271],{"class":264},[254,50483,50484],{"class":256,"line":32835},[254,50485,34766],{"class":323},[254,50487,50488,50490,50492],{"class":256,"line":32841},[254,50489,34771],{"class":264},[254,50491,310],{"class":260},[254,50493,34776],{"class":264},[254,50495,50496,50498,50500],{"class":256,"line":32852},[254,50497,34781],{"class":264},[254,50499,310],{"class":260},[254,50501,34786],{"class":264},[254,50503,50504,50506,50508,50510,50512,50514,50516,50518],{"class":256,"line":32858},[254,50505,34791],{"class":313},[254,50507,265],{"class":264},[254,50509,34796],{"class":369},[254,50511,34799],{"class":264},[254,50513,34802],{"class":369},[254,50515,642],{"class":264},[254,50517,34807],{"class":369},[254,50519,34810],{"class":264},[5267,50521,50522],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sA_wV, html code.shiki .sA_wV{--shiki-default:#032F62;--shiki-dark:#DBEDFF}",{"title":174,"searchDepth":175,"depth":175,"links":50524},[50525,50526,50527,50528],{"id":30732,"depth":1319,"text":30733},{"id":37980,"depth":1319,"text":37981},{"id":41413,"depth":1319,"text":41414},{"id":45422,"depth":1319,"text":45423},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":30724,"description":23518},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":50535,"title":50536,"body":50537,"description":23518,"extension":181,"meta":50544,"navigation":184,"path":50545,"seo":50546,"stem":50547,"__hash__":50548},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":50538,"toc":50542},[50539],[10,50540,50536],{"id":50541},"_3yolo模型学习",{"title":174,"searchDepth":175,"depth":175,"links":50543},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":50536,"description":23518},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":50550,"title":50551,"body":50552,"description":50559,"extension":181,"meta":50560,"navigation":184,"path":50562,"seo":50563,"stem":50564,"__hash__":50565},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":50553,"toc":50557},[50554],[14,50555,50556],{},"yolo模型还未补充",{"title":174,"searchDepth":175,"depth":175,"links":50558},[],"深度学习学习",{"category":50561},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":50551,"description":50559},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":50567,"title":50568,"body":50569,"description":23518,"extension":181,"meta":50594,"navigation":184,"path":50595,"seo":50596,"stem":50597,"__hash__":50598},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":50570,"toc":50592},[50571,50574,50577,50582,50589],[10,50572,50568],{"id":50573},"_1工具",[14,50575,50576],{},"提示错误插件：有问题会提前报错",[14,50578,50579],{},[1602,50580],{"alt":174,"src":50581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[14,50583,50584],{},[42,50585,50588],{"href":50586,"rel":50587},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F%E5%89%8D%E7%AB%AF%E8%B5%84%E6%96%99%E6%90%9C%E9%9B%86%E5%BF%85%E5%A4%87%E7%BD%91%E7%AB%99",[151],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[14,50590,50591],{},"alt键加上下箭头可以实现语句的移动",{"title":174,"searchDepth":175,"depth":175,"links":50593},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":50568,"description":23518},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":50600,"title":50601,"body":50602,"description":23518,"extension":181,"meta":53466,"navigation":184,"path":53467,"seo":53468,"stem":53469,"__hash__":53470},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":50603,"toc":53417},[50604,50607,50611,50615,50620,50623,50628,50632,50639,50644,50651,50656,50663,50668,50672,50677,50680,50684,50689,50693,50698,50701,50704,50707,50710,50713,50716,50719,50722,50727,50732,50737,50741,50744,50747,50751,50756,50759,50767,50772,50789,50797,50802,50807,50812,50817,50822,50825,50830,50835,50839,50848,50853,50858,50862,50867,50870,50874,50879,50887,50892,50897,50900,50905,50910,50915,50918,50921,50924,50929,50934,50937,50942,50945,50950,50953,50956,50959,50964,50967,50970,50985,50990,50995,51000,51003,51006,51009,51023,51026,51031,51036,51039,51042,51045,51048,51051,51054,51057,51061,51065,51070,51074,51077,51082,51087,51090,51095,51098,51102,51107,51110,51113,51116,51119,51122,51125,51128,51131,51134,51138,51143,51148,51153,51156,51159,51163,51168,51171,51175,51178,51181,51186,51189,51192,51196,51200,51203,51208,51213,51216,51245,51250,51255,51260,51265,51269,51274,51278,51283,51286,51290,51294,51299,51303,51308,51313,51317,51322,51325,51327,51330,51335,51339,51344,51348,51352,51357,51362,51367,51372,51376,51381,51386,51391,51394,51397,51402,51405,51410,51415,51420,51425,51429,52236,52240,52583,52588,52591,52594,52597,52600,52603,52606,52609,52612,52614,52617,52619,52622,52626,52631,52634,52637,52640,52644,52649,52654,52674,52677,52681,52686,52691,52708,52712,52741,52745,52767,52769,52808,52816,52822,52826,52829,52832,52837,52842,52845,52848,52851,52856,52861,52864,52867,52870,52873,52876,52879,52882,52885,52888,52891,52894,52896,52899,52902,52905,52908,52911,52914,52917,52920,52924,52929,52932,52937,52940,52943,52946,52949,52952,52955,52958,52960,52963,52966,52969,52972,52975,52978,52982,52985,52994,52997,53002,53005,53010,53013,53016,53019,53022,53025,53028,53031,53035,53039,53042,53045,53050,53055,53060,53064,53069,53074,53077,53080,53083,53086,53089,53094,53097,53102,53104,53109,53112,53116,53121,53124,53127,53132,53136,53139,53144,53147,53150,53179,53184,53187,53190,53193,53196,53199,53203,53206,53292,53296,53299,53304,53309,53316,53319,53322,53325,53328,53331,53336,53341,53344,53347,53350,53353,53356,53359,53362,53365,53368,53370,53373,53377,53382,53387,53392,53395,53400,53405,53408,53411,53414],[10,50605,50601],{"id":50606},"_2基础语法",[34,50608,50610],{"id":50609},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[225,50612,50614],{"id":50613},"_211-js组成","2.1.1 js组成",[21,50616,50617],{},[24,50618,50619],{},"js是编程语言，html和css不是编程语言，是标记语言",[14,50621,50622],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[21,50624,50625],{"start":175},[24,50626,50627],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[225,50629,50631],{"id":50630},"_212-js书写位置","2.1.2 js书写位置",[21,50633,50634],{},[24,50635,50636],{},[414,50637,50638],{},"内部 JavaScript",[14,50640,50641],{},[1602,50642],{"alt":174,"src":50643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[21,50645,50646],{"start":175},[24,50647,50648],{},[414,50649,50650],{},"外部 JavaScript",[14,50652,50653],{},[1602,50654],{"alt":174,"src":50655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[21,50657,50658],{"start":1319},[24,50659,50660],{},[414,50661,50662],{},"内联 JavaScript",[14,50664,50665],{},[1602,50666],{"alt":174,"src":50667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[225,50669,50671],{"id":50670},"_213-javascript注释","2.1.3 JavaScript注释",[14,50673,50674],{},[1602,50675],{"alt":174,"src":50676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[14,50678,50679],{},"alt+shift+a一定要记住！",[225,50681,50683],{"id":50682},"_214-javascript结束符","2.1.4 JavaScript结束符",[14,50685,50686],{},[1602,50687],{"alt":174,"src":50688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[225,50690,50692],{"id":50691},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[21,50694,50695],{},[24,50696,50697],{},"输出语法：",[14,50699,50700],{},"①document.write('要出的内容')",[14,50702,50703],{},"向body内输出内容；",[14,50705,50706],{},"如果输出的内容写的是标签，也会被解析cheng",[14,50708,50709],{},"②alert('要出的内容')",[14,50711,50712],{},"页面弹出警告对话框",[14,50714,50715],{},"③console.log('控制台打印')",[14,50717,50718],{},"控制台输出语法，程序员调试使用",[14,50720,50721],{},"输入log就行，自动生成：",[14,50723,50724],{},[1602,50725],{"alt":174,"src":50726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[21,50728,50729],{"start":175},[24,50730,50731],{},"输入语法：",[14,50733,50734],{},[1602,50735],{"alt":174,"src":50736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[225,50738,50740],{"id":50739},"_2116-字面量","21.1.6 字面量",[14,50742,50743],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[14,50745,50746],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[34,50748,50750],{"id":50749},"_22-变量","2.2 变量",[21,50752,50753],{},[24,50754,50755],{},"变量声明",[14,50757,50758],{},"let 变量名",[1271,50760,50761,50764],{},[24,50762,50763],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[24,50765,50766],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[21,50768,50769],{"start":175},[24,50770,50771],{},"变量赋值",[245,50773,50777],{"className":50774,"code":50775,"language":50776,"meta":174,"style":174},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[251,50778,50779,50784],{"__ignoreMap":174},[254,50780,50781],{"class":256,"line":257},[254,50782,50783],{"class":264},"let age\n",[254,50785,50786],{"class":256,"line":175},[254,50787,50788],{"class":264},"age=18\n",[21,50790,50791,50794],{"start":1319},[24,50792,50793],{},"连这些（变量的初始化）：let age=18",[24,50795,50796],{},"更新变量",[14,50798,50799],{},[1602,50800],{"alt":174,"src":50801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[21,50803,50804],{"start":1340},[24,50805,50806],{},"声明多个变量",[14,50808,50809],{},[1602,50810],{"alt":174,"src":50811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[21,50813,50814],{"start":1354},[24,50815,50816],{},"变量命名规则与规范",[14,50818,50819],{},[1602,50820],{"alt":174,"src":50821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[14,50823,50824],{},"遵守小驼峰！",[21,50826,50827],{"start":1360},[24,50828,50829],{},"变量拓展-let和var的区别",[14,50831,50832],{},[1602,50833],{"alt":174,"src":50834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[34,50836,50838],{"id":50837},"_23-数组","2.3 数组",[245,50840,50842],{"className":50774,"code":50841,"language":50776,"meta":174,"style":174},"let arr = []\n",[251,50843,50844],{"__ignoreMap":174},[254,50845,50846],{"class":256,"line":257},[254,50847,50841],{"class":264},[14,50849,50850],{},[1602,50851],{"alt":174,"src":50852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[14,50854,50855],{},[1602,50856],{"alt":174,"src":50857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[34,50859,50861],{"id":50860},"_24-常量","2.4 常量",[14,50863,50864],{},[1602,50865],{"alt":174,"src":50866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[14,50868,50869],{},"const — 类似于 let ，但是变量的值无法被修改",[34,50871,50873],{"id":50872},"_25-数据类型","2.5 数据类型",[14,50875,50876],{},[1602,50877],{"alt":174,"src":50878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[21,50880,50881,50884],{},[24,50882,50883],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[24,50885,50886],{},"算数运算符：",[14,50888,50889],{},[1602,50890],{"alt":174,"src":50891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[21,50893,50894],{"start":1319},[24,50895,50896],{},"数字类型（Number）",[14,50898,50899],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[14,50901,50902],{},[1602,50903],{"alt":174,"src":50904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[21,50906,50907],{"start":1334},[24,50908,50909],{},"字符串类型（string）",[14,50911,50912],{},[1602,50913],{"alt":174,"src":50914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[14,50916,50917],{},"反引号也是可以使用的",[14,50919,50920],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[14,50922,50923],{},"例如：document.write(\"我今年\"+age+\"岁\")",[21,50925,50926],{"start":1340},[24,50927,50928],{},"模板字符串",[14,50930,50931],{},[1602,50932],{"alt":174,"src":50933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[14,50935,50936],{},"类似于python的字符串格式化",[21,50938,50939],{"start":1354},[24,50940,50941],{},"布尔类型",[14,50943,50944],{},"true 和 false",[21,50946,50947],{"start":1360},[24,50948,50949],{},"未定义类型（underfined）",[14,50951,50952],{},"表示没有赋值",[14,50954,50955],{},"未定义类型是比较特殊的类型，只有一个值undefined",[14,50957,50958],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[21,50960,50961],{"start":1451},[24,50962,50963],{},"null（空类型）",[14,50965,50966],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[14,50968,50969],{},"赋值了，但是内容为空",[245,50971,50973],{"className":50774,"code":50972,"language":50776,"meta":174,"style":174},"typeof null\n输出的是'object'，是一个对象数据类型\n",[251,50974,50975,50980],{"__ignoreMap":174},[254,50976,50977],{"class":256,"line":257},[254,50978,50979],{"class":264},"typeof null\n",[254,50981,50982],{"class":256,"line":175},[254,50983,50984],{"class":264},"输出的是'object'，是一个对象数据类型\n",[21,50986,50987],{"start":1457},[24,50988,50989],{},"控制台检测数据类型",[14,50991,50992],{},[1602,50993],{"alt":174,"src":50994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[21,50996,50997],{"start":1469},[24,50998,50999],{},"类型转换",[14,51001,51002],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[14,51004,51005],{},"转换方式：隐式转换和显示转换",[14,51007,51008],{},"①隐式转换",[1271,51010,51011,51014,51017,51020],{},[24,51012,51013],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[24,51015,51016],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[24,51018,51019],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[24,51021,51022],{},"任何数据和字符串相加结果都是字符串",[14,51024,51025],{},"②显示转换",[14,51027,51028],{},[1602,51029],{"alt":174,"src":51030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[14,51032,51033],{},[1602,51034],{"alt":174,"src":51035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[14,51037,51038],{},"在输入的时候要用好隐式转换，简单写起来",[14,51040,51041],{},"let num = +prompt(’请输入数字：‘)",[14,51043,51044],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[14,51046,51047],{},"console.log(parseInt('12.333px'))",[14,51049,51050],{},"输出为：12",[14,51052,51053],{},"console.log(parseInt('a'a'a12.333px'))",[14,51055,51056],{},"输出：NaN",[34,51058,51060],{"id":51059},"_26-运算符","2.6 运算符",[225,51062,51064],{"id":51063},"_261-赋值运算符","2.6.1 赋值运算符",[14,51066,51067],{},[1602,51068],{"alt":174,"src":51069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[225,51071,51073],{"id":51072},"_262-一元运算符","2.6.2 一元运算符",[14,51075,51076],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[14,51078,51079],{},[1602,51080],{"alt":174,"src":51081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[14,51083,51084],{},[1602,51085],{"alt":174,"src":51086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[14,51088,51089],{},"两者的区别：",[14,51091,51092],{},[1602,51093],{"alt":174,"src":51094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[14,51096,51097],{},"前置先自加；后置后加，代码执行完之后再加",[225,51099,51101],{"id":51100},"_263-比较运算符","2.6.3 比较运算符",[14,51103,51104],{},[1602,51105],{"alt":174,"src":51106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[14,51108,51109],{},"比较运算符也有隐式转换",[14,51111,51112],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[14,51114,51115],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[14,51117,51118],{},"要使用三等，开发的时候",[14,51120,51121],{},"NaN不等于任何人，包括它自己",[14,51123,51124],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[14,51126,51127],{},"7\u002F10=0.7",[14,51129,51130],{},"最后：0.5+0.2=0.7",[14,51132,51133],{},"字符串比较，比较的是字符对应的ASCII码",[225,51135,51137],{"id":51136},"_264-逻辑运算符","2.6.4 逻辑运算符",[14,51139,51140],{},[1602,51141],{"alt":174,"src":51142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[14,51144,51145],{},[1602,51146],{"alt":174,"src":51147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[14,51149,51150],{},[1602,51151],{"alt":174,"src":51152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[14,51154,51155],{},"上述题目选D",[14,51157,51158],{},"与真2假1；或真1假2",[225,51160,51162],{"id":51161},"_265-运算符优先级","2.6.5 运算符优先级",[14,51164,51165],{},[1602,51166],{"alt":174,"src":51167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[14,51169,51170],{},"先算逻辑与，后算逻辑或",[34,51172,51174],{"id":51173},"_27-语句","2.7 语句",[14,51176,51177],{},"表达式：是可以被求值的代码，会有结果给我们",[14,51179,51180],{},"语句：语句是可以被执行的代码，例如prompt()",[14,51182,51183],{},[1602,51184],{"alt":174,"src":51185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[14,51187,51188],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[14,51190,51191],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[225,51193,51195],{"id":51194},"_271-分支语句","2.7.1 分支语句",[22139,51197,51199],{"id":51198},"_2711-if分支语句","2.7.1.1 if分支语句",[14,51201,51202],{},"if语句单行简单的话，可以不写{}，写在一行就行",[21,51204,51205],{},[24,51206,51207],{},"单分支语句",[14,51209,51210],{},[1602,51211],{"alt":174,"src":51212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[14,51214,51215],{},"除了0，所有数字都为真",[245,51217,51219],{"className":50774,"code":51218,"language":50776,"meta":174,"style":174},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[251,51220,51221,51226,51231,51236,51240],{"__ignoreMap":174},[254,51222,51223],{"class":256,"line":257},[254,51224,51225],{"class":264},"if（0) {\n",[254,51227,51228],{"class":256,"line":175},[254,51229,51230],{"class":264},"    let a=1\n",[254,51232,51233],{"class":256,"line":1319},[254,51234,51235],{"class":264},"    alert(typeof a)\n",[254,51237,51238],{"class":256,"line":1334},[254,51239,1705],{"class":264},[254,51241,51242],{"class":256,"line":1340},[254,51243,51244],{"class":264},"不输出，括号为假\n",[21,51246,51247],{"start":175},[24,51248,51249],{},"双分支语句",[14,51251,51252],{},[1602,51253],{"alt":174,"src":51254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[21,51256,51257],{"start":1319},[24,51258,51259],{},"多分支语句",[14,51261,51262],{},[1602,51263],{"alt":174,"src":51264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[22139,51266,51268],{"id":51267},"_2712-三元运算符","2.7.1.2 三元运算符",[14,51270,51271],{},[1602,51272],{"alt":174,"src":51273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[22139,51275,51277],{"id":51276},"_2713-switch语句","2.7.1.3 switch语句",[14,51279,51280],{},[1602,51281],{"alt":174,"src":51282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[14,51284,51285],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[225,51287,51289],{"id":51288},"_272-循环语句","2.7.2 循环语句",[22139,51291,51293],{"id":51292},"_2721-断点演示","2.7.2.1 断点演示",[14,51295,51296],{},[1602,51297],{"alt":174,"src":51298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[22139,51300,51302],{"id":51301},"_2722-while循环","2.7.2.2 while循环",[14,51304,51305],{},[1602,51306],{"alt":174,"src":51307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[14,51309,51310],{},[1602,51311],{"alt":174,"src":51312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[22139,51314,51316],{"id":51315},"_2723-for循环","2.7.2.3 for循环",[14,51318,51319],{},[1602,51320],{"alt":174,"src":51321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[14,51323,51324],{},"for(;;) {",[14,51326,1210],{},[14,51328,51329],{},"表示无限循环",[14,51331,51332],{},[1602,51333],{"alt":174,"src":51334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[22139,51336,51338],{"id":51337},"_2724-循环的退出","2.7.2.4 循环的退出",[14,51340,51341],{},[1602,51342],{"alt":174,"src":51343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[34,51345,51347],{"id":51346},"_28-数组","2.8 数组",[225,51349,51351],{"id":51350},"_281-基础认识","2.8.1 基础认识",[14,51353,51354],{},[1602,51355],{"alt":174,"src":51356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[14,51358,51359],{},[1602,51360],{"alt":174,"src":51361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[14,51363,51364],{},[1602,51365],{"alt":174,"src":51366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[14,51368,51369],{},[1602,51370],{"alt":174,"src":51371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[225,51373,51375],{"id":51374},"_282-操作数组","2.8.2 操作数组",[14,51377,51378],{},[1602,51379],{"alt":174,"src":51380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[21,51382,51383],{},[24,51384,51385],{},"添加元素",[14,51387,51388],{},[1602,51389],{"alt":174,"src":51390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[14,51392,51393],{},"console.log(arr.push('green'))",[14,51395,51396],{},"输出结果：为新数组的长度",[14,51398,51399],{},[1602,51400],{"alt":174,"src":51401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[14,51403,51404],{},"push用的非常多，一定要记住",[21,51406,51407],{},[24,51408,51409],{},"删除元素",[14,51411,51412],{},[1602,51413],{"alt":174,"src":51414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[14,51416,51417],{},[1602,51418],{"alt":174,"src":51419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[14,51421,51422],{},[1602,51423],{"alt":174,"src":51424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[225,51426,51428],{"id":51427},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[245,51430,51432],{"className":50774,"code":51431,"language":50776,"meta":174,"style":174},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n    \u003Cmeta charset=\"UTF-8\">\n    \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    \u003Ctitle>Document\u003C\u002Ftitle>\n    \u003Cstyle>\n        * {\n            margin: 0;\n            padding: 0;\n        }\n\n        .box {\n            display: flex;\n            width: 700px;\n            height: 300px;\n            border-left: 1px solid pink;\n            border-bottom: 1px solid pink;\n            margin: 50px auto;\n            justify-content: space-around;\n            align-items: flex-end;\n            text-align: center;\n        }\n\n        .box>div {\n            display: flex;\n            width: 50px;\n            background-color: pink;\n            flex-direction: column;\n            justify-content: space-between;\n        }\n\n        .box div span {\n\n            margin-top: -20px;\n        }\n\n        .box div h4 {\n            margin-bottom: -35px;\n            width: 70px;\n            margin-left: -10px;\n        }\n    \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n\n    \u003Cscript>\n        \u002F\u002F 1. 四次弹框效果\n        \u002F\u002F 声明一个新的数组\n        let arr = []\n        for (let i = 1; i \u003C= 4; i++) {\n            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n            \u002F\u002F arr.push(num)\n            arr.push(prompt(`请输入第${i}季度的数据:`))\n            \u002F\u002F push记得加小括号，不是等号赋值的形式\n        }\n        \u002F\u002F console.log(arr)  ['123','135','345','234']\n        \u002F\u002F 盒子开头\n        document.write(` \u003Cdiv class=\"box\">`)\n\n        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n        for (let i = 0; i \u003C arr.length; i++) {\n            document.write(`\n              \u003Cdiv style=\"height: ${arr[i]}px;\">\n                \u003Cspan>${arr[i]}\u003C\u002Fspan>\n                \u003Ch4>第${i + 1}季度\u003C\u002Fh4>\n              \u003C\u002Fdiv>          \n            `)\n        }\n        \u002F\u002F 盒子结尾\n        document.write(` \u003C\u002Fdiv>`)\n    \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[251,51433,51434,51449,51465,51469,51478,51496,51520,51542,51556,51564,51571,51583,51594,51598,51602,51609,51621,51636,51649,51668,51685,51700,51712,51724,51736,51740,51744,51755,51765,51777,51789,51801,51812,51816,51820,51832,51836,51850,51854,51858,51869,51883,51895,51909,51913,51922,51931,51935,51944,51948,51957,51962,51967,51980,52008,52013,52018,52043,52048,52052,52057,52062,52077,52081,52086,52116,52128,52144,52160,52174,52179,52186,52190,52195,52208,52216,52224,52228],{"__ignoreMap":174},[254,51435,51436,51439,51443,51446],{"class":256,"line":257},[254,51437,51438],{"class":264},"\u003C!",[254,51440,51442],{"class":51441},"s9eBZ","DOCTYPE",[254,51444,51445],{"class":2103}," html",[254,51447,51448],{"class":264},">\n",[254,51450,51451,51453,51455,51458,51460,51463],{"class":256,"line":175},[254,51452,1174],{"class":264},[254,51454,50776],{"class":51441},[254,51456,51457],{"class":2103}," lang",[254,51459,310],{"class":264},[254,51461,51462],{"class":369},"\"en\"",[254,51464,51448],{"class":264},[254,51466,51467],{"class":256,"line":1319},[254,51468,2540],{"emptyLinePlaceholder":184},[254,51470,51471,51473,51476],{"class":256,"line":1334},[254,51472,1174],{"class":264},[254,51474,51475],{"class":51441},"head",[254,51477,51448],{"class":264},[254,51479,51480,51483,51486,51489,51491,51494],{"class":256,"line":1340},[254,51481,51482],{"class":264},"    \u003C",[254,51484,51485],{"class":51441},"meta",[254,51487,51488],{"class":2103}," charset",[254,51490,310],{"class":264},[254,51492,51493],{"class":369},"\"UTF-8\"",[254,51495,51448],{"class":264},[254,51497,51498,51500,51502,51505,51507,51510,51513,51515,51518],{"class":256,"line":1354},[254,51499,51482],{"class":264},[254,51501,51485],{"class":51441},[254,51503,51504],{"class":2103}," http-equiv",[254,51506,310],{"class":264},[254,51508,51509],{"class":369},"\"X-UA-Compatible\"",[254,51511,51512],{"class":2103}," content",[254,51514,310],{"class":264},[254,51516,51517],{"class":369},"\"IE=edge\"",[254,51519,51448],{"class":264},[254,51521,51522,51524,51526,51528,51530,51533,51535,51537,51540],{"class":256,"line":1360},[254,51523,51482],{"class":264},[254,51525,51485],{"class":51441},[254,51527,15061],{"class":2103},[254,51529,310],{"class":264},[254,51531,51532],{"class":369},"\"viewport\"",[254,51534,51512],{"class":2103},[254,51536,310],{"class":264},[254,51538,51539],{"class":369},"\"width=device-width, initial-scale=1.0\"",[254,51541,51448],{"class":264},[254,51543,51544,51546,51549,51552,51554],{"class":256,"line":1451},[254,51545,51482],{"class":264},[254,51547,51548],{"class":51441},"title",[254,51550,51551],{"class":264},">Document\u003C\u002F",[254,51553,51548],{"class":51441},[254,51555,51448],{"class":264},[254,51557,51558,51560,51562],{"class":256,"line":1457},[254,51559,51482],{"class":264},[254,51561,5267],{"class":51441},[254,51563,51448],{"class":264},[254,51565,51566,51569],{"class":256,"line":1469},[254,51567,51568],{"class":51441},"        *",[254,51570,15713],{"class":264},[254,51572,51573,51576,51579,51581],{"class":256,"line":1752},[254,51574,51575],{"class":313},"            margin",[254,51577,51578],{"class":264},": ",[254,51580,456],{"class":313},[254,51582,1430],{"class":264},[254,51584,51585,51588,51590,51592],{"class":256,"line":1757},[254,51586,51587],{"class":313},"            padding",[254,51589,51578],{"class":264},[254,51591,456],{"class":313},[254,51593,1430],{"class":264},[254,51595,51596],{"class":256,"line":1763},[254,51597,2669],{"class":264},[254,51599,51600],{"class":256,"line":1768},[254,51601,2540],{"emptyLinePlaceholder":184},[254,51603,51604,51607],{"class":256,"line":1782},[254,51605,51606],{"class":2103},"        .box",[254,51608,15713],{"class":264},[254,51610,51611,51614,51616,51619],{"class":256,"line":1787},[254,51612,51613],{"class":313},"            display",[254,51615,51578],{"class":264},[254,51617,51618],{"class":313},"flex",[254,51620,1430],{"class":264},[254,51622,51623,51626,51628,51631,51634],{"class":256,"line":1793},[254,51624,51625],{"class":313},"            width",[254,51627,51578],{"class":264},[254,51629,51630],{"class":313},"700",[254,51632,51633],{"class":260},"px",[254,51635,1430],{"class":264},[254,51637,51638,51641,51643,51645,51647],{"class":256,"line":1814},[254,51639,51640],{"class":313},"            height",[254,51642,51578],{"class":264},[254,51644,4113],{"class":313},[254,51646,51633],{"class":260},[254,51648,1430],{"class":264},[254,51650,51651,51654,51656,51658,51660,51663,51666],{"class":256,"line":1819},[254,51652,51653],{"class":313},"            border-left",[254,51655,51578],{"class":264},[254,51657,482],{"class":313},[254,51659,51633],{"class":260},[254,51661,51662],{"class":313}," solid",[254,51664,51665],{"class":313}," pink",[254,51667,1430],{"class":264},[254,51669,51670,51673,51675,51677,51679,51681,51683],{"class":256,"line":1833},[254,51671,51672],{"class":313},"            border-bottom",[254,51674,51578],{"class":264},[254,51676,482],{"class":313},[254,51678,51633],{"class":260},[254,51680,51662],{"class":313},[254,51682,51665],{"class":313},[254,51684,1430],{"class":264},[254,51686,51687,51689,51691,51693,51695,51698],{"class":256,"line":1838},[254,51688,51575],{"class":313},[254,51690,51578],{"class":264},[254,51692,920],{"class":313},[254,51694,51633],{"class":260},[254,51696,51697],{"class":313}," auto",[254,51699,1430],{"class":264},[254,51701,51702,51705,51707,51710],{"class":256,"line":1867},[254,51703,51704],{"class":313},"            justify-content",[254,51706,51578],{"class":264},[254,51708,51709],{"class":313},"space-around",[254,51711,1430],{"class":264},[254,51713,51714,51717,51719,51722],{"class":256,"line":1872},[254,51715,51716],{"class":313},"            align-items",[254,51718,51578],{"class":264},[254,51720,51721],{"class":313},"flex-end",[254,51723,1430],{"class":264},[254,51725,51726,51729,51731,51734],{"class":256,"line":1889},[254,51727,51728],{"class":313},"            text-align",[254,51730,51578],{"class":264},[254,51732,51733],{"class":313},"center",[254,51735,1430],{"class":264},[254,51737,51738],{"class":256,"line":1894},[254,51739,2669],{"class":264},[254,51741,51742],{"class":256,"line":1899},[254,51743,2540],{"emptyLinePlaceholder":184},[254,51745,51746,51748,51750,51753],{"class":256,"line":1904},[254,51747,51606],{"class":2103},[254,51749,1224],{"class":260},[254,51751,51752],{"class":51441},"div",[254,51754,15713],{"class":264},[254,51756,51757,51759,51761,51763],{"class":256,"line":1918},[254,51758,51613],{"class":313},[254,51760,51578],{"class":264},[254,51762,51618],{"class":313},[254,51764,1430],{"class":264},[254,51766,51767,51769,51771,51773,51775],{"class":256,"line":1923},[254,51768,51625],{"class":313},[254,51770,51578],{"class":264},[254,51772,920],{"class":313},[254,51774,51633],{"class":260},[254,51776,1430],{"class":264},[254,51778,51779,51782,51784,51787],{"class":256,"line":2717},[254,51780,51781],{"class":313},"            background-color",[254,51783,51578],{"class":264},[254,51785,51786],{"class":313},"pink",[254,51788,1430],{"class":264},[254,51790,51791,51794,51796,51799],{"class":256,"line":2731},[254,51792,51793],{"class":313},"            flex-direction",[254,51795,51578],{"class":264},[254,51797,51798],{"class":313},"column",[254,51800,1430],{"class":264},[254,51802,51803,51805,51807,51810],{"class":256,"line":2739},[254,51804,51704],{"class":313},[254,51806,51578],{"class":264},[254,51808,51809],{"class":313},"space-between",[254,51811,1430],{"class":264},[254,51813,51814],{"class":256,"line":2744},[254,51815,2669],{"class":264},[254,51817,51818],{"class":256,"line":2750},[254,51819,2540],{"emptyLinePlaceholder":184},[254,51821,51822,51824,51827,51830],{"class":256,"line":2756},[254,51823,51606],{"class":2103},[254,51825,51826],{"class":51441}," div",[254,51828,51829],{"class":51441}," span",[254,51831,15713],{"class":264},[254,51833,51834],{"class":256,"line":2761},[254,51835,2540],{"emptyLinePlaceholder":184},[254,51837,51838,51841,51843,51846,51848],{"class":256,"line":8089},[254,51839,51840],{"class":313},"            margin-top",[254,51842,51578],{"class":264},[254,51844,51845],{"class":313},"-20",[254,51847,51633],{"class":260},[254,51849,1430],{"class":264},[254,51851,51852],{"class":256,"line":8113},[254,51853,2669],{"class":264},[254,51855,51856],{"class":256,"line":8118},[254,51857,2540],{"emptyLinePlaceholder":184},[254,51859,51860,51862,51864,51867],{"class":256,"line":8124},[254,51861,51606],{"class":2103},[254,51863,51826],{"class":51441},[254,51865,51866],{"class":51441}," h4",[254,51868,15713],{"class":264},[254,51870,51871,51874,51876,51879,51881],{"class":256,"line":8151},[254,51872,51873],{"class":313},"            margin-bottom",[254,51875,51578],{"class":264},[254,51877,51878],{"class":313},"-35",[254,51880,51633],{"class":260},[254,51882,1430],{"class":264},[254,51884,51885,51887,51889,51891,51893],{"class":256,"line":8156},[254,51886,51625],{"class":313},[254,51888,51578],{"class":264},[254,51890,620],{"class":313},[254,51892,51633],{"class":260},[254,51894,1430],{"class":264},[254,51896,51897,51900,51902,51905,51907],{"class":256,"line":8162},[254,51898,51899],{"class":313},"            margin-left",[254,51901,51578],{"class":264},[254,51903,51904],{"class":313},"-10",[254,51906,51633],{"class":260},[254,51908,1430],{"class":264},[254,51910,51911],{"class":256,"line":8174},[254,51912,2669],{"class":264},[254,51914,51915,51918,51920],{"class":256,"line":8186},[254,51916,51917],{"class":264},"    \u003C\u002F",[254,51919,5267],{"class":51441},[254,51921,51448],{"class":264},[254,51923,51924,51927,51929],{"class":256,"line":8198},[254,51925,51926],{"class":264},"\u003C\u002F",[254,51928,51475],{"class":51441},[254,51930,51448],{"class":264},[254,51932,51933],{"class":256,"line":9857},[254,51934,2540],{"emptyLinePlaceholder":184},[254,51936,51937,51939,51942],{"class":256,"line":9882},[254,51938,1174],{"class":264},[254,51940,51941],{"class":51441},"body",[254,51943,51448],{"class":264},[254,51945,51946],{"class":256,"line":9905},[254,51947,2540],{"emptyLinePlaceholder":184},[254,51949,51950,51952,51955],{"class":256,"line":9929},[254,51951,51482],{"class":264},[254,51953,51954],{"class":51441},"script",[254,51956,51448],{"class":264},[254,51958,51959],{"class":256,"line":9934},[254,51960,51961],{"class":323},"        \u002F\u002F 1. 四次弹框效果\n",[254,51963,51964],{"class":256,"line":9939},[254,51965,51966],{"class":323},"        \u002F\u002F 声明一个新的数组\n",[254,51968,51969,51972,51975,51977],{"class":256,"line":9944},[254,51970,51971],{"class":260},"        let",[254,51973,51974],{"class":264}," arr ",[254,51976,310],{"class":260},[254,51978,51979],{"class":264}," []\n",[254,51981,51982,51984,51986,51989,51991,51993,51995,51997,51999,52002,52004,52006],{"class":256,"line":9953},[254,51983,3543],{"class":260},[254,51985,1798],{"class":264},[254,51987,51988],{"class":260},"let",[254,51990,9579],{"class":264},[254,51992,310],{"class":260},[254,51994,25259],{"class":313},[254,51996,9586],{"class":264},[254,51998,1728],{"class":260},[254,52000,52001],{"class":313}," 4",[254,52003,3354],{"class":264},[254,52005,2432],{"class":260},[254,52007,12583],{"class":264},[254,52009,52010],{"class":256,"line":9958},[254,52011,52012],{"class":323},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[254,52014,52015],{"class":256,"line":9964},[254,52016,52017],{"class":323},"            \u002F\u002F arr.push(num)\n",[254,52019,52020,52023,52026,52028,52031,52033,52036,52038,52041],{"class":256,"line":9985},[254,52021,52022],{"class":264},"            arr.",[254,52024,52025],{"class":2103},"push",[254,52027,265],{"class":264},[254,52029,52030],{"class":2103},"prompt",[254,52032,265],{"class":264},[254,52034,52035],{"class":369},"`请输入第${",[254,52037,705],{"class":264},[254,52039,52040],{"class":369},"}季度的数据:`",[254,52042,30638],{"class":264},[254,52044,52045],{"class":256,"line":9991},[254,52046,52047],{"class":323},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[254,52049,52050],{"class":256,"line":10005},[254,52051,2669],{"class":264},[254,52053,52054],{"class":256,"line":10011},[254,52055,52056],{"class":323},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[254,52058,52059],{"class":256,"line":10038},[254,52060,52061],{"class":323},"        \u002F\u002F 盒子开头\n",[254,52063,52064,52067,52070,52072,52075],{"class":256,"line":10047},[254,52065,52066],{"class":264},"        document.",[254,52068,52069],{"class":2103},"write",[254,52071,265],{"class":264},[254,52073,52074],{"class":369},"` \u003Cdiv class=\"box\">`",[254,52076,271],{"class":264},[254,52078,52079],{"class":256,"line":10053},[254,52080,2540],{"emptyLinePlaceholder":184},[254,52082,52083],{"class":256,"line":10061},[254,52084,52085],{"class":323},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[254,52087,52088,52090,52092,52094,52096,52098,52100,52102,52104,52107,52110,52112,52114],{"class":256,"line":10066},[254,52089,3543],{"class":260},[254,52091,1798],{"class":264},[254,52093,51988],{"class":260},[254,52095,9579],{"class":264},[254,52097,310],{"class":260},[254,52099,4233],{"class":313},[254,52101,9586],{"class":264},[254,52103,1174],{"class":260},[254,52105,52106],{"class":264}," arr.",[254,52108,52109],{"class":313},"length",[254,52111,3354],{"class":264},[254,52113,2432],{"class":260},[254,52115,12583],{"class":264},[254,52117,52118,52121,52123,52125],{"class":256,"line":16745},[254,52119,52120],{"class":264},"            document.",[254,52122,52069],{"class":2103},[254,52124,265],{"class":264},[254,52126,52127],{"class":369},"`\n",[254,52129,52130,52133,52135,52137,52139,52141],{"class":256,"line":16751},[254,52131,52132],{"class":369},"              \u003Cdiv style=\"height: ${",[254,52134,4020],{"class":264},[254,52136,1154],{"class":369},[254,52138,705],{"class":264},[254,52140,1204],{"class":369},[254,52142,52143],{"class":369},"}px;\">\n",[254,52145,52146,52149,52151,52153,52155,52157],{"class":256,"line":16774},[254,52147,52148],{"class":369},"                \u003Cspan>${",[254,52150,4020],{"class":264},[254,52152,1154],{"class":369},[254,52154,705],{"class":264},[254,52156,1204],{"class":369},[254,52158,52159],{"class":369},"}\u003C\u002Fspan>\n",[254,52161,52162,52165,52167,52169,52171],{"class":256,"line":16780},[254,52163,52164],{"class":369},"                \u003Ch4>第${",[254,52166,705],{"class":264},[254,52168,45707],{"class":260},[254,52170,25259],{"class":313},[254,52172,52173],{"class":369},"}季度\u003C\u002Fh4>\n",[254,52175,52176],{"class":256,"line":16803},[254,52177,52178],{"class":369},"              \u003C\u002Fdiv>          \n",[254,52180,52181,52184],{"class":256,"line":16817},[254,52182,52183],{"class":369},"            `",[254,52185,271],{"class":264},[254,52187,52188],{"class":256,"line":16837},[254,52189,2669],{"class":264},[254,52191,52192],{"class":256,"line":16843},[254,52193,52194],{"class":323},"        \u002F\u002F 盒子结尾\n",[254,52196,52197,52199,52201,52203,52206],{"class":256,"line":16854},[254,52198,52066],{"class":264},[254,52200,52069],{"class":2103},[254,52202,265],{"class":264},[254,52204,52205],{"class":369},"` \u003C\u002Fdiv>`",[254,52207,271],{"class":264},[254,52209,52210,52212,52214],{"class":256,"line":16877},[254,52211,51917],{"class":264},[254,52213,51954],{"class":51441},[254,52215,51448],{"class":264},[254,52217,52218,52220,52222],{"class":256,"line":16899},[254,52219,51926],{"class":264},[254,52221,51941],{"class":51441},[254,52223,51448],{"class":264},[254,52225,52226],{"class":256,"line":16904},[254,52227,2540],{"emptyLinePlaceholder":184},[254,52229,52230,52232,52234],{"class":256,"line":16910},[254,52231,51926],{"class":264},[254,52233,50776],{"class":51441},[254,52235,51448],{"class":264},[225,52237,52239],{"id":52238},"_284-冒泡排序","2.8.4 冒泡排序",[245,52241,52243],{"className":50774,"code":52242,"language":50776,"meta":174,"style":174},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cscript>\n    let arr = [5, 4, 3, 2, 1]\n    for (let i = 0; i \u003C arr.length - 1; i++) {\n      for (let j = 0; j \u003C arr.length - i - 1; j++) {\n        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n        if (arr[j] > arr[j + 1]) {\n          \u002F\u002F 交换两个变量\n          let tmp = arr[j]\n          arr[j] = arr[j + 1]\n          arr[j + 1] = tmp\n        }\n      }\n    }\n    document.write(arr)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[251,52244,52245,52255,52269,52273,52281,52296,52316,52328,52336,52340,52348,52356,52388,52421,52458,52463,52482,52487,52500,52515,52531,52535,52540,52544,52554,52563,52571,52575],{"__ignoreMap":174},[254,52246,52247,52249,52251,52253],{"class":256,"line":257},[254,52248,51438],{"class":264},[254,52250,51442],{"class":51441},[254,52252,51445],{"class":2103},[254,52254,51448],{"class":264},[254,52256,52257,52259,52261,52263,52265,52267],{"class":256,"line":175},[254,52258,1174],{"class":264},[254,52260,50776],{"class":51441},[254,52262,51457],{"class":2103},[254,52264,310],{"class":264},[254,52266,51462],{"class":369},[254,52268,51448],{"class":264},[254,52270,52271],{"class":256,"line":1319},[254,52272,2540],{"emptyLinePlaceholder":184},[254,52274,52275,52277,52279],{"class":256,"line":1334},[254,52276,1174],{"class":264},[254,52278,51475],{"class":51441},[254,52280,51448],{"class":264},[254,52282,52283,52286,52288,52290,52292,52294],{"class":256,"line":1340},[254,52284,52285],{"class":264},"  \u003C",[254,52287,51485],{"class":51441},[254,52289,51488],{"class":2103},[254,52291,310],{"class":264},[254,52293,51493],{"class":369},[254,52295,51448],{"class":264},[254,52297,52298,52300,52302,52304,52306,52308,52310,52312,52314],{"class":256,"line":1354},[254,52299,52285],{"class":264},[254,52301,51485],{"class":51441},[254,52303,15061],{"class":2103},[254,52305,310],{"class":264},[254,52307,51532],{"class":369},[254,52309,51512],{"class":2103},[254,52311,310],{"class":264},[254,52313,51539],{"class":369},[254,52315,51448],{"class":264},[254,52317,52318,52320,52322,52324,52326],{"class":256,"line":1360},[254,52319,52285],{"class":264},[254,52321,51548],{"class":51441},[254,52323,51551],{"class":264},[254,52325,51548],{"class":51441},[254,52327,51448],{"class":264},[254,52329,52330,52332,52334],{"class":256,"line":1451},[254,52331,51926],{"class":264},[254,52333,51475],{"class":51441},[254,52335,51448],{"class":264},[254,52337,52338],{"class":256,"line":1457},[254,52339,2540],{"emptyLinePlaceholder":184},[254,52341,52342,52344,52346],{"class":256,"line":1469},[254,52343,1174],{"class":264},[254,52345,51941],{"class":51441},[254,52347,51448],{"class":264},[254,52349,52350,52352,52354],{"class":256,"line":1752},[254,52351,52285],{"class":264},[254,52353,51954],{"class":51441},[254,52355,51448],{"class":264},[254,52357,52358,52361,52363,52365,52368,52370,52372,52374,52376,52378,52380,52382,52384,52386],{"class":256,"line":1757},[254,52359,52360],{"class":260},"    let",[254,52362,51974],{"class":264},[254,52364,310],{"class":260},[254,52366,52367],{"class":264}," [",[254,52369,583],{"class":313},[254,52371,12576],{"class":264},[254,52373,557],{"class":313},[254,52375,12576],{"class":264},[254,52377,336],{"class":313},[254,52379,12576],{"class":264},[254,52381,342],{"class":313},[254,52383,12576],{"class":264},[254,52385,482],{"class":313},[254,52387,33387],{"class":264},[254,52389,52390,52392,52394,52396,52398,52400,52402,52404,52406,52408,52410,52413,52415,52417,52419],{"class":256,"line":1763},[254,52391,3341],{"class":260},[254,52393,1798],{"class":264},[254,52395,51988],{"class":260},[254,52397,9579],{"class":264},[254,52399,310],{"class":260},[254,52401,4233],{"class":313},[254,52403,9586],{"class":264},[254,52405,1174],{"class":260},[254,52407,52106],{"class":264},[254,52409,52109],{"class":313},[254,52411,52412],{"class":260}," -",[254,52414,25259],{"class":313},[254,52416,3354],{"class":264},[254,52418,2432],{"class":260},[254,52420,12583],{"class":264},[254,52422,52423,52426,52428,52430,52432,52434,52436,52438,52440,52442,52444,52446,52448,52450,52452,52454,52456],{"class":256,"line":1768},[254,52424,52425],{"class":260},"      for",[254,52427,1798],{"class":264},[254,52429,51988],{"class":260},[254,52431,9641],{"class":264},[254,52433,310],{"class":260},[254,52435,4233],{"class":313},[254,52437,9648],{"class":264},[254,52439,1174],{"class":260},[254,52441,52106],{"class":264},[254,52443,52109],{"class":313},[254,52445,52412],{"class":260},[254,52447,9579],{"class":264},[254,52449,796],{"class":260},[254,52451,25259],{"class":313},[254,52453,9655],{"class":264},[254,52455,2432],{"class":260},[254,52457,12583],{"class":264},[254,52459,52460],{"class":256,"line":1782},[254,52461,52462],{"class":323},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[254,52464,52465,52467,52470,52472,52475,52477,52479],{"class":256,"line":1787},[254,52466,2637],{"class":260},[254,52468,52469],{"class":264}," (arr[j] ",[254,52471,1224],{"class":260},[254,52473,52474],{"class":264}," arr[j ",[254,52476,745],{"class":260},[254,52478,25259],{"class":313},[254,52480,52481],{"class":264},"]) {\n",[254,52483,52484],{"class":256,"line":1793},[254,52485,52486],{"class":323},"          \u002F\u002F 交换两个变量\n",[254,52488,52489,52492,52495,52497],{"class":256,"line":1814},[254,52490,52491],{"class":260},"          let",[254,52493,52494],{"class":264}," tmp ",[254,52496,310],{"class":260},[254,52498,52499],{"class":264}," arr[j]\n",[254,52501,52502,52505,52507,52509,52511,52513],{"class":256,"line":1819},[254,52503,52504],{"class":264},"          arr[j] ",[254,52506,310],{"class":260},[254,52508,52474],{"class":264},[254,52510,745],{"class":260},[254,52512,25259],{"class":313},[254,52514,33387],{"class":264},[254,52516,52517,52520,52522,52524,52526,52528],{"class":256,"line":1833},[254,52518,52519],{"class":264},"          arr[j ",[254,52521,745],{"class":260},[254,52523,25259],{"class":313},[254,52525,4583],{"class":264},[254,52527,310],{"class":260},[254,52529,52530],{"class":264}," tmp\n",[254,52532,52533],{"class":256,"line":1838},[254,52534,2669],{"class":264},[254,52536,52537],{"class":256,"line":1867},[254,52538,52539],{"class":264},"      }\n",[254,52541,52542],{"class":256,"line":1872},[254,52543,2327],{"class":264},[254,52545,52546,52549,52551],{"class":256,"line":1889},[254,52547,52548],{"class":264},"    document.",[254,52550,52069],{"class":2103},[254,52552,52553],{"class":264},"(arr)\n",[254,52555,52556,52559,52561],{"class":256,"line":1894},[254,52557,52558],{"class":264},"  \u003C\u002F",[254,52560,51954],{"class":51441},[254,52562,51448],{"class":264},[254,52564,52565,52567,52569],{"class":256,"line":1899},[254,52566,51926],{"class":264},[254,52568,51941],{"class":51441},[254,52570,51448],{"class":264},[254,52572,52573],{"class":256,"line":1904},[254,52574,2540],{"emptyLinePlaceholder":184},[254,52576,52577,52579,52581],{"class":256,"line":1918},[254,52578,51926],{"class":264},[254,52580,50776],{"class":51441},[254,52582,51448],{"class":264},[14,52584,52585],{},[1602,52586],{"alt":174,"src":52587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[14,52589,52590],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[14,52592,52593],{},"let arr = [4, 2, 5, 1, 3]",[14,52595,52596],{},"\u002F\u002F 1.升序排列写法",[14,52598,52599],{},"arr.sort(function (a, b) {",[14,52601,52602],{},"return a - b",[14,52604,52605],{},"})",[14,52607,52608],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[14,52610,52611],{},"\u002F\u002F 降序排列写法",[14,52613,52599],{},[14,52615,52616],{},"return b - a",[14,52618,52605],{},[14,52620,52621],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[34,52623,52625],{"id":52624},"_29-函数","2.9 函数",[14,52627,52628],{},[1602,52629],{"alt":174,"src":52630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[14,52632,52633],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[14,52635,52636],{},"函数的声明用function",[14,52638,52639],{},"函数里边可以嵌套函数",[225,52641,52643],{"id":52642},"_291-函数传参","2.9.1 函数传参",[14,52645,52646],{},[1602,52647],{"alt":174,"src":52648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[14,52650,52651],{},[1602,52652],{"alt":174,"src":52653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[1271,52655,52656,52659,52662,52665,52668,52671],{},[24,52657,52658],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[24,52660,52661],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[24,52663,52664],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[24,52666,52667],{},"开发中尽量保持形参和实参个数一致",[24,52669,52670],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[24,52672,52673],{},"形参只在函数中有用，所以不需要进行声明这个变量",[14,52675,52676],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[225,52678,52680],{"id":52679},"_292-函数的返回值","2.9.2 函数的返回值",[14,52682,52683],{},[1602,52684],{"alt":174,"src":52685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[14,52687,52688],{},[1602,52689],{"alt":174,"src":52690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[1271,52692,52693,52696,52699,52702,52705],{},[24,52694,52695],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[24,52697,52698],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[24,52700,52701],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[24,52703,52704],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[24,52706,52707],{},"断点调试:进入函数内部看执行过程F11",[225,52709,52711],{"id":52710},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[245,52713,52715],{"className":50774,"code":52714,"language":50776,"meta":174,"style":174},"    function fn(a, b) {\n      console.log(a + b);\n    }\n    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[251,52716,52717,52722,52727,52731,52736],{"__ignoreMap":174},[254,52718,52719],{"class":256,"line":257},[254,52720,52721],{"class":264},"    function fn(a, b) {\n",[254,52723,52724],{"class":256,"line":175},[254,52725,52726],{"class":264},"      console.log(a + b);\n",[254,52728,52729],{"class":256,"line":1319},[254,52730,2327],{"class":264},[254,52732,52733],{"class":256,"line":1334},[254,52734,52735],{"class":264},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[254,52737,52738],{"class":256,"line":1340},[254,52739,52740],{"class":264},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[225,52742,52744],{"id":52743},"_294-作用域","2.9.4 作用域",[1271,52746,52747,52753,52758,52761,52764],{},[24,52748,52749,52750],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[414,52751,52752],{},"作用域",[24,52754,52755],{},[414,52756,52757],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[24,52759,52760],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[24,52762,52763],{},"函数内部可以直接所使用全局变量",[24,52765,52766],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[14,52768,14774],{},[245,52770,52772],{"className":50774,"code":52771,"language":50776,"meta":174,"style":174},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[251,52773,52774,52779,52784,52788,52793,52798,52803],{"__ignoreMap":174},[254,52775,52776],{"class":256,"line":257},[254,52777,52778],{"class":264},"    function fun() {\n",[254,52780,52781],{"class":256,"line":175},[254,52782,52783],{"class":264},"      num = 10\n",[254,52785,52786],{"class":256,"line":1319},[254,52787,2327],{"class":264},[254,52789,52790],{"class":256,"line":1334},[254,52791,52792],{"class":264},"    fun()\n",[254,52794,52795],{"class":256,"line":1340},[254,52796,52797],{"class":264},"    console.log(num)\n",[254,52799,52800],{"class":256,"line":1354},[254,52801,52802],{"class":264},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[254,52804,52805],{"class":256,"line":1360},[254,52806,52807],{"class":264},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[1271,52809,52810,52813],{},[24,52811,52812],{},"函数内部的形参可以看做是局部变量",[24,52814,52815],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[14,52817,52818,52819],{},"变量访问原则： ",[414,52820,52821],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[225,52823,52825],{"id":52824},"_295-匿名函数","2.9.5 匿名函数",[14,52827,52828],{},"函数可以分为具名函数和匿名函数",[14,52830,52831],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[21,52833,52834],{},[24,52835,52836],{},"函数表达式",[14,52838,52839],{},[1602,52840],{"alt":174,"src":52841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[14,52843,52844],{},"里边也可以写参数",[14,52846,52847],{},"具名函数调用位置可以随意调整；",[14,52849,52850],{},"匿名函数函数表达式形式只能在声明后才可以使用",[21,52852,52853],{"start":175},[24,52854,52855],{},"立即执行函数",[14,52857,52858],{},[1602,52859],{"alt":174,"src":52860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[14,52862,52863],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[14,52865,52866],{},"写法：两个小括号，然后在第一个小括号中写function",[14,52868,52869],{},"(function () {})();",[14,52871,52872],{},"不要落下最后的;",[14,52874,52875],{},"立即执行函数必须要加;",[14,52877,52878],{},"分号写前写后都没问题",[14,52880,52881],{},"写前：",[14,52883,52884],{},"(function() {})()",[14,52886,52887],{},";(function () {})();",[14,52889,52890],{},"写后:",[14,52892,52893],{},"(function() {})();",[14,52895,52869],{},[14,52897,52898],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[14,52900,52901],{},"还有一种写法：",[14,52903,52904],{},"(function(){}());",[14,52906,52907],{},"或者:",[14,52909,52910],{},"!function(){}();",[14,52912,52913],{},"立即执行函数有时候也是可以加名字的：",[14,52915,52916],{},"(function flexible(window,document) {}(window,document));",[14,52918,52919],{},"省一些调用方法",[225,52921,52923],{"id":52922},"_296-逻辑中断","2.9.6 逻辑中断!!!",[14,52925,52926],{},[1602,52927],{"alt":174,"src":52928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[14,52930,52931],{},"这样就不用非得给x,y初始化了",[14,52933,52934],{},[1602,52935],{"alt":174,"src":52936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[14,52938,52939],{},"代码执行时先看左边",[14,52941,52942],{},"例如：console.log(false && 3+5)",[14,52944,52945],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[14,52947,52948],{},"&&都是真时，就返回最后一个真值",[14,52950,52951],{},"console.log(11 && 22)",[14,52953,52954],{},"输出22",[14,52956,52957],{},"逻辑与：遇真则真",[14,52959,14774],{},[14,52961,52962],{},"let age=1",[14,52964,52965],{},"console.log(11 || age++)",[14,52967,52968],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[14,52970,52971],{},"console.log(11 || 22)",[14,52973,52974],{},"||逻辑或遇到真就直接输出，输出结果为11",[14,52976,52977],{},"||如果都是假的话，就取最后一个假的值了",[225,52979,52981],{"id":52980},"_297-转换为boolean型","2.9.7 转换为Boolean型",[14,52983,52984],{},"显示转换：",[14,52986,52987,52990,52991],{},[414,52988,52989],{},"记忆","： ",[414,52992,52993],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[14,52995,52996],{},"空字符串为假，其他字符串全为真",[14,52998,52999],{},[1602,53000],{"alt":174,"src":53001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[14,53003,53004],{},"隐式转换：",[14,53006,53007],{},[1602,53008],{"alt":174,"src":53009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[14,53011,53012],{},"隐式转换:",[14,53014,53015],{},"null+3=3",[14,53017,53018],{},"undefined+3=NaN",[14,53020,53021],{},"null==undefined 输出true,他两个都当0看",[14,53023,53024],{},"null===undefined 输出false",[14,53026,53027],{},"undefined做任何操作都是NaN",[14,53029,53030],{},"NaN不等于NaN，NaN表示计算错误",[34,53032,53034],{"id":53033},"_210-对象","2.10 对象",[225,53036,53038],{"id":53037},"_2101-对象的介绍","2.10.1 对象的介绍",[14,53040,53041],{},"对象也是一种数据类型，里边的数据是无序的",[14,53043,53044],{},"对象由属性和方法组成",[14,53046,53047],{},[1602,53048],{"alt":174,"src":53049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[14,53051,53052],{},[1602,53053],{"alt":174,"src":53054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[14,53056,53057],{},[1602,53058],{"alt":174,"src":53059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[225,53061,53063],{"id":53062},"_2102-对象属性","2.10.2 对象属性",[14,53065,53066],{},[1602,53067],{"alt":174,"src":53068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[21,53070,53071],{},[24,53072,53073],{},"查询对象",[14,53075,53076],{},"对象名.属性 goods.uname",[14,53078,53079],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[14,53081,53082],{},"不带字符串的属性名也可以使用 对象名['属性名']",[14,53084,53085],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[14,53087,53088],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[21,53090,53091],{"start":175},[24,53092,53093],{},"重新赋值",[14,53095,53096],{},"对象名.属性=新值",[21,53098,53099],{"start":1319},[24,53100,53101],{},"增加新数据",[14,53103,53096],{},[21,53105,53106],{"start":1334},[24,53107,53108],{},"删除对象中的属性",[14,53110,53111],{},"delete 对象名.属性",[225,53113,53115],{"id":53114},"_2103-对象方法","2.10.3 对象方法",[14,53117,53118],{},[1602,53119],{"alt":174,"src":53120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[14,53122,53123],{},"后边跟的是匿名函数",[14,53125,53126],{},"对象外面的叫函数；对象内部的叫方法",[14,53128,53129],{},[1602,53130],{"alt":174,"src":53131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[225,53133,53135],{"id":53134},"_2104-遍历对象","2.10.4 遍历对象",[14,53137,53138],{},"理解为加括号的python字典遍历",[14,53140,53141],{},[1602,53142],{"alt":174,"src":53143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[14,53145,53146],{},"k是字符串类型",[14,53148,53149],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[245,53151,53153],{"className":50774,"code":53152,"language":50776,"meta":174,"style":174},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[251,53154,53155,53160,53165,53170,53175],{"__ignoreMap":174},[254,53156,53157],{"class":256,"line":257},[254,53158,53159],{"class":264},"   let arr = [1, 2, 3]\n",[254,53161,53162],{"class":256,"line":175},[254,53163,53164],{"class":264},"    for (let k in arr) {\n",[254,53166,53167],{"class":256,"line":1319},[254,53168,53169],{"class":264},"      console.log(k)\n",[254,53171,53172],{"class":256,"line":1334},[254,53173,53174],{"class":264},"      console.log(arr[k])\n",[254,53176,53177],{"class":256,"line":1340},[254,53178,2327],{"class":264},[14,53180,53181],{},[1602,53182],{"alt":174,"src":53183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[14,53185,53186],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[14,53188,53189],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[14,53191,53192],{},"for in 得到的k是属性名",[51954,53194,53195],{},"\n\nlet pink = {\n\nuname: 'pink老师',\n\nage: 18,\n\ngender: '男',\n\nsing: function () {\n\ndocument.write('唱歌')\n\n}\n\n}\n\n\u002F\u002F 遍历对象\n\nfor (let k in pink) {\n\nconsole.log(k)\n\nconsole.log(pink\\[k\\])\n\n}\n\n",[14,53197,53198],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[225,53200,53202],{"id":53201},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[14,53204,53205],{},"数组中放对象信息",[245,53207,53211],{"className":53208,"code":53209,"language":53210,"meta":174,"style":174},"language-xml shiki shiki-themes github-light github-dark","\u003Cscript>\n    let students = [\n      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n    ]\n    for (let i = 0; i \u003C students.length; i++) {\n      for (let k in students[i]) {\n        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n        \u002F\u002F输出每个人的名字：\n        \u002F\u002Fconsole.log(students[i].name)\n      }\n    }\n  \u003C\u002Fscript>\n","xml",[251,53212,53213,53221,53226,53231,53236,53241,53246,53251,53256,53261,53266,53271,53276,53280,53284],{"__ignoreMap":174},[254,53214,53215,53217,53219],{"class":256,"line":257},[254,53216,1174],{"class":264},[254,53218,51954],{"class":51441},[254,53220,51448],{"class":264},[254,53222,53223],{"class":256,"line":175},[254,53224,53225],{"class":264},"    let students = [\n",[254,53227,53228],{"class":256,"line":1319},[254,53229,53230],{"class":264},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[254,53232,53233],{"class":256,"line":1334},[254,53234,53235],{"class":264},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[254,53237,53238],{"class":256,"line":1340},[254,53239,53240],{"class":264},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[254,53242,53243],{"class":256,"line":1354},[254,53244,53245],{"class":264},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[254,53247,53248],{"class":256,"line":1360},[254,53249,53250],{"class":264},"    ]\n",[254,53252,53253],{"class":256,"line":1451},[254,53254,53255],{"class":264},"    for (let i = 0; i \u003C students.length; i++) {\n",[254,53257,53258],{"class":256,"line":1457},[254,53259,53260],{"class":264},"      for (let k in students[i]) {\n",[254,53262,53263],{"class":256,"line":1469},[254,53264,53265],{"class":264},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[254,53267,53268],{"class":256,"line":1752},[254,53269,53270],{"class":264},"        \u002F\u002F输出每个人的名字：\n",[254,53272,53273],{"class":256,"line":1757},[254,53274,53275],{"class":264},"        \u002F\u002Fconsole.log(students[i].name)\n",[254,53277,53278],{"class":256,"line":1763},[254,53279,52539],{"class":264},[254,53281,53282],{"class":256,"line":1768},[254,53283,2327],{"class":264},[254,53285,53286,53288,53290],{"class":256,"line":1782},[254,53287,52558],{"class":264},[254,53289,51954],{"class":51441},[254,53291,51448],{"class":264},[225,53293,53295],{"id":53294},"_2106-内置对象","2.10.6 内置对象",[14,53297,53298],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[21,53300,53301],{},[24,53302,53303],{},"数学对象Math",[14,53305,53306],{},[1602,53307],{"alt":174,"src":53308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[14,53310,53311],{},[42,53312,53315],{"href":53313,"rel":53314},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[151],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[14,53317,53318],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[14,53320,53321],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[14,53323,53324],{},"数组不可以使用Math中的max,min来求最大值与最小值",[14,53326,53327],{},"null是一个空对象，可以认为：null类似于let obj={}",[14,53329,53330],{},"null属于对象数据类型",[21,53332,53333],{"start":175},[24,53334,53335],{},"生成任意范围随机数",[14,53337,53338],{},[1602,53339],{"alt":174,"src":53340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[14,53342,53343],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[14,53345,53346],{},"乘以几就取不到几",[14,53348,53349],{},"取数组中的随机元素：",[14,53351,53352],{},"let arr = ['red', 'green', 'blue']",[14,53354,53355],{},"let random = Math.floor(Math.random() * arr.length)",[14,53357,53358],{},"console.log(arr[random])",[14,53360,53361],{},"这个函数得到的是全闭区间",[14,53363,53364],{},"function getRandom(N, M) {",[14,53366,53367],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[14,53369,1210],{},[14,53371,53372],{},"console.log(getRandom(4, 8))",[225,53374,53376],{"id":53375},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[14,53378,53379],{},[1602,53380],{"alt":174,"src":53381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[14,53383,53384],{},[1602,53385],{"alt":174,"src":53386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[14,53388,53389],{},[1602,53390],{"alt":174,"src":53391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[14,53393,53394],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[14,53396,53397],{},[1602,53398],{"alt":174,"src":53399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[14,53401,53402],{},[1602,53403],{"alt":174,"src":53404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[14,53406,53407],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[14,53409,53410],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[14,53412,53413],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[5267,53415,53416],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":174,"searchDepth":175,"depth":175,"links":53418},[53419,53427,53428,53429,53430,53431,53438,53442,53448,53457],{"id":50609,"depth":175,"text":50610,"children":53420},[53421,53422,53423,53424,53425,53426],{"id":50613,"depth":1319,"text":50614},{"id":50630,"depth":1319,"text":50631},{"id":50670,"depth":1319,"text":50671},{"id":50682,"depth":1319,"text":50683},{"id":50691,"depth":1319,"text":50692},{"id":50739,"depth":1319,"text":50740},{"id":50749,"depth":175,"text":50750},{"id":50837,"depth":175,"text":50838},{"id":50860,"depth":175,"text":50861},{"id":50872,"depth":175,"text":50873},{"id":51059,"depth":175,"text":51060,"children":53432},[53433,53434,53435,53436,53437],{"id":51063,"depth":1319,"text":51064},{"id":51072,"depth":1319,"text":51073},{"id":51100,"depth":1319,"text":51101},{"id":51136,"depth":1319,"text":51137},{"id":51161,"depth":1319,"text":51162},{"id":51173,"depth":175,"text":51174,"children":53439},[53440,53441],{"id":51194,"depth":1319,"text":51195},{"id":51288,"depth":1319,"text":51289},{"id":51346,"depth":175,"text":51347,"children":53443},[53444,53445,53446,53447],{"id":51350,"depth":1319,"text":51351},{"id":51374,"depth":1319,"text":51375},{"id":51427,"depth":1319,"text":51428},{"id":52238,"depth":1319,"text":52239},{"id":52624,"depth":175,"text":52625,"children":53449},[53450,53451,53452,53453,53454,53455,53456],{"id":52642,"depth":1319,"text":52643},{"id":52679,"depth":1319,"text":52680},{"id":52710,"depth":1319,"text":52711},{"id":52743,"depth":1319,"text":52744},{"id":52824,"depth":1319,"text":52825},{"id":52922,"depth":1319,"text":52923},{"id":52980,"depth":1319,"text":52981},{"id":53033,"depth":175,"text":53034,"children":53458},[53459,53460,53461,53462,53463,53464,53465],{"id":53037,"depth":1319,"text":53038},{"id":53062,"depth":1319,"text":53063},{"id":53114,"depth":1319,"text":53115},{"id":53134,"depth":1319,"text":53135},{"id":53201,"depth":1319,"text":53202},{"id":53294,"depth":1319,"text":53295},{"id":53375,"depth":1319,"text":53376},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":50601,"description":23518},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53472,"title":53473,"body":53474,"description":23518,"extension":181,"meta":76814,"navigation":184,"path":76815,"seo":76816,"stem":76817,"__hash__":76818},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":53475,"toc":76754},[53476,53479,53482,53485,53490,53493,53496,53499,53503,53507,53513,53518,53526,53533,53536,53540,53545,53550,53555,53558,53561,53572,53575,53579,53582,53585,53590,53595,53600,53603,53606,53698,53701,53706,53709,53714,53717,53720,53725,53728,53733,53737,53740,53754,53758,53763,53766,53769,53773,53778,53781,53785,53789,53794,53798,53803,53806,53809,53812,53815,53818,53821,53826,53831,53859,53862,53865,53868,53873,53876,53879,53882,53885,53889,53918,53922,53927,53932,53935,53938,53941,53946,54061,54066,54071,54232,54237,54240,54244,54249,54254,54257,54260,54263,54266,54269,54272,54275,54278,54281,54284,54287,54290,54293,54296,54298,54301,54304,54307,54312,54316,54713,54716,54722,54726,54731,56013,56018,56021,56024,56027,56032,57228,57232,57238,57243,57246,57251,57256,57260,57264,57269,57272,57277,57280,57283,57287,58195,58198,58202,58423,58426,58429,58432,58658,58661,58885,58888,58892,58897,58900,58903,59131,59134,59167,59170,59174,59179,59183,59186,59189,59192,59195,59198,59201,59204,59209,60489,60493,60496,61589,61593,61596,61599,61602,61605,61609,61612,61615,61617,61625,63106,63110,63113,63116,63119,63328,63331,63335,63339,63344,63349,63352,63355,63360,63364,63369,63372,63481,63485,63490,63495,63498,63501,63505,63510,63515,63520,63523,63526,63537,63540,63545,63550,63553,63556,63629,63633,63638,63641,63643,63654,63658,63663,64989,64992,64995,64998,65000,65003,65006,65009,65012,65015,65018,65021,65024,65027,65030,65033,65036,65038,65040,65043,65047,66141,66144,66147,66163,66177,66180,66185,66191,66196,66200,66204,66209,66213,66218,66660,66665,66668,66672,66677,66680,66683,66687,66692,66696,66701,66706,66710,66715,66720,66723,66728,66733,66737,66742,66747,66851,66854,66858,66863,67229,67232,67235,67238,67241,67244,67247,67250,67253,68549,68553,68558,68563,68566,68569,68572,68575,68577,68582,68587,68590,68594,68599,68604,68609,68612,68615,68618,68621,68624,68629,68632,68636,68641,68646,68650,68655,68658,68663,68666,68669,68672,68675,68678,68683,68686,68689,68692,68695,68699,68704,68707,68711,68716,68719,68722,68726,68755,68758,68762,68766,68771,68775,68780,68783,68786,68789,68792,68795,68798,68801,68804,68807,68810,68813,68816,68819,68822,68826,68831,68836,68839,68843,68847,68852,68855,68859,68862,68865,68870,68875,68880,68885,68890,68893,68896,68901,68906,68910,68915,68918,68923,68926,68929,68932,68935,68940,68943,68952,68956,68961,68964,68967,68971,68974,68979,68983,68986,68992,68998,69002,69028,69031,70592,70595,71091,71094,71099,71104,71109,71113,71118,71123,71128,71132,71137,71140,71143,71146,71149,71153,71156,71161,71164,71169,71173,71178,71181,71186,71191,71196,71199,71202,71207,71212,71215,71218,71222,71225,71230,71233,71238,71241,71246,71251,71256,71259,71264,71329,71332,71343,71347,71352,71524,71528,71533,71536,71539,71542,71546,71557,71561,71564,71569,71574,71577,71580,71583,71586,71589,71591,71594,71597,71600,71605,71608,71613,71616,71620,71623,71626,71640,71644,71647,71702,71707,71710,71713,71718,71721,71725,71730,71860,71864,71869,71874,71955,71960,71964,71967,71972,71977,71983,71986,71989,71992,71996,72001,72004,72015,72019,72036,75083,75087,75090,75093,75096,75117,75121,75124,75132,75135,75140,75143,75146,75151,75156,75160,75181,75185,75190,75193,75196,75199,75202,75206,75211,75214,75218,75223,75226,75231,75234,75239,75242,75247,76450,76454,76459,76462,76467,76751],[10,53477,53473],{"id":53478},"_3web-apis",[14,53480,53481],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[14,53483,53484],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[14,53486,53487],{},[1602,53488],{"alt":174,"src":53489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[14,53491,53492],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[14,53494,53495],{},"建议数组和对象使用 const 来声明",[14,53497,53498],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[34,53500,53502],{"id":53501},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[225,53504,53506],{"id":53505},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[14,53508,53509,53512],{},[251,53510,53511],{},"document"," = HTML 文件解析后的对象化表示；",[14,53514,53515,53517],{},[251,53516,53511],{}," ≠ HTML 文件本身",[14,53519,53520,53525],{},[414,53521,53522],{},[251,53523,53524],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[14,53527,53528,53532],{},[414,53529,53530],{},[251,53531,53511],{}," ：容器里的内容，代表当前加载的网页（DOM）",[14,53534,53535],{},"document实际上为window.document的简写",[225,53537,53539],{"id":53538},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[14,53541,53542],{},[1602,53543],{"alt":174,"src":53544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[14,53546,53547],{},[1602,53548],{"alt":174,"src":53549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[14,53551,53552],{},[1602,53553],{"alt":174,"src":53554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[14,53556,53557],{},"console.dir()",[14,53559,53560],{},"dir用来打印对象",[1271,53562,53563,53566,53569],{},[24,53564,53565],{},"任何一个标签，都是一个对象",[24,53567,53568],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[24,53570,53571],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[14,53573,53574],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[225,53576,53578],{"id":53577},"_312-获取dom对象","3.1.2 获取DoM对象",[14,53580,53581],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[14,53583,53584],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[14,53586,53587],{},[414,53588,53589],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[21,53591,53592],{},[24,53593,53594],{},"利用CSS选择器来获取标签元素",[14,53596,53597],{},[1602,53598],{"alt":174,"src":53599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[14,53601,53602],{},"里边的选择器必须必须加引号！！！",[14,53604,53605],{},"只选择第一个元素",[245,53607,53609],{"className":53208,"code":53608,"language":53210,"meta":174,"style":174},"\u003Cbody>\n  \u003Cdiv class=\"box\">123\u003C\u002Fdiv>\n  \u003Cdiv class=\"box\">456\u003C\u002Fdiv>\n  \u003Cscript>\n    \u002F\u002F 1.获取匹配的第一个元素\n    const box = document.querySelector('div')\n    console.dir(box)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[251,53610,53611,53619,53640,53659,53667,53672,53677,53682,53690],{"__ignoreMap":174},[254,53612,53613,53615,53617],{"class":256,"line":257},[254,53614,1174],{"class":264},[254,53616,51941],{"class":51441},[254,53618,51448],{"class":264},[254,53620,53621,53623,53625,53628,53630,53633,53636,53638],{"class":256,"line":175},[254,53622,52285],{"class":264},[254,53624,51752],{"class":51441},[254,53626,53627],{"class":2103}," class",[254,53629,310],{"class":264},[254,53631,53632],{"class":369},"\"box\"",[254,53634,53635],{"class":264},">123\u003C\u002F",[254,53637,51752],{"class":51441},[254,53639,51448],{"class":264},[254,53641,53642,53644,53646,53648,53650,53652,53655,53657],{"class":256,"line":1319},[254,53643,52285],{"class":264},[254,53645,51752],{"class":51441},[254,53647,53627],{"class":2103},[254,53649,310],{"class":264},[254,53651,53632],{"class":369},[254,53653,53654],{"class":264},">456\u003C\u002F",[254,53656,51752],{"class":51441},[254,53658,51448],{"class":264},[254,53660,53661,53663,53665],{"class":256,"line":1334},[254,53662,52285],{"class":264},[254,53664,51954],{"class":51441},[254,53666,51448],{"class":264},[254,53668,53669],{"class":256,"line":1340},[254,53670,53671],{"class":264},"    \u002F\u002F 1.获取匹配的第一个元素\n",[254,53673,53674],{"class":256,"line":1354},[254,53675,53676],{"class":264},"    const box = document.querySelector('div')\n",[254,53678,53679],{"class":256,"line":1360},[254,53680,53681],{"class":264},"    console.dir(box)\n",[254,53683,53684,53686,53688],{"class":256,"line":1451},[254,53685,52558],{"class":264},[254,53687,51954],{"class":51441},[254,53689,51448],{"class":264},[254,53691,53692,53694,53696],{"class":256,"line":1457},[254,53693,51926],{"class":264},[254,53695,51941],{"class":51441},[254,53697,51448],{"class":264},[14,53699,53700],{},"只选123，不选456",[14,53702,53703],{},[1602,53704],{"alt":174,"src":53705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[14,53707,53708],{},"返回的是一个数组的集合，不能对其进行直接修改",[14,53710,53711],{},[1602,53712],{"alt":174,"src":53713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[14,53715,53716],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[14,53718,53719],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[21,53721,53722],{"start":175},[24,53723,53724],{},"其他方法来获取标签元素",[14,53726,53727],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[14,53729,53730],{},[1602,53731],{"alt":174,"src":53732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[225,53734,53736],{"id":53735},"_313-操作元素的内容","3.1.3 操作元素的内容",[14,53738,53739],{},"设置修改DOM元素内容有两种方式：",[1271,53741,53742,53745,53748,53751],{},[24,53743,53744],{},"元素.innerText=''",[24,53746,53747],{},"元素.innerHTML=''",[24,53749,53750],{},"不写字符串输出数字也是可以的",[24,53752,53753],{},"元素.innerHtml=1",[22139,53755,53757],{"id":53756},"_3131-innertext","3.1.3.1 innerText",[14,53759,53760],{},[1602,53761],{"alt":174,"src":53762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[14,53764,53765],{},"思路：实现了修改盒子中的内容！",[14,53767,53768],{},"它只显示纯文本，不解析标签",[22139,53770,53772],{"id":53771},"_3132-innerhtml","3.1.3.2 innerHTML",[14,53774,53775],{},[1602,53776],{"alt":174,"src":53777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[14,53779,53780],{},"相比于innerText，他的强大之处在于可以解析标签",[225,53782,53784],{"id":53783},"_314-操作元素属性","3.1.4 操作元素属性",[22139,53786,53788],{"id":53787},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[14,53790,53791],{},[1602,53792],{"alt":174,"src":53793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[22139,53795,53797],{"id":53796},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[14,53799,53800],{},[1602,53801],{"alt":174,"src":53802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[14,53804,53805],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[14,53807,53808],{},"div.style.backgroundColor = 'hotpink'",[14,53810,53811],{},"如果按照css的写法，-表示减，就会出错",[14,53813,53814],{},"body元素不需要再获取，直接用就行！！！！！！",[14,53816,53817],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[14,53819,53820],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[14,53822,53823],{},[1602,53824],{"alt":174,"src":53825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[14,53827,53828],{},[1602,53829],{"alt":174,"src":53830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[21,53832,53833,53836,53839,53842,53845,53848],{},[24,53834,53835],{},"className这个方式就是修改很多样式的时候来使用的！",[24,53837,53838],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[24,53840,53841],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[24,53843,53844],{},"className为属性名，如果还用class的话就导致与关键字冲突",[24,53846,53847],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[24,53849,53850,53851,53856],{},"解析标签的时候就变为了",[51752,53852],{"className":53853},[53854,53855],"nav","box",[53857,53858],"br",{},[14,53860,53861],{},"例子：",[51752,53863],{"className":53864},[53854],[51954,53866,53867],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[14,53869,53870],{},[1602,53871],{"alt":174,"src":53872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[14,53874,53875],{},"追加和删除类名用classList",[14,53877,53878],{},"常用于类似于开关的操作",[14,53880,53881],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[14,53883,53884],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[22139,53886,53888],{"id":53887},"_3143-牢记点","3.1.4.3 牢记点",[21,53890,53891,53894,53897,53900,53903,53906,53909,53912,53915],{},[24,53892,53893],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[24,53895,53896],{},"使用style属性操作css时不要忘记引号",[24,53898,53899],{},"使用className或者classList时也不要忘记引号",[24,53901,53902],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[24,53904,53905],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[24,53907,53908],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[24,53910,53911],{},"若： let arr=['1','2',3] arr[0]=1",[24,53913,53914],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[24,53916,53917],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[225,53919,53921],{"id":53920},"_315-操作表单元素","3.1.5 操作表单元素",[21,53923,53924],{},[24,53925,53926],{},"天生的属性",[14,53928,53929],{},[1602,53930],{"alt":174,"src":53931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[14,53933,53934],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[14,53936,53937],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[14,53939,53940],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[14,53942,53943],{},[1602,53944],{"alt":174,"src":53945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[245,53947,53949],{"className":50774,"code":53948,"language":50776,"meta":174,"style":174},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n\u003Cinput type=\"checkbox\" name=\"\" id=\"\" checked>\n不选的话：\nconst input = document.querySelector('input')\ninput.checked=false\n这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n\n禁用按钮：\n它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n\u003Cbutton disabled>点击\u003C\u002Fbutton>\n\u003Cbutton>点击\u003C\u002Fbutton>\nconst bt = document.querySelector('button')\nbt.disabled = false\n",[251,53950,53951,53956,53988,53993,53998,54003,54008,54012,54017,54022,54039,54051,54056],{"__ignoreMap":174},[254,53952,53953],{"class":256,"line":257},[254,53954,53955],{"class":264},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[254,53957,53958,53960,53963,53966,53968,53971,53973,53975,53977,53979,53981,53983,53986],{"class":256,"line":175},[254,53959,1174],{"class":264},[254,53961,53962],{"class":51441},"input",[254,53964,53965],{"class":2103}," type",[254,53967,310],{"class":264},[254,53969,53970],{"class":369},"\"checkbox\"",[254,53972,15061],{"class":2103},[254,53974,310],{"class":264},[254,53976,7793],{"class":369},[254,53978,15100],{"class":2103},[254,53980,310],{"class":264},[254,53982,7793],{"class":369},[254,53984,53985],{"class":2103}," checked",[254,53987,51448],{"class":264},[254,53989,53990],{"class":256,"line":1319},[254,53991,53992],{"class":264},"不选的话：\n",[254,53994,53995],{"class":256,"line":1334},[254,53996,53997],{"class":264},"const input = document.querySelector('input')\n",[254,53999,54000],{"class":256,"line":1340},[254,54001,54002],{"class":264},"input.checked=false\n",[254,54004,54005],{"class":256,"line":1354},[254,54006,54007],{"class":264},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[254,54009,54010],{"class":256,"line":1360},[254,54011,2540],{"emptyLinePlaceholder":184},[254,54013,54014],{"class":256,"line":1451},[254,54015,54016],{"class":264},"禁用按钮：\n",[254,54018,54019],{"class":256,"line":1457},[254,54020,54021],{"class":264},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[254,54023,54024,54026,54029,54032,54035,54037],{"class":256,"line":1469},[254,54025,1174],{"class":264},[254,54027,54028],{"class":51441},"button",[254,54030,54031],{"class":2103}," disabled",[254,54033,54034],{"class":264},">点击\u003C\u002F",[254,54036,54028],{"class":51441},[254,54038,51448],{"class":264},[254,54040,54041,54043,54045,54047,54049],{"class":256,"line":1752},[254,54042,1174],{"class":264},[254,54044,54028],{"class":51441},[254,54046,54034],{"class":264},[254,54048,54028],{"class":51441},[254,54050,51448],{"class":264},[254,54052,54053],{"class":256,"line":1757},[254,54054,54055],{"class":264},"const bt = document.querySelector('button')\n",[254,54057,54058],{"class":256,"line":1763},[254,54059,54060],{"class":264},"bt.disabled = false\n",[21,54062,54063],{"start":175},[24,54064,54065],{},"自定义属性",[14,54067,54068],{},[1602,54069],{"alt":174,"src":54070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[245,54072,54074],{"className":53208,"code":54073,"language":53210,"meta":174,"style":174},"\u003Cbody>\n  \u003Cdiv data-id=\"1\" data-spm=\"我不知道\">1\u003C\u002Fdiv>\n  \u003Cdiv data-id=\"2\">2\u003C\u002Fdiv>\n  \u003Cdiv data-id=\"3\">3\u003C\u002Fdiv>\n  \u003Cdiv data-id=\"4\">4\u003C\u002Fdiv>\n  \u003Cdiv data-id=\"5\">5\u003C\u002Fdiv>\n  \u003Cscript>\n    const one = document.querySelector('div')\n    console.log(one.dataset)\n    console.log(one.dataset.id)\n    console.log(one.dataset.spm)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[251,54075,54076,54084,54112,54131,54150,54169,54188,54196,54201,54206,54211,54216,54224],{"__ignoreMap":174},[254,54077,54078,54080,54082],{"class":256,"line":257},[254,54079,1174],{"class":264},[254,54081,51941],{"class":51441},[254,54083,51448],{"class":264},[254,54085,54086,54088,54090,54093,54095,54097,54100,54102,54105,54108,54110],{"class":256,"line":175},[254,54087,52285],{"class":264},[254,54089,51752],{"class":51441},[254,54091,54092],{"class":2103}," data-id",[254,54094,310],{"class":264},[254,54096,3818],{"class":369},[254,54098,54099],{"class":2103}," data-spm",[254,54101,310],{"class":264},[254,54103,54104],{"class":369},"\"我不知道\"",[254,54106,54107],{"class":264},">1\u003C\u002F",[254,54109,51752],{"class":51441},[254,54111,51448],{"class":264},[254,54113,54114,54116,54118,54120,54122,54124,54127,54129],{"class":256,"line":1319},[254,54115,52285],{"class":264},[254,54117,51752],{"class":51441},[254,54119,54092],{"class":2103},[254,54121,310],{"class":264},[254,54123,3841],{"class":369},[254,54125,54126],{"class":264},">2\u003C\u002F",[254,54128,51752],{"class":51441},[254,54130,51448],{"class":264},[254,54132,54133,54135,54137,54139,54141,54143,54146,54148],{"class":256,"line":1334},[254,54134,52285],{"class":264},[254,54136,51752],{"class":51441},[254,54138,54092],{"class":2103},[254,54140,310],{"class":264},[254,54142,3854],{"class":369},[254,54144,54145],{"class":264},">3\u003C\u002F",[254,54147,51752],{"class":51441},[254,54149,51448],{"class":264},[254,54151,54152,54154,54156,54158,54160,54162,54165,54167],{"class":256,"line":1340},[254,54153,52285],{"class":264},[254,54155,51752],{"class":51441},[254,54157,54092],{"class":2103},[254,54159,310],{"class":264},[254,54161,3867],{"class":369},[254,54163,54164],{"class":264},">4\u003C\u002F",[254,54166,51752],{"class":51441},[254,54168,51448],{"class":264},[254,54170,54171,54173,54175,54177,54179,54181,54184,54186],{"class":256,"line":1354},[254,54172,52285],{"class":264},[254,54174,51752],{"class":51441},[254,54176,54092],{"class":2103},[254,54178,310],{"class":264},[254,54180,3888],{"class":369},[254,54182,54183],{"class":264},">5\u003C\u002F",[254,54185,51752],{"class":51441},[254,54187,51448],{"class":264},[254,54189,54190,54192,54194],{"class":256,"line":1360},[254,54191,52285],{"class":264},[254,54193,51954],{"class":51441},[254,54195,51448],{"class":264},[254,54197,54198],{"class":256,"line":1451},[254,54199,54200],{"class":264},"    const one = document.querySelector('div')\n",[254,54202,54203],{"class":256,"line":1457},[254,54204,54205],{"class":264},"    console.log(one.dataset)\n",[254,54207,54208],{"class":256,"line":1469},[254,54209,54210],{"class":264},"    console.log(one.dataset.id)\n",[254,54212,54213],{"class":256,"line":1752},[254,54214,54215],{"class":264},"    console.log(one.dataset.spm)\n",[254,54217,54218,54220,54222],{"class":256,"line":1757},[254,54219,52558],{"class":264},[254,54221,51954],{"class":51441},[254,54223,51448],{"class":264},[254,54225,54226,54228,54230],{"class":256,"line":1763},[254,54227,51926],{"class":264},[254,54229,51941],{"class":51441},[254,54231,51448],{"class":264},[14,54233,54234],{},[1602,54235],{"alt":174,"src":54236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[14,54238,54239],{},"document.querySelector选择的是第一个对象（元素）",[225,54241,54243],{"id":54242},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[14,54245,54246],{},[1602,54247],{"alt":174,"src":54248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[14,54250,54251],{},[1602,54252],{"alt":174,"src":54253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[14,54255,54256],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[51954,54258,54259],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[14,54261,54262],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[51954,54264,54265],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   let n1 = setInterval(fn, 1000)\n\n   console.log(n1)\n\n",[14,54267,54268],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[14,54270,54271],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[14,54273,54274],{},"单位为毫秒！！！",[14,54276,54277],{},"可以搭配匿名函数来用！！！",[14,54279,54280],{},"setInterval(function () {",[14,54282,54283],{},"alert('两秒执行一次')",[14,54285,54286],{},"}, 2000)",[14,54288,54289],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[14,54291,54292],{},"function fn() {",[14,54294,54295],{},"document.write(1)",[14,54297,1210],{},[14,54299,54300],{},"setInterval(fn, 1000)",[14,54302,54303],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[14,54305,54306],{},"setInterval('fn()', 1000)",[14,54308,54309],{},[1602,54310],{"alt":174,"src":54311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[22139,54313,54315],{"id":54314},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[245,54317,54319],{"className":50774,"code":54318,"language":50776,"meta":174,"style":174},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Ctextarea name=\"\" id=\"\" cols=\"30\" rows=\"10\">\n        用户注册协议\n        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n    \u003C\u002Ftextarea>\n  \u003Cbr>\n  \u003Cbutton class=\"btn\" disabled>我已经阅读用户协议(5)\u003C\u002Fbutton>\n  \u003Cscript>\n    \u002F\u002F 1. 获取元素\n    const btn = document.querySelector('.btn')\n    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n    \u002F\u002F 2. 倒计时\n    let i = 5\n    \u002F\u002F 2.1 开启定时器\n    let n = setInterval(function () {\n      i--\n      btn.innerHTML = `我已经阅读用户协议(${i})`\n      if (i === 0) {\n        clearInterval(n)  \u002F\u002F 关闭定时器\n        \u002F\u002F 定时器停了，我就可以开按钮\n        btn.disabled = false\n        btn.innerHTML = '同意'\n      }\n    }, 1000)\n\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[251,54320,54321,54331,54345,54349,54357,54371,54391,54403,54411,54415,54423,54460,54465,54470,54475,54483,54491,54513,54521,54526,54548,54553,54558,54569,54574,54594,54602,54617,54632,54643,54648,54658,54668,54672,54681,54685,54693,54701,54705],{"__ignoreMap":174},[254,54322,54323,54325,54327,54329],{"class":256,"line":257},[254,54324,51438],{"class":264},[254,54326,51442],{"class":51441},[254,54328,51445],{"class":2103},[254,54330,51448],{"class":264},[254,54332,54333,54335,54337,54339,54341,54343],{"class":256,"line":175},[254,54334,1174],{"class":264},[254,54336,50776],{"class":51441},[254,54338,51457],{"class":2103},[254,54340,310],{"class":264},[254,54342,51462],{"class":369},[254,54344,51448],{"class":264},[254,54346,54347],{"class":256,"line":1319},[254,54348,2540],{"emptyLinePlaceholder":184},[254,54350,54351,54353,54355],{"class":256,"line":1334},[254,54352,1174],{"class":264},[254,54354,51475],{"class":51441},[254,54356,51448],{"class":264},[254,54358,54359,54361,54363,54365,54367,54369],{"class":256,"line":1340},[254,54360,52285],{"class":264},[254,54362,51485],{"class":51441},[254,54364,51488],{"class":2103},[254,54366,310],{"class":264},[254,54368,51493],{"class":369},[254,54370,51448],{"class":264},[254,54372,54373,54375,54377,54379,54381,54383,54385,54387,54389],{"class":256,"line":1354},[254,54374,52285],{"class":264},[254,54376,51485],{"class":51441},[254,54378,15061],{"class":2103},[254,54380,310],{"class":264},[254,54382,51532],{"class":369},[254,54384,51512],{"class":2103},[254,54386,310],{"class":264},[254,54388,51539],{"class":369},[254,54390,51448],{"class":264},[254,54392,54393,54395,54397,54399,54401],{"class":256,"line":1360},[254,54394,52285],{"class":264},[254,54396,51548],{"class":51441},[254,54398,51551],{"class":264},[254,54400,51548],{"class":51441},[254,54402,51448],{"class":264},[254,54404,54405,54407,54409],{"class":256,"line":1451},[254,54406,51926],{"class":264},[254,54408,51475],{"class":51441},[254,54410,51448],{"class":264},[254,54412,54413],{"class":256,"line":1457},[254,54414,2540],{"emptyLinePlaceholder":184},[254,54416,54417,54419,54421],{"class":256,"line":1469},[254,54418,1174],{"class":264},[254,54420,51941],{"class":51441},[254,54422,51448],{"class":264},[254,54424,54425,54427,54430,54432,54434,54436,54438,54440,54442,54445,54447,54450,54453,54455,54458],{"class":256,"line":1752},[254,54426,52285],{"class":264},[254,54428,54429],{"class":51441},"textarea",[254,54431,15061],{"class":2103},[254,54433,310],{"class":264},[254,54435,7793],{"class":369},[254,54437,15100],{"class":2103},[254,54439,310],{"class":264},[254,54441,7793],{"class":369},[254,54443,54444],{"class":2103}," cols",[254,54446,310],{"class":264},[254,54448,54449],{"class":369},"\"30\"",[254,54451,54452],{"class":2103}," rows",[254,54454,310],{"class":264},[254,54456,54457],{"class":369},"\"10\"",[254,54459,51448],{"class":264},[254,54461,54462],{"class":256,"line":1757},[254,54463,54464],{"class":264},"        用户注册协议\n",[254,54466,54467],{"class":256,"line":1763},[254,54468,54469],{"class":264},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[254,54471,54472],{"class":256,"line":1768},[254,54473,54474],{"class":264},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[254,54476,54477,54479,54481],{"class":256,"line":1782},[254,54478,51917],{"class":264},[254,54480,54429],{"class":51441},[254,54482,51448],{"class":264},[254,54484,54485,54487,54489],{"class":256,"line":1787},[254,54486,52285],{"class":264},[254,54488,53857],{"class":51441},[254,54490,51448],{"class":264},[254,54492,54493,54495,54497,54499,54501,54504,54506,54509,54511],{"class":256,"line":1793},[254,54494,52285],{"class":264},[254,54496,54028],{"class":51441},[254,54498,53627],{"class":2103},[254,54500,310],{"class":264},[254,54502,54503],{"class":369},"\"btn\"",[254,54505,54031],{"class":2103},[254,54507,54508],{"class":264},">我已经阅读用户协议(5)\u003C\u002F",[254,54510,54028],{"class":51441},[254,54512,51448],{"class":264},[254,54514,54515,54517,54519],{"class":256,"line":1814},[254,54516,52285],{"class":264},[254,54518,51954],{"class":51441},[254,54520,51448],{"class":264},[254,54522,54523],{"class":256,"line":1819},[254,54524,54525],{"class":323},"    \u002F\u002F 1. 获取元素\n",[254,54527,54528,54530,54533,54535,54538,54541,54543,54546],{"class":256,"line":1833},[254,54529,11362],{"class":260},[254,54531,54532],{"class":313}," btn",[254,54534,13705],{"class":260},[254,54536,54537],{"class":264}," document.",[254,54539,54540],{"class":2103},"querySelector",[254,54542,265],{"class":264},[254,54544,54545],{"class":369},"'.btn'",[254,54547,271],{"class":264},[254,54549,54550],{"class":256,"line":1838},[254,54551,54552],{"class":323},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[254,54554,54555],{"class":256,"line":1867},[254,54556,54557],{"class":323},"    \u002F\u002F 2. 倒计时\n",[254,54559,54560,54562,54564,54566],{"class":256,"line":1872},[254,54561,52360],{"class":260},[254,54563,9579],{"class":264},[254,54565,310],{"class":260},[254,54567,54568],{"class":313}," 5\n",[254,54570,54571],{"class":256,"line":1889},[254,54572,54573],{"class":323},"    \u002F\u002F 2.1 开启定时器\n",[254,54575,54576,54578,54581,54583,54586,54588,54591],{"class":256,"line":1894},[254,54577,52360],{"class":260},[254,54579,54580],{"class":264}," n ",[254,54582,310],{"class":260},[254,54584,54585],{"class":2103}," setInterval",[254,54587,265],{"class":264},[254,54589,54590],{"class":260},"function",[254,54592,54593],{"class":264}," () {\n",[254,54595,54596,54599],{"class":256,"line":1899},[254,54597,54598],{"class":264},"      i",[254,54600,54601],{"class":260},"--\n",[254,54603,54604,54607,54609,54612,54614],{"class":256,"line":1904},[254,54605,54606],{"class":264},"      btn.innerHTML ",[254,54608,310],{"class":260},[254,54610,54611],{"class":369}," `我已经阅读用户协议(${",[254,54613,705],{"class":264},[254,54615,54616],{"class":369},"})`\n",[254,54618,54619,54622,54625,54628,54630],{"class":256,"line":1918},[254,54620,54621],{"class":260},"      if",[254,54623,54624],{"class":264}," (i ",[254,54626,54627],{"class":260},"===",[254,54629,4233],{"class":313},[254,54631,12583],{"class":264},[254,54633,54634,54637,54640],{"class":256,"line":1923},[254,54635,54636],{"class":2103},"        clearInterval",[254,54638,54639],{"class":264},"(n)  ",[254,54641,54642],{"class":323},"\u002F\u002F 关闭定时器\n",[254,54644,54645],{"class":256,"line":2717},[254,54646,54647],{"class":323},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[254,54649,54650,54653,54655],{"class":256,"line":2731},[254,54651,54652],{"class":264},"        btn.disabled ",[254,54654,310],{"class":260},[254,54656,54657],{"class":313}," false\n",[254,54659,54660,54663,54665],{"class":256,"line":2739},[254,54661,54662],{"class":264},"        btn.innerHTML ",[254,54664,310],{"class":260},[254,54666,54667],{"class":369}," '同意'\n",[254,54669,54670],{"class":256,"line":2744},[254,54671,52539],{"class":264},[254,54673,54674,54677,54679],{"class":256,"line":2750},[254,54675,54676],{"class":264},"    }, ",[254,54678,6551],{"class":313},[254,54680,271],{"class":264},[254,54682,54683],{"class":256,"line":2756},[254,54684,2540],{"emptyLinePlaceholder":184},[254,54686,54687,54689,54691],{"class":256,"line":2761},[254,54688,52558],{"class":264},[254,54690,51954],{"class":51441},[254,54692,51448],{"class":264},[254,54694,54695,54697,54699],{"class":256,"line":8089},[254,54696,51926],{"class":264},[254,54698,51941],{"class":51441},[254,54700,51448],{"class":264},[254,54702,54703],{"class":256,"line":8113},[254,54704,2540],{"emptyLinePlaceholder":184},[254,54706,54707,54709,54711],{"class":256,"line":8118},[254,54708,51926],{"class":264},[254,54710,50776],{"class":51441},[254,54712,51448],{"class":264},[14,54714,54715],{},"不要一直想着用死循环,避免死循环",[14,54717,54718,54721],{},[251,54719,54720],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[22139,54723,54725],{"id":54724},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[21,54727,54728],{},[24,54729,54730],{},"法1",[245,54732,54734],{"className":50774,"code":54733,"language":50776,"meta":174,"style":174},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      padding: 0;\n      margin: 0;\n    }\n\n    li {\n      list-style: none;\n    }\n\n    .box {\n      position: relative;\n      width: 976px;\n      height: 600px;\n      margin: 100px auto;\n    }\n\n    .slider-footer {\n      position: absolute;\n      left: 0;\n      bottom: 0;\n      width: 100%;\n      height: 15%;\n      background-color: skyblue;\n    }\n\n    .slider-footer p {\n      position: absolute;\n      font-size: 28px;\n      left: 20px;\n      top: 5px;\n    }\n\n    ul {\n      position: absolute;\n      top: 55px;\n      left: 20px;\n      display: flex;\n      justify-content: space-between;\n      position: absolute;\n      width: 250px;\n      height: 20px;\n    }\n\n    ul li {\n      width: 20px;\n      height: 20px;\n      background-color: rgba(0, 0, 0, .4);\n      border-radius: 10px;\n    }\n\n    .activate {\n      background-color: #f7f7f7;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"box\">\n    \u003Cdiv class=\"slider-wrapper\">\n      \u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\" alt=\"\">\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"slider-footer\">\n      \u003Cp>对人类来说会不会太超前了?\u003C\u002Fp>\n      \u003Cul>\n        \u003Cli class=\"activate\">\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n      \u003C\u002Ful>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    const arrImage = [\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了?', color: 'rgba(100,67,68)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说!', color: 'rgba(43,35,26)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了!', color: 'rgba(36,31,33)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚:让世界通过b站看到东方大国文化', color: 'rgba(139,98,66)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧', color: 'rgba(67,90,92)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAR', color: 'rgba(166,131,143)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题', color: 'rgba(53,29,25)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢?', color: 'rgba(99,72,114)' }\n    ]\n    const img = document.querySelector('.slider-wrapper img')\n    const p = document.querySelector('.slider-footer p')\n    const color = document.querySelector('.slider-footer')\n    const lis = document.querySelectorAll('.slider-footer ul li')\n    let i = 1\n    let timer = setInterval(function () {\n      img.src = arrImage[i].url\n      p.innerHTML = arrImage[i].title\n      color.style.backgroundColor = arrImage[i].color\n      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n      \u002F\u002F li.classList.add('activate')\n      \u002F\u002F lis[i + 1].classList.add('activate')\n      \u002F\u002F lis[i].classList.remove('activate')\n      document.querySelector('.activate')?.classList.toggle('activate')\n      lis[i].classList.add('activate')\n\n      i = (i + 1) % arrImage.length\n\n    }, 1000)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[251,54735,54736,54746,54760,54764,54772,54786,54806,54818,54826,54832,54843,54854,54858,54862,54869,54881,54885,54889,54896,54908,54922,54935,54949,54953,54957,54964,54975,54986,54997,55009,55021,55033,55037,55041,55049,55059,55072,55084,55097,55101,55105,55112,55122,55134,55146,55157,55168,55178,55190,55202,55206,55210,55219,55231,55243,55271,55284,55288,55292,55299,55310,55314,55322,55330,55334,55342,55356,55371,55395,55403,55418,55431,55439,55460,55472,55484,55496,55508,55520,55532,55544,55553,55561,55569,55577,55589,55612,55631,55650,55669,55688,55707,55726,55746,55750,55770,55789,55809,55830,55841,55858,55868,55878,55888,55893,55898,55903,55908,55933,55946,55950,55973,55977,55985,55993,56001,56005],{"__ignoreMap":174},[254,54737,54738,54740,54742,54744],{"class":256,"line":257},[254,54739,51438],{"class":264},[254,54741,51442],{"class":51441},[254,54743,51445],{"class":2103},[254,54745,51448],{"class":264},[254,54747,54748,54750,54752,54754,54756,54758],{"class":256,"line":175},[254,54749,1174],{"class":264},[254,54751,50776],{"class":51441},[254,54753,51457],{"class":2103},[254,54755,310],{"class":264},[254,54757,51462],{"class":369},[254,54759,51448],{"class":264},[254,54761,54762],{"class":256,"line":1319},[254,54763,2540],{"emptyLinePlaceholder":184},[254,54765,54766,54768,54770],{"class":256,"line":1334},[254,54767,1174],{"class":264},[254,54769,51475],{"class":51441},[254,54771,51448],{"class":264},[254,54773,54774,54776,54778,54780,54782,54784],{"class":256,"line":1340},[254,54775,52285],{"class":264},[254,54777,51485],{"class":51441},[254,54779,51488],{"class":2103},[254,54781,310],{"class":264},[254,54783,51493],{"class":369},[254,54785,51448],{"class":264},[254,54787,54788,54790,54792,54794,54796,54798,54800,54802,54804],{"class":256,"line":1354},[254,54789,52285],{"class":264},[254,54791,51485],{"class":51441},[254,54793,15061],{"class":2103},[254,54795,310],{"class":264},[254,54797,51532],{"class":369},[254,54799,51512],{"class":2103},[254,54801,310],{"class":264},[254,54803,51539],{"class":369},[254,54805,51448],{"class":264},[254,54807,54808,54810,54812,54814,54816],{"class":256,"line":1360},[254,54809,52285],{"class":264},[254,54811,51548],{"class":51441},[254,54813,51551],{"class":264},[254,54815,51548],{"class":51441},[254,54817,51448],{"class":264},[254,54819,54820,54822,54824],{"class":256,"line":1451},[254,54821,52285],{"class":264},[254,54823,5267],{"class":51441},[254,54825,51448],{"class":264},[254,54827,54828,54830],{"class":256,"line":1457},[254,54829,6544],{"class":51441},[254,54831,15713],{"class":264},[254,54833,54834,54837,54839,54841],{"class":256,"line":1469},[254,54835,54836],{"class":313},"      padding",[254,54838,51578],{"class":264},[254,54840,456],{"class":313},[254,54842,1430],{"class":264},[254,54844,54845,54848,54850,54852],{"class":256,"line":1752},[254,54846,54847],{"class":313},"      margin",[254,54849,51578],{"class":264},[254,54851,456],{"class":313},[254,54853,1430],{"class":264},[254,54855,54856],{"class":256,"line":1757},[254,54857,2327],{"class":264},[254,54859,54860],{"class":256,"line":1763},[254,54861,2540],{"emptyLinePlaceholder":184},[254,54863,54864,54867],{"class":256,"line":1768},[254,54865,54866],{"class":51441},"    li",[254,54868,15713],{"class":264},[254,54870,54871,54874,54876,54879],{"class":256,"line":1782},[254,54872,54873],{"class":313},"      list-style",[254,54875,51578],{"class":264},[254,54877,54878],{"class":313},"none",[254,54880,1430],{"class":264},[254,54882,54883],{"class":256,"line":1787},[254,54884,2327],{"class":264},[254,54886,54887],{"class":256,"line":1793},[254,54888,2540],{"emptyLinePlaceholder":184},[254,54890,54891,54894],{"class":256,"line":1814},[254,54892,54893],{"class":2103},"    .box",[254,54895,15713],{"class":264},[254,54897,54898,54901,54903,54906],{"class":256,"line":1819},[254,54899,54900],{"class":313},"      position",[254,54902,51578],{"class":264},[254,54904,54905],{"class":313},"relative",[254,54907,1430],{"class":264},[254,54909,54910,54913,54915,54918,54920],{"class":256,"line":1833},[254,54911,54912],{"class":313},"      width",[254,54914,51578],{"class":264},[254,54916,54917],{"class":313},"976",[254,54919,51633],{"class":260},[254,54921,1430],{"class":264},[254,54923,54924,54927,54929,54931,54933],{"class":256,"line":1838},[254,54925,54926],{"class":313},"      height",[254,54928,51578],{"class":264},[254,54930,1679],{"class":313},[254,54932,51633],{"class":260},[254,54934,1430],{"class":264},[254,54936,54937,54939,54941,54943,54945,54947],{"class":256,"line":1867},[254,54938,54847],{"class":313},[254,54940,51578],{"class":264},[254,54942,575],{"class":313},[254,54944,51633],{"class":260},[254,54946,51697],{"class":313},[254,54948,1430],{"class":264},[254,54950,54951],{"class":256,"line":1872},[254,54952,2327],{"class":264},[254,54954,54955],{"class":256,"line":1889},[254,54956,2540],{"emptyLinePlaceholder":184},[254,54958,54959,54962],{"class":256,"line":1894},[254,54960,54961],{"class":2103},"    .slider-footer",[254,54963,15713],{"class":264},[254,54965,54966,54968,54970,54973],{"class":256,"line":1899},[254,54967,54900],{"class":313},[254,54969,51578],{"class":264},[254,54971,54972],{"class":313},"absolute",[254,54974,1430],{"class":264},[254,54976,54977,54980,54982,54984],{"class":256,"line":1904},[254,54978,54979],{"class":313},"      left",[254,54981,51578],{"class":264},[254,54983,456],{"class":313},[254,54985,1430],{"class":264},[254,54987,54988,54991,54993,54995],{"class":256,"line":1918},[254,54989,54990],{"class":313},"      bottom",[254,54992,51578],{"class":264},[254,54994,456],{"class":313},[254,54996,1430],{"class":264},[254,54998,54999,55001,55003,55005,55007],{"class":256,"line":1923},[254,55000,54912],{"class":313},[254,55002,51578],{"class":264},[254,55004,575],{"class":313},[254,55006,592],{"class":260},[254,55008,1430],{"class":264},[254,55010,55011,55013,55015,55017,55019],{"class":256,"line":2717},[254,55012,54926],{"class":313},[254,55014,51578],{"class":264},[254,55016,839],{"class":313},[254,55018,592],{"class":260},[254,55020,1430],{"class":264},[254,55022,55023,55026,55028,55031],{"class":256,"line":2731},[254,55024,55025],{"class":313},"      background-color",[254,55027,51578],{"class":264},[254,55029,55030],{"class":313},"skyblue",[254,55032,1430],{"class":264},[254,55034,55035],{"class":256,"line":2739},[254,55036,2327],{"class":264},[254,55038,55039],{"class":256,"line":2744},[254,55040,2540],{"emptyLinePlaceholder":184},[254,55042,55043,55045,55047],{"class":256,"line":2750},[254,55044,54961],{"class":2103},[254,55046,6966],{"class":51441},[254,55048,15713],{"class":264},[254,55050,55051,55053,55055,55057],{"class":256,"line":2756},[254,55052,54900],{"class":313},[254,55054,51578],{"class":264},[254,55056,54972],{"class":313},[254,55058,1430],{"class":264},[254,55060,55061,55064,55066,55068,55070],{"class":256,"line":2761},[254,55062,55063],{"class":313},"      font-size",[254,55065,51578],{"class":264},[254,55067,1165],{"class":313},[254,55069,51633],{"class":260},[254,55071,1430],{"class":264},[254,55073,55074,55076,55078,55080,55082],{"class":256,"line":8089},[254,55075,54979],{"class":313},[254,55077,51578],{"class":264},[254,55079,964],{"class":313},[254,55081,51633],{"class":260},[254,55083,1430],{"class":264},[254,55085,55086,55089,55091,55093,55095],{"class":256,"line":8113},[254,55087,55088],{"class":313},"      top",[254,55090,51578],{"class":264},[254,55092,583],{"class":313},[254,55094,51633],{"class":260},[254,55096,1430],{"class":264},[254,55098,55099],{"class":256,"line":8118},[254,55100,2327],{"class":264},[254,55102,55103],{"class":256,"line":8124},[254,55104,2540],{"emptyLinePlaceholder":184},[254,55106,55107,55110],{"class":256,"line":8151},[254,55108,55109],{"class":51441},"    ul",[254,55111,15713],{"class":264},[254,55113,55114,55116,55118,55120],{"class":256,"line":8156},[254,55115,54900],{"class":313},[254,55117,51578],{"class":264},[254,55119,54972],{"class":313},[254,55121,1430],{"class":264},[254,55123,55124,55126,55128,55130,55132],{"class":256,"line":8162},[254,55125,55088],{"class":313},[254,55127,51578],{"class":264},[254,55129,1045],{"class":313},[254,55131,51633],{"class":260},[254,55133,1430],{"class":264},[254,55135,55136,55138,55140,55142,55144],{"class":256,"line":8174},[254,55137,54979],{"class":313},[254,55139,51578],{"class":264},[254,55141,964],{"class":313},[254,55143,51633],{"class":260},[254,55145,1430],{"class":264},[254,55147,55148,55151,55153,55155],{"class":256,"line":8186},[254,55149,55150],{"class":313},"      display",[254,55152,51578],{"class":264},[254,55154,51618],{"class":313},[254,55156,1430],{"class":264},[254,55158,55159,55162,55164,55166],{"class":256,"line":8198},[254,55160,55161],{"class":313},"      justify-content",[254,55163,51578],{"class":264},[254,55165,51809],{"class":313},[254,55167,1430],{"class":264},[254,55169,55170,55172,55174,55176],{"class":256,"line":9857},[254,55171,54900],{"class":313},[254,55173,51578],{"class":264},[254,55175,54972],{"class":313},[254,55177,1430],{"class":264},[254,55179,55180,55182,55184,55186,55188],{"class":256,"line":9882},[254,55181,54912],{"class":313},[254,55183,51578],{"class":264},[254,55185,4132],{"class":313},[254,55187,51633],{"class":260},[254,55189,1430],{"class":264},[254,55191,55192,55194,55196,55198,55200],{"class":256,"line":9905},[254,55193,54926],{"class":313},[254,55195,51578],{"class":264},[254,55197,964],{"class":313},[254,55199,51633],{"class":260},[254,55201,1430],{"class":264},[254,55203,55204],{"class":256,"line":9929},[254,55205,2327],{"class":264},[254,55207,55208],{"class":256,"line":9934},[254,55209,2540],{"emptyLinePlaceholder":184},[254,55211,55212,55214,55217],{"class":256,"line":9939},[254,55213,55109],{"class":51441},[254,55215,55216],{"class":51441}," li",[254,55218,15713],{"class":264},[254,55220,55221,55223,55225,55227,55229],{"class":256,"line":9944},[254,55222,54912],{"class":313},[254,55224,51578],{"class":264},[254,55226,964],{"class":313},[254,55228,51633],{"class":260},[254,55230,1430],{"class":264},[254,55232,55233,55235,55237,55239,55241],{"class":256,"line":9953},[254,55234,54926],{"class":313},[254,55236,51578],{"class":264},[254,55238,964],{"class":313},[254,55240,51633],{"class":260},[254,55242,1430],{"class":264},[254,55244,55245,55247,55249,55252,55254,55256,55258,55260,55262,55264,55266,55269],{"class":256,"line":9958},[254,55246,55025],{"class":313},[254,55248,51578],{"class":264},[254,55250,55251],{"class":313},"rgba",[254,55253,265],{"class":264},[254,55255,456],{"class":313},[254,55257,12576],{"class":264},[254,55259,456],{"class":313},[254,55261,12576],{"class":264},[254,55263,456],{"class":313},[254,55265,12576],{"class":264},[254,55267,55268],{"class":313},".4",[254,55270,2859],{"class":264},[254,55272,55273,55276,55278,55280,55282],{"class":256,"line":9964},[254,55274,55275],{"class":313},"      border-radius",[254,55277,51578],{"class":264},[254,55279,710],{"class":313},[254,55281,51633],{"class":260},[254,55283,1430],{"class":264},[254,55285,55286],{"class":256,"line":9985},[254,55287,2327],{"class":264},[254,55289,55290],{"class":256,"line":9991},[254,55291,2540],{"emptyLinePlaceholder":184},[254,55293,55294,55297],{"class":256,"line":10005},[254,55295,55296],{"class":2103},"    .activate",[254,55298,15713],{"class":264},[254,55300,55301,55303,55305,55308],{"class":256,"line":10011},[254,55302,55025],{"class":313},[254,55304,51578],{"class":264},[254,55306,55307],{"class":313},"#f7f7f7",[254,55309,1430],{"class":264},[254,55311,55312],{"class":256,"line":10038},[254,55313,2327],{"class":264},[254,55315,55316,55318,55320],{"class":256,"line":10047},[254,55317,52558],{"class":264},[254,55319,5267],{"class":51441},[254,55321,51448],{"class":264},[254,55323,55324,55326,55328],{"class":256,"line":10053},[254,55325,51926],{"class":264},[254,55327,51475],{"class":51441},[254,55329,51448],{"class":264},[254,55331,55332],{"class":256,"line":10061},[254,55333,2540],{"emptyLinePlaceholder":184},[254,55335,55336,55338,55340],{"class":256,"line":10066},[254,55337,1174],{"class":264},[254,55339,51941],{"class":51441},[254,55341,51448],{"class":264},[254,55343,55344,55346,55348,55350,55352,55354],{"class":256,"line":16745},[254,55345,52285],{"class":264},[254,55347,51752],{"class":51441},[254,55349,53627],{"class":2103},[254,55351,310],{"class":264},[254,55353,53632],{"class":369},[254,55355,51448],{"class":264},[254,55357,55358,55360,55362,55364,55366,55369],{"class":256,"line":16751},[254,55359,51482],{"class":264},[254,55361,51752],{"class":51441},[254,55363,53627],{"class":2103},[254,55365,310],{"class":264},[254,55367,55368],{"class":369},"\"slider-wrapper\"",[254,55370,51448],{"class":264},[254,55372,55373,55376,55378,55381,55383,55386,55389,55391,55393],{"class":256,"line":16774},[254,55374,55375],{"class":264},"      \u003C",[254,55377,1602],{"class":51441},[254,55379,55380],{"class":2103}," src",[254,55382,310],{"class":264},[254,55384,55385],{"class":369},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[254,55387,55388],{"class":2103}," alt",[254,55390,310],{"class":264},[254,55392,7793],{"class":369},[254,55394,51448],{"class":264},[254,55396,55397,55399,55401],{"class":256,"line":16780},[254,55398,51917],{"class":264},[254,55400,51752],{"class":51441},[254,55402,51448],{"class":264},[254,55404,55405,55407,55409,55411,55413,55416],{"class":256,"line":16803},[254,55406,51482],{"class":264},[254,55408,51752],{"class":51441},[254,55410,53627],{"class":2103},[254,55412,310],{"class":264},[254,55414,55415],{"class":369},"\"slider-footer\"",[254,55417,51448],{"class":264},[254,55419,55420,55422,55424,55427,55429],{"class":256,"line":16817},[254,55421,55375],{"class":264},[254,55423,14],{"class":51441},[254,55425,55426],{"class":264},">对人类来说会不会太超前了?\u003C\u002F",[254,55428,14],{"class":51441},[254,55430,51448],{"class":264},[254,55432,55433,55435,55437],{"class":256,"line":16837},[254,55434,55375],{"class":264},[254,55436,1271],{"class":51441},[254,55438,51448],{"class":264},[254,55440,55441,55444,55446,55448,55450,55453,55456,55458],{"class":256,"line":16843},[254,55442,55443],{"class":264},"        \u003C",[254,55445,24],{"class":51441},[254,55447,53627],{"class":2103},[254,55449,310],{"class":264},[254,55451,55452],{"class":369},"\"activate\"",[254,55454,55455],{"class":264},">\u003C\u002F",[254,55457,24],{"class":51441},[254,55459,51448],{"class":264},[254,55461,55462,55464,55466,55468,55470],{"class":256,"line":16854},[254,55463,55443],{"class":264},[254,55465,24],{"class":51441},[254,55467,55455],{"class":264},[254,55469,24],{"class":51441},[254,55471,51448],{"class":264},[254,55473,55474,55476,55478,55480,55482],{"class":256,"line":16877},[254,55475,55443],{"class":264},[254,55477,24],{"class":51441},[254,55479,55455],{"class":264},[254,55481,24],{"class":51441},[254,55483,51448],{"class":264},[254,55485,55486,55488,55490,55492,55494],{"class":256,"line":16899},[254,55487,55443],{"class":264},[254,55489,24],{"class":51441},[254,55491,55455],{"class":264},[254,55493,24],{"class":51441},[254,55495,51448],{"class":264},[254,55497,55498,55500,55502,55504,55506],{"class":256,"line":16904},[254,55499,55443],{"class":264},[254,55501,24],{"class":51441},[254,55503,55455],{"class":264},[254,55505,24],{"class":51441},[254,55507,51448],{"class":264},[254,55509,55510,55512,55514,55516,55518],{"class":256,"line":16910},[254,55511,55443],{"class":264},[254,55513,24],{"class":51441},[254,55515,55455],{"class":264},[254,55517,24],{"class":51441},[254,55519,51448],{"class":264},[254,55521,55522,55524,55526,55528,55530],{"class":256,"line":16924},[254,55523,55443],{"class":264},[254,55525,24],{"class":51441},[254,55527,55455],{"class":264},[254,55529,24],{"class":51441},[254,55531,51448],{"class":264},[254,55533,55534,55536,55538,55540,55542],{"class":256,"line":16937},[254,55535,55443],{"class":264},[254,55537,24],{"class":51441},[254,55539,55455],{"class":264},[254,55541,24],{"class":51441},[254,55543,51448],{"class":264},[254,55545,55546,55549,55551],{"class":256,"line":16942},[254,55547,55548],{"class":264},"      \u003C\u002F",[254,55550,1271],{"class":51441},[254,55552,51448],{"class":264},[254,55554,55555,55557,55559],{"class":256,"line":16956},[254,55556,51917],{"class":264},[254,55558,51752],{"class":51441},[254,55560,51448],{"class":264},[254,55562,55563,55565,55567],{"class":256,"line":16961},[254,55564,52558],{"class":264},[254,55566,51752],{"class":51441},[254,55568,51448],{"class":264},[254,55570,55571,55573,55575],{"class":256,"line":16967},[254,55572,52285],{"class":264},[254,55574,51954],{"class":51441},[254,55576,51448],{"class":264},[254,55578,55579,55581,55584,55586],{"class":256,"line":16972},[254,55580,11362],{"class":260},[254,55582,55583],{"class":313}," arrImage",[254,55585,13705],{"class":260},[254,55587,55588],{"class":264}," [\n",[254,55590,55591,55594,55597,55600,55603,55606,55609],{"class":256,"line":16986},[254,55592,55593],{"class":264},"      { url: ",[254,55595,55596],{"class":369},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[254,55598,55599],{"class":264},", title: ",[254,55601,55602],{"class":369},"'对人类来说会不会太超前了?'",[254,55604,55605],{"class":264},", color: ",[254,55607,55608],{"class":369},"'rgba(100,67,68)'",[254,55610,55611],{"class":264}," },\n",[254,55613,55614,55616,55619,55621,55624,55626,55629],{"class":256,"line":16991},[254,55615,55593],{"class":264},[254,55617,55618],{"class":369},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[254,55620,55599],{"class":264},[254,55622,55623],{"class":369},"'开启剑与雪的黑暗传说!'",[254,55625,55605],{"class":264},[254,55627,55628],{"class":369},"'rgba(43,35,26)'",[254,55630,55611],{"class":264},[254,55632,55633,55635,55638,55640,55643,55645,55648],{"class":256,"line":16996},[254,55634,55593],{"class":264},[254,55636,55637],{"class":369},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[254,55639,55599],{"class":264},[254,55641,55642],{"class":369},"'真正的jo厨出现了!'",[254,55644,55605],{"class":264},[254,55646,55647],{"class":369},"'rgba(36,31,33)'",[254,55649,55611],{"class":264},[254,55651,55652,55654,55657,55659,55662,55664,55667],{"class":256,"line":17010},[254,55653,55593],{"class":264},[254,55655,55656],{"class":369},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[254,55658,55599],{"class":264},[254,55660,55661],{"class":369},"'李玉刚:让世界通过b站看到东方大国文化'",[254,55663,55605],{"class":264},[254,55665,55666],{"class":369},"'rgba(139,98,66)'",[254,55668,55611],{"class":264},[254,55670,55671,55673,55676,55678,55681,55683,55686],{"class":256,"line":17022},[254,55672,55593],{"class":264},[254,55674,55675],{"class":369},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[254,55677,55599],{"class":264},[254,55679,55680],{"class":369},"'快来分享你的寒假日常吧'",[254,55682,55605],{"class":264},[254,55684,55685],{"class":369},"'rgba(67,90,92)'",[254,55687,55611],{"class":264},[254,55689,55690,55692,55695,55697,55700,55702,55705],{"class":256,"line":17027},[254,55691,55593],{"class":264},[254,55693,55694],{"class":369},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[254,55696,55599],{"class":264},[254,55698,55699],{"class":369},"'哔哩哔哩小年YEAR'",[254,55701,55605],{"class":264},[254,55703,55704],{"class":369},"'rgba(166,131,143)'",[254,55706,55611],{"class":264},[254,55708,55709,55711,55714,55716,55719,55721,55724],{"class":256,"line":17040},[254,55710,55593],{"class":264},[254,55712,55713],{"class":369},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[254,55715,55599],{"class":264},[254,55717,55718],{"class":369},"'一站式解决你的电脑配置问题'",[254,55720,55605],{"class":264},[254,55722,55723],{"class":369},"'rgba(53,29,25)'",[254,55725,55611],{"class":264},[254,55727,55728,55730,55733,55735,55738,55740,55743],{"class":256,"line":17045},[254,55729,55593],{"class":264},[254,55731,55732],{"class":369},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[254,55734,55599],{"class":264},[254,55736,55737],{"class":369},"'谁不想和小猫咪贴贴呢?'",[254,55739,55605],{"class":264},[254,55741,55742],{"class":369},"'rgba(99,72,114)'",[254,55744,55745],{"class":264}," }\n",[254,55747,55748],{"class":256,"line":17050},[254,55749,53250],{"class":264},[254,55751,55752,55754,55757,55759,55761,55763,55765,55768],{"class":256,"line":17055},[254,55753,11362],{"class":260},[254,55755,55756],{"class":313}," img",[254,55758,13705],{"class":260},[254,55760,54537],{"class":264},[254,55762,54540],{"class":2103},[254,55764,265],{"class":264},[254,55766,55767],{"class":369},"'.slider-wrapper img'",[254,55769,271],{"class":264},[254,55771,55772,55774,55776,55778,55780,55782,55784,55787],{"class":256,"line":17068},[254,55773,11362],{"class":260},[254,55775,6966],{"class":313},[254,55777,13705],{"class":260},[254,55779,54537],{"class":264},[254,55781,54540],{"class":2103},[254,55783,265],{"class":264},[254,55785,55786],{"class":369},"'.slider-footer p'",[254,55788,271],{"class":264},[254,55790,55791,55793,55796,55798,55800,55802,55804,55807],{"class":256,"line":17073},[254,55792,11362],{"class":260},[254,55794,55795],{"class":313}," color",[254,55797,13705],{"class":260},[254,55799,54537],{"class":264},[254,55801,54540],{"class":2103},[254,55803,265],{"class":264},[254,55805,55806],{"class":369},"'.slider-footer'",[254,55808,271],{"class":264},[254,55810,55811,55813,55816,55818,55820,55823,55825,55828],{"class":256,"line":32774},[254,55812,11362],{"class":260},[254,55814,55815],{"class":313}," lis",[254,55817,13705],{"class":260},[254,55819,54537],{"class":264},[254,55821,55822],{"class":2103},"querySelectorAll",[254,55824,265],{"class":264},[254,55826,55827],{"class":369},"'.slider-footer ul li'",[254,55829,271],{"class":264},[254,55831,55832,55834,55836,55838],{"class":256,"line":32780},[254,55833,52360],{"class":260},[254,55835,9579],{"class":264},[254,55837,310],{"class":260},[254,55839,55840],{"class":313}," 1\n",[254,55842,55843,55845,55848,55850,55852,55854,55856],{"class":256,"line":32786},[254,55844,52360],{"class":260},[254,55846,55847],{"class":264}," timer ",[254,55849,310],{"class":260},[254,55851,54585],{"class":2103},[254,55853,265],{"class":264},[254,55855,54590],{"class":260},[254,55857,54593],{"class":264},[254,55859,55860,55863,55865],{"class":256,"line":32792},[254,55861,55862],{"class":264},"      img.src ",[254,55864,310],{"class":260},[254,55866,55867],{"class":264}," arrImage[i].url\n",[254,55869,55870,55873,55875],{"class":256,"line":32798},[254,55871,55872],{"class":264},"      p.innerHTML ",[254,55874,310],{"class":260},[254,55876,55877],{"class":264}," arrImage[i].title\n",[254,55879,55880,55883,55885],{"class":256,"line":32809},[254,55881,55882],{"class":264},"      color.style.backgroundColor ",[254,55884,310],{"class":260},[254,55886,55887],{"class":264}," arrImage[i].color\n",[254,55889,55890],{"class":256,"line":32815},[254,55891,55892],{"class":323},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[254,55894,55895],{"class":256,"line":32835},[254,55896,55897],{"class":323},"      \u002F\u002F li.classList.add('activate')\n",[254,55899,55900],{"class":256,"line":32841},[254,55901,55902],{"class":323},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[254,55904,55905],{"class":256,"line":32852},[254,55906,55907],{"class":323},"      \u002F\u002F lis[i].classList.remove('activate')\n",[254,55909,55910,55913,55915,55917,55920,55923,55926,55928,55931],{"class":256,"line":32858},[254,55911,55912],{"class":264},"      document.",[254,55914,54540],{"class":2103},[254,55916,265],{"class":264},[254,55918,55919],{"class":369},"'.activate'",[254,55921,55922],{"class":264},")?.classList.",[254,55924,55925],{"class":2103},"toggle",[254,55927,265],{"class":264},[254,55929,55930],{"class":369},"'activate'",[254,55932,271],{"class":264},[254,55934,55935,55938,55940,55942,55944],{"class":256,"line":32864},[254,55936,55937],{"class":264},"      lis[i].classList.",[254,55939,5475],{"class":2103},[254,55941,265],{"class":264},[254,55943,55930],{"class":369},[254,55945,271],{"class":264},[254,55947,55948],{"class":256,"line":32870},[254,55949,2540],{"emptyLinePlaceholder":184},[254,55951,55952,55955,55957,55959,55961,55963,55965,55967,55970],{"class":256,"line":32876},[254,55953,55954],{"class":264},"      i ",[254,55956,310],{"class":260},[254,55958,54624],{"class":264},[254,55960,745],{"class":260},[254,55962,25259],{"class":313},[254,55964,13855],{"class":264},[254,55966,592],{"class":260},[254,55968,55969],{"class":264}," arrImage.",[254,55971,55972],{"class":313},"length\n",[254,55974,55975],{"class":256,"line":32882},[254,55976,2540],{"emptyLinePlaceholder":184},[254,55978,55979,55981,55983],{"class":256,"line":32888},[254,55980,54676],{"class":264},[254,55982,6551],{"class":313},[254,55984,271],{"class":264},[254,55986,55987,55989,55991],{"class":256,"line":32894},[254,55988,52558],{"class":264},[254,55990,51954],{"class":51441},[254,55992,51448],{"class":264},[254,55994,55995,55997,55999],{"class":256,"line":32914},[254,55996,51926],{"class":264},[254,55998,51941],{"class":51441},[254,56000,51448],{"class":264},[254,56002,56003],{"class":256,"line":32920},[254,56004,2540],{"emptyLinePlaceholder":184},[254,56006,56007,56009,56011],{"class":256,"line":32936},[254,56008,51926],{"class":264},[254,56010,50776],{"class":51441},[254,56012,51448],{"class":264},[14,56014,56015],{},[1602,56016],{"alt":174,"src":56017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[14,56019,56020],{},"?.就是短路保护,确保输出正常进行",[14,56022,56023],{},"不要忘记取余%,有时候可以用",[14,56025,56026],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[21,56028,56029],{"start":175},[24,56030,56031],{},"法2",[245,56033,56035],{"className":50774,"code":56034,"language":50776,"meta":174,"style":174},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      padding: 0;\n      margin: 0;\n    }\n\n    li {\n      list-style: none;\n    }\n\n    .box {\n      position: relative;\n      width: 976px;\n      height: 600px;\n      margin: 100px auto;\n    }\n\n    .slider-footer {\n      position: absolute;\n      left: 0;\n      bottom: 0;\n      width: 100%;\n      height: 15%;\n      background-color: skyblue;\n    }\n\n    .slider-footer p {\n      position: absolute;\n      font-size: 28px;\n      left: 20px;\n      top: 5px;\n    }\n\n    ul {\n      position: absolute;\n      top: 55px;\n      left: 20px;\n      display: flex;\n      justify-content: space-between;\n      position: absolute;\n      width: 250px;\n      height: 20px;\n    }\n\n    ul li {\n      width: 20px;\n      height: 20px;\n      background-color: rgba(0, 0, 0, .4);\n      border-radius: 10px;\n    }\n\n    .activate {\n      background-color: #f7f7f7;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"box\">\n    \u003Cdiv class=\"slider-wrapper\">\n      \u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\" alt=\"\">\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"slider-footer\">\n      \u003Cp>对人类来说会不会太超前了?\u003C\u002Fp>\n      \u003Cul>\n        \u003Cli class=\"activate\">\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n      \u003C\u002Ful>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    const sliderData = [\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了?', color: 'rgba(100,67,68)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说!', color: 'rgba(43,35,26)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了!', color: 'rgba(36,31,33)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚:让世界通过b站看到东方大国文化', color: 'rgba(139,98,66)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧', color: 'rgba(67,90,92)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAR', color: 'rgba(166,131,143)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题', color: 'rgba(53,29,25)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢?', color: 'rgba(99,72,114)' }\n    ]\n    \u002F\u002F 1.获取元素\n    const img = document.querySelector('.slider-wrapper img')\n    const p = document.querySelector('.slider-footer p')\n    let i = 0\n    \u002F\u002F 2.开启定时器\n    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n    setInterval(function () {\n      i++\n      if (i >= sliderData.length) {\n        i = 0\n      }\n      \u002F\u002F 更换图片路径\n      img.src = sliderData[i].url\n      \u002F\u002F 把文字写到p里面\n      p.innerHTML = sliderData[i].title\n      \u002F\u002F 小圆点\n      \u002F\u002F 先删除以前的active\n      \u002F\u002F 只让当前li添加active\n      document.querySelector('.slider-footer .activate').classList.remove('activate')\n      document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`).classList.add('activate')\n\n    }, 1000)\n\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[251,56036,56037,56047,56061,56065,56073,56087,56107,56119,56127,56133,56143,56153,56157,56161,56167,56177,56181,56185,56191,56201,56213,56225,56239,56243,56247,56253,56263,56273,56283,56295,56307,56317,56321,56325,56333,56343,56355,56367,56379,56383,56387,56393,56403,56415,56427,56437,56447,56457,56469,56481,56485,56489,56497,56509,56521,56547,56559,56563,56567,56573,56583,56587,56595,56603,56607,56615,56629,56643,56663,56671,56685,56697,56705,56723,56735,56747,56759,56771,56783,56795,56807,56815,56823,56831,56839,56850,56866,56882,56898,56914,56930,56946,56962,56978,56982,56987,57005,57023,57033,57038,57043,57054,57060,57075,57084,57088,57093,57102,57107,57116,57121,57126,57131,57154,57184,57188,57196,57200,57208,57216,57220],{"__ignoreMap":174},[254,56038,56039,56041,56043,56045],{"class":256,"line":257},[254,56040,51438],{"class":264},[254,56042,51442],{"class":51441},[254,56044,51445],{"class":2103},[254,56046,51448],{"class":264},[254,56048,56049,56051,56053,56055,56057,56059],{"class":256,"line":175},[254,56050,1174],{"class":264},[254,56052,50776],{"class":51441},[254,56054,51457],{"class":2103},[254,56056,310],{"class":264},[254,56058,51462],{"class":369},[254,56060,51448],{"class":264},[254,56062,56063],{"class":256,"line":1319},[254,56064,2540],{"emptyLinePlaceholder":184},[254,56066,56067,56069,56071],{"class":256,"line":1334},[254,56068,1174],{"class":264},[254,56070,51475],{"class":51441},[254,56072,51448],{"class":264},[254,56074,56075,56077,56079,56081,56083,56085],{"class":256,"line":1340},[254,56076,52285],{"class":264},[254,56078,51485],{"class":51441},[254,56080,51488],{"class":2103},[254,56082,310],{"class":264},[254,56084,51493],{"class":369},[254,56086,51448],{"class":264},[254,56088,56089,56091,56093,56095,56097,56099,56101,56103,56105],{"class":256,"line":1354},[254,56090,52285],{"class":264},[254,56092,51485],{"class":51441},[254,56094,15061],{"class":2103},[254,56096,310],{"class":264},[254,56098,51532],{"class":369},[254,56100,51512],{"class":2103},[254,56102,310],{"class":264},[254,56104,51539],{"class":369},[254,56106,51448],{"class":264},[254,56108,56109,56111,56113,56115,56117],{"class":256,"line":1360},[254,56110,52285],{"class":264},[254,56112,51548],{"class":51441},[254,56114,51551],{"class":264},[254,56116,51548],{"class":51441},[254,56118,51448],{"class":264},[254,56120,56121,56123,56125],{"class":256,"line":1451},[254,56122,52285],{"class":264},[254,56124,5267],{"class":51441},[254,56126,51448],{"class":264},[254,56128,56129,56131],{"class":256,"line":1457},[254,56130,6544],{"class":51441},[254,56132,15713],{"class":264},[254,56134,56135,56137,56139,56141],{"class":256,"line":1469},[254,56136,54836],{"class":313},[254,56138,51578],{"class":264},[254,56140,456],{"class":313},[254,56142,1430],{"class":264},[254,56144,56145,56147,56149,56151],{"class":256,"line":1752},[254,56146,54847],{"class":313},[254,56148,51578],{"class":264},[254,56150,456],{"class":313},[254,56152,1430],{"class":264},[254,56154,56155],{"class":256,"line":1757},[254,56156,2327],{"class":264},[254,56158,56159],{"class":256,"line":1763},[254,56160,2540],{"emptyLinePlaceholder":184},[254,56162,56163,56165],{"class":256,"line":1768},[254,56164,54866],{"class":51441},[254,56166,15713],{"class":264},[254,56168,56169,56171,56173,56175],{"class":256,"line":1782},[254,56170,54873],{"class":313},[254,56172,51578],{"class":264},[254,56174,54878],{"class":313},[254,56176,1430],{"class":264},[254,56178,56179],{"class":256,"line":1787},[254,56180,2327],{"class":264},[254,56182,56183],{"class":256,"line":1793},[254,56184,2540],{"emptyLinePlaceholder":184},[254,56186,56187,56189],{"class":256,"line":1814},[254,56188,54893],{"class":2103},[254,56190,15713],{"class":264},[254,56192,56193,56195,56197,56199],{"class":256,"line":1819},[254,56194,54900],{"class":313},[254,56196,51578],{"class":264},[254,56198,54905],{"class":313},[254,56200,1430],{"class":264},[254,56202,56203,56205,56207,56209,56211],{"class":256,"line":1833},[254,56204,54912],{"class":313},[254,56206,51578],{"class":264},[254,56208,54917],{"class":313},[254,56210,51633],{"class":260},[254,56212,1430],{"class":264},[254,56214,56215,56217,56219,56221,56223],{"class":256,"line":1838},[254,56216,54926],{"class":313},[254,56218,51578],{"class":264},[254,56220,1679],{"class":313},[254,56222,51633],{"class":260},[254,56224,1430],{"class":264},[254,56226,56227,56229,56231,56233,56235,56237],{"class":256,"line":1867},[254,56228,54847],{"class":313},[254,56230,51578],{"class":264},[254,56232,575],{"class":313},[254,56234,51633],{"class":260},[254,56236,51697],{"class":313},[254,56238,1430],{"class":264},[254,56240,56241],{"class":256,"line":1872},[254,56242,2327],{"class":264},[254,56244,56245],{"class":256,"line":1889},[254,56246,2540],{"emptyLinePlaceholder":184},[254,56248,56249,56251],{"class":256,"line":1894},[254,56250,54961],{"class":2103},[254,56252,15713],{"class":264},[254,56254,56255,56257,56259,56261],{"class":256,"line":1899},[254,56256,54900],{"class":313},[254,56258,51578],{"class":264},[254,56260,54972],{"class":313},[254,56262,1430],{"class":264},[254,56264,56265,56267,56269,56271],{"class":256,"line":1904},[254,56266,54979],{"class":313},[254,56268,51578],{"class":264},[254,56270,456],{"class":313},[254,56272,1430],{"class":264},[254,56274,56275,56277,56279,56281],{"class":256,"line":1918},[254,56276,54990],{"class":313},[254,56278,51578],{"class":264},[254,56280,456],{"class":313},[254,56282,1430],{"class":264},[254,56284,56285,56287,56289,56291,56293],{"class":256,"line":1923},[254,56286,54912],{"class":313},[254,56288,51578],{"class":264},[254,56290,575],{"class":313},[254,56292,592],{"class":260},[254,56294,1430],{"class":264},[254,56296,56297,56299,56301,56303,56305],{"class":256,"line":2717},[254,56298,54926],{"class":313},[254,56300,51578],{"class":264},[254,56302,839],{"class":313},[254,56304,592],{"class":260},[254,56306,1430],{"class":264},[254,56308,56309,56311,56313,56315],{"class":256,"line":2731},[254,56310,55025],{"class":313},[254,56312,51578],{"class":264},[254,56314,55030],{"class":313},[254,56316,1430],{"class":264},[254,56318,56319],{"class":256,"line":2739},[254,56320,2327],{"class":264},[254,56322,56323],{"class":256,"line":2744},[254,56324,2540],{"emptyLinePlaceholder":184},[254,56326,56327,56329,56331],{"class":256,"line":2750},[254,56328,54961],{"class":2103},[254,56330,6966],{"class":51441},[254,56332,15713],{"class":264},[254,56334,56335,56337,56339,56341],{"class":256,"line":2756},[254,56336,54900],{"class":313},[254,56338,51578],{"class":264},[254,56340,54972],{"class":313},[254,56342,1430],{"class":264},[254,56344,56345,56347,56349,56351,56353],{"class":256,"line":2761},[254,56346,55063],{"class":313},[254,56348,51578],{"class":264},[254,56350,1165],{"class":313},[254,56352,51633],{"class":260},[254,56354,1430],{"class":264},[254,56356,56357,56359,56361,56363,56365],{"class":256,"line":8089},[254,56358,54979],{"class":313},[254,56360,51578],{"class":264},[254,56362,964],{"class":313},[254,56364,51633],{"class":260},[254,56366,1430],{"class":264},[254,56368,56369,56371,56373,56375,56377],{"class":256,"line":8113},[254,56370,55088],{"class":313},[254,56372,51578],{"class":264},[254,56374,583],{"class":313},[254,56376,51633],{"class":260},[254,56378,1430],{"class":264},[254,56380,56381],{"class":256,"line":8118},[254,56382,2327],{"class":264},[254,56384,56385],{"class":256,"line":8124},[254,56386,2540],{"emptyLinePlaceholder":184},[254,56388,56389,56391],{"class":256,"line":8151},[254,56390,55109],{"class":51441},[254,56392,15713],{"class":264},[254,56394,56395,56397,56399,56401],{"class":256,"line":8156},[254,56396,54900],{"class":313},[254,56398,51578],{"class":264},[254,56400,54972],{"class":313},[254,56402,1430],{"class":264},[254,56404,56405,56407,56409,56411,56413],{"class":256,"line":8162},[254,56406,55088],{"class":313},[254,56408,51578],{"class":264},[254,56410,1045],{"class":313},[254,56412,51633],{"class":260},[254,56414,1430],{"class":264},[254,56416,56417,56419,56421,56423,56425],{"class":256,"line":8174},[254,56418,54979],{"class":313},[254,56420,51578],{"class":264},[254,56422,964],{"class":313},[254,56424,51633],{"class":260},[254,56426,1430],{"class":264},[254,56428,56429,56431,56433,56435],{"class":256,"line":8186},[254,56430,55150],{"class":313},[254,56432,51578],{"class":264},[254,56434,51618],{"class":313},[254,56436,1430],{"class":264},[254,56438,56439,56441,56443,56445],{"class":256,"line":8198},[254,56440,55161],{"class":313},[254,56442,51578],{"class":264},[254,56444,51809],{"class":313},[254,56446,1430],{"class":264},[254,56448,56449,56451,56453,56455],{"class":256,"line":9857},[254,56450,54900],{"class":313},[254,56452,51578],{"class":264},[254,56454,54972],{"class":313},[254,56456,1430],{"class":264},[254,56458,56459,56461,56463,56465,56467],{"class":256,"line":9882},[254,56460,54912],{"class":313},[254,56462,51578],{"class":264},[254,56464,4132],{"class":313},[254,56466,51633],{"class":260},[254,56468,1430],{"class":264},[254,56470,56471,56473,56475,56477,56479],{"class":256,"line":9905},[254,56472,54926],{"class":313},[254,56474,51578],{"class":264},[254,56476,964],{"class":313},[254,56478,51633],{"class":260},[254,56480,1430],{"class":264},[254,56482,56483],{"class":256,"line":9929},[254,56484,2327],{"class":264},[254,56486,56487],{"class":256,"line":9934},[254,56488,2540],{"emptyLinePlaceholder":184},[254,56490,56491,56493,56495],{"class":256,"line":9939},[254,56492,55109],{"class":51441},[254,56494,55216],{"class":51441},[254,56496,15713],{"class":264},[254,56498,56499,56501,56503,56505,56507],{"class":256,"line":9944},[254,56500,54912],{"class":313},[254,56502,51578],{"class":264},[254,56504,964],{"class":313},[254,56506,51633],{"class":260},[254,56508,1430],{"class":264},[254,56510,56511,56513,56515,56517,56519],{"class":256,"line":9953},[254,56512,54926],{"class":313},[254,56514,51578],{"class":264},[254,56516,964],{"class":313},[254,56518,51633],{"class":260},[254,56520,1430],{"class":264},[254,56522,56523,56525,56527,56529,56531,56533,56535,56537,56539,56541,56543,56545],{"class":256,"line":9958},[254,56524,55025],{"class":313},[254,56526,51578],{"class":264},[254,56528,55251],{"class":313},[254,56530,265],{"class":264},[254,56532,456],{"class":313},[254,56534,12576],{"class":264},[254,56536,456],{"class":313},[254,56538,12576],{"class":264},[254,56540,456],{"class":313},[254,56542,12576],{"class":264},[254,56544,55268],{"class":313},[254,56546,2859],{"class":264},[254,56548,56549,56551,56553,56555,56557],{"class":256,"line":9964},[254,56550,55275],{"class":313},[254,56552,51578],{"class":264},[254,56554,710],{"class":313},[254,56556,51633],{"class":260},[254,56558,1430],{"class":264},[254,56560,56561],{"class":256,"line":9985},[254,56562,2327],{"class":264},[254,56564,56565],{"class":256,"line":9991},[254,56566,2540],{"emptyLinePlaceholder":184},[254,56568,56569,56571],{"class":256,"line":10005},[254,56570,55296],{"class":2103},[254,56572,15713],{"class":264},[254,56574,56575,56577,56579,56581],{"class":256,"line":10011},[254,56576,55025],{"class":313},[254,56578,51578],{"class":264},[254,56580,55307],{"class":313},[254,56582,1430],{"class":264},[254,56584,56585],{"class":256,"line":10038},[254,56586,2327],{"class":264},[254,56588,56589,56591,56593],{"class":256,"line":10047},[254,56590,52558],{"class":264},[254,56592,5267],{"class":51441},[254,56594,51448],{"class":264},[254,56596,56597,56599,56601],{"class":256,"line":10053},[254,56598,51926],{"class":264},[254,56600,51475],{"class":51441},[254,56602,51448],{"class":264},[254,56604,56605],{"class":256,"line":10061},[254,56606,2540],{"emptyLinePlaceholder":184},[254,56608,56609,56611,56613],{"class":256,"line":10066},[254,56610,1174],{"class":264},[254,56612,51941],{"class":51441},[254,56614,51448],{"class":264},[254,56616,56617,56619,56621,56623,56625,56627],{"class":256,"line":16745},[254,56618,52285],{"class":264},[254,56620,51752],{"class":51441},[254,56622,53627],{"class":2103},[254,56624,310],{"class":264},[254,56626,53632],{"class":369},[254,56628,51448],{"class":264},[254,56630,56631,56633,56635,56637,56639,56641],{"class":256,"line":16751},[254,56632,51482],{"class":264},[254,56634,51752],{"class":51441},[254,56636,53627],{"class":2103},[254,56638,310],{"class":264},[254,56640,55368],{"class":369},[254,56642,51448],{"class":264},[254,56644,56645,56647,56649,56651,56653,56655,56657,56659,56661],{"class":256,"line":16774},[254,56646,55375],{"class":264},[254,56648,1602],{"class":51441},[254,56650,55380],{"class":2103},[254,56652,310],{"class":264},[254,56654,55385],{"class":369},[254,56656,55388],{"class":2103},[254,56658,310],{"class":264},[254,56660,7793],{"class":369},[254,56662,51448],{"class":264},[254,56664,56665,56667,56669],{"class":256,"line":16780},[254,56666,51917],{"class":264},[254,56668,51752],{"class":51441},[254,56670,51448],{"class":264},[254,56672,56673,56675,56677,56679,56681,56683],{"class":256,"line":16803},[254,56674,51482],{"class":264},[254,56676,51752],{"class":51441},[254,56678,53627],{"class":2103},[254,56680,310],{"class":264},[254,56682,55415],{"class":369},[254,56684,51448],{"class":264},[254,56686,56687,56689,56691,56693,56695],{"class":256,"line":16817},[254,56688,55375],{"class":264},[254,56690,14],{"class":51441},[254,56692,55426],{"class":264},[254,56694,14],{"class":51441},[254,56696,51448],{"class":264},[254,56698,56699,56701,56703],{"class":256,"line":16837},[254,56700,55375],{"class":264},[254,56702,1271],{"class":51441},[254,56704,51448],{"class":264},[254,56706,56707,56709,56711,56713,56715,56717,56719,56721],{"class":256,"line":16843},[254,56708,55443],{"class":264},[254,56710,24],{"class":51441},[254,56712,53627],{"class":2103},[254,56714,310],{"class":264},[254,56716,55452],{"class":369},[254,56718,55455],{"class":264},[254,56720,24],{"class":51441},[254,56722,51448],{"class":264},[254,56724,56725,56727,56729,56731,56733],{"class":256,"line":16854},[254,56726,55443],{"class":264},[254,56728,24],{"class":51441},[254,56730,55455],{"class":264},[254,56732,24],{"class":51441},[254,56734,51448],{"class":264},[254,56736,56737,56739,56741,56743,56745],{"class":256,"line":16877},[254,56738,55443],{"class":264},[254,56740,24],{"class":51441},[254,56742,55455],{"class":264},[254,56744,24],{"class":51441},[254,56746,51448],{"class":264},[254,56748,56749,56751,56753,56755,56757],{"class":256,"line":16899},[254,56750,55443],{"class":264},[254,56752,24],{"class":51441},[254,56754,55455],{"class":264},[254,56756,24],{"class":51441},[254,56758,51448],{"class":264},[254,56760,56761,56763,56765,56767,56769],{"class":256,"line":16904},[254,56762,55443],{"class":264},[254,56764,24],{"class":51441},[254,56766,55455],{"class":264},[254,56768,24],{"class":51441},[254,56770,51448],{"class":264},[254,56772,56773,56775,56777,56779,56781],{"class":256,"line":16910},[254,56774,55443],{"class":264},[254,56776,24],{"class":51441},[254,56778,55455],{"class":264},[254,56780,24],{"class":51441},[254,56782,51448],{"class":264},[254,56784,56785,56787,56789,56791,56793],{"class":256,"line":16924},[254,56786,55443],{"class":264},[254,56788,24],{"class":51441},[254,56790,55455],{"class":264},[254,56792,24],{"class":51441},[254,56794,51448],{"class":264},[254,56796,56797,56799,56801,56803,56805],{"class":256,"line":16937},[254,56798,55443],{"class":264},[254,56800,24],{"class":51441},[254,56802,55455],{"class":264},[254,56804,24],{"class":51441},[254,56806,51448],{"class":264},[254,56808,56809,56811,56813],{"class":256,"line":16942},[254,56810,55548],{"class":264},[254,56812,1271],{"class":51441},[254,56814,51448],{"class":264},[254,56816,56817,56819,56821],{"class":256,"line":16956},[254,56818,51917],{"class":264},[254,56820,51752],{"class":51441},[254,56822,51448],{"class":264},[254,56824,56825,56827,56829],{"class":256,"line":16961},[254,56826,52558],{"class":264},[254,56828,51752],{"class":51441},[254,56830,51448],{"class":264},[254,56832,56833,56835,56837],{"class":256,"line":16967},[254,56834,52285],{"class":264},[254,56836,51954],{"class":51441},[254,56838,51448],{"class":264},[254,56840,56841,56843,56846,56848],{"class":256,"line":16972},[254,56842,11362],{"class":260},[254,56844,56845],{"class":313}," sliderData",[254,56847,13705],{"class":260},[254,56849,55588],{"class":264},[254,56851,56852,56854,56856,56858,56860,56862,56864],{"class":256,"line":16986},[254,56853,55593],{"class":264},[254,56855,55596],{"class":369},[254,56857,55599],{"class":264},[254,56859,55602],{"class":369},[254,56861,55605],{"class":264},[254,56863,55608],{"class":369},[254,56865,55611],{"class":264},[254,56867,56868,56870,56872,56874,56876,56878,56880],{"class":256,"line":16991},[254,56869,55593],{"class":264},[254,56871,55618],{"class":369},[254,56873,55599],{"class":264},[254,56875,55623],{"class":369},[254,56877,55605],{"class":264},[254,56879,55628],{"class":369},[254,56881,55611],{"class":264},[254,56883,56884,56886,56888,56890,56892,56894,56896],{"class":256,"line":16996},[254,56885,55593],{"class":264},[254,56887,55637],{"class":369},[254,56889,55599],{"class":264},[254,56891,55642],{"class":369},[254,56893,55605],{"class":264},[254,56895,55647],{"class":369},[254,56897,55611],{"class":264},[254,56899,56900,56902,56904,56906,56908,56910,56912],{"class":256,"line":17010},[254,56901,55593],{"class":264},[254,56903,55656],{"class":369},[254,56905,55599],{"class":264},[254,56907,55661],{"class":369},[254,56909,55605],{"class":264},[254,56911,55666],{"class":369},[254,56913,55611],{"class":264},[254,56915,56916,56918,56920,56922,56924,56926,56928],{"class":256,"line":17022},[254,56917,55593],{"class":264},[254,56919,55675],{"class":369},[254,56921,55599],{"class":264},[254,56923,55680],{"class":369},[254,56925,55605],{"class":264},[254,56927,55685],{"class":369},[254,56929,55611],{"class":264},[254,56931,56932,56934,56936,56938,56940,56942,56944],{"class":256,"line":17027},[254,56933,55593],{"class":264},[254,56935,55694],{"class":369},[254,56937,55599],{"class":264},[254,56939,55699],{"class":369},[254,56941,55605],{"class":264},[254,56943,55704],{"class":369},[254,56945,55611],{"class":264},[254,56947,56948,56950,56952,56954,56956,56958,56960],{"class":256,"line":17040},[254,56949,55593],{"class":264},[254,56951,55713],{"class":369},[254,56953,55599],{"class":264},[254,56955,55718],{"class":369},[254,56957,55605],{"class":264},[254,56959,55723],{"class":369},[254,56961,55611],{"class":264},[254,56963,56964,56966,56968,56970,56972,56974,56976],{"class":256,"line":17045},[254,56965,55593],{"class":264},[254,56967,55732],{"class":369},[254,56969,55599],{"class":264},[254,56971,55737],{"class":369},[254,56973,55605],{"class":264},[254,56975,55742],{"class":369},[254,56977,55745],{"class":264},[254,56979,56980],{"class":256,"line":17050},[254,56981,53250],{"class":264},[254,56983,56984],{"class":256,"line":17055},[254,56985,56986],{"class":323},"    \u002F\u002F 1.获取元素\n",[254,56988,56989,56991,56993,56995,56997,56999,57001,57003],{"class":256,"line":17068},[254,56990,11362],{"class":260},[254,56992,55756],{"class":313},[254,56994,13705],{"class":260},[254,56996,54537],{"class":264},[254,56998,54540],{"class":2103},[254,57000,265],{"class":264},[254,57002,55767],{"class":369},[254,57004,271],{"class":264},[254,57006,57007,57009,57011,57013,57015,57017,57019,57021],{"class":256,"line":17073},[254,57008,11362],{"class":260},[254,57010,6966],{"class":313},[254,57012,13705],{"class":260},[254,57014,54537],{"class":264},[254,57016,54540],{"class":2103},[254,57018,265],{"class":264},[254,57020,55786],{"class":369},[254,57022,271],{"class":264},[254,57024,57025,57027,57029,57031],{"class":256,"line":32774},[254,57026,52360],{"class":260},[254,57028,9579],{"class":264},[254,57030,310],{"class":260},[254,57032,47474],{"class":313},[254,57034,57035],{"class":256,"line":32780},[254,57036,57037],{"class":323},"    \u002F\u002F 2.开启定时器\n",[254,57039,57040],{"class":256,"line":32786},[254,57041,57042],{"class":323},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[254,57044,57045,57048,57050,57052],{"class":256,"line":32792},[254,57046,57047],{"class":2103},"    setInterval",[254,57049,265],{"class":264},[254,57051,54590],{"class":260},[254,57053,54593],{"class":264},[254,57055,57056,57058],{"class":256,"line":32798},[254,57057,54598],{"class":264},[254,57059,2842],{"class":260},[254,57061,57062,57064,57066,57068,57071,57073],{"class":256,"line":32809},[254,57063,54621],{"class":260},[254,57065,54624],{"class":264},[254,57067,1850],{"class":260},[254,57069,57070],{"class":264}," sliderData.",[254,57072,52109],{"class":313},[254,57074,12583],{"class":264},[254,57076,57077,57080,57082],{"class":256,"line":32815},[254,57078,57079],{"class":264},"        i ",[254,57081,310],{"class":260},[254,57083,47474],{"class":313},[254,57085,57086],{"class":256,"line":32835},[254,57087,52539],{"class":264},[254,57089,57090],{"class":256,"line":32841},[254,57091,57092],{"class":323},"      \u002F\u002F 更换图片路径\n",[254,57094,57095,57097,57099],{"class":256,"line":32852},[254,57096,55862],{"class":264},[254,57098,310],{"class":260},[254,57100,57101],{"class":264}," sliderData[i].url\n",[254,57103,57104],{"class":256,"line":32858},[254,57105,57106],{"class":323},"      \u002F\u002F 把文字写到p里面\n",[254,57108,57109,57111,57113],{"class":256,"line":32864},[254,57110,55872],{"class":264},[254,57112,310],{"class":260},[254,57114,57115],{"class":264}," sliderData[i].title\n",[254,57117,57118],{"class":256,"line":32870},[254,57119,57120],{"class":323},"      \u002F\u002F 小圆点\n",[254,57122,57123],{"class":256,"line":32876},[254,57124,57125],{"class":323},"      \u002F\u002F 先删除以前的active\n",[254,57127,57128],{"class":256,"line":32882},[254,57129,57130],{"class":323},"      \u002F\u002F 只让当前li添加active\n",[254,57132,57133,57135,57137,57139,57142,57145,57148,57150,57152],{"class":256,"line":32888},[254,57134,55912],{"class":264},[254,57136,54540],{"class":2103},[254,57138,265],{"class":264},[254,57140,57141],{"class":369},"'.slider-footer .activate'",[254,57143,57144],{"class":264},").classList.",[254,57146,57147],{"class":2103},"remove",[254,57149,265],{"class":264},[254,57151,55930],{"class":369},[254,57153,271],{"class":264},[254,57155,57156,57158,57160,57162,57165,57167,57169,57171,57174,57176,57178,57180,57182],{"class":256,"line":32894},[254,57157,55912],{"class":264},[254,57159,54540],{"class":2103},[254,57161,265],{"class":264},[254,57163,57164],{"class":369},"`.slider-footer ul li:nth-child(${",[254,57166,705],{"class":264},[254,57168,45707],{"class":260},[254,57170,25259],{"class":313},[254,57172,57173],{"class":369},"})`",[254,57175,57144],{"class":264},[254,57177,5475],{"class":2103},[254,57179,265],{"class":264},[254,57181,55930],{"class":369},[254,57183,271],{"class":264},[254,57185,57186],{"class":256,"line":32914},[254,57187,2540],{"emptyLinePlaceholder":184},[254,57189,57190,57192,57194],{"class":256,"line":32920},[254,57191,54676],{"class":264},[254,57193,6551],{"class":313},[254,57195,271],{"class":264},[254,57197,57198],{"class":256,"line":32936},[254,57199,2540],{"emptyLinePlaceholder":184},[254,57201,57202,57204,57206],{"class":256,"line":32942},[254,57203,52558],{"class":264},[254,57205,51954],{"class":51441},[254,57207,51448],{"class":264},[254,57209,57210,57212,57214],{"class":256,"line":32956},[254,57211,51926],{"class":264},[254,57213,51941],{"class":51441},[254,57215,51448],{"class":264},[254,57217,57218],{"class":256,"line":32962},[254,57219,2540],{"emptyLinePlaceholder":184},[254,57221,57222,57224,57226],{"class":256,"line":32977},[254,57223,51926],{"class":264},[254,57225,50776],{"class":51441},[254,57227,51448],{"class":264},[225,57229,57231],{"id":57230},"_317-重要知识点","3.1.7 重要知识点",[14,57233,57234,57235],{},"浏览器在渲染文本时， ",[414,57236,57237],{},"没有空格或换行符就没有“断行点”",[14,57239,57240],{},[1602,57241],{"alt":174,"src":57242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[14,57244,57245],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[14,57247,57248],{},[1602,57249],{"alt":174,"src":57250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[14,57252,57253],{},[1602,57254],{"alt":174,"src":57255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[34,57257,57259],{"id":57258},"_32-dom事件基础","3.2 DOM事件基础",[225,57261,57263],{"id":57262},"_321-事件监听","3.2.1 事件监听",[14,57265,57266],{},[1602,57267],{"alt":174,"src":57268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[14,57270,57271],{},"事件监听有响应的发生",[14,57273,57274],{},[1602,57275],{"alt":174,"src":57276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[14,57278,57279],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[14,57281,57282],{},"对于有名函数,要执行的函数名后边不要加()",[225,57284,57286],{"id":57285},"_322-随机点名案例","3.2.2 随机点名案例",[245,57288,57290],{"className":50774,"code":57289,"language":50776,"meta":174,"style":174},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      margin: 0;\n      padding: 0;\n    }\n\n    h2 {\n      text-align: center;\n    }\n\n    .box {\n      width: 600px;\n      margin: 50px auto;\n      display: flex;\n      font-size: 25px;\n      line-height: 40px;\n    }\n\n    .qs {\n\n      width: 450px;\n      height: 40px;\n      color: red;\n\n    }\n\n    .btns {\n      text-align: center;\n    }\n\n    .btns button {\n      width: 120px;\n      height: 35px;\n      margin: 0 50px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Ch2>随机点名\u003C\u002Fh2>\n  \u003Cdiv class=\"box\">\n    \u003Cspan>名字是：\u003C\u002Fspan>\n    \u003Cdiv class=\"qs\">这里显示姓名\u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"btns\">\n    \u003Cbutton class=\"start\">开始\u003C\u002Fbutton>\n    \u003Cbutton class=\"end\">结束\u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n\n  \u003Cscript>\n    \u002F\u002F 数据数组\n    const arr = ['马超', '黄忠', '赵云', '关羽', '张飞']\n    const qs = document.querySelector('.qs')\n    \u002F\u002F 1.业务1.开始按钮模块\n    const start = document.querySelector('.start')\n    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n    let timerId = 0\n    \u002F\u002F 随机号要全局变量\n    let random = 0\n    \u002F\u002F 1.1 添加点击事件\n    start.addEventListener('click', function () {\n      timerId = setInterval(function () {\n        \u002F\u002F 随机数\n        random = parseInt(Math.random() * arr.length)\n        qs.innerHTML = arr[random]\n      }, 35)\n      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n      if (arr.length === 1) {\n        \u002F\u002F start.disabled = true\n        \u002F\u002F end.disabled = true\n        \u002F\u002F 可以合起来写\n        start.disabled = end.disabled = true\n      }\n    })\n    \u002F\u002F 1.2 关闭按钮模块\n    const end = document.querySelector('.end')\n    end.addEventListener('click', function () {\n      clearInterval(timerId)\n      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n      arr.splice(random, 1)\n    })\n\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[251,57291,57292,57302,57316,57320,57328,57342,57362,57374,57382,57388,57398,57408,57412,57416,57423,57434,57438,57442,57448,57460,57474,57484,57496,57509,57513,57517,57524,57528,57541,57553,57565,57569,57573,57577,57584,57594,57598,57602,57611,57623,57635,57650,57654,57662,57670,57674,57682,57695,57709,57722,57742,57750,57765,57785,57805,57813,57817,57825,57830,57866,57886,57891,57910,57915,57926,57931,57942,57947,57966,57981,57986,58012,58022,58031,58036,58052,58057,58062,58067,58082,58086,58090,58095,58114,58131,58139,58144,58159,58163,58167,58175,58183,58187],{"__ignoreMap":174},[254,57293,57294,57296,57298,57300],{"class":256,"line":257},[254,57295,51438],{"class":264},[254,57297,51442],{"class":51441},[254,57299,51445],{"class":2103},[254,57301,51448],{"class":264},[254,57303,57304,57306,57308,57310,57312,57314],{"class":256,"line":175},[254,57305,1174],{"class":264},[254,57307,50776],{"class":51441},[254,57309,51457],{"class":2103},[254,57311,310],{"class":264},[254,57313,51462],{"class":369},[254,57315,51448],{"class":264},[254,57317,57318],{"class":256,"line":1319},[254,57319,2540],{"emptyLinePlaceholder":184},[254,57321,57322,57324,57326],{"class":256,"line":1334},[254,57323,1174],{"class":264},[254,57325,51475],{"class":51441},[254,57327,51448],{"class":264},[254,57329,57330,57332,57334,57336,57338,57340],{"class":256,"line":1340},[254,57331,52285],{"class":264},[254,57333,51485],{"class":51441},[254,57335,51488],{"class":2103},[254,57337,310],{"class":264},[254,57339,51493],{"class":369},[254,57341,51448],{"class":264},[254,57343,57344,57346,57348,57350,57352,57354,57356,57358,57360],{"class":256,"line":1354},[254,57345,52285],{"class":264},[254,57347,51485],{"class":51441},[254,57349,15061],{"class":2103},[254,57351,310],{"class":264},[254,57353,51532],{"class":369},[254,57355,51512],{"class":2103},[254,57357,310],{"class":264},[254,57359,51539],{"class":369},[254,57361,51448],{"class":264},[254,57363,57364,57366,57368,57370,57372],{"class":256,"line":1360},[254,57365,52285],{"class":264},[254,57367,51548],{"class":51441},[254,57369,51551],{"class":264},[254,57371,51548],{"class":51441},[254,57373,51448],{"class":264},[254,57375,57376,57378,57380],{"class":256,"line":1451},[254,57377,52285],{"class":264},[254,57379,5267],{"class":51441},[254,57381,51448],{"class":264},[254,57383,57384,57386],{"class":256,"line":1457},[254,57385,6544],{"class":51441},[254,57387,15713],{"class":264},[254,57389,57390,57392,57394,57396],{"class":256,"line":1469},[254,57391,54847],{"class":313},[254,57393,51578],{"class":264},[254,57395,456],{"class":313},[254,57397,1430],{"class":264},[254,57399,57400,57402,57404,57406],{"class":256,"line":1752},[254,57401,54836],{"class":313},[254,57403,51578],{"class":264},[254,57405,456],{"class":313},[254,57407,1430],{"class":264},[254,57409,57410],{"class":256,"line":1757},[254,57411,2327],{"class":264},[254,57413,57414],{"class":256,"line":1763},[254,57415,2540],{"emptyLinePlaceholder":184},[254,57417,57418,57421],{"class":256,"line":1768},[254,57419,57420],{"class":51441},"    h2",[254,57422,15713],{"class":264},[254,57424,57425,57428,57430,57432],{"class":256,"line":1782},[254,57426,57427],{"class":313},"      text-align",[254,57429,51578],{"class":264},[254,57431,51733],{"class":313},[254,57433,1430],{"class":264},[254,57435,57436],{"class":256,"line":1787},[254,57437,2327],{"class":264},[254,57439,57440],{"class":256,"line":1793},[254,57441,2540],{"emptyLinePlaceholder":184},[254,57443,57444,57446],{"class":256,"line":1814},[254,57445,54893],{"class":2103},[254,57447,15713],{"class":264},[254,57449,57450,57452,57454,57456,57458],{"class":256,"line":1819},[254,57451,54912],{"class":313},[254,57453,51578],{"class":264},[254,57455,1679],{"class":313},[254,57457,51633],{"class":260},[254,57459,1430],{"class":264},[254,57461,57462,57464,57466,57468,57470,57472],{"class":256,"line":1833},[254,57463,54847],{"class":313},[254,57465,51578],{"class":264},[254,57467,920],{"class":313},[254,57469,51633],{"class":260},[254,57471,51697],{"class":313},[254,57473,1430],{"class":264},[254,57475,57476,57478,57480,57482],{"class":256,"line":1838},[254,57477,55150],{"class":313},[254,57479,51578],{"class":264},[254,57481,51618],{"class":313},[254,57483,1430],{"class":264},[254,57485,57486,57488,57490,57492,57494],{"class":256,"line":1867},[254,57487,55063],{"class":313},[254,57489,51578],{"class":264},[254,57491,1089],{"class":313},[254,57493,51633],{"class":260},[254,57495,1430],{"class":264},[254,57497,57498,57501,57503,57505,57507],{"class":256,"line":1872},[254,57499,57500],{"class":313},"      line-height",[254,57502,51578],{"class":264},[254,57504,665],{"class":313},[254,57506,51633],{"class":260},[254,57508,1430],{"class":264},[254,57510,57511],{"class":256,"line":1889},[254,57512,2327],{"class":264},[254,57514,57515],{"class":256,"line":1894},[254,57516,2540],{"emptyLinePlaceholder":184},[254,57518,57519,57522],{"class":256,"line":1899},[254,57520,57521],{"class":2103},"    .qs",[254,57523,15713],{"class":264},[254,57525,57526],{"class":256,"line":1904},[254,57527,2540],{"emptyLinePlaceholder":184},[254,57529,57530,57532,57534,57537,57539],{"class":256,"line":1918},[254,57531,54912],{"class":313},[254,57533,51578],{"class":264},[254,57535,57536],{"class":313},"450",[254,57538,51633],{"class":260},[254,57540,1430],{"class":264},[254,57542,57543,57545,57547,57549,57551],{"class":256,"line":1923},[254,57544,54926],{"class":313},[254,57546,51578],{"class":264},[254,57548,665],{"class":313},[254,57550,51633],{"class":260},[254,57552,1430],{"class":264},[254,57554,57555,57558,57560,57563],{"class":256,"line":2717},[254,57556,57557],{"class":313},"      color",[254,57559,51578],{"class":264},[254,57561,57562],{"class":313},"red",[254,57564,1430],{"class":264},[254,57566,57567],{"class":256,"line":2731},[254,57568,2540],{"emptyLinePlaceholder":184},[254,57570,57571],{"class":256,"line":2739},[254,57572,2327],{"class":264},[254,57574,57575],{"class":256,"line":2744},[254,57576,2540],{"emptyLinePlaceholder":184},[254,57578,57579,57582],{"class":256,"line":2750},[254,57580,57581],{"class":2103},"    .btns",[254,57583,15713],{"class":264},[254,57585,57586,57588,57590,57592],{"class":256,"line":2756},[254,57587,57427],{"class":313},[254,57589,51578],{"class":264},[254,57591,51733],{"class":313},[254,57593,1430],{"class":264},[254,57595,57596],{"class":256,"line":2761},[254,57597,2327],{"class":264},[254,57599,57600],{"class":256,"line":8089},[254,57601,2540],{"emptyLinePlaceholder":184},[254,57603,57604,57606,57609],{"class":256,"line":8113},[254,57605,57581],{"class":2103},[254,57607,57608],{"class":51441}," button",[254,57610,15713],{"class":264},[254,57612,57613,57615,57617,57619,57621],{"class":256,"line":8118},[254,57614,54912],{"class":313},[254,57616,51578],{"class":264},[254,57618,1081],{"class":313},[254,57620,51633],{"class":260},[254,57622,1430],{"class":264},[254,57624,57625,57627,57629,57631,57633],{"class":256,"line":8124},[254,57626,54926],{"class":313},[254,57628,51578],{"class":264},[254,57630,537],{"class":313},[254,57632,51633],{"class":260},[254,57634,1430],{"class":264},[254,57636,57637,57639,57641,57643,57646,57648],{"class":256,"line":8151},[254,57638,54847],{"class":313},[254,57640,51578],{"class":264},[254,57642,456],{"class":313},[254,57644,57645],{"class":313}," 50",[254,57647,51633],{"class":260},[254,57649,1430],{"class":264},[254,57651,57652],{"class":256,"line":8156},[254,57653,2327],{"class":264},[254,57655,57656,57658,57660],{"class":256,"line":8162},[254,57657,52558],{"class":264},[254,57659,5267],{"class":51441},[254,57661,51448],{"class":264},[254,57663,57664,57666,57668],{"class":256,"line":8174},[254,57665,51926],{"class":264},[254,57667,51475],{"class":51441},[254,57669,51448],{"class":264},[254,57671,57672],{"class":256,"line":8186},[254,57673,2540],{"emptyLinePlaceholder":184},[254,57675,57676,57678,57680],{"class":256,"line":8198},[254,57677,1174],{"class":264},[254,57679,51941],{"class":51441},[254,57681,51448],{"class":264},[254,57683,57684,57686,57688,57691,57693],{"class":256,"line":9857},[254,57685,52285],{"class":264},[254,57687,34],{"class":51441},[254,57689,57690],{"class":264},">随机点名\u003C\u002F",[254,57692,34],{"class":51441},[254,57694,51448],{"class":264},[254,57696,57697,57699,57701,57703,57705,57707],{"class":256,"line":9882},[254,57698,52285],{"class":264},[254,57700,51752],{"class":51441},[254,57702,53627],{"class":2103},[254,57704,310],{"class":264},[254,57706,53632],{"class":369},[254,57708,51448],{"class":264},[254,57710,57711,57713,57715,57718,57720],{"class":256,"line":9905},[254,57712,51482],{"class":264},[254,57714,254],{"class":51441},[254,57716,57717],{"class":264},">名字是：\u003C\u002F",[254,57719,254],{"class":51441},[254,57721,51448],{"class":264},[254,57723,57724,57726,57728,57730,57732,57735,57738,57740],{"class":256,"line":9929},[254,57725,51482],{"class":264},[254,57727,51752],{"class":51441},[254,57729,53627],{"class":2103},[254,57731,310],{"class":264},[254,57733,57734],{"class":369},"\"qs\"",[254,57736,57737],{"class":264},">这里显示姓名\u003C\u002F",[254,57739,51752],{"class":51441},[254,57741,51448],{"class":264},[254,57743,57744,57746,57748],{"class":256,"line":9934},[254,57745,52558],{"class":264},[254,57747,51752],{"class":51441},[254,57749,51448],{"class":264},[254,57751,57752,57754,57756,57758,57760,57763],{"class":256,"line":9939},[254,57753,52285],{"class":264},[254,57755,51752],{"class":51441},[254,57757,53627],{"class":2103},[254,57759,310],{"class":264},[254,57761,57762],{"class":369},"\"btns\"",[254,57764,51448],{"class":264},[254,57766,57767,57769,57771,57773,57775,57778,57781,57783],{"class":256,"line":9944},[254,57768,51482],{"class":264},[254,57770,54028],{"class":51441},[254,57772,53627],{"class":2103},[254,57774,310],{"class":264},[254,57776,57777],{"class":369},"\"start\"",[254,57779,57780],{"class":264},">开始\u003C\u002F",[254,57782,54028],{"class":51441},[254,57784,51448],{"class":264},[254,57786,57787,57789,57791,57793,57795,57798,57801,57803],{"class":256,"line":9953},[254,57788,51482],{"class":264},[254,57790,54028],{"class":51441},[254,57792,53627],{"class":2103},[254,57794,310],{"class":264},[254,57796,57797],{"class":369},"\"end\"",[254,57799,57800],{"class":264},">结束\u003C\u002F",[254,57802,54028],{"class":51441},[254,57804,51448],{"class":264},[254,57806,57807,57809,57811],{"class":256,"line":9958},[254,57808,52558],{"class":264},[254,57810,51752],{"class":51441},[254,57812,51448],{"class":264},[254,57814,57815],{"class":256,"line":9964},[254,57816,2540],{"emptyLinePlaceholder":184},[254,57818,57819,57821,57823],{"class":256,"line":9985},[254,57820,52285],{"class":264},[254,57822,51954],{"class":51441},[254,57824,51448],{"class":264},[254,57826,57827],{"class":256,"line":9991},[254,57828,57829],{"class":323},"    \u002F\u002F 数据数组\n",[254,57831,57832,57834,57837,57839,57841,57844,57846,57849,57851,57854,57856,57859,57861,57864],{"class":256,"line":10005},[254,57833,11362],{"class":260},[254,57835,57836],{"class":313}," arr",[254,57838,13705],{"class":260},[254,57840,52367],{"class":264},[254,57842,57843],{"class":369},"'马超'",[254,57845,12576],{"class":264},[254,57847,57848],{"class":369},"'黄忠'",[254,57850,12576],{"class":264},[254,57852,57853],{"class":369},"'赵云'",[254,57855,12576],{"class":264},[254,57857,57858],{"class":369},"'关羽'",[254,57860,12576],{"class":264},[254,57862,57863],{"class":369},"'张飞'",[254,57865,33387],{"class":264},[254,57867,57868,57870,57873,57875,57877,57879,57881,57884],{"class":256,"line":10011},[254,57869,11362],{"class":260},[254,57871,57872],{"class":313}," qs",[254,57874,13705],{"class":260},[254,57876,54537],{"class":264},[254,57878,54540],{"class":2103},[254,57880,265],{"class":264},[254,57882,57883],{"class":369},"'.qs'",[254,57885,271],{"class":264},[254,57887,57888],{"class":256,"line":10038},[254,57889,57890],{"class":323},"    \u002F\u002F 1.业务1.开始按钮模块\n",[254,57892,57893,57895,57897,57899,57901,57903,57905,57908],{"class":256,"line":10047},[254,57894,11362],{"class":260},[254,57896,4324],{"class":313},[254,57898,13705],{"class":260},[254,57900,54537],{"class":264},[254,57902,54540],{"class":2103},[254,57904,265],{"class":264},[254,57906,57907],{"class":369},"'.start'",[254,57909,271],{"class":264},[254,57911,57912],{"class":256,"line":10053},[254,57913,57914],{"class":323},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[254,57916,57917,57919,57922,57924],{"class":256,"line":10061},[254,57918,52360],{"class":260},[254,57920,57921],{"class":264}," timerId ",[254,57923,310],{"class":260},[254,57925,47474],{"class":313},[254,57927,57928],{"class":256,"line":10066},[254,57929,57930],{"class":323},"    \u002F\u002F 随机号要全局变量\n",[254,57932,57933,57935,57938,57940],{"class":256,"line":16745},[254,57934,52360],{"class":260},[254,57936,57937],{"class":264}," random ",[254,57939,310],{"class":260},[254,57941,47474],{"class":313},[254,57943,57944],{"class":256,"line":16751},[254,57945,57946],{"class":323},"    \u002F\u002F 1.1 添加点击事件\n",[254,57948,57949,57952,57955,57957,57960,57962,57964],{"class":256,"line":16774},[254,57950,57951],{"class":264},"    start.",[254,57953,57954],{"class":2103},"addEventListener",[254,57956,265],{"class":264},[254,57958,57959],{"class":369},"'click'",[254,57961,12576],{"class":264},[254,57963,54590],{"class":260},[254,57965,54593],{"class":264},[254,57967,57968,57971,57973,57975,57977,57979],{"class":256,"line":16780},[254,57969,57970],{"class":264},"      timerId ",[254,57972,310],{"class":260},[254,57974,54585],{"class":2103},[254,57976,265],{"class":264},[254,57978,54590],{"class":260},[254,57980,54593],{"class":264},[254,57982,57983],{"class":256,"line":16803},[254,57984,57985],{"class":323},"        \u002F\u002F 随机数\n",[254,57987,57988,57991,57993,57996,57999,58002,58004,58006,58008,58010],{"class":256,"line":16817},[254,57989,57990],{"class":264},"        random ",[254,57992,310],{"class":260},[254,57994,57995],{"class":2103}," parseInt",[254,57997,57998],{"class":264},"(Math.",[254,58000,58001],{"class":2103},"random",[254,58003,13191],{"class":264},[254,58005,719],{"class":260},[254,58007,52106],{"class":264},[254,58009,52109],{"class":313},[254,58011,271],{"class":264},[254,58013,58014,58017,58019],{"class":256,"line":16837},[254,58015,58016],{"class":264},"        qs.innerHTML ",[254,58018,310],{"class":260},[254,58020,58021],{"class":264}," arr[random]\n",[254,58023,58024,58027,58029],{"class":256,"line":16843},[254,58025,58026],{"class":264},"      }, ",[254,58028,537],{"class":313},[254,58030,271],{"class":264},[254,58032,58033],{"class":256,"line":16854},[254,58034,58035],{"class":323},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[254,58037,58038,58040,58043,58045,58048,58050],{"class":256,"line":16877},[254,58039,54621],{"class":260},[254,58041,58042],{"class":264}," (arr.",[254,58044,52109],{"class":313},[254,58046,58047],{"class":260}," ===",[254,58049,25259],{"class":313},[254,58051,12583],{"class":264},[254,58053,58054],{"class":256,"line":16899},[254,58055,58056],{"class":323},"        \u002F\u002F start.disabled = true\n",[254,58058,58059],{"class":256,"line":16904},[254,58060,58061],{"class":323},"        \u002F\u002F end.disabled = true\n",[254,58063,58064],{"class":256,"line":16910},[254,58065,58066],{"class":323},"        \u002F\u002F 可以合起来写\n",[254,58068,58069,58072,58074,58077,58079],{"class":256,"line":16924},[254,58070,58071],{"class":264},"        start.disabled ",[254,58073,310],{"class":260},[254,58075,58076],{"class":264}," end.disabled ",[254,58078,310],{"class":260},[254,58080,58081],{"class":313}," true\n",[254,58083,58084],{"class":256,"line":16937},[254,58085,52539],{"class":264},[254,58087,58088],{"class":256,"line":16942},[254,58089,33602],{"class":264},[254,58091,58092],{"class":256,"line":16956},[254,58093,58094],{"class":323},"    \u002F\u002F 1.2 关闭按钮模块\n",[254,58096,58097,58099,58101,58103,58105,58107,58109,58112],{"class":256,"line":16961},[254,58098,11362],{"class":260},[254,58100,4340],{"class":313},[254,58102,13705],{"class":260},[254,58104,54537],{"class":264},[254,58106,54540],{"class":2103},[254,58108,265],{"class":264},[254,58110,58111],{"class":369},"'.end'",[254,58113,271],{"class":264},[254,58115,58116,58119,58121,58123,58125,58127,58129],{"class":256,"line":16967},[254,58117,58118],{"class":264},"    end.",[254,58120,57954],{"class":2103},[254,58122,265],{"class":264},[254,58124,57959],{"class":369},[254,58126,12576],{"class":264},[254,58128,54590],{"class":260},[254,58130,54593],{"class":264},[254,58132,58133,58136],{"class":256,"line":16972},[254,58134,58135],{"class":2103},"      clearInterval",[254,58137,58138],{"class":264},"(timerId)\n",[254,58140,58141],{"class":256,"line":16986},[254,58142,58143],{"class":323},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[254,58145,58146,58149,58152,58155,58157],{"class":256,"line":16991},[254,58147,58148],{"class":264},"      arr.",[254,58150,58151],{"class":2103},"splice",[254,58153,58154],{"class":264},"(random, ",[254,58156,482],{"class":313},[254,58158,271],{"class":264},[254,58160,58161],{"class":256,"line":16996},[254,58162,33602],{"class":264},[254,58164,58165],{"class":256,"line":17010},[254,58166,2540],{"emptyLinePlaceholder":184},[254,58168,58169,58171,58173],{"class":256,"line":17022},[254,58170,52558],{"class":264},[254,58172,51954],{"class":51441},[254,58174,51448],{"class":264},[254,58176,58177,58179,58181],{"class":256,"line":17027},[254,58178,51926],{"class":264},[254,58180,51941],{"class":51441},[254,58182,51448],{"class":264},[254,58184,58185],{"class":256,"line":17040},[254,58186,2540],{"emptyLinePlaceholder":184},[254,58188,58189,58191,58193],{"class":256,"line":17045},[254,58190,51926],{"class":264},[254,58192,50776],{"class":51441},[254,58194,51448],{"class":264},[14,58196,58197],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[225,58199,58201],{"id":58200},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[245,58203,58205],{"className":50774,"code":58204,"language":50776,"meta":174,"style":174},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cbutton>点击\u003C\u002Fbutton>\n  \u003Cscript>\n    const btn = document.querySelector('button')\n    btn.addEventListener('click', function () {\n      const num = Math.random()\n      console.log(num)\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[251,58206,58207,58217,58231,58235,58243,58257,58277,58289,58297,58301,58309,58321,58329,58348,58365,58381,58391,58395,58403,58411,58415],{"__ignoreMap":174},[254,58208,58209,58211,58213,58215],{"class":256,"line":257},[254,58210,51438],{"class":264},[254,58212,51442],{"class":51441},[254,58214,51445],{"class":2103},[254,58216,51448],{"class":264},[254,58218,58219,58221,58223,58225,58227,58229],{"class":256,"line":175},[254,58220,1174],{"class":264},[254,58222,50776],{"class":51441},[254,58224,51457],{"class":2103},[254,58226,310],{"class":264},[254,58228,51462],{"class":369},[254,58230,51448],{"class":264},[254,58232,58233],{"class":256,"line":1319},[254,58234,2540],{"emptyLinePlaceholder":184},[254,58236,58237,58239,58241],{"class":256,"line":1334},[254,58238,1174],{"class":264},[254,58240,51475],{"class":51441},[254,58242,51448],{"class":264},[254,58244,58245,58247,58249,58251,58253,58255],{"class":256,"line":1340},[254,58246,52285],{"class":264},[254,58248,51485],{"class":51441},[254,58250,51488],{"class":2103},[254,58252,310],{"class":264},[254,58254,51493],{"class":369},[254,58256,51448],{"class":264},[254,58258,58259,58261,58263,58265,58267,58269,58271,58273,58275],{"class":256,"line":1354},[254,58260,52285],{"class":264},[254,58262,51485],{"class":51441},[254,58264,15061],{"class":2103},[254,58266,310],{"class":264},[254,58268,51532],{"class":369},[254,58270,51512],{"class":2103},[254,58272,310],{"class":264},[254,58274,51539],{"class":369},[254,58276,51448],{"class":264},[254,58278,58279,58281,58283,58285,58287],{"class":256,"line":1360},[254,58280,52285],{"class":264},[254,58282,51548],{"class":51441},[254,58284,51551],{"class":264},[254,58286,51548],{"class":51441},[254,58288,51448],{"class":264},[254,58290,58291,58293,58295],{"class":256,"line":1451},[254,58292,51926],{"class":264},[254,58294,51475],{"class":51441},[254,58296,51448],{"class":264},[254,58298,58299],{"class":256,"line":1457},[254,58300,2540],{"emptyLinePlaceholder":184},[254,58302,58303,58305,58307],{"class":256,"line":1469},[254,58304,1174],{"class":264},[254,58306,51941],{"class":51441},[254,58308,51448],{"class":264},[254,58310,58311,58313,58315,58317,58319],{"class":256,"line":1752},[254,58312,52285],{"class":264},[254,58314,54028],{"class":51441},[254,58316,54034],{"class":264},[254,58318,54028],{"class":51441},[254,58320,51448],{"class":264},[254,58322,58323,58325,58327],{"class":256,"line":1757},[254,58324,52285],{"class":264},[254,58326,51954],{"class":51441},[254,58328,51448],{"class":264},[254,58330,58331,58333,58335,58337,58339,58341,58343,58346],{"class":256,"line":1763},[254,58332,11362],{"class":260},[254,58334,54532],{"class":313},[254,58336,13705],{"class":260},[254,58338,54537],{"class":264},[254,58340,54540],{"class":2103},[254,58342,265],{"class":264},[254,58344,58345],{"class":369},"'button'",[254,58347,271],{"class":264},[254,58349,58350,58353,58355,58357,58359,58361,58363],{"class":256,"line":1768},[254,58351,58352],{"class":264},"    btn.",[254,58354,57954],{"class":2103},[254,58356,265],{"class":264},[254,58358,57959],{"class":369},[254,58360,12576],{"class":264},[254,58362,54590],{"class":260},[254,58364,54593],{"class":264},[254,58366,58367,58370,58372,58374,58377,58379],{"class":256,"line":1782},[254,58368,58369],{"class":260},"      const",[254,58371,2380],{"class":313},[254,58373,13705],{"class":260},[254,58375,58376],{"class":264}," Math.",[254,58378,58001],{"class":2103},[254,58380,2116],{"class":264},[254,58382,58383,58386,58389],{"class":256,"line":1787},[254,58384,58385],{"class":264},"      console.",[254,58387,58388],{"class":2103},"log",[254,58390,278],{"class":264},[254,58392,58393],{"class":256,"line":1793},[254,58394,33602],{"class":264},[254,58396,58397,58399,58401],{"class":256,"line":1814},[254,58398,52558],{"class":264},[254,58400,51954],{"class":51441},[254,58402,51448],{"class":264},[254,58404,58405,58407,58409],{"class":256,"line":1819},[254,58406,51926],{"class":264},[254,58408,51941],{"class":51441},[254,58410,51448],{"class":264},[254,58412,58413],{"class":256,"line":1833},[254,58414,2540],{"emptyLinePlaceholder":184},[254,58416,58417,58419,58421],{"class":256,"line":1838},[254,58418,51926],{"class":264},[254,58420,50776],{"class":51441},[254,58422,51448],{"class":264},[14,58424,58425],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[14,58427,58428],{},"常量不可以重新赋值",[14,58430,58431],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[245,58433,58435],{"className":50774,"code":58434,"language":50776,"meta":174,"style":174},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cbutton>点击\u003C\u002Fbutton>\n  \u003Cscript>\n    const num = 10\n    const btn = document.querySelector('button')\n    btn.addEventListener('click', function () {\n      const num = Math.random()\n      console.log(num)\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[251,58436,58437,58447,58461,58465,58473,58487,58507,58519,58527,58531,58539,58551,58559,58570,58588,58604,58618,58626,58630,58638,58646,58650],{"__ignoreMap":174},[254,58438,58439,58441,58443,58445],{"class":256,"line":257},[254,58440,51438],{"class":264},[254,58442,51442],{"class":51441},[254,58444,51445],{"class":2103},[254,58446,51448],{"class":264},[254,58448,58449,58451,58453,58455,58457,58459],{"class":256,"line":175},[254,58450,1174],{"class":264},[254,58452,50776],{"class":51441},[254,58454,51457],{"class":2103},[254,58456,310],{"class":264},[254,58458,51462],{"class":369},[254,58460,51448],{"class":264},[254,58462,58463],{"class":256,"line":1319},[254,58464,2540],{"emptyLinePlaceholder":184},[254,58466,58467,58469,58471],{"class":256,"line":1334},[254,58468,1174],{"class":264},[254,58470,51475],{"class":51441},[254,58472,51448],{"class":264},[254,58474,58475,58477,58479,58481,58483,58485],{"class":256,"line":1340},[254,58476,52285],{"class":264},[254,58478,51485],{"class":51441},[254,58480,51488],{"class":2103},[254,58482,310],{"class":264},[254,58484,51493],{"class":369},[254,58486,51448],{"class":264},[254,58488,58489,58491,58493,58495,58497,58499,58501,58503,58505],{"class":256,"line":1354},[254,58490,52285],{"class":264},[254,58492,51485],{"class":51441},[254,58494,15061],{"class":2103},[254,58496,310],{"class":264},[254,58498,51532],{"class":369},[254,58500,51512],{"class":2103},[254,58502,310],{"class":264},[254,58504,51539],{"class":369},[254,58506,51448],{"class":264},[254,58508,58509,58511,58513,58515,58517],{"class":256,"line":1360},[254,58510,52285],{"class":264},[254,58512,51548],{"class":51441},[254,58514,51551],{"class":264},[254,58516,51548],{"class":51441},[254,58518,51448],{"class":264},[254,58520,58521,58523,58525],{"class":256,"line":1451},[254,58522,51926],{"class":264},[254,58524,51475],{"class":51441},[254,58526,51448],{"class":264},[254,58528,58529],{"class":256,"line":1457},[254,58530,2540],{"emptyLinePlaceholder":184},[254,58532,58533,58535,58537],{"class":256,"line":1469},[254,58534,1174],{"class":264},[254,58536,51941],{"class":51441},[254,58538,51448],{"class":264},[254,58540,58541,58543,58545,58547,58549],{"class":256,"line":1752},[254,58542,52285],{"class":264},[254,58544,54028],{"class":51441},[254,58546,54034],{"class":264},[254,58548,54028],{"class":51441},[254,58550,51448],{"class":264},[254,58552,58553,58555,58557],{"class":256,"line":1757},[254,58554,52285],{"class":264},[254,58556,51954],{"class":51441},[254,58558,51448],{"class":264},[254,58560,58561,58563,58565,58567],{"class":256,"line":1763},[254,58562,11362],{"class":260},[254,58564,2380],{"class":313},[254,58566,13705],{"class":260},[254,58568,58569],{"class":313}," 10\n",[254,58571,58572,58574,58576,58578,58580,58582,58584,58586],{"class":256,"line":1768},[254,58573,11362],{"class":260},[254,58575,54532],{"class":313},[254,58577,13705],{"class":260},[254,58579,54537],{"class":264},[254,58581,54540],{"class":2103},[254,58583,265],{"class":264},[254,58585,58345],{"class":369},[254,58587,271],{"class":264},[254,58589,58590,58592,58594,58596,58598,58600,58602],{"class":256,"line":1782},[254,58591,58352],{"class":264},[254,58593,57954],{"class":2103},[254,58595,265],{"class":264},[254,58597,57959],{"class":369},[254,58599,12576],{"class":264},[254,58601,54590],{"class":260},[254,58603,54593],{"class":264},[254,58605,58606,58608,58610,58612,58614,58616],{"class":256,"line":1787},[254,58607,58369],{"class":260},[254,58609,2380],{"class":313},[254,58611,13705],{"class":260},[254,58613,58376],{"class":264},[254,58615,58001],{"class":2103},[254,58617,2116],{"class":264},[254,58619,58620,58622,58624],{"class":256,"line":1793},[254,58621,58385],{"class":264},[254,58623,58388],{"class":2103},[254,58625,278],{"class":264},[254,58627,58628],{"class":256,"line":1814},[254,58629,33602],{"class":264},[254,58631,58632,58634,58636],{"class":256,"line":1819},[254,58633,52558],{"class":264},[254,58635,51954],{"class":51441},[254,58637,51448],{"class":264},[254,58639,58640,58642,58644],{"class":256,"line":1833},[254,58641,51926],{"class":264},[254,58643,51941],{"class":51441},[254,58645,51448],{"class":264},[254,58647,58648],{"class":256,"line":1838},[254,58649,2540],{"emptyLinePlaceholder":184},[254,58651,58652,58654,58656],{"class":256,"line":1867},[254,58653,51926],{"class":264},[254,58655,50776],{"class":51441},[254,58657,51448],{"class":264},[14,58659,58660],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[245,58662,58664],{"className":50774,"code":58663,"language":50776,"meta":174,"style":174},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cbutton>点击\u003C\u002Fbutton>\n  \u003Cscript>\n    const num = 10\n    const btn = document.querySelector('button')\n    btn.addEventListener('click', function () {\n      num = Math.random()\n      console.log(num)\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[251,58665,58666,58676,58690,58694,58702,58716,58736,58748,58756,58760,58768,58780,58788,58798,58816,58832,58845,58853,58857,58865,58873,58877],{"__ignoreMap":174},[254,58667,58668,58670,58672,58674],{"class":256,"line":257},[254,58669,51438],{"class":264},[254,58671,51442],{"class":51441},[254,58673,51445],{"class":2103},[254,58675,51448],{"class":264},[254,58677,58678,58680,58682,58684,58686,58688],{"class":256,"line":175},[254,58679,1174],{"class":264},[254,58681,50776],{"class":51441},[254,58683,51457],{"class":2103},[254,58685,310],{"class":264},[254,58687,51462],{"class":369},[254,58689,51448],{"class":264},[254,58691,58692],{"class":256,"line":1319},[254,58693,2540],{"emptyLinePlaceholder":184},[254,58695,58696,58698,58700],{"class":256,"line":1334},[254,58697,1174],{"class":264},[254,58699,51475],{"class":51441},[254,58701,51448],{"class":264},[254,58703,58704,58706,58708,58710,58712,58714],{"class":256,"line":1340},[254,58705,52285],{"class":264},[254,58707,51485],{"class":51441},[254,58709,51488],{"class":2103},[254,58711,310],{"class":264},[254,58713,51493],{"class":369},[254,58715,51448],{"class":264},[254,58717,58718,58720,58722,58724,58726,58728,58730,58732,58734],{"class":256,"line":1354},[254,58719,52285],{"class":264},[254,58721,51485],{"class":51441},[254,58723,15061],{"class":2103},[254,58725,310],{"class":264},[254,58727,51532],{"class":369},[254,58729,51512],{"class":2103},[254,58731,310],{"class":264},[254,58733,51539],{"class":369},[254,58735,51448],{"class":264},[254,58737,58738,58740,58742,58744,58746],{"class":256,"line":1360},[254,58739,52285],{"class":264},[254,58741,51548],{"class":51441},[254,58743,51551],{"class":264},[254,58745,51548],{"class":51441},[254,58747,51448],{"class":264},[254,58749,58750,58752,58754],{"class":256,"line":1451},[254,58751,51926],{"class":264},[254,58753,51475],{"class":51441},[254,58755,51448],{"class":264},[254,58757,58758],{"class":256,"line":1457},[254,58759,2540],{"emptyLinePlaceholder":184},[254,58761,58762,58764,58766],{"class":256,"line":1469},[254,58763,1174],{"class":264},[254,58765,51941],{"class":51441},[254,58767,51448],{"class":264},[254,58769,58770,58772,58774,58776,58778],{"class":256,"line":1752},[254,58771,52285],{"class":264},[254,58773,54028],{"class":51441},[254,58775,54034],{"class":264},[254,58777,54028],{"class":51441},[254,58779,51448],{"class":264},[254,58781,58782,58784,58786],{"class":256,"line":1757},[254,58783,52285],{"class":264},[254,58785,51954],{"class":51441},[254,58787,51448],{"class":264},[254,58789,58790,58792,58794,58796],{"class":256,"line":1763},[254,58791,11362],{"class":260},[254,58793,2380],{"class":313},[254,58795,13705],{"class":260},[254,58797,58569],{"class":313},[254,58799,58800,58802,58804,58806,58808,58810,58812,58814],{"class":256,"line":1768},[254,58801,11362],{"class":260},[254,58803,54532],{"class":313},[254,58805,13705],{"class":260},[254,58807,54537],{"class":264},[254,58809,54540],{"class":2103},[254,58811,265],{"class":264},[254,58813,58345],{"class":369},[254,58815,271],{"class":264},[254,58817,58818,58820,58822,58824,58826,58828,58830],{"class":256,"line":1782},[254,58819,58352],{"class":264},[254,58821,57954],{"class":2103},[254,58823,265],{"class":264},[254,58825,57959],{"class":369},[254,58827,12576],{"class":264},[254,58829,54590],{"class":260},[254,58831,54593],{"class":264},[254,58833,58834,58837,58839,58841,58843],{"class":256,"line":1787},[254,58835,58836],{"class":264},"      num ",[254,58838,310],{"class":260},[254,58840,58376],{"class":264},[254,58842,58001],{"class":2103},[254,58844,2116],{"class":264},[254,58846,58847,58849,58851],{"class":256,"line":1793},[254,58848,58385],{"class":264},[254,58850,58388],{"class":2103},[254,58852,278],{"class":264},[254,58854,58855],{"class":256,"line":1814},[254,58856,33602],{"class":264},[254,58858,58859,58861,58863],{"class":256,"line":1819},[254,58860,52558],{"class":264},[254,58862,51954],{"class":51441},[254,58864,51448],{"class":264},[254,58866,58867,58869,58871],{"class":256,"line":1833},[254,58868,51926],{"class":264},[254,58870,51941],{"class":51441},[254,58872,51448],{"class":264},[254,58874,58875],{"class":256,"line":1838},[254,58876,2540],{"emptyLinePlaceholder":184},[254,58878,58879,58881,58883],{"class":256,"line":1867},[254,58880,51926],{"class":264},[254,58882,50776],{"class":51441},[254,58884,51448],{"class":264},[14,58886,58887],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[225,58889,58891],{"id":58890},"_324-事件监听版本","3.2.4 事件监听版本",[14,58893,58894],{},[1602,58895],{"alt":174,"src":58896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[14,58898,58899],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[14,58901,58902],{},"这种方式会覆盖前边的事件监听:",[245,58904,58906],{"className":50774,"code":58905,"language":50776,"meta":174,"style":174},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cbutton>点击\u003C\u002Fbutton>\n  \u003Cscript>\n    const btn = document.querySelector('button')\n    btn.onclick = function () {\n      alert(11)\n    }\n    btn.onclick = function () {\n      alert(22)\n    }\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[251,58907,58908,58918,58932,58936,58944,58958,58978,58990,58998,59002,59010,59022,59030,59048,59062,59073,59077,59089,59099,59103,59111,59119,59123],{"__ignoreMap":174},[254,58909,58910,58912,58914,58916],{"class":256,"line":257},[254,58911,51438],{"class":264},[254,58913,51442],{"class":51441},[254,58915,51445],{"class":2103},[254,58917,51448],{"class":264},[254,58919,58920,58922,58924,58926,58928,58930],{"class":256,"line":175},[254,58921,1174],{"class":264},[254,58923,50776],{"class":51441},[254,58925,51457],{"class":2103},[254,58927,310],{"class":264},[254,58929,51462],{"class":369},[254,58931,51448],{"class":264},[254,58933,58934],{"class":256,"line":1319},[254,58935,2540],{"emptyLinePlaceholder":184},[254,58937,58938,58940,58942],{"class":256,"line":1334},[254,58939,1174],{"class":264},[254,58941,51475],{"class":51441},[254,58943,51448],{"class":264},[254,58945,58946,58948,58950,58952,58954,58956],{"class":256,"line":1340},[254,58947,52285],{"class":264},[254,58949,51485],{"class":51441},[254,58951,51488],{"class":2103},[254,58953,310],{"class":264},[254,58955,51493],{"class":369},[254,58957,51448],{"class":264},[254,58959,58960,58962,58964,58966,58968,58970,58972,58974,58976],{"class":256,"line":1354},[254,58961,52285],{"class":264},[254,58963,51485],{"class":51441},[254,58965,15061],{"class":2103},[254,58967,310],{"class":264},[254,58969,51532],{"class":369},[254,58971,51512],{"class":2103},[254,58973,310],{"class":264},[254,58975,51539],{"class":369},[254,58977,51448],{"class":264},[254,58979,58980,58982,58984,58986,58988],{"class":256,"line":1360},[254,58981,52285],{"class":264},[254,58983,51548],{"class":51441},[254,58985,51551],{"class":264},[254,58987,51548],{"class":51441},[254,58989,51448],{"class":264},[254,58991,58992,58994,58996],{"class":256,"line":1451},[254,58993,51926],{"class":264},[254,58995,51475],{"class":51441},[254,58997,51448],{"class":264},[254,58999,59000],{"class":256,"line":1457},[254,59001,2540],{"emptyLinePlaceholder":184},[254,59003,59004,59006,59008],{"class":256,"line":1469},[254,59005,1174],{"class":264},[254,59007,51941],{"class":51441},[254,59009,51448],{"class":264},[254,59011,59012,59014,59016,59018,59020],{"class":256,"line":1752},[254,59013,52285],{"class":264},[254,59015,54028],{"class":51441},[254,59017,54034],{"class":264},[254,59019,54028],{"class":51441},[254,59021,51448],{"class":264},[254,59023,59024,59026,59028],{"class":256,"line":1757},[254,59025,52285],{"class":264},[254,59027,51954],{"class":51441},[254,59029,51448],{"class":264},[254,59031,59032,59034,59036,59038,59040,59042,59044,59046],{"class":256,"line":1763},[254,59033,11362],{"class":260},[254,59035,54532],{"class":313},[254,59037,13705],{"class":260},[254,59039,54537],{"class":264},[254,59041,54540],{"class":2103},[254,59043,265],{"class":264},[254,59045,58345],{"class":369},[254,59047,271],{"class":264},[254,59049,59050,59052,59055,59057,59060],{"class":256,"line":1768},[254,59051,58352],{"class":264},[254,59053,59054],{"class":2103},"onclick",[254,59056,13705],{"class":260},[254,59058,59059],{"class":260}," function",[254,59061,54593],{"class":264},[254,59063,59064,59067,59069,59071],{"class":256,"line":1782},[254,59065,59066],{"class":2103},"      alert",[254,59068,265],{"class":264},[254,59070,736],{"class":313},[254,59072,271],{"class":264},[254,59074,59075],{"class":256,"line":1787},[254,59076,2327],{"class":264},[254,59078,59079,59081,59083,59085,59087],{"class":256,"line":1793},[254,59080,58352],{"class":264},[254,59082,59054],{"class":2103},[254,59084,13705],{"class":260},[254,59086,59059],{"class":260},[254,59088,54593],{"class":264},[254,59090,59091,59093,59095,59097],{"class":256,"line":1814},[254,59092,59066],{"class":2103},[254,59094,265],{"class":264},[254,59096,1014],{"class":313},[254,59098,271],{"class":264},[254,59100,59101],{"class":256,"line":1819},[254,59102,2327],{"class":264},[254,59104,59105,59107,59109],{"class":256,"line":1833},[254,59106,52558],{"class":264},[254,59108,51954],{"class":51441},[254,59110,51448],{"class":264},[254,59112,59113,59115,59117],{"class":256,"line":1838},[254,59114,51926],{"class":264},[254,59116,51941],{"class":51441},[254,59118,51448],{"class":264},[254,59120,59121],{"class":256,"line":1867},[254,59122,2540],{"emptyLinePlaceholder":184},[254,59124,59125,59127,59129],{"class":256,"line":1872},[254,59126,51926],{"class":264},[254,59128,50776],{"class":51441},[254,59130,51448],{"class":264},[14,59132,59133],{},"只要点击就输出结果为22,前边11被覆盖了",[245,59135,59137],{"className":50774,"code":59136,"language":50776,"meta":174,"style":174},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[251,59138,59139,59144,59149,59153,59158,59163],{"__ignoreMap":174},[254,59140,59141],{"class":256,"line":257},[254,59142,59143],{"class":264},"  btn.addEventListener('click', function () {\n",[254,59145,59146],{"class":256,"line":175},[254,59147,59148],{"class":264},"      alert(11)\n",[254,59150,59151],{"class":256,"line":1319},[254,59152,33602],{"class":264},[254,59154,59155],{"class":256,"line":1334},[254,59156,59157],{"class":264},"    btn.addEventListener('click', function () {\n",[254,59159,59160],{"class":256,"line":1340},[254,59161,59162],{"class":264},"      alert(22)\n",[254,59164,59165],{"class":256,"line":1354},[254,59166,33602],{"class":264},[14,59168,59169],{},"点击第一次输出11,第二次点击为22",[225,59171,59173],{"id":59172},"_325-事件类型","3.2.5 事件类型",[14,59175,59176],{},[1602,59177],{"alt":174,"src":59178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[22139,59180,59182],{"id":59181},"_3251-鼠标事件","3.2.5.1 鼠标事件",[14,59184,59185],{},"补充知识:",[14,59187,59188],{},"轮播图自动播放模块,可以使用",[14,59190,59191],{},"let timerId = setInterval(function () {",[14,59193,59194],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[14,59196,59197],{},"用js方法模拟进行点击事件,click必须加()",[14,59199,59200],{},"next.click()",[14,59202,59203],{},"}, 1000)",[14,59205,59206],{},[1602,59207],{"alt":174,"src":59208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[245,59210,59212],{"className":53208,"code":59211,"language":53210,"meta":174,"style":174},"\n\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\" \u002F>\n  \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" \u002F>\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \u002F>\n  \u003Ctitle>轮播图点击切换\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      box-sizing: border-box;\n    }\n\n    .slider {\n      width: 560px;\n      height: 400px;\n      overflow: hidden;\n    }\n\n    .slider-wrapper {\n      width: 100%;\n      height: 320px;\n    }\n\n    .slider-wrapper img {\n      width: 100%;\n      height: 100%;\n      display: block;\n    }\n\n    .slider-footer {\n      height: 80px;\n      background-color: rgb(100, 67, 68);\n      padding: 12px 12px 0 12px;\n      position: relative;\n    }\n\n    .slider-footer .toggle {\n      position: absolute;\n      right: 0;\n      top: 12px;\n      display: flex;\n    }\n\n    .slider-footer .toggle button {\n      margin-right: 12px;\n      width: 28px;\n      height: 28px;\n      appearance: none;\n      border: none;\n      background: rgba(255, 255, 255, 0.1);\n      color: #fff;\n      border-radius: 4px;\n      cursor: pointer;\n    }\n\n    .slider-footer .toggle button:hover {\n      background: rgba(255, 255, 255, 0.2);\n    }\n\n    .slider-footer p {\n      margin: 0;\n      color: #fff;\n      font-size: 18px;\n      margin-bottom: 10px;\n    }\n\n    .slider-indicator {\n      margin: 0;\n      padding: 0;\n      list-style: none;\n      display: flex;\n      align-items: center;\n    }\n\n    .slider-indicator li {\n      width: 8px;\n      height: 8px;\n      margin: 4px;\n      border-radius: 50%;\n      background: #fff;\n      opacity: 0.4;\n      cursor: pointer;\n    }\n\n    .slider-indicator li.active {\n      width: 12px;\n      height: 12px;\n      opacity: 1;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"slider\">\n    \u003Cdiv class=\"slider-wrapper\">\n      \u003Cimg src=\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\" alt=\"\" \u002F>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"slider-footer\">\n      \u003Cp>对人类来说会不会太超前了？\u003C\u002Fp>\n      \u003Cul class=\"slider-indicator\">\n        \u003Cli class=\"active\">\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n      \u003C\u002Ful>\n      \u003Cdiv class=\"toggle\">\n        \u003Cbutton class=\"prev\">&lt;\u003C\u002Fbutton>\n        \u003Cbutton class=\"next\">&gt;\u003C\u002Fbutton>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    \u002F\u002F 1. 初始数据\n    const data = [\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n    ]\n    \u002F\u002F 获取元素\n    const img = document.querySelector('.slider-wrapper img')\n    const p = document.querySelector('.slider-footer p')\n    const footer = document.querySelector('.slider-footer')\n    \u002F\u002F 1. 右按钮业务\n    \u002F\u002F 1.1 获取右侧按钮 \n    const next = document.querySelector('.next')\n    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n    \u002F\u002F 1.2 注册点击事件\n\n    next.addEventListener('click', function () {\n      \u002F\u002F console.log(11)\n      i++\n      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n      \u002F\u002F if (i >= 8) {\n      \u002F\u002F   i = 0\n      \u002F\u002F }\n      i = i >= data.length ? 0 : i\n      \u002F\u002F 1.3 得到对应的对象\n      \u002F\u002F console.log(data[i])\n      \u002F\u002F 调用函数\n      toggle()\n    })\n\n    \u002F\u002F 2. 左侧按钮业务\n    \u002F\u002F 2.1 获取左侧按钮 \n    const prev = document.querySelector('.prev')\n    \u002F\u002F 1.2 注册点击事件\n    prev.addEventListener('click', function () {\n      i--\n      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n      \u002F\u002F if (i \u003C 0) {\n      \u002F\u002F   i = 7\n      \u002F\u002F }\n      i = i \u003C 0 ? data.length - 1 : i\n      \u002F\u002F 1.3 得到对应的对象\n      \u002F\u002F console.log(data[i])\n      \u002F\u002F 调用函数\n      toggle()\n    })\n\n    \u002F\u002F 声明一个渲染的函数作为复用\n    function toggle() {\n      \u002F\u002F 1.4 渲染对应的数据\n      img.src = data[i].url\n      p.innerHTML = data[i].title\n      footer.style.backgroundColor = data[i].color\n      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n      document.querySelector('.slider-indicator .active').classList.remove('active')\n      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n    }\n\n    \u002F\u002F 3. 自动播放模块\n    let timerId = setInterval(function () {\n      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n      next.click()\n    }, 1000)\n\n    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n    const slider = document.querySelector('.slider')\n    \u002F\u002F 注册事件\n    slider.addEventListener('mouseenter', function () {\n      \u002F\u002F 停止定时器\n      clearInterval(timerId)\n    })\n\n    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n    \u002F\u002F 注册事件\n    slider.addEventListener('mouseleave', function () {\n      \u002F\u002F 停止定时器\n      if (timerId) clearInterval(timerId)\n      \u002F\u002F 开启定时器\n      timerId = setInterval(function () {\n        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n        next.click()\n      }, 1000)\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[251,59213,59214,59218,59228,59242,59246,59254,59269,59289,59309,59322,59330,59335,59340,59344,59348,59353,59358,59363,59368,59372,59376,59381,59386,59391,59395,59399,59404,59408,59413,59418,59422,59426,59431,59436,59441,59446,59451,59455,59459,59464,59469,59474,59479,59484,59488,59492,59497,59502,59507,59512,59517,59522,59527,59532,59537,59542,59546,59550,59555,59560,59564,59568,59573,59578,59582,59587,59592,59596,59600,59605,59609,59614,59619,59623,59628,59632,59636,59641,59646,59651,59656,59661,59666,59671,59675,59679,59683,59688,59693,59698,59703,59707,59715,59723,59727,59735,59750,59764,59785,59793,59807,59820,59835,59854,59866,59878,59890,59902,59914,59926,59938,59946,59961,59985,60009,60017,60025,60033,60041,60046,60051,60056,60061,60066,60071,60076,60081,60086,60091,60095,60100,60105,60110,60115,60120,60125,60130,60135,60140,60144,60149,60154,60159,60164,60169,60174,60179,60184,60189,60194,60199,60204,60208,60212,60217,60222,60227,60231,60236,60241,60246,60251,60256,60260,60265,60269,60273,60277,60281,60285,60289,60294,60299,60304,60309,60314,60319,60324,60329,60334,60338,60342,60347,60352,60357,60362,60367,60371,60376,60381,60386,60391,60396,60401,60405,60409,60414,60418,60423,60427,60432,60437,60442,60447,60452,60457,60461,60469,60477,60481],{"__ignoreMap":174},[254,59215,59216],{"class":256,"line":257},[254,59217,2540],{"emptyLinePlaceholder":184},[254,59219,59220,59222,59224,59226],{"class":256,"line":175},[254,59221,51438],{"class":264},[254,59223,51442],{"class":260},[254,59225,51445],{"class":313},[254,59227,51448],{"class":264},[254,59229,59230,59232,59234,59236,59238,59240],{"class":256,"line":1319},[254,59231,1174],{"class":264},[254,59233,50776],{"class":51441},[254,59235,51457],{"class":2103},[254,59237,310],{"class":264},[254,59239,51462],{"class":369},[254,59241,51448],{"class":264},[254,59243,59244],{"class":256,"line":1334},[254,59245,2540],{"emptyLinePlaceholder":184},[254,59247,59248,59250,59252],{"class":256,"line":1340},[254,59249,1174],{"class":264},[254,59251,51475],{"class":51441},[254,59253,51448],{"class":264},[254,59255,59256,59258,59260,59262,59264,59266],{"class":256,"line":1354},[254,59257,52285],{"class":264},[254,59259,51485],{"class":51441},[254,59261,51488],{"class":2103},[254,59263,310],{"class":264},[254,59265,51493],{"class":369},[254,59267,59268],{"class":264}," \u002F>\n",[254,59270,59271,59273,59275,59277,59279,59281,59283,59285,59287],{"class":256,"line":1360},[254,59272,52285],{"class":264},[254,59274,51485],{"class":51441},[254,59276,51504],{"class":2103},[254,59278,310],{"class":264},[254,59280,51509],{"class":369},[254,59282,51512],{"class":2103},[254,59284,310],{"class":264},[254,59286,51517],{"class":369},[254,59288,59268],{"class":264},[254,59290,59291,59293,59295,59297,59299,59301,59303,59305,59307],{"class":256,"line":1451},[254,59292,52285],{"class":264},[254,59294,51485],{"class":51441},[254,59296,15061],{"class":2103},[254,59298,310],{"class":264},[254,59300,51532],{"class":369},[254,59302,51512],{"class":2103},[254,59304,310],{"class":264},[254,59306,51539],{"class":369},[254,59308,59268],{"class":264},[254,59310,59311,59313,59315,59318,59320],{"class":256,"line":1457},[254,59312,52285],{"class":264},[254,59314,51548],{"class":51441},[254,59316,59317],{"class":264},">轮播图点击切换\u003C\u002F",[254,59319,51548],{"class":51441},[254,59321,51448],{"class":264},[254,59323,59324,59326,59328],{"class":256,"line":1469},[254,59325,52285],{"class":264},[254,59327,5267],{"class":51441},[254,59329,51448],{"class":264},[254,59331,59332],{"class":256,"line":1752},[254,59333,59334],{"class":264},"    * {\n",[254,59336,59337],{"class":256,"line":1757},[254,59338,59339],{"class":264},"      box-sizing: border-box;\n",[254,59341,59342],{"class":256,"line":1763},[254,59343,2327],{"class":264},[254,59345,59346],{"class":256,"line":1768},[254,59347,2540],{"emptyLinePlaceholder":184},[254,59349,59350],{"class":256,"line":1782},[254,59351,59352],{"class":264},"    .slider {\n",[254,59354,59355],{"class":256,"line":1787},[254,59356,59357],{"class":264},"      width: 560px;\n",[254,59359,59360],{"class":256,"line":1793},[254,59361,59362],{"class":264},"      height: 400px;\n",[254,59364,59365],{"class":256,"line":1814},[254,59366,59367],{"class":264},"      overflow: hidden;\n",[254,59369,59370],{"class":256,"line":1819},[254,59371,2327],{"class":264},[254,59373,59374],{"class":256,"line":1833},[254,59375,2540],{"emptyLinePlaceholder":184},[254,59377,59378],{"class":256,"line":1838},[254,59379,59380],{"class":264},"    .slider-wrapper {\n",[254,59382,59383],{"class":256,"line":1867},[254,59384,59385],{"class":264},"      width: 100%;\n",[254,59387,59388],{"class":256,"line":1872},[254,59389,59390],{"class":264},"      height: 320px;\n",[254,59392,59393],{"class":256,"line":1889},[254,59394,2327],{"class":264},[254,59396,59397],{"class":256,"line":1894},[254,59398,2540],{"emptyLinePlaceholder":184},[254,59400,59401],{"class":256,"line":1899},[254,59402,59403],{"class":264},"    .slider-wrapper img {\n",[254,59405,59406],{"class":256,"line":1904},[254,59407,59385],{"class":264},[254,59409,59410],{"class":256,"line":1918},[254,59411,59412],{"class":264},"      height: 100%;\n",[254,59414,59415],{"class":256,"line":1923},[254,59416,59417],{"class":264},"      display: block;\n",[254,59419,59420],{"class":256,"line":2717},[254,59421,2327],{"class":264},[254,59423,59424],{"class":256,"line":2731},[254,59425,2540],{"emptyLinePlaceholder":184},[254,59427,59428],{"class":256,"line":2739},[254,59429,59430],{"class":264},"    .slider-footer {\n",[254,59432,59433],{"class":256,"line":2744},[254,59434,59435],{"class":264},"      height: 80px;\n",[254,59437,59438],{"class":256,"line":2750},[254,59439,59440],{"class":264},"      background-color: rgb(100, 67, 68);\n",[254,59442,59443],{"class":256,"line":2756},[254,59444,59445],{"class":264},"      padding: 12px 12px 0 12px;\n",[254,59447,59448],{"class":256,"line":2761},[254,59449,59450],{"class":264},"      position: relative;\n",[254,59452,59453],{"class":256,"line":8089},[254,59454,2327],{"class":264},[254,59456,59457],{"class":256,"line":8113},[254,59458,2540],{"emptyLinePlaceholder":184},[254,59460,59461],{"class":256,"line":8118},[254,59462,59463],{"class":264},"    .slider-footer .toggle {\n",[254,59465,59466],{"class":256,"line":8124},[254,59467,59468],{"class":264},"      position: absolute;\n",[254,59470,59471],{"class":256,"line":8151},[254,59472,59473],{"class":264},"      right: 0;\n",[254,59475,59476],{"class":256,"line":8156},[254,59477,59478],{"class":264},"      top: 12px;\n",[254,59480,59481],{"class":256,"line":8162},[254,59482,59483],{"class":264},"      display: flex;\n",[254,59485,59486],{"class":256,"line":8174},[254,59487,2327],{"class":264},[254,59489,59490],{"class":256,"line":8186},[254,59491,2540],{"emptyLinePlaceholder":184},[254,59493,59494],{"class":256,"line":8198},[254,59495,59496],{"class":264},"    .slider-footer .toggle button {\n",[254,59498,59499],{"class":256,"line":9857},[254,59500,59501],{"class":264},"      margin-right: 12px;\n",[254,59503,59504],{"class":256,"line":9882},[254,59505,59506],{"class":264},"      width: 28px;\n",[254,59508,59509],{"class":256,"line":9905},[254,59510,59511],{"class":264},"      height: 28px;\n",[254,59513,59514],{"class":256,"line":9929},[254,59515,59516],{"class":264},"      appearance: none;\n",[254,59518,59519],{"class":256,"line":9934},[254,59520,59521],{"class":264},"      border: none;\n",[254,59523,59524],{"class":256,"line":9939},[254,59525,59526],{"class":264},"      background: rgba(255, 255, 255, 0.1);\n",[254,59528,59529],{"class":256,"line":9944},[254,59530,59531],{"class":264},"      color: #fff;\n",[254,59533,59534],{"class":256,"line":9953},[254,59535,59536],{"class":264},"      border-radius: 4px;\n",[254,59538,59539],{"class":256,"line":9958},[254,59540,59541],{"class":264},"      cursor: pointer;\n",[254,59543,59544],{"class":256,"line":9964},[254,59545,2327],{"class":264},[254,59547,59548],{"class":256,"line":9985},[254,59549,2540],{"emptyLinePlaceholder":184},[254,59551,59552],{"class":256,"line":9991},[254,59553,59554],{"class":264},"    .slider-footer .toggle button:hover {\n",[254,59556,59557],{"class":256,"line":10005},[254,59558,59559],{"class":264},"      background: rgba(255, 255, 255, 0.2);\n",[254,59561,59562],{"class":256,"line":10011},[254,59563,2327],{"class":264},[254,59565,59566],{"class":256,"line":10038},[254,59567,2540],{"emptyLinePlaceholder":184},[254,59569,59570],{"class":256,"line":10047},[254,59571,59572],{"class":264},"    .slider-footer p {\n",[254,59574,59575],{"class":256,"line":10053},[254,59576,59577],{"class":264},"      margin: 0;\n",[254,59579,59580],{"class":256,"line":10061},[254,59581,59531],{"class":264},[254,59583,59584],{"class":256,"line":10066},[254,59585,59586],{"class":264},"      font-size: 18px;\n",[254,59588,59589],{"class":256,"line":16745},[254,59590,59591],{"class":264},"      margin-bottom: 10px;\n",[254,59593,59594],{"class":256,"line":16751},[254,59595,2327],{"class":264},[254,59597,59598],{"class":256,"line":16774},[254,59599,2540],{"emptyLinePlaceholder":184},[254,59601,59602],{"class":256,"line":16780},[254,59603,59604],{"class":264},"    .slider-indicator {\n",[254,59606,59607],{"class":256,"line":16803},[254,59608,59577],{"class":264},[254,59610,59611],{"class":256,"line":16817},[254,59612,59613],{"class":264},"      padding: 0;\n",[254,59615,59616],{"class":256,"line":16837},[254,59617,59618],{"class":264},"      list-style: none;\n",[254,59620,59621],{"class":256,"line":16843},[254,59622,59483],{"class":264},[254,59624,59625],{"class":256,"line":16854},[254,59626,59627],{"class":264},"      align-items: center;\n",[254,59629,59630],{"class":256,"line":16877},[254,59631,2327],{"class":264},[254,59633,59634],{"class":256,"line":16899},[254,59635,2540],{"emptyLinePlaceholder":184},[254,59637,59638],{"class":256,"line":16904},[254,59639,59640],{"class":264},"    .slider-indicator li {\n",[254,59642,59643],{"class":256,"line":16910},[254,59644,59645],{"class":264},"      width: 8px;\n",[254,59647,59648],{"class":256,"line":16924},[254,59649,59650],{"class":264},"      height: 8px;\n",[254,59652,59653],{"class":256,"line":16937},[254,59654,59655],{"class":264},"      margin: 4px;\n",[254,59657,59658],{"class":256,"line":16942},[254,59659,59660],{"class":264},"      border-radius: 50%;\n",[254,59662,59663],{"class":256,"line":16956},[254,59664,59665],{"class":264},"      background: #fff;\n",[254,59667,59668],{"class":256,"line":16961},[254,59669,59670],{"class":264},"      opacity: 0.4;\n",[254,59672,59673],{"class":256,"line":16967},[254,59674,59541],{"class":264},[254,59676,59677],{"class":256,"line":16972},[254,59678,2327],{"class":264},[254,59680,59681],{"class":256,"line":16986},[254,59682,2540],{"emptyLinePlaceholder":184},[254,59684,59685],{"class":256,"line":16991},[254,59686,59687],{"class":264},"    .slider-indicator li.active {\n",[254,59689,59690],{"class":256,"line":16996},[254,59691,59692],{"class":264},"      width: 12px;\n",[254,59694,59695],{"class":256,"line":17010},[254,59696,59697],{"class":264},"      height: 12px;\n",[254,59699,59700],{"class":256,"line":17022},[254,59701,59702],{"class":264},"      opacity: 1;\n",[254,59704,59705],{"class":256,"line":17027},[254,59706,2327],{"class":264},[254,59708,59709,59711,59713],{"class":256,"line":17040},[254,59710,52558],{"class":264},[254,59712,5267],{"class":51441},[254,59714,51448],{"class":264},[254,59716,59717,59719,59721],{"class":256,"line":17045},[254,59718,51926],{"class":264},[254,59720,51475],{"class":51441},[254,59722,51448],{"class":264},[254,59724,59725],{"class":256,"line":17050},[254,59726,2540],{"emptyLinePlaceholder":184},[254,59728,59729,59731,59733],{"class":256,"line":17055},[254,59730,1174],{"class":264},[254,59732,51941],{"class":51441},[254,59734,51448],{"class":264},[254,59736,59737,59739,59741,59743,59745,59748],{"class":256,"line":17068},[254,59738,52285],{"class":264},[254,59740,51752],{"class":51441},[254,59742,53627],{"class":2103},[254,59744,310],{"class":264},[254,59746,59747],{"class":369},"\"slider\"",[254,59749,51448],{"class":264},[254,59751,59752,59754,59756,59758,59760,59762],{"class":256,"line":17073},[254,59753,51482],{"class":264},[254,59755,51752],{"class":51441},[254,59757,53627],{"class":2103},[254,59759,310],{"class":264},[254,59761,55368],{"class":369},[254,59763,51448],{"class":264},[254,59765,59766,59768,59770,59772,59774,59777,59779,59781,59783],{"class":256,"line":32774},[254,59767,55375],{"class":264},[254,59769,1602],{"class":51441},[254,59771,55380],{"class":2103},[254,59773,310],{"class":264},[254,59775,59776],{"class":369},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[254,59778,55388],{"class":2103},[254,59780,310],{"class":264},[254,59782,7793],{"class":369},[254,59784,59268],{"class":264},[254,59786,59787,59789,59791],{"class":256,"line":32780},[254,59788,51917],{"class":264},[254,59790,51752],{"class":51441},[254,59792,51448],{"class":264},[254,59794,59795,59797,59799,59801,59803,59805],{"class":256,"line":32786},[254,59796,51482],{"class":264},[254,59798,51752],{"class":51441},[254,59800,53627],{"class":2103},[254,59802,310],{"class":264},[254,59804,55415],{"class":369},[254,59806,51448],{"class":264},[254,59808,59809,59811,59813,59816,59818],{"class":256,"line":32792},[254,59810,55375],{"class":264},[254,59812,14],{"class":51441},[254,59814,59815],{"class":264},">对人类来说会不会太超前了？\u003C\u002F",[254,59817,14],{"class":51441},[254,59819,51448],{"class":264},[254,59821,59822,59824,59826,59828,59830,59833],{"class":256,"line":32798},[254,59823,55375],{"class":264},[254,59825,1271],{"class":51441},[254,59827,53627],{"class":2103},[254,59829,310],{"class":264},[254,59831,59832],{"class":369},"\"slider-indicator\"",[254,59834,51448],{"class":264},[254,59836,59837,59839,59841,59843,59845,59848,59850,59852],{"class":256,"line":32809},[254,59838,55443],{"class":264},[254,59840,24],{"class":51441},[254,59842,53627],{"class":2103},[254,59844,310],{"class":264},[254,59846,59847],{"class":369},"\"active\"",[254,59849,55455],{"class":264},[254,59851,24],{"class":51441},[254,59853,51448],{"class":264},[254,59855,59856,59858,59860,59862,59864],{"class":256,"line":32815},[254,59857,55443],{"class":264},[254,59859,24],{"class":51441},[254,59861,55455],{"class":264},[254,59863,24],{"class":51441},[254,59865,51448],{"class":264},[254,59867,59868,59870,59872,59874,59876],{"class":256,"line":32835},[254,59869,55443],{"class":264},[254,59871,24],{"class":51441},[254,59873,55455],{"class":264},[254,59875,24],{"class":51441},[254,59877,51448],{"class":264},[254,59879,59880,59882,59884,59886,59888],{"class":256,"line":32841},[254,59881,55443],{"class":264},[254,59883,24],{"class":51441},[254,59885,55455],{"class":264},[254,59887,24],{"class":51441},[254,59889,51448],{"class":264},[254,59891,59892,59894,59896,59898,59900],{"class":256,"line":32852},[254,59893,55443],{"class":264},[254,59895,24],{"class":51441},[254,59897,55455],{"class":264},[254,59899,24],{"class":51441},[254,59901,51448],{"class":264},[254,59903,59904,59906,59908,59910,59912],{"class":256,"line":32858},[254,59905,55443],{"class":264},[254,59907,24],{"class":51441},[254,59909,55455],{"class":264},[254,59911,24],{"class":51441},[254,59913,51448],{"class":264},[254,59915,59916,59918,59920,59922,59924],{"class":256,"line":32864},[254,59917,55443],{"class":264},[254,59919,24],{"class":51441},[254,59921,55455],{"class":264},[254,59923,24],{"class":51441},[254,59925,51448],{"class":264},[254,59927,59928,59930,59932,59934,59936],{"class":256,"line":32870},[254,59929,55443],{"class":264},[254,59931,24],{"class":51441},[254,59933,55455],{"class":264},[254,59935,24],{"class":51441},[254,59937,51448],{"class":264},[254,59939,59940,59942,59944],{"class":256,"line":32876},[254,59941,55548],{"class":264},[254,59943,1271],{"class":51441},[254,59945,51448],{"class":264},[254,59947,59948,59950,59952,59954,59956,59959],{"class":256,"line":32882},[254,59949,55375],{"class":264},[254,59951,51752],{"class":51441},[254,59953,53627],{"class":2103},[254,59955,310],{"class":264},[254,59957,59958],{"class":369},"\"toggle\"",[254,59960,51448],{"class":264},[254,59962,59963,59965,59967,59969,59971,59974,59976,59979,59981,59983],{"class":256,"line":32888},[254,59964,55443],{"class":264},[254,59966,54028],{"class":51441},[254,59968,53627],{"class":2103},[254,59970,310],{"class":264},[254,59972,59973],{"class":369},"\"prev\"",[254,59975,1224],{"class":264},[254,59977,59978],{"class":313},"&lt;",[254,59980,51926],{"class":264},[254,59982,54028],{"class":51441},[254,59984,51448],{"class":264},[254,59986,59987,59989,59991,59993,59995,59998,60000,60003,60005,60007],{"class":256,"line":32894},[254,59988,55443],{"class":264},[254,59990,54028],{"class":51441},[254,59992,53627],{"class":2103},[254,59994,310],{"class":264},[254,59996,59997],{"class":369},"\"next\"",[254,59999,1224],{"class":264},[254,60001,60002],{"class":313},"&gt;",[254,60004,51926],{"class":264},[254,60006,54028],{"class":51441},[254,60008,51448],{"class":264},[254,60010,60011,60013,60015],{"class":256,"line":32914},[254,60012,55548],{"class":264},[254,60014,51752],{"class":51441},[254,60016,51448],{"class":264},[254,60018,60019,60021,60023],{"class":256,"line":32920},[254,60020,51917],{"class":264},[254,60022,51752],{"class":51441},[254,60024,51448],{"class":264},[254,60026,60027,60029,60031],{"class":256,"line":32936},[254,60028,52558],{"class":264},[254,60030,51752],{"class":51441},[254,60032,51448],{"class":264},[254,60034,60035,60037,60039],{"class":256,"line":32942},[254,60036,52285],{"class":264},[254,60038,51954],{"class":51441},[254,60040,51448],{"class":264},[254,60042,60043],{"class":256,"line":32956},[254,60044,60045],{"class":264},"    \u002F\u002F 1. 初始数据\n",[254,60047,60048],{"class":256,"line":32962},[254,60049,60050],{"class":264},"    const data = [\n",[254,60052,60053],{"class":256,"line":32977},[254,60054,60055],{"class":264},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[254,60057,60058],{"class":256,"line":32983},[254,60059,60060],{"class":264},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[254,60062,60063],{"class":256,"line":32992},[254,60064,60065],{"class":264},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[254,60067,60068],{"class":256,"line":32998},[254,60069,60070],{"class":264},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[254,60072,60073],{"class":256,"line":33007},[254,60074,60075],{"class":264},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[254,60077,60078],{"class":256,"line":33013},[254,60079,60080],{"class":264},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[254,60082,60083],{"class":256,"line":33019},[254,60084,60085],{"class":264},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[254,60087,60088],{"class":256,"line":33028},[254,60089,60090],{"class":264},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[254,60092,60093],{"class":256,"line":33034},[254,60094,53250],{"class":264},[254,60096,60097],{"class":256,"line":33045},[254,60098,60099],{"class":264},"    \u002F\u002F 获取元素\n",[254,60101,60102],{"class":256,"line":33051},[254,60103,60104],{"class":264},"    const img = document.querySelector('.slider-wrapper img')\n",[254,60106,60107],{"class":256,"line":33070},[254,60108,60109],{"class":264},"    const p = document.querySelector('.slider-footer p')\n",[254,60111,60112],{"class":256,"line":33076},[254,60113,60114],{"class":264},"    const footer = document.querySelector('.slider-footer')\n",[254,60116,60117],{"class":256,"line":33087},[254,60118,60119],{"class":264},"    \u002F\u002F 1. 右按钮业务\n",[254,60121,60122],{"class":256,"line":33093},[254,60123,60124],{"class":264},"    \u002F\u002F 1.1 获取右侧按钮 \n",[254,60126,60127],{"class":256,"line":33113},[254,60128,60129],{"class":264},"    const next = document.querySelector('.next')\n",[254,60131,60132],{"class":256,"line":33129},[254,60133,60134],{"class":264},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[254,60136,60137],{"class":256,"line":33135},[254,60138,60139],{"class":264},"    \u002F\u002F 1.2 注册点击事件\n",[254,60141,60142],{"class":256,"line":33149},[254,60143,2540],{"emptyLinePlaceholder":184},[254,60145,60146],{"class":256,"line":33155},[254,60147,60148],{"class":264},"    next.addEventListener('click', function () {\n",[254,60150,60151],{"class":256,"line":33161},[254,60152,60153],{"class":264},"      \u002F\u002F console.log(11)\n",[254,60155,60156],{"class":256,"line":33172},[254,60157,60158],{"class":264},"      i++\n",[254,60160,60161],{"class":256,"line":33178},[254,60162,60163],{"class":264},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[254,60165,60166],{"class":256,"line":33184},[254,60167,60168],{"class":264},"      \u002F\u002F if (i >= 8) {\n",[254,60170,60171],{"class":256,"line":33194},[254,60172,60173],{"class":264},"      \u002F\u002F   i = 0\n",[254,60175,60176],{"class":256,"line":33200},[254,60177,60178],{"class":264},"      \u002F\u002F }\n",[254,60180,60181],{"class":256,"line":33211},[254,60182,60183],{"class":264},"      i = i >= data.length ? 0 : i\n",[254,60185,60186],{"class":256,"line":33217},[254,60187,60188],{"class":264},"      \u002F\u002F 1.3 得到对应的对象\n",[254,60190,60191],{"class":256,"line":33227},[254,60192,60193],{"class":264},"      \u002F\u002F console.log(data[i])\n",[254,60195,60196],{"class":256,"line":33232},[254,60197,60198],{"class":264},"      \u002F\u002F 调用函数\n",[254,60200,60201],{"class":256,"line":33238},[254,60202,60203],{"class":264},"      toggle()\n",[254,60205,60206],{"class":256,"line":33287},[254,60207,33602],{"class":264},[254,60209,60210],{"class":256,"line":33334},[254,60211,2540],{"emptyLinePlaceholder":184},[254,60213,60214],{"class":256,"line":33339},[254,60215,60216],{"class":264},"    \u002F\u002F 2. 左侧按钮业务\n",[254,60218,60219],{"class":256,"line":33345},[254,60220,60221],{"class":264},"    \u002F\u002F 2.1 获取左侧按钮 \n",[254,60223,60224],{"class":256,"line":33364},[254,60225,60226],{"class":264},"    const prev = document.querySelector('.prev')\n",[254,60228,60229],{"class":256,"line":33370},[254,60230,60139],{"class":264},[254,60232,60233],{"class":256,"line":33390},[254,60234,60235],{"class":264},"    prev.addEventListener('click', function () {\n",[254,60237,60238],{"class":256,"line":33396},[254,60239,60240],{"class":264},"      i--\n",[254,60242,60243],{"class":256,"line":33402},[254,60244,60245],{"class":264},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[254,60247,60248],{"class":256,"line":33412},[254,60249,60250],{"class":264},"      \u002F\u002F if (i \u003C 0) {\n",[254,60252,60253],{"class":256,"line":33417},[254,60254,60255],{"class":264},"      \u002F\u002F   i = 7\n",[254,60257,60258],{"class":256,"line":33423},[254,60259,60178],{"class":264},[254,60261,60262],{"class":256,"line":33439},[254,60263,60264],{"class":264},"      i = i \u003C 0 ? data.length - 1 : i\n",[254,60266,60267],{"class":256,"line":33484},[254,60268,60188],{"class":264},[254,60270,60271],{"class":256,"line":33490},[254,60272,60193],{"class":264},[254,60274,60275],{"class":256,"line":33496},[254,60276,60198],{"class":264},[254,60278,60279],{"class":256,"line":33502},[254,60280,60203],{"class":264},[254,60282,60283],{"class":256,"line":33513},[254,60284,33602],{"class":264},[254,60286,60287],{"class":256,"line":33519},[254,60288,2540],{"emptyLinePlaceholder":184},[254,60290,60291],{"class":256,"line":33525},[254,60292,60293],{"class":264},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[254,60295,60296],{"class":256,"line":33531},[254,60297,60298],{"class":264},"    function toggle() {\n",[254,60300,60301],{"class":256,"line":33549},[254,60302,60303],{"class":264},"      \u002F\u002F 1.4 渲染对应的数据\n",[254,60305,60306],{"class":256,"line":33563},[254,60307,60308],{"class":264},"      img.src = data[i].url\n",[254,60310,60311],{"class":256,"line":33572},[254,60312,60313],{"class":264},"      p.innerHTML = data[i].title\n",[254,60315,60316],{"class":256,"line":33581},[254,60317,60318],{"class":264},"      footer.style.backgroundColor = data[i].color\n",[254,60320,60321],{"class":256,"line":33590},[254,60322,60323],{"class":264},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[254,60325,60326],{"class":256,"line":33599},[254,60327,60328],{"class":264},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[254,60330,60331],{"class":256,"line":33605},[254,60332,60333],{"class":264},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[254,60335,60336],{"class":256,"line":33611},[254,60337,2327],{"class":264},[254,60339,60340],{"class":256,"line":33619},[254,60341,2540],{"emptyLinePlaceholder":184},[254,60343,60344],{"class":256,"line":33624},[254,60345,60346],{"class":264},"    \u002F\u002F 3. 自动播放模块\n",[254,60348,60349],{"class":256,"line":33630},[254,60350,60351],{"class":264},"    let timerId = setInterval(function () {\n",[254,60353,60354],{"class":256,"line":33641},[254,60355,60356],{"class":264},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[254,60358,60359],{"class":256,"line":33647},[254,60360,60361],{"class":264},"      next.click()\n",[254,60363,60364],{"class":256,"line":33667},[254,60365,60366],{"class":264},"    }, 1000)\n",[254,60368,60369],{"class":256,"line":33673},[254,60370,2540],{"emptyLinePlaceholder":184},[254,60372,60373],{"class":256,"line":33679},[254,60374,60375],{"class":264},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[254,60377,60378],{"class":256,"line":33685},[254,60379,60380],{"class":264},"    const slider = document.querySelector('.slider')\n",[254,60382,60383],{"class":256,"line":33702},[254,60384,60385],{"class":264},"    \u002F\u002F 注册事件\n",[254,60387,60388],{"class":256,"line":33708},[254,60389,60390],{"class":264},"    slider.addEventListener('mouseenter', function () {\n",[254,60392,60393],{"class":256,"line":33714},[254,60394,60395],{"class":264},"      \u002F\u002F 停止定时器\n",[254,60397,60398],{"class":256,"line":33720},[254,60399,60400],{"class":264},"      clearInterval(timerId)\n",[254,60402,60403],{"class":256,"line":33726},[254,60404,33602],{"class":264},[254,60406,60407],{"class":256,"line":33732},[254,60408,2540],{"emptyLinePlaceholder":184},[254,60410,60411],{"class":256,"line":33759},[254,60412,60413],{"class":264},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[254,60415,60416],{"class":256,"line":33783},[254,60417,60385],{"class":264},[254,60419,60420],{"class":256,"line":33789},[254,60421,60422],{"class":264},"    slider.addEventListener('mouseleave', function () {\n",[254,60424,60425],{"class":256,"line":33795},[254,60426,60395],{"class":264},[254,60428,60429],{"class":256,"line":33801},[254,60430,60431],{"class":264},"      if (timerId) clearInterval(timerId)\n",[254,60433,60434],{"class":256,"line":33812},[254,60435,60436],{"class":264},"      \u002F\u002F 开启定时器\n",[254,60438,60439],{"class":256,"line":33823},[254,60440,60441],{"class":264},"      timerId = setInterval(function () {\n",[254,60443,60444],{"class":256,"line":33829},[254,60445,60446],{"class":264},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[254,60448,60449],{"class":256,"line":33846},[254,60450,60451],{"class":264},"        next.click()\n",[254,60453,60454],{"class":256,"line":33869},[254,60455,60456],{"class":264},"      }, 1000)\n",[254,60458,60459],{"class":256,"line":33892},[254,60460,33602],{"class":264},[254,60462,60463,60465,60467],{"class":256,"line":33898},[254,60464,52558],{"class":264},[254,60466,51954],{"class":51441},[254,60468,51448],{"class":264},[254,60470,60471,60473,60475],{"class":256,"line":33903},[254,60472,51926],{"class":264},[254,60474,51941],{"class":51441},[254,60476,51448],{"class":264},[254,60478,60479],{"class":256,"line":33912},[254,60480,2540],{"emptyLinePlaceholder":184},[254,60482,60483,60485,60487],{"class":256,"line":33922},[254,60484,51926],{"class":264},[254,60486,50776],{"class":51441},[254,60488,51448],{"class":264},[22139,60490,60492],{"id":60491},"_3252-焦点事件","3.2.5.2 焦点事件",[14,60494,60495],{},"小米搜索框案例：",[245,60497,60499],{"className":50774,"code":60498,"language":50776,"meta":174,"style":174},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n    \u003Cmeta charset=\"UTF-8\">\n    \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    \u003Ctitle>Document\u003C\u002Ftitle>\n    \u003Cstyle>\n        * {\n            margin: 0;\n            padding: 0;\n            box-sizing: border-box;\n        }\n\n        ul {\n\n            list-style: none;\n        }\n\n        .mi {\n            position: relative;\n            width: 223px;\n            margin: 100px auto;\n        }\n\n        .mi input {\n            width: 223px;\n            height: 48px;\n            padding: 0 10px;\n            font-size: 14px;\n            line-height: 48px;\n            border: 1px solid #e0e0e0;\n            outline: none;\n        }\n\n        .mi .search {\n            border: 1px solid #ff6700;\n        }\n\n        .result-list {\n            display: none;\n            position: absolute;\n            left: 0;\n            top: 48px;\n            width: 223px;\n            border: 1px solid #ff6700;\n            border-top: 0;\n            background: #fff;\n        }\n\n        .result-list a {\n            display: block;\n            padding: 6px 15px;\n            font-size: 12px;\n            color: #424242;\n            text-decoration: none;\n        }\n\n        .result-list a:hover {\n            background-color: #eee;\n        }\n    \u003C\u002Fstyle>\n\n\u003C\u002Fhead>\n\n\u003Cbody>\n    \u003Cdiv class=\"mi\">\n        \u003Cinput type=\"search\" placeholder=\"小米笔记本\">\n        \u003Cul class=\"result-list\">\n            \u003Cli>\u003Ca href=\"#\">全部商品\u003C\u002Fa>\u003C\u002Fli>\n            \u003Cli>\u003Ca href=\"#\">小米11\u003C\u002Fa>\u003C\u002Fli>\n            \u003Cli>\u003Ca href=\"#\">小米10S\u003C\u002Fa>\u003C\u002Fli>\n            \u003Cli>\u003Ca href=\"#\">小米笔记本\u003C\u002Fa>\u003C\u002Fli>\n            \u003Cli>\u003Ca href=\"#\">小米手机\u003C\u002Fa>\u003C\u002Fli>\n            \u003Cli>\u003Ca href=\"#\">黑鲨4\u003C\u002Fa>\u003C\u002Fli>\n            \u003Cli>\u003Ca href=\"#\">空调\u003C\u002Fa>\u003C\u002Fli>\n        \u003C\u002Ful>\n    \u003C\u002Fdiv>\n    \u003Cscript>\n        \u002F\u002F 1. 获取元素\n        const input = document.querySelector('[type=search]')\n        const ul = document.querySelector('.result-list')\n        \u002F\u002F console.log(input)\n        \u002F\u002F 2. 监听事件 获得焦点\n        input.addEventListener('focus', function () {\n            \u002F\u002F ul显示\n            ul.style.display = 'block'\n            \u002F\u002F 添加一个带有颜色边框的类名\n            input.classList.add('search')\n        })\n        \u002F\u002F 3. 监听事件 失去焦点\n        input.addEventListener('blur', function () {\n            ul.style.display = 'none'\n            input.classList.remove('search')\n        })\n    \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[251,60500,60501,60511,60525,60529,60537,60551,60571,60591,60603,60611,60617,60627,60637,60649,60653,60657,60664,60668,60679,60683,60687,60694,60705,60718,60732,60736,60740,60749,60761,60773,60787,60800,60813,60831,60842,60846,60850,60859,60876,60880,60884,60891,60901,60911,60922,60935,60947,60963,60974,60986,60990,60994,61002,61013,61030,61042,61054,61065,61069,61073,61084,61095,61099,61107,61111,61119,61123,61131,61146,61169,61184,61215,61242,61269,61296,61323,61350,61377,61386,61394,61402,61407,61427,61447,61452,61457,61475,61480,61490,61495,61509,61514,61519,61536,61545,61557,61561,61569,61577,61581],{"__ignoreMap":174},[254,60502,60503,60505,60507,60509],{"class":256,"line":257},[254,60504,51438],{"class":264},[254,60506,51442],{"class":51441},[254,60508,51445],{"class":2103},[254,60510,51448],{"class":264},[254,60512,60513,60515,60517,60519,60521,60523],{"class":256,"line":175},[254,60514,1174],{"class":264},[254,60516,50776],{"class":51441},[254,60518,51457],{"class":2103},[254,60520,310],{"class":264},[254,60522,51462],{"class":369},[254,60524,51448],{"class":264},[254,60526,60527],{"class":256,"line":1319},[254,60528,2540],{"emptyLinePlaceholder":184},[254,60530,60531,60533,60535],{"class":256,"line":1334},[254,60532,1174],{"class":264},[254,60534,51475],{"class":51441},[254,60536,51448],{"class":264},[254,60538,60539,60541,60543,60545,60547,60549],{"class":256,"line":1340},[254,60540,51482],{"class":264},[254,60542,51485],{"class":51441},[254,60544,51488],{"class":2103},[254,60546,310],{"class":264},[254,60548,51493],{"class":369},[254,60550,51448],{"class":264},[254,60552,60553,60555,60557,60559,60561,60563,60565,60567,60569],{"class":256,"line":1354},[254,60554,51482],{"class":264},[254,60556,51485],{"class":51441},[254,60558,51504],{"class":2103},[254,60560,310],{"class":264},[254,60562,51509],{"class":369},[254,60564,51512],{"class":2103},[254,60566,310],{"class":264},[254,60568,51517],{"class":369},[254,60570,51448],{"class":264},[254,60572,60573,60575,60577,60579,60581,60583,60585,60587,60589],{"class":256,"line":1360},[254,60574,51482],{"class":264},[254,60576,51485],{"class":51441},[254,60578,15061],{"class":2103},[254,60580,310],{"class":264},[254,60582,51532],{"class":369},[254,60584,51512],{"class":2103},[254,60586,310],{"class":264},[254,60588,51539],{"class":369},[254,60590,51448],{"class":264},[254,60592,60593,60595,60597,60599,60601],{"class":256,"line":1451},[254,60594,51482],{"class":264},[254,60596,51548],{"class":51441},[254,60598,51551],{"class":264},[254,60600,51548],{"class":51441},[254,60602,51448],{"class":264},[254,60604,60605,60607,60609],{"class":256,"line":1457},[254,60606,51482],{"class":264},[254,60608,5267],{"class":51441},[254,60610,51448],{"class":264},[254,60612,60613,60615],{"class":256,"line":1469},[254,60614,51568],{"class":51441},[254,60616,15713],{"class":264},[254,60618,60619,60621,60623,60625],{"class":256,"line":1752},[254,60620,51575],{"class":313},[254,60622,51578],{"class":264},[254,60624,456],{"class":313},[254,60626,1430],{"class":264},[254,60628,60629,60631,60633,60635],{"class":256,"line":1757},[254,60630,51587],{"class":313},[254,60632,51578],{"class":264},[254,60634,456],{"class":313},[254,60636,1430],{"class":264},[254,60638,60639,60642,60644,60647],{"class":256,"line":1763},[254,60640,60641],{"class":313},"            box-sizing",[254,60643,51578],{"class":264},[254,60645,60646],{"class":313},"border-box",[254,60648,1430],{"class":264},[254,60650,60651],{"class":256,"line":1768},[254,60652,2669],{"class":264},[254,60654,60655],{"class":256,"line":1782},[254,60656,2540],{"emptyLinePlaceholder":184},[254,60658,60659,60662],{"class":256,"line":1787},[254,60660,60661],{"class":51441},"        ul",[254,60663,15713],{"class":264},[254,60665,60666],{"class":256,"line":1793},[254,60667,2540],{"emptyLinePlaceholder":184},[254,60669,60670,60673,60675,60677],{"class":256,"line":1814},[254,60671,60672],{"class":313},"            list-style",[254,60674,51578],{"class":264},[254,60676,54878],{"class":313},[254,60678,1430],{"class":264},[254,60680,60681],{"class":256,"line":1819},[254,60682,2669],{"class":264},[254,60684,60685],{"class":256,"line":1833},[254,60686,2540],{"emptyLinePlaceholder":184},[254,60688,60689,60692],{"class":256,"line":1838},[254,60690,60691],{"class":2103},"        .mi",[254,60693,15713],{"class":264},[254,60695,60696,60699,60701,60703],{"class":256,"line":1867},[254,60697,60698],{"class":313},"            position",[254,60700,51578],{"class":264},[254,60702,54905],{"class":313},[254,60704,1430],{"class":264},[254,60706,60707,60709,60711,60714,60716],{"class":256,"line":1872},[254,60708,51625],{"class":313},[254,60710,51578],{"class":264},[254,60712,60713],{"class":313},"223",[254,60715,51633],{"class":260},[254,60717,1430],{"class":264},[254,60719,60720,60722,60724,60726,60728,60730],{"class":256,"line":1889},[254,60721,51575],{"class":313},[254,60723,51578],{"class":264},[254,60725,575],{"class":313},[254,60727,51633],{"class":260},[254,60729,51697],{"class":313},[254,60731,1430],{"class":264},[254,60733,60734],{"class":256,"line":1894},[254,60735,2669],{"class":264},[254,60737,60738],{"class":256,"line":1899},[254,60739,2540],{"emptyLinePlaceholder":184},[254,60741,60742,60744,60747],{"class":256,"line":1904},[254,60743,60691],{"class":2103},[254,60745,60746],{"class":51441}," input",[254,60748,15713],{"class":264},[254,60750,60751,60753,60755,60757,60759],{"class":256,"line":1918},[254,60752,51625],{"class":313},[254,60754,51578],{"class":264},[254,60756,60713],{"class":313},[254,60758,51633],{"class":260},[254,60760,1430],{"class":264},[254,60762,60763,60765,60767,60769,60771],{"class":256,"line":1923},[254,60764,51640],{"class":313},[254,60766,51578],{"class":264},[254,60768,871],{"class":313},[254,60770,51633],{"class":260},[254,60772,1430],{"class":264},[254,60774,60775,60777,60779,60781,60783,60785],{"class":256,"line":2717},[254,60776,51587],{"class":313},[254,60778,51578],{"class":264},[254,60780,456],{"class":313},[254,60782,2178],{"class":313},[254,60784,51633],{"class":260},[254,60786,1430],{"class":264},[254,60788,60789,60792,60794,60796,60798],{"class":256,"line":2731},[254,60790,60791],{"class":313},"            font-size",[254,60793,51578],{"class":264},[254,60795,813],{"class":313},[254,60797,51633],{"class":260},[254,60799,1430],{"class":264},[254,60801,60802,60805,60807,60809,60811],{"class":256,"line":2739},[254,60803,60804],{"class":313},"            line-height",[254,60806,51578],{"class":264},[254,60808,871],{"class":313},[254,60810,51633],{"class":260},[254,60812,1430],{"class":264},[254,60814,60815,60818,60820,60822,60824,60826,60829],{"class":256,"line":2744},[254,60816,60817],{"class":313},"            border",[254,60819,51578],{"class":264},[254,60821,482],{"class":313},[254,60823,51633],{"class":260},[254,60825,51662],{"class":313},[254,60827,60828],{"class":313}," #e0e0e0",[254,60830,1430],{"class":264},[254,60832,60833,60836,60838,60840],{"class":256,"line":2750},[254,60834,60835],{"class":313},"            outline",[254,60837,51578],{"class":264},[254,60839,54878],{"class":313},[254,60841,1430],{"class":264},[254,60843,60844],{"class":256,"line":2756},[254,60845,2669],{"class":264},[254,60847,60848],{"class":256,"line":2761},[254,60849,2540],{"emptyLinePlaceholder":184},[254,60851,60852,60854,60857],{"class":256,"line":8089},[254,60853,60691],{"class":2103},[254,60855,60856],{"class":2103}," .search",[254,60858,15713],{"class":264},[254,60860,60861,60863,60865,60867,60869,60871,60874],{"class":256,"line":8113},[254,60862,60817],{"class":313},[254,60864,51578],{"class":264},[254,60866,482],{"class":313},[254,60868,51633],{"class":260},[254,60870,51662],{"class":313},[254,60872,60873],{"class":313}," #ff6700",[254,60875,1430],{"class":264},[254,60877,60878],{"class":256,"line":8118},[254,60879,2669],{"class":264},[254,60881,60882],{"class":256,"line":8124},[254,60883,2540],{"emptyLinePlaceholder":184},[254,60885,60886,60889],{"class":256,"line":8151},[254,60887,60888],{"class":2103},"        .result-list",[254,60890,15713],{"class":264},[254,60892,60893,60895,60897,60899],{"class":256,"line":8156},[254,60894,51613],{"class":313},[254,60896,51578],{"class":264},[254,60898,54878],{"class":313},[254,60900,1430],{"class":264},[254,60902,60903,60905,60907,60909],{"class":256,"line":8162},[254,60904,60698],{"class":313},[254,60906,51578],{"class":264},[254,60908,54972],{"class":313},[254,60910,1430],{"class":264},[254,60912,60913,60916,60918,60920],{"class":256,"line":8174},[254,60914,60915],{"class":313},"            left",[254,60917,51578],{"class":264},[254,60919,456],{"class":313},[254,60921,1430],{"class":264},[254,60923,60924,60927,60929,60931,60933],{"class":256,"line":8186},[254,60925,60926],{"class":313},"            top",[254,60928,51578],{"class":264},[254,60930,871],{"class":313},[254,60932,51633],{"class":260},[254,60934,1430],{"class":264},[254,60936,60937,60939,60941,60943,60945],{"class":256,"line":8198},[254,60938,51625],{"class":313},[254,60940,51578],{"class":264},[254,60942,60713],{"class":313},[254,60944,51633],{"class":260},[254,60946,1430],{"class":264},[254,60948,60949,60951,60953,60955,60957,60959,60961],{"class":256,"line":9857},[254,60950,60817],{"class":313},[254,60952,51578],{"class":264},[254,60954,482],{"class":313},[254,60956,51633],{"class":260},[254,60958,51662],{"class":313},[254,60960,60873],{"class":313},[254,60962,1430],{"class":264},[254,60964,60965,60968,60970,60972],{"class":256,"line":9882},[254,60966,60967],{"class":313},"            border-top",[254,60969,51578],{"class":264},[254,60971,456],{"class":313},[254,60973,1430],{"class":264},[254,60975,60976,60979,60981,60984],{"class":256,"line":9905},[254,60977,60978],{"class":313},"            background",[254,60980,51578],{"class":264},[254,60982,60983],{"class":313},"#fff",[254,60985,1430],{"class":264},[254,60987,60988],{"class":256,"line":9929},[254,60989,2669],{"class":264},[254,60991,60992],{"class":256,"line":9934},[254,60993,2540],{"emptyLinePlaceholder":184},[254,60995,60996,60998,61000],{"class":256,"line":9939},[254,60997,60888],{"class":2103},[254,60999,1538],{"class":51441},[254,61001,15713],{"class":264},[254,61003,61004,61006,61008,61011],{"class":256,"line":9944},[254,61005,51613],{"class":313},[254,61007,51578],{"class":264},[254,61009,61010],{"class":313},"block",[254,61012,1430],{"class":264},[254,61014,61015,61017,61019,61021,61023,61026,61028],{"class":256,"line":9953},[254,61016,51587],{"class":313},[254,61018,51578],{"class":264},[254,61020,608],{"class":313},[254,61022,51633],{"class":260},[254,61024,61025],{"class":313}," 15",[254,61027,51633],{"class":260},[254,61029,1430],{"class":264},[254,61031,61032,61034,61036,61038,61040],{"class":256,"line":9958},[254,61033,60791],{"class":313},[254,61035,51578],{"class":264},[254,61037,762],{"class":313},[254,61039,51633],{"class":260},[254,61041,1430],{"class":264},[254,61043,61044,61047,61049,61052],{"class":256,"line":9964},[254,61045,61046],{"class":313},"            color",[254,61048,51578],{"class":264},[254,61050,61051],{"class":313},"#424242",[254,61053,1430],{"class":264},[254,61055,61056,61059,61061,61063],{"class":256,"line":9985},[254,61057,61058],{"class":313},"            text-decoration",[254,61060,51578],{"class":264},[254,61062,54878],{"class":313},[254,61064,1430],{"class":264},[254,61066,61067],{"class":256,"line":9991},[254,61068,2669],{"class":264},[254,61070,61071],{"class":256,"line":10005},[254,61072,2540],{"emptyLinePlaceholder":184},[254,61074,61075,61077,61079,61082],{"class":256,"line":10011},[254,61076,60888],{"class":2103},[254,61078,1538],{"class":51441},[254,61080,61081],{"class":2103},":hover",[254,61083,15713],{"class":264},[254,61085,61086,61088,61090,61093],{"class":256,"line":10038},[254,61087,51781],{"class":313},[254,61089,51578],{"class":264},[254,61091,61092],{"class":313},"#eee",[254,61094,1430],{"class":264},[254,61096,61097],{"class":256,"line":10047},[254,61098,2669],{"class":264},[254,61100,61101,61103,61105],{"class":256,"line":10053},[254,61102,51917],{"class":264},[254,61104,5267],{"class":51441},[254,61106,51448],{"class":264},[254,61108,61109],{"class":256,"line":10061},[254,61110,2540],{"emptyLinePlaceholder":184},[254,61112,61113,61115,61117],{"class":256,"line":10066},[254,61114,51926],{"class":264},[254,61116,51475],{"class":51441},[254,61118,51448],{"class":264},[254,61120,61121],{"class":256,"line":16745},[254,61122,2540],{"emptyLinePlaceholder":184},[254,61124,61125,61127,61129],{"class":256,"line":16751},[254,61126,1174],{"class":264},[254,61128,51941],{"class":51441},[254,61130,51448],{"class":264},[254,61132,61133,61135,61137,61139,61141,61144],{"class":256,"line":16774},[254,61134,51482],{"class":264},[254,61136,51752],{"class":51441},[254,61138,53627],{"class":2103},[254,61140,310],{"class":264},[254,61142,61143],{"class":369},"\"mi\"",[254,61145,51448],{"class":264},[254,61147,61148,61150,61152,61154,61156,61159,61162,61164,61167],{"class":256,"line":16780},[254,61149,55443],{"class":264},[254,61151,53962],{"class":51441},[254,61153,53965],{"class":2103},[254,61155,310],{"class":264},[254,61157,61158],{"class":369},"\"search\"",[254,61160,61161],{"class":2103}," placeholder",[254,61163,310],{"class":264},[254,61165,61166],{"class":369},"\"小米笔记本\"",[254,61168,51448],{"class":264},[254,61170,61171,61173,61175,61177,61179,61182],{"class":256,"line":16803},[254,61172,55443],{"class":264},[254,61174,1271],{"class":51441},[254,61176,53627],{"class":2103},[254,61178,310],{"class":264},[254,61180,61181],{"class":369},"\"result-list\"",[254,61183,51448],{"class":264},[254,61185,61186,61189,61191,61194,61196,61199,61201,61204,61207,61209,61211,61213],{"class":256,"line":16817},[254,61187,61188],{"class":264},"            \u003C",[254,61190,24],{"class":51441},[254,61192,61193],{"class":264},">\u003C",[254,61195,42],{"class":51441},[254,61197,61198],{"class":2103}," href",[254,61200,310],{"class":264},[254,61202,61203],{"class":369},"\"#\"",[254,61205,61206],{"class":264},">全部商品\u003C\u002F",[254,61208,42],{"class":51441},[254,61210,55455],{"class":264},[254,61212,24],{"class":51441},[254,61214,51448],{"class":264},[254,61216,61217,61219,61221,61223,61225,61227,61229,61231,61234,61236,61238,61240],{"class":256,"line":16837},[254,61218,61188],{"class":264},[254,61220,24],{"class":51441},[254,61222,61193],{"class":264},[254,61224,42],{"class":51441},[254,61226,61198],{"class":2103},[254,61228,310],{"class":264},[254,61230,61203],{"class":369},[254,61232,61233],{"class":264},">小米11\u003C\u002F",[254,61235,42],{"class":51441},[254,61237,55455],{"class":264},[254,61239,24],{"class":51441},[254,61241,51448],{"class":264},[254,61243,61244,61246,61248,61250,61252,61254,61256,61258,61261,61263,61265,61267],{"class":256,"line":16843},[254,61245,61188],{"class":264},[254,61247,24],{"class":51441},[254,61249,61193],{"class":264},[254,61251,42],{"class":51441},[254,61253,61198],{"class":2103},[254,61255,310],{"class":264},[254,61257,61203],{"class":369},[254,61259,61260],{"class":264},">小米10S\u003C\u002F",[254,61262,42],{"class":51441},[254,61264,55455],{"class":264},[254,61266,24],{"class":51441},[254,61268,51448],{"class":264},[254,61270,61271,61273,61275,61277,61279,61281,61283,61285,61288,61290,61292,61294],{"class":256,"line":16854},[254,61272,61188],{"class":264},[254,61274,24],{"class":51441},[254,61276,61193],{"class":264},[254,61278,42],{"class":51441},[254,61280,61198],{"class":2103},[254,61282,310],{"class":264},[254,61284,61203],{"class":369},[254,61286,61287],{"class":264},">小米笔记本\u003C\u002F",[254,61289,42],{"class":51441},[254,61291,55455],{"class":264},[254,61293,24],{"class":51441},[254,61295,51448],{"class":264},[254,61297,61298,61300,61302,61304,61306,61308,61310,61312,61315,61317,61319,61321],{"class":256,"line":16877},[254,61299,61188],{"class":264},[254,61301,24],{"class":51441},[254,61303,61193],{"class":264},[254,61305,42],{"class":51441},[254,61307,61198],{"class":2103},[254,61309,310],{"class":264},[254,61311,61203],{"class":369},[254,61313,61314],{"class":264},">小米手机\u003C\u002F",[254,61316,42],{"class":51441},[254,61318,55455],{"class":264},[254,61320,24],{"class":51441},[254,61322,51448],{"class":264},[254,61324,61325,61327,61329,61331,61333,61335,61337,61339,61342,61344,61346,61348],{"class":256,"line":16899},[254,61326,61188],{"class":264},[254,61328,24],{"class":51441},[254,61330,61193],{"class":264},[254,61332,42],{"class":51441},[254,61334,61198],{"class":2103},[254,61336,310],{"class":264},[254,61338,61203],{"class":369},[254,61340,61341],{"class":264},">黑鲨4\u003C\u002F",[254,61343,42],{"class":51441},[254,61345,55455],{"class":264},[254,61347,24],{"class":51441},[254,61349,51448],{"class":264},[254,61351,61352,61354,61356,61358,61360,61362,61364,61366,61369,61371,61373,61375],{"class":256,"line":16904},[254,61353,61188],{"class":264},[254,61355,24],{"class":51441},[254,61357,61193],{"class":264},[254,61359,42],{"class":51441},[254,61361,61198],{"class":2103},[254,61363,310],{"class":264},[254,61365,61203],{"class":369},[254,61367,61368],{"class":264},">空调\u003C\u002F",[254,61370,42],{"class":51441},[254,61372,55455],{"class":264},[254,61374,24],{"class":51441},[254,61376,51448],{"class":264},[254,61378,61379,61382,61384],{"class":256,"line":16910},[254,61380,61381],{"class":264},"        \u003C\u002F",[254,61383,1271],{"class":51441},[254,61385,51448],{"class":264},[254,61387,61388,61390,61392],{"class":256,"line":16924},[254,61389,51917],{"class":264},[254,61391,51752],{"class":51441},[254,61393,51448],{"class":264},[254,61395,61396,61398,61400],{"class":256,"line":16937},[254,61397,51482],{"class":264},[254,61399,51954],{"class":51441},[254,61401,51448],{"class":264},[254,61403,61404],{"class":256,"line":16942},[254,61405,61406],{"class":323},"        \u002F\u002F 1. 获取元素\n",[254,61408,61409,61412,61414,61416,61418,61420,61422,61425],{"class":256,"line":16956},[254,61410,61411],{"class":260},"        const",[254,61413,60746],{"class":313},[254,61415,13705],{"class":260},[254,61417,54537],{"class":264},[254,61419,54540],{"class":2103},[254,61421,265],{"class":264},[254,61423,61424],{"class":369},"'[type=search]'",[254,61426,271],{"class":264},[254,61428,61429,61431,61434,61436,61438,61440,61442,61445],{"class":256,"line":16961},[254,61430,61411],{"class":260},[254,61432,61433],{"class":313}," ul",[254,61435,13705],{"class":260},[254,61437,54537],{"class":264},[254,61439,54540],{"class":2103},[254,61441,265],{"class":264},[254,61443,61444],{"class":369},"'.result-list'",[254,61446,271],{"class":264},[254,61448,61449],{"class":256,"line":16967},[254,61450,61451],{"class":323},"        \u002F\u002F console.log(input)\n",[254,61453,61454],{"class":256,"line":16972},[254,61455,61456],{"class":323},"        \u002F\u002F 2. 监听事件 获得焦点\n",[254,61458,61459,61462,61464,61466,61469,61471,61473],{"class":256,"line":16986},[254,61460,61461],{"class":264},"        input.",[254,61463,57954],{"class":2103},[254,61465,265],{"class":264},[254,61467,61468],{"class":369},"'focus'",[254,61470,12576],{"class":264},[254,61472,54590],{"class":260},[254,61474,54593],{"class":264},[254,61476,61477],{"class":256,"line":16991},[254,61478,61479],{"class":323},"            \u002F\u002F ul显示\n",[254,61481,61482,61485,61487],{"class":256,"line":16996},[254,61483,61484],{"class":264},"            ul.style.display ",[254,61486,310],{"class":260},[254,61488,61489],{"class":369}," 'block'\n",[254,61491,61492],{"class":256,"line":17010},[254,61493,61494],{"class":323},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[254,61496,61497,61500,61502,61504,61507],{"class":256,"line":17022},[254,61498,61499],{"class":264},"            input.classList.",[254,61501,5475],{"class":2103},[254,61503,265],{"class":264},[254,61505,61506],{"class":369},"'search'",[254,61508,271],{"class":264},[254,61510,61511],{"class":256,"line":17027},[254,61512,61513],{"class":264},"        })\n",[254,61515,61516],{"class":256,"line":17040},[254,61517,61518],{"class":323},"        \u002F\u002F 3. 监听事件 失去焦点\n",[254,61520,61521,61523,61525,61527,61530,61532,61534],{"class":256,"line":17045},[254,61522,61461],{"class":264},[254,61524,57954],{"class":2103},[254,61526,265],{"class":264},[254,61528,61529],{"class":369},"'blur'",[254,61531,12576],{"class":264},[254,61533,54590],{"class":260},[254,61535,54593],{"class":264},[254,61537,61538,61540,61542],{"class":256,"line":17050},[254,61539,61484],{"class":264},[254,61541,310],{"class":260},[254,61543,61544],{"class":369}," 'none'\n",[254,61546,61547,61549,61551,61553,61555],{"class":256,"line":17055},[254,61548,61499],{"class":264},[254,61550,57147],{"class":2103},[254,61552,265],{"class":264},[254,61554,61506],{"class":369},[254,61556,271],{"class":264},[254,61558,61559],{"class":256,"line":17068},[254,61560,61513],{"class":264},[254,61562,61563,61565,61567],{"class":256,"line":17073},[254,61564,51917],{"class":264},[254,61566,51954],{"class":51441},[254,61568,51448],{"class":264},[254,61570,61571,61573,61575],{"class":256,"line":32774},[254,61572,51926],{"class":264},[254,61574,51941],{"class":51441},[254,61576,51448],{"class":264},[254,61578,61579],{"class":256,"line":32780},[254,61580,2540],{"emptyLinePlaceholder":184},[254,61582,61583,61585,61587],{"class":256,"line":32786},[254,61584,51926],{"class":264},[254,61586,50776],{"class":51441},[254,61588,51448],{"class":264},[22139,61590,61592],{"id":61591},"_3253-键盘事件","3.2.5.3 键盘事件",[14,61594,61595],{},"评论字数统计案例",[14,61597,61598],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[14,61600,61601],{},"牢记focus伪类选择器",[51485,61603],{"charSet":61604},"UTF-8",[51485,61606],{"name":61607,"content":61608},"viewport","width=device-width, initial-scale=1.0",[51548,61610,61611],{},"Document",[5267,61613,61614],{},"\n\ninput {\n\nwidth: 200px;\n\ntransition: all .3;\n\n}\n\n\u002F\\* 获得了光标 \\*\u002F\n\ninput:focus {\n\nwidth: 300px;\n\n}\n\n",[53962,61616],{"type":5328},[1271,61618,61619,61622],{},[24,61620,61621],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[24,61623,61624],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[245,61626,61628],{"className":50774,"code":61627,"language":50776,"meta":174,"style":174},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>评论回车发布\u003C\u002Ftitle>\n  \u003Cstyle>\n    .wrapper {\n      min-width: 400px;\n      max-width: 800px;\n      display: flex;\n      justify-content: flex-end;\n    }\n\n    .avatar {\n      width: 48px;\n      height: 48px;\n      border-radius: 50%;\n      overflow: hidden;\n      background: url(...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg) no-repeat center \u002F cover;\n      margin-right: 20px;\n    }\n\n    .wrapper textarea {\n      outline: none;\n      border-color: transparent;\n      resize: none;\n      background: #f5f5f5;\n      border-radius: 4px;\n      flex: 1;\n      padding: 10px;\n      transition: all 0.5s;\n      height: 30px;\n    }\n\n    .wrapper textarea:focus {\n      border-color: #e4e4e4;\n      background: #fff;\n      height: 50px;\n    }\n\n    .wrapper button {\n      background: #00aeec;\n      color: #fff;\n      border: none;\n      border-radius: 4px;\n      margin-left: 10px;\n      width: 70px;\n      cursor: pointer;\n    }\n\n    .wrapper .total {\n      margin-right: 80px;\n      color: #999;\n      margin-top: 5px;\n      opacity: 0;\n      transition: all 0.5s;\n    }\n\n    .list {\n      min-width: 400px;\n      max-width: 800px;\n      display: flex;\n    }\n\n    .list .item {\n      width: 100%;\n      display: flex;\n    }\n\n    .list .item .info {\n      flex: 1;\n      border-bottom: 1px dashed #e4e4e4;\n      padding-bottom: 10px;\n    }\n\n    .list .item p {\n      margin: 0;\n    }\n\n    .list .item .name {\n      color: #FB7299;\n      font-size: 14px;\n      font-weight: bold;\n    }\n\n    .list .item .text {\n      color: #333;\n      padding: 10px 0;\n    }\n\n    .list .item .time {\n      color: #999;\n      font-size: 12px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"wrapper\">\n    \u003Ci class=\"avatar\">\u003C\u002Fi>\n    \u003Ctextarea id=\"tx\" placeholder=\"发一条友善的评论\" rows=\"2\" maxlength=\"200\">\u003C\u002Ftextarea>\n    \u003Cbutton>发布\u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"wrapper\">\n    \u003Cspan class=\"total\">0\u002F200字\u003C\u002Fspan>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"list\">\n    \u003Cdiv class=\"item\" style=\"display: none;\">\n      \u003Ci class=\"avatar\">\u003C\u002Fi>\n      \u003Cdiv class=\"info\">\n        \u003Cp class=\"name\">清风徐来\u003C\u002Fp>\n        \u003Cp class=\"text\">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002Fp>\n        \u003Cp class=\"time\">2022-10-10 20:29:21\u003C\u002Fp>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    const tx = document.querySelector('#tx')\n    const total = document.querySelector('.total')\n    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n    tx.addEventListener('focus', function () {\n      total.style.opacity = 1\n    })\n    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n    tx.addEventListener('blur', function () {\n      total.style.opacity = 0\n    })\n    \u002F\u002F 3. 检测用户输入\n    tx.addEventListener('input', function () {\n      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n      total.innerHTML = `${tx.value.length}\u002F200字`\n    })\n\n    \u002F\u002F const str = 'andy'\n    \u002F\u002F console.log(str.length)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[251,61629,61630,61640,61654,61658,61666,61680,61700,61720,61733,61741,61748,61761,61775,61785,61795,61799,61803,61810,61822,61834,61846,61858,61887,61900,61904,61908,61917,61928,61940,61951,61962,61974,61985,61997,62013,62025,62029,62033,62044,62055,62065,62077,62081,62085,62093,62104,62114,62125,62137,62150,62162,62174,62178,62182,62191,62203,62214,62227,62238,62252,62256,62260,62267,62279,62291,62301,62305,62309,62318,62330,62340,62344,62348,62359,62369,62388,62401,62405,62409,62419,62429,62433,62437,62448,62459,62471,62483,62487,62491,62502,62513,62527,62531,62535,62546,62556,62568,62572,62580,62588,62592,62600,62615,62634,62674,62687,62695,62709,62729,62737,62752,62775,62793,62808,62828,62848,62868,62876,62884,62892,62900,62920,62940,62945,62962,62971,62975,62980,62996,63004,63008,63013,63030,63035,63060,63064,63068,63073,63078,63086,63094,63098],{"__ignoreMap":174},[254,61631,61632,61634,61636,61638],{"class":256,"line":257},[254,61633,51438],{"class":264},[254,61635,51442],{"class":51441},[254,61637,51445],{"class":2103},[254,61639,51448],{"class":264},[254,61641,61642,61644,61646,61648,61650,61652],{"class":256,"line":175},[254,61643,1174],{"class":264},[254,61645,50776],{"class":51441},[254,61647,51457],{"class":2103},[254,61649,310],{"class":264},[254,61651,51462],{"class":369},[254,61653,51448],{"class":264},[254,61655,61656],{"class":256,"line":1319},[254,61657,2540],{"emptyLinePlaceholder":184},[254,61659,61660,61662,61664],{"class":256,"line":1334},[254,61661,1174],{"class":264},[254,61663,51475],{"class":51441},[254,61665,51448],{"class":264},[254,61667,61668,61670,61672,61674,61676,61678],{"class":256,"line":1340},[254,61669,52285],{"class":264},[254,61671,51485],{"class":51441},[254,61673,51488],{"class":2103},[254,61675,310],{"class":264},[254,61677,51493],{"class":369},[254,61679,51448],{"class":264},[254,61681,61682,61684,61686,61688,61690,61692,61694,61696,61698],{"class":256,"line":1354},[254,61683,52285],{"class":264},[254,61685,51485],{"class":51441},[254,61687,51504],{"class":2103},[254,61689,310],{"class":264},[254,61691,51509],{"class":369},[254,61693,51512],{"class":2103},[254,61695,310],{"class":264},[254,61697,51517],{"class":369},[254,61699,51448],{"class":264},[254,61701,61702,61704,61706,61708,61710,61712,61714,61716,61718],{"class":256,"line":1360},[254,61703,52285],{"class":264},[254,61705,51485],{"class":51441},[254,61707,15061],{"class":2103},[254,61709,310],{"class":264},[254,61711,51532],{"class":369},[254,61713,51512],{"class":2103},[254,61715,310],{"class":264},[254,61717,51539],{"class":369},[254,61719,51448],{"class":264},[254,61721,61722,61724,61726,61729,61731],{"class":256,"line":1451},[254,61723,52285],{"class":264},[254,61725,51548],{"class":51441},[254,61727,61728],{"class":264},">评论回车发布\u003C\u002F",[254,61730,51548],{"class":51441},[254,61732,51448],{"class":264},[254,61734,61735,61737,61739],{"class":256,"line":1457},[254,61736,52285],{"class":264},[254,61738,5267],{"class":51441},[254,61740,51448],{"class":264},[254,61742,61743,61746],{"class":256,"line":1469},[254,61744,61745],{"class":2103},"    .wrapper",[254,61747,15713],{"class":264},[254,61749,61750,61753,61755,61757,61759],{"class":256,"line":1752},[254,61751,61752],{"class":313},"      min-width",[254,61754,51578],{"class":264},[254,61756,4127],{"class":313},[254,61758,51633],{"class":260},[254,61760,1430],{"class":264},[254,61762,61763,61766,61768,61771,61773],{"class":256,"line":1757},[254,61764,61765],{"class":313},"      max-width",[254,61767,51578],{"class":264},[254,61769,61770],{"class":313},"800",[254,61772,51633],{"class":260},[254,61774,1430],{"class":264},[254,61776,61777,61779,61781,61783],{"class":256,"line":1763},[254,61778,55150],{"class":313},[254,61780,51578],{"class":264},[254,61782,51618],{"class":313},[254,61784,1430],{"class":264},[254,61786,61787,61789,61791,61793],{"class":256,"line":1768},[254,61788,55161],{"class":313},[254,61790,51578],{"class":264},[254,61792,51721],{"class":313},[254,61794,1430],{"class":264},[254,61796,61797],{"class":256,"line":1782},[254,61798,2327],{"class":264},[254,61800,61801],{"class":256,"line":1787},[254,61802,2540],{"emptyLinePlaceholder":184},[254,61804,61805,61808],{"class":256,"line":1793},[254,61806,61807],{"class":2103},"    .avatar",[254,61809,15713],{"class":264},[254,61811,61812,61814,61816,61818,61820],{"class":256,"line":1814},[254,61813,54912],{"class":313},[254,61815,51578],{"class":264},[254,61817,871],{"class":313},[254,61819,51633],{"class":260},[254,61821,1430],{"class":264},[254,61823,61824,61826,61828,61830,61832],{"class":256,"line":1819},[254,61825,54926],{"class":313},[254,61827,51578],{"class":264},[254,61829,871],{"class":313},[254,61831,51633],{"class":260},[254,61833,1430],{"class":264},[254,61835,61836,61838,61840,61842,61844],{"class":256,"line":1833},[254,61837,55275],{"class":313},[254,61839,51578],{"class":264},[254,61841,920],{"class":313},[254,61843,592],{"class":260},[254,61845,1430],{"class":264},[254,61847,61848,61851,61853,61856],{"class":256,"line":1838},[254,61849,61850],{"class":313},"      overflow",[254,61852,51578],{"class":264},[254,61854,61855],{"class":313},"hidden",[254,61857,1430],{"class":264},[254,61859,61860,61863,61865,61868,61870,61873,61875,61878,61880,61882,61885],{"class":256,"line":1867},[254,61861,61862],{"class":313},"      background",[254,61864,51578],{"class":264},[254,61866,61867],{"class":313},"url",[254,61869,265],{"class":264},[254,61871,61872],{"class":5357},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[254,61874,13855],{"class":264},[254,61876,61877],{"class":313},"no-repeat",[254,61879,17285],{"class":313},[254,61881,25119],{"class":264},[254,61883,61884],{"class":313},"cover",[254,61886,1430],{"class":264},[254,61888,61889,61892,61894,61896,61898],{"class":256,"line":1872},[254,61890,61891],{"class":313},"      margin-right",[254,61893,51578],{"class":264},[254,61895,964],{"class":313},[254,61897,51633],{"class":260},[254,61899,1430],{"class":264},[254,61901,61902],{"class":256,"line":1889},[254,61903,2327],{"class":264},[254,61905,61906],{"class":256,"line":1894},[254,61907,2540],{"emptyLinePlaceholder":184},[254,61909,61910,61912,61915],{"class":256,"line":1899},[254,61911,61745],{"class":2103},[254,61913,61914],{"class":51441}," textarea",[254,61916,15713],{"class":264},[254,61918,61919,61922,61924,61926],{"class":256,"line":1904},[254,61920,61921],{"class":313},"      outline",[254,61923,51578],{"class":264},[254,61925,54878],{"class":313},[254,61927,1430],{"class":264},[254,61929,61930,61933,61935,61938],{"class":256,"line":1918},[254,61931,61932],{"class":313},"      border-color",[254,61934,51578],{"class":264},[254,61936,61937],{"class":313},"transparent",[254,61939,1430],{"class":264},[254,61941,61942,61945,61947,61949],{"class":256,"line":1923},[254,61943,61944],{"class":313},"      resize",[254,61946,51578],{"class":264},[254,61948,54878],{"class":313},[254,61950,1430],{"class":264},[254,61952,61953,61955,61957,61960],{"class":256,"line":2717},[254,61954,61862],{"class":313},[254,61956,51578],{"class":264},[254,61958,61959],{"class":313},"#f5f5f5",[254,61961,1430],{"class":264},[254,61963,61964,61966,61968,61970,61972],{"class":256,"line":2731},[254,61965,55275],{"class":313},[254,61967,51578],{"class":264},[254,61969,557],{"class":313},[254,61971,51633],{"class":260},[254,61973,1430],{"class":264},[254,61975,61976,61979,61981,61983],{"class":256,"line":2739},[254,61977,61978],{"class":313},"      flex",[254,61980,51578],{"class":264},[254,61982,482],{"class":313},[254,61984,1430],{"class":264},[254,61986,61987,61989,61991,61993,61995],{"class":256,"line":2744},[254,61988,54836],{"class":313},[254,61990,51578],{"class":264},[254,61992,710],{"class":313},[254,61994,51633],{"class":260},[254,61996,1430],{"class":264},[254,61998,61999,62002,62004,62006,62009,62011],{"class":256,"line":2750},[254,62000,62001],{"class":313},"      transition",[254,62003,51578],{"class":264},[254,62005,28262],{"class":313},[254,62007,62008],{"class":313}," 0.5",[254,62010,959],{"class":260},[254,62012,1430],{"class":264},[254,62014,62015,62017,62019,62021,62023],{"class":256,"line":2756},[254,62016,54926],{"class":313},[254,62018,51578],{"class":264},[254,62020,1215],{"class":313},[254,62022,51633],{"class":260},[254,62024,1430],{"class":264},[254,62026,62027],{"class":256,"line":2761},[254,62028,2327],{"class":264},[254,62030,62031],{"class":256,"line":8089},[254,62032,2540],{"emptyLinePlaceholder":184},[254,62034,62035,62037,62039,62042],{"class":256,"line":8113},[254,62036,61745],{"class":2103},[254,62038,61914],{"class":51441},[254,62040,62041],{"class":2103},":focus",[254,62043,15713],{"class":264},[254,62045,62046,62048,62050,62053],{"class":256,"line":8118},[254,62047,61932],{"class":313},[254,62049,51578],{"class":264},[254,62051,62052],{"class":313},"#e4e4e4",[254,62054,1430],{"class":264},[254,62056,62057,62059,62061,62063],{"class":256,"line":8124},[254,62058,61862],{"class":313},[254,62060,51578],{"class":264},[254,62062,60983],{"class":313},[254,62064,1430],{"class":264},[254,62066,62067,62069,62071,62073,62075],{"class":256,"line":8151},[254,62068,54926],{"class":313},[254,62070,51578],{"class":264},[254,62072,920],{"class":313},[254,62074,51633],{"class":260},[254,62076,1430],{"class":264},[254,62078,62079],{"class":256,"line":8156},[254,62080,2327],{"class":264},[254,62082,62083],{"class":256,"line":8162},[254,62084,2540],{"emptyLinePlaceholder":184},[254,62086,62087,62089,62091],{"class":256,"line":8174},[254,62088,61745],{"class":2103},[254,62090,57608],{"class":51441},[254,62092,15713],{"class":264},[254,62094,62095,62097,62099,62102],{"class":256,"line":8186},[254,62096,61862],{"class":313},[254,62098,51578],{"class":264},[254,62100,62101],{"class":313},"#00aeec",[254,62103,1430],{"class":264},[254,62105,62106,62108,62110,62112],{"class":256,"line":8198},[254,62107,57557],{"class":313},[254,62109,51578],{"class":264},[254,62111,60983],{"class":313},[254,62113,1430],{"class":264},[254,62115,62116,62119,62121,62123],{"class":256,"line":9857},[254,62117,62118],{"class":313},"      border",[254,62120,51578],{"class":264},[254,62122,54878],{"class":313},[254,62124,1430],{"class":264},[254,62126,62127,62129,62131,62133,62135],{"class":256,"line":9882},[254,62128,55275],{"class":313},[254,62130,51578],{"class":264},[254,62132,557],{"class":313},[254,62134,51633],{"class":260},[254,62136,1430],{"class":264},[254,62138,62139,62142,62144,62146,62148],{"class":256,"line":9905},[254,62140,62141],{"class":313},"      margin-left",[254,62143,51578],{"class":264},[254,62145,710],{"class":313},[254,62147,51633],{"class":260},[254,62149,1430],{"class":264},[254,62151,62152,62154,62156,62158,62160],{"class":256,"line":9929},[254,62153,54912],{"class":313},[254,62155,51578],{"class":264},[254,62157,620],{"class":313},[254,62159,51633],{"class":260},[254,62161,1430],{"class":264},[254,62163,62164,62167,62169,62172],{"class":256,"line":9934},[254,62165,62166],{"class":313},"      cursor",[254,62168,51578],{"class":264},[254,62170,62171],{"class":313},"pointer",[254,62173,1430],{"class":264},[254,62175,62176],{"class":256,"line":9939},[254,62177,2327],{"class":264},[254,62179,62180],{"class":256,"line":9944},[254,62181,2540],{"emptyLinePlaceholder":184},[254,62183,62184,62186,62189],{"class":256,"line":9953},[254,62185,61745],{"class":2103},[254,62187,62188],{"class":2103}," .total",[254,62190,15713],{"class":264},[254,62192,62193,62195,62197,62199,62201],{"class":256,"line":9958},[254,62194,61891],{"class":313},[254,62196,51578],{"class":264},[254,62198,876],{"class":313},[254,62200,51633],{"class":260},[254,62202,1430],{"class":264},[254,62204,62205,62207,62209,62212],{"class":256,"line":9964},[254,62206,57557],{"class":313},[254,62208,51578],{"class":264},[254,62210,62211],{"class":313},"#999",[254,62213,1430],{"class":264},[254,62215,62216,62219,62221,62223,62225],{"class":256,"line":9985},[254,62217,62218],{"class":313},"      margin-top",[254,62220,51578],{"class":264},[254,62222,583],{"class":313},[254,62224,51633],{"class":260},[254,62226,1430],{"class":264},[254,62228,62229,62232,62234,62236],{"class":256,"line":9991},[254,62230,62231],{"class":313},"      opacity",[254,62233,51578],{"class":264},[254,62235,456],{"class":313},[254,62237,1430],{"class":264},[254,62239,62240,62242,62244,62246,62248,62250],{"class":256,"line":10005},[254,62241,62001],{"class":313},[254,62243,51578],{"class":264},[254,62245,28262],{"class":313},[254,62247,62008],{"class":313},[254,62249,959],{"class":260},[254,62251,1430],{"class":264},[254,62253,62254],{"class":256,"line":10011},[254,62255,2327],{"class":264},[254,62257,62258],{"class":256,"line":10038},[254,62259,2540],{"emptyLinePlaceholder":184},[254,62261,62262,62265],{"class":256,"line":10047},[254,62263,62264],{"class":2103},"    .list",[254,62266,15713],{"class":264},[254,62268,62269,62271,62273,62275,62277],{"class":256,"line":10053},[254,62270,61752],{"class":313},[254,62272,51578],{"class":264},[254,62274,4127],{"class":313},[254,62276,51633],{"class":260},[254,62278,1430],{"class":264},[254,62280,62281,62283,62285,62287,62289],{"class":256,"line":10061},[254,62282,61765],{"class":313},[254,62284,51578],{"class":264},[254,62286,61770],{"class":313},[254,62288,51633],{"class":260},[254,62290,1430],{"class":264},[254,62292,62293,62295,62297,62299],{"class":256,"line":10066},[254,62294,55150],{"class":313},[254,62296,51578],{"class":264},[254,62298,51618],{"class":313},[254,62300,1430],{"class":264},[254,62302,62303],{"class":256,"line":16745},[254,62304,2327],{"class":264},[254,62306,62307],{"class":256,"line":16751},[254,62308,2540],{"emptyLinePlaceholder":184},[254,62310,62311,62313,62316],{"class":256,"line":16774},[254,62312,62264],{"class":2103},[254,62314,62315],{"class":2103}," .item",[254,62317,15713],{"class":264},[254,62319,62320,62322,62324,62326,62328],{"class":256,"line":16780},[254,62321,54912],{"class":313},[254,62323,51578],{"class":264},[254,62325,575],{"class":313},[254,62327,592],{"class":260},[254,62329,1430],{"class":264},[254,62331,62332,62334,62336,62338],{"class":256,"line":16803},[254,62333,55150],{"class":313},[254,62335,51578],{"class":264},[254,62337,51618],{"class":313},[254,62339,1430],{"class":264},[254,62341,62342],{"class":256,"line":16817},[254,62343,2327],{"class":264},[254,62345,62346],{"class":256,"line":16837},[254,62347,2540],{"emptyLinePlaceholder":184},[254,62349,62350,62352,62354,62357],{"class":256,"line":16843},[254,62351,62264],{"class":2103},[254,62353,62315],{"class":2103},[254,62355,62356],{"class":2103}," .info",[254,62358,15713],{"class":264},[254,62360,62361,62363,62365,62367],{"class":256,"line":16854},[254,62362,61978],{"class":313},[254,62364,51578],{"class":264},[254,62366,482],{"class":313},[254,62368,1430],{"class":264},[254,62370,62371,62374,62376,62378,62380,62383,62386],{"class":256,"line":16877},[254,62372,62373],{"class":313},"      border-bottom",[254,62375,51578],{"class":264},[254,62377,482],{"class":313},[254,62379,51633],{"class":260},[254,62381,62382],{"class":313}," dashed",[254,62384,62385],{"class":313}," #e4e4e4",[254,62387,1430],{"class":264},[254,62389,62390,62393,62395,62397,62399],{"class":256,"line":16899},[254,62391,62392],{"class":313},"      padding-bottom",[254,62394,51578],{"class":264},[254,62396,710],{"class":313},[254,62398,51633],{"class":260},[254,62400,1430],{"class":264},[254,62402,62403],{"class":256,"line":16904},[254,62404,2327],{"class":264},[254,62406,62407],{"class":256,"line":16910},[254,62408,2540],{"emptyLinePlaceholder":184},[254,62410,62411,62413,62415,62417],{"class":256,"line":16924},[254,62412,62264],{"class":2103},[254,62414,62315],{"class":2103},[254,62416,6966],{"class":51441},[254,62418,15713],{"class":264},[254,62420,62421,62423,62425,62427],{"class":256,"line":16937},[254,62422,54847],{"class":313},[254,62424,51578],{"class":264},[254,62426,456],{"class":313},[254,62428,1430],{"class":264},[254,62430,62431],{"class":256,"line":16942},[254,62432,2327],{"class":264},[254,62434,62435],{"class":256,"line":16956},[254,62436,2540],{"emptyLinePlaceholder":184},[254,62438,62439,62441,62443,62446],{"class":256,"line":16961},[254,62440,62264],{"class":2103},[254,62442,62315],{"class":2103},[254,62444,62445],{"class":2103}," .name",[254,62447,15713],{"class":264},[254,62449,62450,62452,62454,62457],{"class":256,"line":16967},[254,62451,57557],{"class":313},[254,62453,51578],{"class":264},[254,62455,62456],{"class":313},"#FB7299",[254,62458,1430],{"class":264},[254,62460,62461,62463,62465,62467,62469],{"class":256,"line":16972},[254,62462,55063],{"class":313},[254,62464,51578],{"class":264},[254,62466,813],{"class":313},[254,62468,51633],{"class":260},[254,62470,1430],{"class":264},[254,62472,62473,62476,62478,62481],{"class":256,"line":16986},[254,62474,62475],{"class":313},"      font-weight",[254,62477,51578],{"class":264},[254,62479,62480],{"class":313},"bold",[254,62482,1430],{"class":264},[254,62484,62485],{"class":256,"line":16991},[254,62486,2327],{"class":264},[254,62488,62489],{"class":256,"line":16996},[254,62490,2540],{"emptyLinePlaceholder":184},[254,62492,62493,62495,62497,62500],{"class":256,"line":17010},[254,62494,62264],{"class":2103},[254,62496,62315],{"class":2103},[254,62498,62499],{"class":2103}," .text",[254,62501,15713],{"class":264},[254,62503,62504,62506,62508,62511],{"class":256,"line":17022},[254,62505,57557],{"class":313},[254,62507,51578],{"class":264},[254,62509,62510],{"class":313},"#333",[254,62512,1430],{"class":264},[254,62514,62515,62517,62519,62521,62523,62525],{"class":256,"line":17027},[254,62516,54836],{"class":313},[254,62518,51578],{"class":264},[254,62520,710],{"class":313},[254,62522,51633],{"class":260},[254,62524,4233],{"class":313},[254,62526,1430],{"class":264},[254,62528,62529],{"class":256,"line":17040},[254,62530,2327],{"class":264},[254,62532,62533],{"class":256,"line":17045},[254,62534,2540],{"emptyLinePlaceholder":184},[254,62536,62537,62539,62541,62544],{"class":256,"line":17050},[254,62538,62264],{"class":2103},[254,62540,62315],{"class":2103},[254,62542,62543],{"class":2103}," .time",[254,62545,15713],{"class":264},[254,62547,62548,62550,62552,62554],{"class":256,"line":17055},[254,62549,57557],{"class":313},[254,62551,51578],{"class":264},[254,62553,62211],{"class":313},[254,62555,1430],{"class":264},[254,62557,62558,62560,62562,62564,62566],{"class":256,"line":17068},[254,62559,55063],{"class":313},[254,62561,51578],{"class":264},[254,62563,762],{"class":313},[254,62565,51633],{"class":260},[254,62567,1430],{"class":264},[254,62569,62570],{"class":256,"line":17073},[254,62571,2327],{"class":264},[254,62573,62574,62576,62578],{"class":256,"line":32774},[254,62575,52558],{"class":264},[254,62577,5267],{"class":51441},[254,62579,51448],{"class":264},[254,62581,62582,62584,62586],{"class":256,"line":32780},[254,62583,51926],{"class":264},[254,62585,51475],{"class":51441},[254,62587,51448],{"class":264},[254,62589,62590],{"class":256,"line":32786},[254,62591,2540],{"emptyLinePlaceholder":184},[254,62593,62594,62596,62598],{"class":256,"line":32792},[254,62595,1174],{"class":264},[254,62597,51941],{"class":51441},[254,62599,51448],{"class":264},[254,62601,62602,62604,62606,62608,62610,62613],{"class":256,"line":32798},[254,62603,52285],{"class":264},[254,62605,51752],{"class":51441},[254,62607,53627],{"class":2103},[254,62609,310],{"class":264},[254,62611,62612],{"class":369},"\"wrapper\"",[254,62614,51448],{"class":264},[254,62616,62617,62619,62621,62623,62625,62628,62630,62632],{"class":256,"line":32809},[254,62618,51482],{"class":264},[254,62620,705],{"class":51441},[254,62622,53627],{"class":2103},[254,62624,310],{"class":264},[254,62626,62627],{"class":369},"\"avatar\"",[254,62629,55455],{"class":264},[254,62631,705],{"class":51441},[254,62633,51448],{"class":264},[254,62635,62636,62638,62640,62642,62644,62647,62649,62651,62654,62656,62658,62660,62663,62665,62668,62670,62672],{"class":256,"line":32815},[254,62637,51482],{"class":264},[254,62639,54429],{"class":51441},[254,62641,15100],{"class":2103},[254,62643,310],{"class":264},[254,62645,62646],{"class":369},"\"tx\"",[254,62648,61161],{"class":2103},[254,62650,310],{"class":264},[254,62652,62653],{"class":369},"\"发一条友善的评论\"",[254,62655,54452],{"class":2103},[254,62657,310],{"class":264},[254,62659,3841],{"class":369},[254,62661,62662],{"class":2103}," maxlength",[254,62664,310],{"class":264},[254,62666,62667],{"class":369},"\"200\"",[254,62669,55455],{"class":264},[254,62671,54429],{"class":51441},[254,62673,51448],{"class":264},[254,62675,62676,62678,62680,62683,62685],{"class":256,"line":32835},[254,62677,51482],{"class":264},[254,62679,54028],{"class":51441},[254,62681,62682],{"class":264},">发布\u003C\u002F",[254,62684,54028],{"class":51441},[254,62686,51448],{"class":264},[254,62688,62689,62691,62693],{"class":256,"line":32841},[254,62690,52558],{"class":264},[254,62692,51752],{"class":51441},[254,62694,51448],{"class":264},[254,62696,62697,62699,62701,62703,62705,62707],{"class":256,"line":32852},[254,62698,52285],{"class":264},[254,62700,51752],{"class":51441},[254,62702,53627],{"class":2103},[254,62704,310],{"class":264},[254,62706,62612],{"class":369},[254,62708,51448],{"class":264},[254,62710,62711,62713,62715,62717,62719,62722,62725,62727],{"class":256,"line":32858},[254,62712,51482],{"class":264},[254,62714,254],{"class":51441},[254,62716,53627],{"class":2103},[254,62718,310],{"class":264},[254,62720,62721],{"class":369},"\"total\"",[254,62723,62724],{"class":264},">0\u002F200字\u003C\u002F",[254,62726,254],{"class":51441},[254,62728,51448],{"class":264},[254,62730,62731,62733,62735],{"class":256,"line":32864},[254,62732,52558],{"class":264},[254,62734,51752],{"class":51441},[254,62736,51448],{"class":264},[254,62738,62739,62741,62743,62745,62747,62750],{"class":256,"line":32870},[254,62740,52285],{"class":264},[254,62742,51752],{"class":51441},[254,62744,53627],{"class":2103},[254,62746,310],{"class":264},[254,62748,62749],{"class":369},"\"list\"",[254,62751,51448],{"class":264},[254,62753,62754,62756,62758,62760,62762,62765,62768,62770,62773],{"class":256,"line":32876},[254,62755,51482],{"class":264},[254,62757,51752],{"class":51441},[254,62759,53627],{"class":2103},[254,62761,310],{"class":264},[254,62763,62764],{"class":369},"\"item\"",[254,62766,62767],{"class":2103}," style",[254,62769,310],{"class":264},[254,62771,62772],{"class":369},"\"display: none;\"",[254,62774,51448],{"class":264},[254,62776,62777,62779,62781,62783,62785,62787,62789,62791],{"class":256,"line":32882},[254,62778,55375],{"class":264},[254,62780,705],{"class":51441},[254,62782,53627],{"class":2103},[254,62784,310],{"class":264},[254,62786,62627],{"class":369},[254,62788,55455],{"class":264},[254,62790,705],{"class":51441},[254,62792,51448],{"class":264},[254,62794,62795,62797,62799,62801,62803,62806],{"class":256,"line":32888},[254,62796,55375],{"class":264},[254,62798,51752],{"class":51441},[254,62800,53627],{"class":2103},[254,62802,310],{"class":264},[254,62804,62805],{"class":369},"\"info\"",[254,62807,51448],{"class":264},[254,62809,62810,62812,62814,62816,62818,62821,62824,62826],{"class":256,"line":32894},[254,62811,55443],{"class":264},[254,62813,14],{"class":51441},[254,62815,53627],{"class":2103},[254,62817,310],{"class":264},[254,62819,62820],{"class":369},"\"name\"",[254,62822,62823],{"class":264},">清风徐来\u003C\u002F",[254,62825,14],{"class":51441},[254,62827,51448],{"class":264},[254,62829,62830,62832,62834,62836,62838,62841,62844,62846],{"class":256,"line":32914},[254,62831,55443],{"class":264},[254,62833,14],{"class":51441},[254,62835,53627],{"class":2103},[254,62837,310],{"class":264},[254,62839,62840],{"class":369},"\"text\"",[254,62842,62843],{"class":264},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[254,62845,14],{"class":51441},[254,62847,51448],{"class":264},[254,62849,62850,62852,62854,62856,62858,62861,62864,62866],{"class":256,"line":32920},[254,62851,55443],{"class":264},[254,62853,14],{"class":51441},[254,62855,53627],{"class":2103},[254,62857,310],{"class":264},[254,62859,62860],{"class":369},"\"time\"",[254,62862,62863],{"class":264},">2022-10-10 20:29:21\u003C\u002F",[254,62865,14],{"class":51441},[254,62867,51448],{"class":264},[254,62869,62870,62872,62874],{"class":256,"line":32936},[254,62871,55548],{"class":264},[254,62873,51752],{"class":51441},[254,62875,51448],{"class":264},[254,62877,62878,62880,62882],{"class":256,"line":32942},[254,62879,51917],{"class":264},[254,62881,51752],{"class":51441},[254,62883,51448],{"class":264},[254,62885,62886,62888,62890],{"class":256,"line":32956},[254,62887,52558],{"class":264},[254,62889,51752],{"class":51441},[254,62891,51448],{"class":264},[254,62893,62894,62896,62898],{"class":256,"line":32962},[254,62895,52285],{"class":264},[254,62897,51954],{"class":51441},[254,62899,51448],{"class":264},[254,62901,62902,62904,62907,62909,62911,62913,62915,62918],{"class":256,"line":32977},[254,62903,11362],{"class":260},[254,62905,62906],{"class":313}," tx",[254,62908,13705],{"class":260},[254,62910,54537],{"class":264},[254,62912,54540],{"class":2103},[254,62914,265],{"class":264},[254,62916,62917],{"class":369},"'#tx'",[254,62919,271],{"class":264},[254,62921,62922,62924,62927,62929,62931,62933,62935,62938],{"class":256,"line":32983},[254,62923,11362],{"class":260},[254,62925,62926],{"class":313}," total",[254,62928,13705],{"class":260},[254,62930,54537],{"class":264},[254,62932,54540],{"class":2103},[254,62934,265],{"class":264},[254,62936,62937],{"class":369},"'.total'",[254,62939,271],{"class":264},[254,62941,62942],{"class":256,"line":32992},[254,62943,62944],{"class":323},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[254,62946,62947,62950,62952,62954,62956,62958,62960],{"class":256,"line":32998},[254,62948,62949],{"class":264},"    tx.",[254,62951,57954],{"class":2103},[254,62953,265],{"class":264},[254,62955,61468],{"class":369},[254,62957,12576],{"class":264},[254,62959,54590],{"class":260},[254,62961,54593],{"class":264},[254,62963,62964,62967,62969],{"class":256,"line":33007},[254,62965,62966],{"class":264},"      total.style.opacity ",[254,62968,310],{"class":260},[254,62970,55840],{"class":313},[254,62972,62973],{"class":256,"line":33013},[254,62974,33602],{"class":264},[254,62976,62977],{"class":256,"line":33019},[254,62978,62979],{"class":323},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[254,62981,62982,62984,62986,62988,62990,62992,62994],{"class":256,"line":33028},[254,62983,62949],{"class":264},[254,62985,57954],{"class":2103},[254,62987,265],{"class":264},[254,62989,61529],{"class":369},[254,62991,12576],{"class":264},[254,62993,54590],{"class":260},[254,62995,54593],{"class":264},[254,62997,62998,63000,63002],{"class":256,"line":33034},[254,62999,62966],{"class":264},[254,63001,310],{"class":260},[254,63003,47474],{"class":313},[254,63005,63006],{"class":256,"line":33045},[254,63007,33602],{"class":264},[254,63009,63010],{"class":256,"line":33051},[254,63011,63012],{"class":323},"    \u002F\u002F 3. 检测用户输入\n",[254,63014,63015,63017,63019,63021,63024,63026,63028],{"class":256,"line":33070},[254,63016,62949],{"class":264},[254,63018,57954],{"class":2103},[254,63020,265],{"class":264},[254,63022,63023],{"class":369},"'input'",[254,63025,12576],{"class":264},[254,63027,54590],{"class":260},[254,63029,54593],{"class":264},[254,63031,63032],{"class":256,"line":33076},[254,63033,63034],{"class":323},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[254,63036,63037,63040,63042,63045,63048,63050,63053,63055,63057],{"class":256,"line":33087},[254,63038,63039],{"class":264},"      total.innerHTML ",[254,63041,310],{"class":260},[254,63043,63044],{"class":369}," `${",[254,63046,63047],{"class":264},"tx",[254,63049,822],{"class":369},[254,63051,63052],{"class":264},"value",[254,63054,822],{"class":369},[254,63056,52109],{"class":313},[254,63058,63059],{"class":369},"}\u002F200字`\n",[254,63061,63062],{"class":256,"line":33093},[254,63063,33602],{"class":264},[254,63065,63066],{"class":256,"line":33113},[254,63067,2540],{"emptyLinePlaceholder":184},[254,63069,63070],{"class":256,"line":33129},[254,63071,63072],{"class":323},"    \u002F\u002F const str = 'andy'\n",[254,63074,63075],{"class":256,"line":33135},[254,63076,63077],{"class":323},"    \u002F\u002F console.log(str.length)\n",[254,63079,63080,63082,63084],{"class":256,"line":33149},[254,63081,52558],{"class":264},[254,63083,51954],{"class":51441},[254,63085,51448],{"class":264},[254,63087,63088,63090,63092],{"class":256,"line":33155},[254,63089,51926],{"class":264},[254,63091,51941],{"class":51441},[254,63093,51448],{"class":264},[254,63095,63096],{"class":256,"line":33161},[254,63097,2540],{"emptyLinePlaceholder":184},[254,63099,63100,63102,63104],{"class":256,"line":33172},[254,63101,51926],{"class":264},[254,63103,50776],{"class":51441},[254,63105,51448],{"class":264},[22139,63107,63109],{"id":63108},"_3254-change事件","3.2.5.4 change事件",[14,63111,63112],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[14,63114,63115],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[14,63117,63118],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[245,63120,63122],{"className":50774,"code":63121,"language":50776,"meta":174,"style":174},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cinput type=\"text\">\n  \u003Cscript>\n    const input = document.querySelector('input')\n    input.addEventListener('change', function () {\n      console.log(111)\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[251,63123,63124,63134,63148,63152,63160,63174,63194,63206,63214,63218,63226,63240,63248,63266,63284,63296,63300,63308,63316,63320],{"__ignoreMap":174},[254,63125,63126,63128,63130,63132],{"class":256,"line":257},[254,63127,51438],{"class":264},[254,63129,51442],{"class":51441},[254,63131,51445],{"class":2103},[254,63133,51448],{"class":264},[254,63135,63136,63138,63140,63142,63144,63146],{"class":256,"line":175},[254,63137,1174],{"class":264},[254,63139,50776],{"class":51441},[254,63141,51457],{"class":2103},[254,63143,310],{"class":264},[254,63145,51462],{"class":369},[254,63147,51448],{"class":264},[254,63149,63150],{"class":256,"line":1319},[254,63151,2540],{"emptyLinePlaceholder":184},[254,63153,63154,63156,63158],{"class":256,"line":1334},[254,63155,1174],{"class":264},[254,63157,51475],{"class":51441},[254,63159,51448],{"class":264},[254,63161,63162,63164,63166,63168,63170,63172],{"class":256,"line":1340},[254,63163,52285],{"class":264},[254,63165,51485],{"class":51441},[254,63167,51488],{"class":2103},[254,63169,310],{"class":264},[254,63171,51493],{"class":369},[254,63173,51448],{"class":264},[254,63175,63176,63178,63180,63182,63184,63186,63188,63190,63192],{"class":256,"line":1354},[254,63177,52285],{"class":264},[254,63179,51485],{"class":51441},[254,63181,15061],{"class":2103},[254,63183,310],{"class":264},[254,63185,51532],{"class":369},[254,63187,51512],{"class":2103},[254,63189,310],{"class":264},[254,63191,51539],{"class":369},[254,63193,51448],{"class":264},[254,63195,63196,63198,63200,63202,63204],{"class":256,"line":1360},[254,63197,52285],{"class":264},[254,63199,51548],{"class":51441},[254,63201,51551],{"class":264},[254,63203,51548],{"class":51441},[254,63205,51448],{"class":264},[254,63207,63208,63210,63212],{"class":256,"line":1451},[254,63209,51926],{"class":264},[254,63211,51475],{"class":51441},[254,63213,51448],{"class":264},[254,63215,63216],{"class":256,"line":1457},[254,63217,2540],{"emptyLinePlaceholder":184},[254,63219,63220,63222,63224],{"class":256,"line":1469},[254,63221,1174],{"class":264},[254,63223,51941],{"class":51441},[254,63225,51448],{"class":264},[254,63227,63228,63230,63232,63234,63236,63238],{"class":256,"line":1752},[254,63229,52285],{"class":264},[254,63231,53962],{"class":51441},[254,63233,53965],{"class":2103},[254,63235,310],{"class":264},[254,63237,62840],{"class":369},[254,63239,51448],{"class":264},[254,63241,63242,63244,63246],{"class":256,"line":1757},[254,63243,52285],{"class":264},[254,63245,51954],{"class":51441},[254,63247,51448],{"class":264},[254,63249,63250,63252,63254,63256,63258,63260,63262,63264],{"class":256,"line":1763},[254,63251,11362],{"class":260},[254,63253,60746],{"class":313},[254,63255,13705],{"class":260},[254,63257,54537],{"class":264},[254,63259,54540],{"class":2103},[254,63261,265],{"class":264},[254,63263,63023],{"class":369},[254,63265,271],{"class":264},[254,63267,63268,63271,63273,63275,63278,63280,63282],{"class":256,"line":1768},[254,63269,63270],{"class":264},"    input.",[254,63272,57954],{"class":2103},[254,63274,265],{"class":264},[254,63276,63277],{"class":369},"'change'",[254,63279,12576],{"class":264},[254,63281,54590],{"class":260},[254,63283,54593],{"class":264},[254,63285,63286,63288,63290,63292,63294],{"class":256,"line":1782},[254,63287,58385],{"class":264},[254,63289,58388],{"class":2103},[254,63291,265],{"class":264},[254,63293,857],{"class":313},[254,63295,271],{"class":264},[254,63297,63298],{"class":256,"line":1787},[254,63299,33602],{"class":264},[254,63301,63302,63304,63306],{"class":256,"line":1793},[254,63303,52558],{"class":264},[254,63305,51954],{"class":51441},[254,63307,51448],{"class":264},[254,63309,63310,63312,63314],{"class":256,"line":1814},[254,63311,51926],{"class":264},[254,63313,51941],{"class":51441},[254,63315,51448],{"class":264},[254,63317,63318],{"class":256,"line":1819},[254,63319,2540],{"emptyLinePlaceholder":184},[254,63321,63322,63324,63326],{"class":256,"line":1833},[254,63323,51926],{"class":264},[254,63325,50776],{"class":51441},[254,63327,51448],{"class":264},[14,63329,63330],{},"总结：内容发生改变才回去触发",[225,63332,63334],{"id":63333},"_326-事件对象","3.2.6 事件对象",[22139,63336,63338],{"id":63337},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[14,63340,63341],{},[1602,63342],{"alt":174,"src":63343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[14,63345,63346],{},[1602,63347],{"alt":174,"src":63348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[14,63350,63351],{},"点击一次，就输出了事件对象，它是个对象",[14,63353,63354],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[14,63356,63357],{},[1602,63358],{"alt":174,"src":63359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[22139,63361,63363],{"id":63362},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[14,63365,63366],{},[1602,63367],{"alt":174,"src":63368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[14,63370,63371],{},"实现按特殊字符才是实现打印输出效果：",[245,63373,63375],{"className":53208,"code":63374,"language":53210,"meta":174,"style":174},"\u003Cbody>\n  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n  \u003Cinput type=\"text\">\n  \u003Cscript>\n    \u002F\u002F const btn = document.querySelector('button')\n    \u002F\u002F btn.addEventListener('click', function (e) {\n    \u002F\u002F   console.log(e);\n    \u002F\u002F })\n    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n    const input = document.querySelector('input')\n    input.addEventListener('keyup', function (e) {\n      if (e.key === 'Enter') {\n        console.log('我按下了回车键')\n      }\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[251,63376,63377,63385,63390,63404,63412,63417,63422,63427,63432,63437,63442,63447,63452,63457,63461,63465,63473],{"__ignoreMap":174},[254,63378,63379,63381,63383],{"class":256,"line":257},[254,63380,1174],{"class":264},[254,63382,51941],{"class":51441},[254,63384,51448],{"class":264},[254,63386,63387],{"class":256,"line":175},[254,63388,63389],{"class":323},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[254,63391,63392,63394,63396,63398,63400,63402],{"class":256,"line":1319},[254,63393,52285],{"class":264},[254,63395,53962],{"class":51441},[254,63397,53965],{"class":2103},[254,63399,310],{"class":264},[254,63401,62840],{"class":369},[254,63403,51448],{"class":264},[254,63405,63406,63408,63410],{"class":256,"line":1334},[254,63407,52285],{"class":264},[254,63409,51954],{"class":51441},[254,63411,51448],{"class":264},[254,63413,63414],{"class":256,"line":1340},[254,63415,63416],{"class":264},"    \u002F\u002F const btn = document.querySelector('button')\n",[254,63418,63419],{"class":256,"line":1354},[254,63420,63421],{"class":264},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[254,63423,63424],{"class":256,"line":1360},[254,63425,63426],{"class":264},"    \u002F\u002F   console.log(e);\n",[254,63428,63429],{"class":256,"line":1451},[254,63430,63431],{"class":264},"    \u002F\u002F })\n",[254,63433,63434],{"class":256,"line":1457},[254,63435,63436],{"class":264},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[254,63438,63439],{"class":256,"line":1469},[254,63440,63441],{"class":264},"    const input = document.querySelector('input')\n",[254,63443,63444],{"class":256,"line":1752},[254,63445,63446],{"class":264},"    input.addEventListener('keyup', function (e) {\n",[254,63448,63449],{"class":256,"line":1757},[254,63450,63451],{"class":264},"      if (e.key === 'Enter') {\n",[254,63453,63454],{"class":256,"line":1763},[254,63455,63456],{"class":264},"        console.log('我按下了回车键')\n",[254,63458,63459],{"class":256,"line":1768},[254,63460,52539],{"class":264},[254,63462,63463],{"class":256,"line":1782},[254,63464,33602],{"class":264},[254,63466,63467,63469,63471],{"class":256,"line":1787},[254,63468,52558],{"class":264},[254,63470,51954],{"class":51441},[254,63472,51448],{"class":264},[254,63474,63475,63477,63479],{"class":256,"line":1793},[254,63476,51926],{"class":264},[254,63478,51941],{"class":51441},[254,63480,51448],{"class":264},[22139,63482,63484],{"id":63483},"_3263-trim方法","3.2.6.3 trim方法",[14,63486,63487],{},[1602,63488],{"alt":174,"src":63489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[14,63491,63492],{},[1602,63493],{"alt":174,"src":63494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[14,63496,63497],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[14,63499,63500],{},"str.trim()",[225,63502,63504],{"id":63503},"_327-环境对象","3.2.7 环境对象",[14,63506,63507],{},[1602,63508],{"alt":174,"src":63509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[14,63511,63512],{},[1602,63513],{"alt":174,"src":63514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[14,63516,63517],{},[1602,63518],{"alt":174,"src":63519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[14,63521,63522],{},"实际函数调用是window.fn()",[14,63524,63525],{},"普通函数里面this指向的是window",[1271,63527,63528,63531,63534],{},[24,63529,63530],{},"在普通函数下，this指向的是window",[24,63532,63533],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[24,63535,63536],{},"箭头函数没有this",[14,63538,63539],{},"粗略记法就是：谁调用，this就指向谁",[14,63541,63542],{},[1602,63543],{"alt":174,"src":63544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[14,63546,63547],{},[1602,63548],{"alt":174,"src":63549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[14,63551,63552],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[14,63554,63555],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[245,63557,63559],{"className":53208,"code":63558,"language":53210,"meta":174,"style":174},"\u003Cbody>\n  \u003Cbutton>点击\u003C\u002Fbutton>\n  \u003Cscript>\n    const button = document.querySelector('button')\n    button.addEventListener('click', function () {\n      \u002F\u002F console.log(this);\n      this.style.color = 'pink'\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[251,63560,63561,63569,63581,63589,63594,63599,63604,63609,63613,63621],{"__ignoreMap":174},[254,63562,63563,63565,63567],{"class":256,"line":257},[254,63564,1174],{"class":264},[254,63566,51941],{"class":51441},[254,63568,51448],{"class":264},[254,63570,63571,63573,63575,63577,63579],{"class":256,"line":175},[254,63572,52285],{"class":264},[254,63574,54028],{"class":51441},[254,63576,54034],{"class":264},[254,63578,54028],{"class":51441},[254,63580,51448],{"class":264},[254,63582,63583,63585,63587],{"class":256,"line":1319},[254,63584,52285],{"class":264},[254,63586,51954],{"class":51441},[254,63588,51448],{"class":264},[254,63590,63591],{"class":256,"line":1334},[254,63592,63593],{"class":264},"    const button = document.querySelector('button')\n",[254,63595,63596],{"class":256,"line":1340},[254,63597,63598],{"class":264},"    button.addEventListener('click', function () {\n",[254,63600,63601],{"class":256,"line":1354},[254,63602,63603],{"class":264},"      \u002F\u002F console.log(this);\n",[254,63605,63606],{"class":256,"line":1360},[254,63607,63608],{"class":264},"      this.style.color = 'pink'\n",[254,63610,63611],{"class":256,"line":1451},[254,63612,33602],{"class":264},[254,63614,63615,63617,63619],{"class":256,"line":1457},[254,63616,52558],{"class":264},[254,63618,51954],{"class":51441},[254,63620,51448],{"class":264},[254,63622,63623,63625,63627],{"class":256,"line":1469},[254,63624,51926],{"class":264},[254,63626,51941],{"class":51441},[254,63628,51448],{"class":264},[225,63630,63632],{"id":63631},"_328-回调函数","3.2.8 回调函数",[14,63634,63635],{},[1602,63636],{"alt":174,"src":63637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[14,63639,63640],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[14,63642,11473],{},[1271,63644,63645,63648,63651],{},[24,63646,63647],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[24,63649,63650],{},"回调函数本质还是函数，只不过把它当成参数使用",[24,63652,63653],{},"使用匿名函数做为回调函数比较常见",[225,63655,63657],{"id":63656},"_329-tab栏切换","3.2.9 tab栏切换",[14,63659,63660],{},[1602,63661],{"alt":174,"src":63662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[245,63664,63666],{"className":50774,"code":63665,"language":50776,"meta":174,"style":174},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\" \u002F>\n  \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" \u002F>\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \u002F>\n  \u003Ctitle>tab栏切换\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      margin: 0;\n      padding: 0;\n    }\n\n    .tab {\n      width: 590px;\n      height: 340px;\n      margin: 20px;\n      border: 1px solid #e4e4e4;\n    }\n\n    .tab-nav {\n      width: 100%;\n      height: 60px;\n      line-height: 60px;\n      display: flex;\n      justify-content: space-between;\n    }\n\n    .tab-nav h3 {\n      font-size: 24px;\n      font-weight: normal;\n      margin-left: 20px;\n    }\n\n    .tab-nav ul {\n      list-style: none;\n      display: flex;\n      justify-content: flex-end;\n    }\n\n    .tab-nav ul li {\n      margin: 0 20px;\n      font-size: 14px;\n    }\n\n    .tab-nav ul li a {\n      text-decoration: none;\n      border-bottom: 2px solid transparent;\n      color: #333;\n    }\n\n    .tab-nav ul li a.active {\n      border-color: #e1251b;\n      color: #e1251b;\n    }\n\n    .tab-content {\n      padding: 0 16px;\n    }\n\n    .tab-content .item {\n      display: none;\n    }\n\n    .tab-content .item.active {\n      display: block;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"tab\">\n    \u003Cdiv class=\"tab-nav\">\n      \u003Ch3>每日特价\u003C\u002Fh3>\n      \u003Cul>\n        \u003Cli>\u003Ca class=\"active\" href=\"javascript:;\">精选\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\">美食\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\">百货\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\">个护\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\">预告\u003C\u002Fa>\u003C\u002Fli>\n      \u003C\u002Ful>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"tab-content\">\n      \u003Cdiv class=\"item active\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n    \u002F\u002F 1.1 获取 a 元素 \n    const as = document.querySelectorAll('.tab-nav a')\n    \u002F\u002F console.log(as) \n    for (let i = 0; i \u003C as.length; i++) {\n      \u002F\u002F console.log(as[i])\n      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n      as[i].addEventListener('mouseenter', function () {\n        \u002F\u002F console.log('鼠标经过')\n        \u002F\u002F 排他思想  \n        \u002F\u002F 干掉别人 移除类active\n        document.querySelector('.tab-nav .active').classList.remove('active')\n        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n        this.classList.add('active')\n\n        \u002F\u002F 下面5个大盒子 一一对应  .item \n        \u002F\u002F 干掉别人\n        document.querySelector('.tab-content .active').classList.remove('active')\n        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n        document.querySelector(`.tab-content .item:nth-child(${i + 1})`).classList.add('active')\n\n      })\n    }\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[251,63667,63668,63678,63692,63696,63704,63718,63738,63758,63771,63779,63785,63795,63805,63809,63813,63820,63833,63846,63858,63874,63878,63882,63889,63901,63913,63925,63935,63945,63949,63953,63962,63974,63985,63997,64001,64005,64013,64023,64033,64043,64047,64051,64061,64075,64087,64091,64095,64107,64118,64135,64145,64149,64153,64168,64179,64189,64193,64197,64204,64219,64223,64227,64235,64245,64249,64253,64262,64272,64276,64284,64292,64296,64304,64319,64334,64347,64355,64389,64416,64443,64470,64497,64505,64513,64528,64565,64600,64635,64670,64705,64713,64721,64729,64734,64739,64759,64764,64793,64798,64803,64821,64826,64831,64836,64858,64863,64879,64883,64888,64893,64914,64919,64948,64952,64957,64961,64969,64977,64981],{"__ignoreMap":174},[254,63669,63670,63672,63674,63676],{"class":256,"line":257},[254,63671,51438],{"class":264},[254,63673,51442],{"class":51441},[254,63675,51445],{"class":2103},[254,63677,51448],{"class":264},[254,63679,63680,63682,63684,63686,63688,63690],{"class":256,"line":175},[254,63681,1174],{"class":264},[254,63683,50776],{"class":51441},[254,63685,51457],{"class":2103},[254,63687,310],{"class":264},[254,63689,51462],{"class":369},[254,63691,51448],{"class":264},[254,63693,63694],{"class":256,"line":1319},[254,63695,2540],{"emptyLinePlaceholder":184},[254,63697,63698,63700,63702],{"class":256,"line":1334},[254,63699,1174],{"class":264},[254,63701,51475],{"class":51441},[254,63703,51448],{"class":264},[254,63705,63706,63708,63710,63712,63714,63716],{"class":256,"line":1340},[254,63707,52285],{"class":264},[254,63709,51485],{"class":51441},[254,63711,51488],{"class":2103},[254,63713,310],{"class":264},[254,63715,51493],{"class":369},[254,63717,59268],{"class":264},[254,63719,63720,63722,63724,63726,63728,63730,63732,63734,63736],{"class":256,"line":1354},[254,63721,52285],{"class":264},[254,63723,51485],{"class":51441},[254,63725,51504],{"class":2103},[254,63727,310],{"class":264},[254,63729,51509],{"class":369},[254,63731,51512],{"class":2103},[254,63733,310],{"class":264},[254,63735,51517],{"class":369},[254,63737,59268],{"class":264},[254,63739,63740,63742,63744,63746,63748,63750,63752,63754,63756],{"class":256,"line":1360},[254,63741,52285],{"class":264},[254,63743,51485],{"class":51441},[254,63745,15061],{"class":2103},[254,63747,310],{"class":264},[254,63749,51532],{"class":369},[254,63751,51512],{"class":2103},[254,63753,310],{"class":264},[254,63755,51539],{"class":369},[254,63757,59268],{"class":264},[254,63759,63760,63762,63764,63767,63769],{"class":256,"line":1451},[254,63761,52285],{"class":264},[254,63763,51548],{"class":51441},[254,63765,63766],{"class":264},">tab栏切换\u003C\u002F",[254,63768,51548],{"class":51441},[254,63770,51448],{"class":264},[254,63772,63773,63775,63777],{"class":256,"line":1457},[254,63774,52285],{"class":264},[254,63776,5267],{"class":51441},[254,63778,51448],{"class":264},[254,63780,63781,63783],{"class":256,"line":1469},[254,63782,6544],{"class":51441},[254,63784,15713],{"class":264},[254,63786,63787,63789,63791,63793],{"class":256,"line":1752},[254,63788,54847],{"class":313},[254,63790,51578],{"class":264},[254,63792,456],{"class":313},[254,63794,1430],{"class":264},[254,63796,63797,63799,63801,63803],{"class":256,"line":1757},[254,63798,54836],{"class":313},[254,63800,51578],{"class":264},[254,63802,456],{"class":313},[254,63804,1430],{"class":264},[254,63806,63807],{"class":256,"line":1763},[254,63808,2327],{"class":264},[254,63810,63811],{"class":256,"line":1768},[254,63812,2540],{"emptyLinePlaceholder":184},[254,63814,63815,63818],{"class":256,"line":1782},[254,63816,63817],{"class":2103},"    .tab",[254,63819,15713],{"class":264},[254,63821,63822,63824,63826,63829,63831],{"class":256,"line":1787},[254,63823,54912],{"class":313},[254,63825,51578],{"class":264},[254,63827,63828],{"class":313},"590",[254,63830,51633],{"class":260},[254,63832,1430],{"class":264},[254,63834,63835,63837,63839,63842,63844],{"class":256,"line":1793},[254,63836,54926],{"class":313},[254,63838,51578],{"class":264},[254,63840,63841],{"class":313},"340",[254,63843,51633],{"class":260},[254,63845,1430],{"class":264},[254,63847,63848,63850,63852,63854,63856],{"class":256,"line":1814},[254,63849,54847],{"class":313},[254,63851,51578],{"class":264},[254,63853,964],{"class":313},[254,63855,51633],{"class":260},[254,63857,1430],{"class":264},[254,63859,63860,63862,63864,63866,63868,63870,63872],{"class":256,"line":1819},[254,63861,62118],{"class":313},[254,63863,51578],{"class":264},[254,63865,482],{"class":313},[254,63867,51633],{"class":260},[254,63869,51662],{"class":313},[254,63871,62385],{"class":313},[254,63873,1430],{"class":264},[254,63875,63876],{"class":256,"line":1833},[254,63877,2327],{"class":264},[254,63879,63880],{"class":256,"line":1838},[254,63881,2540],{"emptyLinePlaceholder":184},[254,63883,63884,63887],{"class":256,"line":1867},[254,63885,63886],{"class":2103},"    .tab-nav",[254,63888,15713],{"class":264},[254,63890,63891,63893,63895,63897,63899],{"class":256,"line":1872},[254,63892,54912],{"class":313},[254,63894,51578],{"class":264},[254,63896,575],{"class":313},[254,63898,592],{"class":260},[254,63900,1430],{"class":264},[254,63902,63903,63905,63907,63909,63911],{"class":256,"line":1889},[254,63904,54926],{"class":313},[254,63906,51578],{"class":264},[254,63908,1171],{"class":313},[254,63910,51633],{"class":260},[254,63912,1430],{"class":264},[254,63914,63915,63917,63919,63921,63923],{"class":256,"line":1894},[254,63916,57500],{"class":313},[254,63918,51578],{"class":264},[254,63920,1171],{"class":313},[254,63922,51633],{"class":260},[254,63924,1430],{"class":264},[254,63926,63927,63929,63931,63933],{"class":256,"line":1899},[254,63928,55150],{"class":313},[254,63930,51578],{"class":264},[254,63932,51618],{"class":313},[254,63934,1430],{"class":264},[254,63936,63937,63939,63941,63943],{"class":256,"line":1904},[254,63938,55161],{"class":313},[254,63940,51578],{"class":264},[254,63942,51809],{"class":313},[254,63944,1430],{"class":264},[254,63946,63947],{"class":256,"line":1918},[254,63948,2327],{"class":264},[254,63950,63951],{"class":256,"line":1923},[254,63952,2540],{"emptyLinePlaceholder":184},[254,63954,63955,63957,63960],{"class":256,"line":2717},[254,63956,63886],{"class":2103},[254,63958,63959],{"class":51441}," h3",[254,63961,15713],{"class":264},[254,63963,63964,63966,63968,63970,63972],{"class":256,"line":2731},[254,63965,55063],{"class":313},[254,63967,51578],{"class":264},[254,63969,1064],{"class":313},[254,63971,51633],{"class":260},[254,63973,1430],{"class":264},[254,63975,63976,63978,63980,63983],{"class":256,"line":2739},[254,63977,62475],{"class":313},[254,63979,51578],{"class":264},[254,63981,63982],{"class":313},"normal",[254,63984,1430],{"class":264},[254,63986,63987,63989,63991,63993,63995],{"class":256,"line":2744},[254,63988,62141],{"class":313},[254,63990,51578],{"class":264},[254,63992,964],{"class":313},[254,63994,51633],{"class":260},[254,63996,1430],{"class":264},[254,63998,63999],{"class":256,"line":2750},[254,64000,2327],{"class":264},[254,64002,64003],{"class":256,"line":2756},[254,64004,2540],{"emptyLinePlaceholder":184},[254,64006,64007,64009,64011],{"class":256,"line":2761},[254,64008,63886],{"class":2103},[254,64010,61433],{"class":51441},[254,64012,15713],{"class":264},[254,64014,64015,64017,64019,64021],{"class":256,"line":8089},[254,64016,54873],{"class":313},[254,64018,51578],{"class":264},[254,64020,54878],{"class":313},[254,64022,1430],{"class":264},[254,64024,64025,64027,64029,64031],{"class":256,"line":8113},[254,64026,55150],{"class":313},[254,64028,51578],{"class":264},[254,64030,51618],{"class":313},[254,64032,1430],{"class":264},[254,64034,64035,64037,64039,64041],{"class":256,"line":8118},[254,64036,55161],{"class":313},[254,64038,51578],{"class":264},[254,64040,51721],{"class":313},[254,64042,1430],{"class":264},[254,64044,64045],{"class":256,"line":8124},[254,64046,2327],{"class":264},[254,64048,64049],{"class":256,"line":8151},[254,64050,2540],{"emptyLinePlaceholder":184},[254,64052,64053,64055,64057,64059],{"class":256,"line":8156},[254,64054,63886],{"class":2103},[254,64056,61433],{"class":51441},[254,64058,55216],{"class":51441},[254,64060,15713],{"class":264},[254,64062,64063,64065,64067,64069,64071,64073],{"class":256,"line":8162},[254,64064,54847],{"class":313},[254,64066,51578],{"class":264},[254,64068,456],{"class":313},[254,64070,9091],{"class":313},[254,64072,51633],{"class":260},[254,64074,1430],{"class":264},[254,64076,64077,64079,64081,64083,64085],{"class":256,"line":8174},[254,64078,55063],{"class":313},[254,64080,51578],{"class":264},[254,64082,813],{"class":313},[254,64084,51633],{"class":260},[254,64086,1430],{"class":264},[254,64088,64089],{"class":256,"line":8186},[254,64090,2327],{"class":264},[254,64092,64093],{"class":256,"line":8198},[254,64094,2540],{"emptyLinePlaceholder":184},[254,64096,64097,64099,64101,64103,64105],{"class":256,"line":9857},[254,64098,63886],{"class":2103},[254,64100,61433],{"class":51441},[254,64102,55216],{"class":51441},[254,64104,1538],{"class":51441},[254,64106,15713],{"class":264},[254,64108,64109,64112,64114,64116],{"class":256,"line":9882},[254,64110,64111],{"class":313},"      text-decoration",[254,64113,51578],{"class":264},[254,64115,54878],{"class":313},[254,64117,1430],{"class":264},[254,64119,64120,64122,64124,64126,64128,64130,64133],{"class":256,"line":9905},[254,64121,62373],{"class":313},[254,64123,51578],{"class":264},[254,64125,342],{"class":313},[254,64127,51633],{"class":260},[254,64129,51662],{"class":313},[254,64131,64132],{"class":313}," transparent",[254,64134,1430],{"class":264},[254,64136,64137,64139,64141,64143],{"class":256,"line":9929},[254,64138,57557],{"class":313},[254,64140,51578],{"class":264},[254,64142,62510],{"class":313},[254,64144,1430],{"class":264},[254,64146,64147],{"class":256,"line":9934},[254,64148,2327],{"class":264},[254,64150,64151],{"class":256,"line":9939},[254,64152,2540],{"emptyLinePlaceholder":184},[254,64154,64155,64157,64159,64161,64163,64166],{"class":256,"line":9944},[254,64156,63886],{"class":2103},[254,64158,61433],{"class":51441},[254,64160,55216],{"class":51441},[254,64162,1538],{"class":51441},[254,64164,64165],{"class":2103},".active",[254,64167,15713],{"class":264},[254,64169,64170,64172,64174,64177],{"class":256,"line":9953},[254,64171,61932],{"class":313},[254,64173,51578],{"class":264},[254,64175,64176],{"class":313},"#e1251b",[254,64178,1430],{"class":264},[254,64180,64181,64183,64185,64187],{"class":256,"line":9958},[254,64182,57557],{"class":313},[254,64184,51578],{"class":264},[254,64186,64176],{"class":313},[254,64188,1430],{"class":264},[254,64190,64191],{"class":256,"line":9964},[254,64192,2327],{"class":264},[254,64194,64195],{"class":256,"line":9985},[254,64196,2540],{"emptyLinePlaceholder":184},[254,64198,64199,64202],{"class":256,"line":9991},[254,64200,64201],{"class":2103},"    .tab-content",[254,64203,15713],{"class":264},[254,64205,64206,64208,64210,64212,64215,64217],{"class":256,"line":10005},[254,64207,54836],{"class":313},[254,64209,51578],{"class":264},[254,64211,456],{"class":313},[254,64213,64214],{"class":313}," 16",[254,64216,51633],{"class":260},[254,64218,1430],{"class":264},[254,64220,64221],{"class":256,"line":10011},[254,64222,2327],{"class":264},[254,64224,64225],{"class":256,"line":10038},[254,64226,2540],{"emptyLinePlaceholder":184},[254,64228,64229,64231,64233],{"class":256,"line":10047},[254,64230,64201],{"class":2103},[254,64232,62315],{"class":2103},[254,64234,15713],{"class":264},[254,64236,64237,64239,64241,64243],{"class":256,"line":10053},[254,64238,55150],{"class":313},[254,64240,51578],{"class":264},[254,64242,54878],{"class":313},[254,64244,1430],{"class":264},[254,64246,64247],{"class":256,"line":10061},[254,64248,2327],{"class":264},[254,64250,64251],{"class":256,"line":10066},[254,64252,2540],{"emptyLinePlaceholder":184},[254,64254,64255,64257,64260],{"class":256,"line":16745},[254,64256,64201],{"class":2103},[254,64258,64259],{"class":2103}," .item.active",[254,64261,15713],{"class":264},[254,64263,64264,64266,64268,64270],{"class":256,"line":16751},[254,64265,55150],{"class":313},[254,64267,51578],{"class":264},[254,64269,61010],{"class":313},[254,64271,1430],{"class":264},[254,64273,64274],{"class":256,"line":16774},[254,64275,2327],{"class":264},[254,64277,64278,64280,64282],{"class":256,"line":16780},[254,64279,52558],{"class":264},[254,64281,5267],{"class":51441},[254,64283,51448],{"class":264},[254,64285,64286,64288,64290],{"class":256,"line":16803},[254,64287,51926],{"class":264},[254,64289,51475],{"class":51441},[254,64291,51448],{"class":264},[254,64293,64294],{"class":256,"line":16817},[254,64295,2540],{"emptyLinePlaceholder":184},[254,64297,64298,64300,64302],{"class":256,"line":16837},[254,64299,1174],{"class":264},[254,64301,51941],{"class":51441},[254,64303,51448],{"class":264},[254,64305,64306,64308,64310,64312,64314,64317],{"class":256,"line":16843},[254,64307,52285],{"class":264},[254,64309,51752],{"class":51441},[254,64311,53627],{"class":2103},[254,64313,310],{"class":264},[254,64315,64316],{"class":369},"\"tab\"",[254,64318,51448],{"class":264},[254,64320,64321,64323,64325,64327,64329,64332],{"class":256,"line":16854},[254,64322,51482],{"class":264},[254,64324,51752],{"class":51441},[254,64326,53627],{"class":2103},[254,64328,310],{"class":264},[254,64330,64331],{"class":369},"\"tab-nav\"",[254,64333,51448],{"class":264},[254,64335,64336,64338,64340,64343,64345],{"class":256,"line":16877},[254,64337,55375],{"class":264},[254,64339,225],{"class":51441},[254,64341,64342],{"class":264},">每日特价\u003C\u002F",[254,64344,225],{"class":51441},[254,64346,51448],{"class":264},[254,64348,64349,64351,64353],{"class":256,"line":16899},[254,64350,55375],{"class":264},[254,64352,1271],{"class":51441},[254,64354,51448],{"class":264},[254,64356,64357,64359,64361,64363,64365,64367,64369,64371,64373,64375,64378,64381,64383,64385,64387],{"class":256,"line":16904},[254,64358,55443],{"class":264},[254,64360,24],{"class":51441},[254,64362,61193],{"class":264},[254,64364,42],{"class":51441},[254,64366,53627],{"class":2103},[254,64368,310],{"class":264},[254,64370,59847],{"class":369},[254,64372,61198],{"class":2103},[254,64374,310],{"class":264},[254,64376,64377],{"class":369},"\"javascript:;\"",[254,64379,64380],{"class":264},">精选\u003C\u002F",[254,64382,42],{"class":51441},[254,64384,55455],{"class":264},[254,64386,24],{"class":51441},[254,64388,51448],{"class":264},[254,64390,64391,64393,64395,64397,64399,64401,64403,64405,64408,64410,64412,64414],{"class":256,"line":16910},[254,64392,55443],{"class":264},[254,64394,24],{"class":51441},[254,64396,61193],{"class":264},[254,64398,42],{"class":51441},[254,64400,61198],{"class":2103},[254,64402,310],{"class":264},[254,64404,64377],{"class":369},[254,64406,64407],{"class":264},">美食\u003C\u002F",[254,64409,42],{"class":51441},[254,64411,55455],{"class":264},[254,64413,24],{"class":51441},[254,64415,51448],{"class":264},[254,64417,64418,64420,64422,64424,64426,64428,64430,64432,64435,64437,64439,64441],{"class":256,"line":16924},[254,64419,55443],{"class":264},[254,64421,24],{"class":51441},[254,64423,61193],{"class":264},[254,64425,42],{"class":51441},[254,64427,61198],{"class":2103},[254,64429,310],{"class":264},[254,64431,64377],{"class":369},[254,64433,64434],{"class":264},">百货\u003C\u002F",[254,64436,42],{"class":51441},[254,64438,55455],{"class":264},[254,64440,24],{"class":51441},[254,64442,51448],{"class":264},[254,64444,64445,64447,64449,64451,64453,64455,64457,64459,64462,64464,64466,64468],{"class":256,"line":16937},[254,64446,55443],{"class":264},[254,64448,24],{"class":51441},[254,64450,61193],{"class":264},[254,64452,42],{"class":51441},[254,64454,61198],{"class":2103},[254,64456,310],{"class":264},[254,64458,64377],{"class":369},[254,64460,64461],{"class":264},">个护\u003C\u002F",[254,64463,42],{"class":51441},[254,64465,55455],{"class":264},[254,64467,24],{"class":51441},[254,64469,51448],{"class":264},[254,64471,64472,64474,64476,64478,64480,64482,64484,64486,64489,64491,64493,64495],{"class":256,"line":16942},[254,64473,55443],{"class":264},[254,64475,24],{"class":51441},[254,64477,61193],{"class":264},[254,64479,42],{"class":51441},[254,64481,61198],{"class":2103},[254,64483,310],{"class":264},[254,64485,64377],{"class":369},[254,64487,64488],{"class":264},">预告\u003C\u002F",[254,64490,42],{"class":51441},[254,64492,55455],{"class":264},[254,64494,24],{"class":51441},[254,64496,51448],{"class":264},[254,64498,64499,64501,64503],{"class":256,"line":16956},[254,64500,55548],{"class":264},[254,64502,1271],{"class":51441},[254,64504,51448],{"class":264},[254,64506,64507,64509,64511],{"class":256,"line":16961},[254,64508,51917],{"class":264},[254,64510,51752],{"class":51441},[254,64512,51448],{"class":264},[254,64514,64515,64517,64519,64521,64523,64526],{"class":256,"line":16967},[254,64516,51482],{"class":264},[254,64518,51752],{"class":51441},[254,64520,53627],{"class":2103},[254,64522,310],{"class":264},[254,64524,64525],{"class":369},"\"tab-content\"",[254,64527,51448],{"class":264},[254,64529,64530,64532,64534,64536,64538,64541,64543,64545,64547,64549,64552,64554,64556,64558,64561,64563],{"class":256,"line":16972},[254,64531,55375],{"class":264},[254,64533,51752],{"class":51441},[254,64535,53627],{"class":2103},[254,64537,310],{"class":264},[254,64539,64540],{"class":369},"\"item active\"",[254,64542,61193],{"class":264},[254,64544,1602],{"class":51441},[254,64546,55380],{"class":2103},[254,64548,310],{"class":264},[254,64550,64551],{"class":369},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[254,64553,55388],{"class":2103},[254,64555,310],{"class":264},[254,64557,7793],{"class":369},[254,64559,64560],{"class":264}," \u002F>\u003C\u002F",[254,64562,51752],{"class":51441},[254,64564,51448],{"class":264},[254,64566,64567,64569,64571,64573,64575,64577,64579,64581,64583,64585,64588,64590,64592,64594,64596,64598],{"class":256,"line":16986},[254,64568,55375],{"class":264},[254,64570,51752],{"class":51441},[254,64572,53627],{"class":2103},[254,64574,310],{"class":264},[254,64576,62764],{"class":369},[254,64578,61193],{"class":264},[254,64580,1602],{"class":51441},[254,64582,55380],{"class":2103},[254,64584,310],{"class":264},[254,64586,64587],{"class":369},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[254,64589,55388],{"class":2103},[254,64591,310],{"class":264},[254,64593,7793],{"class":369},[254,64595,64560],{"class":264},[254,64597,51752],{"class":51441},[254,64599,51448],{"class":264},[254,64601,64602,64604,64606,64608,64610,64612,64614,64616,64618,64620,64623,64625,64627,64629,64631,64633],{"class":256,"line":16991},[254,64603,55375],{"class":264},[254,64605,51752],{"class":51441},[254,64607,53627],{"class":2103},[254,64609,310],{"class":264},[254,64611,62764],{"class":369},[254,64613,61193],{"class":264},[254,64615,1602],{"class":51441},[254,64617,55380],{"class":2103},[254,64619,310],{"class":264},[254,64621,64622],{"class":369},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[254,64624,55388],{"class":2103},[254,64626,310],{"class":264},[254,64628,7793],{"class":369},[254,64630,64560],{"class":264},[254,64632,51752],{"class":51441},[254,64634,51448],{"class":264},[254,64636,64637,64639,64641,64643,64645,64647,64649,64651,64653,64655,64658,64660,64662,64664,64666,64668],{"class":256,"line":16996},[254,64638,55375],{"class":264},[254,64640,51752],{"class":51441},[254,64642,53627],{"class":2103},[254,64644,310],{"class":264},[254,64646,62764],{"class":369},[254,64648,61193],{"class":264},[254,64650,1602],{"class":51441},[254,64652,55380],{"class":2103},[254,64654,310],{"class":264},[254,64656,64657],{"class":369},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[254,64659,55388],{"class":2103},[254,64661,310],{"class":264},[254,64663,7793],{"class":369},[254,64665,64560],{"class":264},[254,64667,51752],{"class":51441},[254,64669,51448],{"class":264},[254,64671,64672,64674,64676,64678,64680,64682,64684,64686,64688,64690,64693,64695,64697,64699,64701,64703],{"class":256,"line":17010},[254,64673,55375],{"class":264},[254,64675,51752],{"class":51441},[254,64677,53627],{"class":2103},[254,64679,310],{"class":264},[254,64681,62764],{"class":369},[254,64683,61193],{"class":264},[254,64685,1602],{"class":51441},[254,64687,55380],{"class":2103},[254,64689,310],{"class":264},[254,64691,64692],{"class":369},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[254,64694,55388],{"class":2103},[254,64696,310],{"class":264},[254,64698,7793],{"class":369},[254,64700,64560],{"class":264},[254,64702,51752],{"class":51441},[254,64704,51448],{"class":264},[254,64706,64707,64709,64711],{"class":256,"line":17022},[254,64708,51917],{"class":264},[254,64710,51752],{"class":51441},[254,64712,51448],{"class":264},[254,64714,64715,64717,64719],{"class":256,"line":17027},[254,64716,52558],{"class":264},[254,64718,51752],{"class":51441},[254,64720,51448],{"class":264},[254,64722,64723,64725,64727],{"class":256,"line":17040},[254,64724,52285],{"class":264},[254,64726,51954],{"class":51441},[254,64728,51448],{"class":264},[254,64730,64731],{"class":256,"line":17045},[254,64732,64733],{"class":323},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[254,64735,64736],{"class":256,"line":17050},[254,64737,64738],{"class":323},"    \u002F\u002F 1.1 获取 a 元素 \n",[254,64740,64741,64743,64746,64748,64750,64752,64754,64757],{"class":256,"line":17055},[254,64742,11362],{"class":260},[254,64744,64745],{"class":313}," as",[254,64747,13705],{"class":260},[254,64749,54537],{"class":264},[254,64751,55822],{"class":2103},[254,64753,265],{"class":264},[254,64755,64756],{"class":369},"'.tab-nav a'",[254,64758,271],{"class":264},[254,64760,64761],{"class":256,"line":17068},[254,64762,64763],{"class":323},"    \u002F\u002F console.log(as) \n",[254,64765,64766,64768,64770,64772,64774,64776,64778,64780,64782,64785,64787,64789,64791],{"class":256,"line":17073},[254,64767,3341],{"class":260},[254,64769,1798],{"class":264},[254,64771,51988],{"class":260},[254,64773,9579],{"class":264},[254,64775,310],{"class":260},[254,64777,4233],{"class":313},[254,64779,9586],{"class":264},[254,64781,1174],{"class":260},[254,64783,64784],{"class":264}," as.",[254,64786,52109],{"class":313},[254,64788,3354],{"class":264},[254,64790,2432],{"class":260},[254,64792,12583],{"class":264},[254,64794,64795],{"class":256,"line":32774},[254,64796,64797],{"class":323},"      \u002F\u002F console.log(as[i])\n",[254,64799,64800],{"class":256,"line":32780},[254,64801,64802],{"class":323},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[254,64804,64805,64808,64810,64812,64815,64817,64819],{"class":256,"line":32786},[254,64806,64807],{"class":264},"      as[i].",[254,64809,57954],{"class":2103},[254,64811,265],{"class":264},[254,64813,64814],{"class":369},"'mouseenter'",[254,64816,12576],{"class":264},[254,64818,54590],{"class":260},[254,64820,54593],{"class":264},[254,64822,64823],{"class":256,"line":32792},[254,64824,64825],{"class":323},"        \u002F\u002F console.log('鼠标经过')\n",[254,64827,64828],{"class":256,"line":32798},[254,64829,64830],{"class":323},"        \u002F\u002F 排他思想  \n",[254,64832,64833],{"class":256,"line":32809},[254,64834,64835],{"class":323},"        \u002F\u002F 干掉别人 移除类active\n",[254,64837,64838,64840,64842,64844,64847,64849,64851,64853,64856],{"class":256,"line":32815},[254,64839,52066],{"class":264},[254,64841,54540],{"class":2103},[254,64843,265],{"class":264},[254,64845,64846],{"class":369},"'.tab-nav .active'",[254,64848,57144],{"class":264},[254,64850,57147],{"class":2103},[254,64852,265],{"class":264},[254,64854,64855],{"class":369},"'active'",[254,64857,271],{"class":264},[254,64859,64860],{"class":256,"line":32835},[254,64861,64862],{"class":323},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[254,64864,64865,64868,64871,64873,64875,64877],{"class":256,"line":32841},[254,64866,64867],{"class":313},"        this",[254,64869,64870],{"class":264},".classList.",[254,64872,5475],{"class":2103},[254,64874,265],{"class":264},[254,64876,64855],{"class":369},[254,64878,271],{"class":264},[254,64880,64881],{"class":256,"line":32852},[254,64882,2540],{"emptyLinePlaceholder":184},[254,64884,64885],{"class":256,"line":32858},[254,64886,64887],{"class":323},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[254,64889,64890],{"class":256,"line":32864},[254,64891,64892],{"class":323},"        \u002F\u002F 干掉别人\n",[254,64894,64895,64897,64899,64901,64904,64906,64908,64910,64912],{"class":256,"line":32870},[254,64896,52066],{"class":264},[254,64898,54540],{"class":2103},[254,64900,265],{"class":264},[254,64902,64903],{"class":369},"'.tab-content .active'",[254,64905,57144],{"class":264},[254,64907,57147],{"class":2103},[254,64909,265],{"class":264},[254,64911,64855],{"class":369},[254,64913,271],{"class":264},[254,64915,64916],{"class":256,"line":32876},[254,64917,64918],{"class":323},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[254,64920,64921,64923,64925,64927,64930,64932,64934,64936,64938,64940,64942,64944,64946],{"class":256,"line":32882},[254,64922,52066],{"class":264},[254,64924,54540],{"class":2103},[254,64926,265],{"class":264},[254,64928,64929],{"class":369},"`.tab-content .item:nth-child(${",[254,64931,705],{"class":264},[254,64933,45707],{"class":260},[254,64935,25259],{"class":313},[254,64937,57173],{"class":369},[254,64939,57144],{"class":264},[254,64941,5475],{"class":2103},[254,64943,265],{"class":264},[254,64945,64855],{"class":369},[254,64947,271],{"class":264},[254,64949,64950],{"class":256,"line":32888},[254,64951,2540],{"emptyLinePlaceholder":184},[254,64953,64954],{"class":256,"line":32894},[254,64955,64956],{"class":264},"      })\n",[254,64958,64959],{"class":256,"line":32914},[254,64960,2327],{"class":264},[254,64962,64963,64965,64967],{"class":256,"line":32920},[254,64964,52558],{"class":264},[254,64966,51954],{"class":51441},[254,64968,51448],{"class":264},[254,64970,64971,64973,64975],{"class":256,"line":32936},[254,64972,51926],{"class":264},[254,64974,51941],{"class":51441},[254,64976,51448],{"class":264},[254,64978,64979],{"class":256,"line":32942},[254,64980,2540],{"emptyLinePlaceholder":184},[254,64982,64983,64985,64987],{"class":256,"line":32956},[254,64984,51926],{"class":264},[254,64986,50776],{"class":51441},[254,64988,51448],{"class":264},[14,64990,64991],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[14,64993,64994],{},"在监听事件中，this指向的就是他的调用者",[14,64996,64997],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[14,64999,53861],{},[14,65001,65002],{},"(function () {",[14,65004,65005],{},"const list = document.querySelector('.xtx-elevator-list')",[14,65007,65008],{},"list.addEventListener('click', function (e) {",[14,65010,65011],{},"if (e.target.tagName === 'A') {",[14,65013,65014],{},"\u002F\u002F 排他思想",[14,65016,65017],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[14,65019,65020],{},"const old = document.querySelector('.xtx-elevator-list .active')",[14,65022,65023],{},"\u002F\u002F console.log(old);",[14,65025,65026],{},"\u002F\u002F 判断",[14,65028,65029],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[14,65031,65032],{},"if (old) old.classList.remove('active')",[14,65034,65035],{},"e.target.classList.add('active')",[14,65037,1210],{},[14,65039,52605],{},[14,65041,65042],{},"})();",[225,65044,65046],{"id":65045},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[245,65048,65050],{"className":50774,"code":65049,"language":50776,"meta":174,"style":174},"\u003C!DOCTYPE html>\n\n\u003Chtml>\n\n\u003Chead lang=\"en\">\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Ctitle>\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      margin: 0;\n      padding: 0;\n    }\n\n    table {\n      border-collapse: collapse;\n      border-spacing: 0;\n      border: 1px solid #c0c0c0;\n      width: 500px;\n      margin: 100px auto;\n      text-align: center;\n    }\n\n    th {\n      background-color: #09c;\n      font: bold 16px \"微软雅黑\";\n      color: #fff;\n      height: 24px;\n    }\n\n    td {\n      border: 1px solid #d0d0d0;\n      color: #404060;\n      padding: 10px;\n    }\n\n    .allCheck {\n      width: 80px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Ctable>\n    \u003Ctr>\n      \u003Cth class=\"allCheck\">\n        \u003Cinput type=\"checkbox\" name=\"\" id=\"checkAll\"> \u003Cspan class=\"all\">全选\u003C\u002Fspan>\n      \u003C\u002Fth>\n      \u003Cth>商品\u003C\u002Fth>\n      \u003Cth>商家\u003C\u002Fth>\n      \u003Cth>价格\u003C\u002Fth>\n    \u003C\u002Ftr>\n    \u003Ctr>\n      \u003Ctd>\n        \u003Cinput type=\"checkbox\" name=\"check\" class=\"ck\">\n      \u003C\u002Ftd>\n      \u003Ctd>小米手机\u003C\u002Ftd>\n      \u003Ctd>小米\u003C\u002Ftd>\n      \u003Ctd>￥1999\u003C\u002Ftd>\n    \u003C\u002Ftr>\n    \u003Ctr>\n      \u003Ctd>\n        \u003Cinput type=\"checkbox\" name=\"check\" class=\"ck\">\n      \u003C\u002Ftd>\n      \u003Ctd>小米净水器\u003C\u002Ftd>\n      \u003Ctd>小米\u003C\u002Ftd>\n      \u003Ctd>￥4999\u003C\u002Ftd>\n    \u003C\u002Ftr>\n    \u003Ctr>\n      \u003Ctd>\n        \u003Cinput type=\"checkbox\" name=\"check\" class=\"ck\">\n      \u003C\u002Ftd>\n      \u003Ctd>小米电视\u003C\u002Ftd>\n      \u003Ctd>小米\u003C\u002Ftd>\n      \u003Ctd>￥5999\u003C\u002Ftd>\n    \u003C\u002Ftr>\n  \u003C\u002Ftable>\n  \u003Cscript>\n    \u002F\u002F 1. 获取大复选框\n    const checkAll = document.querySelector('#checkAll')\n    \u002F\u002F 2. 获取所有的小复选框\n    const cks = document.querySelectorAll('.ck')\n    \u002F\u002F 3. 点击大复选框  注册事件\n    checkAll.addEventListener('click', function () {\n      \u002F\u002F 得到当前大复选框的选中状态\n      \u002F\u002F console.log(checkAll.checked)  \u002F\u002F 得到 是 true 或者是 false\n      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n      for (let i = 0; i \u003C cks.length; i++) {\n        cks[i].checked = this.checked\n      }\n    })\n    \u002F\u002F 5. 小复选框控制大复选框\n\n    for (let i = 0; i \u003C cks.length; i++) {\n      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n      cks[i].addEventListener('click', function () {\n        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n        checkAll.checked = document.querySelectorAll('.ck:checked').length === cks.length\n      })\n    }\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[251,65051,65052,65062,65066,65074,65078,65092,65106,65118,65126,65132,65142,65152,65156,65160,65167,65179,65190,65207,65220,65234,65244,65248,65252,65259,65270,65288,65298,65310,65314,65318,65325,65342,65353,65365,65369,65373,65380,65392,65396,65404,65412,65416,65424,65432,65440,65455,65499,65507,65520,65533,65546,65554,65562,65570,65598,65606,65618,65631,65644,65652,65660,65668,65694,65702,65715,65727,65740,65748,65756,65764,65790,65798,65811,65823,65836,65844,65852,65860,65865,65885,65890,65910,65915,65932,65937,65945,65950,65979,65992,65996,66000,66005,66009,66037,66042,66059,66064,66069,66074,66079,66105,66109,66113,66121,66129,66133],{"__ignoreMap":174},[254,65053,65054,65056,65058,65060],{"class":256,"line":257},[254,65055,51438],{"class":264},[254,65057,51442],{"class":51441},[254,65059,51445],{"class":2103},[254,65061,51448],{"class":264},[254,65063,65064],{"class":256,"line":175},[254,65065,2540],{"emptyLinePlaceholder":184},[254,65067,65068,65070,65072],{"class":256,"line":1319},[254,65069,1174],{"class":264},[254,65071,50776],{"class":51441},[254,65073,51448],{"class":264},[254,65075,65076],{"class":256,"line":1334},[254,65077,2540],{"emptyLinePlaceholder":184},[254,65079,65080,65082,65084,65086,65088,65090],{"class":256,"line":1340},[254,65081,1174],{"class":264},[254,65083,51475],{"class":51441},[254,65085,51457],{"class":2103},[254,65087,310],{"class":264},[254,65089,51462],{"class":369},[254,65091,51448],{"class":264},[254,65093,65094,65096,65098,65100,65102,65104],{"class":256,"line":1354},[254,65095,52285],{"class":264},[254,65097,51485],{"class":51441},[254,65099,51488],{"class":2103},[254,65101,310],{"class":264},[254,65103,51493],{"class":369},[254,65105,51448],{"class":264},[254,65107,65108,65110,65112,65114,65116],{"class":256,"line":1360},[254,65109,52285],{"class":264},[254,65111,51548],{"class":51441},[254,65113,55455],{"class":264},[254,65115,51548],{"class":51441},[254,65117,51448],{"class":264},[254,65119,65120,65122,65124],{"class":256,"line":1451},[254,65121,52285],{"class":264},[254,65123,5267],{"class":51441},[254,65125,51448],{"class":264},[254,65127,65128,65130],{"class":256,"line":1457},[254,65129,6544],{"class":51441},[254,65131,15713],{"class":264},[254,65133,65134,65136,65138,65140],{"class":256,"line":1469},[254,65135,54847],{"class":313},[254,65137,51578],{"class":264},[254,65139,456],{"class":313},[254,65141,1430],{"class":264},[254,65143,65144,65146,65148,65150],{"class":256,"line":1752},[254,65145,54836],{"class":313},[254,65147,51578],{"class":264},[254,65149,456],{"class":313},[254,65151,1430],{"class":264},[254,65153,65154],{"class":256,"line":1757},[254,65155,2327],{"class":264},[254,65157,65158],{"class":256,"line":1763},[254,65159,2540],{"emptyLinePlaceholder":184},[254,65161,65162,65165],{"class":256,"line":1768},[254,65163,65164],{"class":51441},"    table",[254,65166,15713],{"class":264},[254,65168,65169,65172,65174,65177],{"class":256,"line":1782},[254,65170,65171],{"class":313},"      border-collapse",[254,65173,51578],{"class":264},[254,65175,65176],{"class":313},"collapse",[254,65178,1430],{"class":264},[254,65180,65181,65184,65186,65188],{"class":256,"line":1787},[254,65182,65183],{"class":313},"      border-spacing",[254,65185,51578],{"class":264},[254,65187,456],{"class":313},[254,65189,1430],{"class":264},[254,65191,65192,65194,65196,65198,65200,65202,65205],{"class":256,"line":1793},[254,65193,62118],{"class":313},[254,65195,51578],{"class":264},[254,65197,482],{"class":313},[254,65199,51633],{"class":260},[254,65201,51662],{"class":313},[254,65203,65204],{"class":313}," #c0c0c0",[254,65206,1430],{"class":264},[254,65208,65209,65211,65213,65216,65218],{"class":256,"line":1814},[254,65210,54912],{"class":313},[254,65212,51578],{"class":264},[254,65214,65215],{"class":313},"500",[254,65217,51633],{"class":260},[254,65219,1430],{"class":264},[254,65221,65222,65224,65226,65228,65230,65232],{"class":256,"line":1819},[254,65223,54847],{"class":313},[254,65225,51578],{"class":264},[254,65227,575],{"class":313},[254,65229,51633],{"class":260},[254,65231,51697],{"class":313},[254,65233,1430],{"class":264},[254,65235,65236,65238,65240,65242],{"class":256,"line":1833},[254,65237,57427],{"class":313},[254,65239,51578],{"class":264},[254,65241,51733],{"class":313},[254,65243,1430],{"class":264},[254,65245,65246],{"class":256,"line":1838},[254,65247,2327],{"class":264},[254,65249,65250],{"class":256,"line":1867},[254,65251,2540],{"emptyLinePlaceholder":184},[254,65253,65254,65257],{"class":256,"line":1872},[254,65255,65256],{"class":51441},"    th",[254,65258,15713],{"class":264},[254,65260,65261,65263,65265,65268],{"class":256,"line":1889},[254,65262,55025],{"class":313},[254,65264,51578],{"class":264},[254,65266,65267],{"class":313},"#09c",[254,65269,1430],{"class":264},[254,65271,65272,65275,65277,65279,65281,65283,65286],{"class":256,"line":1894},[254,65273,65274],{"class":313},"      font",[254,65276,51578],{"class":264},[254,65278,62480],{"class":313},[254,65280,64214],{"class":313},[254,65282,51633],{"class":260},[254,65284,65285],{"class":369}," \"微软雅黑\"",[254,65287,1430],{"class":264},[254,65289,65290,65292,65294,65296],{"class":256,"line":1899},[254,65291,57557],{"class":313},[254,65293,51578],{"class":264},[254,65295,60983],{"class":313},[254,65297,1430],{"class":264},[254,65299,65300,65302,65304,65306,65308],{"class":256,"line":1904},[254,65301,54926],{"class":313},[254,65303,51578],{"class":264},[254,65305,1064],{"class":313},[254,65307,51633],{"class":260},[254,65309,1430],{"class":264},[254,65311,65312],{"class":256,"line":1918},[254,65313,2327],{"class":264},[254,65315,65316],{"class":256,"line":1923},[254,65317,2540],{"emptyLinePlaceholder":184},[254,65319,65320,65323],{"class":256,"line":2717},[254,65321,65322],{"class":51441},"    td",[254,65324,15713],{"class":264},[254,65326,65327,65329,65331,65333,65335,65337,65340],{"class":256,"line":2731},[254,65328,62118],{"class":313},[254,65330,51578],{"class":264},[254,65332,482],{"class":313},[254,65334,51633],{"class":260},[254,65336,51662],{"class":313},[254,65338,65339],{"class":313}," #d0d0d0",[254,65341,1430],{"class":264},[254,65343,65344,65346,65348,65351],{"class":256,"line":2739},[254,65345,57557],{"class":313},[254,65347,51578],{"class":264},[254,65349,65350],{"class":313},"#404060",[254,65352,1430],{"class":264},[254,65354,65355,65357,65359,65361,65363],{"class":256,"line":2744},[254,65356,54836],{"class":313},[254,65358,51578],{"class":264},[254,65360,710],{"class":313},[254,65362,51633],{"class":260},[254,65364,1430],{"class":264},[254,65366,65367],{"class":256,"line":2750},[254,65368,2327],{"class":264},[254,65370,65371],{"class":256,"line":2756},[254,65372,2540],{"emptyLinePlaceholder":184},[254,65374,65375,65378],{"class":256,"line":2761},[254,65376,65377],{"class":2103},"    .allCheck",[254,65379,15713],{"class":264},[254,65381,65382,65384,65386,65388,65390],{"class":256,"line":8089},[254,65383,54912],{"class":313},[254,65385,51578],{"class":264},[254,65387,876],{"class":313},[254,65389,51633],{"class":260},[254,65391,1430],{"class":264},[254,65393,65394],{"class":256,"line":8113},[254,65395,2327],{"class":264},[254,65397,65398,65400,65402],{"class":256,"line":8118},[254,65399,52558],{"class":264},[254,65401,5267],{"class":51441},[254,65403,51448],{"class":264},[254,65405,65406,65408,65410],{"class":256,"line":8124},[254,65407,51926],{"class":264},[254,65409,51475],{"class":51441},[254,65411,51448],{"class":264},[254,65413,65414],{"class":256,"line":8151},[254,65415,2540],{"emptyLinePlaceholder":184},[254,65417,65418,65420,65422],{"class":256,"line":8156},[254,65419,1174],{"class":264},[254,65421,51941],{"class":51441},[254,65423,51448],{"class":264},[254,65425,65426,65428,65430],{"class":256,"line":8162},[254,65427,52285],{"class":264},[254,65429,402],{"class":51441},[254,65431,51448],{"class":264},[254,65433,65434,65436,65438],{"class":256,"line":8174},[254,65435,51482],{"class":264},[254,65437,408],{"class":51441},[254,65439,51448],{"class":264},[254,65441,65442,65444,65446,65448,65450,65453],{"class":256,"line":8186},[254,65443,55375],{"class":264},[254,65445,411],{"class":51441},[254,65447,53627],{"class":2103},[254,65449,310],{"class":264},[254,65451,65452],{"class":369},"\"allCheck\"",[254,65454,51448],{"class":264},[254,65456,65457,65459,65461,65463,65465,65467,65469,65471,65473,65475,65477,65480,65483,65485,65487,65489,65492,65495,65497],{"class":256,"line":8198},[254,65458,55443],{"class":264},[254,65460,53962],{"class":51441},[254,65462,53965],{"class":2103},[254,65464,310],{"class":264},[254,65466,53970],{"class":369},[254,65468,15061],{"class":2103},[254,65470,310],{"class":264},[254,65472,7793],{"class":369},[254,65474,15100],{"class":2103},[254,65476,310],{"class":264},[254,65478,65479],{"class":369},"\"checkAll\"",[254,65481,65482],{"class":264},"> \u003C",[254,65484,254],{"class":51441},[254,65486,53627],{"class":2103},[254,65488,310],{"class":264},[254,65490,65491],{"class":369},"\"all\"",[254,65493,65494],{"class":264},">全选\u003C\u002F",[254,65496,254],{"class":51441},[254,65498,51448],{"class":264},[254,65500,65501,65503,65505],{"class":256,"line":9857},[254,65502,55548],{"class":264},[254,65504,411],{"class":51441},[254,65506,51448],{"class":264},[254,65508,65509,65511,65513,65516,65518],{"class":256,"line":9882},[254,65510,55375],{"class":264},[254,65512,411],{"class":51441},[254,65514,65515],{"class":264},">商品\u003C\u002F",[254,65517,411],{"class":51441},[254,65519,51448],{"class":264},[254,65521,65522,65524,65526,65529,65531],{"class":256,"line":9905},[254,65523,55375],{"class":264},[254,65525,411],{"class":51441},[254,65527,65528],{"class":264},">商家\u003C\u002F",[254,65530,411],{"class":51441},[254,65532,51448],{"class":264},[254,65534,65535,65537,65539,65542,65544],{"class":256,"line":9929},[254,65536,55375],{"class":264},[254,65538,411],{"class":51441},[254,65540,65541],{"class":264},">价格\u003C\u002F",[254,65543,411],{"class":51441},[254,65545,51448],{"class":264},[254,65547,65548,65550,65552],{"class":256,"line":9934},[254,65549,51917],{"class":264},[254,65551,408],{"class":51441},[254,65553,51448],{"class":264},[254,65555,65556,65558,65560],{"class":256,"line":9939},[254,65557,51482],{"class":264},[254,65559,408],{"class":51441},[254,65561,51448],{"class":264},[254,65563,65564,65566,65568],{"class":256,"line":9944},[254,65565,55375],{"class":264},[254,65567,454],{"class":51441},[254,65569,51448],{"class":264},[254,65571,65572,65574,65576,65578,65580,65582,65584,65586,65589,65591,65593,65596],{"class":256,"line":9953},[254,65573,55443],{"class":264},[254,65575,53962],{"class":51441},[254,65577,53965],{"class":2103},[254,65579,310],{"class":264},[254,65581,53970],{"class":369},[254,65583,15061],{"class":2103},[254,65585,310],{"class":264},[254,65587,65588],{"class":369},"\"check\"",[254,65590,53627],{"class":2103},[254,65592,310],{"class":264},[254,65594,65595],{"class":369},"\"ck\"",[254,65597,51448],{"class":264},[254,65599,65600,65602,65604],{"class":256,"line":9958},[254,65601,55548],{"class":264},[254,65603,454],{"class":51441},[254,65605,51448],{"class":264},[254,65607,65608,65610,65612,65614,65616],{"class":256,"line":9964},[254,65609,55375],{"class":264},[254,65611,454],{"class":51441},[254,65613,61314],{"class":264},[254,65615,454],{"class":51441},[254,65617,51448],{"class":264},[254,65619,65620,65622,65624,65627,65629],{"class":256,"line":9985},[254,65621,55375],{"class":264},[254,65623,454],{"class":51441},[254,65625,65626],{"class":264},">小米\u003C\u002F",[254,65628,454],{"class":51441},[254,65630,51448],{"class":264},[254,65632,65633,65635,65637,65640,65642],{"class":256,"line":9991},[254,65634,55375],{"class":264},[254,65636,454],{"class":51441},[254,65638,65639],{"class":264},">￥1999\u003C\u002F",[254,65641,454],{"class":51441},[254,65643,51448],{"class":264},[254,65645,65646,65648,65650],{"class":256,"line":10005},[254,65647,51917],{"class":264},[254,65649,408],{"class":51441},[254,65651,51448],{"class":264},[254,65653,65654,65656,65658],{"class":256,"line":10011},[254,65655,51482],{"class":264},[254,65657,408],{"class":51441},[254,65659,51448],{"class":264},[254,65661,65662,65664,65666],{"class":256,"line":10038},[254,65663,55375],{"class":264},[254,65665,454],{"class":51441},[254,65667,51448],{"class":264},[254,65669,65670,65672,65674,65676,65678,65680,65682,65684,65686,65688,65690,65692],{"class":256,"line":10047},[254,65671,55443],{"class":264},[254,65673,53962],{"class":51441},[254,65675,53965],{"class":2103},[254,65677,310],{"class":264},[254,65679,53970],{"class":369},[254,65681,15061],{"class":2103},[254,65683,310],{"class":264},[254,65685,65588],{"class":369},[254,65687,53627],{"class":2103},[254,65689,310],{"class":264},[254,65691,65595],{"class":369},[254,65693,51448],{"class":264},[254,65695,65696,65698,65700],{"class":256,"line":10053},[254,65697,55548],{"class":264},[254,65699,454],{"class":51441},[254,65701,51448],{"class":264},[254,65703,65704,65706,65708,65711,65713],{"class":256,"line":10061},[254,65705,55375],{"class":264},[254,65707,454],{"class":51441},[254,65709,65710],{"class":264},">小米净水器\u003C\u002F",[254,65712,454],{"class":51441},[254,65714,51448],{"class":264},[254,65716,65717,65719,65721,65723,65725],{"class":256,"line":10066},[254,65718,55375],{"class":264},[254,65720,454],{"class":51441},[254,65722,65626],{"class":264},[254,65724,454],{"class":51441},[254,65726,51448],{"class":264},[254,65728,65729,65731,65733,65736,65738],{"class":256,"line":16745},[254,65730,55375],{"class":264},[254,65732,454],{"class":51441},[254,65734,65735],{"class":264},">￥4999\u003C\u002F",[254,65737,454],{"class":51441},[254,65739,51448],{"class":264},[254,65741,65742,65744,65746],{"class":256,"line":16751},[254,65743,51917],{"class":264},[254,65745,408],{"class":51441},[254,65747,51448],{"class":264},[254,65749,65750,65752,65754],{"class":256,"line":16774},[254,65751,51482],{"class":264},[254,65753,408],{"class":51441},[254,65755,51448],{"class":264},[254,65757,65758,65760,65762],{"class":256,"line":16780},[254,65759,55375],{"class":264},[254,65761,454],{"class":51441},[254,65763,51448],{"class":264},[254,65765,65766,65768,65770,65772,65774,65776,65778,65780,65782,65784,65786,65788],{"class":256,"line":16803},[254,65767,55443],{"class":264},[254,65769,53962],{"class":51441},[254,65771,53965],{"class":2103},[254,65773,310],{"class":264},[254,65775,53970],{"class":369},[254,65777,15061],{"class":2103},[254,65779,310],{"class":264},[254,65781,65588],{"class":369},[254,65783,53627],{"class":2103},[254,65785,310],{"class":264},[254,65787,65595],{"class":369},[254,65789,51448],{"class":264},[254,65791,65792,65794,65796],{"class":256,"line":16817},[254,65793,55548],{"class":264},[254,65795,454],{"class":51441},[254,65797,51448],{"class":264},[254,65799,65800,65802,65804,65807,65809],{"class":256,"line":16837},[254,65801,55375],{"class":264},[254,65803,454],{"class":51441},[254,65805,65806],{"class":264},">小米电视\u003C\u002F",[254,65808,454],{"class":51441},[254,65810,51448],{"class":264},[254,65812,65813,65815,65817,65819,65821],{"class":256,"line":16843},[254,65814,55375],{"class":264},[254,65816,454],{"class":51441},[254,65818,65626],{"class":264},[254,65820,454],{"class":51441},[254,65822,51448],{"class":264},[254,65824,65825,65827,65829,65832,65834],{"class":256,"line":16854},[254,65826,55375],{"class":264},[254,65828,454],{"class":51441},[254,65830,65831],{"class":264},">￥5999\u003C\u002F",[254,65833,454],{"class":51441},[254,65835,51448],{"class":264},[254,65837,65838,65840,65842],{"class":256,"line":16877},[254,65839,51917],{"class":264},[254,65841,408],{"class":51441},[254,65843,51448],{"class":264},[254,65845,65846,65848,65850],{"class":256,"line":16899},[254,65847,52558],{"class":264},[254,65849,402],{"class":51441},[254,65851,51448],{"class":264},[254,65853,65854,65856,65858],{"class":256,"line":16904},[254,65855,52285],{"class":264},[254,65857,51954],{"class":51441},[254,65859,51448],{"class":264},[254,65861,65862],{"class":256,"line":16910},[254,65863,65864],{"class":323},"    \u002F\u002F 1. 获取大复选框\n",[254,65866,65867,65869,65872,65874,65876,65878,65880,65883],{"class":256,"line":16924},[254,65868,11362],{"class":260},[254,65870,65871],{"class":313}," checkAll",[254,65873,13705],{"class":260},[254,65875,54537],{"class":264},[254,65877,54540],{"class":2103},[254,65879,265],{"class":264},[254,65881,65882],{"class":369},"'#checkAll'",[254,65884,271],{"class":264},[254,65886,65887],{"class":256,"line":16937},[254,65888,65889],{"class":323},"    \u002F\u002F 2. 获取所有的小复选框\n",[254,65891,65892,65894,65897,65899,65901,65903,65905,65908],{"class":256,"line":16942},[254,65893,11362],{"class":260},[254,65895,65896],{"class":313}," cks",[254,65898,13705],{"class":260},[254,65900,54537],{"class":264},[254,65902,55822],{"class":2103},[254,65904,265],{"class":264},[254,65906,65907],{"class":369},"'.ck'",[254,65909,271],{"class":264},[254,65911,65912],{"class":256,"line":16956},[254,65913,65914],{"class":323},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[254,65916,65917,65920,65922,65924,65926,65928,65930],{"class":256,"line":16961},[254,65918,65919],{"class":264},"    checkAll.",[254,65921,57954],{"class":2103},[254,65923,265],{"class":264},[254,65925,57959],{"class":369},[254,65927,12576],{"class":264},[254,65929,54590],{"class":260},[254,65931,54593],{"class":264},[254,65933,65934],{"class":256,"line":16967},[254,65935,65936],{"class":323},"      \u002F\u002F 得到当前大复选框的选中状态\n",[254,65938,65939,65942],{"class":256,"line":16972},[254,65940,65941],{"class":323},"      \u002F\u002F console.log(checkAll.checked)",[254,65943,65944],{"class":323},"  \u002F\u002F 得到 是 true 或者是 false\n",[254,65946,65947],{"class":256,"line":16986},[254,65948,65949],{"class":323},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[254,65951,65952,65954,65956,65958,65960,65962,65964,65966,65968,65971,65973,65975,65977],{"class":256,"line":16991},[254,65953,52425],{"class":260},[254,65955,1798],{"class":264},[254,65957,51988],{"class":260},[254,65959,9579],{"class":264},[254,65961,310],{"class":260},[254,65963,4233],{"class":313},[254,65965,9586],{"class":264},[254,65967,1174],{"class":260},[254,65969,65970],{"class":264}," cks.",[254,65972,52109],{"class":313},[254,65974,3354],{"class":264},[254,65976,2432],{"class":260},[254,65978,12583],{"class":264},[254,65980,65981,65984,65986,65989],{"class":256,"line":16996},[254,65982,65983],{"class":264},"        cks[i].checked ",[254,65985,310],{"class":260},[254,65987,65988],{"class":313}," this",[254,65990,65991],{"class":264},".checked\n",[254,65993,65994],{"class":256,"line":17010},[254,65995,52539],{"class":264},[254,65997,65998],{"class":256,"line":17022},[254,65999,33602],{"class":264},[254,66001,66002],{"class":256,"line":17027},[254,66003,66004],{"class":323},"    \u002F\u002F 5. 小复选框控制大复选框\n",[254,66006,66007],{"class":256,"line":17040},[254,66008,2540],{"emptyLinePlaceholder":184},[254,66010,66011,66013,66015,66017,66019,66021,66023,66025,66027,66029,66031,66033,66035],{"class":256,"line":17045},[254,66012,3341],{"class":260},[254,66014,1798],{"class":264},[254,66016,51988],{"class":260},[254,66018,9579],{"class":264},[254,66020,310],{"class":260},[254,66022,4233],{"class":313},[254,66024,9586],{"class":264},[254,66026,1174],{"class":260},[254,66028,65970],{"class":264},[254,66030,52109],{"class":313},[254,66032,3354],{"class":264},[254,66034,2432],{"class":260},[254,66036,12583],{"class":264},[254,66038,66039],{"class":256,"line":17050},[254,66040,66041],{"class":323},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[254,66043,66044,66047,66049,66051,66053,66055,66057],{"class":256,"line":17055},[254,66045,66046],{"class":264},"      cks[i].",[254,66048,57954],{"class":2103},[254,66050,265],{"class":264},[254,66052,57959],{"class":369},[254,66054,12576],{"class":264},[254,66056,54590],{"class":260},[254,66058,54593],{"class":264},[254,66060,66061],{"class":256,"line":17068},[254,66062,66063],{"class":323},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[254,66065,66066],{"class":256,"line":17073},[254,66067,66068],{"class":323},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[254,66070,66071],{"class":256,"line":32774},[254,66072,66073],{"class":323},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[254,66075,66076],{"class":256,"line":32780},[254,66077,66078],{"class":323},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[254,66080,66081,66084,66086,66088,66090,66092,66095,66097,66099,66101,66103],{"class":256,"line":32786},[254,66082,66083],{"class":264},"        checkAll.checked ",[254,66085,310],{"class":260},[254,66087,54537],{"class":264},[254,66089,55822],{"class":2103},[254,66091,265],{"class":264},[254,66093,66094],{"class":369},"'.ck:checked'",[254,66096,30967],{"class":264},[254,66098,52109],{"class":313},[254,66100,58047],{"class":260},[254,66102,65970],{"class":264},[254,66104,55972],{"class":313},[254,66106,66107],{"class":256,"line":32792},[254,66108,64956],{"class":264},[254,66110,66111],{"class":256,"line":32798},[254,66112,2327],{"class":264},[254,66114,66115,66117,66119],{"class":256,"line":32809},[254,66116,52558],{"class":264},[254,66118,51954],{"class":51441},[254,66120,51448],{"class":264},[254,66122,66123,66125,66127],{"class":256,"line":32815},[254,66124,51926],{"class":264},[254,66126,51941],{"class":51441},[254,66128,51448],{"class":264},[254,66130,66131],{"class":256,"line":32835},[254,66132,2540],{"emptyLinePlaceholder":184},[254,66134,66135,66137,66139],{"class":256,"line":32841},[254,66136,51926],{"class":264},[254,66138,50776],{"class":51441},[254,66140,51448],{"class":264},[14,66142,66143],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[14,66145,66146],{},"用好之间比较得到的布尔值！！！",[14,66148,66149,66150,66153,66154,1798,66157,848,66159,66162],{},"在 JS 里访问的时候，",[251,66151,66152],{},"checkbox.checked"," 是一个 ",[414,66155,66156],{},"布尔值",[251,66158,1502],{},[251,66160,66161],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[14,66164,66165,66166,66169,66170],{},"HTML 的 ",[251,66167,66168],{},"checked=\"checked\""," 只是 ",[414,66171,66172,66173,66176],{},"初始值；JS 的 ",[251,66174,66175],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[14,66178,66179],{},"：checked是一个伪类选择器",[14,66181,66182],{},[1602,66183],{"alt":174,"src":66184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[14,66186,66187,66190],{},[66188,66189],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[14,66192,66193],{},[1602,66194],{"alt":174,"src":66195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[34,66197,66199],{"id":66198},"_33-dom事件进阶","3.3 DOM事件进阶",[225,66201,66203],{"id":66202},"_331-事件流","3.3.1 事件流",[14,66205,66206],{},[1602,66207],{"alt":174,"src":66208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[22139,66210,66212],{"id":66211},"_3311-事件捕获","3.3.1.1 事件捕获",[14,66214,66215],{},[1602,66216],{"alt":174,"src":66217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[245,66219,66221],{"className":50774,"code":66220,"language":50776,"meta":174,"style":174},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    .father {\n      width: 500px;\n      height: 500px;\n      background-color: pink;\n    }\n\n    .son {\n      width: 200px;\n      height: 200px;\n      background-color: skyblue;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"father\">\n    \u003Cdiv class=\"son\">\u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    const fa = document.querySelector('.father')\n    const son = document.querySelector('.son')\n    document.addEventListener('click', function () {\n      alert('woshiu1')\n    }, true)\n    fa.addEventListener('click', function () {\n      alert('1')\n    }, true)\n    son.addEventListener('click', function () {\n      alert('2')\n    }, true)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[251,66222,66223,66233,66247,66251,66259,66273,66293,66305,66313,66320,66332,66344,66354,66358,66362,66369,66381,66393,66403,66407,66415,66423,66427,66435,66450,66469,66477,66485,66505,66525,66541,66552,66560,66577,66588,66596,66613,66624,66632,66640,66648,66652],{"__ignoreMap":174},[254,66224,66225,66227,66229,66231],{"class":256,"line":257},[254,66226,51438],{"class":264},[254,66228,51442],{"class":51441},[254,66230,51445],{"class":2103},[254,66232,51448],{"class":264},[254,66234,66235,66237,66239,66241,66243,66245],{"class":256,"line":175},[254,66236,1174],{"class":264},[254,66238,50776],{"class":51441},[254,66240,51457],{"class":2103},[254,66242,310],{"class":264},[254,66244,51462],{"class":369},[254,66246,51448],{"class":264},[254,66248,66249],{"class":256,"line":1319},[254,66250,2540],{"emptyLinePlaceholder":184},[254,66252,66253,66255,66257],{"class":256,"line":1334},[254,66254,1174],{"class":264},[254,66256,51475],{"class":51441},[254,66258,51448],{"class":264},[254,66260,66261,66263,66265,66267,66269,66271],{"class":256,"line":1340},[254,66262,52285],{"class":264},[254,66264,51485],{"class":51441},[254,66266,51488],{"class":2103},[254,66268,310],{"class":264},[254,66270,51493],{"class":369},[254,66272,51448],{"class":264},[254,66274,66275,66277,66279,66281,66283,66285,66287,66289,66291],{"class":256,"line":1354},[254,66276,52285],{"class":264},[254,66278,51485],{"class":51441},[254,66280,15061],{"class":2103},[254,66282,310],{"class":264},[254,66284,51532],{"class":369},[254,66286,51512],{"class":2103},[254,66288,310],{"class":264},[254,66290,51539],{"class":369},[254,66292,51448],{"class":264},[254,66294,66295,66297,66299,66301,66303],{"class":256,"line":1360},[254,66296,52285],{"class":264},[254,66298,51548],{"class":51441},[254,66300,51551],{"class":264},[254,66302,51548],{"class":51441},[254,66304,51448],{"class":264},[254,66306,66307,66309,66311],{"class":256,"line":1451},[254,66308,52285],{"class":264},[254,66310,5267],{"class":51441},[254,66312,51448],{"class":264},[254,66314,66315,66318],{"class":256,"line":1457},[254,66316,66317],{"class":2103},"    .father",[254,66319,15713],{"class":264},[254,66321,66322,66324,66326,66328,66330],{"class":256,"line":1469},[254,66323,54912],{"class":313},[254,66325,51578],{"class":264},[254,66327,65215],{"class":313},[254,66329,51633],{"class":260},[254,66331,1430],{"class":264},[254,66333,66334,66336,66338,66340,66342],{"class":256,"line":1752},[254,66335,54926],{"class":313},[254,66337,51578],{"class":264},[254,66339,65215],{"class":313},[254,66341,51633],{"class":260},[254,66343,1430],{"class":264},[254,66345,66346,66348,66350,66352],{"class":256,"line":1757},[254,66347,55025],{"class":313},[254,66349,51578],{"class":264},[254,66351,51786],{"class":313},[254,66353,1430],{"class":264},[254,66355,66356],{"class":256,"line":1763},[254,66357,2327],{"class":264},[254,66359,66360],{"class":256,"line":1768},[254,66361,2540],{"emptyLinePlaceholder":184},[254,66363,66364,66367],{"class":256,"line":1782},[254,66365,66366],{"class":2103},"    .son",[254,66368,15713],{"class":264},[254,66370,66371,66373,66375,66377,66379],{"class":256,"line":1787},[254,66372,54912],{"class":313},[254,66374,51578],{"class":264},[254,66376,1862],{"class":313},[254,66378,51633],{"class":260},[254,66380,1430],{"class":264},[254,66382,66383,66385,66387,66389,66391],{"class":256,"line":1793},[254,66384,54926],{"class":313},[254,66386,51578],{"class":264},[254,66388,1862],{"class":313},[254,66390,51633],{"class":260},[254,66392,1430],{"class":264},[254,66394,66395,66397,66399,66401],{"class":256,"line":1814},[254,66396,55025],{"class":313},[254,66398,51578],{"class":264},[254,66400,55030],{"class":313},[254,66402,1430],{"class":264},[254,66404,66405],{"class":256,"line":1819},[254,66406,2327],{"class":264},[254,66408,66409,66411,66413],{"class":256,"line":1833},[254,66410,52558],{"class":264},[254,66412,5267],{"class":51441},[254,66414,51448],{"class":264},[254,66416,66417,66419,66421],{"class":256,"line":1838},[254,66418,51926],{"class":264},[254,66420,51475],{"class":51441},[254,66422,51448],{"class":264},[254,66424,66425],{"class":256,"line":1867},[254,66426,2540],{"emptyLinePlaceholder":184},[254,66428,66429,66431,66433],{"class":256,"line":1872},[254,66430,1174],{"class":264},[254,66432,51941],{"class":51441},[254,66434,51448],{"class":264},[254,66436,66437,66439,66441,66443,66445,66448],{"class":256,"line":1889},[254,66438,52285],{"class":264},[254,66440,51752],{"class":51441},[254,66442,53627],{"class":2103},[254,66444,310],{"class":264},[254,66446,66447],{"class":369},"\"father\"",[254,66449,51448],{"class":264},[254,66451,66452,66454,66456,66458,66460,66463,66465,66467],{"class":256,"line":1894},[254,66453,51482],{"class":264},[254,66455,51752],{"class":51441},[254,66457,53627],{"class":2103},[254,66459,310],{"class":264},[254,66461,66462],{"class":369},"\"son\"",[254,66464,55455],{"class":264},[254,66466,51752],{"class":51441},[254,66468,51448],{"class":264},[254,66470,66471,66473,66475],{"class":256,"line":1899},[254,66472,52558],{"class":264},[254,66474,51752],{"class":51441},[254,66476,51448],{"class":264},[254,66478,66479,66481,66483],{"class":256,"line":1904},[254,66480,52285],{"class":264},[254,66482,51954],{"class":51441},[254,66484,51448],{"class":264},[254,66486,66487,66489,66492,66494,66496,66498,66500,66503],{"class":256,"line":1918},[254,66488,11362],{"class":260},[254,66490,66491],{"class":313}," fa",[254,66493,13705],{"class":260},[254,66495,54537],{"class":264},[254,66497,54540],{"class":2103},[254,66499,265],{"class":264},[254,66501,66502],{"class":369},"'.father'",[254,66504,271],{"class":264},[254,66506,66507,66509,66512,66514,66516,66518,66520,66523],{"class":256,"line":1923},[254,66508,11362],{"class":260},[254,66510,66511],{"class":313}," son",[254,66513,13705],{"class":260},[254,66515,54537],{"class":264},[254,66517,54540],{"class":2103},[254,66519,265],{"class":264},[254,66521,66522],{"class":369},"'.son'",[254,66524,271],{"class":264},[254,66526,66527,66529,66531,66533,66535,66537,66539],{"class":256,"line":2717},[254,66528,52548],{"class":264},[254,66530,57954],{"class":2103},[254,66532,265],{"class":264},[254,66534,57959],{"class":369},[254,66536,12576],{"class":264},[254,66538,54590],{"class":260},[254,66540,54593],{"class":264},[254,66542,66543,66545,66547,66550],{"class":256,"line":2731},[254,66544,59066],{"class":2103},[254,66546,265],{"class":264},[254,66548,66549],{"class":369},"'woshiu1'",[254,66551,271],{"class":264},[254,66553,66554,66556,66558],{"class":256,"line":2739},[254,66555,54676],{"class":264},[254,66557,1502],{"class":313},[254,66559,271],{"class":264},[254,66561,66562,66565,66567,66569,66571,66573,66575],{"class":256,"line":2744},[254,66563,66564],{"class":264},"    fa.",[254,66566,57954],{"class":2103},[254,66568,265],{"class":264},[254,66570,57959],{"class":369},[254,66572,12576],{"class":264},[254,66574,54590],{"class":260},[254,66576,54593],{"class":264},[254,66578,66579,66581,66583,66586],{"class":256,"line":2750},[254,66580,59066],{"class":2103},[254,66582,265],{"class":264},[254,66584,66585],{"class":369},"'1'",[254,66587,271],{"class":264},[254,66589,66590,66592,66594],{"class":256,"line":2756},[254,66591,54676],{"class":264},[254,66593,1502],{"class":313},[254,66595,271],{"class":264},[254,66597,66598,66601,66603,66605,66607,66609,66611],{"class":256,"line":2761},[254,66599,66600],{"class":264},"    son.",[254,66602,57954],{"class":2103},[254,66604,265],{"class":264},[254,66606,57959],{"class":369},[254,66608,12576],{"class":264},[254,66610,54590],{"class":260},[254,66612,54593],{"class":264},[254,66614,66615,66617,66619,66622],{"class":256,"line":8089},[254,66616,59066],{"class":2103},[254,66618,265],{"class":264},[254,66620,66621],{"class":369},"'2'",[254,66623,271],{"class":264},[254,66625,66626,66628,66630],{"class":256,"line":8113},[254,66627,54676],{"class":264},[254,66629,1502],{"class":313},[254,66631,271],{"class":264},[254,66633,66634,66636,66638],{"class":256,"line":8118},[254,66635,52558],{"class":264},[254,66637,51954],{"class":51441},[254,66639,51448],{"class":264},[254,66641,66642,66644,66646],{"class":256,"line":8124},[254,66643,51926],{"class":264},[254,66645,51941],{"class":51441},[254,66647,51448],{"class":264},[254,66649,66650],{"class":256,"line":8151},[254,66651,2540],{"emptyLinePlaceholder":184},[254,66653,66654,66656,66658],{"class":256,"line":8156},[254,66655,51926],{"class":264},[254,66657,50776],{"class":51441},[254,66659,51448],{"class":264},[14,66661,66662],{},[1602,66663],{"alt":174,"src":66664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[14,66666,66667],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[22139,66669,66671],{"id":66670},"_3312-事件冒泡","3.3.1.2 事件冒泡",[14,66673,66674],{},[1602,66675],{"alt":174,"src":66676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[14,66678,66679],{},"反着来",[14,66681,66682],{},"注意是同名事件，比如都是‘click’",[22139,66684,66686],{"id":66685},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[14,66688,66689],{},[1602,66690],{"alt":174,"src":66691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[22139,66693,66695],{"id":66694},"_3314-解绑事件","3.3.1.4 解绑事件",[14,66697,66698],{},[1602,66699],{"alt":174,"src":66700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[14,66702,66703],{},[1602,66704],{"alt":174,"src":66705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[22139,66707,66709],{"id":66708},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[21,66711,66712],{},[24,66713,66714],{},"事件类型的区别",[14,66716,66717],{},[1602,66718],{"alt":174,"src":66719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[14,66721,66722],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[21,66724,66725],{"start":175},[24,66726,66727],{},"注册事件的区别",[14,66729,66730],{},[1602,66731],{"alt":174,"src":66732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[22139,66734,66736],{"id":66735},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[14,66738,66739],{},[1602,66740],{"alt":174,"src":66741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[14,66743,66744],{},[1602,66745],{"alt":174,"src":66746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[245,66748,66750],{"className":53208,"code":66749,"language":53210,"meta":174,"style":174},"\u003Cbody>\n  \u003Cform action=\"http:\u002F\u002Fwww.itcast.cn\">\n    \u003Cinput type=\"submit\" value=\"免费注册\">\n    \u003Cscript>\n      const form = document.querySelector('form')\n      form.addEventListener('submit', function (e) {\n        e.preventDefault()\n      })\n    \u003C\u002Fscript>\n  \u003C\u002Fform>\n\u003C\u002Fbody>\n",[251,66751,66752,66760,66777,66800,66808,66813,66818,66823,66827,66835,66843],{"__ignoreMap":174},[254,66753,66754,66756,66758],{"class":256,"line":257},[254,66755,1174],{"class":264},[254,66757,51941],{"class":51441},[254,66759,51448],{"class":264},[254,66761,66762,66764,66767,66770,66772,66775],{"class":256,"line":175},[254,66763,52285],{"class":264},[254,66765,66766],{"class":51441},"form",[254,66768,66769],{"class":2103}," action",[254,66771,310],{"class":264},[254,66773,66774],{"class":369},"\"http:\u002F\u002Fwww.itcast.cn\"",[254,66776,51448],{"class":264},[254,66778,66779,66781,66783,66785,66787,66790,66793,66795,66798],{"class":256,"line":1319},[254,66780,51482],{"class":264},[254,66782,53962],{"class":51441},[254,66784,53965],{"class":2103},[254,66786,310],{"class":264},[254,66788,66789],{"class":369},"\"submit\"",[254,66791,66792],{"class":2103}," value",[254,66794,310],{"class":264},[254,66796,66797],{"class":369},"\"免费注册\"",[254,66799,51448],{"class":264},[254,66801,66802,66804,66806],{"class":256,"line":1334},[254,66803,51482],{"class":264},[254,66805,51954],{"class":51441},[254,66807,51448],{"class":264},[254,66809,66810],{"class":256,"line":1340},[254,66811,66812],{"class":264},"      const form = document.querySelector('form')\n",[254,66814,66815],{"class":256,"line":1354},[254,66816,66817],{"class":264},"      form.addEventListener('submit', function (e) {\n",[254,66819,66820],{"class":256,"line":1360},[254,66821,66822],{"class":264},"        e.preventDefault()\n",[254,66824,66825],{"class":256,"line":1451},[254,66826,64956],{"class":264},[254,66828,66829,66831,66833],{"class":256,"line":1457},[254,66830,51917],{"class":264},[254,66832,51954],{"class":51441},[254,66834,51448],{"class":264},[254,66836,66837,66839,66841],{"class":256,"line":1469},[254,66838,52558],{"class":264},[254,66840,66766],{"class":51441},[254,66842,51448],{"class":264},[254,66844,66845,66847,66849],{"class":256,"line":1752},[254,66846,51926],{"class":264},[254,66848,51941],{"class":51441},[254,66850,51448],{"class":264},[14,66852,66853],{},"点击不在跳转！！！",[225,66855,66857],{"id":66856},"_332-事件委托","3.3.2 事件委托",[14,66859,66860],{},[1602,66861],{"alt":174,"src":66862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[245,66864,66866],{"className":50774,"code":66865,"language":50776,"meta":174,"style":174},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cul>\n    \u003Cli>1\u003C\u002Fli>\n    \u003Cli>2\u003C\u002Fli>\n    \u003Cli>3\u003C\u002Fli>\n    \u003Cli>4\u003C\u002Fli>\n    \u003Cli>5\u003C\u002Fli>\n    \u003Cp>我不需要变色\u003C\u002Fp>\n  \u003C\u002Ful>\n  \u003Cscript>\n    \u002F\u002F 点击每个li，当前文字变为红色\n    const ul = document.querySelector('ul')\n    ul.addEventListener('click', function (e) {\n      \u002F\u002F alert(1)\n      \u002F\u002F e.target就是我们点击的对象\n      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n      \u002F\u002F e.target.style.color = 'red'\n      console.log(e)\n\n      console.dir(e.target)\n\n      \u002F\u002F 我们需求，我们只有点击li才会变色\n      \u002F\u002F 通过tagName来进行判断\n      if (e.target.tagName === 'LI') {\n        e.target.style.color = 'red'\n      }\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[251,66867,66868,66878,66892,66896,66904,66918,66938,66950,66958,66962,66970,66978,66990,67002,67014,67026,67038,67051,67059,67067,67072,67091,67112,67117,67122,67127,67132,67141,67145,67155,67159,67164,67169,67183,67193,67197,67201,67209,67217,67221],{"__ignoreMap":174},[254,66869,66870,66872,66874,66876],{"class":256,"line":257},[254,66871,51438],{"class":264},[254,66873,51442],{"class":51441},[254,66875,51445],{"class":2103},[254,66877,51448],{"class":264},[254,66879,66880,66882,66884,66886,66888,66890],{"class":256,"line":175},[254,66881,1174],{"class":264},[254,66883,50776],{"class":51441},[254,66885,51457],{"class":2103},[254,66887,310],{"class":264},[254,66889,51462],{"class":369},[254,66891,51448],{"class":264},[254,66893,66894],{"class":256,"line":1319},[254,66895,2540],{"emptyLinePlaceholder":184},[254,66897,66898,66900,66902],{"class":256,"line":1334},[254,66899,1174],{"class":264},[254,66901,51475],{"class":51441},[254,66903,51448],{"class":264},[254,66905,66906,66908,66910,66912,66914,66916],{"class":256,"line":1340},[254,66907,52285],{"class":264},[254,66909,51485],{"class":51441},[254,66911,51488],{"class":2103},[254,66913,310],{"class":264},[254,66915,51493],{"class":369},[254,66917,51448],{"class":264},[254,66919,66920,66922,66924,66926,66928,66930,66932,66934,66936],{"class":256,"line":1354},[254,66921,52285],{"class":264},[254,66923,51485],{"class":51441},[254,66925,15061],{"class":2103},[254,66927,310],{"class":264},[254,66929,51532],{"class":369},[254,66931,51512],{"class":2103},[254,66933,310],{"class":264},[254,66935,51539],{"class":369},[254,66937,51448],{"class":264},[254,66939,66940,66942,66944,66946,66948],{"class":256,"line":1360},[254,66941,52285],{"class":264},[254,66943,51548],{"class":51441},[254,66945,51551],{"class":264},[254,66947,51548],{"class":51441},[254,66949,51448],{"class":264},[254,66951,66952,66954,66956],{"class":256,"line":1451},[254,66953,51926],{"class":264},[254,66955,51475],{"class":51441},[254,66957,51448],{"class":264},[254,66959,66960],{"class":256,"line":1457},[254,66961,2540],{"emptyLinePlaceholder":184},[254,66963,66964,66966,66968],{"class":256,"line":1469},[254,66965,1174],{"class":264},[254,66967,51941],{"class":51441},[254,66969,51448],{"class":264},[254,66971,66972,66974,66976],{"class":256,"line":1752},[254,66973,52285],{"class":264},[254,66975,1271],{"class":51441},[254,66977,51448],{"class":264},[254,66979,66980,66982,66984,66986,66988],{"class":256,"line":1757},[254,66981,51482],{"class":264},[254,66983,24],{"class":51441},[254,66985,54107],{"class":264},[254,66987,24],{"class":51441},[254,66989,51448],{"class":264},[254,66991,66992,66994,66996,66998,67000],{"class":256,"line":1763},[254,66993,51482],{"class":264},[254,66995,24],{"class":51441},[254,66997,54126],{"class":264},[254,66999,24],{"class":51441},[254,67001,51448],{"class":264},[254,67003,67004,67006,67008,67010,67012],{"class":256,"line":1768},[254,67005,51482],{"class":264},[254,67007,24],{"class":51441},[254,67009,54145],{"class":264},[254,67011,24],{"class":51441},[254,67013,51448],{"class":264},[254,67015,67016,67018,67020,67022,67024],{"class":256,"line":1782},[254,67017,51482],{"class":264},[254,67019,24],{"class":51441},[254,67021,54164],{"class":264},[254,67023,24],{"class":51441},[254,67025,51448],{"class":264},[254,67027,67028,67030,67032,67034,67036],{"class":256,"line":1787},[254,67029,51482],{"class":264},[254,67031,24],{"class":51441},[254,67033,54183],{"class":264},[254,67035,24],{"class":51441},[254,67037,51448],{"class":264},[254,67039,67040,67042,67044,67047,67049],{"class":256,"line":1793},[254,67041,51482],{"class":264},[254,67043,14],{"class":51441},[254,67045,67046],{"class":264},">我不需要变色\u003C\u002F",[254,67048,14],{"class":51441},[254,67050,51448],{"class":264},[254,67052,67053,67055,67057],{"class":256,"line":1814},[254,67054,52558],{"class":264},[254,67056,1271],{"class":51441},[254,67058,51448],{"class":264},[254,67060,67061,67063,67065],{"class":256,"line":1819},[254,67062,52285],{"class":264},[254,67064,51954],{"class":51441},[254,67066,51448],{"class":264},[254,67068,67069],{"class":256,"line":1833},[254,67070,67071],{"class":323},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[254,67073,67074,67076,67078,67080,67082,67084,67086,67089],{"class":256,"line":1838},[254,67075,11362],{"class":260},[254,67077,61433],{"class":313},[254,67079,13705],{"class":260},[254,67081,54537],{"class":264},[254,67083,54540],{"class":2103},[254,67085,265],{"class":264},[254,67087,67088],{"class":369},"'ul'",[254,67090,271],{"class":264},[254,67092,67093,67096,67098,67100,67102,67104,67106,67108,67110],{"class":256,"line":1867},[254,67094,67095],{"class":264},"    ul.",[254,67097,57954],{"class":2103},[254,67099,265],{"class":264},[254,67101,57959],{"class":369},[254,67103,12576],{"class":264},[254,67105,54590],{"class":260},[254,67107,1798],{"class":264},[254,67109,339],{"class":5357},[254,67111,12583],{"class":264},[254,67113,67114],{"class":256,"line":1872},[254,67115,67116],{"class":323},"      \u002F\u002F alert(1)\n",[254,67118,67119],{"class":256,"line":1889},[254,67120,67121],{"class":323},"      \u002F\u002F e.target就是我们点击的对象\n",[254,67123,67124],{"class":256,"line":1894},[254,67125,67126],{"class":323},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[254,67128,67129],{"class":256,"line":1899},[254,67130,67131],{"class":323},"      \u002F\u002F e.target.style.color = 'red'\n",[254,67133,67134,67136,67138],{"class":256,"line":1904},[254,67135,58385],{"class":264},[254,67137,58388],{"class":2103},[254,67139,67140],{"class":264},"(e)\n",[254,67142,67143],{"class":256,"line":1918},[254,67144,2540],{"emptyLinePlaceholder":184},[254,67146,67147,67149,67152],{"class":256,"line":1923},[254,67148,58385],{"class":264},[254,67150,67151],{"class":2103},"dir",[254,67153,67154],{"class":264},"(e.target)\n",[254,67156,67157],{"class":256,"line":2717},[254,67158,2540],{"emptyLinePlaceholder":184},[254,67160,67161],{"class":256,"line":2731},[254,67162,67163],{"class":323},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[254,67165,67166],{"class":256,"line":2739},[254,67167,67168],{"class":323},"      \u002F\u002F 通过tagName来进行判断\n",[254,67170,67171,67173,67176,67178,67181],{"class":256,"line":2744},[254,67172,54621],{"class":260},[254,67174,67175],{"class":264}," (e.target.tagName ",[254,67177,54627],{"class":260},[254,67179,67180],{"class":369}," 'LI'",[254,67182,12583],{"class":264},[254,67184,67185,67188,67190],{"class":256,"line":2750},[254,67186,67187],{"class":264},"        e.target.style.color ",[254,67189,310],{"class":260},[254,67191,67192],{"class":369}," 'red'\n",[254,67194,67195],{"class":256,"line":2756},[254,67196,52539],{"class":264},[254,67198,67199],{"class":256,"line":2761},[254,67200,33602],{"class":264},[254,67202,67203,67205,67207],{"class":256,"line":8089},[254,67204,52558],{"class":264},[254,67206,51954],{"class":51441},[254,67208,51448],{"class":264},[254,67210,67211,67213,67215],{"class":256,"line":8113},[254,67212,51926],{"class":264},[254,67214,51941],{"class":51441},[254,67216,51448],{"class":264},[254,67218,67219],{"class":256,"line":8118},[254,67220,2540],{"emptyLinePlaceholder":184},[254,67222,67223,67225,67227],{"class":256,"line":8124},[254,67224,51926],{"class":264},[254,67226,50776],{"class":51441},[254,67228,51448],{"class":264},[14,67230,67231],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[14,67233,67234],{},"if(e.target.ragName==='P') {}",[14,67236,67237],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[14,67239,67240],{},"通过事件委托的方式实现tab栏切换改造：",[14,67242,67243],{},"一定要记住自定义属性！！！！！！",[14,67245,67246],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[14,67248,67249],{},"id是自定义的属性名",[14,67251,67252],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[245,67254,67256],{"className":50774,"code":67255,"language":50776,"meta":174,"style":174},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\" \u002F>\n  \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" \u002F>\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \u002F>\n  \u003Ctitle>tab栏切换\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      margin: 0;\n      padding: 0;\n    }\n\n    .tab {\n      width: 590px;\n      height: 340px;\n      margin: 20px;\n      border: 1px solid #e4e4e4;\n    }\n\n    .tab-nav {\n      width: 100%;\n      height: 60px;\n      line-height: 60px;\n      display: flex;\n      justify-content: space-between;\n    }\n\n    .tab-nav h3 {\n      font-size: 24px;\n      font-weight: normal;\n      margin-left: 20px;\n    }\n\n    .tab-nav ul {\n      list-style: none;\n      display: flex;\n      justify-content: flex-end;\n    }\n\n    .tab-nav ul li {\n      margin: 0 20px;\n      font-size: 14px;\n    }\n\n    .tab-nav ul li a {\n      text-decoration: none;\n      border-bottom: 2px solid transparent;\n      color: #333;\n    }\n\n    .tab-nav ul li a.active {\n      border-color: #e1251b;\n      color: #e1251b;\n    }\n\n    .tab-content {\n      padding: 0 16px;\n    }\n\n    .tab-content .item {\n      display: none;\n    }\n\n    .tab-content .active {\n      display: block;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"tab\">\n    \u003Cdiv class=\"tab-nav\">\n      \u003Ch3>每日特价\u003C\u002Fh3>\n      \u003Cul>\n        \u003Cli>\u003Ca class=\"active\" href=\"javascript:;\" data-id=\"0\">精选\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\" data-id=\"1\">美食\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\" data-id=\"2\">百货\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\" data-id=\"3\">个护\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\" data-id=\"4\">预告\u003C\u002Fa>\u003C\u002Fli>\n      \u003C\u002Ful>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"tab-content\">\n      \u003Cdiv class=\"item active\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    \u002F\u002F 采取事件委托的形式，tab栏切换\n    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n    const ul = document.querySelector('.tab-nav ul')\n    \u002F\u002F 2.添加事件\n    ul.addEventListener('click', function (e) {\n      console.dir(e.target)\n      \u002F\u002Fe.targer是我们点击的对象\n      if (e.target.tagName === 'A') {\n        document.querySelector('.active').classList.remove('active')\n        e.target.classList.add('active')\n\n        \u002F\u002F 下面大盒子模块\n        \u002F\u002F console.log(e.target.dataset.id)\n        const i = +e.target.dataset.id\n        document.querySelector('.tab-content .active').classList.remove('active')\n        document.querySelector(`.tab-content .item:nth-child(${i + 1})`).classList.add('active')\n\n      }\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[251,67257,67258,67268,67282,67286,67294,67308,67328,67348,67360,67368,67374,67384,67394,67398,67402,67408,67420,67432,67444,67460,67464,67468,67474,67486,67498,67510,67520,67530,67534,67538,67546,67558,67568,67580,67584,67588,67596,67606,67616,67626,67630,67634,67644,67658,67670,67674,67678,67690,67700,67716,67726,67730,67734,67748,67758,67768,67772,67776,67782,67796,67800,67804,67812,67822,67826,67830,67839,67849,67853,67861,67869,67873,67881,67895,67909,67921,67929,67968,68000,68032,68064,68096,68104,68112,68126,68160,68194,68228,68262,68296,68304,68312,68320,68325,68330,68349,68354,68374,68382,68387,68400,68421,68434,68438,68443,68448,68461,68481,68509,68513,68517,68521,68529,68537,68541],{"__ignoreMap":174},[254,67259,67260,67262,67264,67266],{"class":256,"line":257},[254,67261,51438],{"class":264},[254,67263,51442],{"class":51441},[254,67265,51445],{"class":2103},[254,67267,51448],{"class":264},[254,67269,67270,67272,67274,67276,67278,67280],{"class":256,"line":175},[254,67271,1174],{"class":264},[254,67273,50776],{"class":51441},[254,67275,51457],{"class":2103},[254,67277,310],{"class":264},[254,67279,51462],{"class":369},[254,67281,51448],{"class":264},[254,67283,67284],{"class":256,"line":1319},[254,67285,2540],{"emptyLinePlaceholder":184},[254,67287,67288,67290,67292],{"class":256,"line":1334},[254,67289,1174],{"class":264},[254,67291,51475],{"class":51441},[254,67293,51448],{"class":264},[254,67295,67296,67298,67300,67302,67304,67306],{"class":256,"line":1340},[254,67297,52285],{"class":264},[254,67299,51485],{"class":51441},[254,67301,51488],{"class":2103},[254,67303,310],{"class":264},[254,67305,51493],{"class":369},[254,67307,59268],{"class":264},[254,67309,67310,67312,67314,67316,67318,67320,67322,67324,67326],{"class":256,"line":1354},[254,67311,52285],{"class":264},[254,67313,51485],{"class":51441},[254,67315,51504],{"class":2103},[254,67317,310],{"class":264},[254,67319,51509],{"class":369},[254,67321,51512],{"class":2103},[254,67323,310],{"class":264},[254,67325,51517],{"class":369},[254,67327,59268],{"class":264},[254,67329,67330,67332,67334,67336,67338,67340,67342,67344,67346],{"class":256,"line":1360},[254,67331,52285],{"class":264},[254,67333,51485],{"class":51441},[254,67335,15061],{"class":2103},[254,67337,310],{"class":264},[254,67339,51532],{"class":369},[254,67341,51512],{"class":2103},[254,67343,310],{"class":264},[254,67345,51539],{"class":369},[254,67347,59268],{"class":264},[254,67349,67350,67352,67354,67356,67358],{"class":256,"line":1451},[254,67351,52285],{"class":264},[254,67353,51548],{"class":51441},[254,67355,63766],{"class":264},[254,67357,51548],{"class":51441},[254,67359,51448],{"class":264},[254,67361,67362,67364,67366],{"class":256,"line":1457},[254,67363,52285],{"class":264},[254,67365,5267],{"class":51441},[254,67367,51448],{"class":264},[254,67369,67370,67372],{"class":256,"line":1469},[254,67371,6544],{"class":51441},[254,67373,15713],{"class":264},[254,67375,67376,67378,67380,67382],{"class":256,"line":1752},[254,67377,54847],{"class":313},[254,67379,51578],{"class":264},[254,67381,456],{"class":313},[254,67383,1430],{"class":264},[254,67385,67386,67388,67390,67392],{"class":256,"line":1757},[254,67387,54836],{"class":313},[254,67389,51578],{"class":264},[254,67391,456],{"class":313},[254,67393,1430],{"class":264},[254,67395,67396],{"class":256,"line":1763},[254,67397,2327],{"class":264},[254,67399,67400],{"class":256,"line":1768},[254,67401,2540],{"emptyLinePlaceholder":184},[254,67403,67404,67406],{"class":256,"line":1782},[254,67405,63817],{"class":2103},[254,67407,15713],{"class":264},[254,67409,67410,67412,67414,67416,67418],{"class":256,"line":1787},[254,67411,54912],{"class":313},[254,67413,51578],{"class":264},[254,67415,63828],{"class":313},[254,67417,51633],{"class":260},[254,67419,1430],{"class":264},[254,67421,67422,67424,67426,67428,67430],{"class":256,"line":1793},[254,67423,54926],{"class":313},[254,67425,51578],{"class":264},[254,67427,63841],{"class":313},[254,67429,51633],{"class":260},[254,67431,1430],{"class":264},[254,67433,67434,67436,67438,67440,67442],{"class":256,"line":1814},[254,67435,54847],{"class":313},[254,67437,51578],{"class":264},[254,67439,964],{"class":313},[254,67441,51633],{"class":260},[254,67443,1430],{"class":264},[254,67445,67446,67448,67450,67452,67454,67456,67458],{"class":256,"line":1819},[254,67447,62118],{"class":313},[254,67449,51578],{"class":264},[254,67451,482],{"class":313},[254,67453,51633],{"class":260},[254,67455,51662],{"class":313},[254,67457,62385],{"class":313},[254,67459,1430],{"class":264},[254,67461,67462],{"class":256,"line":1833},[254,67463,2327],{"class":264},[254,67465,67466],{"class":256,"line":1838},[254,67467,2540],{"emptyLinePlaceholder":184},[254,67469,67470,67472],{"class":256,"line":1867},[254,67471,63886],{"class":2103},[254,67473,15713],{"class":264},[254,67475,67476,67478,67480,67482,67484],{"class":256,"line":1872},[254,67477,54912],{"class":313},[254,67479,51578],{"class":264},[254,67481,575],{"class":313},[254,67483,592],{"class":260},[254,67485,1430],{"class":264},[254,67487,67488,67490,67492,67494,67496],{"class":256,"line":1889},[254,67489,54926],{"class":313},[254,67491,51578],{"class":264},[254,67493,1171],{"class":313},[254,67495,51633],{"class":260},[254,67497,1430],{"class":264},[254,67499,67500,67502,67504,67506,67508],{"class":256,"line":1894},[254,67501,57500],{"class":313},[254,67503,51578],{"class":264},[254,67505,1171],{"class":313},[254,67507,51633],{"class":260},[254,67509,1430],{"class":264},[254,67511,67512,67514,67516,67518],{"class":256,"line":1899},[254,67513,55150],{"class":313},[254,67515,51578],{"class":264},[254,67517,51618],{"class":313},[254,67519,1430],{"class":264},[254,67521,67522,67524,67526,67528],{"class":256,"line":1904},[254,67523,55161],{"class":313},[254,67525,51578],{"class":264},[254,67527,51809],{"class":313},[254,67529,1430],{"class":264},[254,67531,67532],{"class":256,"line":1918},[254,67533,2327],{"class":264},[254,67535,67536],{"class":256,"line":1923},[254,67537,2540],{"emptyLinePlaceholder":184},[254,67539,67540,67542,67544],{"class":256,"line":2717},[254,67541,63886],{"class":2103},[254,67543,63959],{"class":51441},[254,67545,15713],{"class":264},[254,67547,67548,67550,67552,67554,67556],{"class":256,"line":2731},[254,67549,55063],{"class":313},[254,67551,51578],{"class":264},[254,67553,1064],{"class":313},[254,67555,51633],{"class":260},[254,67557,1430],{"class":264},[254,67559,67560,67562,67564,67566],{"class":256,"line":2739},[254,67561,62475],{"class":313},[254,67563,51578],{"class":264},[254,67565,63982],{"class":313},[254,67567,1430],{"class":264},[254,67569,67570,67572,67574,67576,67578],{"class":256,"line":2744},[254,67571,62141],{"class":313},[254,67573,51578],{"class":264},[254,67575,964],{"class":313},[254,67577,51633],{"class":260},[254,67579,1430],{"class":264},[254,67581,67582],{"class":256,"line":2750},[254,67583,2327],{"class":264},[254,67585,67586],{"class":256,"line":2756},[254,67587,2540],{"emptyLinePlaceholder":184},[254,67589,67590,67592,67594],{"class":256,"line":2761},[254,67591,63886],{"class":2103},[254,67593,61433],{"class":51441},[254,67595,15713],{"class":264},[254,67597,67598,67600,67602,67604],{"class":256,"line":8089},[254,67599,54873],{"class":313},[254,67601,51578],{"class":264},[254,67603,54878],{"class":313},[254,67605,1430],{"class":264},[254,67607,67608,67610,67612,67614],{"class":256,"line":8113},[254,67609,55150],{"class":313},[254,67611,51578],{"class":264},[254,67613,51618],{"class":313},[254,67615,1430],{"class":264},[254,67617,67618,67620,67622,67624],{"class":256,"line":8118},[254,67619,55161],{"class":313},[254,67621,51578],{"class":264},[254,67623,51721],{"class":313},[254,67625,1430],{"class":264},[254,67627,67628],{"class":256,"line":8124},[254,67629,2327],{"class":264},[254,67631,67632],{"class":256,"line":8151},[254,67633,2540],{"emptyLinePlaceholder":184},[254,67635,67636,67638,67640,67642],{"class":256,"line":8156},[254,67637,63886],{"class":2103},[254,67639,61433],{"class":51441},[254,67641,55216],{"class":51441},[254,67643,15713],{"class":264},[254,67645,67646,67648,67650,67652,67654,67656],{"class":256,"line":8162},[254,67647,54847],{"class":313},[254,67649,51578],{"class":264},[254,67651,456],{"class":313},[254,67653,9091],{"class":313},[254,67655,51633],{"class":260},[254,67657,1430],{"class":264},[254,67659,67660,67662,67664,67666,67668],{"class":256,"line":8174},[254,67661,55063],{"class":313},[254,67663,51578],{"class":264},[254,67665,813],{"class":313},[254,67667,51633],{"class":260},[254,67669,1430],{"class":264},[254,67671,67672],{"class":256,"line":8186},[254,67673,2327],{"class":264},[254,67675,67676],{"class":256,"line":8198},[254,67677,2540],{"emptyLinePlaceholder":184},[254,67679,67680,67682,67684,67686,67688],{"class":256,"line":9857},[254,67681,63886],{"class":2103},[254,67683,61433],{"class":51441},[254,67685,55216],{"class":51441},[254,67687,1538],{"class":51441},[254,67689,15713],{"class":264},[254,67691,67692,67694,67696,67698],{"class":256,"line":9882},[254,67693,64111],{"class":313},[254,67695,51578],{"class":264},[254,67697,54878],{"class":313},[254,67699,1430],{"class":264},[254,67701,67702,67704,67706,67708,67710,67712,67714],{"class":256,"line":9905},[254,67703,62373],{"class":313},[254,67705,51578],{"class":264},[254,67707,342],{"class":313},[254,67709,51633],{"class":260},[254,67711,51662],{"class":313},[254,67713,64132],{"class":313},[254,67715,1430],{"class":264},[254,67717,67718,67720,67722,67724],{"class":256,"line":9929},[254,67719,57557],{"class":313},[254,67721,51578],{"class":264},[254,67723,62510],{"class":313},[254,67725,1430],{"class":264},[254,67727,67728],{"class":256,"line":9934},[254,67729,2327],{"class":264},[254,67731,67732],{"class":256,"line":9939},[254,67733,2540],{"emptyLinePlaceholder":184},[254,67735,67736,67738,67740,67742,67744,67746],{"class":256,"line":9944},[254,67737,63886],{"class":2103},[254,67739,61433],{"class":51441},[254,67741,55216],{"class":51441},[254,67743,1538],{"class":51441},[254,67745,64165],{"class":2103},[254,67747,15713],{"class":264},[254,67749,67750,67752,67754,67756],{"class":256,"line":9953},[254,67751,61932],{"class":313},[254,67753,51578],{"class":264},[254,67755,64176],{"class":313},[254,67757,1430],{"class":264},[254,67759,67760,67762,67764,67766],{"class":256,"line":9958},[254,67761,57557],{"class":313},[254,67763,51578],{"class":264},[254,67765,64176],{"class":313},[254,67767,1430],{"class":264},[254,67769,67770],{"class":256,"line":9964},[254,67771,2327],{"class":264},[254,67773,67774],{"class":256,"line":9985},[254,67775,2540],{"emptyLinePlaceholder":184},[254,67777,67778,67780],{"class":256,"line":9991},[254,67779,64201],{"class":2103},[254,67781,15713],{"class":264},[254,67783,67784,67786,67788,67790,67792,67794],{"class":256,"line":10005},[254,67785,54836],{"class":313},[254,67787,51578],{"class":264},[254,67789,456],{"class":313},[254,67791,64214],{"class":313},[254,67793,51633],{"class":260},[254,67795,1430],{"class":264},[254,67797,67798],{"class":256,"line":10011},[254,67799,2327],{"class":264},[254,67801,67802],{"class":256,"line":10038},[254,67803,2540],{"emptyLinePlaceholder":184},[254,67805,67806,67808,67810],{"class":256,"line":10047},[254,67807,64201],{"class":2103},[254,67809,62315],{"class":2103},[254,67811,15713],{"class":264},[254,67813,67814,67816,67818,67820],{"class":256,"line":10053},[254,67815,55150],{"class":313},[254,67817,51578],{"class":264},[254,67819,54878],{"class":313},[254,67821,1430],{"class":264},[254,67823,67824],{"class":256,"line":10061},[254,67825,2327],{"class":264},[254,67827,67828],{"class":256,"line":10066},[254,67829,2540],{"emptyLinePlaceholder":184},[254,67831,67832,67834,67837],{"class":256,"line":16745},[254,67833,64201],{"class":2103},[254,67835,67836],{"class":2103}," .active",[254,67838,15713],{"class":264},[254,67840,67841,67843,67845,67847],{"class":256,"line":16751},[254,67842,55150],{"class":313},[254,67844,51578],{"class":264},[254,67846,61010],{"class":313},[254,67848,1430],{"class":264},[254,67850,67851],{"class":256,"line":16774},[254,67852,2327],{"class":264},[254,67854,67855,67857,67859],{"class":256,"line":16780},[254,67856,52558],{"class":264},[254,67858,5267],{"class":51441},[254,67860,51448],{"class":264},[254,67862,67863,67865,67867],{"class":256,"line":16803},[254,67864,51926],{"class":264},[254,67866,51475],{"class":51441},[254,67868,51448],{"class":264},[254,67870,67871],{"class":256,"line":16817},[254,67872,2540],{"emptyLinePlaceholder":184},[254,67874,67875,67877,67879],{"class":256,"line":16837},[254,67876,1174],{"class":264},[254,67878,51941],{"class":51441},[254,67880,51448],{"class":264},[254,67882,67883,67885,67887,67889,67891,67893],{"class":256,"line":16843},[254,67884,52285],{"class":264},[254,67886,51752],{"class":51441},[254,67888,53627],{"class":2103},[254,67890,310],{"class":264},[254,67892,64316],{"class":369},[254,67894,51448],{"class":264},[254,67896,67897,67899,67901,67903,67905,67907],{"class":256,"line":16854},[254,67898,51482],{"class":264},[254,67900,51752],{"class":51441},[254,67902,53627],{"class":2103},[254,67904,310],{"class":264},[254,67906,64331],{"class":369},[254,67908,51448],{"class":264},[254,67910,67911,67913,67915,67917,67919],{"class":256,"line":16877},[254,67912,55375],{"class":264},[254,67914,225],{"class":51441},[254,67916,64342],{"class":264},[254,67918,225],{"class":51441},[254,67920,51448],{"class":264},[254,67922,67923,67925,67927],{"class":256,"line":16899},[254,67924,55375],{"class":264},[254,67926,1271],{"class":51441},[254,67928,51448],{"class":264},[254,67930,67931,67933,67935,67937,67939,67941,67943,67945,67947,67949,67951,67953,67955,67958,67960,67962,67964,67966],{"class":256,"line":16904},[254,67932,55443],{"class":264},[254,67934,24],{"class":51441},[254,67936,61193],{"class":264},[254,67938,42],{"class":51441},[254,67940,53627],{"class":2103},[254,67942,310],{"class":264},[254,67944,59847],{"class":369},[254,67946,61198],{"class":2103},[254,67948,310],{"class":264},[254,67950,64377],{"class":369},[254,67952,54092],{"class":2103},[254,67954,310],{"class":264},[254,67956,67957],{"class":369},"\"0\"",[254,67959,64380],{"class":264},[254,67961,42],{"class":51441},[254,67963,55455],{"class":264},[254,67965,24],{"class":51441},[254,67967,51448],{"class":264},[254,67969,67970,67972,67974,67976,67978,67980,67982,67984,67986,67988,67990,67992,67994,67996,67998],{"class":256,"line":16910},[254,67971,55443],{"class":264},[254,67973,24],{"class":51441},[254,67975,61193],{"class":264},[254,67977,42],{"class":51441},[254,67979,61198],{"class":2103},[254,67981,310],{"class":264},[254,67983,64377],{"class":369},[254,67985,54092],{"class":2103},[254,67987,310],{"class":264},[254,67989,3818],{"class":369},[254,67991,64407],{"class":264},[254,67993,42],{"class":51441},[254,67995,55455],{"class":264},[254,67997,24],{"class":51441},[254,67999,51448],{"class":264},[254,68001,68002,68004,68006,68008,68010,68012,68014,68016,68018,68020,68022,68024,68026,68028,68030],{"class":256,"line":16924},[254,68003,55443],{"class":264},[254,68005,24],{"class":51441},[254,68007,61193],{"class":264},[254,68009,42],{"class":51441},[254,68011,61198],{"class":2103},[254,68013,310],{"class":264},[254,68015,64377],{"class":369},[254,68017,54092],{"class":2103},[254,68019,310],{"class":264},[254,68021,3841],{"class":369},[254,68023,64434],{"class":264},[254,68025,42],{"class":51441},[254,68027,55455],{"class":264},[254,68029,24],{"class":51441},[254,68031,51448],{"class":264},[254,68033,68034,68036,68038,68040,68042,68044,68046,68048,68050,68052,68054,68056,68058,68060,68062],{"class":256,"line":16937},[254,68035,55443],{"class":264},[254,68037,24],{"class":51441},[254,68039,61193],{"class":264},[254,68041,42],{"class":51441},[254,68043,61198],{"class":2103},[254,68045,310],{"class":264},[254,68047,64377],{"class":369},[254,68049,54092],{"class":2103},[254,68051,310],{"class":264},[254,68053,3854],{"class":369},[254,68055,64461],{"class":264},[254,68057,42],{"class":51441},[254,68059,55455],{"class":264},[254,68061,24],{"class":51441},[254,68063,51448],{"class":264},[254,68065,68066,68068,68070,68072,68074,68076,68078,68080,68082,68084,68086,68088,68090,68092,68094],{"class":256,"line":16942},[254,68067,55443],{"class":264},[254,68069,24],{"class":51441},[254,68071,61193],{"class":264},[254,68073,42],{"class":51441},[254,68075,61198],{"class":2103},[254,68077,310],{"class":264},[254,68079,64377],{"class":369},[254,68081,54092],{"class":2103},[254,68083,310],{"class":264},[254,68085,3867],{"class":369},[254,68087,64488],{"class":264},[254,68089,42],{"class":51441},[254,68091,55455],{"class":264},[254,68093,24],{"class":51441},[254,68095,51448],{"class":264},[254,68097,68098,68100,68102],{"class":256,"line":16956},[254,68099,55548],{"class":264},[254,68101,1271],{"class":51441},[254,68103,51448],{"class":264},[254,68105,68106,68108,68110],{"class":256,"line":16961},[254,68107,51917],{"class":264},[254,68109,51752],{"class":51441},[254,68111,51448],{"class":264},[254,68113,68114,68116,68118,68120,68122,68124],{"class":256,"line":16967},[254,68115,51482],{"class":264},[254,68117,51752],{"class":51441},[254,68119,53627],{"class":2103},[254,68121,310],{"class":264},[254,68123,64525],{"class":369},[254,68125,51448],{"class":264},[254,68127,68128,68130,68132,68134,68136,68138,68140,68142,68144,68146,68148,68150,68152,68154,68156,68158],{"class":256,"line":16972},[254,68129,55375],{"class":264},[254,68131,51752],{"class":51441},[254,68133,53627],{"class":2103},[254,68135,310],{"class":264},[254,68137,64540],{"class":369},[254,68139,61193],{"class":264},[254,68141,1602],{"class":51441},[254,68143,55380],{"class":2103},[254,68145,310],{"class":264},[254,68147,64551],{"class":369},[254,68149,55388],{"class":2103},[254,68151,310],{"class":264},[254,68153,7793],{"class":369},[254,68155,64560],{"class":264},[254,68157,51752],{"class":51441},[254,68159,51448],{"class":264},[254,68161,68162,68164,68166,68168,68170,68172,68174,68176,68178,68180,68182,68184,68186,68188,68190,68192],{"class":256,"line":16986},[254,68163,55375],{"class":264},[254,68165,51752],{"class":51441},[254,68167,53627],{"class":2103},[254,68169,310],{"class":264},[254,68171,62764],{"class":369},[254,68173,61193],{"class":264},[254,68175,1602],{"class":51441},[254,68177,55380],{"class":2103},[254,68179,310],{"class":264},[254,68181,64587],{"class":369},[254,68183,55388],{"class":2103},[254,68185,310],{"class":264},[254,68187,7793],{"class":369},[254,68189,64560],{"class":264},[254,68191,51752],{"class":51441},[254,68193,51448],{"class":264},[254,68195,68196,68198,68200,68202,68204,68206,68208,68210,68212,68214,68216,68218,68220,68222,68224,68226],{"class":256,"line":16991},[254,68197,55375],{"class":264},[254,68199,51752],{"class":51441},[254,68201,53627],{"class":2103},[254,68203,310],{"class":264},[254,68205,62764],{"class":369},[254,68207,61193],{"class":264},[254,68209,1602],{"class":51441},[254,68211,55380],{"class":2103},[254,68213,310],{"class":264},[254,68215,64622],{"class":369},[254,68217,55388],{"class":2103},[254,68219,310],{"class":264},[254,68221,7793],{"class":369},[254,68223,64560],{"class":264},[254,68225,51752],{"class":51441},[254,68227,51448],{"class":264},[254,68229,68230,68232,68234,68236,68238,68240,68242,68244,68246,68248,68250,68252,68254,68256,68258,68260],{"class":256,"line":16996},[254,68231,55375],{"class":264},[254,68233,51752],{"class":51441},[254,68235,53627],{"class":2103},[254,68237,310],{"class":264},[254,68239,62764],{"class":369},[254,68241,61193],{"class":264},[254,68243,1602],{"class":51441},[254,68245,55380],{"class":2103},[254,68247,310],{"class":264},[254,68249,64657],{"class":369},[254,68251,55388],{"class":2103},[254,68253,310],{"class":264},[254,68255,7793],{"class":369},[254,68257,64560],{"class":264},[254,68259,51752],{"class":51441},[254,68261,51448],{"class":264},[254,68263,68264,68266,68268,68270,68272,68274,68276,68278,68280,68282,68284,68286,68288,68290,68292,68294],{"class":256,"line":17010},[254,68265,55375],{"class":264},[254,68267,51752],{"class":51441},[254,68269,53627],{"class":2103},[254,68271,310],{"class":264},[254,68273,62764],{"class":369},[254,68275,61193],{"class":264},[254,68277,1602],{"class":51441},[254,68279,55380],{"class":2103},[254,68281,310],{"class":264},[254,68283,64692],{"class":369},[254,68285,55388],{"class":2103},[254,68287,310],{"class":264},[254,68289,7793],{"class":369},[254,68291,64560],{"class":264},[254,68293,51752],{"class":51441},[254,68295,51448],{"class":264},[254,68297,68298,68300,68302],{"class":256,"line":17022},[254,68299,51917],{"class":264},[254,68301,51752],{"class":51441},[254,68303,51448],{"class":264},[254,68305,68306,68308,68310],{"class":256,"line":17027},[254,68307,52558],{"class":264},[254,68309,51752],{"class":51441},[254,68311,51448],{"class":264},[254,68313,68314,68316,68318],{"class":256,"line":17040},[254,68315,52285],{"class":264},[254,68317,51954],{"class":51441},[254,68319,51448],{"class":264},[254,68321,68322],{"class":256,"line":17045},[254,68323,68324],{"class":323},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[254,68326,68327],{"class":256,"line":17050},[254,68328,68329],{"class":323},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[254,68331,68332,68334,68336,68338,68340,68342,68344,68347],{"class":256,"line":17055},[254,68333,11362],{"class":260},[254,68335,61433],{"class":313},[254,68337,13705],{"class":260},[254,68339,54537],{"class":264},[254,68341,54540],{"class":2103},[254,68343,265],{"class":264},[254,68345,68346],{"class":369},"'.tab-nav ul'",[254,68348,271],{"class":264},[254,68350,68351],{"class":256,"line":17068},[254,68352,68353],{"class":323},"    \u002F\u002F 2.添加事件\n",[254,68355,68356,68358,68360,68362,68364,68366,68368,68370,68372],{"class":256,"line":17073},[254,68357,67095],{"class":264},[254,68359,57954],{"class":2103},[254,68361,265],{"class":264},[254,68363,57959],{"class":369},[254,68365,12576],{"class":264},[254,68367,54590],{"class":260},[254,68369,1798],{"class":264},[254,68371,339],{"class":5357},[254,68373,12583],{"class":264},[254,68375,68376,68378,68380],{"class":256,"line":32774},[254,68377,58385],{"class":264},[254,68379,67151],{"class":2103},[254,68381,67154],{"class":264},[254,68383,68384],{"class":256,"line":32780},[254,68385,68386],{"class":323},"      \u002F\u002Fe.targer是我们点击的对象\n",[254,68388,68389,68391,68393,68395,68398],{"class":256,"line":32786},[254,68390,54621],{"class":260},[254,68392,67175],{"class":264},[254,68394,54627],{"class":260},[254,68396,68397],{"class":369}," 'A'",[254,68399,12583],{"class":264},[254,68401,68402,68404,68406,68408,68411,68413,68415,68417,68419],{"class":256,"line":32792},[254,68403,52066],{"class":264},[254,68405,54540],{"class":2103},[254,68407,265],{"class":264},[254,68409,68410],{"class":369},"'.active'",[254,68412,57144],{"class":264},[254,68414,57147],{"class":2103},[254,68416,265],{"class":264},[254,68418,64855],{"class":369},[254,68420,271],{"class":264},[254,68422,68423,68426,68428,68430,68432],{"class":256,"line":32798},[254,68424,68425],{"class":264},"        e.target.classList.",[254,68427,5475],{"class":2103},[254,68429,265],{"class":264},[254,68431,64855],{"class":369},[254,68433,271],{"class":264},[254,68435,68436],{"class":256,"line":32809},[254,68437,2540],{"emptyLinePlaceholder":184},[254,68439,68440],{"class":256,"line":32815},[254,68441,68442],{"class":323},"        \u002F\u002F 下面大盒子模块\n",[254,68444,68445],{"class":256,"line":32835},[254,68446,68447],{"class":323},"        \u002F\u002F console.log(e.target.dataset.id)\n",[254,68449,68450,68452,68454,68456,68458],{"class":256,"line":32841},[254,68451,61411],{"class":260},[254,68453,3172],{"class":313},[254,68455,13705],{"class":260},[254,68457,45707],{"class":260},[254,68459,68460],{"class":264},"e.target.dataset.id\n",[254,68462,68463,68465,68467,68469,68471,68473,68475,68477,68479],{"class":256,"line":32852},[254,68464,52066],{"class":264},[254,68466,54540],{"class":2103},[254,68468,265],{"class":264},[254,68470,64903],{"class":369},[254,68472,57144],{"class":264},[254,68474,57147],{"class":2103},[254,68476,265],{"class":264},[254,68478,64855],{"class":369},[254,68480,271],{"class":264},[254,68482,68483,68485,68487,68489,68491,68493,68495,68497,68499,68501,68503,68505,68507],{"class":256,"line":32858},[254,68484,52066],{"class":264},[254,68486,54540],{"class":2103},[254,68488,265],{"class":264},[254,68490,64929],{"class":369},[254,68492,705],{"class":264},[254,68494,45707],{"class":260},[254,68496,25259],{"class":313},[254,68498,57173],{"class":369},[254,68500,57144],{"class":264},[254,68502,5475],{"class":2103},[254,68504,265],{"class":264},[254,68506,64855],{"class":369},[254,68508,271],{"class":264},[254,68510,68511],{"class":256,"line":32864},[254,68512,2540],{"emptyLinePlaceholder":184},[254,68514,68515],{"class":256,"line":32870},[254,68516,52539],{"class":264},[254,68518,68519],{"class":256,"line":32876},[254,68520,33602],{"class":264},[254,68522,68523,68525,68527],{"class":256,"line":32882},[254,68524,52558],{"class":264},[254,68526,51954],{"class":51441},[254,68528,51448],{"class":264},[254,68530,68531,68533,68535],{"class":256,"line":32888},[254,68532,51926],{"class":264},[254,68534,51941],{"class":51441},[254,68536,51448],{"class":264},[254,68538,68539],{"class":256,"line":32894},[254,68540,2540],{"emptyLinePlaceholder":184},[254,68542,68543,68545,68547],{"class":256,"line":32914},[254,68544,51926],{"class":264},[254,68546,50776],{"class":51441},[254,68548,51448],{"class":264},[225,68550,68552],{"id":68551},"_333-页面加载事件","3.3.3 页面加载事件",[21,68554,68555],{},[24,68556,68557],{},"load",[14,68559,68560],{},[1602,68561],{"alt":174,"src":68562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[14,68564,68565],{},"window代表整个窗口，比document还要大",[14,68567,68568],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[14,68570,68571],{},"img.addEventListener('load', function () {",[14,68573,68574],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[14,68576,52605],{},[21,68578,68579],{"start":175},[24,68580,68581],{},"DOMContentLoaded",[14,68583,68584],{},[1602,68585],{"alt":174,"src":68586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[14,68588,68589],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[225,68591,68593],{"id":68592},"_334-元素滚动事件","3.3.4 元素滚动事件",[14,68595,68596],{},[1602,68597],{"alt":174,"src":68598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[14,68600,68601],{},[1602,68602],{"alt":174,"src":68603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[14,68605,68606],{},[1602,68607],{"alt":174,"src":68608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[14,68610,68611],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[14,68613,68614],{},"获得的是数字型数据，不带单位",[14,68616,68617],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[14,68619,68620],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[14,68622,68623],{},"它是通过document.documentElement来获取",[14,68625,68626],{},[1602,68627],{"alt":174,"src":68628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[14,68630,68631],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[225,68633,68635],{"id":68634},"_335-页面缩放事件","3.3.5 页面缩放事件",[14,68637,68638],{},[1602,68639],{"alt":174,"src":68640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[14,68642,68643],{},[1602,68644],{"alt":174,"src":68645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[225,68647,68649],{"id":68648},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[14,68651,68652],{},[1602,68653],{"alt":174,"src":68654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[14,68656,68657],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[14,68659,68660],{},[1602,68661],{"alt":174,"src":68662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[14,68664,68665],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[14,68667,68668],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[14,68670,68671],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[14,68673,68674],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[14,68676,68677],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[14,68679,68680],{},[1602,68681],{"alt":174,"src":68682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[14,68684,68685],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[14,68687,68688],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[14,68690,68691],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[14,68693,68694],{},"e.pageX-box.getBoundingClientRect()",[225,68696,68698],{"id":68697},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[14,68700,68701],{},[1602,68702],{"alt":174,"src":68703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[14,68705,68706],{},"这个是相对于视口来说的，它是个方法，不是属性值",[225,68708,68710],{"id":68709},"_338-总结","3.3.8 总结",[14,68712,68713],{},[1602,68714],{"alt":174,"src":68715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[14,68717,68718],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[14,68720,68721],{},"修改盒子的宽高只能通过width和height来实现",[225,68723,68725],{"id":68724},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[245,68727,68729],{"className":50774,"code":68728,"language":50776,"meta":174,"style":174},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[251,68730,68731,68736,68741,68746,68751],{"__ignoreMap":174},[254,68732,68733],{"class":256,"line":257},[254,68734,68735],{"class":264},"\u002F* 页面滑动 *\u002F\n",[254,68737,68738],{"class":256,"line":175},[254,68739,68740],{"class":264},"html {\n",[254,68742,68743],{"class":256,"line":1319},[254,68744,68745],{"class":264},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[254,68747,68748],{"class":256,"line":1334},[254,68749,68750],{"class":264},"  scroll-behavior: smooth;\n",[254,68752,68753],{"class":256,"line":1340},[254,68754,1705],{"class":264},[14,68756,68757],{},"默认是auto",[225,68759,68761],{"id":68760},"_3310-日期对象","3.3.10 日期对象",[22139,68763,68765],{"id":68764},"_33101-实例化","3.3.10.1 实例化",[14,68767,68768],{},[1602,68769],{"alt":174,"src":68770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[22139,68772,68774],{"id":68773},"_33102-时期对象方法","3.3.10.2 时期对象方法",[14,68776,68777],{},[1602,68778],{"alt":174,"src":68779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[14,68781,68782],{},"月份+1",[14,68784,68785],{},"老外认为第一天为0，星期天",[14,68787,68788],{},"方法使用的时候必须要跟括号",[14,68790,68791],{},"快速获得日期",[14,68793,68794],{},"\u002F\u002F 得到年月日",[14,68796,68797],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[14,68799,68800],{},"\u002F\u002F 得到当地日期",[14,68802,68803],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[14,68805,68806],{},"\u002F\u002F 得到当地时间",[14,68808,68809],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[14,68811,68812],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[14,68814,68815],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[51954,68817,68818],{},"\n\nconst div = document.querySelector('div')\n\nfunction getMyDate() {\n\nconst date = new Date()\n\nlet h = date.getHours()\n\nlet m = date.getMinutes()\n\nlet s = date.getSeconds()\n\nh = h \u003C 10 ? '0' + h : h\n\nm = m \u003C 10 ? '0' + m : m\n\ns = s \u003C 10 ? '0' + s : s\n\nreturn \\``今天是${date.getFullYear()}年${date.getMonth() + 1}月${date.getDate()}号 ${h}:${m}:${s}`\\`\n\n}\n\n\u002F\u002F 外面还写一个这个时间是因为定时器需要经过1秒才调用一次函数，刚开始会有空白\n\ndiv.innerHTML = getMyDate()\n\nsetInterval(function () {\n\ndiv.innerHTML = getMyDate()\n\n}, 1000)\n\n",[14,68820,68821],{},"学会去封装函数！",[22139,68823,68825],{"id":68824},"_33103-时间戳","3.3.10.3 时间戳",[14,68827,68828],{},[1602,68829],{"alt":174,"src":68830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[14,68832,68833],{},[1602,68834],{"alt":174,"src":68835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[14,68837,68838],{},"三种方法记住一个就可以",[225,68840,68842],{"id":68841},"_3311-节点操作","3.3.11 节点操作",[22139,68844,68846],{"id":68845},"_33111-dom节点","3.3.11.1 DOM节点",[14,68848,68849],{},[1602,68850],{"alt":174,"src":68851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[14,68853,68854],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[22139,68856,68858],{"id":68857},"_33112-查找节点","3.3.11.2 查找节点",[14,68860,68861],{},"前边的document.querySelector()是获取的元素",[14,68863,68864],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[14,68866,68867],{},[1602,68868],{"alt":174,"src":68869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[21,68871,68872],{},[24,68873,68874],{},"父节点",[14,68876,68877],{},[1602,68878],{"alt":174,"src":68879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[21,68881,68882],{"start":175},[24,68883,68884],{},"子节点",[14,68886,68887],{},[1602,68888],{"alt":174,"src":68889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[14,68891,68892],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[14,68894,68895],{},"children获得的是伪数组，是亲儿子",[21,68897,68898],{"start":1319},[24,68899,68900],{},"兄弟节点",[14,68902,68903],{},[1602,68904],{"alt":174,"src":68905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[22139,68907,68909],{"id":68908},"_33113-增加节点","3.3.11.3 增加节点",[14,68911,68912],{},[1602,68913],{"alt":174,"src":68914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[14,68916,68917],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[14,68919,68920],{},[1602,68921],{"alt":174,"src":68922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[14,68924,68925],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[14,68927,68928],{},"下面是写法的部分展示，就按照下边的格式来写",[14,68930,68931],{},"例：",[51954,68933,68934],{},"\n\n\u002F\u002F 1. 重构 let data = \\[\n\n{\n\nsrc: 'images\u002Fcourse01.png',\n\ntitle: 'Think PHP 5.0 博客系统实战项目演练',\n\nnum: 1125\n\n},\n\n{\n\nsrc: 'images\u002Fcourse02.png',\n\ntitle: 'Android 网络动态图片加载实战',\n\nnum: 357\n\n},\n\n{\n\nsrc: 'images\u002Fcourse03.png',\n\ntitle: 'Angular2 大前端商城实战项目演练',\n\nnum: 22250\n\n},\n\n{\n\nsrc: 'images\u002Fcourse04.png',\n\ntitle: 'Android APP 实战项目演练',\n\nnum: 389\n\n},\n\n{\n\nsrc: 'images\u002Fcourse05.png',\n\ntitle: 'UGUI 源码深度分析案例',\n\nnum: 124\n\n},\n\n{\n\nsrc: 'images\u002Fcourse06.png',\n\ntitle: 'Kami2首页界面切换效果实战演练',\n\nnum: 432\n\n},\n\n{\n\nsrc: 'images\u002Fcourse07.png',\n\ntitle: 'UNITY 从入门到精通实战案例',\n\nnum: 888\n\n},\n\n{\n\nsrc: 'images\u002Fcourse08.png',\n\ntitle: 'Cocos 深度学习你不会错过的实战',\n\nnum: 590\n\n},\n\n\\]\n\n\u002F\u002F 1.根据数据的个数创建对应的li\n\nconst ul = document.querySelector('ul')\n\nfor (let i = 0; i \u003C data.length; i++) {\n\n\u002F\u002F 2.创建新的li\n\nconst li = document.createElement('li')\n\nul.appendChild(li)\n\n\u002F\u002F 把内容给li\n\nli.innerHTML = `\u003Ca href=\"#\">`\n\n   `\u003Cimg src=\"${data[i].src}\" alt=\"\">`\n\n   `\u003Ch4>${data[i].title}\u003C\u002Fh4>`\n\n   `\u003Cdiv class=\"info\">`\n\n   `\u003Cspan>高级\u003C\u002Fspan>·\u003Cspan>${data[i].num}\u003C\u002Fspan>人在学 \u003C\u002Fdiv>`\n\n   `\u003C\u002Fa>`\n\n}\n\n",[14,68936,68937],{},[1602,68938],{"alt":174,"src":68939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[14,68941,68942],{},"false只克隆标签，里边的内容不会克隆过来",[245,68944,68946],{"className":50774,"code":68945,"language":50776,"meta":174,"style":174},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[251,68947,68948],{"__ignoreMap":174},[254,68949,68950],{"class":256,"line":257},[254,68951,68945],{"class":264},[22139,68953,68955],{"id":68954},"_33114-删除节点","3.3.11.4 删除节点",[14,68957,68958],{},[1602,68959],{"alt":174,"src":68960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[14,68962,68963],{},"父亲删儿子",[14,68965,68966],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[225,68968,68970],{"id":68969},"_3312-m端事件","3.3.12 M端事件",[14,68972,68973],{},"M端就是移动端",[14,68975,68976],{},[1602,68977],{"alt":174,"src":68978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[225,68980,68982],{"id":68981},"_3313-插件","3.3.13 插件",[14,68984,68985],{},"要熟悉官网！！！",[14,68987,68988],{},[42,68989,68990],{"href":68990,"rel":68991},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[151],[14,68993,68994],{},[42,68995,68996],{"href":68996,"rel":68997},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[151],[225,68999,69001],{"id":69000},"_3314-学生信息表","3.3.14 学生信息表",[21,69003,69004,69007,69010,69013,69016,69019,69022,69025],{},[24,69005,69006],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[24,69008,69009],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[24,69011,69012],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[24,69014,69015],{},"用好表单元素自带的属性，value,name等",[24,69017,69018],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[24,69020,69021],{},"不要忘记事件对象",[24,69023,69024],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[24,69026,69027],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[14,69029,69030],{},"结构：",[245,69032,69034],{"className":50774,"code":69033,"language":50776,"meta":174,"style":174},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\" \u002F>\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \u002F>\n  \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\" \u002F>\n  \u003Ctitle>学生信息管理\u003C\u002Ftitle>\n  \u003Clink rel=\"stylesheet\" href=\"css\u002Findex.css\" \u002F>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Ch1>新增学员\u003C\u002Fh1>\n  \u003Cform class=\"info\" autocomplete=\"off\">\n    姓名：\u003Cinput type=\"text\" class=\"uname\" name=\"uname\" \u002F>\n    年龄：\u003Cinput type=\"text\" class=\"age\" name=\"age\" \u002F>\n    性别:\n    \u003Cselect name=\"gender\" class=\"gender\">\n      \u003Coption value=\"男\">男\u003C\u002Foption>\n      \u003Coption value=\"女\">女\u003C\u002Foption>\n    \u003C\u002Fselect>\n    薪资：\u003Cinput type=\"text\" class=\"salary\" name=\"salary\" \u002F>\n    就业城市：\u003Cselect name=\"city\" class=\"city\">\n      \u003Coption value=\"北京\">北京\u003C\u002Foption>\n      \u003Coption value=\"上海\">上海\u003C\u002Foption>\n      \u003Coption value=\"广州\">广州\u003C\u002Foption>\n      \u003Coption value=\"深圳\">深圳\u003C\u002Foption>\n      \u003Coption value=\"曹县\">曹县\u003C\u002Foption>\n    \u003C\u002Fselect>\n    \u003Cbutton class=\"add\">录入\u003C\u002Fbutton>\n  \u003C\u002Fform>\n\n  \u003Ch1>就业榜\u003C\u002Fh1>\n  \u003Ctable>\n    \u003Cthead>\n      \u003Ctr>\n        \u003Cth>序号\u003C\u002Fth>\n        \u003Cth>姓名\u003C\u002Fth>\n        \u003Cth>年龄\u003C\u002Fth>\n        \u003Cth>性别\u003C\u002Fth>\n        \u003Cth>薪资\u003C\u002Fth>\n        \u003Cth>就业城市\u003C\u002Fth>\n        \u003Cth>操作\u003C\u002Fth>\n      \u003C\u002Ftr>\n    \u003C\u002Fthead>\n    \u003Ctbody>\n      \u003C!-- \n        \u003Ctr>\n          \u003Ctd>1001\u003C\u002Ftd>\n          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n          \u003Ctd>19\u003C\u002Ftd>\n          \u003Ctd>男\u003C\u002Ftd>\n          \u003Ctd>15000\u003C\u002Ftd>\n          \u003Ctd>上海\u003C\u002Ftd>\n          \u003Ctd>\n            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n          \u003C\u002Ftd>\n        \u003C\u002Ftr> \n        -->\n    \u003C\u002Ftbody>\n  \u003C\u002Ftable>\n  \u003Cscript>\n    \u002F\u002F 获取元素\n    const uname = document.querySelector('.uname')\n    const age = document.querySelector('.age')\n    const gender = document.querySelector('.gender')\n    const salary = document.querySelector('.salary')\n    const city = document.querySelector('.city')\n    const tbody = document.querySelector('tbody')\n\n    \u002F\u002F 获取所有带有name属性的元素\n    const items = document.querySelectorAll('[name]')\n    \u002F\u002F 声明一个空的数组\n    const arr = []\n    \u002F\u002F 1.录入模块\n    \u002F\u002F 1.1这是一个表单提交事件\n    const info = document.querySelector('.info')\n    info.addEventListener('submit', function (e) {\n      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n      e.preventDefault()\n      \u002F\u002F console.log(11)\n\n      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n      \u002F\u002F 先遍历循环\n      for (let i = 0; i \u003C items.length; i++) {\n        if (items[i].value === '') {\n          return alert('输入内容不能为空')\n        }\n      }\n\n      \u002F\u002F 创建新的对象\n      const obj = {\n        stuID: arr.length + 1,\n        uname: uname.value,\n        age: age.value,\n        gender: gender.value,\n        salary: salary.value,\n        city: city.value\n      }\n      \u002F\u002F console.log(obj);\n      \u002F\u002F 追加到数组里面\n      arr.push(obj)\n      \u002F\u002F console.log(arr);\n      \u002F\u002F 清空表单  reset重置表单\n      this.reset()\n      \u002F\u002F 调用渲染函数\n      render()\n    })\n    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n    function render() {\n      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n      tbody.innerHTML = ''\n      \u002F\u002F 遍历数组\n      for (let i = 0; i \u003C arr.length; i++) {\n        const tr = document.createElement('tr')\n        tr.innerHTML = `\n        \u003Ctd>${arr[i].stuID}\u003C\u002Ftd>\n          \u003Ctd>${arr[i].uname}\u003C\u002Ftd>\n          \u003Ctd>${arr[i].age}\u003C\u002Ftd>\n          \u003Ctd>${arr[i].gender}\u003C\u002Ftd>\n          \u003Ctd>${arr[i].salary}\u003C\u002Ftd>\n          \u003Ctd>${arr[i].city}\u003C\u002Ftd>\n          \u003Ctd>\n            \u003Ca href=\"javascript:\" data-id=${i}>删除\u003C\u002Fa>\n          \u003C\u002Ftd> \n          `\n        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n        tbody.appendChild(tr)\n      }\n    }\n\n    \u002F\u002F 3.删除委托\n    \u002F\u002F 3.1 事件委托 tbody\n    tbody.addEventListener('click', function (e) {\n      if (e.target.tagName === 'A') {\n        \u002F\u002F 得到当前元素的自定义属性 data-id\n        \u002F\u002F console.log(e.target.dataset.id);\n        \u002F\u002F 删除arr 数组里面对应的数据\n        arr.splice(e.target.dataset.id, 1)\n        \u002F\u002F 重新渲染一次\n        render()\n      }\n    })\n  \u003C\u002Fscript>\n\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[251,69035,69036,69046,69060,69064,69072,69086,69106,69127,69140,69164,69172,69176,69184,69197,69218,69246,69274,69279,69301,69321,69340,69348,69376,69398,69418,69438,69458,69478,69498,69506,69526,69534,69538,69551,69559,69567,69575,69588,69601,69614,69627,69640,69653,69666,69674,69682,69690,69695,69700,69705,69710,69715,69720,69725,69730,69735,69740,69745,69750,69755,69763,69771,69779,69783,69803,69822,69842,69862,69882,69902,69906,69911,69931,69936,69946,69951,69956,69976,69998,70003,70013,70017,70021,70026,70031,70060,70074,70089,70093,70097,70101,70106,70117,70130,70135,70140,70145,70150,70155,70159,70164,70169,70178,70183,70188,70200,70205,70212,70216,70221,70231,70236,70246,70251,70279,70300,70310,70330,70348,70365,70382,70399,70416,70420,70430,70435,70440,70445,70456,70460,70464,70468,70473,70478,70499,70511,70516,70521,70526,70540,70545,70552,70556,70560,70568,70572,70580,70584],{"__ignoreMap":174},[254,69037,69038,69040,69042,69044],{"class":256,"line":257},[254,69039,51438],{"class":264},[254,69041,51442],{"class":51441},[254,69043,51445],{"class":2103},[254,69045,51448],{"class":264},[254,69047,69048,69050,69052,69054,69056,69058],{"class":256,"line":175},[254,69049,1174],{"class":264},[254,69051,50776],{"class":51441},[254,69053,51457],{"class":2103},[254,69055,310],{"class":264},[254,69057,51462],{"class":369},[254,69059,51448],{"class":264},[254,69061,69062],{"class":256,"line":1319},[254,69063,2540],{"emptyLinePlaceholder":184},[254,69065,69066,69068,69070],{"class":256,"line":1334},[254,69067,1174],{"class":264},[254,69069,51475],{"class":51441},[254,69071,51448],{"class":264},[254,69073,69074,69076,69078,69080,69082,69084],{"class":256,"line":1340},[254,69075,52285],{"class":264},[254,69077,51485],{"class":51441},[254,69079,51488],{"class":2103},[254,69081,310],{"class":264},[254,69083,51493],{"class":369},[254,69085,59268],{"class":264},[254,69087,69088,69090,69092,69094,69096,69098,69100,69102,69104],{"class":256,"line":1354},[254,69089,52285],{"class":264},[254,69091,51485],{"class":51441},[254,69093,15061],{"class":2103},[254,69095,310],{"class":264},[254,69097,51532],{"class":369},[254,69099,51512],{"class":2103},[254,69101,310],{"class":264},[254,69103,51539],{"class":369},[254,69105,59268],{"class":264},[254,69107,69108,69110,69112,69114,69116,69118,69120,69122,69125],{"class":256,"line":1360},[254,69109,52285],{"class":264},[254,69111,51485],{"class":51441},[254,69113,51504],{"class":2103},[254,69115,310],{"class":264},[254,69117,51509],{"class":369},[254,69119,51512],{"class":2103},[254,69121,310],{"class":264},[254,69123,69124],{"class":369},"\"ie=edge\"",[254,69126,59268],{"class":264},[254,69128,69129,69131,69133,69136,69138],{"class":256,"line":1451},[254,69130,52285],{"class":264},[254,69132,51548],{"class":51441},[254,69134,69135],{"class":264},">学生信息管理\u003C\u002F",[254,69137,51548],{"class":51441},[254,69139,51448],{"class":264},[254,69141,69142,69144,69147,69150,69152,69155,69157,69159,69162],{"class":256,"line":1457},[254,69143,52285],{"class":264},[254,69145,69146],{"class":51441},"link",[254,69148,69149],{"class":2103}," rel",[254,69151,310],{"class":264},[254,69153,69154],{"class":369},"\"stylesheet\"",[254,69156,61198],{"class":2103},[254,69158,310],{"class":264},[254,69160,69161],{"class":369},"\"css\u002Findex.css\"",[254,69163,59268],{"class":264},[254,69165,69166,69168,69170],{"class":256,"line":1469},[254,69167,51926],{"class":264},[254,69169,51475],{"class":51441},[254,69171,51448],{"class":264},[254,69173,69174],{"class":256,"line":1752},[254,69175,2540],{"emptyLinePlaceholder":184},[254,69177,69178,69180,69182],{"class":256,"line":1757},[254,69179,1174],{"class":264},[254,69181,51941],{"class":51441},[254,69183,51448],{"class":264},[254,69185,69186,69188,69190,69193,69195],{"class":256,"line":1763},[254,69187,52285],{"class":264},[254,69189,10],{"class":51441},[254,69191,69192],{"class":264},">新增学员\u003C\u002F",[254,69194,10],{"class":51441},[254,69196,51448],{"class":264},[254,69198,69199,69201,69203,69205,69207,69209,69212,69214,69216],{"class":256,"line":1768},[254,69200,52285],{"class":264},[254,69202,66766],{"class":51441},[254,69204,53627],{"class":2103},[254,69206,310],{"class":264},[254,69208,62805],{"class":369},[254,69210,69211],{"class":2103}," autocomplete",[254,69213,310],{"class":264},[254,69215,31917],{"class":369},[254,69217,51448],{"class":264},[254,69219,69220,69223,69225,69227,69229,69231,69233,69235,69238,69240,69242,69244],{"class":256,"line":1782},[254,69221,69222],{"class":264},"    姓名：\u003C",[254,69224,53962],{"class":51441},[254,69226,53965],{"class":2103},[254,69228,310],{"class":264},[254,69230,62840],{"class":369},[254,69232,53627],{"class":2103},[254,69234,310],{"class":264},[254,69236,69237],{"class":369},"\"uname\"",[254,69239,15061],{"class":2103},[254,69241,310],{"class":264},[254,69243,69237],{"class":369},[254,69245,59268],{"class":264},[254,69247,69248,69251,69253,69255,69257,69259,69261,69263,69266,69268,69270,69272],{"class":256,"line":1787},[254,69249,69250],{"class":264},"    年龄：\u003C",[254,69252,53962],{"class":51441},[254,69254,53965],{"class":2103},[254,69256,310],{"class":264},[254,69258,62840],{"class":369},[254,69260,53627],{"class":2103},[254,69262,310],{"class":264},[254,69264,69265],{"class":369},"\"age\"",[254,69267,15061],{"class":2103},[254,69269,310],{"class":264},[254,69271,69265],{"class":369},[254,69273,59268],{"class":264},[254,69275,69276],{"class":256,"line":1793},[254,69277,69278],{"class":264},"    性别:\n",[254,69280,69281,69283,69286,69288,69290,69293,69295,69297,69299],{"class":256,"line":1814},[254,69282,51482],{"class":264},[254,69284,69285],{"class":51441},"select",[254,69287,15061],{"class":2103},[254,69289,310],{"class":264},[254,69291,69292],{"class":369},"\"gender\"",[254,69294,53627],{"class":2103},[254,69296,310],{"class":264},[254,69298,69292],{"class":369},[254,69300,51448],{"class":264},[254,69302,69303,69305,69308,69310,69312,69314,69317,69319],{"class":256,"line":1819},[254,69304,55375],{"class":264},[254,69306,69307],{"class":51441},"option",[254,69309,66792],{"class":2103},[254,69311,310],{"class":264},[254,69313,10102],{"class":369},[254,69315,69316],{"class":264},">男\u003C\u002F",[254,69318,69307],{"class":51441},[254,69320,51448],{"class":264},[254,69322,69323,69325,69327,69329,69331,69333,69336,69338],{"class":256,"line":1833},[254,69324,55375],{"class":264},[254,69326,69307],{"class":51441},[254,69328,66792],{"class":2103},[254,69330,310],{"class":264},[254,69332,10171],{"class":369},[254,69334,69335],{"class":264},">女\u003C\u002F",[254,69337,69307],{"class":51441},[254,69339,51448],{"class":264},[254,69341,69342,69344,69346],{"class":256,"line":1838},[254,69343,51917],{"class":264},[254,69345,69285],{"class":51441},[254,69347,51448],{"class":264},[254,69349,69350,69353,69355,69357,69359,69361,69363,69365,69368,69370,69372,69374],{"class":256,"line":1867},[254,69351,69352],{"class":264},"    薪资：\u003C",[254,69354,53962],{"class":51441},[254,69356,53965],{"class":2103},[254,69358,310],{"class":264},[254,69360,62840],{"class":369},[254,69362,53627],{"class":2103},[254,69364,310],{"class":264},[254,69366,69367],{"class":369},"\"salary\"",[254,69369,15061],{"class":2103},[254,69371,310],{"class":264},[254,69373,69367],{"class":369},[254,69375,59268],{"class":264},[254,69377,69378,69381,69383,69385,69387,69390,69392,69394,69396],{"class":256,"line":1872},[254,69379,69380],{"class":264},"    就业城市：\u003C",[254,69382,69285],{"class":51441},[254,69384,15061],{"class":2103},[254,69386,310],{"class":264},[254,69388,69389],{"class":369},"\"city\"",[254,69391,53627],{"class":2103},[254,69393,310],{"class":264},[254,69395,69389],{"class":369},[254,69397,51448],{"class":264},[254,69399,69400,69402,69404,69406,69408,69411,69414,69416],{"class":256,"line":1889},[254,69401,55375],{"class":264},[254,69403,69307],{"class":51441},[254,69405,66792],{"class":2103},[254,69407,310],{"class":264},[254,69409,69410],{"class":369},"\"北京\"",[254,69412,69413],{"class":264},">北京\u003C\u002F",[254,69415,69307],{"class":51441},[254,69417,51448],{"class":264},[254,69419,69420,69422,69424,69426,69428,69431,69434,69436],{"class":256,"line":1894},[254,69421,55375],{"class":264},[254,69423,69307],{"class":51441},[254,69425,66792],{"class":2103},[254,69427,310],{"class":264},[254,69429,69430],{"class":369},"\"上海\"",[254,69432,69433],{"class":264},">上海\u003C\u002F",[254,69435,69307],{"class":51441},[254,69437,51448],{"class":264},[254,69439,69440,69442,69444,69446,69448,69451,69454,69456],{"class":256,"line":1899},[254,69441,55375],{"class":264},[254,69443,69307],{"class":51441},[254,69445,66792],{"class":2103},[254,69447,310],{"class":264},[254,69449,69450],{"class":369},"\"广州\"",[254,69452,69453],{"class":264},">广州\u003C\u002F",[254,69455,69307],{"class":51441},[254,69457,51448],{"class":264},[254,69459,69460,69462,69464,69466,69468,69471,69474,69476],{"class":256,"line":1904},[254,69461,55375],{"class":264},[254,69463,69307],{"class":51441},[254,69465,66792],{"class":2103},[254,69467,310],{"class":264},[254,69469,69470],{"class":369},"\"深圳\"",[254,69472,69473],{"class":264},">深圳\u003C\u002F",[254,69475,69307],{"class":51441},[254,69477,51448],{"class":264},[254,69479,69480,69482,69484,69486,69488,69491,69494,69496],{"class":256,"line":1918},[254,69481,55375],{"class":264},[254,69483,69307],{"class":51441},[254,69485,66792],{"class":2103},[254,69487,310],{"class":264},[254,69489,69490],{"class":369},"\"曹县\"",[254,69492,69493],{"class":264},">曹县\u003C\u002F",[254,69495,69307],{"class":51441},[254,69497,51448],{"class":264},[254,69499,69500,69502,69504],{"class":256,"line":1923},[254,69501,51917],{"class":264},[254,69503,69285],{"class":51441},[254,69505,51448],{"class":264},[254,69507,69508,69510,69512,69514,69516,69519,69522,69524],{"class":256,"line":2717},[254,69509,51482],{"class":264},[254,69511,54028],{"class":51441},[254,69513,53627],{"class":2103},[254,69515,310],{"class":264},[254,69517,69518],{"class":369},"\"add\"",[254,69520,69521],{"class":264},">录入\u003C\u002F",[254,69523,54028],{"class":51441},[254,69525,51448],{"class":264},[254,69527,69528,69530,69532],{"class":256,"line":2731},[254,69529,52558],{"class":264},[254,69531,66766],{"class":51441},[254,69533,51448],{"class":264},[254,69535,69536],{"class":256,"line":2739},[254,69537,2540],{"emptyLinePlaceholder":184},[254,69539,69540,69542,69544,69547,69549],{"class":256,"line":2744},[254,69541,52285],{"class":264},[254,69543,10],{"class":51441},[254,69545,69546],{"class":264},">就业榜\u003C\u002F",[254,69548,10],{"class":51441},[254,69550,51448],{"class":264},[254,69552,69553,69555,69557],{"class":256,"line":2750},[254,69554,52285],{"class":264},[254,69556,402],{"class":51441},[254,69558,51448],{"class":264},[254,69560,69561,69563,69565],{"class":256,"line":2756},[254,69562,51482],{"class":264},[254,69564,405],{"class":51441},[254,69566,51448],{"class":264},[254,69568,69569,69571,69573],{"class":256,"line":2761},[254,69570,55375],{"class":264},[254,69572,408],{"class":51441},[254,69574,51448],{"class":264},[254,69576,69577,69579,69581,69584,69586],{"class":256,"line":8089},[254,69578,55443],{"class":264},[254,69580,411],{"class":51441},[254,69582,69583],{"class":264},">序号\u003C\u002F",[254,69585,411],{"class":51441},[254,69587,51448],{"class":264},[254,69589,69590,69592,69594,69597,69599],{"class":256,"line":8113},[254,69591,55443],{"class":264},[254,69593,411],{"class":51441},[254,69595,69596],{"class":264},">姓名\u003C\u002F",[254,69598,411],{"class":51441},[254,69600,51448],{"class":264},[254,69602,69603,69605,69607,69610,69612],{"class":256,"line":8118},[254,69604,55443],{"class":264},[254,69606,411],{"class":51441},[254,69608,69609],{"class":264},">年龄\u003C\u002F",[254,69611,411],{"class":51441},[254,69613,51448],{"class":264},[254,69615,69616,69618,69620,69623,69625],{"class":256,"line":8124},[254,69617,55443],{"class":264},[254,69619,411],{"class":51441},[254,69621,69622],{"class":264},">性别\u003C\u002F",[254,69624,411],{"class":51441},[254,69626,51448],{"class":264},[254,69628,69629,69631,69633,69636,69638],{"class":256,"line":8151},[254,69630,55443],{"class":264},[254,69632,411],{"class":51441},[254,69634,69635],{"class":264},">薪资\u003C\u002F",[254,69637,411],{"class":51441},[254,69639,51448],{"class":264},[254,69641,69642,69644,69646,69649,69651],{"class":256,"line":8156},[254,69643,55443],{"class":264},[254,69645,411],{"class":51441},[254,69647,69648],{"class":264},">就业城市\u003C\u002F",[254,69650,411],{"class":51441},[254,69652,51448],{"class":264},[254,69654,69655,69657,69659,69662,69664],{"class":256,"line":8162},[254,69656,55443],{"class":264},[254,69658,411],{"class":51441},[254,69660,69661],{"class":264},">操作\u003C\u002F",[254,69663,411],{"class":51441},[254,69665,51448],{"class":264},[254,69667,69668,69670,69672],{"class":256,"line":8174},[254,69669,55548],{"class":264},[254,69671,408],{"class":51441},[254,69673,51448],{"class":264},[254,69675,69676,69678,69680],{"class":256,"line":8186},[254,69677,51917],{"class":264},[254,69679,405],{"class":51441},[254,69681,51448],{"class":264},[254,69683,69684,69686,69688],{"class":256,"line":8198},[254,69685,51482],{"class":264},[254,69687,449],{"class":51441},[254,69689,51448],{"class":264},[254,69691,69692],{"class":256,"line":9857},[254,69693,69694],{"class":323},"      \u003C!-- \n",[254,69696,69697],{"class":256,"line":9882},[254,69698,69699],{"class":323},"        \u003Ctr>\n",[254,69701,69702],{"class":256,"line":9905},[254,69703,69704],{"class":323},"          \u003Ctd>1001\u003C\u002Ftd>\n",[254,69706,69707],{"class":256,"line":9929},[254,69708,69709],{"class":323},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[254,69711,69712],{"class":256,"line":9934},[254,69713,69714],{"class":323},"          \u003Ctd>19\u003C\u002Ftd>\n",[254,69716,69717],{"class":256,"line":9939},[254,69718,69719],{"class":323},"          \u003Ctd>男\u003C\u002Ftd>\n",[254,69721,69722],{"class":256,"line":9944},[254,69723,69724],{"class":323},"          \u003Ctd>15000\u003C\u002Ftd>\n",[254,69726,69727],{"class":256,"line":9953},[254,69728,69729],{"class":323},"          \u003Ctd>上海\u003C\u002Ftd>\n",[254,69731,69732],{"class":256,"line":9958},[254,69733,69734],{"class":323},"          \u003Ctd>\n",[254,69736,69737],{"class":256,"line":9964},[254,69738,69739],{"class":323},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[254,69741,69742],{"class":256,"line":9985},[254,69743,69744],{"class":323},"          \u003C\u002Ftd>\n",[254,69746,69747],{"class":256,"line":9991},[254,69748,69749],{"class":323},"        \u003C\u002Ftr> \n",[254,69751,69752],{"class":256,"line":10005},[254,69753,69754],{"class":323},"        -->\n",[254,69756,69757,69759,69761],{"class":256,"line":10011},[254,69758,51917],{"class":264},[254,69760,449],{"class":51441},[254,69762,51448],{"class":264},[254,69764,69765,69767,69769],{"class":256,"line":10038},[254,69766,52558],{"class":264},[254,69768,402],{"class":51441},[254,69770,51448],{"class":264},[254,69772,69773,69775,69777],{"class":256,"line":10047},[254,69774,52285],{"class":264},[254,69776,51954],{"class":51441},[254,69778,51448],{"class":264},[254,69780,69781],{"class":256,"line":10053},[254,69782,60099],{"class":323},[254,69784,69785,69787,69790,69792,69794,69796,69798,69801],{"class":256,"line":10061},[254,69786,11362],{"class":260},[254,69788,69789],{"class":313}," uname",[254,69791,13705],{"class":260},[254,69793,54537],{"class":264},[254,69795,54540],{"class":2103},[254,69797,265],{"class":264},[254,69799,69800],{"class":369},"'.uname'",[254,69802,271],{"class":264},[254,69804,69805,69807,69809,69811,69813,69815,69817,69820],{"class":256,"line":10066},[254,69806,11362],{"class":260},[254,69808,15830],{"class":313},[254,69810,13705],{"class":260},[254,69812,54537],{"class":264},[254,69814,54540],{"class":2103},[254,69816,265],{"class":264},[254,69818,69819],{"class":369},"'.age'",[254,69821,271],{"class":264},[254,69823,69824,69826,69829,69831,69833,69835,69837,69840],{"class":256,"line":16745},[254,69825,11362],{"class":260},[254,69827,69828],{"class":313}," gender",[254,69830,13705],{"class":260},[254,69832,54537],{"class":264},[254,69834,54540],{"class":2103},[254,69836,265],{"class":264},[254,69838,69839],{"class":369},"'.gender'",[254,69841,271],{"class":264},[254,69843,69844,69846,69849,69851,69853,69855,69857,69860],{"class":256,"line":16751},[254,69845,11362],{"class":260},[254,69847,69848],{"class":313}," salary",[254,69850,13705],{"class":260},[254,69852,54537],{"class":264},[254,69854,54540],{"class":2103},[254,69856,265],{"class":264},[254,69858,69859],{"class":369},"'.salary'",[254,69861,271],{"class":264},[254,69863,69864,69866,69869,69871,69873,69875,69877,69880],{"class":256,"line":16774},[254,69865,11362],{"class":260},[254,69867,69868],{"class":313}," city",[254,69870,13705],{"class":260},[254,69872,54537],{"class":264},[254,69874,54540],{"class":2103},[254,69876,265],{"class":264},[254,69878,69879],{"class":369},"'.city'",[254,69881,271],{"class":264},[254,69883,69884,69886,69889,69891,69893,69895,69897,69900],{"class":256,"line":16780},[254,69885,11362],{"class":260},[254,69887,69888],{"class":313}," tbody",[254,69890,13705],{"class":260},[254,69892,54537],{"class":264},[254,69894,54540],{"class":2103},[254,69896,265],{"class":264},[254,69898,69899],{"class":369},"'tbody'",[254,69901,271],{"class":264},[254,69903,69904],{"class":256,"line":16803},[254,69905,2540],{"emptyLinePlaceholder":184},[254,69907,69908],{"class":256,"line":16817},[254,69909,69910],{"class":323},"    \u002F\u002F 获取所有带有name属性的元素\n",[254,69912,69913,69915,69918,69920,69922,69924,69926,69929],{"class":256,"line":16837},[254,69914,11362],{"class":260},[254,69916,69917],{"class":313}," items",[254,69919,13705],{"class":260},[254,69921,54537],{"class":264},[254,69923,55822],{"class":2103},[254,69925,265],{"class":264},[254,69927,69928],{"class":369},"'[name]'",[254,69930,271],{"class":264},[254,69932,69933],{"class":256,"line":16843},[254,69934,69935],{"class":323},"    \u002F\u002F 声明一个空的数组\n",[254,69937,69938,69940,69942,69944],{"class":256,"line":16854},[254,69939,11362],{"class":260},[254,69941,57836],{"class":313},[254,69943,13705],{"class":260},[254,69945,51979],{"class":264},[254,69947,69948],{"class":256,"line":16877},[254,69949,69950],{"class":323},"    \u002F\u002F 1.录入模块\n",[254,69952,69953],{"class":256,"line":16899},[254,69954,69955],{"class":323},"    \u002F\u002F 1.1这是一个表单提交事件\n",[254,69957,69958,69960,69963,69965,69967,69969,69971,69974],{"class":256,"line":16904},[254,69959,11362],{"class":260},[254,69961,69962],{"class":313}," info",[254,69964,13705],{"class":260},[254,69966,54537],{"class":264},[254,69968,54540],{"class":2103},[254,69970,265],{"class":264},[254,69972,69973],{"class":369},"'.info'",[254,69975,271],{"class":264},[254,69977,69978,69981,69983,69985,69988,69990,69992,69994,69996],{"class":256,"line":16910},[254,69979,69980],{"class":264},"    info.",[254,69982,57954],{"class":2103},[254,69984,265],{"class":264},[254,69986,69987],{"class":369},"'submit'",[254,69989,12576],{"class":264},[254,69991,54590],{"class":260},[254,69993,1798],{"class":264},[254,69995,339],{"class":5357},[254,69997,12583],{"class":264},[254,69999,70000],{"class":256,"line":16924},[254,70001,70002],{"class":323},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[254,70004,70005,70008,70011],{"class":256,"line":16937},[254,70006,70007],{"class":264},"      e.",[254,70009,70010],{"class":2103},"preventDefault",[254,70012,2116],{"class":264},[254,70014,70015],{"class":256,"line":16942},[254,70016,60153],{"class":323},[254,70018,70019],{"class":256,"line":16956},[254,70020,2540],{"emptyLinePlaceholder":184},[254,70022,70023],{"class":256,"line":16961},[254,70024,70025],{"class":323},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[254,70027,70028],{"class":256,"line":16967},[254,70029,70030],{"class":323},"      \u002F\u002F 先遍历循环\n",[254,70032,70033,70035,70037,70039,70041,70043,70045,70047,70049,70052,70054,70056,70058],{"class":256,"line":16972},[254,70034,52425],{"class":260},[254,70036,1798],{"class":264},[254,70038,51988],{"class":260},[254,70040,9579],{"class":264},[254,70042,310],{"class":260},[254,70044,4233],{"class":313},[254,70046,9586],{"class":264},[254,70048,1174],{"class":260},[254,70050,70051],{"class":264}," items.",[254,70053,52109],{"class":313},[254,70055,3354],{"class":264},[254,70057,2432],{"class":260},[254,70059,12583],{"class":264},[254,70061,70062,70064,70067,70069,70072],{"class":256,"line":16986},[254,70063,2637],{"class":260},[254,70065,70066],{"class":264}," (items[i].value ",[254,70068,54627],{"class":260},[254,70070,70071],{"class":369}," ''",[254,70073,12583],{"class":264},[254,70075,70076,70079,70082,70084,70087],{"class":256,"line":16991},[254,70077,70078],{"class":260},"          return",[254,70080,70081],{"class":2103}," alert",[254,70083,265],{"class":264},[254,70085,70086],{"class":369},"'输入内容不能为空'",[254,70088,271],{"class":264},[254,70090,70091],{"class":256,"line":16996},[254,70092,2669],{"class":264},[254,70094,70095],{"class":256,"line":17010},[254,70096,52539],{"class":264},[254,70098,70099],{"class":256,"line":17022},[254,70100,2540],{"emptyLinePlaceholder":184},[254,70102,70103],{"class":256,"line":17027},[254,70104,70105],{"class":323},"      \u002F\u002F 创建新的对象\n",[254,70107,70108,70110,70113,70115],{"class":256,"line":17040},[254,70109,58369],{"class":260},[254,70111,70112],{"class":313}," obj",[254,70114,13705],{"class":260},[254,70116,15713],{"class":264},[254,70118,70119,70122,70124,70126,70128],{"class":256,"line":17045},[254,70120,70121],{"class":264},"        stuID: arr.",[254,70123,52109],{"class":313},[254,70125,45707],{"class":260},[254,70127,25259],{"class":313},[254,70129,31607],{"class":264},[254,70131,70132],{"class":256,"line":17050},[254,70133,70134],{"class":264},"        uname: uname.value,\n",[254,70136,70137],{"class":256,"line":17055},[254,70138,70139],{"class":264},"        age: age.value,\n",[254,70141,70142],{"class":256,"line":17068},[254,70143,70144],{"class":264},"        gender: gender.value,\n",[254,70146,70147],{"class":256,"line":17073},[254,70148,70149],{"class":264},"        salary: salary.value,\n",[254,70151,70152],{"class":256,"line":32774},[254,70153,70154],{"class":264},"        city: city.value\n",[254,70156,70157],{"class":256,"line":32780},[254,70158,52539],{"class":264},[254,70160,70161],{"class":256,"line":32786},[254,70162,70163],{"class":323},"      \u002F\u002F console.log(obj);\n",[254,70165,70166],{"class":256,"line":32792},[254,70167,70168],{"class":323},"      \u002F\u002F 追加到数组里面\n",[254,70170,70171,70173,70175],{"class":256,"line":32798},[254,70172,58148],{"class":264},[254,70174,52025],{"class":2103},[254,70176,70177],{"class":264},"(obj)\n",[254,70179,70180],{"class":256,"line":32809},[254,70181,70182],{"class":323},"      \u002F\u002F console.log(arr);\n",[254,70184,70185],{"class":256,"line":32815},[254,70186,70187],{"class":323},"      \u002F\u002F 清空表单  reset重置表单\n",[254,70189,70190,70193,70195,70198],{"class":256,"line":32835},[254,70191,70192],{"class":313},"      this",[254,70194,822],{"class":264},[254,70196,70197],{"class":2103},"reset",[254,70199,2116],{"class":264},[254,70201,70202],{"class":256,"line":32841},[254,70203,70204],{"class":323},"      \u002F\u002F 调用渲染函数\n",[254,70206,70207,70210],{"class":256,"line":32852},[254,70208,70209],{"class":2103},"      render",[254,70211,2116],{"class":264},[254,70213,70214],{"class":256,"line":32858},[254,70215,33602],{"class":264},[254,70217,70218],{"class":256,"line":32864},[254,70219,70220],{"class":323},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[254,70222,70223,70226,70229],{"class":256,"line":32870},[254,70224,70225],{"class":260},"    function",[254,70227,70228],{"class":2103}," render",[254,70230,10994],{"class":264},[254,70232,70233],{"class":256,"line":32876},[254,70234,70235],{"class":323},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[254,70237,70238,70241,70243],{"class":256,"line":32882},[254,70239,70240],{"class":264},"      tbody.innerHTML ",[254,70242,310],{"class":260},[254,70244,70245],{"class":369}," ''\n",[254,70247,70248],{"class":256,"line":32888},[254,70249,70250],{"class":323},"      \u002F\u002F 遍历数组\n",[254,70252,70253,70255,70257,70259,70261,70263,70265,70267,70269,70271,70273,70275,70277],{"class":256,"line":32894},[254,70254,52425],{"class":260},[254,70256,1798],{"class":264},[254,70258,51988],{"class":260},[254,70260,9579],{"class":264},[254,70262,310],{"class":260},[254,70264,4233],{"class":313},[254,70266,9586],{"class":264},[254,70268,1174],{"class":260},[254,70270,52106],{"class":264},[254,70272,52109],{"class":313},[254,70274,3354],{"class":264},[254,70276,2432],{"class":260},[254,70278,12583],{"class":264},[254,70280,70281,70283,70286,70288,70290,70293,70295,70298],{"class":256,"line":32914},[254,70282,61411],{"class":260},[254,70284,70285],{"class":313}," tr",[254,70287,13705],{"class":260},[254,70289,54537],{"class":264},[254,70291,70292],{"class":2103},"createElement",[254,70294,265],{"class":264},[254,70296,70297],{"class":369},"'tr'",[254,70299,271],{"class":264},[254,70301,70302,70305,70307],{"class":256,"line":32920},[254,70303,70304],{"class":264},"        tr.innerHTML ",[254,70306,310],{"class":260},[254,70308,70309],{"class":369}," `\n",[254,70311,70312,70315,70317,70319,70321,70324,70327],{"class":256,"line":32936},[254,70313,70314],{"class":369},"        \u003Ctd>${",[254,70316,4020],{"class":264},[254,70318,1154],{"class":369},[254,70320,705],{"class":264},[254,70322,70323],{"class":369},"].",[254,70325,70326],{"class":264},"stuID",[254,70328,70329],{"class":369},"}\u003C\u002Ftd>\n",[254,70331,70332,70335,70337,70339,70341,70343,70346],{"class":256,"line":32942},[254,70333,70334],{"class":369},"          \u003Ctd>${",[254,70336,4020],{"class":264},[254,70338,1154],{"class":369},[254,70340,705],{"class":264},[254,70342,70323],{"class":369},[254,70344,70345],{"class":264},"uname",[254,70347,70329],{"class":369},[254,70349,70350,70352,70354,70356,70358,70360,70363],{"class":256,"line":32956},[254,70351,70334],{"class":369},[254,70353,4020],{"class":264},[254,70355,1154],{"class":369},[254,70357,705],{"class":264},[254,70359,70323],{"class":369},[254,70361,70362],{"class":264},"age",[254,70364,70329],{"class":369},[254,70366,70367,70369,70371,70373,70375,70377,70380],{"class":256,"line":32962},[254,70368,70334],{"class":369},[254,70370,4020],{"class":264},[254,70372,1154],{"class":369},[254,70374,705],{"class":264},[254,70376,70323],{"class":369},[254,70378,70379],{"class":264},"gender",[254,70381,70329],{"class":369},[254,70383,70384,70386,70388,70390,70392,70394,70397],{"class":256,"line":32977},[254,70385,70334],{"class":369},[254,70387,4020],{"class":264},[254,70389,1154],{"class":369},[254,70391,705],{"class":264},[254,70393,70323],{"class":369},[254,70395,70396],{"class":264},"salary",[254,70398,70329],{"class":369},[254,70400,70401,70403,70405,70407,70409,70411,70414],{"class":256,"line":32983},[254,70402,70334],{"class":369},[254,70404,4020],{"class":264},[254,70406,1154],{"class":369},[254,70408,705],{"class":264},[254,70410,70323],{"class":369},[254,70412,70413],{"class":264},"city",[254,70415,70329],{"class":369},[254,70417,70418],{"class":256,"line":32992},[254,70419,69734],{"class":369},[254,70421,70422,70425,70427],{"class":256,"line":32998},[254,70423,70424],{"class":369},"            \u003Ca href=\"javascript:\" data-id=${",[254,70426,705],{"class":264},[254,70428,70429],{"class":369},"}>删除\u003C\u002Fa>\n",[254,70431,70432],{"class":256,"line":33007},[254,70433,70434],{"class":369},"          \u003C\u002Ftd> \n",[254,70436,70437],{"class":256,"line":33013},[254,70438,70439],{"class":369},"          `\n",[254,70441,70442],{"class":256,"line":33019},[254,70443,70444],{"class":323},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[254,70446,70447,70450,70453],{"class":256,"line":33028},[254,70448,70449],{"class":264},"        tbody.",[254,70451,70452],{"class":2103},"appendChild",[254,70454,70455],{"class":264},"(tr)\n",[254,70457,70458],{"class":256,"line":33034},[254,70459,52539],{"class":264},[254,70461,70462],{"class":256,"line":33045},[254,70463,2327],{"class":264},[254,70465,70466],{"class":256,"line":33051},[254,70467,2540],{"emptyLinePlaceholder":184},[254,70469,70470],{"class":256,"line":33070},[254,70471,70472],{"class":323},"    \u002F\u002F 3.删除委托\n",[254,70474,70475],{"class":256,"line":33076},[254,70476,70477],{"class":323},"    \u002F\u002F 3.1 事件委托 tbody\n",[254,70479,70480,70483,70485,70487,70489,70491,70493,70495,70497],{"class":256,"line":33087},[254,70481,70482],{"class":264},"    tbody.",[254,70484,57954],{"class":2103},[254,70486,265],{"class":264},[254,70488,57959],{"class":369},[254,70490,12576],{"class":264},[254,70492,54590],{"class":260},[254,70494,1798],{"class":264},[254,70496,339],{"class":5357},[254,70498,12583],{"class":264},[254,70500,70501,70503,70505,70507,70509],{"class":256,"line":33093},[254,70502,54621],{"class":260},[254,70504,67175],{"class":264},[254,70506,54627],{"class":260},[254,70508,68397],{"class":369},[254,70510,12583],{"class":264},[254,70512,70513],{"class":256,"line":33113},[254,70514,70515],{"class":323},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[254,70517,70518],{"class":256,"line":33129},[254,70519,70520],{"class":323},"        \u002F\u002F console.log(e.target.dataset.id);\n",[254,70522,70523],{"class":256,"line":33135},[254,70524,70525],{"class":323},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[254,70527,70528,70531,70533,70536,70538],{"class":256,"line":33149},[254,70529,70530],{"class":264},"        arr.",[254,70532,58151],{"class":2103},[254,70534,70535],{"class":264},"(e.target.dataset.id, ",[254,70537,482],{"class":313},[254,70539,271],{"class":264},[254,70541,70542],{"class":256,"line":33155},[254,70543,70544],{"class":323},"        \u002F\u002F 重新渲染一次\n",[254,70546,70547,70550],{"class":256,"line":33161},[254,70548,70549],{"class":2103},"        render",[254,70551,2116],{"class":264},[254,70553,70554],{"class":256,"line":33172},[254,70555,52539],{"class":264},[254,70557,70558],{"class":256,"line":33178},[254,70559,33602],{"class":264},[254,70561,70562,70564,70566],{"class":256,"line":33184},[254,70563,52558],{"class":264},[254,70565,51954],{"class":51441},[254,70567,51448],{"class":264},[254,70569,70570],{"class":256,"line":33194},[254,70571,2540],{"emptyLinePlaceholder":184},[254,70573,70574,70576,70578],{"class":256,"line":33200},[254,70575,51926],{"class":264},[254,70577,51941],{"class":51441},[254,70579,51448],{"class":264},[254,70581,70582],{"class":256,"line":33211},[254,70583,2540],{"emptyLinePlaceholder":184},[254,70585,70586,70588,70590],{"class":256,"line":33217},[254,70587,51926],{"class":264},[254,70589,50776],{"class":51441},[254,70591,51448],{"class":264},[14,70593,70594],{},"样式：",[245,70596,70600],{"className":70597,"code":70598,"language":70599,"meta":174,"style":174},"language-yaml shiki shiki-themes github-light github-dark","* {\n  margin: 0;\n  padding: 0;\n}\n\na {\n  text-decoration: none;\n  color:#721c24;\n}\nh1 {\n  text-align: center;\n  color:#333;\n  margin: 20px 0;\n \n}\ntable {\n  margin:0 auto;\n  width: 800px;\n  border-collapse: collapse;\n  color:#004085;\n}\nth {\n  padding: 10px;\n  background: #cfe5ff;\n  \n  font-size: 20px;\n  font-weight: 400;\n}\ntd,th {\n  border:1px solid #b8daff;\n}\ntd {\n  padding:10px;\n  color:#666;\n  text-align: center;\n  font-size: 16px;\n}\ntbody tr {\n  background: #fff;\n}\ntbody tr:hover {\n  background: #e1ecf8;\n}\n.info {\n  width: 900px;\n  margin: 50px auto;\n  text-align: center;\n}\n.info  input, .info select {\n  width: 80px;\n  height: 27px;\n  outline: none;\n  border-radius: 5px;\n  border:1px solid #b8daff;\n  padding-left: 5px;\n  box-sizing: border-box;\n  margin-right: 15px;\n}\n.info button {\n  width: 60px;\n  height: 27px;\n  background-color: #004085;\n  outline: none;\n  border: 0;\n  color: #fff;\n  cursor: pointer;\n  border-radius: 5px;\n}\n.info .age {\n  width: 50px;\n}\n","yaml",[251,70601,70602,70607,70617,70626,70630,70634,70639,70649,70654,70658,70663,70673,70678,70687,70691,70695,70700,70705,70715,70725,70730,70734,70739,70748,70758,70763,70773,70783,70787,70792,70800,70804,70809,70814,70819,70827,70836,70840,70845,70854,70858,70863,70872,70876,70881,70890,70899,70907,70911,70916,70925,70935,70944,70954,70960,70969,70979,70989,70993,70998,71007,71015,71025,71033,71042,71051,71061,71069,71073,71078,71087],{"__ignoreMap":174},[254,70603,70604],{"class":256,"line":257},[254,70605,70606],{"class":264},"* {\n",[254,70608,70609,70612,70614],{"class":256,"line":175},[254,70610,70611],{"class":51441},"  margin",[254,70613,51578],{"class":264},[254,70615,70616],{"class":369},"0;\n",[254,70618,70619,70622,70624],{"class":256,"line":1319},[254,70620,70621],{"class":369},"  padding",[254,70623,51578],{"class":264},[254,70625,70616],{"class":369},[254,70627,70628],{"class":256,"line":1334},[254,70629,1705],{"class":264},[254,70631,70632],{"class":256,"line":1340},[254,70633,2540],{"emptyLinePlaceholder":184},[254,70635,70636],{"class":256,"line":1354},[254,70637,70638],{"class":369},"a {\n",[254,70640,70641,70644,70646],{"class":256,"line":1360},[254,70642,70643],{"class":51441},"  text-decoration",[254,70645,51578],{"class":264},[254,70647,70648],{"class":369},"none;\n",[254,70650,70651],{"class":256,"line":1451},[254,70652,70653],{"class":369},"  color:#721c24;\n",[254,70655,70656],{"class":256,"line":1457},[254,70657,1705],{"class":264},[254,70659,70660],{"class":256,"line":1469},[254,70661,70662],{"class":369},"h1 {\n",[254,70664,70665,70668,70670],{"class":256,"line":1752},[254,70666,70667],{"class":51441},"  text-align",[254,70669,51578],{"class":264},[254,70671,70672],{"class":369},"center;\n",[254,70674,70675],{"class":256,"line":1757},[254,70676,70677],{"class":369},"  color:#333;\n",[254,70679,70680,70682,70684],{"class":256,"line":1763},[254,70681,70611],{"class":51441},[254,70683,51578],{"class":264},[254,70685,70686],{"class":369},"20px 0;\n",[254,70688,70689],{"class":256,"line":1768},[254,70690,2814],{"class":264},[254,70692,70693],{"class":256,"line":1782},[254,70694,1705],{"class":264},[254,70696,70697],{"class":256,"line":1787},[254,70698,70699],{"class":369},"table {\n",[254,70701,70702],{"class":256,"line":1793},[254,70703,70704],{"class":369},"  margin:0 auto;\n",[254,70706,70707,70710,70712],{"class":256,"line":1814},[254,70708,70709],{"class":51441},"  width",[254,70711,51578],{"class":264},[254,70713,70714],{"class":369},"800px;\n",[254,70716,70717,70720,70722],{"class":256,"line":1819},[254,70718,70719],{"class":51441},"  border-collapse",[254,70721,51578],{"class":264},[254,70723,70724],{"class":369},"collapse;\n",[254,70726,70727],{"class":256,"line":1833},[254,70728,70729],{"class":369},"  color:#004085;\n",[254,70731,70732],{"class":256,"line":1838},[254,70733,1705],{"class":264},[254,70735,70736],{"class":256,"line":1867},[254,70737,70738],{"class":369},"th {\n",[254,70740,70741,70743,70745],{"class":256,"line":1872},[254,70742,70621],{"class":51441},[254,70744,51578],{"class":264},[254,70746,70747],{"class":369},"10px;\n",[254,70749,70750,70753,70755],{"class":256,"line":1889},[254,70751,70752],{"class":51441},"  background",[254,70754,51578],{"class":264},[254,70756,70757],{"class":323},"#cfe5ff;\n",[254,70759,70760],{"class":256,"line":1894},[254,70761,70762],{"class":264},"  \n",[254,70764,70765,70768,70770],{"class":256,"line":1899},[254,70766,70767],{"class":51441},"  font-size",[254,70769,51578],{"class":264},[254,70771,70772],{"class":369},"20px;\n",[254,70774,70775,70778,70780],{"class":256,"line":1904},[254,70776,70777],{"class":51441},"  font-weight",[254,70779,51578],{"class":264},[254,70781,70782],{"class":369},"400;\n",[254,70784,70785],{"class":256,"line":1918},[254,70786,1705],{"class":264},[254,70788,70789],{"class":256,"line":1923},[254,70790,70791],{"class":369},"td,th {\n",[254,70793,70794,70797],{"class":256,"line":2717},[254,70795,70796],{"class":369},"  border:1px solid",[254,70798,70799],{"class":323}," #b8daff;\n",[254,70801,70802],{"class":256,"line":2731},[254,70803,1705],{"class":264},[254,70805,70806],{"class":256,"line":2739},[254,70807,70808],{"class":369},"td {\n",[254,70810,70811],{"class":256,"line":2744},[254,70812,70813],{"class":369},"  padding:10px;\n",[254,70815,70816],{"class":256,"line":2750},[254,70817,70818],{"class":369},"  color:#666;\n",[254,70820,70821,70823,70825],{"class":256,"line":2756},[254,70822,70667],{"class":51441},[254,70824,51578],{"class":264},[254,70826,70672],{"class":369},[254,70828,70829,70831,70833],{"class":256,"line":2761},[254,70830,70767],{"class":51441},[254,70832,51578],{"class":264},[254,70834,70835],{"class":369},"16px;\n",[254,70837,70838],{"class":256,"line":8089},[254,70839,1705],{"class":264},[254,70841,70842],{"class":256,"line":8113},[254,70843,70844],{"class":369},"tbody tr {\n",[254,70846,70847,70849,70851],{"class":256,"line":8118},[254,70848,70752],{"class":51441},[254,70850,51578],{"class":264},[254,70852,70853],{"class":323},"#fff;\n",[254,70855,70856],{"class":256,"line":8124},[254,70857,1705],{"class":264},[254,70859,70860],{"class":256,"line":8151},[254,70861,70862],{"class":369},"tbody tr:hover {\n",[254,70864,70865,70867,70869],{"class":256,"line":8156},[254,70866,70752],{"class":51441},[254,70868,51578],{"class":264},[254,70870,70871],{"class":323},"#e1ecf8;\n",[254,70873,70874],{"class":256,"line":8162},[254,70875,1705],{"class":264},[254,70877,70878],{"class":256,"line":8174},[254,70879,70880],{"class":369},".info {\n",[254,70882,70883,70885,70887],{"class":256,"line":8186},[254,70884,70709],{"class":51441},[254,70886,51578],{"class":264},[254,70888,70889],{"class":369},"900px;\n",[254,70891,70892,70894,70896],{"class":256,"line":8198},[254,70893,70611],{"class":51441},[254,70895,51578],{"class":264},[254,70897,70898],{"class":369},"50px auto;\n",[254,70900,70901,70903,70905],{"class":256,"line":9857},[254,70902,70667],{"class":51441},[254,70904,51578],{"class":264},[254,70906,70672],{"class":369},[254,70908,70909],{"class":256,"line":9882},[254,70910,1705],{"class":264},[254,70912,70913],{"class":256,"line":9905},[254,70914,70915],{"class":369},".info  input, .info select {\n",[254,70917,70918,70920,70922],{"class":256,"line":9929},[254,70919,70709],{"class":51441},[254,70921,51578],{"class":264},[254,70923,70924],{"class":369},"80px;\n",[254,70926,70927,70930,70932],{"class":256,"line":9934},[254,70928,70929],{"class":51441},"  height",[254,70931,51578],{"class":264},[254,70933,70934],{"class":369},"27px;\n",[254,70936,70937,70940,70942],{"class":256,"line":9939},[254,70938,70939],{"class":51441},"  outline",[254,70941,51578],{"class":264},[254,70943,70648],{"class":369},[254,70945,70946,70949,70951],{"class":256,"line":9944},[254,70947,70948],{"class":51441},"  border-radius",[254,70950,51578],{"class":264},[254,70952,70953],{"class":369},"5px;\n",[254,70955,70956,70958],{"class":256,"line":9953},[254,70957,70796],{"class":369},[254,70959,70799],{"class":323},[254,70961,70962,70965,70967],{"class":256,"line":9958},[254,70963,70964],{"class":51441},"  padding-left",[254,70966,51578],{"class":264},[254,70968,70953],{"class":369},[254,70970,70971,70974,70976],{"class":256,"line":9964},[254,70972,70973],{"class":51441},"  box-sizing",[254,70975,51578],{"class":264},[254,70977,70978],{"class":369},"border-box;\n",[254,70980,70981,70984,70986],{"class":256,"line":9985},[254,70982,70983],{"class":51441},"  margin-right",[254,70985,51578],{"class":264},[254,70987,70988],{"class":369},"15px;\n",[254,70990,70991],{"class":256,"line":9991},[254,70992,1705],{"class":264},[254,70994,70995],{"class":256,"line":10005},[254,70996,70997],{"class":369},".info button {\n",[254,70999,71000,71002,71004],{"class":256,"line":10011},[254,71001,70709],{"class":51441},[254,71003,51578],{"class":264},[254,71005,71006],{"class":369},"60px;\n",[254,71008,71009,71011,71013],{"class":256,"line":10038},[254,71010,70929],{"class":51441},[254,71012,51578],{"class":264},[254,71014,70934],{"class":369},[254,71016,71017,71020,71022],{"class":256,"line":10047},[254,71018,71019],{"class":51441},"  background-color",[254,71021,51578],{"class":264},[254,71023,71024],{"class":323},"#004085;\n",[254,71026,71027,71029,71031],{"class":256,"line":10053},[254,71028,70939],{"class":51441},[254,71030,51578],{"class":264},[254,71032,70648],{"class":369},[254,71034,71035,71038,71040],{"class":256,"line":10061},[254,71036,71037],{"class":51441},"  border",[254,71039,51578],{"class":264},[254,71041,70616],{"class":369},[254,71043,71044,71047,71049],{"class":256,"line":10066},[254,71045,71046],{"class":51441},"  color",[254,71048,51578],{"class":264},[254,71050,70853],{"class":323},[254,71052,71053,71056,71058],{"class":256,"line":16745},[254,71054,71055],{"class":51441},"  cursor",[254,71057,51578],{"class":264},[254,71059,71060],{"class":369},"pointer;\n",[254,71062,71063,71065,71067],{"class":256,"line":16751},[254,71064,70948],{"class":51441},[254,71066,51578],{"class":264},[254,71068,70953],{"class":369},[254,71070,71071],{"class":256,"line":16774},[254,71072,1705],{"class":264},[254,71074,71075],{"class":256,"line":16780},[254,71076,71077],{"class":369},".info .age {\n",[254,71079,71080,71082,71084],{"class":256,"line":16803},[254,71081,70709],{"class":51441},[254,71083,51578],{"class":264},[254,71085,71086],{"class":369},"50px;\n",[254,71088,71089],{"class":256,"line":16817},[254,71090,1705],{"class":264},[14,71092,71093],{},"思路：",[14,71095,71096],{},[1602,71097],{"alt":174,"src":71098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[14,71100,71101],{},[1602,71102],{"alt":174,"src":71103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[14,71105,71106],{},[1602,71107],{"alt":174,"src":71108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[225,71110,71112],{"id":71111},"_3315-重绘回流","3.3.15 重绘回流",[14,71114,71115],{},[1602,71116],{"alt":174,"src":71117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[14,71119,71120],{},[1602,71121],{"alt":174,"src":71122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[14,71124,71125],{},[1602,71126],{"alt":174,"src":71127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[34,71129,71131],{"id":71130},"_34-bom","3.4 BOM",[14,71133,71134],{},[1602,71135],{"alt":174,"src":71136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[14,71138,71139],{},"平时写的document省略了window而已，实际上是window.document",[14,71141,71142],{},"函数也是这样，调用的时候实际为window.fn()",[14,71144,71145],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[14,71147,71148],{},"window大部分情况下可以省略",[225,71150,71152],{"id":71151},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[14,71154,71155],{},"只执行一次",[14,71157,71158],{},[1602,71159],{"alt":174,"src":71160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[14,71162,71163],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[14,71165,71166],{},[1602,71167],{"alt":174,"src":71168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[225,71170,71172],{"id":71171},"_342-js执行机制","3.4.2 JS执行机制",[14,71174,71175],{},[1602,71176],{"alt":174,"src":71177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[14,71179,71180],{},"两个的结果都是1111 3333 2222",[14,71182,71183],{},[1602,71184],{"alt":174,"src":71185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[14,71187,71188],{},[1602,71189],{"alt":174,"src":71190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[14,71192,71193],{},[1602,71194],{"alt":174,"src":71195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[14,71197,71198],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[14,71200,71201],{},"工作流程：",[14,71203,71204],{},[1602,71205],{"alt":174,"src":71206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[14,71208,71209],{},[1602,71210],{"alt":174,"src":71211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[14,71213,71214],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[14,71216,71217],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[225,71219,71221],{"id":71220},"_343-location对象","3.4.3 location对象",[14,71223,71224],{},"location对象属于window这个全局对象下的，可以 省略window",[14,71226,71227],{},[1602,71228],{"alt":174,"src":71229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[14,71231,71232],{},"href可以跳转页面",[21,71234,71235],{},[24,71236,71237],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[14,71239,71240],{},"search得到提交信息之后网站后边的地址",[14,71242,71243],{},[1602,71244],{"alt":174,"src":71245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[14,71247,71248],{},[1602,71249],{"alt":174,"src":71250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[21,71252,71253],{"start":175},[24,71254,71255],{},"hash:这个获取单页面应用#后边的地址",[14,71257,71258],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[14,71260,71261],{},[1602,71262],{"alt":174,"src":71263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[245,71265,71267],{"className":53208,"code":71266,"language":53210,"meta":174,"style":174},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[251,71268,71269,71289,71309],{"__ignoreMap":174},[254,71270,71271,71273,71275,71277,71279,71282,71285,71287],{"class":256,"line":257},[254,71272,52285],{"class":264},[254,71274,42],{"class":51441},[254,71276,61198],{"class":2103},[254,71278,310],{"class":264},[254,71280,71281],{"class":369},"\"#\u002Fmy\"",[254,71283,71284],{"class":264},">我的\u003C\u002F",[254,71286,42],{"class":51441},[254,71288,51448],{"class":264},[254,71290,71291,71293,71295,71297,71299,71302,71305,71307],{"class":256,"line":175},[254,71292,52285],{"class":264},[254,71294,42],{"class":51441},[254,71296,61198],{"class":2103},[254,71298,310],{"class":264},[254,71300,71301],{"class":369},"\"#\u002Ffriend\"",[254,71303,71304],{"class":264},">关注\u003C\u002F",[254,71306,42],{"class":51441},[254,71308,51448],{"class":264},[254,71310,71311,71313,71315,71317,71319,71322,71325,71327],{"class":256,"line":1319},[254,71312,52285],{"class":264},[254,71314,42],{"class":51441},[254,71316,61198],{"class":2103},[254,71318,310],{"class":264},[254,71320,71321],{"class":369},"\"#\u002Fdownload\"",[254,71323,71324],{"class":264},">下载\u003C\u002F",[254,71326,42],{"class":51441},[254,71328,51448],{"class":264},[14,71330,71331],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[21,71333,71334],{"start":1319},[24,71335,71336,71337,71339,71340,71342],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[53857,71338],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[53857,71341],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[225,71344,71346],{"id":71345},"_345-navigator对象","3.4.5 navigator对象",[14,71348,71349],{},[1602,71350],{"alt":174,"src":71351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[245,71353,71357],{"className":71354,"code":71355,"language":71356,"meta":174,"style":174},"language-javascript shiki shiki-themes github-light github-dark","\u002F\u002F 检测 userAgent（浏览器信息） \n!(function () { \nconst userAgent = navigator.userAgent \n\u002F\u002F 验证是否为Android或iPhone \nconst android = userAgent.match(\u002F(Android);?[\\s\\\u002F]+([\\d.]+)?\u002F) \nconst iphone = userAgent.match(\u002F(iPhone\\sOS)\\s([\\d_]+)\u002F) \n\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \nif (android || iphone) { \nlocation.href = 'http:\u002F\u002Fm.itcast.cn' \n} \n})()\n","javascript",[251,71358,71359,71364,71375,71387,71392,71443,71484,71489,71502,71514,71519],{"__ignoreMap":174},[254,71360,71361],{"class":256,"line":257},[254,71362,71363],{"class":323},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[254,71365,71366,71368,71370,71372],{"class":256,"line":175},[254,71367,491],{"class":260},[254,71369,265],{"class":264},[254,71371,54590],{"class":260},[254,71373,71374],{"class":264}," () { \n",[254,71376,71377,71379,71382,71384],{"class":256,"line":1319},[254,71378,6933],{"class":260},[254,71380,71381],{"class":313}," userAgent",[254,71383,13705],{"class":260},[254,71385,71386],{"class":264}," navigator.userAgent \n",[254,71388,71389],{"class":256,"line":1334},[254,71390,71391],{"class":323},"\u002F\u002F 验证是否为Android或iPhone \n",[254,71393,71394,71396,71399,71401,71404,71407,71409,71411,71414,71416,71419,71423,71425,71427,71429,71432,71434,71436,71438,71440],{"class":256,"line":1340},[254,71395,6933],{"class":260},[254,71397,71398],{"class":313}," android",[254,71400,13705],{"class":260},[254,71402,71403],{"class":264}," userAgent.",[254,71405,71406],{"class":2103},"match",[254,71408,265],{"class":264},[254,71410,848],{"class":369},[254,71412,71413],{"class":48118},"(Android);",[254,71415,1250],{"class":260},[254,71417,71418],{"class":313},"[\\s",[254,71420,71422],{"class":71421},"snhLl","\\\u002F",[254,71424,1204],{"class":313},[254,71426,745],{"class":260},[254,71428,265],{"class":48118},[254,71430,71431],{"class":313},"[\\d.]",[254,71433,745],{"class":260},[254,71435,693],{"class":48118},[254,71437,1250],{"class":260},[254,71439,848],{"class":369},[254,71441,71442],{"class":264},") \n",[254,71444,71445,71447,71450,71452,71454,71456,71458,71460,71463,71466,71469,71471,71473,71476,71478,71480,71482],{"class":256,"line":1354},[254,71446,6933],{"class":260},[254,71448,71449],{"class":313}," iphone",[254,71451,13705],{"class":260},[254,71453,71403],{"class":264},[254,71455,71406],{"class":2103},[254,71457,265],{"class":264},[254,71459,848],{"class":369},[254,71461,71462],{"class":48118},"(iPhone",[254,71464,71465],{"class":313},"\\s",[254,71467,71468],{"class":48118},"OS)",[254,71470,71465],{"class":313},[254,71472,265],{"class":48118},[254,71474,71475],{"class":313},"[\\d_]",[254,71477,745],{"class":260},[254,71479,693],{"class":48118},[254,71481,848],{"class":369},[254,71483,71442],{"class":264},[254,71485,71486],{"class":256,"line":1360},[254,71487,71488],{"class":323},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[254,71490,71491,71493,71496,71499],{"class":256,"line":1451},[254,71492,1671],{"class":260},[254,71494,71495],{"class":264}," (android ",[254,71497,71498],{"class":260},"||",[254,71500,71501],{"class":264}," iphone) { \n",[254,71503,71504,71507,71509,71512],{"class":256,"line":1457},[254,71505,71506],{"class":264},"location.href ",[254,71508,310],{"class":260},[254,71510,71511],{"class":369}," 'http:\u002F\u002Fm.itcast.cn'",[254,71513,2814],{"class":264},[254,71515,71516],{"class":256,"line":1469},[254,71517,71518],{"class":264},"} \n",[254,71520,71521],{"class":256,"line":1752},[254,71522,71523],{"class":264},"})()\n",[225,71525,71527],{"id":71526},"_346-histroy对象","3.4.6 histroy对象",[14,71529,71530],{},[1602,71531],{"alt":174,"src":71532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[14,71534,71535],{},"浏览器地址的前进与后退!!!",[14,71537,71538],{},"history.back() 等效于 history.go(-1)",[14,71540,71541],{},"history.forward() 等效于 history.go(1)",[34,71543,71545],{"id":71544},"_35-本地存储","3.5 本地存储",[21,71547,71548,71551,71554],{},[24,71549,71550],{},"数据存储在用户浏览器中",[24,71552,71553],{},"设置、读取方便、甚至页面刷新不丢失数据",[24,71555,71556],{},"容量较大，sessionStorage和localStorage约 5M 左右",[225,71558,71560],{"id":71559},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[14,71562,71563],{},"只能存储字符串",[14,71565,71566],{},[1602,71567],{"alt":174,"src":71568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[14,71570,71571],{},[1602,71572],{"alt":174,"src":71573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[14,71575,71576],{},"键值对要加引号,不然就会当变量来看了",[14,71578,71579],{},"localStorage.setItem('uname', 'pink')",[14,71581,71582],{},"刷新之后信息不再丢失",[14,71584,71585],{},"操作key,value会跟着变",[14,71587,71588],{},"删除只删除键就可以,即名字",[14,71590,71579],{},[14,71592,71593],{},"改:",[14,71595,71596],{},"localStorage.setItem('uname','red')",[14,71598,71599],{},"有这个键就是改,没有这个键就是改",[14,71601,71602],{},[1602,71603],{"alt":174,"src":71604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[14,71606,71607],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[14,71609,71610],{},[1602,71611],{"alt":174,"src":71612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[14,71614,71615],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[225,71617,71619],{"id":71618},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[14,71621,71622],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[14,71624,71625],{},"特性:",[21,71627,71628,71631,71634,71637],{},[24,71629,71630],{},"生命周期为关闭浏览器窗口",[24,71632,71633],{},"在同一个窗口(页面)下数据可以共享",[24,71635,71636],{},"以键值对的形式存储使用",[24,71638,71639],{},"用法跟localStorage 基本相同",[225,71641,71643],{"id":71642},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[14,71645,71646],{},"本地只能存储字符串,无法直接存储复杂数据类型",[245,71648,71650],{"className":53208,"code":71649,"language":53210,"meta":174,"style":174},"\u003Cscript>\n    const obj = {\n      uname: 'pink老师',\n      age: 18,\n      gender: '女'\n    }\n    \u002F\u002F 存储复杂数据类型\n    localStorage.setItem('obj', obj)\n  \u003C\u002Fscript>\n",[251,71651,71652,71660,71665,71670,71675,71680,71684,71689,71694],{"__ignoreMap":174},[254,71653,71654,71656,71658],{"class":256,"line":257},[254,71655,1174],{"class":264},[254,71657,51954],{"class":51441},[254,71659,51448],{"class":264},[254,71661,71662],{"class":256,"line":175},[254,71663,71664],{"class":264},"    const obj = {\n",[254,71666,71667],{"class":256,"line":1319},[254,71668,71669],{"class":264},"      uname: 'pink老师',\n",[254,71671,71672],{"class":256,"line":1334},[254,71673,71674],{"class":264},"      age: 18,\n",[254,71676,71677],{"class":256,"line":1340},[254,71678,71679],{"class":264},"      gender: '女'\n",[254,71681,71682],{"class":256,"line":1354},[254,71683,2327],{"class":264},[254,71685,71686],{"class":256,"line":1360},[254,71687,71688],{"class":264},"    \u002F\u002F 存储复杂数据类型\n",[254,71690,71691],{"class":256,"line":1451},[254,71692,71693],{"class":264},"    localStorage.setItem('obj', obj)\n",[254,71695,71696,71698,71700],{"class":256,"line":1457},[254,71697,52558],{"class":264},[254,71699,51954],{"class":51441},[254,71701,51448],{"class":264},[14,71703,71704],{},[1602,71705],{"alt":174,"src":71706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[14,71708,71709],{},"如果获取一下数据:",[14,71711,71712],{},"log(localStorage.getItem('obj'))",[14,71714,71715],{},[1602,71716],{"alt":174,"src":71717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[14,71719,71720],{},"发现直接存对象是使用不了的!!!",[22139,71722,71724],{"id":71723},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[14,71726,71727],{},[1602,71728],{"alt":174,"src":71729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[245,71731,71733],{"className":50774,"code":71732,"language":50776,"meta":174,"style":174},"\u003Cscript>\n    const obj = {\n      uname: 'pink老师',\n      age: 18,\n      gender: '女'\n    }\n    \u002F\u002F 存储复杂数据类型\n  localStorage.setItem('obj', JSON.stringify(obj))\n  console.log(localStorage.getItem('obj'))\n  \u003C\u002Fscript>\n  \n  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n  类型是字符串的\n  JSON对象 属性和值有引号,而且引号统一是双引号\n",[251,71734,71735,71743,71753,71763,71772,71780,71784,71788,71814,71833,71841,71845,71850,71855],{"__ignoreMap":174},[254,71736,71737,71739,71741],{"class":256,"line":257},[254,71738,1174],{"class":264},[254,71740,51954],{"class":51441},[254,71742,51448],{"class":264},[254,71744,71745,71747,71749,71751],{"class":256,"line":175},[254,71746,11362],{"class":260},[254,71748,70112],{"class":313},[254,71750,13705],{"class":260},[254,71752,15713],{"class":264},[254,71754,71755,71758,71761],{"class":256,"line":1319},[254,71756,71757],{"class":264},"      uname: ",[254,71759,71760],{"class":369},"'pink老师'",[254,71762,31607],{"class":264},[254,71764,71765,71768,71770],{"class":256,"line":1334},[254,71766,71767],{"class":264},"      age: ",[254,71769,914],{"class":313},[254,71771,31607],{"class":264},[254,71773,71774,71777],{"class":256,"line":1340},[254,71775,71776],{"class":264},"      gender: ",[254,71778,71779],{"class":369},"'女'\n",[254,71781,71782],{"class":256,"line":1354},[254,71783,2327],{"class":264},[254,71785,71786],{"class":256,"line":1360},[254,71787,71688],{"class":323},[254,71789,71790,71793,71796,71798,71801,71803,71806,71808,71811],{"class":256,"line":1451},[254,71791,71792],{"class":264},"  localStorage.",[254,71794,71795],{"class":2103},"setItem",[254,71797,265],{"class":264},[254,71799,71800],{"class":369},"'obj'",[254,71802,12576],{"class":264},[254,71804,71805],{"class":313},"JSON",[254,71807,822],{"class":264},[254,71809,71810],{"class":2103},"stringify",[254,71812,71813],{"class":264},"(obj))\n",[254,71815,71816,71819,71821,71824,71827,71829,71831],{"class":256,"line":1457},[254,71817,71818],{"class":264},"  console.",[254,71820,58388],{"class":2103},[254,71822,71823],{"class":264},"(localStorage.",[254,71825,71826],{"class":2103},"getItem",[254,71828,265],{"class":264},[254,71830,71800],{"class":369},[254,71832,30638],{"class":264},[254,71834,71835,71837,71839],{"class":256,"line":1469},[254,71836,52558],{"class":264},[254,71838,51954],{"class":51441},[254,71840,51448],{"class":264},[254,71842,71843],{"class":256,"line":1752},[254,71844,70762],{"class":264},[254,71846,71847],{"class":256,"line":1757},[254,71848,71849],{"class":264},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[254,71851,71852],{"class":256,"line":1763},[254,71853,71854],{"class":264},"  类型是字符串的\n",[254,71856,71857],{"class":256,"line":1768},[254,71858,71859],{"class":264},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[22139,71861,71863],{"id":71862},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[14,71865,71866],{},[1602,71867],{"alt":174,"src":71868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[14,71870,71871],{},[1602,71872],{"alt":174,"src":71873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[245,71875,71877],{"className":53208,"code":71876,"language":53210,"meta":174,"style":174},"  \u003Cscript>\n    const obj = {\n      uname: 'pink老师',\n      age: 18,\n      gender: '女'\n    }\n    \u002F\u002F 1.存储复杂数据类型\n    \u002F\u002F localStorage.setItem('obj', obj)\n    \u002F\u002F console.log(localStorage.getItem('obj'))\n    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n    localStorage.setItem('obj', JSON.stringify(obj))\n    \u002F\u002F 取\n    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n    console.log(JSON.parse(localStorage.getItem('obj')))\n  \u003C\u002Fscript>\n",[251,71878,71879,71887,71891,71895,71899,71903,71907,71912,71917,71922,71927,71932,71937,71942,71947],{"__ignoreMap":174},[254,71880,71881,71883,71885],{"class":256,"line":257},[254,71882,52285],{"class":264},[254,71884,51954],{"class":51441},[254,71886,51448],{"class":264},[254,71888,71889],{"class":256,"line":175},[254,71890,71664],{"class":264},[254,71892,71893],{"class":256,"line":1319},[254,71894,71669],{"class":264},[254,71896,71897],{"class":256,"line":1334},[254,71898,71674],{"class":264},[254,71900,71901],{"class":256,"line":1340},[254,71902,71679],{"class":264},[254,71904,71905],{"class":256,"line":1354},[254,71906,2327],{"class":264},[254,71908,71909],{"class":256,"line":1360},[254,71910,71911],{"class":264},"    \u002F\u002F 1.存储复杂数据类型\n",[254,71913,71914],{"class":256,"line":1451},[254,71915,71916],{"class":264},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[254,71918,71919],{"class":256,"line":1457},[254,71920,71921],{"class":264},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[254,71923,71924],{"class":256,"line":1469},[254,71925,71926],{"class":264},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[254,71928,71929],{"class":256,"line":1752},[254,71930,71931],{"class":264},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[254,71933,71934],{"class":256,"line":1757},[254,71935,71936],{"class":264},"    \u002F\u002F 取\n",[254,71938,71939],{"class":256,"line":1763},[254,71940,71941],{"class":264},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[254,71943,71944],{"class":256,"line":1768},[254,71945,71946],{"class":264},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[254,71948,71949,71951,71953],{"class":256,"line":1782},[254,71950,52558],{"class":264},[254,71952,51954],{"class":51441},[254,71954,51448],{"class":264},[14,71956,71957],{},[1602,71958],{"alt":174,"src":71959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[225,71961,71963],{"id":71962},"_356-数组map方法","3.5.6 数组map方法",[14,71965,71966],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[14,71968,71969],{},[1602,71970],{"alt":174,"src":71971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[14,71973,71974],{},[1602,71975],{"alt":174,"src":71976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[14,71978,71979,71982],{},[414,71980,71981],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[14,71984,71985],{},"map有返回值，但是forEach没有返回值",[14,71987,71988],{},"map是个方法。用的时候要加 ()",[14,71990,71991],{},"map返回的是一个数组",[225,71993,71995],{"id":71994},"_357-数组中join方法","3.5.7 数组中join方法",[14,71997,71998],{},[1602,71999],{"alt":174,"src":72000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[14,72002,72003],{},"类似于python中拼接字符串一样！",[21,72005,72006,72009,72012],{},[24,72007,72008],{},"小括号为空则逗号分开",[24,72010,72011],{},"小括号为空字符串 ''，则元素之间没有分隔符",[24,72013,72014],{},"小括号用啥符号就用进行分割",[225,72016,72018],{"id":72017},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[21,72020,72021,72024,72027,72030,72033],{},[24,72022,72023],{},"记住本地时间获取快速方式：new Date().toDateString()",[24,72025,72026],{},"尽量减少DOM操作，用好map+join的渲染方式",[24,72028,72029],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[24,72031,72032],{},"return可以实现函数的结束",[24,72034,72035],{},"禁止跳转是 preventDefault() 不要忘记",[245,72037,72039],{"className":50774,"code":72038,"language":50776,"meta":174,"style":174},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      padding: 0;\n      margin: 0;\n    }\n\n    h2 {\n      text-align: center;\n      margin-top: 20px;\n    }\n\n    .info {\n      width: 700px;\n      margin: 10px auto;\n      text-align: center;\n    }\n\n    .uname,\n    .age,\n    .salary {\n      width: 100px;\n      height: 20px;\n      outline: none;\n      margin-right: 15px;\n    }\n\n    .gender,\n    .city {\n      width: 100px;\n      height: 25px;\n      outline: none;\n      margin-right: 15px;\n      border: 1px solid rgb(200, 197, 197);\n    }\n\n    button {\n      height: 25px;\n      width: 75px;\n      background-color: rgb(126, 187, 36);\n      color: #fff;\n      border: 0;\n    }\n\n    button span {\n      display: inline-block;\n      width: 10px;\n      height: 10px;\n      line-height: 11px;\n      border: 1px solid #fff;\n      border-radius: 5px;\n      margin-right: 1px;\n    }\n\n    .total {\n      width: 800px;\n      height: 40px;\n      line-height: 40px;\n      text-align: right;\n      margin: 40px auto 10px;\n      padding-right: 10px;\n      font-size: 13px;\n      background-color: rgb(237, 235, 235);\n      box-sizing: border-box;\n    }\n\n    .total span {\n      color: red;\n    }\n\n    table {\n      width: 800px;\n      margin: auto;\n      border-collapse: collapse;\n    }\n\n    th {\n      background-color: rgb(237, 235, 235);\n    }\n\n    th,\n    td {\n      height: 35px;\n      text-align: left;\n      font-size: 14px;\n      border: 1px solid rgb(228, 225, 225);\n      padding-left: 5px;\n      transition: all linear 0.5s;\n    }\n\n    tbody tr:hover {\n      background-color: rgb(237, 235, 235);\n      cursor: pointer;\n    }\n\n    tbody tr td a {\n      display: block;\n      width: 60px;\n      height: 25px;\n      line-height: 25px;\n      margin-top: 2px;\n      color: #fff;\n      text-align: center;\n      text-decoration: none;\n      background-color: orange;\n      border-radius: 12.5px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Ch2>学生就业统计表\u003C\u002Fh2>\n  \u003Cform class=\"info\" autocomplete=\"off\">\n    \u003Cinput type=\"text\" name=\"uname\" placeholder=\"姓名\" class=\"uname\">\n    \u003Cinput type=\"text\" name=\"age\" placeholder=\"年龄\" class=\"age\">\n    \u003Cinput type=\"text\" name=\"salary\" placeholder=\"薪资\" class=\"salary\">\n    \u003Cselect name=\"gender\" id=\"\" class=\"gender\">\n      \u003Coption value=\"男\">男\u003C\u002Foption>\n      \u003Coption value=\"女\">女\u003C\u002Foption>\n    \u003C\u002Fselect>\n    \u003Cselect name=\"city\" id=\"\" class=\"city\">\n      \u003Coption value=\"北京\">北京\u003C\u002Foption>\n      \u003Coption value=\"上海\">上海\u003C\u002Foption>\n      \u003Coption value=\"广州\">广州\u003C\u002Foption>\n      \u003Coption value=\"深圳\">深圳\u003C\u002Foption>\n      \u003Coption value=\"曹县\">曹县\u003C\u002Foption>\n    \u003C\u002Fselect>\n    \u003Cbutton>\n      \u003Cspan>+\u003C\u002Fspan>添加\u003C\u002Fbutton>\n  \u003C\u002Fform>\n  \u003Cdiv class=\"total\">共有数据 \u003Cspan>0\u003C\u002Fspan> 条\u003C\u002Fdiv>\n  \u003Ctable>\n    \u003Cthead>\n      \u003Ctr>\n        \u003Cth>ID\u003C\u002Fth>\n        \u003Cth>姓名\u003C\u002Fth>\n        \u003Cth>年龄\u003C\u002Fth>\n        \u003Cth>性别\u003C\u002Fth>\n        \u003Cth>薪资\u003C\u002Fth>\n        \u003Cth>就业城市\u003C\u002Fth>\n        \u003Cth>录入时间\u003C\u002Fth>\n        \u003Cth>操作\u003C\u002Fth>\n      \u003C\u002Ftr>\n    \u003C\u002Fthead>\n    \u003Ctbody>\n      \u003C!-- \u003Ctr>\n        \u003Ctd>1\u003C\u002Ftd>\n        \u003Ctd>1\u003C\u002Ftd>\n        \u003Ctd>1\u003C\u002Ftd>\n        \u003Ctd>1\u003C\u002Ftd>\n        \u003Ctd>1\u003C\u002Ftd>\n        \u003Ctd>1\u003C\u002Ftd>\n        \u003Ctd>1\u003C\u002Ftd>\n        \u003Ctd>\n          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n        \u003C\u002Ftd>\n      \u003C\u002Ftr> -->\n    \u003C\u002Ftbody>\n  \u003C\u002Ftable>\n  \u003Cscript>\n    \u002F\u002F const initData = [{\n    \u002F\u002F   unameId: 1,\n    \u002F\u002F   uname: '华晨宇',\n    \u002F\u002F   age: 22,\n    \u002F\u002F   salary: 12000,\n    \u002F\u002F   gender: '男',\n    \u002F\u002F   city: '北京',\n    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n    \u002F\u002F }]\n    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n    \u002F\u002F 1.渲染业务\n    \u002F\u002F 1.1 先读取本地存储的数据\n    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n\n    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n    const arr = []\n    console.log(arr)\n\n    \u002F\u002F 时间函数\n    function getTime() {\n      const date = new Date()\n      const h = date.getHours() \u003C 10 ? '0' + date.getHours() : date.getHours()\n      const m = date.getMinutes() \u003C 10 ? '0' + date.getMinutes() : date.getMinutes()\n      const s = date.getSeconds() \u003C 10 ? '0' + date.getSeconds() : date.getSeconds()\n      const str = `${date.getFullYear()}\u002F${date.getMonth() + 1}\u002F${date.getDate()} ${h}:${m}:${s}`\n      return str\n    }\n    \u002F\u002F 渲染函数\n    const tbody = document.querySelector('tbody')\n    function render() {\n      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n      const trArr = arr.map(function (ele, index) {\n        return `\n      \u003Ctr>\n        \u003Ctd>${ele.unameId}\u003C\u002Ftd>\n        \u003Ctd>${ele.uname}\u003C\u002Ftd>\n        \u003Ctd>${ele.age}\u003C\u002Ftd>\n        \u003Ctd>${ele.gender}\u003C\u002Ftd>\n        \u003Ctd>${ele.salary}\u003C\u002Ftd>\n        \u003Ctd>${ele.city}\u003C\u002Ftd>\n        \u003Ctd>${ele.time}\u003C\u002Ftd>\n        \u003Ctd>\n          \u003Ca href=\"#\" data-id=\"${index}\">删除\u003C\u002Fa>\n        \u003C\u002Ftd>\n      \u003C\u002Ftr>\n  `\n      })\n      console.log(trArr)\n\n      \u002F\u002F (2) 把数组转换为字符串join\n      \u002F\u002F (3) 把生成的字符串追加给tobody\n      tbody.innerHTML = trArr.join('')\n      \u002F\u002F 显示共有几条\n      document.querySelector('.total span').innerHTML = arr.length\n    }\n    \u002F\u002F render()\n\n    \u002F\u002F 获取DOM对象\n    const info = document.querySelector('.info')\n    const uname = document.querySelector('.uname')\n    const age = document.querySelector('.age')\n    const salary = document.querySelector('.salary')\n    const gender = document.querySelector('.gender')\n    const city = document.querySelector('.city')\n\n    \u002F\u002F form表单注册提交事件，阻止默认行为\n    info.addEventListener('submit', function (e) {\n      \u002F\u002F 禁止浏览器跳转\n      e.preventDefault()\n      \u002F\u002F 非空判断\n      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n      if (!uname.value || !age.value || !salary.value) {\n        return alert('输入内容不能为空')\n      }\n      arr.push({\n        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n        \u002F\u002F 对象的序号应为数组长度+1\n        \u002F\u002F unameId: arr.length + 1,\n\n        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n        \u002F\u002F 0当假看\n        unameId: arr.length ? arr[arr.length - 1].unameId + 1 : 1,\n        uname: uname.value,\n        age: age.value,\n        salary: salary.value,\n        gender: gender.value,\n        city: city.value,\n        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n        \u002F\u002F time: new Date().toDateString()\n        time: getTime()\n      })\n      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n      render()\n      this.reset() \u002F\u002F重置表单\n      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n      localStorage.setItem('data', JSON.stringify(arr))\n    })\n\n    \u002F\u002F 3.删除业务\n    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n    tbody.addEventListener('click', function (e) {\n      \u002F\u002F 判断是否点击的是删除按钮\n      if (e.target.tagName === 'A') {\n        \u002F\u002F alert(1)\n        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n        \u002F\u002F console.log(e.target)\n        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n\n        \u002F\u002F 确认框，确然是否真的要删除\n        \u002F\u002F confirm()为确认框\n        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n        if (confirm('您确定要删除这条数据吗？')) {\n          arr.splice(e.target.dataset.id, 1)\n          \u002F\u002F 3.4 重新渲染页面\n          render()\n          \u002F\u002F 3.5 把最新arr数组存到本地存储\n          localStorage.setItem('data', JSON.stringify(arr))\n        }\n      }\n\n    })\n\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[251,72040,72041,72051,72065,72069,72077,72091,72111,72123,72131,72137,72147,72157,72161,72165,72171,72181,72193,72197,72201,72208,72220,72234,72244,72248,72252,72259,72266,72273,72285,72297,72307,72319,72323,72327,72334,72341,72353,72365,72375,72387,72417,72421,72425,72432,72444,72456,72480,72490,72500,72504,72508,72516,72527,72539,72551,72563,72580,72592,72604,72608,72612,72619,72631,72643,72655,72666,72684,72697,72709,72733,72744,72748,72752,72760,72770,72774,72778,72784,72796,72807,72817,72821,72825,72831,72853,72857,72861,72867,72873,72885,72895,72907,72937,72950,72967,72971,72975,72986,73008,73018,73022,73026,73039,73049,73061,73073,73085,73097,73107,73117,73127,73138,73151,73155,73163,73171,73175,73183,73196,73216,73249,73282,73315,73341,73359,73377,73385,73411,73429,73447,73465,73483,73501,73509,73517,73535,73543,73572,73580,73588,73596,73609,73621,73633,73645,73657,73669,73682,73694,73702,73710,73718,73723,73728,73732,73736,73740,73744,73748,73752,73757,73762,73767,73772,73780,73788,73796,73801,73806,73811,73816,73821,73826,73831,73836,73841,73846,73851,73856,73861,73866,73870,73875,73880,73890,73899,73903,73908,73917,73933,73975,74015,74054,74119,74127,74131,74136,74154,74162,74167,74172,74202,74208,74213,74226,74238,74250,74262,74274,74286,74298,74302,74312,74316,74321,74326,74330,74339,74343,74348,74353,74372,74377,74397,74401,74406,74410,74415,74433,74451,74469,74488,74507,74526,74531,74537,74558,74564,74573,74579,74585,74591,74618,74631,74636,74646,74652,74658,74664,74670,74675,74681,74687,74693,74699,74732,74737,74742,74747,74752,74758,74764,74770,74781,74786,74792,74799,74813,74819,74843,74848,74853,74859,74865,74886,74892,74905,74911,74917,74923,74929,74934,74940,74946,74952,74970,74984,74990,74998,75004,75026,75031,75036,75041,75046,75051,75060,75069,75074],{"__ignoreMap":174},[254,72042,72043,72045,72047,72049],{"class":256,"line":257},[254,72044,51438],{"class":264},[254,72046,51442],{"class":51441},[254,72048,51445],{"class":2103},[254,72050,51448],{"class":264},[254,72052,72053,72055,72057,72059,72061,72063],{"class":256,"line":175},[254,72054,1174],{"class":264},[254,72056,50776],{"class":51441},[254,72058,51457],{"class":2103},[254,72060,310],{"class":264},[254,72062,51462],{"class":369},[254,72064,51448],{"class":264},[254,72066,72067],{"class":256,"line":1319},[254,72068,2540],{"emptyLinePlaceholder":184},[254,72070,72071,72073,72075],{"class":256,"line":1334},[254,72072,1174],{"class":264},[254,72074,51475],{"class":51441},[254,72076,51448],{"class":264},[254,72078,72079,72081,72083,72085,72087,72089],{"class":256,"line":1340},[254,72080,52285],{"class":264},[254,72082,51485],{"class":51441},[254,72084,51488],{"class":2103},[254,72086,310],{"class":264},[254,72088,51493],{"class":369},[254,72090,51448],{"class":264},[254,72092,72093,72095,72097,72099,72101,72103,72105,72107,72109],{"class":256,"line":1354},[254,72094,52285],{"class":264},[254,72096,51485],{"class":51441},[254,72098,15061],{"class":2103},[254,72100,310],{"class":264},[254,72102,51532],{"class":369},[254,72104,51512],{"class":2103},[254,72106,310],{"class":264},[254,72108,51539],{"class":369},[254,72110,51448],{"class":264},[254,72112,72113,72115,72117,72119,72121],{"class":256,"line":1360},[254,72114,52285],{"class":264},[254,72116,51548],{"class":51441},[254,72118,51551],{"class":264},[254,72120,51548],{"class":51441},[254,72122,51448],{"class":264},[254,72124,72125,72127,72129],{"class":256,"line":1451},[254,72126,52285],{"class":264},[254,72128,5267],{"class":51441},[254,72130,51448],{"class":264},[254,72132,72133,72135],{"class":256,"line":1457},[254,72134,6544],{"class":51441},[254,72136,15713],{"class":264},[254,72138,72139,72141,72143,72145],{"class":256,"line":1469},[254,72140,54836],{"class":313},[254,72142,51578],{"class":264},[254,72144,456],{"class":313},[254,72146,1430],{"class":264},[254,72148,72149,72151,72153,72155],{"class":256,"line":1752},[254,72150,54847],{"class":313},[254,72152,51578],{"class":264},[254,72154,456],{"class":313},[254,72156,1430],{"class":264},[254,72158,72159],{"class":256,"line":1757},[254,72160,2327],{"class":264},[254,72162,72163],{"class":256,"line":1763},[254,72164,2540],{"emptyLinePlaceholder":184},[254,72166,72167,72169],{"class":256,"line":1768},[254,72168,57420],{"class":51441},[254,72170,15713],{"class":264},[254,72172,72173,72175,72177,72179],{"class":256,"line":1782},[254,72174,57427],{"class":313},[254,72176,51578],{"class":264},[254,72178,51733],{"class":313},[254,72180,1430],{"class":264},[254,72182,72183,72185,72187,72189,72191],{"class":256,"line":1787},[254,72184,62218],{"class":313},[254,72186,51578],{"class":264},[254,72188,964],{"class":313},[254,72190,51633],{"class":260},[254,72192,1430],{"class":264},[254,72194,72195],{"class":256,"line":1793},[254,72196,2327],{"class":264},[254,72198,72199],{"class":256,"line":1814},[254,72200,2540],{"emptyLinePlaceholder":184},[254,72202,72203,72206],{"class":256,"line":1819},[254,72204,72205],{"class":2103},"    .info",[254,72207,15713],{"class":264},[254,72209,72210,72212,72214,72216,72218],{"class":256,"line":1833},[254,72211,54912],{"class":313},[254,72213,51578],{"class":264},[254,72215,51630],{"class":313},[254,72217,51633],{"class":260},[254,72219,1430],{"class":264},[254,72221,72222,72224,72226,72228,72230,72232],{"class":256,"line":1838},[254,72223,54847],{"class":313},[254,72225,51578],{"class":264},[254,72227,710],{"class":313},[254,72229,51633],{"class":260},[254,72231,51697],{"class":313},[254,72233,1430],{"class":264},[254,72235,72236,72238,72240,72242],{"class":256,"line":1867},[254,72237,57427],{"class":313},[254,72239,51578],{"class":264},[254,72241,51733],{"class":313},[254,72243,1430],{"class":264},[254,72245,72246],{"class":256,"line":1872},[254,72247,2327],{"class":264},[254,72249,72250],{"class":256,"line":1889},[254,72251,2540],{"emptyLinePlaceholder":184},[254,72253,72254,72257],{"class":256,"line":1894},[254,72255,72256],{"class":2103},"    .uname",[254,72258,31607],{"class":264},[254,72260,72261,72264],{"class":256,"line":1899},[254,72262,72263],{"class":2103},"    .age",[254,72265,31607],{"class":264},[254,72267,72268,72271],{"class":256,"line":1904},[254,72269,72270],{"class":2103},"    .salary",[254,72272,15713],{"class":264},[254,72274,72275,72277,72279,72281,72283],{"class":256,"line":1918},[254,72276,54912],{"class":313},[254,72278,51578],{"class":264},[254,72280,575],{"class":313},[254,72282,51633],{"class":260},[254,72284,1430],{"class":264},[254,72286,72287,72289,72291,72293,72295],{"class":256,"line":1923},[254,72288,54926],{"class":313},[254,72290,51578],{"class":264},[254,72292,964],{"class":313},[254,72294,51633],{"class":260},[254,72296,1430],{"class":264},[254,72298,72299,72301,72303,72305],{"class":256,"line":2717},[254,72300,61921],{"class":313},[254,72302,51578],{"class":264},[254,72304,54878],{"class":313},[254,72306,1430],{"class":264},[254,72308,72309,72311,72313,72315,72317],{"class":256,"line":2731},[254,72310,61891],{"class":313},[254,72312,51578],{"class":264},[254,72314,839],{"class":313},[254,72316,51633],{"class":260},[254,72318,1430],{"class":264},[254,72320,72321],{"class":256,"line":2739},[254,72322,2327],{"class":264},[254,72324,72325],{"class":256,"line":2744},[254,72326,2540],{"emptyLinePlaceholder":184},[254,72328,72329,72332],{"class":256,"line":2750},[254,72330,72331],{"class":2103},"    .gender",[254,72333,31607],{"class":264},[254,72335,72336,72339],{"class":256,"line":2756},[254,72337,72338],{"class":2103},"    .city",[254,72340,15713],{"class":264},[254,72342,72343,72345,72347,72349,72351],{"class":256,"line":2761},[254,72344,54912],{"class":313},[254,72346,51578],{"class":264},[254,72348,575],{"class":313},[254,72350,51633],{"class":260},[254,72352,1430],{"class":264},[254,72354,72355,72357,72359,72361,72363],{"class":256,"line":8089},[254,72356,54926],{"class":313},[254,72358,51578],{"class":264},[254,72360,1089],{"class":313},[254,72362,51633],{"class":260},[254,72364,1430],{"class":264},[254,72366,72367,72369,72371,72373],{"class":256,"line":8113},[254,72368,61921],{"class":313},[254,72370,51578],{"class":264},[254,72372,54878],{"class":313},[254,72374,1430],{"class":264},[254,72376,72377,72379,72381,72383,72385],{"class":256,"line":8118},[254,72378,61891],{"class":313},[254,72380,51578],{"class":264},[254,72382,839],{"class":313},[254,72384,51633],{"class":260},[254,72386,1430],{"class":264},[254,72388,72389,72391,72393,72395,72397,72399,72402,72404,72406,72408,72411,72413,72415],{"class":256,"line":8124},[254,72390,62118],{"class":313},[254,72392,51578],{"class":264},[254,72394,482],{"class":313},[254,72396,51633],{"class":260},[254,72398,51662],{"class":313},[254,72400,72401],{"class":313}," rgb",[254,72403,265],{"class":264},[254,72405,1862],{"class":313},[254,72407,12576],{"class":264},[254,72409,72410],{"class":313},"197",[254,72412,12576],{"class":264},[254,72414,72410],{"class":313},[254,72416,2859],{"class":264},[254,72418,72419],{"class":256,"line":8151},[254,72420,2327],{"class":264},[254,72422,72423],{"class":256,"line":8156},[254,72424,2540],{"emptyLinePlaceholder":184},[254,72426,72427,72430],{"class":256,"line":8162},[254,72428,72429],{"class":51441},"    button",[254,72431,15713],{"class":264},[254,72433,72434,72436,72438,72440,72442],{"class":256,"line":8174},[254,72435,54926],{"class":313},[254,72437,51578],{"class":264},[254,72439,1089],{"class":313},[254,72441,51633],{"class":260},[254,72443,1430],{"class":264},[254,72445,72446,72448,72450,72452,72454],{"class":256,"line":8186},[254,72447,54912],{"class":313},[254,72449,51578],{"class":264},[254,72451,748],{"class":313},[254,72453,51633],{"class":260},[254,72455,1430],{"class":264},[254,72457,72458,72460,72462,72465,72467,72469,72471,72474,72476,72478],{"class":256,"line":8198},[254,72459,55025],{"class":313},[254,72461,51578],{"class":264},[254,72463,72464],{"class":313},"rgb",[254,72466,265],{"class":264},[254,72468,1233],{"class":313},[254,72470,12576],{"class":264},[254,72472,72473],{"class":313},"187",[254,72475,12576],{"class":264},[254,72477,563],{"class":313},[254,72479,2859],{"class":264},[254,72481,72482,72484,72486,72488],{"class":256,"line":9857},[254,72483,57557],{"class":313},[254,72485,51578],{"class":264},[254,72487,60983],{"class":313},[254,72489,1430],{"class":264},[254,72491,72492,72494,72496,72498],{"class":256,"line":9882},[254,72493,62118],{"class":313},[254,72495,51578],{"class":264},[254,72497,456],{"class":313},[254,72499,1430],{"class":264},[254,72501,72502],{"class":256,"line":9905},[254,72503,2327],{"class":264},[254,72505,72506],{"class":256,"line":9929},[254,72507,2540],{"emptyLinePlaceholder":184},[254,72509,72510,72512,72514],{"class":256,"line":9934},[254,72511,72429],{"class":51441},[254,72513,51829],{"class":51441},[254,72515,15713],{"class":264},[254,72517,72518,72520,72522,72525],{"class":256,"line":9939},[254,72519,55150],{"class":313},[254,72521,51578],{"class":264},[254,72523,72524],{"class":313},"inline-block",[254,72526,1430],{"class":264},[254,72528,72529,72531,72533,72535,72537],{"class":256,"line":9944},[254,72530,54912],{"class":313},[254,72532,51578],{"class":264},[254,72534,710],{"class":313},[254,72536,51633],{"class":260},[254,72538,1430],{"class":264},[254,72540,72541,72543,72545,72547,72549],{"class":256,"line":9953},[254,72542,54926],{"class":313},[254,72544,51578],{"class":264},[254,72546,710],{"class":313},[254,72548,51633],{"class":260},[254,72550,1430],{"class":264},[254,72552,72553,72555,72557,72559,72561],{"class":256,"line":9958},[254,72554,57500],{"class":313},[254,72556,51578],{"class":264},[254,72558,736],{"class":313},[254,72560,51633],{"class":260},[254,72562,1430],{"class":264},[254,72564,72565,72567,72569,72571,72573,72575,72578],{"class":256,"line":9964},[254,72566,62118],{"class":313},[254,72568,51578],{"class":264},[254,72570,482],{"class":313},[254,72572,51633],{"class":260},[254,72574,51662],{"class":313},[254,72576,72577],{"class":313}," #fff",[254,72579,1430],{"class":264},[254,72581,72582,72584,72586,72588,72590],{"class":256,"line":9985},[254,72583,55275],{"class":313},[254,72585,51578],{"class":264},[254,72587,583],{"class":313},[254,72589,51633],{"class":260},[254,72591,1430],{"class":264},[254,72593,72594,72596,72598,72600,72602],{"class":256,"line":9991},[254,72595,61891],{"class":313},[254,72597,51578],{"class":264},[254,72599,482],{"class":313},[254,72601,51633],{"class":260},[254,72603,1430],{"class":264},[254,72605,72606],{"class":256,"line":10005},[254,72607,2327],{"class":264},[254,72609,72610],{"class":256,"line":10011},[254,72611,2540],{"emptyLinePlaceholder":184},[254,72613,72614,72617],{"class":256,"line":10038},[254,72615,72616],{"class":2103},"    .total",[254,72618,15713],{"class":264},[254,72620,72621,72623,72625,72627,72629],{"class":256,"line":10047},[254,72622,54912],{"class":313},[254,72624,51578],{"class":264},[254,72626,61770],{"class":313},[254,72628,51633],{"class":260},[254,72630,1430],{"class":264},[254,72632,72633,72635,72637,72639,72641],{"class":256,"line":10053},[254,72634,54926],{"class":313},[254,72636,51578],{"class":264},[254,72638,665],{"class":313},[254,72640,51633],{"class":260},[254,72642,1430],{"class":264},[254,72644,72645,72647,72649,72651,72653],{"class":256,"line":10061},[254,72646,57500],{"class":313},[254,72648,51578],{"class":264},[254,72650,665],{"class":313},[254,72652,51633],{"class":260},[254,72654,1430],{"class":264},[254,72656,72657,72659,72661,72664],{"class":256,"line":10066},[254,72658,57427],{"class":313},[254,72660,51578],{"class":264},[254,72662,72663],{"class":313},"right",[254,72665,1430],{"class":264},[254,72667,72668,72670,72672,72674,72676,72678,72680,72682],{"class":256,"line":16745},[254,72669,54847],{"class":313},[254,72671,51578],{"class":264},[254,72673,665],{"class":313},[254,72675,51633],{"class":260},[254,72677,51697],{"class":313},[254,72679,2178],{"class":313},[254,72681,51633],{"class":260},[254,72683,1430],{"class":264},[254,72685,72686,72689,72691,72693,72695],{"class":256,"line":16751},[254,72687,72688],{"class":313},"      padding-right",[254,72690,51578],{"class":264},[254,72692,710],{"class":313},[254,72694,51633],{"class":260},[254,72696,1430],{"class":264},[254,72698,72699,72701,72703,72705,72707],{"class":256,"line":16774},[254,72700,55063],{"class":313},[254,72702,51578],{"class":264},[254,72704,787],{"class":313},[254,72706,51633],{"class":260},[254,72708,1430],{"class":264},[254,72710,72711,72713,72715,72717,72719,72722,72724,72727,72729,72731],{"class":256,"line":16780},[254,72712,55025],{"class":313},[254,72714,51578],{"class":264},[254,72716,72464],{"class":313},[254,72718,265],{"class":264},[254,72720,72721],{"class":313},"237",[254,72723,12576],{"class":264},[254,72725,72726],{"class":313},"235",[254,72728,12576],{"class":264},[254,72730,72726],{"class":313},[254,72732,2859],{"class":264},[254,72734,72735,72738,72740,72742],{"class":256,"line":16803},[254,72736,72737],{"class":313},"      box-sizing",[254,72739,51578],{"class":264},[254,72741,60646],{"class":313},[254,72743,1430],{"class":264},[254,72745,72746],{"class":256,"line":16817},[254,72747,2327],{"class":264},[254,72749,72750],{"class":256,"line":16837},[254,72751,2540],{"emptyLinePlaceholder":184},[254,72753,72754,72756,72758],{"class":256,"line":16843},[254,72755,72616],{"class":2103},[254,72757,51829],{"class":51441},[254,72759,15713],{"class":264},[254,72761,72762,72764,72766,72768],{"class":256,"line":16854},[254,72763,57557],{"class":313},[254,72765,51578],{"class":264},[254,72767,57562],{"class":313},[254,72769,1430],{"class":264},[254,72771,72772],{"class":256,"line":16877},[254,72773,2327],{"class":264},[254,72775,72776],{"class":256,"line":16899},[254,72777,2540],{"emptyLinePlaceholder":184},[254,72779,72780,72782],{"class":256,"line":16904},[254,72781,65164],{"class":51441},[254,72783,15713],{"class":264},[254,72785,72786,72788,72790,72792,72794],{"class":256,"line":16910},[254,72787,54912],{"class":313},[254,72789,51578],{"class":264},[254,72791,61770],{"class":313},[254,72793,51633],{"class":260},[254,72795,1430],{"class":264},[254,72797,72798,72800,72802,72805],{"class":256,"line":16924},[254,72799,54847],{"class":313},[254,72801,51578],{"class":264},[254,72803,72804],{"class":313},"auto",[254,72806,1430],{"class":264},[254,72808,72809,72811,72813,72815],{"class":256,"line":16937},[254,72810,65171],{"class":313},[254,72812,51578],{"class":264},[254,72814,65176],{"class":313},[254,72816,1430],{"class":264},[254,72818,72819],{"class":256,"line":16942},[254,72820,2327],{"class":264},[254,72822,72823],{"class":256,"line":16956},[254,72824,2540],{"emptyLinePlaceholder":184},[254,72826,72827,72829],{"class":256,"line":16961},[254,72828,65256],{"class":51441},[254,72830,15713],{"class":264},[254,72832,72833,72835,72837,72839,72841,72843,72845,72847,72849,72851],{"class":256,"line":16967},[254,72834,55025],{"class":313},[254,72836,51578],{"class":264},[254,72838,72464],{"class":313},[254,72840,265],{"class":264},[254,72842,72721],{"class":313},[254,72844,12576],{"class":264},[254,72846,72726],{"class":313},[254,72848,12576],{"class":264},[254,72850,72726],{"class":313},[254,72852,2859],{"class":264},[254,72854,72855],{"class":256,"line":16972},[254,72856,2327],{"class":264},[254,72858,72859],{"class":256,"line":16986},[254,72860,2540],{"emptyLinePlaceholder":184},[254,72862,72863,72865],{"class":256,"line":16991},[254,72864,65256],{"class":51441},[254,72866,31607],{"class":264},[254,72868,72869,72871],{"class":256,"line":16996},[254,72870,65322],{"class":51441},[254,72872,15713],{"class":264},[254,72874,72875,72877,72879,72881,72883],{"class":256,"line":17010},[254,72876,54926],{"class":313},[254,72878,51578],{"class":264},[254,72880,537],{"class":313},[254,72882,51633],{"class":260},[254,72884,1430],{"class":264},[254,72886,72887,72889,72891,72893],{"class":256,"line":17022},[254,72888,57427],{"class":313},[254,72890,51578],{"class":264},[254,72892,23877],{"class":313},[254,72894,1430],{"class":264},[254,72896,72897,72899,72901,72903,72905],{"class":256,"line":17027},[254,72898,55063],{"class":313},[254,72900,51578],{"class":264},[254,72902,813],{"class":313},[254,72904,51633],{"class":260},[254,72906,1430],{"class":264},[254,72908,72909,72911,72913,72915,72917,72919,72921,72923,72926,72928,72931,72933,72935],{"class":256,"line":17040},[254,72910,62118],{"class":313},[254,72912,51578],{"class":264},[254,72914,482],{"class":313},[254,72916,51633],{"class":260},[254,72918,51662],{"class":313},[254,72920,72401],{"class":313},[254,72922,265],{"class":264},[254,72924,72925],{"class":313},"228",[254,72927,12576],{"class":264},[254,72929,72930],{"class":313},"225",[254,72932,12576],{"class":264},[254,72934,72930],{"class":313},[254,72936,2859],{"class":264},[254,72938,72939,72942,72944,72946,72948],{"class":256,"line":17045},[254,72940,72941],{"class":313},"      padding-left",[254,72943,51578],{"class":264},[254,72945,583],{"class":313},[254,72947,51633],{"class":260},[254,72949,1430],{"class":264},[254,72951,72952,72954,72956,72958,72961,72963,72965],{"class":256,"line":17050},[254,72953,62001],{"class":313},[254,72955,51578],{"class":264},[254,72957,28262],{"class":313},[254,72959,72960],{"class":313}," linear",[254,72962,62008],{"class":313},[254,72964,959],{"class":260},[254,72966,1430],{"class":264},[254,72968,72969],{"class":256,"line":17055},[254,72970,2327],{"class":264},[254,72972,72973],{"class":256,"line":17068},[254,72974,2540],{"emptyLinePlaceholder":184},[254,72976,72977,72980,72982,72984],{"class":256,"line":17073},[254,72978,72979],{"class":51441},"    tbody",[254,72981,70285],{"class":51441},[254,72983,61081],{"class":2103},[254,72985,15713],{"class":264},[254,72987,72988,72990,72992,72994,72996,72998,73000,73002,73004,73006],{"class":256,"line":32774},[254,72989,55025],{"class":313},[254,72991,51578],{"class":264},[254,72993,72464],{"class":313},[254,72995,265],{"class":264},[254,72997,72721],{"class":313},[254,72999,12576],{"class":264},[254,73001,72726],{"class":313},[254,73003,12576],{"class":264},[254,73005,72726],{"class":313},[254,73007,2859],{"class":264},[254,73009,73010,73012,73014,73016],{"class":256,"line":32780},[254,73011,62166],{"class":313},[254,73013,51578],{"class":264},[254,73015,62171],{"class":313},[254,73017,1430],{"class":264},[254,73019,73020],{"class":256,"line":32786},[254,73021,2327],{"class":264},[254,73023,73024],{"class":256,"line":32792},[254,73025,2540],{"emptyLinePlaceholder":184},[254,73027,73028,73030,73032,73035,73037],{"class":256,"line":32798},[254,73029,72979],{"class":51441},[254,73031,70285],{"class":51441},[254,73033,73034],{"class":51441}," td",[254,73036,1538],{"class":51441},[254,73038,15713],{"class":264},[254,73040,73041,73043,73045,73047],{"class":256,"line":32809},[254,73042,55150],{"class":313},[254,73044,51578],{"class":264},[254,73046,61010],{"class":313},[254,73048,1430],{"class":264},[254,73050,73051,73053,73055,73057,73059],{"class":256,"line":32815},[254,73052,54912],{"class":313},[254,73054,51578],{"class":264},[254,73056,1171],{"class":313},[254,73058,51633],{"class":260},[254,73060,1430],{"class":264},[254,73062,73063,73065,73067,73069,73071],{"class":256,"line":32835},[254,73064,54926],{"class":313},[254,73066,51578],{"class":264},[254,73068,1089],{"class":313},[254,73070,51633],{"class":260},[254,73072,1430],{"class":264},[254,73074,73075,73077,73079,73081,73083],{"class":256,"line":32841},[254,73076,57500],{"class":313},[254,73078,51578],{"class":264},[254,73080,1089],{"class":313},[254,73082,51633],{"class":260},[254,73084,1430],{"class":264},[254,73086,73087,73089,73091,73093,73095],{"class":256,"line":32852},[254,73088,62218],{"class":313},[254,73090,51578],{"class":264},[254,73092,342],{"class":313},[254,73094,51633],{"class":260},[254,73096,1430],{"class":264},[254,73098,73099,73101,73103,73105],{"class":256,"line":32858},[254,73100,57557],{"class":313},[254,73102,51578],{"class":264},[254,73104,60983],{"class":313},[254,73106,1430],{"class":264},[254,73108,73109,73111,73113,73115],{"class":256,"line":32864},[254,73110,57427],{"class":313},[254,73112,51578],{"class":264},[254,73114,51733],{"class":313},[254,73116,1430],{"class":264},[254,73118,73119,73121,73123,73125],{"class":256,"line":32870},[254,73120,64111],{"class":313},[254,73122,51578],{"class":264},[254,73124,54878],{"class":313},[254,73126,1430],{"class":264},[254,73128,73129,73131,73133,73136],{"class":256,"line":32876},[254,73130,55025],{"class":313},[254,73132,51578],{"class":264},[254,73134,73135],{"class":313},"orange",[254,73137,1430],{"class":264},[254,73139,73140,73142,73144,73147,73149],{"class":256,"line":32882},[254,73141,55275],{"class":313},[254,73143,51578],{"class":264},[254,73145,73146],{"class":313},"12.5",[254,73148,51633],{"class":260},[254,73150,1430],{"class":264},[254,73152,73153],{"class":256,"line":32888},[254,73154,2327],{"class":264},[254,73156,73157,73159,73161],{"class":256,"line":32894},[254,73158,52558],{"class":264},[254,73160,5267],{"class":51441},[254,73162,51448],{"class":264},[254,73164,73165,73167,73169],{"class":256,"line":32914},[254,73166,51926],{"class":264},[254,73168,51475],{"class":51441},[254,73170,51448],{"class":264},[254,73172,73173],{"class":256,"line":32920},[254,73174,2540],{"emptyLinePlaceholder":184},[254,73176,73177,73179,73181],{"class":256,"line":32936},[254,73178,1174],{"class":264},[254,73180,51941],{"class":51441},[254,73182,51448],{"class":264},[254,73184,73185,73187,73189,73192,73194],{"class":256,"line":32942},[254,73186,52285],{"class":264},[254,73188,34],{"class":51441},[254,73190,73191],{"class":264},">学生就业统计表\u003C\u002F",[254,73193,34],{"class":51441},[254,73195,51448],{"class":264},[254,73197,73198,73200,73202,73204,73206,73208,73210,73212,73214],{"class":256,"line":32956},[254,73199,52285],{"class":264},[254,73201,66766],{"class":51441},[254,73203,53627],{"class":2103},[254,73205,310],{"class":264},[254,73207,62805],{"class":369},[254,73209,69211],{"class":2103},[254,73211,310],{"class":264},[254,73213,31917],{"class":369},[254,73215,51448],{"class":264},[254,73217,73218,73220,73222,73224,73226,73228,73230,73232,73234,73236,73238,73241,73243,73245,73247],{"class":256,"line":32962},[254,73219,51482],{"class":264},[254,73221,53962],{"class":51441},[254,73223,53965],{"class":2103},[254,73225,310],{"class":264},[254,73227,62840],{"class":369},[254,73229,15061],{"class":2103},[254,73231,310],{"class":264},[254,73233,69237],{"class":369},[254,73235,61161],{"class":2103},[254,73237,310],{"class":264},[254,73239,73240],{"class":369},"\"姓名\"",[254,73242,53627],{"class":2103},[254,73244,310],{"class":264},[254,73246,69237],{"class":369},[254,73248,51448],{"class":264},[254,73250,73251,73253,73255,73257,73259,73261,73263,73265,73267,73269,73271,73274,73276,73278,73280],{"class":256,"line":32977},[254,73252,51482],{"class":264},[254,73254,53962],{"class":51441},[254,73256,53965],{"class":2103},[254,73258,310],{"class":264},[254,73260,62840],{"class":369},[254,73262,15061],{"class":2103},[254,73264,310],{"class":264},[254,73266,69265],{"class":369},[254,73268,61161],{"class":2103},[254,73270,310],{"class":264},[254,73272,73273],{"class":369},"\"年龄\"",[254,73275,53627],{"class":2103},[254,73277,310],{"class":264},[254,73279,69265],{"class":369},[254,73281,51448],{"class":264},[254,73283,73284,73286,73288,73290,73292,73294,73296,73298,73300,73302,73304,73307,73309,73311,73313],{"class":256,"line":32983},[254,73285,51482],{"class":264},[254,73287,53962],{"class":51441},[254,73289,53965],{"class":2103},[254,73291,310],{"class":264},[254,73293,62840],{"class":369},[254,73295,15061],{"class":2103},[254,73297,310],{"class":264},[254,73299,69367],{"class":369},[254,73301,61161],{"class":2103},[254,73303,310],{"class":264},[254,73305,73306],{"class":369},"\"薪资\"",[254,73308,53627],{"class":2103},[254,73310,310],{"class":264},[254,73312,69367],{"class":369},[254,73314,51448],{"class":264},[254,73316,73317,73319,73321,73323,73325,73327,73329,73331,73333,73335,73337,73339],{"class":256,"line":32992},[254,73318,51482],{"class":264},[254,73320,69285],{"class":51441},[254,73322,15061],{"class":2103},[254,73324,310],{"class":264},[254,73326,69292],{"class":369},[254,73328,15100],{"class":2103},[254,73330,310],{"class":264},[254,73332,7793],{"class":369},[254,73334,53627],{"class":2103},[254,73336,310],{"class":264},[254,73338,69292],{"class":369},[254,73340,51448],{"class":264},[254,73342,73343,73345,73347,73349,73351,73353,73355,73357],{"class":256,"line":32998},[254,73344,55375],{"class":264},[254,73346,69307],{"class":51441},[254,73348,66792],{"class":2103},[254,73350,310],{"class":264},[254,73352,10102],{"class":369},[254,73354,69316],{"class":264},[254,73356,69307],{"class":51441},[254,73358,51448],{"class":264},[254,73360,73361,73363,73365,73367,73369,73371,73373,73375],{"class":256,"line":33007},[254,73362,55375],{"class":264},[254,73364,69307],{"class":51441},[254,73366,66792],{"class":2103},[254,73368,310],{"class":264},[254,73370,10171],{"class":369},[254,73372,69335],{"class":264},[254,73374,69307],{"class":51441},[254,73376,51448],{"class":264},[254,73378,73379,73381,73383],{"class":256,"line":33013},[254,73380,51917],{"class":264},[254,73382,69285],{"class":51441},[254,73384,51448],{"class":264},[254,73386,73387,73389,73391,73393,73395,73397,73399,73401,73403,73405,73407,73409],{"class":256,"line":33019},[254,73388,51482],{"class":264},[254,73390,69285],{"class":51441},[254,73392,15061],{"class":2103},[254,73394,310],{"class":264},[254,73396,69389],{"class":369},[254,73398,15100],{"class":2103},[254,73400,310],{"class":264},[254,73402,7793],{"class":369},[254,73404,53627],{"class":2103},[254,73406,310],{"class":264},[254,73408,69389],{"class":369},[254,73410,51448],{"class":264},[254,73412,73413,73415,73417,73419,73421,73423,73425,73427],{"class":256,"line":33028},[254,73414,55375],{"class":264},[254,73416,69307],{"class":51441},[254,73418,66792],{"class":2103},[254,73420,310],{"class":264},[254,73422,69410],{"class":369},[254,73424,69413],{"class":264},[254,73426,69307],{"class":51441},[254,73428,51448],{"class":264},[254,73430,73431,73433,73435,73437,73439,73441,73443,73445],{"class":256,"line":33034},[254,73432,55375],{"class":264},[254,73434,69307],{"class":51441},[254,73436,66792],{"class":2103},[254,73438,310],{"class":264},[254,73440,69430],{"class":369},[254,73442,69433],{"class":264},[254,73444,69307],{"class":51441},[254,73446,51448],{"class":264},[254,73448,73449,73451,73453,73455,73457,73459,73461,73463],{"class":256,"line":33045},[254,73450,55375],{"class":264},[254,73452,69307],{"class":51441},[254,73454,66792],{"class":2103},[254,73456,310],{"class":264},[254,73458,69450],{"class":369},[254,73460,69453],{"class":264},[254,73462,69307],{"class":51441},[254,73464,51448],{"class":264},[254,73466,73467,73469,73471,73473,73475,73477,73479,73481],{"class":256,"line":33051},[254,73468,55375],{"class":264},[254,73470,69307],{"class":51441},[254,73472,66792],{"class":2103},[254,73474,310],{"class":264},[254,73476,69470],{"class":369},[254,73478,69473],{"class":264},[254,73480,69307],{"class":51441},[254,73482,51448],{"class":264},[254,73484,73485,73487,73489,73491,73493,73495,73497,73499],{"class":256,"line":33070},[254,73486,55375],{"class":264},[254,73488,69307],{"class":51441},[254,73490,66792],{"class":2103},[254,73492,310],{"class":264},[254,73494,69490],{"class":369},[254,73496,69493],{"class":264},[254,73498,69307],{"class":51441},[254,73500,51448],{"class":264},[254,73502,73503,73505,73507],{"class":256,"line":33076},[254,73504,51917],{"class":264},[254,73506,69285],{"class":51441},[254,73508,51448],{"class":264},[254,73510,73511,73513,73515],{"class":256,"line":33087},[254,73512,51482],{"class":264},[254,73514,54028],{"class":51441},[254,73516,51448],{"class":264},[254,73518,73519,73521,73523,73526,73528,73531,73533],{"class":256,"line":33093},[254,73520,55375],{"class":264},[254,73522,254],{"class":51441},[254,73524,73525],{"class":264},">+\u003C\u002F",[254,73527,254],{"class":51441},[254,73529,73530],{"class":264},">添加\u003C\u002F",[254,73532,54028],{"class":51441},[254,73534,51448],{"class":264},[254,73536,73537,73539,73541],{"class":256,"line":33113},[254,73538,52558],{"class":264},[254,73540,66766],{"class":51441},[254,73542,51448],{"class":264},[254,73544,73545,73547,73549,73551,73553,73555,73558,73560,73563,73565,73568,73570],{"class":256,"line":33129},[254,73546,52285],{"class":264},[254,73548,51752],{"class":51441},[254,73550,53627],{"class":2103},[254,73552,310],{"class":264},[254,73554,62721],{"class":369},[254,73556,73557],{"class":264},">共有数据 \u003C",[254,73559,254],{"class":51441},[254,73561,73562],{"class":264},">0\u003C\u002F",[254,73564,254],{"class":51441},[254,73566,73567],{"class":264},"> 条\u003C\u002F",[254,73569,51752],{"class":51441},[254,73571,51448],{"class":264},[254,73573,73574,73576,73578],{"class":256,"line":33135},[254,73575,52285],{"class":264},[254,73577,402],{"class":51441},[254,73579,51448],{"class":264},[254,73581,73582,73584,73586],{"class":256,"line":33149},[254,73583,51482],{"class":264},[254,73585,405],{"class":51441},[254,73587,51448],{"class":264},[254,73589,73590,73592,73594],{"class":256,"line":33155},[254,73591,55375],{"class":264},[254,73593,408],{"class":51441},[254,73595,51448],{"class":264},[254,73597,73598,73600,73602,73605,73607],{"class":256,"line":33161},[254,73599,55443],{"class":264},[254,73601,411],{"class":51441},[254,73603,73604],{"class":264},">ID\u003C\u002F",[254,73606,411],{"class":51441},[254,73608,51448],{"class":264},[254,73610,73611,73613,73615,73617,73619],{"class":256,"line":33172},[254,73612,55443],{"class":264},[254,73614,411],{"class":51441},[254,73616,69596],{"class":264},[254,73618,411],{"class":51441},[254,73620,51448],{"class":264},[254,73622,73623,73625,73627,73629,73631],{"class":256,"line":33178},[254,73624,55443],{"class":264},[254,73626,411],{"class":51441},[254,73628,69609],{"class":264},[254,73630,411],{"class":51441},[254,73632,51448],{"class":264},[254,73634,73635,73637,73639,73641,73643],{"class":256,"line":33184},[254,73636,55443],{"class":264},[254,73638,411],{"class":51441},[254,73640,69622],{"class":264},[254,73642,411],{"class":51441},[254,73644,51448],{"class":264},[254,73646,73647,73649,73651,73653,73655],{"class":256,"line":33194},[254,73648,55443],{"class":264},[254,73650,411],{"class":51441},[254,73652,69635],{"class":264},[254,73654,411],{"class":51441},[254,73656,51448],{"class":264},[254,73658,73659,73661,73663,73665,73667],{"class":256,"line":33200},[254,73660,55443],{"class":264},[254,73662,411],{"class":51441},[254,73664,69648],{"class":264},[254,73666,411],{"class":51441},[254,73668,51448],{"class":264},[254,73670,73671,73673,73675,73678,73680],{"class":256,"line":33211},[254,73672,55443],{"class":264},[254,73674,411],{"class":51441},[254,73676,73677],{"class":264},">录入时间\u003C\u002F",[254,73679,411],{"class":51441},[254,73681,51448],{"class":264},[254,73683,73684,73686,73688,73690,73692],{"class":256,"line":33217},[254,73685,55443],{"class":264},[254,73687,411],{"class":51441},[254,73689,69661],{"class":264},[254,73691,411],{"class":51441},[254,73693,51448],{"class":264},[254,73695,73696,73698,73700],{"class":256,"line":33227},[254,73697,55548],{"class":264},[254,73699,408],{"class":51441},[254,73701,51448],{"class":264},[254,73703,73704,73706,73708],{"class":256,"line":33232},[254,73705,51917],{"class":264},[254,73707,405],{"class":51441},[254,73709,51448],{"class":264},[254,73711,73712,73714,73716],{"class":256,"line":33238},[254,73713,51482],{"class":264},[254,73715,449],{"class":51441},[254,73717,51448],{"class":264},[254,73719,73720],{"class":256,"line":33287},[254,73721,73722],{"class":323},"      \u003C!-- \u003Ctr>\n",[254,73724,73725],{"class":256,"line":33334},[254,73726,73727],{"class":323},"        \u003Ctd>1\u003C\u002Ftd>\n",[254,73729,73730],{"class":256,"line":33339},[254,73731,73727],{"class":323},[254,73733,73734],{"class":256,"line":33345},[254,73735,73727],{"class":323},[254,73737,73738],{"class":256,"line":33364},[254,73739,73727],{"class":323},[254,73741,73742],{"class":256,"line":33370},[254,73743,73727],{"class":323},[254,73745,73746],{"class":256,"line":33390},[254,73747,73727],{"class":323},[254,73749,73750],{"class":256,"line":33396},[254,73751,73727],{"class":323},[254,73753,73754],{"class":256,"line":33402},[254,73755,73756],{"class":323},"        \u003Ctd>\n",[254,73758,73759],{"class":256,"line":33412},[254,73760,73761],{"class":323},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[254,73763,73764],{"class":256,"line":33417},[254,73765,73766],{"class":323},"        \u003C\u002Ftd>\n",[254,73768,73769],{"class":256,"line":33423},[254,73770,73771],{"class":323},"      \u003C\u002Ftr> -->\n",[254,73773,73774,73776,73778],{"class":256,"line":33439},[254,73775,51917],{"class":264},[254,73777,449],{"class":51441},[254,73779,51448],{"class":264},[254,73781,73782,73784,73786],{"class":256,"line":33484},[254,73783,52558],{"class":264},[254,73785,402],{"class":51441},[254,73787,51448],{"class":264},[254,73789,73790,73792,73794],{"class":256,"line":33490},[254,73791,52285],{"class":264},[254,73793,51954],{"class":51441},[254,73795,51448],{"class":264},[254,73797,73798],{"class":256,"line":33496},[254,73799,73800],{"class":323},"    \u002F\u002F const initData = [{\n",[254,73802,73803],{"class":256,"line":33502},[254,73804,73805],{"class":323},"    \u002F\u002F   unameId: 1,\n",[254,73807,73808],{"class":256,"line":33513},[254,73809,73810],{"class":323},"    \u002F\u002F   uname: '华晨宇',\n",[254,73812,73813],{"class":256,"line":33519},[254,73814,73815],{"class":323},"    \u002F\u002F   age: 22,\n",[254,73817,73818],{"class":256,"line":33525},[254,73819,73820],{"class":323},"    \u002F\u002F   salary: 12000,\n",[254,73822,73823],{"class":256,"line":33531},[254,73824,73825],{"class":323},"    \u002F\u002F   gender: '男',\n",[254,73827,73828],{"class":256,"line":33549},[254,73829,73830],{"class":323},"    \u002F\u002F   city: '北京',\n",[254,73832,73833],{"class":256,"line":33563},[254,73834,73835],{"class":323},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[254,73837,73838],{"class":256,"line":33572},[254,73839,73840],{"class":323},"    \u002F\u002F }]\n",[254,73842,73843],{"class":256,"line":33581},[254,73844,73845],{"class":323},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[254,73847,73848],{"class":256,"line":33590},[254,73849,73850],{"class":323},"    \u002F\u002F 1.渲染业务\n",[254,73852,73853],{"class":256,"line":33599},[254,73854,73855],{"class":323},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[254,73857,73858],{"class":256,"line":33605},[254,73859,73860],{"class":323},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[254,73862,73863],{"class":256,"line":33611},[254,73864,73865],{"class":323},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[254,73867,73868],{"class":256,"line":33619},[254,73869,2540],{"emptyLinePlaceholder":184},[254,73871,73872],{"class":256,"line":33624},[254,73873,73874],{"class":323},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[254,73876,73877],{"class":256,"line":33630},[254,73878,73879],{"class":323},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[254,73881,73882,73884,73886,73888],{"class":256,"line":33641},[254,73883,11362],{"class":260},[254,73885,57836],{"class":313},[254,73887,13705],{"class":260},[254,73889,51979],{"class":264},[254,73891,73892,73895,73897],{"class":256,"line":33647},[254,73893,73894],{"class":264},"    console.",[254,73896,58388],{"class":2103},[254,73898,52553],{"class":264},[254,73900,73901],{"class":256,"line":33667},[254,73902,2540],{"emptyLinePlaceholder":184},[254,73904,73905],{"class":256,"line":33673},[254,73906,73907],{"class":323},"    \u002F\u002F 时间函数\n",[254,73909,73910,73912,73915],{"class":256,"line":33679},[254,73911,70225],{"class":260},[254,73913,73914],{"class":2103}," getTime",[254,73916,10994],{"class":264},[254,73918,73919,73921,73924,73926,73928,73931],{"class":256,"line":33685},[254,73920,58369],{"class":260},[254,73922,73923],{"class":313}," date",[254,73925,13705],{"class":260},[254,73927,11719],{"class":260},[254,73929,73930],{"class":2103}," Date",[254,73932,2116],{"class":264},[254,73934,73935,73937,73939,73941,73944,73947,73949,73951,73953,73956,73959,73961,73963,73965,73967,73969,73971,73973],{"class":256,"line":33702},[254,73936,58369],{"class":260},[254,73938,16232],{"class":313},[254,73940,13705],{"class":260},[254,73942,73943],{"class":264}," date.",[254,73945,73946],{"class":2103},"getHours",[254,73948,13191],{"class":264},[254,73950,1174],{"class":260},[254,73952,2178],{"class":313},[254,73954,73955],{"class":260}," ?",[254,73957,73958],{"class":369}," '0'",[254,73960,45707],{"class":260},[254,73962,73943],{"class":264},[254,73964,73946],{"class":2103},[254,73966,13191],{"class":264},[254,73968,1123],{"class":260},[254,73970,73943],{"class":264},[254,73972,73946],{"class":2103},[254,73974,2116],{"class":264},[254,73976,73977,73979,73982,73984,73986,73989,73991,73993,73995,73997,73999,74001,74003,74005,74007,74009,74011,74013],{"class":256,"line":33708},[254,73978,58369],{"class":260},[254,73980,73981],{"class":313}," m",[254,73983,13705],{"class":260},[254,73985,73943],{"class":264},[254,73987,73988],{"class":2103},"getMinutes",[254,73990,13191],{"class":264},[254,73992,1174],{"class":260},[254,73994,2178],{"class":313},[254,73996,73955],{"class":260},[254,73998,73958],{"class":369},[254,74000,45707],{"class":260},[254,74002,73943],{"class":264},[254,74004,73988],{"class":2103},[254,74006,13191],{"class":264},[254,74008,1123],{"class":260},[254,74010,73943],{"class":264},[254,74012,73988],{"class":2103},[254,74014,2116],{"class":264},[254,74016,74017,74019,74021,74023,74025,74028,74030,74032,74034,74036,74038,74040,74042,74044,74046,74048,74050,74052],{"class":256,"line":33714},[254,74018,58369],{"class":260},[254,74020,8569],{"class":313},[254,74022,13705],{"class":260},[254,74024,73943],{"class":264},[254,74026,74027],{"class":2103},"getSeconds",[254,74029,13191],{"class":264},[254,74031,1174],{"class":260},[254,74033,2178],{"class":313},[254,74035,73955],{"class":260},[254,74037,73958],{"class":369},[254,74039,45707],{"class":260},[254,74041,73943],{"class":264},[254,74043,74027],{"class":2103},[254,74045,13191],{"class":264},[254,74047,1123],{"class":260},[254,74049,73943],{"class":264},[254,74051,74027],{"class":2103},[254,74053,2116],{"class":264},[254,74055,74056,74058,74061,74063,74065,74068,74070,74073,74075,74078,74080,74082,74085,74087,74089,74091,74093,74095,74097,74100,74102,74105,74107,74110,74112,74114,74116],{"class":256,"line":33720},[254,74057,58369],{"class":260},[254,74059,74060],{"class":313}," str",[254,74062,13705],{"class":260},[254,74064,63044],{"class":369},[254,74066,74067],{"class":264},"date",[254,74069,822],{"class":369},[254,74071,74072],{"class":2103},"getFullYear",[254,74074,2567],{"class":369},[254,74076,74077],{"class":369},"}\u002F${",[254,74079,74067],{"class":264},[254,74081,822],{"class":369},[254,74083,74084],{"class":2103},"getMonth",[254,74086,13191],{"class":369},[254,74088,745],{"class":260},[254,74090,25259],{"class":313},[254,74092,74077],{"class":369},[254,74094,74067],{"class":264},[254,74096,822],{"class":369},[254,74098,74099],{"class":2103},"getDate",[254,74101,2567],{"class":369},[254,74103,74104],{"class":369},"} ${",[254,74106,679],{"class":264},[254,74108,74109],{"class":369},"}:${",[254,74111,808],{"class":264},[254,74113,74109],{"class":369},[254,74115,959],{"class":264},[254,74117,74118],{"class":369},"}`\n",[254,74120,74121,74124],{"class":256,"line":33726},[254,74122,74123],{"class":260},"      return",[254,74125,74126],{"class":264}," str\n",[254,74128,74129],{"class":256,"line":33732},[254,74130,2327],{"class":264},[254,74132,74133],{"class":256,"line":33759},[254,74134,74135],{"class":323},"    \u002F\u002F 渲染函数\n",[254,74137,74138,74140,74142,74144,74146,74148,74150,74152],{"class":256,"line":33783},[254,74139,11362],{"class":260},[254,74141,69888],{"class":313},[254,74143,13705],{"class":260},[254,74145,54537],{"class":264},[254,74147,54540],{"class":2103},[254,74149,265],{"class":264},[254,74151,69899],{"class":369},[254,74153,271],{"class":264},[254,74155,74156,74158,74160],{"class":256,"line":33789},[254,74157,70225],{"class":260},[254,74159,70228],{"class":2103},[254,74161,10994],{"class":264},[254,74163,74164],{"class":256,"line":33795},[254,74165,74166],{"class":323},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[254,74168,74169],{"class":256,"line":33801},[254,74170,74171],{"class":323},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[254,74173,74174,74176,74179,74181,74183,74186,74188,74190,74192,74195,74197,74200],{"class":256,"line":33812},[254,74175,58369],{"class":260},[254,74177,74178],{"class":313}," trArr",[254,74180,13705],{"class":260},[254,74182,52106],{"class":264},[254,74184,74185],{"class":2103},"map",[254,74187,265],{"class":264},[254,74189,54590],{"class":260},[254,74191,1798],{"class":264},[254,74193,74194],{"class":5357},"ele",[254,74196,12576],{"class":264},[254,74198,74199],{"class":5357},"index",[254,74201,12583],{"class":264},[254,74203,74204,74206],{"class":256,"line":33823},[254,74205,14893],{"class":260},[254,74207,70309],{"class":369},[254,74209,74210],{"class":256,"line":33829},[254,74211,74212],{"class":369},"      \u003Ctr>\n",[254,74214,74215,74217,74219,74221,74224],{"class":256,"line":33846},[254,74216,70314],{"class":369},[254,74218,74194],{"class":264},[254,74220,822],{"class":369},[254,74222,74223],{"class":264},"unameId",[254,74225,70329],{"class":369},[254,74227,74228,74230,74232,74234,74236],{"class":256,"line":33869},[254,74229,70314],{"class":369},[254,74231,74194],{"class":264},[254,74233,822],{"class":369},[254,74235,70345],{"class":264},[254,74237,70329],{"class":369},[254,74239,74240,74242,74244,74246,74248],{"class":256,"line":33892},[254,74241,70314],{"class":369},[254,74243,74194],{"class":264},[254,74245,822],{"class":369},[254,74247,70362],{"class":264},[254,74249,70329],{"class":369},[254,74251,74252,74254,74256,74258,74260],{"class":256,"line":33898},[254,74253,70314],{"class":369},[254,74255,74194],{"class":264},[254,74257,822],{"class":369},[254,74259,70379],{"class":264},[254,74261,70329],{"class":369},[254,74263,74264,74266,74268,74270,74272],{"class":256,"line":33903},[254,74265,70314],{"class":369},[254,74267,74194],{"class":264},[254,74269,822],{"class":369},[254,74271,70396],{"class":264},[254,74273,70329],{"class":369},[254,74275,74276,74278,74280,74282,74284],{"class":256,"line":33912},[254,74277,70314],{"class":369},[254,74279,74194],{"class":264},[254,74281,822],{"class":369},[254,74283,70413],{"class":264},[254,74285,70329],{"class":369},[254,74287,74288,74290,74292,74294,74296],{"class":256,"line":33922},[254,74289,70314],{"class":369},[254,74291,74194],{"class":264},[254,74293,822],{"class":369},[254,74295,2527],{"class":264},[254,74297,70329],{"class":369},[254,74299,74300],{"class":256,"line":33928},[254,74301,73756],{"class":369},[254,74303,74304,74307,74309],{"class":256,"line":33933},[254,74305,74306],{"class":369},"          \u003Ca href=\"#\" data-id=\"${",[254,74308,74199],{"class":264},[254,74310,74311],{"class":369},"}\">删除\u003C\u002Fa>\n",[254,74313,74314],{"class":256,"line":33939},[254,74315,73766],{"class":369},[254,74317,74318],{"class":256,"line":33952},[254,74319,74320],{"class":369},"      \u003C\u002Ftr>\n",[254,74322,74323],{"class":256,"line":33958},[254,74324,74325],{"class":369},"  `\n",[254,74327,74328],{"class":256,"line":33969},[254,74329,64956],{"class":264},[254,74331,74332,74334,74336],{"class":256,"line":33980},[254,74333,58385],{"class":264},[254,74335,58388],{"class":2103},[254,74337,74338],{"class":264},"(trArr)\n",[254,74340,74341],{"class":256,"line":33999},[254,74342,2540],{"emptyLinePlaceholder":184},[254,74344,74345],{"class":256,"line":49659},[254,74346,74347],{"class":323},"      \u002F\u002F (2) 把数组转换为字符串join\n",[254,74349,74350],{"class":256,"line":49664},[254,74351,74352],{"class":323},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[254,74354,74355,74357,74359,74362,74365,74367,74370],{"class":256,"line":49673},[254,74356,70240],{"class":264},[254,74358,310],{"class":260},[254,74360,74361],{"class":264}," trArr.",[254,74363,74364],{"class":2103},"join",[254,74366,265],{"class":264},[254,74368,74369],{"class":369},"''",[254,74371,271],{"class":264},[254,74373,74374],{"class":256,"line":49682},[254,74375,74376],{"class":323},"      \u002F\u002F 显示共有几条\n",[254,74378,74379,74381,74383,74385,74388,74391,74393,74395],{"class":256,"line":49687},[254,74380,55912],{"class":264},[254,74382,54540],{"class":2103},[254,74384,265],{"class":264},[254,74386,74387],{"class":369},"'.total span'",[254,74389,74390],{"class":264},").innerHTML ",[254,74392,310],{"class":260},[254,74394,52106],{"class":264},[254,74396,55972],{"class":313},[254,74398,74399],{"class":256,"line":49692},[254,74400,2327],{"class":264},[254,74402,74403],{"class":256,"line":49697},[254,74404,74405],{"class":323},"    \u002F\u002F render()\n",[254,74407,74408],{"class":256,"line":49710},[254,74409,2540],{"emptyLinePlaceholder":184},[254,74411,74412],{"class":256,"line":49715},[254,74413,74414],{"class":323},"    \u002F\u002F 获取DOM对象\n",[254,74416,74417,74419,74421,74423,74425,74427,74429,74431],{"class":256,"line":49724},[254,74418,11362],{"class":260},[254,74420,69962],{"class":313},[254,74422,13705],{"class":260},[254,74424,54537],{"class":264},[254,74426,54540],{"class":2103},[254,74428,265],{"class":264},[254,74430,69973],{"class":369},[254,74432,271],{"class":264},[254,74434,74435,74437,74439,74441,74443,74445,74447,74449],{"class":256,"line":49733},[254,74436,11362],{"class":260},[254,74438,69789],{"class":313},[254,74440,13705],{"class":260},[254,74442,54537],{"class":264},[254,74444,54540],{"class":2103},[254,74446,265],{"class":264},[254,74448,69800],{"class":369},[254,74450,271],{"class":264},[254,74452,74453,74455,74457,74459,74461,74463,74465,74467],{"class":256,"line":49750},[254,74454,11362],{"class":260},[254,74456,15830],{"class":313},[254,74458,13705],{"class":260},[254,74460,54537],{"class":264},[254,74462,54540],{"class":2103},[254,74464,265],{"class":264},[254,74466,69819],{"class":369},[254,74468,271],{"class":264},[254,74470,74472,74474,74476,74478,74480,74482,74484,74486],{"class":256,"line":74471},231,[254,74473,11362],{"class":260},[254,74475,69848],{"class":313},[254,74477,13705],{"class":260},[254,74479,54537],{"class":264},[254,74481,54540],{"class":2103},[254,74483,265],{"class":264},[254,74485,69859],{"class":369},[254,74487,271],{"class":264},[254,74489,74491,74493,74495,74497,74499,74501,74503,74505],{"class":256,"line":74490},232,[254,74492,11362],{"class":260},[254,74494,69828],{"class":313},[254,74496,13705],{"class":260},[254,74498,54537],{"class":264},[254,74500,54540],{"class":2103},[254,74502,265],{"class":264},[254,74504,69839],{"class":369},[254,74506,271],{"class":264},[254,74508,74510,74512,74514,74516,74518,74520,74522,74524],{"class":256,"line":74509},233,[254,74511,11362],{"class":260},[254,74513,69868],{"class":313},[254,74515,13705],{"class":260},[254,74517,54537],{"class":264},[254,74519,54540],{"class":2103},[254,74521,265],{"class":264},[254,74523,69879],{"class":369},[254,74525,271],{"class":264},[254,74527,74529],{"class":256,"line":74528},234,[254,74530,2540],{"emptyLinePlaceholder":184},[254,74532,74534],{"class":256,"line":74533},235,[254,74535,74536],{"class":323},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[254,74538,74540,74542,74544,74546,74548,74550,74552,74554,74556],{"class":256,"line":74539},236,[254,74541,69980],{"class":264},[254,74543,57954],{"class":2103},[254,74545,265],{"class":264},[254,74547,69987],{"class":369},[254,74549,12576],{"class":264},[254,74551,54590],{"class":260},[254,74553,1798],{"class":264},[254,74555,339],{"class":5357},[254,74557,12583],{"class":264},[254,74559,74561],{"class":256,"line":74560},237,[254,74562,74563],{"class":323},"      \u002F\u002F 禁止浏览器跳转\n",[254,74565,74567,74569,74571],{"class":256,"line":74566},238,[254,74568,70007],{"class":264},[254,74570,70010],{"class":2103},[254,74572,2116],{"class":264},[254,74574,74576],{"class":256,"line":74575},239,[254,74577,74578],{"class":323},"      \u002F\u002F 非空判断\n",[254,74580,74582],{"class":256,"line":74581},240,[254,74583,74584],{"class":323},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[254,74586,74588],{"class":256,"line":74587},241,[254,74589,74590],{"class":323},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[254,74592,74594,74596,74598,74600,74603,74605,74608,74611,74613,74615],{"class":256,"line":74593},242,[254,74595,54621],{"class":260},[254,74597,1798],{"class":264},[254,74599,491],{"class":260},[254,74601,74602],{"class":264},"uname.value ",[254,74604,71498],{"class":260},[254,74606,74607],{"class":260}," !",[254,74609,74610],{"class":264},"age.value ",[254,74612,71498],{"class":260},[254,74614,74607],{"class":260},[254,74616,74617],{"class":264},"salary.value) {\n",[254,74619,74621,74623,74625,74627,74629],{"class":256,"line":74620},243,[254,74622,14893],{"class":260},[254,74624,70081],{"class":2103},[254,74626,265],{"class":264},[254,74628,70086],{"class":369},[254,74630,271],{"class":264},[254,74632,74634],{"class":256,"line":74633},244,[254,74635,52539],{"class":264},[254,74637,74639,74641,74643],{"class":256,"line":74638},245,[254,74640,58148],{"class":264},[254,74642,52025],{"class":2103},[254,74644,74645],{"class":264},"({\n",[254,74647,74649],{"class":256,"line":74648},246,[254,74650,74651],{"class":323},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[254,74653,74655],{"class":256,"line":74654},247,[254,74656,74657],{"class":323},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[254,74659,74661],{"class":256,"line":74660},248,[254,74662,74663],{"class":323},"        \u002F\u002F 对象的序号应为数组长度+1\n",[254,74665,74667],{"class":256,"line":74666},249,[254,74668,74669],{"class":323},"        \u002F\u002F unameId: arr.length + 1,\n",[254,74671,74673],{"class":256,"line":74672},250,[254,74674,2540],{"emptyLinePlaceholder":184},[254,74676,74678],{"class":256,"line":74677},251,[254,74679,74680],{"class":323},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[254,74682,74684],{"class":256,"line":74683},252,[254,74685,74686],{"class":323},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[254,74688,74690],{"class":256,"line":74689},253,[254,74691,74692],{"class":323},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[254,74694,74696],{"class":256,"line":74695},254,[254,74697,74698],{"class":323},"        \u002F\u002F 0当假看\n",[254,74700,74702,74705,74707,74709,74712,74714,74716,74718,74721,74723,74725,74728,74730],{"class":256,"line":74701},255,[254,74703,74704],{"class":264},"        unameId: arr.",[254,74706,52109],{"class":313},[254,74708,73955],{"class":260},[254,74710,74711],{"class":264}," arr[arr.",[254,74713,52109],{"class":313},[254,74715,52412],{"class":260},[254,74717,25259],{"class":313},[254,74719,74720],{"class":264},"].unameId ",[254,74722,745],{"class":260},[254,74724,25259],{"class":313},[254,74726,74727],{"class":260}," :",[254,74729,25259],{"class":313},[254,74731,31607],{"class":264},[254,74733,74735],{"class":256,"line":74734},256,[254,74736,70134],{"class":264},[254,74738,74740],{"class":256,"line":74739},257,[254,74741,70139],{"class":264},[254,74743,74745],{"class":256,"line":74744},258,[254,74746,70149],{"class":264},[254,74748,74750],{"class":256,"line":74749},259,[254,74751,70144],{"class":264},[254,74753,74755],{"class":256,"line":74754},260,[254,74756,74757],{"class":264},"        city: city.value,\n",[254,74759,74761],{"class":256,"line":74760},261,[254,74762,74763],{"class":323},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[254,74765,74767],{"class":256,"line":74766},262,[254,74768,74769],{"class":323},"        \u002F\u002F time: new Date().toDateString()\n",[254,74771,74773,74776,74779],{"class":256,"line":74772},263,[254,74774,74775],{"class":264},"        time: ",[254,74777,74778],{"class":2103},"getTime",[254,74780,2116],{"class":264},[254,74782,74784],{"class":256,"line":74783},264,[254,74785,64956],{"class":264},[254,74787,74789],{"class":256,"line":74788},265,[254,74790,74791],{"class":323},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[254,74793,74795,74797],{"class":256,"line":74794},266,[254,74796,70209],{"class":2103},[254,74798,2116],{"class":264},[254,74800,74802,74804,74806,74808,74810],{"class":256,"line":74801},267,[254,74803,70192],{"class":313},[254,74805,822],{"class":264},[254,74807,70197],{"class":2103},[254,74809,13191],{"class":264},[254,74811,74812],{"class":323},"\u002F\u002F重置表单\n",[254,74814,74816],{"class":256,"line":74815},268,[254,74817,74818],{"class":323},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[254,74820,74822,74825,74827,74829,74832,74834,74836,74838,74840],{"class":256,"line":74821},269,[254,74823,74824],{"class":264},"      localStorage.",[254,74826,71795],{"class":2103},[254,74828,265],{"class":264},[254,74830,74831],{"class":369},"'data'",[254,74833,12576],{"class":264},[254,74835,71805],{"class":313},[254,74837,822],{"class":264},[254,74839,71810],{"class":2103},[254,74841,74842],{"class":264},"(arr))\n",[254,74844,74846],{"class":256,"line":74845},270,[254,74847,33602],{"class":264},[254,74849,74851],{"class":256,"line":74850},271,[254,74852,2540],{"emptyLinePlaceholder":184},[254,74854,74856],{"class":256,"line":74855},272,[254,74857,74858],{"class":323},"    \u002F\u002F 3.删除业务\n",[254,74860,74862],{"class":256,"line":74861},273,[254,74863,74864],{"class":323},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[254,74866,74868,74870,74872,74874,74876,74878,74880,74882,74884],{"class":256,"line":74867},274,[254,74869,70482],{"class":264},[254,74871,57954],{"class":2103},[254,74873,265],{"class":264},[254,74875,57959],{"class":369},[254,74877,12576],{"class":264},[254,74879,54590],{"class":260},[254,74881,1798],{"class":264},[254,74883,339],{"class":5357},[254,74885,12583],{"class":264},[254,74887,74889],{"class":256,"line":74888},275,[254,74890,74891],{"class":323},"      \u002F\u002F 判断是否点击的是删除按钮\n",[254,74893,74895,74897,74899,74901,74903],{"class":256,"line":74894},276,[254,74896,54621],{"class":260},[254,74898,67175],{"class":264},[254,74900,54627],{"class":260},[254,74902,68397],{"class":369},[254,74904,12583],{"class":264},[254,74906,74908],{"class":256,"line":74907},277,[254,74909,74910],{"class":323},"        \u002F\u002F alert(1)\n",[254,74912,74914],{"class":256,"line":74913},278,[254,74915,74916],{"class":323},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[254,74918,74920],{"class":256,"line":74919},279,[254,74921,74922],{"class":323},"        \u002F\u002F console.log(e.target)\n",[254,74924,74926],{"class":256,"line":74925},280,[254,74927,74928],{"class":323},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[254,74930,74932],{"class":256,"line":74931},281,[254,74933,2540],{"emptyLinePlaceholder":184},[254,74935,74937],{"class":256,"line":74936},282,[254,74938,74939],{"class":323},"        \u002F\u002F 确认框，确然是否真的要删除\n",[254,74941,74943],{"class":256,"line":74942},283,[254,74944,74945],{"class":323},"        \u002F\u002F confirm()为确认框\n",[254,74947,74949],{"class":256,"line":74948},284,[254,74950,74951],{"class":323},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[254,74953,74955,74957,74959,74962,74964,74967],{"class":256,"line":74954},285,[254,74956,2637],{"class":260},[254,74958,1798],{"class":264},[254,74960,74961],{"class":2103},"confirm",[254,74963,265],{"class":264},[254,74965,74966],{"class":369},"'您确定要删除这条数据吗？'",[254,74968,74969],{"class":264},")) {\n",[254,74971,74973,74976,74978,74980,74982],{"class":256,"line":74972},286,[254,74974,74975],{"class":264},"          arr.",[254,74977,58151],{"class":2103},[254,74979,70535],{"class":264},[254,74981,482],{"class":313},[254,74983,271],{"class":264},[254,74985,74987],{"class":256,"line":74986},287,[254,74988,74989],{"class":323},"          \u002F\u002F 3.4 重新渲染页面\n",[254,74991,74993,74996],{"class":256,"line":74992},288,[254,74994,74995],{"class":2103},"          render",[254,74997,2116],{"class":264},[254,74999,75001],{"class":256,"line":75000},289,[254,75002,75003],{"class":323},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[254,75005,75007,75010,75012,75014,75016,75018,75020,75022,75024],{"class":256,"line":75006},290,[254,75008,75009],{"class":264},"          localStorage.",[254,75011,71795],{"class":2103},[254,75013,265],{"class":264},[254,75015,74831],{"class":369},[254,75017,12576],{"class":264},[254,75019,71805],{"class":313},[254,75021,822],{"class":264},[254,75023,71810],{"class":2103},[254,75025,74842],{"class":264},[254,75027,75029],{"class":256,"line":75028},291,[254,75030,2669],{"class":264},[254,75032,75034],{"class":256,"line":75033},292,[254,75035,52539],{"class":264},[254,75037,75039],{"class":256,"line":75038},293,[254,75040,2540],{"emptyLinePlaceholder":184},[254,75042,75044],{"class":256,"line":75043},294,[254,75045,33602],{"class":264},[254,75047,75049],{"class":256,"line":75048},295,[254,75050,2540],{"emptyLinePlaceholder":184},[254,75052,75054,75056,75058],{"class":256,"line":75053},296,[254,75055,52558],{"class":264},[254,75057,51954],{"class":51441},[254,75059,51448],{"class":264},[254,75061,75063,75065,75067],{"class":256,"line":75062},297,[254,75064,51926],{"class":264},[254,75066,51941],{"class":51441},[254,75068,51448],{"class":264},[254,75070,75072],{"class":256,"line":75071},298,[254,75073,2540],{"emptyLinePlaceholder":184},[254,75075,75077,75079,75081],{"class":256,"line":75076},299,[254,75078,51926],{"class":264},[254,75080,50776],{"class":51441},[254,75082,51448],{"class":264},[34,75084,75086],{"id":75085},"_36-正则表达式","3.6 正则表达式",[14,75088,75089],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[14,75091,75092],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[14,75094,75095],{},"正则表达式的作用：",[1271,75097,75098,75105,75111],{},[24,75099,75100,75101,75104],{},"表单验证（ ",[414,75102,75103],{},"匹配"," ）",[24,75106,75107,75108,75104],{},"过滤敏感词（ ",[414,75109,75110],{},"替换",[24,75112,75113,75114,75104],{},"字符串中提取我们想要的部分（ ",[414,75115,75116],{},"提取",[225,75118,75120],{"id":75119},"_361-语法","3.6.1 语法",[14,75122,75123],{},"正则表达式使用步骤：",[21,75125,75126,75129],{},[24,75127,75128],{},"定义规则",[24,75130,75131],{},"查找是否匹配",[14,75133,75134],{},"正则表达式里边不需要写引号",[14,75136,75137],{},[1602,75138],{"alt":174,"src":75139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[14,75141,75142],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[14,75144,75145],{},"reg.test(str)",[14,75147,75148],{},[1602,75149],{"alt":174,"src":75150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[14,75152,75153],{},[1602,75154],{"alt":174,"src":75155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[225,75157,75159],{"id":75158},"_362-元字符","3.6.2 元字符",[21,75161,75162,75165,75168,75171,75178],{},[24,75163,75164],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[24,75166,75167],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[24,75169,75170],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[24,75172,75173,75174],{},"正则验证工具：",[42,75175,75176],{"href":75176,"rel":75177},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[151],[24,75179,75180],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[22139,75182,75184],{"id":75183},"_3621-边界符","3.6.2.1 边界符",[14,75186,75187],{},[1602,75188],{"alt":174,"src":75189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[14,75191,75192],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[14,75194,75195],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[14,75197,75198],{},"只匹配一次",[14,75200,75201],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[22139,75203,75205],{"id":75204},"_3622-量词","3.6.2.2 量词",[14,75207,75208],{},[1602,75209],{"alt":174,"src":75210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[14,75212,75213],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[22139,75215,75217],{"id":75216},"_3623-元字符","3.6.2.3 元字符",[14,75219,75220],{},[1602,75221],{"alt":174,"src":75222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[14,75224,75225],{},"匹配的是a或b或c []只选一个",[14,75227,75228],{},[1602,75229],{"alt":174,"src":75230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[14,75232,75233],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[14,75235,75236],{},[1602,75237],{"alt":174,"src":75238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[14,75240,75241],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[14,75243,75244],{},[1602,75245],{"alt":174,"src":75246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[245,75248,75250],{"className":50774,"code":75249,"language":50776,"meta":174,"style":174},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cscript>\n    \u002F\u002F 元字符中\n    console.log(\u002F哈\u002F.test('哈'))  \u002F\u002Ftrue\n    console.log(\u002F哈\u002F.test('哈哈'))  \u002F\u002Ftrue\n    console.log(\u002F哈\u002F.test('二哈'))   \u002F\u002Ftrue\n\n    \u002F\u002F 1.边界符\n    console.log(\u002F^哈\u002F.test('哈'))  \u002F\u002Ftrue\n    console.log(\u002F^哈$\u002F.test('哈哈'))  \u002F\u002Ffalse\n    \u002F\u002F 2.量词\n    \u002F\u002F 量词 * 类似于 >= 0\n    console.log(\u002F^哈*$\u002F.test('哈哈'))  \u002F\u002Ftrue\n    console.log(\u002F^哈*$\u002F.test('二哈好傻'))  \u002F\u002Ffalse 必须以哈开头或结尾\n    console.log(\u002F^哈*$\u002F.test('哈好哈'))   \u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n\n    \u002F\u002F +类似于>=1\n    console.log(\u002F^哈+$\u002F.test('哈哈'))  \u002F\u002Ftrue\n    console.log(\u002F^哈+$\u002F.test('二哈好傻'))  \u002F\u002Ffalse 必须以哈开头或结尾\n    console.log(\u002F^哈+$\u002F.test('哈好哈'))   \u002F\u002Ffalse\n\n    \u002F\u002F ?类似于0次或一次\n    console.log(\u002F^哈？$\u002F.test(''))   \u002F\u002Ftrue\n    console.log(\u002F^哈?$\u002F.test('哈哈'))  \u002F\u002Ffalse\n    console.log(\u002F^哈?$\u002F.test('二哈好傻'))  \u002F\u002Ffalse 必须以哈开头或结尾\n    console.log(\u002F^哈?$\u002F.test('哈好哈'))  \u002F\u002Ffalse\n\n    \u002F\u002F {n}写几，就必须出现几次\n    console.log(\u002F^哈{4}$\u002F.test('哈哈哈哈')) \u002F\u002Ftrue\n\n    \u002F\u002F {n,}大于等于n次\n    console.log(\u002F^哈{4,}$\u002F.test('哈哈哈哈')) \u002F\u002Ftrue\n    console.log(\u002F^哈{4,}$\u002F.test('哈哈哈哈哈')) \u002F\u002Ftrue\n\n    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n    console.log(\u002F^哈{4,6}$\u002F.test('哈哈哈哈')) \u002F\u002Ftrue\n    console.log(\u002F^哈{4,6}$\u002F.test('哈哈哈哈哈')) \u002F\u002Ftrue\n    console.log(\u002F^哈{4,6}$\u002F.test('哈哈哈哈哈哈哈')) \u002F\u002Ffalse\n\n    \u002F\u002F 3.字符类 [abc] 只选一个字符\n    console.log(\u002F^[abc]$\u002F.test('a'))  \u002F\u002Ftrue\n    console.log(\u002F^[abc]$\u002F.test('b'))  \u002F\u002Ftrue\n    console.log(\u002F^[abc]$\u002F.test('c'))  \u002F\u002Ftrue\n    console.log(\u002F[abc]\u002F.test('ab'))  \u002F\u002Ftrue\n    console.log(\u002F^[abc]$\u002F.test('ab'))  \u002F\u002Ffalse     不加精确匹配，就是true\n    console.log(\u002F^[abc]{2}$\u002F.test('ab'))  \u002F\u002Ftrue   可以选两个\n    console.log(\u002F^[a-z]$\u002F.test('p'))   \u002F\u002Ftrue   依然只能选一个\n    console.log(\u002F^[A-Z]$\u002F.test('p'))   \u002F\u002Ffalse\n    console.log(\u002F^[A-Z]$\u002F.test('P'))   \u002F\u002Ftrue\n    console.log(\u002F^[0-9]$\u002F.test('0'))   \u002F\u002Ftrue\n    console.log(\u002F^[a-zA-Z0-9]$\u002F.test('p'))  \u002F\u002Ftrue\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[251,75251,75252,75262,75276,75280,75288,75302,75322,75334,75342,75346,75354,75362,75367,75398,75425,75453,75457,75462,75490,75521,75526,75531,75562,75594,75626,75630,75635,75666,75696,75726,75730,75735,75766,75797,75827,75857,75861,75866,75899,75903,75908,75939,75970,75974,75979,76010,76040,76071,76075,76080,76112,76143,76174,76201,76232,76264,76297,76328,76359,76391,76422,76430,76438,76442],{"__ignoreMap":174},[254,75253,75254,75256,75258,75260],{"class":256,"line":257},[254,75255,51438],{"class":264},[254,75257,51442],{"class":51441},[254,75259,51445],{"class":2103},[254,75261,51448],{"class":264},[254,75263,75264,75266,75268,75270,75272,75274],{"class":256,"line":175},[254,75265,1174],{"class":264},[254,75267,50776],{"class":51441},[254,75269,51457],{"class":2103},[254,75271,310],{"class":264},[254,75273,51462],{"class":369},[254,75275,51448],{"class":264},[254,75277,75278],{"class":256,"line":1319},[254,75279,2540],{"emptyLinePlaceholder":184},[254,75281,75282,75284,75286],{"class":256,"line":1334},[254,75283,1174],{"class":264},[254,75285,51475],{"class":51441},[254,75287,51448],{"class":264},[254,75289,75290,75292,75294,75296,75298,75300],{"class":256,"line":1340},[254,75291,52285],{"class":264},[254,75293,51485],{"class":51441},[254,75295,51488],{"class":2103},[254,75297,310],{"class":264},[254,75299,51493],{"class":369},[254,75301,51448],{"class":264},[254,75303,75304,75306,75308,75310,75312,75314,75316,75318,75320],{"class":256,"line":1354},[254,75305,52285],{"class":264},[254,75307,51485],{"class":51441},[254,75309,15061],{"class":2103},[254,75311,310],{"class":264},[254,75313,51532],{"class":369},[254,75315,51512],{"class":2103},[254,75317,310],{"class":264},[254,75319,51539],{"class":369},[254,75321,51448],{"class":264},[254,75323,75324,75326,75328,75330,75332],{"class":256,"line":1360},[254,75325,52285],{"class":264},[254,75327,51548],{"class":51441},[254,75329,51551],{"class":264},[254,75331,51548],{"class":51441},[254,75333,51448],{"class":264},[254,75335,75336,75338,75340],{"class":256,"line":1451},[254,75337,51926],{"class":264},[254,75339,51475],{"class":51441},[254,75341,51448],{"class":264},[254,75343,75344],{"class":256,"line":1457},[254,75345,2540],{"emptyLinePlaceholder":184},[254,75347,75348,75350,75352],{"class":256,"line":1469},[254,75349,1174],{"class":264},[254,75351,51941],{"class":51441},[254,75353,51448],{"class":264},[254,75355,75356,75358,75360],{"class":256,"line":1752},[254,75357,52285],{"class":264},[254,75359,51954],{"class":51441},[254,75361,51448],{"class":264},[254,75363,75364],{"class":256,"line":1757},[254,75365,75366],{"class":323},"    \u002F\u002F 元字符中\n",[254,75368,75369,75371,75373,75375,75377,75380,75382,75384,75387,75389,75392,75395],{"class":256,"line":1763},[254,75370,73894],{"class":264},[254,75372,58388],{"class":2103},[254,75374,265],{"class":264},[254,75376,848],{"class":369},[254,75378,75379],{"class":48118},"哈",[254,75381,848],{"class":369},[254,75383,822],{"class":264},[254,75385,75386],{"class":2103},"test",[254,75388,265],{"class":264},[254,75390,75391],{"class":369},"'哈'",[254,75393,75394],{"class":264},"))  ",[254,75396,75397],{"class":323},"\u002F\u002Ftrue\n",[254,75399,75400,75402,75404,75406,75408,75410,75412,75414,75416,75418,75421,75423],{"class":256,"line":1768},[254,75401,73894],{"class":264},[254,75403,58388],{"class":2103},[254,75405,265],{"class":264},[254,75407,848],{"class":369},[254,75409,75379],{"class":48118},[254,75411,848],{"class":369},[254,75413,822],{"class":264},[254,75415,75386],{"class":2103},[254,75417,265],{"class":264},[254,75419,75420],{"class":369},"'哈哈'",[254,75422,75394],{"class":264},[254,75424,75397],{"class":323},[254,75426,75427,75429,75431,75433,75435,75437,75439,75441,75443,75445,75448,75451],{"class":256,"line":1782},[254,75428,73894],{"class":264},[254,75430,58388],{"class":2103},[254,75432,265],{"class":264},[254,75434,848],{"class":369},[254,75436,75379],{"class":48118},[254,75438,848],{"class":369},[254,75440,822],{"class":264},[254,75442,75386],{"class":2103},[254,75444,265],{"class":264},[254,75446,75447],{"class":369},"'二哈'",[254,75449,75450],{"class":264},"))   ",[254,75452,75397],{"class":323},[254,75454,75455],{"class":256,"line":1787},[254,75456,2540],{"emptyLinePlaceholder":184},[254,75458,75459],{"class":256,"line":1793},[254,75460,75461],{"class":323},"    \u002F\u002F 1.边界符\n",[254,75463,75464,75466,75468,75470,75472,75474,75476,75478,75480,75482,75484,75486,75488],{"class":256,"line":1814},[254,75465,73894],{"class":264},[254,75467,58388],{"class":2103},[254,75469,265],{"class":264},[254,75471,848],{"class":369},[254,75473,1230],{"class":260},[254,75475,75379],{"class":48118},[254,75477,848],{"class":369},[254,75479,822],{"class":264},[254,75481,75386],{"class":2103},[254,75483,265],{"class":264},[254,75485,75391],{"class":369},[254,75487,75394],{"class":264},[254,75489,75397],{"class":323},[254,75491,75492,75494,75496,75498,75500,75502,75504,75506,75508,75510,75512,75514,75516,75518],{"class":256,"line":1819},[254,75493,73894],{"class":264},[254,75495,58388],{"class":2103},[254,75497,265],{"class":264},[254,75499,848],{"class":369},[254,75501,1230],{"class":260},[254,75503,75379],{"class":48118},[254,75505,566],{"class":260},[254,75507,848],{"class":369},[254,75509,822],{"class":264},[254,75511,75386],{"class":2103},[254,75513,265],{"class":264},[254,75515,75420],{"class":369},[254,75517,75394],{"class":264},[254,75519,75520],{"class":323},"\u002F\u002Ffalse\n",[254,75522,75523],{"class":256,"line":1833},[254,75524,75525],{"class":323},"    \u002F\u002F 2.量词\n",[254,75527,75528],{"class":256,"line":1838},[254,75529,75530],{"class":323},"    \u002F\u002F 量词 * 类似于 >= 0\n",[254,75532,75533,75535,75537,75539,75541,75543,75545,75548,75550,75552,75554,75556,75558,75560],{"class":256,"line":1867},[254,75534,73894],{"class":264},[254,75536,58388],{"class":2103},[254,75538,265],{"class":264},[254,75540,848],{"class":369},[254,75542,1230],{"class":260},[254,75544,75379],{"class":48118},[254,75546,75547],{"class":260},"*$",[254,75549,848],{"class":369},[254,75551,822],{"class":264},[254,75553,75386],{"class":2103},[254,75555,265],{"class":264},[254,75557,75420],{"class":369},[254,75559,75394],{"class":264},[254,75561,75397],{"class":323},[254,75563,75564,75566,75568,75570,75572,75574,75576,75578,75580,75582,75584,75586,75589,75591],{"class":256,"line":1872},[254,75565,73894],{"class":264},[254,75567,58388],{"class":2103},[254,75569,265],{"class":264},[254,75571,848],{"class":369},[254,75573,1230],{"class":260},[254,75575,75379],{"class":48118},[254,75577,75547],{"class":260},[254,75579,848],{"class":369},[254,75581,822],{"class":264},[254,75583,75386],{"class":2103},[254,75585,265],{"class":264},[254,75587,75588],{"class":369},"'二哈好傻'",[254,75590,75394],{"class":264},[254,75592,75593],{"class":323},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[254,75595,75596,75598,75600,75602,75604,75606,75608,75610,75612,75614,75616,75618,75621,75623],{"class":256,"line":1889},[254,75597,73894],{"class":264},[254,75599,58388],{"class":2103},[254,75601,265],{"class":264},[254,75603,848],{"class":369},[254,75605,1230],{"class":260},[254,75607,75379],{"class":48118},[254,75609,75547],{"class":260},[254,75611,848],{"class":369},[254,75613,822],{"class":264},[254,75615,75386],{"class":2103},[254,75617,265],{"class":264},[254,75619,75620],{"class":369},"'哈好哈'",[254,75622,75450],{"class":264},[254,75624,75625],{"class":323},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[254,75627,75628],{"class":256,"line":1894},[254,75629,2540],{"emptyLinePlaceholder":184},[254,75631,75632],{"class":256,"line":1899},[254,75633,75634],{"class":323},"    \u002F\u002F +类似于>=1\n",[254,75636,75637,75639,75641,75643,75645,75647,75649,75652,75654,75656,75658,75660,75662,75664],{"class":256,"line":1904},[254,75638,73894],{"class":264},[254,75640,58388],{"class":2103},[254,75642,265],{"class":264},[254,75644,848],{"class":369},[254,75646,1230],{"class":260},[254,75648,75379],{"class":48118},[254,75650,75651],{"class":260},"+$",[254,75653,848],{"class":369},[254,75655,822],{"class":264},[254,75657,75386],{"class":2103},[254,75659,265],{"class":264},[254,75661,75420],{"class":369},[254,75663,75394],{"class":264},[254,75665,75397],{"class":323},[254,75667,75668,75670,75672,75674,75676,75678,75680,75682,75684,75686,75688,75690,75692,75694],{"class":256,"line":1918},[254,75669,73894],{"class":264},[254,75671,58388],{"class":2103},[254,75673,265],{"class":264},[254,75675,848],{"class":369},[254,75677,1230],{"class":260},[254,75679,75379],{"class":48118},[254,75681,75651],{"class":260},[254,75683,848],{"class":369},[254,75685,822],{"class":264},[254,75687,75386],{"class":2103},[254,75689,265],{"class":264},[254,75691,75588],{"class":369},[254,75693,75394],{"class":264},[254,75695,75593],{"class":323},[254,75697,75698,75700,75702,75704,75706,75708,75710,75712,75714,75716,75718,75720,75722,75724],{"class":256,"line":1923},[254,75699,73894],{"class":264},[254,75701,58388],{"class":2103},[254,75703,265],{"class":264},[254,75705,848],{"class":369},[254,75707,1230],{"class":260},[254,75709,75379],{"class":48118},[254,75711,75651],{"class":260},[254,75713,848],{"class":369},[254,75715,822],{"class":264},[254,75717,75386],{"class":2103},[254,75719,265],{"class":264},[254,75721,75620],{"class":369},[254,75723,75450],{"class":264},[254,75725,75520],{"class":323},[254,75727,75728],{"class":256,"line":2717},[254,75729,2540],{"emptyLinePlaceholder":184},[254,75731,75732],{"class":256,"line":2731},[254,75733,75734],{"class":323},"    \u002F\u002F ?类似于0次或一次\n",[254,75736,75737,75739,75741,75743,75745,75747,75750,75752,75754,75756,75758,75760,75762,75764],{"class":256,"line":2739},[254,75738,73894],{"class":264},[254,75740,58388],{"class":2103},[254,75742,265],{"class":264},[254,75744,848],{"class":369},[254,75746,1230],{"class":260},[254,75748,75749],{"class":48118},"哈？",[254,75751,566],{"class":260},[254,75753,848],{"class":369},[254,75755,822],{"class":264},[254,75757,75386],{"class":2103},[254,75759,265],{"class":264},[254,75761,74369],{"class":369},[254,75763,75450],{"class":264},[254,75765,75397],{"class":323},[254,75767,75768,75770,75772,75774,75776,75778,75780,75783,75785,75787,75789,75791,75793,75795],{"class":256,"line":2744},[254,75769,73894],{"class":264},[254,75771,58388],{"class":2103},[254,75773,265],{"class":264},[254,75775,848],{"class":369},[254,75777,1230],{"class":260},[254,75779,75379],{"class":48118},[254,75781,75782],{"class":260},"?$",[254,75784,848],{"class":369},[254,75786,822],{"class":264},[254,75788,75386],{"class":2103},[254,75790,265],{"class":264},[254,75792,75420],{"class":369},[254,75794,75394],{"class":264},[254,75796,75520],{"class":323},[254,75798,75799,75801,75803,75805,75807,75809,75811,75813,75815,75817,75819,75821,75823,75825],{"class":256,"line":2750},[254,75800,73894],{"class":264},[254,75802,58388],{"class":2103},[254,75804,265],{"class":264},[254,75806,848],{"class":369},[254,75808,1230],{"class":260},[254,75810,75379],{"class":48118},[254,75812,75782],{"class":260},[254,75814,848],{"class":369},[254,75816,822],{"class":264},[254,75818,75386],{"class":2103},[254,75820,265],{"class":264},[254,75822,75588],{"class":369},[254,75824,75394],{"class":264},[254,75826,75593],{"class":323},[254,75828,75829,75831,75833,75835,75837,75839,75841,75843,75845,75847,75849,75851,75853,75855],{"class":256,"line":2756},[254,75830,73894],{"class":264},[254,75832,58388],{"class":2103},[254,75834,265],{"class":264},[254,75836,848],{"class":369},[254,75838,1230],{"class":260},[254,75840,75379],{"class":48118},[254,75842,75782],{"class":260},[254,75844,848],{"class":369},[254,75846,822],{"class":264},[254,75848,75386],{"class":2103},[254,75850,265],{"class":264},[254,75852,75620],{"class":369},[254,75854,75394],{"class":264},[254,75856,75520],{"class":323},[254,75858,75859],{"class":256,"line":2761},[254,75860,2540],{"emptyLinePlaceholder":184},[254,75862,75863],{"class":256,"line":8089},[254,75864,75865],{"class":323},"    \u002F\u002F {n}写几，就必须出现几次\n",[254,75867,75868,75870,75872,75874,75876,75878,75880,75883,75885,75887,75889,75891,75894,75897],{"class":256,"line":8113},[254,75869,73894],{"class":264},[254,75871,58388],{"class":2103},[254,75873,265],{"class":264},[254,75875,848],{"class":369},[254,75877,1230],{"class":260},[254,75879,75379],{"class":48118},[254,75881,75882],{"class":260},"{4}$",[254,75884,848],{"class":369},[254,75886,822],{"class":264},[254,75888,75386],{"class":2103},[254,75890,265],{"class":264},[254,75892,75893],{"class":369},"'哈哈哈哈'",[254,75895,75896],{"class":264},")) ",[254,75898,75397],{"class":323},[254,75900,75901],{"class":256,"line":8118},[254,75902,2540],{"emptyLinePlaceholder":184},[254,75904,75905],{"class":256,"line":8124},[254,75906,75907],{"class":323},"    \u002F\u002F {n,}大于等于n次\n",[254,75909,75910,75912,75914,75916,75918,75920,75922,75925,75927,75929,75931,75933,75935,75937],{"class":256,"line":8151},[254,75911,73894],{"class":264},[254,75913,58388],{"class":2103},[254,75915,265],{"class":264},[254,75917,848],{"class":369},[254,75919,1230],{"class":260},[254,75921,75379],{"class":48118},[254,75923,75924],{"class":260},"{4,}$",[254,75926,848],{"class":369},[254,75928,822],{"class":264},[254,75930,75386],{"class":2103},[254,75932,265],{"class":264},[254,75934,75893],{"class":369},[254,75936,75896],{"class":264},[254,75938,75397],{"class":323},[254,75940,75941,75943,75945,75947,75949,75951,75953,75955,75957,75959,75961,75963,75966,75968],{"class":256,"line":8156},[254,75942,73894],{"class":264},[254,75944,58388],{"class":2103},[254,75946,265],{"class":264},[254,75948,848],{"class":369},[254,75950,1230],{"class":260},[254,75952,75379],{"class":48118},[254,75954,75924],{"class":260},[254,75956,848],{"class":369},[254,75958,822],{"class":264},[254,75960,75386],{"class":2103},[254,75962,265],{"class":264},[254,75964,75965],{"class":369},"'哈哈哈哈哈'",[254,75967,75896],{"class":264},[254,75969,75397],{"class":323},[254,75971,75972],{"class":256,"line":8162},[254,75973,2540],{"emptyLinePlaceholder":184},[254,75975,75976],{"class":256,"line":8174},[254,75977,75978],{"class":323},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[254,75980,75981,75983,75985,75987,75989,75991,75993,75996,75998,76000,76002,76004,76006,76008],{"class":256,"line":8186},[254,75982,73894],{"class":264},[254,75984,58388],{"class":2103},[254,75986,265],{"class":264},[254,75988,848],{"class":369},[254,75990,1230],{"class":260},[254,75992,75379],{"class":48118},[254,75994,75995],{"class":260},"{4,6}$",[254,75997,848],{"class":369},[254,75999,822],{"class":264},[254,76001,75386],{"class":2103},[254,76003,265],{"class":264},[254,76005,75893],{"class":369},[254,76007,75896],{"class":264},[254,76009,75397],{"class":323},[254,76011,76012,76014,76016,76018,76020,76022,76024,76026,76028,76030,76032,76034,76036,76038],{"class":256,"line":8198},[254,76013,73894],{"class":264},[254,76015,58388],{"class":2103},[254,76017,265],{"class":264},[254,76019,848],{"class":369},[254,76021,1230],{"class":260},[254,76023,75379],{"class":48118},[254,76025,75995],{"class":260},[254,76027,848],{"class":369},[254,76029,822],{"class":264},[254,76031,75386],{"class":2103},[254,76033,265],{"class":264},[254,76035,75965],{"class":369},[254,76037,75896],{"class":264},[254,76039,75397],{"class":323},[254,76041,76042,76044,76046,76048,76050,76052,76054,76056,76058,76060,76062,76064,76067,76069],{"class":256,"line":9857},[254,76043,73894],{"class":264},[254,76045,58388],{"class":2103},[254,76047,265],{"class":264},[254,76049,848],{"class":369},[254,76051,1230],{"class":260},[254,76053,75379],{"class":48118},[254,76055,75995],{"class":260},[254,76057,848],{"class":369},[254,76059,822],{"class":264},[254,76061,75386],{"class":2103},[254,76063,265],{"class":264},[254,76065,76066],{"class":369},"'哈哈哈哈哈哈哈'",[254,76068,75896],{"class":264},[254,76070,75520],{"class":323},[254,76072,76073],{"class":256,"line":9882},[254,76074,2540],{"emptyLinePlaceholder":184},[254,76076,76077],{"class":256,"line":9905},[254,76078,76079],{"class":323},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[254,76081,76082,76084,76086,76088,76090,76092,76095,76097,76099,76101,76103,76105,76108,76110],{"class":256,"line":9929},[254,76083,73894],{"class":264},[254,76085,58388],{"class":2103},[254,76087,265],{"class":264},[254,76089,848],{"class":369},[254,76091,1230],{"class":260},[254,76093,76094],{"class":313},"[abc]",[254,76096,566],{"class":260},[254,76098,848],{"class":369},[254,76100,822],{"class":264},[254,76102,75386],{"class":2103},[254,76104,265],{"class":264},[254,76106,76107],{"class":369},"'a'",[254,76109,75394],{"class":264},[254,76111,75397],{"class":323},[254,76113,76114,76116,76118,76120,76122,76124,76126,76128,76130,76132,76134,76136,76139,76141],{"class":256,"line":9934},[254,76115,73894],{"class":264},[254,76117,58388],{"class":2103},[254,76119,265],{"class":264},[254,76121,848],{"class":369},[254,76123,1230],{"class":260},[254,76125,76094],{"class":313},[254,76127,566],{"class":260},[254,76129,848],{"class":369},[254,76131,822],{"class":264},[254,76133,75386],{"class":2103},[254,76135,265],{"class":264},[254,76137,76138],{"class":369},"'b'",[254,76140,75394],{"class":264},[254,76142,75397],{"class":323},[254,76144,76145,76147,76149,76151,76153,76155,76157,76159,76161,76163,76165,76167,76170,76172],{"class":256,"line":9939},[254,76146,73894],{"class":264},[254,76148,58388],{"class":2103},[254,76150,265],{"class":264},[254,76152,848],{"class":369},[254,76154,1230],{"class":260},[254,76156,76094],{"class":313},[254,76158,566],{"class":260},[254,76160,848],{"class":369},[254,76162,822],{"class":264},[254,76164,75386],{"class":2103},[254,76166,265],{"class":264},[254,76168,76169],{"class":369},"'c'",[254,76171,75394],{"class":264},[254,76173,75397],{"class":323},[254,76175,76176,76178,76180,76182,76184,76186,76188,76190,76192,76194,76197,76199],{"class":256,"line":9944},[254,76177,73894],{"class":264},[254,76179,58388],{"class":2103},[254,76181,265],{"class":264},[254,76183,848],{"class":369},[254,76185,76094],{"class":313},[254,76187,848],{"class":369},[254,76189,822],{"class":264},[254,76191,75386],{"class":2103},[254,76193,265],{"class":264},[254,76195,76196],{"class":369},"'ab'",[254,76198,75394],{"class":264},[254,76200,75397],{"class":323},[254,76202,76203,76205,76207,76209,76211,76213,76215,76217,76219,76221,76223,76225,76227,76229],{"class":256,"line":9953},[254,76204,73894],{"class":264},[254,76206,58388],{"class":2103},[254,76208,265],{"class":264},[254,76210,848],{"class":369},[254,76212,1230],{"class":260},[254,76214,76094],{"class":313},[254,76216,566],{"class":260},[254,76218,848],{"class":369},[254,76220,822],{"class":264},[254,76222,75386],{"class":2103},[254,76224,265],{"class":264},[254,76226,76196],{"class":369},[254,76228,75394],{"class":264},[254,76230,76231],{"class":323},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[254,76233,76234,76236,76238,76240,76242,76244,76246,76249,76251,76253,76255,76257,76259,76261],{"class":256,"line":9958},[254,76235,73894],{"class":264},[254,76237,58388],{"class":2103},[254,76239,265],{"class":264},[254,76241,848],{"class":369},[254,76243,1230],{"class":260},[254,76245,76094],{"class":313},[254,76247,76248],{"class":260},"{2}$",[254,76250,848],{"class":369},[254,76252,822],{"class":264},[254,76254,75386],{"class":2103},[254,76256,265],{"class":264},[254,76258,76196],{"class":369},[254,76260,75394],{"class":264},[254,76262,76263],{"class":323},"\u002F\u002Ftrue   可以选两个\n",[254,76265,76266,76268,76270,76272,76274,76276,76279,76281,76283,76285,76287,76289,76292,76294],{"class":256,"line":9964},[254,76267,73894],{"class":264},[254,76269,58388],{"class":2103},[254,76271,265],{"class":264},[254,76273,848],{"class":369},[254,76275,1230],{"class":260},[254,76277,76278],{"class":313},"[a-z]",[254,76280,566],{"class":260},[254,76282,848],{"class":369},[254,76284,822],{"class":264},[254,76286,75386],{"class":2103},[254,76288,265],{"class":264},[254,76290,76291],{"class":369},"'p'",[254,76293,75450],{"class":264},[254,76295,76296],{"class":323},"\u002F\u002Ftrue   依然只能选一个\n",[254,76298,76299,76301,76303,76305,76307,76309,76312,76314,76316,76318,76320,76322,76324,76326],{"class":256,"line":9985},[254,76300,73894],{"class":264},[254,76302,58388],{"class":2103},[254,76304,265],{"class":264},[254,76306,848],{"class":369},[254,76308,1230],{"class":260},[254,76310,76311],{"class":313},"[A-Z]",[254,76313,566],{"class":260},[254,76315,848],{"class":369},[254,76317,822],{"class":264},[254,76319,75386],{"class":2103},[254,76321,265],{"class":264},[254,76323,76291],{"class":369},[254,76325,75450],{"class":264},[254,76327,75520],{"class":323},[254,76329,76330,76332,76334,76336,76338,76340,76342,76344,76346,76348,76350,76352,76355,76357],{"class":256,"line":9991},[254,76331,73894],{"class":264},[254,76333,58388],{"class":2103},[254,76335,265],{"class":264},[254,76337,848],{"class":369},[254,76339,1230],{"class":260},[254,76341,76311],{"class":313},[254,76343,566],{"class":260},[254,76345,848],{"class":369},[254,76347,822],{"class":264},[254,76349,75386],{"class":2103},[254,76351,265],{"class":264},[254,76353,76354],{"class":369},"'P'",[254,76356,75450],{"class":264},[254,76358,75397],{"class":323},[254,76360,76361,76363,76365,76367,76369,76371,76374,76376,76378,76380,76382,76384,76387,76389],{"class":256,"line":10005},[254,76362,73894],{"class":264},[254,76364,58388],{"class":2103},[254,76366,265],{"class":264},[254,76368,848],{"class":369},[254,76370,1230],{"class":260},[254,76372,76373],{"class":313},"[0-9]",[254,76375,566],{"class":260},[254,76377,848],{"class":369},[254,76379,822],{"class":264},[254,76381,75386],{"class":2103},[254,76383,265],{"class":264},[254,76385,76386],{"class":369},"'0'",[254,76388,75450],{"class":264},[254,76390,75397],{"class":323},[254,76392,76393,76395,76397,76399,76401,76403,76406,76408,76410,76412,76414,76416,76418,76420],{"class":256,"line":10011},[254,76394,73894],{"class":264},[254,76396,58388],{"class":2103},[254,76398,265],{"class":264},[254,76400,848],{"class":369},[254,76402,1230],{"class":260},[254,76404,76405],{"class":313},"[a-zA-Z0-9]",[254,76407,566],{"class":260},[254,76409,848],{"class":369},[254,76411,822],{"class":264},[254,76413,75386],{"class":2103},[254,76415,265],{"class":264},[254,76417,76291],{"class":369},[254,76419,75394],{"class":264},[254,76421,75397],{"class":323},[254,76423,76424,76426,76428],{"class":256,"line":10038},[254,76425,52558],{"class":264},[254,76427,51954],{"class":51441},[254,76429,51448],{"class":264},[254,76431,76432,76434,76436],{"class":256,"line":10047},[254,76433,51926],{"class":264},[254,76435,51941],{"class":51441},[254,76437,51448],{"class":264},[254,76439,76440],{"class":256,"line":10053},[254,76441,2540],{"emptyLinePlaceholder":184},[254,76443,76444,76446,76448],{"class":256,"line":10061},[254,76445,51926],{"class":264},[254,76447,50776],{"class":51441},[254,76449,51448],{"class":264},[22139,76451,76453],{"id":76452},"_3624-修饰符","3.6.2.4 修饰符",[14,76455,76456],{},[1602,76457],{"alt":174,"src":76458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[14,76460,76461],{},"replace是个方法，使用的时候一定不要忘记括号()",[14,76463,76464],{},[1602,76465],{"alt":174,"src":76466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[245,76468,76470],{"className":50774,"code":76469,"language":50776,"meta":174,"style":174},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\u003Cbody>\n  \u003Cscript>\n    console.log(\u002F^java$\u002F.test('java')) \u002F\u002Ftrue\n    console.log(\u002F^java$\u002F.test('Java')) \u002F\u002Ffalse\n    \u002F\u002F 不区分大小写、\n    console.log(\u002F^java$\u002Fi.test('Java')) \u002F\u002Ftrue\n    const str = 'java是一门编程语言，学完java工资很高'\n    const result = str.replace(\u002Fjava\u002Fig, '前端')\n    console.log(result)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\u003C\u002Fhtml>\n",[251,76471,76472,76482,76496,76504,76518,76538,76550,76558,76566,76574,76606,76637,76642,76674,76685,76718,76727,76735,76743],{"__ignoreMap":174},[254,76473,76474,76476,76478,76480],{"class":256,"line":257},[254,76475,51438],{"class":264},[254,76477,51442],{"class":51441},[254,76479,51445],{"class":2103},[254,76481,51448],{"class":264},[254,76483,76484,76486,76488,76490,76492,76494],{"class":256,"line":175},[254,76485,1174],{"class":264},[254,76487,50776],{"class":51441},[254,76489,51457],{"class":2103},[254,76491,310],{"class":264},[254,76493,51462],{"class":369},[254,76495,51448],{"class":264},[254,76497,76498,76500,76502],{"class":256,"line":1319},[254,76499,1174],{"class":264},[254,76501,51475],{"class":51441},[254,76503,51448],{"class":264},[254,76505,76506,76508,76510,76512,76514,76516],{"class":256,"line":1334},[254,76507,52285],{"class":264},[254,76509,51485],{"class":51441},[254,76511,51488],{"class":2103},[254,76513,310],{"class":264},[254,76515,51493],{"class":369},[254,76517,51448],{"class":264},[254,76519,76520,76522,76524,76526,76528,76530,76532,76534,76536],{"class":256,"line":1340},[254,76521,52285],{"class":264},[254,76523,51485],{"class":51441},[254,76525,15061],{"class":2103},[254,76527,310],{"class":264},[254,76529,51532],{"class":369},[254,76531,51512],{"class":2103},[254,76533,310],{"class":264},[254,76535,51539],{"class":369},[254,76537,51448],{"class":264},[254,76539,76540,76542,76544,76546,76548],{"class":256,"line":1354},[254,76541,52285],{"class":264},[254,76543,51548],{"class":51441},[254,76545,51551],{"class":264},[254,76547,51548],{"class":51441},[254,76549,51448],{"class":264},[254,76551,76552,76554,76556],{"class":256,"line":1360},[254,76553,51926],{"class":264},[254,76555,51475],{"class":51441},[254,76557,51448],{"class":264},[254,76559,76560,76562,76564],{"class":256,"line":1451},[254,76561,1174],{"class":264},[254,76563,51941],{"class":51441},[254,76565,51448],{"class":264},[254,76567,76568,76570,76572],{"class":256,"line":1457},[254,76569,52285],{"class":264},[254,76571,51954],{"class":51441},[254,76573,51448],{"class":264},[254,76575,76576,76578,76580,76582,76584,76586,76589,76591,76593,76595,76597,76599,76602,76604],{"class":256,"line":1469},[254,76577,73894],{"class":264},[254,76579,58388],{"class":2103},[254,76581,265],{"class":264},[254,76583,848],{"class":369},[254,76585,1230],{"class":260},[254,76587,76588],{"class":48118},"java",[254,76590,566],{"class":260},[254,76592,848],{"class":369},[254,76594,822],{"class":264},[254,76596,75386],{"class":2103},[254,76598,265],{"class":264},[254,76600,76601],{"class":369},"'java'",[254,76603,75896],{"class":264},[254,76605,75397],{"class":323},[254,76607,76608,76610,76612,76614,76616,76618,76620,76622,76624,76626,76628,76630,76633,76635],{"class":256,"line":1752},[254,76609,73894],{"class":264},[254,76611,58388],{"class":2103},[254,76613,265],{"class":264},[254,76615,848],{"class":369},[254,76617,1230],{"class":260},[254,76619,76588],{"class":48118},[254,76621,566],{"class":260},[254,76623,848],{"class":369},[254,76625,822],{"class":264},[254,76627,75386],{"class":2103},[254,76629,265],{"class":264},[254,76631,76632],{"class":369},"'Java'",[254,76634,75896],{"class":264},[254,76636,75520],{"class":323},[254,76638,76639],{"class":256,"line":1757},[254,76640,76641],{"class":323},"    \u002F\u002F 不区分大小写、\n",[254,76643,76644,76646,76648,76650,76652,76654,76656,76658,76660,76662,76664,76666,76668,76670,76672],{"class":256,"line":1763},[254,76645,73894],{"class":264},[254,76647,58388],{"class":2103},[254,76649,265],{"class":264},[254,76651,848],{"class":369},[254,76653,1230],{"class":260},[254,76655,76588],{"class":48118},[254,76657,566],{"class":260},[254,76659,848],{"class":369},[254,76661,705],{"class":260},[254,76663,822],{"class":264},[254,76665,75386],{"class":2103},[254,76667,265],{"class":264},[254,76669,76632],{"class":369},[254,76671,75896],{"class":264},[254,76673,75397],{"class":323},[254,76675,76676,76678,76680,76682],{"class":256,"line":1768},[254,76677,11362],{"class":260},[254,76679,74060],{"class":313},[254,76681,13705],{"class":260},[254,76683,76684],{"class":369}," 'java是一门编程语言，学完java工资很高'\n",[254,76686,76687,76689,76692,76694,76697,76700,76702,76704,76706,76708,76711,76713,76716],{"class":256,"line":1782},[254,76688,11362],{"class":260},[254,76690,76691],{"class":313}," result",[254,76693,13705],{"class":260},[254,76695,76696],{"class":264}," str.",[254,76698,76699],{"class":2103},"replace",[254,76701,265],{"class":264},[254,76703,848],{"class":369},[254,76705,76588],{"class":48118},[254,76707,848],{"class":369},[254,76709,76710],{"class":260},"ig",[254,76712,12576],{"class":264},[254,76714,76715],{"class":369},"'前端'",[254,76717,271],{"class":264},[254,76719,76720,76722,76724],{"class":256,"line":1787},[254,76721,73894],{"class":264},[254,76723,58388],{"class":2103},[254,76725,76726],{"class":264},"(result)\n",[254,76728,76729,76731,76733],{"class":256,"line":1793},[254,76730,52558],{"class":264},[254,76732,51954],{"class":51441},[254,76734,51448],{"class":264},[254,76736,76737,76739,76741],{"class":256,"line":1814},[254,76738,51926],{"class":264},[254,76740,51941],{"class":51441},[254,76742,51448],{"class":264},[254,76744,76745,76747,76749],{"class":256,"line":1819},[254,76746,51926],{"class":264},[254,76748,50776],{"class":51441},[254,76750,51448],{"class":264},[5267,76752,76753],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sA_wV, html code.shiki .sA_wV{--shiki-default:#032F62;--shiki-dark:#DBEDFF}html pre.shiki code .snhLl, html code.shiki .snhLl{--shiki-default:#22863A;--shiki-default-font-weight:bold;--shiki-dark:#85E89D;--shiki-dark-font-weight:bold}",{"title":174,"searchDepth":175,"depth":175,"links":76755},[76756,76766,76778,76795,76802,76810],{"id":53501,"depth":175,"text":53502,"children":76757},[76758,76759,76760,76761,76762,76763,76764,76765],{"id":53505,"depth":1319,"text":53506},{"id":53538,"depth":1319,"text":53539},{"id":53577,"depth":1319,"text":53578},{"id":53735,"depth":1319,"text":53736},{"id":53783,"depth":1319,"text":53784},{"id":53920,"depth":1319,"text":53921},{"id":54242,"depth":1319,"text":54243},{"id":57230,"depth":1319,"text":57231},{"id":57258,"depth":175,"text":57259,"children":76767},[76768,76769,76770,76771,76772,76773,76774,76775,76776,76777],{"id":57262,"depth":1319,"text":57263},{"id":57285,"depth":1319,"text":57286},{"id":58200,"depth":1319,"text":58201},{"id":58890,"depth":1319,"text":58891},{"id":59172,"depth":1319,"text":59173},{"id":63333,"depth":1319,"text":63334},{"id":63503,"depth":1319,"text":63504},{"id":63631,"depth":1319,"text":63632},{"id":63656,"depth":1319,"text":63657},{"id":65045,"depth":1319,"text":65046},{"id":66198,"depth":175,"text":66199,"children":76779},[76780,76781,76782,76783,76784,76785,76786,76787,76788,76789,76790,76791,76792,76793,76794],{"id":66202,"depth":1319,"text":66203},{"id":66856,"depth":1319,"text":66857},{"id":68551,"depth":1319,"text":68552},{"id":68592,"depth":1319,"text":68593},{"id":68634,"depth":1319,"text":68635},{"id":68648,"depth":1319,"text":68649},{"id":68697,"depth":1319,"text":68698},{"id":68709,"depth":1319,"text":68710},{"id":68724,"depth":1319,"text":68725},{"id":68760,"depth":1319,"text":68761},{"id":68841,"depth":1319,"text":68842},{"id":68969,"depth":1319,"text":68970},{"id":68981,"depth":1319,"text":68982},{"id":69000,"depth":1319,"text":69001},{"id":71111,"depth":1319,"text":71112},{"id":71130,"depth":175,"text":71131,"children":76796},[76797,76798,76799,76800,76801],{"id":71151,"depth":1319,"text":71152},{"id":71171,"depth":1319,"text":71172},{"id":71220,"depth":1319,"text":71221},{"id":71345,"depth":1319,"text":71346},{"id":71526,"depth":1319,"text":71527},{"id":71544,"depth":175,"text":71545,"children":76803},[76804,76805,76806,76807,76808,76809],{"id":71559,"depth":1319,"text":71560},{"id":71618,"depth":1319,"text":71619},{"id":71642,"depth":1319,"text":71643},{"id":71962,"depth":1319,"text":71963},{"id":71994,"depth":1319,"text":71995},{"id":72017,"depth":1319,"text":72018},{"id":75085,"depth":175,"text":75086,"children":76811},[76812,76813],{"id":75119,"depth":1319,"text":75120},{"id":75158,"depth":1319,"text":75159},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53473,"description":23518},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":76820,"title":76821,"body":76822,"description":23518,"extension":181,"meta":92959,"navigation":184,"path":92960,"seo":92961,"stem":92962,"__hash__":92963},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":76823,"toc":92895},[76824,76827,76830,76834,76838,76843,76848,76859,76863,76868,76871,76875,76878,76883,76887,76891,76894,76899,76902,76906,76909,76917,76920,76924,76929,76934,76937,76941,76946,76951,76954,76958,76963,76966,76971,76974,76979,76982,76987,76992,76995,76998,77002,77007,77012,77015,77019,77023,77026,77029,77032,77036,77040,77045,77050,77053,77057,77062,77067,77070,77073,77076,77079,77082,77085,77088,77091,77094,77099,77103,77108,77113,77116,77119,77122,77125,77128,77131,77134,77137,77141,77145,77148,77151,77154,77159,77161,77164,77167,77170,77173,77176,77179,77182,77185,77188,77191,77194,77197,77200,77205,77210,77215,77218,77222,77225,77230,77234,77236,77247,77252,77353,77356,77359,77362,77365,77368,77371,77374,77377,77379,77382,77385,77388,77391,77394,77396,77399,77402,77405,77408,77411,77414,77416,77419,77421,77423,77426,77430,77434,77437,77440,77443,77446,77449,77452,77455,77458,77461,77466,77586,77589,77592,77597,77600,77603,77606,77609,77614,77617,77620,77623,77626,77631,77634,77734,77799,77873,77877,77880,77883,77887,77890,77904,77933,77936,77939,77942,77945,77948,77951,77954,77956,77959,77962,77965,77968,77972,77977,77981,77986,78061,78064,78247,78250,78253,78256,78259,78262,78264,78267,78270,78273,78276,78279,78282,78284,78288,78291,78296,78299,78302,78305,78308,78310,78315,78318,78321,78324,78327,78329,78334,78337,78340,78342,78344,78347,78351,78354,78357,78362,78365,78368,78371,78421,78426,78430,78435,78438,78507,78510,78519,78523,78528,78531,78534,78542,78545,78562,80364,80368,80372,80377,80380,80384,80390,80396,80548,80553,80558,80561,80564,80567,80570,80573,80576,80579,80582,80585,80588,80591,80594,80599,80603,80606,80617,80621,80626,80629,80632,80635,80638,80641,80643,80646,80649,80652,80655,80657,80674,80677,80681,80684,80689,80694,80697,80700,80704,80707,80710,80719,80722,80726,80729,80734,80739,80806,80810,80813,80816,80821,80826,80912,80917,80921,80924,80927,80942,80945,80950,80954,80959,81068,81071,81082,81232,81236,81241,81350,81354,81359,81364,81369,81372,81379,81399,81435,81599,81604,81607,81612,81619,81622,81625,81628,81687,81743,81799,81803,81808,82123,82126,82130,82133,82138,82247,82252,82256,82261,82265,82336,82340,82342,82345,82348,82386,82662,82666,82683,82749,82783,82787,82790,82795,82824,82831,82840,82845,82860,82865,82874,82877,83014,83018,83080,83084,83089,83334,83338,83343,83346,83349,83352,83355,83359,83364,84945,84949,84953,84959,84962,84967,84971,84974,84979,84982,84993,84997,85002,85006,85011,85016,85019,85024,85028,85032,85035,85040,85045,85048,85051,85054,85176,85181,85283,85286,85289,85293,85298,85470,85475,85479,85482,85487,85553,85558,85561,85692,85695,85700,85703,85706,85797,85802,85805,85808,85811,85814,85819,85824,85827,85832,85837,85842,85846,85849,85852,85857,85862,85867,85872,85926,85929,85932,85937,85940,85943,85948,85953,85958,85962,85967,85981,85986,85989,85994,85998,86003,86008,86013,86018,86023,86028,86033,86038,86041,86045,86050,86053,86056,86059,86064,86069,86072,86075,86079,86082,86085,86090,86095,86100,86105,86108,86113,86118,86179,86184,86187,86192,87433,87438,87442,87446,87451,87454,87459,87464,87467,87472,87474,87479,87483,87486,87489,87500,87504,87509,87514,87569,87574,87579,87584,87795,87800,87804,87809,87812,87814,87817,87820,88267,88272,88279,88285,88288,88291,88555,88560,88564,88829,88834,88838,88843,88848,88853,88858,89189,89192,89197,89202,89205,89209,89213,89218,89223,89228,89233,89238,89243,89247,89250,89255,89260,89263,89337,89342,89347,89352,89354,89357,89727,89732,89737,89742,89745,89748,89850,89855,89860,89963,89967,89972,89976,89980,89985,89990,89993,89998,90001,90004,90397,90402,90405,90408,90411,90414,90934,90938,90943,90948,90953,90956,90961,90964,90967,91349,91354,91356,91358,91361,91364,91876,91880,91941,91944,91947,91950,91954,91957,91962,91967,92892],[10,76825,76821],{"id":76826},"_4js进阶",[14,76828,76829],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[34,76831,76833],{"id":76832},"_41-作用域","4.1 作用域",[225,76835,76837],{"id":76836},"_411-局部作用域","4.1.1 局部作用域",[14,76839,76840],{},[1602,76841],{"alt":174,"src":76842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[14,76844,76845],{},[1602,76846],{"alt":174,"src":76847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[1271,76849,76850,76853,76856],{},[24,76851,76852],{},"函数作用域在函数内部",[24,76854,76855],{},"块级作用域在{}",[24,76857,76858],{},"对象的那个{}不是作用域，不是块作用域",[225,76860,76862],{"id":76861},"_412-全局作用域","4.1.2 全局作用域",[14,76864,76865],{},[1602,76866],{"alt":174,"src":76867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[14,76869,76870],{},"window.a=10不要这样写",[225,76872,76874],{"id":76873},"_413-作用域链","4.1.3 作用域链",[14,76876,76877],{},"变量查找机制",[14,76879,76880],{},[1602,76881],{"alt":174,"src":76882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[34,76884,76886],{"id":76885},"_42-垃圾回收机制","4.2 垃圾回收机制",[225,76888,76890],{"id":76889},"_421-大体介绍","4.2.1 大体介绍",[14,76892,76893],{},"垃圾回收机制(Garbage Collection) 简称 GC",[14,76895,76896],{},[1602,76897],{"alt":174,"src":76898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[14,76900,76901],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[225,76903,76905],{"id":76904},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[14,76907,76908],{},"堆栈空间分配区别：",[21,76910,76911,76914],{},[24,76912,76913],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[24,76915,76916],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[14,76918,76919],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[22139,76921,76923],{"id":76922},"_4221-引用计数","4.2.2.1 引用计数",[14,76925,76926],{},[1602,76927],{"alt":174,"src":76928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[14,76930,76931],{},[1602,76932],{"alt":174,"src":76933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[14,76935,76936],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[22139,76938,76940],{"id":76939},"_4222-标记清除法","4.2.2.2 标记清除法",[14,76942,76943],{},[1602,76944],{"alt":174,"src":76945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[14,76947,76948],{},[1602,76949],{"alt":174,"src":76950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[14,76952,76953],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[34,76955,76957],{"id":76956},"_43-闭包","4.3 闭包",[14,76959,76960],{},[1602,76961],{"alt":174,"src":76962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[14,76964,76965],{},"闭包：内层函数+外层函数的变量",[14,76967,76968],{},[1602,76969],{"alt":174,"src":76970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[14,76972,76973],{},"closure就是闭包",[14,76975,76976],{},[1602,76977],{"alt":174,"src":76978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[14,76980,76981],{},"内层函数必须包含外层函数的变量才是闭包",[14,76983,76984],{},[1602,76985],{"alt":174,"src":76986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[14,76988,76989],{},[1602,76990],{"alt":174,"src":76991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[14,76993,76994],{},"闭包可能会引起内存泄漏",[14,76996,76997],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[34,76999,77001],{"id":77000},"_44-变量提升","4.4 变量提升",[14,77003,77004],{},[1602,77005],{"alt":174,"src":77006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[14,77008,77009],{},[1602,77010],{"alt":174,"src":77011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[14,77013,77014],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[34,77016,77018],{"id":77017},"_45-函数进阶","4.5 函数进阶",[225,77020,77022],{"id":77021},"_451-函数提升","4.5.1 函数提升",[14,77024,77025],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[14,77027,77028],{},"只提升函数声明，不提升函数调用",[51954,77030,77031],{},"\n\nfn()\n\nfunction fn() {\n\nconsole.log('函数提升')\n\n}\n\n上方程序在执行前将函数的声明进行了提前，但是不提前调用，然后我们去调用，是没有问题的\n\nfun()\n\nvar fun = function () {\n\nconsole.log('我将报错')\n\n}\n\n这个一个用var声明的变量，赋值等于一个匿名函数，var声明的变量会提前，但赋值不提前，所有在前边调用，此时会报错\n\n",[225,77033,77035],{"id":77034},"_452-函数参数","4.5.2 函数参数",[22139,77037,77039],{"id":77038},"_4521-动态参数","4.5.2.1 动态参数",[14,77041,77042],{},[1602,77043],{"alt":174,"src":77044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[14,77046,77047],{},[1602,77048],{"alt":174,"src":77049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[14,77051,77052],{},"箭头函数里边没有arguments",[22139,77054,77056],{"id":77055},"_4522-剩余参数","4.5.2.2 剩余参数",[14,77058,77059],{},[1602,77060],{"alt":174,"src":77061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[14,77063,77064],{},[1602,77065],{"alt":174,"src":77066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[14,77068,77069],{},"剩余参数使用的时候不需要写...",[14,77071,77072],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[14,77074,77075],{},"  function getSum(a,b,...arr) {",[14,77077,77078],{},"  console.log(11)",[14,77080,77081],{},"  }",[14,77083,77084],{},"  getSum(1,2,3,4)",[14,77086,77087],{},"  将1传给a，2传给b，剩下的传给剩余参数",[14,77089,77090],{},"  getSum(1,2)",[14,77092,77093],{},"  将1传给a，2传给b，剩余参数为一个空数组",[14,77095,77096],{},[1602,77097],{"alt":174,"src":77098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[22139,77100,77102],{"id":77101},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[14,77104,77105],{},[1602,77106],{"alt":174,"src":77107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[14,77109,77110],{},[1602,77111],{"alt":174,"src":77112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[14,77114,77115],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[14,77117,77118],{},"展开运算符可以用于数组之间的合并：",[14,77120,77121],{},"const arr1 = [1, 2, 3]",[14,77123,77124],{},"const arr2 = [3, 4, 5]",[14,77126,77127],{},"const arr = [...arr1, ...arr2]",[14,77129,77130],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[14,77132,77133],{},"剩余参数：函数参数使用，得到真数组",[14,77135,77136],{},"展开运算符：数组中使用，数组展开",[225,77138,77140],{"id":77139},"_453-箭头函数","4.5.3 箭头函数",[22139,77142,77144],{"id":77143},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[14,77146,77147],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[14,77149,77150],{},"它不是万能的！！！",[14,77152,77153],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[14,77155,77156],{},[1602,77157],{"alt":174,"src":77158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[14,77160,294],{},[14,77162,77163],{},"① 只有一个形参的时候，可以省略小括号：",[14,77165,77166],{},"const fn=x=>{console.log(x)}",[14,77168,77169],{},"② 只有一行代码时可以省略大括号：",[14,77171,77172],{},"const fn=x=>console.log(11)",[14,77174,77175],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[14,77177,77178],{},"const fn=x=>x+x",[14,77180,77181],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[14,77183,77184],{},"⑤ 阻止表单默认提交：",[14,77186,77187],{},"const form = document.querySelector('form')",[14,77189,77190],{},"form.addEventListener('click', ev => ev.preventDefault())",[14,77192,77193],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[14,77195,77196],{},"const fn=uname=>({uname:uname})",[14,77198,77199],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[14,77201,77202],{},[1602,77203],{"alt":174,"src":77204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[14,77206,77207],{},[1602,77208],{"alt":174,"src":77209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[14,77211,77212],{},[1602,77213],{"alt":174,"src":77214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[14,77216,77217],{},"一定不要忘记用()，有()就理解为自带return",[22139,77219,77221],{"id":77220},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[14,77223,77224],{},"箭头函数是没有动态参数的arguments",[14,77226,77227],{},[1602,77228],{"alt":174,"src":77229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[22139,77231,77233],{"id":77232},"_4533-箭头函数this","4.5.3.3 箭头函数this",[14,77235,11473],{},[21,77237,77238,77241,77244],{},[24,77239,77240],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[24,77242,77243],{},"事件回调函数使用箭头函数时，this 为全局的 window",[24,77245,77246],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[14,77248,77249],{},[1602,77250],{"alt":174,"src":77251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[245,77253,77255],{"className":53208,"code":77254,"language":53210,"meta":174,"style":174},"  \u003Cscript>\n    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n    console.log(this) \u002F\u002F指向window\n    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n    function fn() {\n      console.log(this)  \u002F\u002F指向window\n    }\n    window.fn()\u002F\u002F实际写法，调用时可以省略window\n\n    const obj = {\n      name: 'andy',\n      sayHai: function () {\n        console.log(this)\n      }\n    }\n    obj.sayHai() \u002F\u002Fthis指向obj\n    \u002F\u002F 2.箭头函数的this\n    const fn = () => console.log(this)\n  \u003C\u002Fscript>\n",[251,77256,77257,77265,77270,77275,77280,77285,77290,77294,77299,77303,77307,77312,77317,77322,77326,77330,77335,77340,77345],{"__ignoreMap":174},[254,77258,77259,77261,77263],{"class":256,"line":257},[254,77260,52285],{"class":264},[254,77262,51954],{"class":51441},[254,77264,51448],{"class":264},[254,77266,77267],{"class":256,"line":175},[254,77268,77269],{"class":264},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[254,77271,77272],{"class":256,"line":1319},[254,77273,77274],{"class":264},"    console.log(this) \u002F\u002F指向window\n",[254,77276,77277],{"class":256,"line":1334},[254,77278,77279],{"class":264},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[254,77281,77282],{"class":256,"line":1340},[254,77283,77284],{"class":264},"    function fn() {\n",[254,77286,77287],{"class":256,"line":1354},[254,77288,77289],{"class":264},"      console.log(this)  \u002F\u002F指向window\n",[254,77291,77292],{"class":256,"line":1360},[254,77293,2327],{"class":264},[254,77295,77296],{"class":256,"line":1451},[254,77297,77298],{"class":264},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[254,77300,77301],{"class":256,"line":1457},[254,77302,2540],{"emptyLinePlaceholder":184},[254,77304,77305],{"class":256,"line":1469},[254,77306,71664],{"class":264},[254,77308,77309],{"class":256,"line":1752},[254,77310,77311],{"class":264},"      name: 'andy',\n",[254,77313,77314],{"class":256,"line":1757},[254,77315,77316],{"class":264},"      sayHai: function () {\n",[254,77318,77319],{"class":256,"line":1763},[254,77320,77321],{"class":264},"        console.log(this)\n",[254,77323,77324],{"class":256,"line":1768},[254,77325,52539],{"class":264},[254,77327,77328],{"class":256,"line":1782},[254,77329,2327],{"class":264},[254,77331,77332],{"class":256,"line":1787},[254,77333,77334],{"class":264},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[254,77336,77337],{"class":256,"line":1793},[254,77338,77339],{"class":264},"    \u002F\u002F 2.箭头函数的this\n",[254,77341,77342],{"class":256,"line":1814},[254,77343,77344],{"class":264},"    const fn = () => console.log(this)\n",[254,77346,77347,77349,77351],{"class":256,"line":1819},[254,77348,52558],{"class":264},[254,77350,51954],{"class":51441},[254,77352,51448],{"class":264},[14,77354,77355],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[14,77357,77358],{},"const fn = () => console.log(this)",[14,77360,77361],{},"fn() \u002F\u002F指向window",[14,77363,77364],{},"\u002F\u002F 3.对象方法箭头函数 this",[14,77366,77367],{},"①",[14,77369,77370],{},"const obj = {",[14,77372,77373],{},"uname: 'pink老师',",[14,77375,77376],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[14,77378,1210],{},[14,77380,77381],{},"调用对象里边的函数",[14,77383,77384],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[14,77386,77387],{},"obj.sayHai()",[14,77389,77390],{},"②",[14,77392,77393],{},"const obj1 = {",[14,77395,77373],{},[14,77397,77398],{},"sayHai: function () {",[14,77400,77401],{},"let i = 10",[14,77403,77404],{},"const count = () => {",[14,77406,77407],{},"console.log(this)",[14,77409,77410],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[14,77412,77413],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[14,77415,1210],{},[14,77417,77418],{},"count()",[14,77420,1210],{},[14,77422,1210],{},[14,77424,77425],{},"obj1.sayHai()",[34,77427,77429],{"id":77428},"_46-解构赋值","4.6 解构赋值",[225,77431,77433],{"id":77432},"_461-数组解构","4.6.1 数组解构",[14,77435,77436],{},"以前要是使用数组中的值的话：",[14,77438,77439],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[14,77441,77442],{},"const arr=[100,60,80]",[14,77444,77445],{},"const max=arr[0]",[14,77447,77448],{},"const min=arr[1]",[14,77450,77451],{},"const avg=arr[2]",[14,77453,77454],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[14,77456,77457],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[14,77459,77460],{},"这个写法就类似于上边的那种用很多const的方法",[14,77462,77463],{},[1602,77464],{"alt":174,"src":77465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[245,77467,77469],{"className":50774,"code":77468,"language":50776,"meta":174,"style":174},"①变量之间交换值:\nlet a=1\nlet b=2;\n必须加这行代码，不然就会报错\n[b,a]=[a,b]\n\n\n可以写成下面的方式：\nlet a=1\nlet b=2\n;[b,a]=[a,b]\n\n②排序\nconst arr1 = [2, 6, 4, 3, 5, 1]\nfor (let i = 0; i \u003C arr1.length; i++) {\n   for (let j = 0; j \u003C arr1.length - 1; j++) {\n      if (arr1[j] > arr1[j + 1]) {\n         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n       }\n   }\n}\nconsole.log(arr1)\n",[251,77470,77471,77476,77481,77486,77491,77496,77500,77504,77509,77513,77518,77523,77527,77532,77537,77548,77558,77563,77568,77573,77577,77581],{"__ignoreMap":174},[254,77472,77473],{"class":256,"line":257},[254,77474,77475],{"class":264},"①变量之间交换值:\n",[254,77477,77478],{"class":256,"line":175},[254,77479,77480],{"class":264},"let a=1\n",[254,77482,77483],{"class":256,"line":1319},[254,77484,77485],{"class":264},"let b=2;\n",[254,77487,77488],{"class":256,"line":1334},[254,77489,77490],{"class":264},"必须加这行代码，不然就会报错\n",[254,77492,77493],{"class":256,"line":1340},[254,77494,77495],{"class":264},"[b,a]=[a,b]\n",[254,77497,77498],{"class":256,"line":1354},[254,77499,2540],{"emptyLinePlaceholder":184},[254,77501,77502],{"class":256,"line":1360},[254,77503,2540],{"emptyLinePlaceholder":184},[254,77505,77506],{"class":256,"line":1451},[254,77507,77508],{"class":264},"可以写成下面的方式：\n",[254,77510,77511],{"class":256,"line":1457},[254,77512,77480],{"class":264},[254,77514,77515],{"class":256,"line":1469},[254,77516,77517],{"class":264},"let b=2\n",[254,77519,77520],{"class":256,"line":1752},[254,77521,77522],{"class":264},";[b,a]=[a,b]\n",[254,77524,77525],{"class":256,"line":1757},[254,77526,2540],{"emptyLinePlaceholder":184},[254,77528,77529],{"class":256,"line":1763},[254,77530,77531],{"class":264},"②排序\n",[254,77533,77534],{"class":256,"line":1768},[254,77535,77536],{"class":264},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[254,77538,77539,77542,77545],{"class":256,"line":1782},[254,77540,77541],{"class":264},"for (let i = 0; i ",[254,77543,1174],{"class":77544},"s7hpK",[254,77546,77547],{"class":264}," arr1.length; i++) {\n",[254,77549,77550,77553,77555],{"class":256,"line":1787},[254,77551,77552],{"class":264},"   for (let j = 0; j ",[254,77554,1174],{"class":77544},[254,77556,77557],{"class":264}," arr1.length - 1; j++) {\n",[254,77559,77560],{"class":256,"line":1793},[254,77561,77562],{"class":264},"      if (arr1[j] > arr1[j + 1]) {\n",[254,77564,77565],{"class":256,"line":1814},[254,77566,77567],{"class":264},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[254,77569,77570],{"class":256,"line":1819},[254,77571,77572],{"class":264},"       }\n",[254,77574,77575],{"class":256,"line":1833},[254,77576,4449],{"class":264},[254,77578,77579],{"class":256,"line":1838},[254,77580,1705],{"class":264},[254,77582,77583],{"class":256,"line":1867},[254,77584,77585],{"class":264},"console.log(arr1)\n",[14,77587,77588],{},"数组解构的细节：",[14,77590,77591],{},"①变量多，单元值少",[14,77593,77594],{},[1602,77595],{"alt":174,"src":77596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[14,77598,77599],{},"防止出现undefined的方法：",[14,77601,77602],{},"const [a=0,b=0] =[1]",[14,77604,77605],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[14,77607,77608],{},"②变量少，单元值多",[14,77610,77611],{},[1602,77612],{"alt":174,"src":77613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[14,77615,77616],{},"此时可以使用剩余参数来接收多余的值",[14,77618,77619],{},"const [a,b,...c]=[1,2,3,4]",[14,77621,77622],{},"console.log(c) 输出[3,4]",[14,77624,77625],{},"③可以按需导入，忽略某些返回值",[14,77627,77628],{},[1602,77629],{"alt":174,"src":77630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[14,77632,77633],{},"④支持多维数组的结构",[245,77635,77639],{"className":77636,"code":77637,"language":77638,"meta":174,"style":174},"language-cpp shiki shiki-themes github-light github-dark","const arr = [1, 2, [3, 4]]\nconsole.log(arr[0])  \u002F\u002F1\nconsole.log(arr[1])  \u002F\u002F2\nconsole.log(arr[2])  \u002F\u002F[3,4]\nconsole.log(arr[2][0])  \u002F\u002F3\n","cpp",[251,77640,77641,77669,77685,77700,77715],{"__ignoreMap":174},[254,77642,77643,77645,77647,77649,77651,77653,77655,77657,77660,77662,77664,77666],{"class":256,"line":257},[254,77644,6933],{"class":260},[254,77646,51974],{"class":264},[254,77648,310],{"class":260},[254,77650,52367],{"class":264},[254,77652,482],{"class":313},[254,77654,12576],{"class":264},[254,77656,342],{"class":313},[254,77658,77659],{"class":264},", [",[254,77661,336],{"class":313},[254,77663,12576],{"class":264},[254,77665,557],{"class":313},[254,77667,77668],{"class":264},"]]\n",[254,77670,77671,77674,77676,77678,77680,77682],{"class":256,"line":175},[254,77672,77673],{"class":264},"console.",[254,77675,58388],{"class":2103},[254,77677,3991],{"class":264},[254,77679,456],{"class":313},[254,77681,4356],{"class":264},[254,77683,77684],{"class":323},"  \u002F\u002F1\n",[254,77686,77687,77689,77691,77693,77695,77697],{"class":256,"line":1319},[254,77688,77673],{"class":264},[254,77690,58388],{"class":2103},[254,77692,3991],{"class":264},[254,77694,482],{"class":313},[254,77696,4356],{"class":264},[254,77698,77699],{"class":323},"  \u002F\u002F2\n",[254,77701,77702,77704,77706,77708,77710,77712],{"class":256,"line":1334},[254,77703,77673],{"class":264},[254,77705,58388],{"class":2103},[254,77707,3991],{"class":264},[254,77709,342],{"class":313},[254,77711,4356],{"class":264},[254,77713,77714],{"class":323},"  \u002F\u002F[3,4]\n",[254,77716,77717,77719,77721,77723,77725,77727,77729,77731],{"class":256,"line":1340},[254,77718,77673],{"class":264},[254,77720,58388],{"class":2103},[254,77722,3991],{"class":264},[254,77724,342],{"class":313},[254,77726,5041],{"class":264},[254,77728,456],{"class":313},[254,77730,4356],{"class":264},[254,77732,77733],{"class":323},"  \u002F\u002F3\n",[245,77735,77737],{"className":77636,"code":77736,"language":77638,"meta":174,"style":174},"const [a, b, c] = [1, 2, [3, 4]]\nconsole.log(a)  \u002F\u002F1\nconsole.log(b)  \u002F\u002F2\nconsole.log(c)  \u002F\u002F[3,4]\n",[251,77738,77739,77766,77777,77788],{"__ignoreMap":174},[254,77740,77741,77743,77746,77748,77750,77752,77754,77756,77758,77760,77762,77764],{"class":256,"line":257},[254,77742,6933],{"class":260},[254,77744,77745],{"class":264}," [a, b, c] ",[254,77747,310],{"class":260},[254,77749,52367],{"class":264},[254,77751,482],{"class":313},[254,77753,12576],{"class":264},[254,77755,342],{"class":313},[254,77757,77659],{"class":264},[254,77759,336],{"class":313},[254,77761,12576],{"class":264},[254,77763,557],{"class":313},[254,77765,77668],{"class":264},[254,77767,77768,77770,77772,77775],{"class":256,"line":175},[254,77769,77673],{"class":264},[254,77771,58388],{"class":2103},[254,77773,77774],{"class":264},"(a)",[254,77776,77684],{"class":323},[254,77778,77779,77781,77783,77786],{"class":256,"line":1319},[254,77780,77673],{"class":264},[254,77782,58388],{"class":2103},[254,77784,77785],{"class":264},"(b)",[254,77787,77699],{"class":323},[254,77789,77790,77792,77794,77797],{"class":256,"line":1334},[254,77791,77673],{"class":264},[254,77793,58388],{"class":2103},[254,77795,77796],{"class":264},"(c)",[254,77798,77714],{"class":323},[245,77800,77802],{"className":77636,"code":77801,"language":77638,"meta":174,"style":174},"const [a, b, [c, d]] = [1, 2, [3, 4]]\nconsole.log(a)  \u002F\u002F1\nconsole.log(b)  \u002F\u002F2\nconsole.log(c)  \u002F\u002F3\nconsole.log(d)  \u002F\u002F4\n",[251,77803,77804,77831,77841,77851,77861],{"__ignoreMap":174},[254,77805,77806,77808,77811,77813,77815,77817,77819,77821,77823,77825,77827,77829],{"class":256,"line":257},[254,77807,6933],{"class":260},[254,77809,77810],{"class":264}," [a, b, [c, d]] ",[254,77812,310],{"class":260},[254,77814,52367],{"class":264},[254,77816,482],{"class":313},[254,77818,12576],{"class":264},[254,77820,342],{"class":313},[254,77822,77659],{"class":264},[254,77824,336],{"class":313},[254,77826,12576],{"class":264},[254,77828,557],{"class":313},[254,77830,77668],{"class":264},[254,77832,77833,77835,77837,77839],{"class":256,"line":175},[254,77834,77673],{"class":264},[254,77836,58388],{"class":2103},[254,77838,77774],{"class":264},[254,77840,77684],{"class":323},[254,77842,77843,77845,77847,77849],{"class":256,"line":1319},[254,77844,77673],{"class":264},[254,77846,58388],{"class":2103},[254,77848,77785],{"class":264},[254,77850,77699],{"class":323},[254,77852,77853,77855,77857,77859],{"class":256,"line":1334},[254,77854,77673],{"class":264},[254,77856,58388],{"class":2103},[254,77858,77796],{"class":264},[254,77860,77733],{"class":323},[254,77862,77863,77865,77867,77870],{"class":256,"line":1340},[254,77864,77673],{"class":264},[254,77866,58388],{"class":2103},[254,77868,77869],{"class":264},"(d)",[254,77871,77872],{"class":323},"  \u002F\u002F4\n",[225,77874,77876],{"id":77875},"_462-对象解构","4.6.2 对象解构",[14,77878,77879],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[14,77881,77882],{},"用的非常非常多！！！！！！",[22139,77884,77886],{"id":77885},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[14,77888,77889],{},"基本语法：",[21,77891,77892,77895,77898,77901],{},[24,77893,77894],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[24,77896,77897],{},"对象属性的值将被赋值给与属性名相同的变量",[24,77899,77900],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[24,77902,77903],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[245,77905,77907],{"className":50774,"code":77906,"language":50776,"meta":174,"style":174},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[251,77908,77909,77914,77919,77924,77928],{"__ignoreMap":174},[254,77910,77911],{"class":256,"line":257},[254,77912,77913],{"class":264},"const obj = {\n",[254,77915,77916],{"class":256,"line":175},[254,77917,77918],{"class":264},"   uname: 'pink老师',\n",[254,77920,77921],{"class":256,"line":1319},[254,77922,77923],{"class":264},"   age: 18,\n",[254,77925,77926],{"class":256,"line":1334},[254,77927,1705],{"class":264},[254,77929,77930],{"class":256,"line":1340},[254,77931,77932],{"class":264},"const { uname, age } = obj\n",[14,77934,77935],{},"上方代码这样写等价于：",[14,77937,77938],{},"const uname等价于obj.uname",[14,77940,77941],{},"变量名可以重新改名：",[14,77943,77944],{},"const uname='red老师'",[14,77946,77947],{},"const user={",[14,77949,77950],{},"  uname:'pink老师',",[14,77952,77953],{},"  age:18",[14,77955,1210],{},[14,77957,77958],{},"const {uname,age}=user",[14,77960,77961],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[14,77963,77964],{},"const {旧变量名：新变量名}=对象",[14,77966,77967],{},"const {uname:username,age}=user",[22139,77969,77971],{"id":77970},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[14,77973,77974],{},[1602,77975],{"alt":174,"src":77976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[22139,77978,77980],{"id":77979},"_4623-多级对象解构","4.6.2.3 多级对象解构",[14,77982,77983],{},[1602,77984],{"alt":174,"src":77985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[245,77987,77989],{"className":53208,"code":77988,"language":53210,"meta":174,"style":174},"  \u003Cscript>\n    const pig = {\n      name: '佩奇',\n      family: {\n        mother: '猪妈妈',\n        father: '猪爸爸',\n        sister: '乔治'\n      },\n      age: 6\n    }\n    \u002F\u002F 多级对象解构\n    const { name, family: { mother, father, sister }, age } = pig\n  \u003C\u002Fscript>\n",[251,77990,77991,77999,78004,78009,78014,78019,78024,78029,78034,78039,78043,78048,78053],{"__ignoreMap":174},[254,77992,77993,77995,77997],{"class":256,"line":257},[254,77994,52285],{"class":264},[254,77996,51954],{"class":51441},[254,77998,51448],{"class":264},[254,78000,78001],{"class":256,"line":175},[254,78002,78003],{"class":264},"    const pig = {\n",[254,78005,78006],{"class":256,"line":1319},[254,78007,78008],{"class":264},"      name: '佩奇',\n",[254,78010,78011],{"class":256,"line":1334},[254,78012,78013],{"class":264},"      family: {\n",[254,78015,78016],{"class":256,"line":1340},[254,78017,78018],{"class":264},"        mother: '猪妈妈',\n",[254,78020,78021],{"class":256,"line":1354},[254,78022,78023],{"class":264},"        father: '猪爸爸',\n",[254,78025,78026],{"class":256,"line":1360},[254,78027,78028],{"class":264},"        sister: '乔治'\n",[254,78030,78031],{"class":256,"line":1451},[254,78032,78033],{"class":264},"      },\n",[254,78035,78036],{"class":256,"line":1457},[254,78037,78038],{"class":264},"      age: 6\n",[254,78040,78041],{"class":256,"line":1469},[254,78042,2327],{"class":264},[254,78044,78045],{"class":256,"line":1752},[254,78046,78047],{"class":264},"    \u002F\u002F 多级对象解构\n",[254,78049,78050],{"class":256,"line":1757},[254,78051,78052],{"class":264},"    const { name, family: { mother, father, sister }, age } = pig\n",[254,78054,78055,78057,78059],{"class":256,"line":1763},[254,78056,52558],{"class":264},[254,78058,51954],{"class":51441},[254,78060,51448],{"class":264},[14,78062,78063],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[245,78065,78068],{"className":78066,"code":78067,"language":76588,"meta":174,"style":174},"language-java shiki shiki-themes github-light github-dark","    \u002F\u002F 这是后台传递过来的数据\n    const msg = {\n      \"code\": 200,\n      \"msg\": \"获取新闻列表成功\",\n      \"data\": [\n        {\n          \"id\": 1,\n          \"title\": \"5G商用自己，三大运用商收入下降\",\n          \"count\": 58\n        },\n        {\n          \"id\": 2,\n          \"title\": \"国际媒体头条速览\",\n          \"count\": 56\n        },\n        {\n          \"id\": 3,\n          \"title\": \"乌克兰和俄罗斯持续冲突\",\n          \"count\": 1669\n        },\n      ]\n    }\n",[251,78069,78070,78075,78086,78098,78110,78119,78123,78134,78146,78156,78161,78165,78175,78186,78195,78199,78203,78214,78225,78234,78238,78243],{"__ignoreMap":174},[254,78071,78072],{"class":256,"line":257},[254,78073,78074],{"class":323},"    \u002F\u002F 这是后台传递过来的数据\n",[254,78076,78077,78079,78082,78084],{"class":256,"line":175},[254,78078,11362],{"class":260},[254,78080,78081],{"class":264}," msg ",[254,78083,310],{"class":260},[254,78085,15713],{"class":264},[254,78087,78088,78091,78093,78096],{"class":256,"line":1319},[254,78089,78090],{"class":369},"      \"code\"",[254,78092,1123],{"class":260},[254,78094,78095],{"class":313}," 200",[254,78097,31607],{"class":264},[254,78099,78100,78103,78105,78108],{"class":256,"line":1334},[254,78101,78102],{"class":369},"      \"msg\"",[254,78104,1123],{"class":260},[254,78106,78107],{"class":369}," \"获取新闻列表成功\"",[254,78109,31607],{"class":264},[254,78111,78112,78115,78117],{"class":256,"line":1340},[254,78113,78114],{"class":369},"      \"data\"",[254,78116,1123],{"class":260},[254,78118,55588],{"class":264},[254,78120,78121],{"class":256,"line":1354},[254,78122,2650],{"class":264},[254,78124,78125,78128,78130,78132],{"class":256,"line":1360},[254,78126,78127],{"class":369},"          \"id\"",[254,78129,1123],{"class":260},[254,78131,25259],{"class":313},[254,78133,31607],{"class":264},[254,78135,78136,78139,78141,78144],{"class":256,"line":1451},[254,78137,78138],{"class":369},"          \"title\"",[254,78140,1123],{"class":260},[254,78142,78143],{"class":369}," \"5G商用自己，三大运用商收入下降\"",[254,78145,31607],{"class":264},[254,78147,78148,78151,78153],{"class":256,"line":1457},[254,78149,78150],{"class":369},"          \"count\"",[254,78152,1123],{"class":260},[254,78154,78155],{"class":313}," 58\n",[254,78157,78158],{"class":256,"line":1469},[254,78159,78160],{"class":264},"        },\n",[254,78162,78163],{"class":256,"line":1752},[254,78164,2650],{"class":264},[254,78166,78167,78169,78171,78173],{"class":256,"line":1757},[254,78168,78127],{"class":369},[254,78170,1123],{"class":260},[254,78172,14896],{"class":313},[254,78174,31607],{"class":264},[254,78176,78177,78179,78181,78184],{"class":256,"line":1763},[254,78178,78138],{"class":369},[254,78180,1123],{"class":260},[254,78182,78183],{"class":369}," \"国际媒体头条速览\"",[254,78185,31607],{"class":264},[254,78187,78188,78190,78192],{"class":256,"line":1768},[254,78189,78150],{"class":369},[254,78191,1123],{"class":260},[254,78193,78194],{"class":313}," 56\n",[254,78196,78197],{"class":256,"line":1782},[254,78198,78160],{"class":264},[254,78200,78201],{"class":256,"line":1787},[254,78202,2650],{"class":264},[254,78204,78205,78207,78209,78212],{"class":256,"line":1793},[254,78206,78127],{"class":369},[254,78208,1123],{"class":260},[254,78210,78211],{"class":313}," 3",[254,78213,31607],{"class":264},[254,78215,78216,78218,78220,78223],{"class":256,"line":1814},[254,78217,78138],{"class":369},[254,78219,1123],{"class":260},[254,78221,78222],{"class":369}," \"乌克兰和俄罗斯持续冲突\"",[254,78224,31607],{"class":264},[254,78226,78227,78229,78231],{"class":256,"line":1819},[254,78228,78150],{"class":369},[254,78230,1123],{"class":260},[254,78232,78233],{"class":313}," 1669\n",[254,78235,78236],{"class":256,"line":1833},[254,78237,78160],{"class":264},[254,78239,78240],{"class":256,"line":1838},[254,78241,78242],{"class":264},"      ]\n",[254,78244,78245],{"class":256,"line":1867},[254,78246,2327],{"class":264},[14,78248,78249],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[14,78251,78252],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[14,78254,78255],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[14,78257,78258],{},"function({data}) {",[14,78260,78261],{},"console.log(data)",[14,78263,1210],{},[14,78265,78266],{},"render(msg)",[14,78268,78269],{},"实参传递给形参的时候解构了",[14,78271,78272],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[14,78274,78275],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[14,78277,78278],{},"function render({data:mydata}) {",[14,78280,78281],{},"  console.log(data)",[14,78283,1210],{},[225,78285,78287],{"id":78286},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[14,78289,78290],{},"有两种情况：一个是数组结构，一个是立即执行函数",[21,78292,78293],{},[24,78294,78295],{},"如果对一个数组进行遍历，有两种方式：",[14,78297,78298],{},"①法1",[14,78300,78301],{},"const arr=[1,2,3]",[14,78303,78304],{},"arr.map(function(item,index) {",[14,78306,78307],{},"  console.log(item)",[14,78309,52605],{},[14,78311,78312],{},[1602,78313],{"alt":174,"src":78314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[14,78316,78317],{},"②法2",[14,78319,78320],{},"const str='pink'",[14,78322,78323],{},"[1,2,3].map(function(item,index) {",[14,78325,78326],{},"console.log(item)",[14,78328,52605],{},[14,78330,78331],{},[1602,78332],{"alt":174,"src":78333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[14,78335,78336],{},"此时会报错",[14,78338,78339],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[14,78341,78326],{},[14,78343,52605],{},[14,78345,78346],{},"内部会当成这样处理，所以我们用分号进行隔开",[34,78348,78350],{"id":78349},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[14,78352,78353],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[14,78355,78356],{},"可以理解为加强版的for循环",[14,78358,78359],{},[1602,78360],{"alt":174,"src":78361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[14,78363,78364],{},"里边不写return，不返回数组，只遍历不返回",[14,78366,78367],{},"map是返回数组",[14,78369,78370],{},"forEach主要用于遍历数组对象",[245,78372,78374],{"className":53208,"code":78373,"language":53210,"meta":174,"style":174},"  \u003Cscript>\n    const arr = ['red', 'green', 'pink']\n    const result = arr.forEach(function (item, index) {\n      console.log(item)\n      console.log(index)\n    })\n    console.log(result)\n  \u003C\u002Fscript>\n",[251,78375,78376,78384,78389,78394,78399,78404,78408,78413],{"__ignoreMap":174},[254,78377,78378,78380,78382],{"class":256,"line":257},[254,78379,52285],{"class":264},[254,78381,51954],{"class":51441},[254,78383,51448],{"class":264},[254,78385,78386],{"class":256,"line":175},[254,78387,78388],{"class":264},"    const arr = ['red', 'green', 'pink']\n",[254,78390,78391],{"class":256,"line":1319},[254,78392,78393],{"class":264},"    const result = arr.forEach(function (item, index) {\n",[254,78395,78396],{"class":256,"line":1334},[254,78397,78398],{"class":264},"      console.log(item)\n",[254,78400,78401],{"class":256,"line":1340},[254,78402,78403],{"class":264},"      console.log(index)\n",[254,78405,78406],{"class":256,"line":1354},[254,78407,33602],{"class":264},[254,78409,78410],{"class":256,"line":1360},[254,78411,78412],{"class":264},"    console.log(result)\n",[254,78414,78415,78417,78419],{"class":256,"line":1451},[254,78416,52558],{"class":264},[254,78418,51954],{"class":51441},[254,78420,51448],{"class":264},[14,78422,78423],{},[1602,78424],{"alt":174,"src":78425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[34,78427,78429],{"id":78428},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[14,78431,78432],{},[1602,78433],{"alt":174,"src":78434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[14,78436,78437],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[245,78439,78441],{"className":53208,"code":78440,"language":53210,"meta":174,"style":174},"\u003Cbody>\n  \u003Cscript>\n    const arr = [10, 20, 30]\n    const newArr = arr.filter(function (item, index) {\n      console.log(item)\n      console.log(index)\n      return item >= 20\n    })\n    console.log(newArr)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[251,78442,78443,78451,78459,78464,78469,78473,78477,78482,78486,78491,78499],{"__ignoreMap":174},[254,78444,78445,78447,78449],{"class":256,"line":257},[254,78446,1174],{"class":264},[254,78448,51941],{"class":51441},[254,78450,51448],{"class":264},[254,78452,78453,78455,78457],{"class":256,"line":175},[254,78454,52285],{"class":264},[254,78456,51954],{"class":51441},[254,78458,51448],{"class":264},[254,78460,78461],{"class":256,"line":1319},[254,78462,78463],{"class":264},"    const arr = [10, 20, 30]\n",[254,78465,78466],{"class":256,"line":1334},[254,78467,78468],{"class":264},"    const newArr = arr.filter(function (item, index) {\n",[254,78470,78471],{"class":256,"line":1340},[254,78472,78398],{"class":264},[254,78474,78475],{"class":256,"line":1354},[254,78476,78403],{"class":264},[254,78478,78479],{"class":256,"line":1360},[254,78480,78481],{"class":264},"      return item >= 20\n",[254,78483,78484],{"class":256,"line":1451},[254,78485,33602],{"class":264},[254,78487,78488],{"class":256,"line":1457},[254,78489,78490],{"class":264},"    console.log(newArr)\n",[254,78492,78493,78495,78497],{"class":256,"line":1469},[254,78494,52558],{"class":264},[254,78496,51954],{"class":51441},[254,78498,51448],{"class":264},[254,78500,78501,78503,78505],{"class":256,"line":1752},[254,78502,51926],{"class":264},[254,78504,51941],{"class":51441},[254,78506,51448],{"class":264},[14,78508,78509],{},"这个也可以写成箭头函数：",[245,78511,78513],{"className":50774,"code":78512,"language":50776,"meta":174,"style":174},"const newArr = arr.filter(item => item >= 20)\n",[251,78514,78515],{"__ignoreMap":174},[254,78516,78517],{"class":256,"line":257},[254,78518,78512],{"class":264},[34,78520,78522],{"id":78521},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[14,78524,78525],{},[1602,78526],{"alt":174,"src":78527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[14,78529,78530],{},"步骤：",[14,78532,78533],{},"①：渲染页面模块",[1271,78535,78536,78539],{},[24,78537,78538],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[24,78540,78541],{},"用forEach+字符串的形式",[14,78543,78544],{},"②：点击不同需求，显示不同页面内容",[1271,78546,78547,78550,78553,78556,78559],{},[24,78548,78549],{},"点击采取事件委托方式 .filter",[24,78551,78552],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[24,78554,78555],{},"筛选条件是根据点击的 data-index 来判断",[24,78557,78558],{},"可以使用对象解构，把事件对象解构",[24,78560,78561],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[245,78563,78565],{"className":50774,"code":78564,"language":50776,"meta":174,"style":174},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      padding: 0;\n      margin: 0;\n      box-sizing: border-box;\n    }\n\n    .list {\n      width: 990px;\n      margin: 0 auto;\n      display: flex;\n      flex-wrap: wrap;\n    }\n\n    .item {\n      width: 240px;\n      margin-left: 10px;\n      padding: 20px 30px;\n      transition: all ease .5s;\n      margin-bottom: 20px;\n    }\n\n    .item:nth-child(4n) {\n      margin-left: 0;\n    }\n\n    .item:hover {\n      box-shadow: 0px 0px 5px rgba(0, 0, 0, .2);\n      transform: translate3d(0, -4px, 0);\n      cursor: pointer;\n    }\n\n    .item img {\n      width: 100%;\n    }\n\n    .item .name {\n      font-size: 18px;\n      margin-bottom: 10px;\n      color: #666;\n    }\n\n    .item .price {\n      font-size: 22px;\n      color: firebrick;\n    }\n\n    .item .price::before {\n      content: '￥';\n      font-size: 14px;\n    }\n\n    .filter {\n      display: flex;\n      width: 990px;\n      margin: 0 auto;\n      padding: 50px 30px\n    }\n\n    .filter a {\n      padding: 10px 20px;\n      background: #f5f5f5;\n      color: #666;\n      text-decoration: none;\n      margin-right: 20px;\n    }\n\n    .filter a:focus {\n      background-color: #05943c;\n      color: #fff;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"filter\">\n    \u003Ca href=\"#\" data-index=\"1\">0-100元\u003C\u002Fa>\n    \u003Ca href=\"#\" data-index=\"2\">100-300元\u003C\u002Fa>\n    \u003Ca href=\"#\" data-index=\"3\">300元以上\u003C\u002Fa>\n    \u003Ca href=\"#\">全部区间\u003C\u002Fa>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"list\">\n    \u003C!-- \u003Cdiv class=\"item\">\n      \u003Cimg src=\"\" alt=\"\">\n      \u003Cp class=\"name\">\u003C\u002Fp>\n      \u003Cp class=\"price\">\u003C\u002Fp>\n    \u003C\u002Fdiv> -->\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    \u002F\u002F 2. 初始化数据\n    const goodsList = [\n      {\n        id: '4001172',\n        name: '称心如意手摇咖啡磨豆机咖啡豆研磨机',\n        price: '289.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg',\n      },\n      {\n        id: '4001594',\n        name: '日式黑陶功夫茶组双侧把茶具礼盒装',\n        price: '288.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg',\n      },\n      {\n        id: '4001009',\n        name: '竹制干泡茶盘正方形沥水茶台品茶盘',\n        price: '109.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png',\n      },\n      {\n        id: '4001874',\n        name: '古法温酒汝瓷酒具套装白酒杯莲花温酒器',\n        price: '488.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png',\n      },\n      {\n        id: '4001649',\n        name: '大师监制龙泉青瓷茶叶罐',\n        price: '139.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png',\n      },\n      {\n        id: '3997185',\n        name: '与众不同的口感汝瓷白酒杯套组1壶4杯',\n        price: '108.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg',\n      },\n      {\n        id: '3997403',\n        name: '手工吹制更厚实白酒杯壶套装6壶6杯',\n        price: '100.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg',\n      },\n      {\n        id: '3998274',\n        name: '德国百年工艺高端水晶玻璃红酒杯2支装',\n        price: '139.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg',\n      },\n    ]\n\n    \u002F\u002F 1.渲染函数\n    function render(arr) {\n      \u002F\u002F 声明空字符串\n      let str = ''\n      \u002F\u002F 遍历数组\n      arr.forEach(item => {\n        const { name, price, picture } = item\n        str += `\n          \u003Cdiv class=\"item\">\n            \u003Cimg src=\"${picture}\" alt=\"\">\n            \u003Cp class=\"name\">${name}\u003C\u002Fp>\n            \u003Cp class=\"price\">${price}\u003C\u002Fp>\n          \u003C\u002Fdiv>\n        `\n      })\n      \u002F\u002F 追加给List\n      document.querySelector('.list').innerHTML = str\n    }\n    \u002F\u002F 页面一打开就需要渲染\n    render(goodsList)\n    \u002F\u002F 2.过滤筛选\n    document.querySelector('.filter').addEventListener('click', e => {\n      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n      const { tagName, dataset } = e.target\n      \u002F\u002F 判断\n      if (e.target.tagName === 'A') {\n        \u002F\u002F console.log(11)\n        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n        let arr = goodsList\n        if (dataset.index === '1') {\n          arr = goodsList.filter(item => item.price >= 0 && item.price \u003C= 100)\n        } else if (dataset.index === '2') {\n          arr = goodsList.filter(item => item.price >= 100 && item.price \u003C= 300)\n        } else if (dataset.index === '3') {\n          arr = goodsList.filter(item => item.price >= 300)\n        }\n        \u002F\u002F 渲染函数\n        render(arr)\n      }\n\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[251,78566,78567,78577,78591,78595,78603,78617,78637,78649,78657,78663,78673,78683,78693,78697,78701,78707,78720,78732,78742,78754,78758,78762,78769,78782,78794,78811,78829,78842,78846,78850,78862,78872,78876,78880,78887,78928,78955,78965,78969,78973,78981,78993,78997,79001,79009,79021,79033,79044,79048,79052,79061,79073,79084,79088,79092,79101,79113,79125,79129,79133,79140,79150,79162,79174,79189,79193,79197,79205,79221,79231,79241,79251,79263,79267,79271,79281,79292,79302,79306,79314,79322,79326,79334,79349,79375,79400,79425,79444,79452,79466,79471,79476,79481,79486,79491,79499,79507,79512,79523,79528,79538,79548,79558,79568,79572,79576,79585,79594,79603,79612,79616,79620,79629,79638,79647,79656,79660,79664,79673,79682,79691,79700,79704,79708,79717,79726,79735,79744,79748,79752,79761,79770,79779,79788,79792,79796,79805,79814,79823,79832,79836,79840,79849,79858,79866,79875,79879,79883,79887,79892,79904,79909,79921,79925,79942,79970,79979,79984,79994,80004,80013,80018,80023,80027,80032,80049,80053,80058,80066,80071,80098,80103,80123,80128,80140,80145,80150,80155,80166,80180,80217,80235,80268,80285,80309,80313,80318,80324,80328,80332,80336,80344,80352,80356],{"__ignoreMap":174},[254,78568,78569,78571,78573,78575],{"class":256,"line":257},[254,78570,51438],{"class":264},[254,78572,51442],{"class":51441},[254,78574,51445],{"class":2103},[254,78576,51448],{"class":264},[254,78578,78579,78581,78583,78585,78587,78589],{"class":256,"line":175},[254,78580,1174],{"class":264},[254,78582,50776],{"class":51441},[254,78584,51457],{"class":2103},[254,78586,310],{"class":264},[254,78588,51462],{"class":369},[254,78590,51448],{"class":264},[254,78592,78593],{"class":256,"line":1319},[254,78594,2540],{"emptyLinePlaceholder":184},[254,78596,78597,78599,78601],{"class":256,"line":1334},[254,78598,1174],{"class":264},[254,78600,51475],{"class":51441},[254,78602,51448],{"class":264},[254,78604,78605,78607,78609,78611,78613,78615],{"class":256,"line":1340},[254,78606,52285],{"class":264},[254,78608,51485],{"class":51441},[254,78610,51488],{"class":2103},[254,78612,310],{"class":264},[254,78614,51493],{"class":369},[254,78616,51448],{"class":264},[254,78618,78619,78621,78623,78625,78627,78629,78631,78633,78635],{"class":256,"line":1354},[254,78620,52285],{"class":264},[254,78622,51485],{"class":51441},[254,78624,15061],{"class":2103},[254,78626,310],{"class":264},[254,78628,51532],{"class":369},[254,78630,51512],{"class":2103},[254,78632,310],{"class":264},[254,78634,51539],{"class":369},[254,78636,51448],{"class":264},[254,78638,78639,78641,78643,78645,78647],{"class":256,"line":1360},[254,78640,52285],{"class":264},[254,78642,51548],{"class":51441},[254,78644,51551],{"class":264},[254,78646,51548],{"class":51441},[254,78648,51448],{"class":264},[254,78650,78651,78653,78655],{"class":256,"line":1451},[254,78652,52285],{"class":264},[254,78654,5267],{"class":51441},[254,78656,51448],{"class":264},[254,78658,78659,78661],{"class":256,"line":1457},[254,78660,6544],{"class":51441},[254,78662,15713],{"class":264},[254,78664,78665,78667,78669,78671],{"class":256,"line":1469},[254,78666,54836],{"class":313},[254,78668,51578],{"class":264},[254,78670,456],{"class":313},[254,78672,1430],{"class":264},[254,78674,78675,78677,78679,78681],{"class":256,"line":1752},[254,78676,54847],{"class":313},[254,78678,51578],{"class":264},[254,78680,456],{"class":313},[254,78682,1430],{"class":264},[254,78684,78685,78687,78689,78691],{"class":256,"line":1757},[254,78686,72737],{"class":313},[254,78688,51578],{"class":264},[254,78690,60646],{"class":313},[254,78692,1430],{"class":264},[254,78694,78695],{"class":256,"line":1763},[254,78696,2327],{"class":264},[254,78698,78699],{"class":256,"line":1768},[254,78700,2540],{"emptyLinePlaceholder":184},[254,78702,78703,78705],{"class":256,"line":1782},[254,78704,62264],{"class":2103},[254,78706,15713],{"class":264},[254,78708,78709,78711,78713,78716,78718],{"class":256,"line":1787},[254,78710,54912],{"class":313},[254,78712,51578],{"class":264},[254,78714,78715],{"class":313},"990",[254,78717,51633],{"class":260},[254,78719,1430],{"class":264},[254,78721,78722,78724,78726,78728,78730],{"class":256,"line":1793},[254,78723,54847],{"class":313},[254,78725,51578],{"class":264},[254,78727,456],{"class":313},[254,78729,51697],{"class":313},[254,78731,1430],{"class":264},[254,78733,78734,78736,78738,78740],{"class":256,"line":1814},[254,78735,55150],{"class":313},[254,78737,51578],{"class":264},[254,78739,51618],{"class":313},[254,78741,1430],{"class":264},[254,78743,78744,78747,78749,78752],{"class":256,"line":1819},[254,78745,78746],{"class":313},"      flex-wrap",[254,78748,51578],{"class":264},[254,78750,78751],{"class":313},"wrap",[254,78753,1430],{"class":264},[254,78755,78756],{"class":256,"line":1833},[254,78757,2327],{"class":264},[254,78759,78760],{"class":256,"line":1838},[254,78761,2540],{"emptyLinePlaceholder":184},[254,78763,78764,78767],{"class":256,"line":1867},[254,78765,78766],{"class":2103},"    .item",[254,78768,15713],{"class":264},[254,78770,78771,78773,78775,78778,78780],{"class":256,"line":1872},[254,78772,54912],{"class":313},[254,78774,51578],{"class":264},[254,78776,78777],{"class":313},"240",[254,78779,51633],{"class":260},[254,78781,1430],{"class":264},[254,78783,78784,78786,78788,78790,78792],{"class":256,"line":1889},[254,78785,62141],{"class":313},[254,78787,51578],{"class":264},[254,78789,710],{"class":313},[254,78791,51633],{"class":260},[254,78793,1430],{"class":264},[254,78795,78796,78798,78800,78802,78804,78807,78809],{"class":256,"line":1894},[254,78797,54836],{"class":313},[254,78799,51578],{"class":264},[254,78801,964],{"class":313},[254,78803,51633],{"class":260},[254,78805,78806],{"class":313}," 30",[254,78808,51633],{"class":260},[254,78810,1430],{"class":264},[254,78812,78813,78815,78817,78819,78822,78825,78827],{"class":256,"line":1899},[254,78814,62001],{"class":313},[254,78816,51578],{"class":264},[254,78818,28262],{"class":313},[254,78820,78821],{"class":313}," ease",[254,78823,78824],{"class":313}," .5",[254,78826,959],{"class":260},[254,78828,1430],{"class":264},[254,78830,78831,78834,78836,78838,78840],{"class":256,"line":1904},[254,78832,78833],{"class":313},"      margin-bottom",[254,78835,51578],{"class":264},[254,78837,964],{"class":313},[254,78839,51633],{"class":260},[254,78841,1430],{"class":264},[254,78843,78844],{"class":256,"line":1918},[254,78845,2327],{"class":264},[254,78847,78848],{"class":256,"line":1923},[254,78849,2540],{"emptyLinePlaceholder":184},[254,78851,78852,78855,78857,78860],{"class":256,"line":2717},[254,78853,78854],{"class":2103},"    .item:nth-child",[254,78856,265],{"class":264},[254,78858,78859],{"class":313},"4n",[254,78861,12583],{"class":264},[254,78863,78864,78866,78868,78870],{"class":256,"line":2731},[254,78865,62141],{"class":313},[254,78867,51578],{"class":264},[254,78869,456],{"class":313},[254,78871,1430],{"class":264},[254,78873,78874],{"class":256,"line":2739},[254,78875,2327],{"class":264},[254,78877,78878],{"class":256,"line":2744},[254,78879,2540],{"emptyLinePlaceholder":184},[254,78881,78882,78885],{"class":256,"line":2750},[254,78883,78884],{"class":2103},"    .item:hover",[254,78886,15713],{"class":264},[254,78888,78889,78892,78894,78896,78898,78900,78902,78904,78906,78909,78911,78913,78915,78917,78919,78921,78923,78926],{"class":256,"line":2756},[254,78890,78891],{"class":313},"      box-shadow",[254,78893,51578],{"class":264},[254,78895,456],{"class":313},[254,78897,51633],{"class":260},[254,78899,4233],{"class":313},[254,78901,51633],{"class":260},[254,78903,2288],{"class":313},[254,78905,51633],{"class":260},[254,78907,78908],{"class":313}," rgba",[254,78910,265],{"class":264},[254,78912,456],{"class":313},[254,78914,12576],{"class":264},[254,78916,456],{"class":313},[254,78918,12576],{"class":264},[254,78920,456],{"class":313},[254,78922,12576],{"class":264},[254,78924,78925],{"class":313},".2",[254,78927,2859],{"class":264},[254,78929,78930,78933,78935,78938,78940,78942,78944,78947,78949,78951,78953],{"class":256,"line":2761},[254,78931,78932],{"class":313},"      transform",[254,78934,51578],{"class":264},[254,78936,78937],{"class":313},"translate3d",[254,78939,265],{"class":264},[254,78941,456],{"class":313},[254,78943,12576],{"class":264},[254,78945,78946],{"class":313},"-4",[254,78948,51633],{"class":260},[254,78950,12576],{"class":264},[254,78952,456],{"class":313},[254,78954,2859],{"class":264},[254,78956,78957,78959,78961,78963],{"class":256,"line":8089},[254,78958,62166],{"class":313},[254,78960,51578],{"class":264},[254,78962,62171],{"class":313},[254,78964,1430],{"class":264},[254,78966,78967],{"class":256,"line":8113},[254,78968,2327],{"class":264},[254,78970,78971],{"class":256,"line":8118},[254,78972,2540],{"emptyLinePlaceholder":184},[254,78974,78975,78977,78979],{"class":256,"line":8124},[254,78976,78766],{"class":2103},[254,78978,55756],{"class":51441},[254,78980,15713],{"class":264},[254,78982,78983,78985,78987,78989,78991],{"class":256,"line":8151},[254,78984,54912],{"class":313},[254,78986,51578],{"class":264},[254,78988,575],{"class":313},[254,78990,592],{"class":260},[254,78992,1430],{"class":264},[254,78994,78995],{"class":256,"line":8156},[254,78996,2327],{"class":264},[254,78998,78999],{"class":256,"line":8162},[254,79000,2540],{"emptyLinePlaceholder":184},[254,79002,79003,79005,79007],{"class":256,"line":8174},[254,79004,78766],{"class":2103},[254,79006,62445],{"class":2103},[254,79008,15713],{"class":264},[254,79010,79011,79013,79015,79017,79019],{"class":256,"line":8186},[254,79012,55063],{"class":313},[254,79014,51578],{"class":264},[254,79016,914],{"class":313},[254,79018,51633],{"class":260},[254,79020,1430],{"class":264},[254,79022,79023,79025,79027,79029,79031],{"class":256,"line":8198},[254,79024,78833],{"class":313},[254,79026,51578],{"class":264},[254,79028,710],{"class":313},[254,79030,51633],{"class":260},[254,79032,1430],{"class":264},[254,79034,79035,79037,79039,79042],{"class":256,"line":9857},[254,79036,57557],{"class":313},[254,79038,51578],{"class":264},[254,79040,79041],{"class":313},"#666",[254,79043,1430],{"class":264},[254,79045,79046],{"class":256,"line":9882},[254,79047,2327],{"class":264},[254,79049,79050],{"class":256,"line":9905},[254,79051,2540],{"emptyLinePlaceholder":184},[254,79053,79054,79056,79059],{"class":256,"line":9929},[254,79055,78766],{"class":2103},[254,79057,79058],{"class":2103}," .price",[254,79060,15713],{"class":264},[254,79062,79063,79065,79067,79069,79071],{"class":256,"line":9934},[254,79064,55063],{"class":313},[254,79066,51578],{"class":264},[254,79068,1014],{"class":313},[254,79070,51633],{"class":260},[254,79072,1430],{"class":264},[254,79074,79075,79077,79079,79082],{"class":256,"line":9939},[254,79076,57557],{"class":313},[254,79078,51578],{"class":264},[254,79080,79081],{"class":313},"firebrick",[254,79083,1430],{"class":264},[254,79085,79086],{"class":256,"line":9944},[254,79087,2327],{"class":264},[254,79089,79090],{"class":256,"line":9953},[254,79091,2540],{"emptyLinePlaceholder":184},[254,79093,79094,79096,79099],{"class":256,"line":9958},[254,79095,78766],{"class":2103},[254,79097,79098],{"class":2103}," .price::before",[254,79100,15713],{"class":264},[254,79102,79103,79106,79108,79111],{"class":256,"line":9964},[254,79104,79105],{"class":313},"      content",[254,79107,51578],{"class":264},[254,79109,79110],{"class":369},"'￥'",[254,79112,1430],{"class":264},[254,79114,79115,79117,79119,79121,79123],{"class":256,"line":9985},[254,79116,55063],{"class":313},[254,79118,51578],{"class":264},[254,79120,813],{"class":313},[254,79122,51633],{"class":260},[254,79124,1430],{"class":264},[254,79126,79127],{"class":256,"line":9991},[254,79128,2327],{"class":264},[254,79130,79131],{"class":256,"line":10005},[254,79132,2540],{"emptyLinePlaceholder":184},[254,79134,79135,79138],{"class":256,"line":10011},[254,79136,79137],{"class":2103},"    .filter",[254,79139,15713],{"class":264},[254,79141,79142,79144,79146,79148],{"class":256,"line":10038},[254,79143,55150],{"class":313},[254,79145,51578],{"class":264},[254,79147,51618],{"class":313},[254,79149,1430],{"class":264},[254,79151,79152,79154,79156,79158,79160],{"class":256,"line":10047},[254,79153,54912],{"class":313},[254,79155,51578],{"class":264},[254,79157,78715],{"class":313},[254,79159,51633],{"class":260},[254,79161,1430],{"class":264},[254,79163,79164,79166,79168,79170,79172],{"class":256,"line":10053},[254,79165,54847],{"class":313},[254,79167,51578],{"class":264},[254,79169,456],{"class":313},[254,79171,51697],{"class":313},[254,79173,1430],{"class":264},[254,79175,79176,79178,79180,79182,79184,79186],{"class":256,"line":10061},[254,79177,54836],{"class":313},[254,79179,51578],{"class":264},[254,79181,920],{"class":313},[254,79183,51633],{"class":260},[254,79185,78806],{"class":313},[254,79187,79188],{"class":260},"px\n",[254,79190,79191],{"class":256,"line":10066},[254,79192,2327],{"class":264},[254,79194,79195],{"class":256,"line":16745},[254,79196,2540],{"emptyLinePlaceholder":184},[254,79198,79199,79201,79203],{"class":256,"line":16751},[254,79200,79137],{"class":2103},[254,79202,1538],{"class":51441},[254,79204,15713],{"class":264},[254,79206,79207,79209,79211,79213,79215,79217,79219],{"class":256,"line":16774},[254,79208,54836],{"class":313},[254,79210,51578],{"class":264},[254,79212,710],{"class":313},[254,79214,51633],{"class":260},[254,79216,9091],{"class":313},[254,79218,51633],{"class":260},[254,79220,1430],{"class":264},[254,79222,79223,79225,79227,79229],{"class":256,"line":16780},[254,79224,61862],{"class":313},[254,79226,51578],{"class":264},[254,79228,61959],{"class":313},[254,79230,1430],{"class":264},[254,79232,79233,79235,79237,79239],{"class":256,"line":16803},[254,79234,57557],{"class":313},[254,79236,51578],{"class":264},[254,79238,79041],{"class":313},[254,79240,1430],{"class":264},[254,79242,79243,79245,79247,79249],{"class":256,"line":16817},[254,79244,64111],{"class":313},[254,79246,51578],{"class":264},[254,79248,54878],{"class":313},[254,79250,1430],{"class":264},[254,79252,79253,79255,79257,79259,79261],{"class":256,"line":16837},[254,79254,61891],{"class":313},[254,79256,51578],{"class":264},[254,79258,964],{"class":313},[254,79260,51633],{"class":260},[254,79262,1430],{"class":264},[254,79264,79265],{"class":256,"line":16843},[254,79266,2327],{"class":264},[254,79268,79269],{"class":256,"line":16854},[254,79270,2540],{"emptyLinePlaceholder":184},[254,79272,79273,79275,79277,79279],{"class":256,"line":16877},[254,79274,79137],{"class":2103},[254,79276,1538],{"class":51441},[254,79278,62041],{"class":2103},[254,79280,15713],{"class":264},[254,79282,79283,79285,79287,79290],{"class":256,"line":16899},[254,79284,55025],{"class":313},[254,79286,51578],{"class":264},[254,79288,79289],{"class":313},"#05943c",[254,79291,1430],{"class":264},[254,79293,79294,79296,79298,79300],{"class":256,"line":16904},[254,79295,57557],{"class":313},[254,79297,51578],{"class":264},[254,79299,60983],{"class":313},[254,79301,1430],{"class":264},[254,79303,79304],{"class":256,"line":16910},[254,79305,2327],{"class":264},[254,79307,79308,79310,79312],{"class":256,"line":16924},[254,79309,52558],{"class":264},[254,79311,5267],{"class":51441},[254,79313,51448],{"class":264},[254,79315,79316,79318,79320],{"class":256,"line":16937},[254,79317,51926],{"class":264},[254,79319,51475],{"class":51441},[254,79321,51448],{"class":264},[254,79323,79324],{"class":256,"line":16942},[254,79325,2540],{"emptyLinePlaceholder":184},[254,79327,79328,79330,79332],{"class":256,"line":16956},[254,79329,1174],{"class":264},[254,79331,51941],{"class":51441},[254,79333,51448],{"class":264},[254,79335,79336,79338,79340,79342,79344,79347],{"class":256,"line":16961},[254,79337,52285],{"class":264},[254,79339,51752],{"class":51441},[254,79341,53627],{"class":2103},[254,79343,310],{"class":264},[254,79345,79346],{"class":369},"\"filter\"",[254,79348,51448],{"class":264},[254,79350,79351,79353,79355,79357,79359,79361,79364,79366,79368,79371,79373],{"class":256,"line":16967},[254,79352,51482],{"class":264},[254,79354,42],{"class":51441},[254,79356,61198],{"class":2103},[254,79358,310],{"class":264},[254,79360,61203],{"class":369},[254,79362,79363],{"class":2103}," data-index",[254,79365,310],{"class":264},[254,79367,3818],{"class":369},[254,79369,79370],{"class":264},">0-100元\u003C\u002F",[254,79372,42],{"class":51441},[254,79374,51448],{"class":264},[254,79376,79377,79379,79381,79383,79385,79387,79389,79391,79393,79396,79398],{"class":256,"line":16972},[254,79378,51482],{"class":264},[254,79380,42],{"class":51441},[254,79382,61198],{"class":2103},[254,79384,310],{"class":264},[254,79386,61203],{"class":369},[254,79388,79363],{"class":2103},[254,79390,310],{"class":264},[254,79392,3841],{"class":369},[254,79394,79395],{"class":264},">100-300元\u003C\u002F",[254,79397,42],{"class":51441},[254,79399,51448],{"class":264},[254,79401,79402,79404,79406,79408,79410,79412,79414,79416,79418,79421,79423],{"class":256,"line":16986},[254,79403,51482],{"class":264},[254,79405,42],{"class":51441},[254,79407,61198],{"class":2103},[254,79409,310],{"class":264},[254,79411,61203],{"class":369},[254,79413,79363],{"class":2103},[254,79415,310],{"class":264},[254,79417,3854],{"class":369},[254,79419,79420],{"class":264},">300元以上\u003C\u002F",[254,79422,42],{"class":51441},[254,79424,51448],{"class":264},[254,79426,79427,79429,79431,79433,79435,79437,79440,79442],{"class":256,"line":16991},[254,79428,51482],{"class":264},[254,79430,42],{"class":51441},[254,79432,61198],{"class":2103},[254,79434,310],{"class":264},[254,79436,61203],{"class":369},[254,79438,79439],{"class":264},">全部区间\u003C\u002F",[254,79441,42],{"class":51441},[254,79443,51448],{"class":264},[254,79445,79446,79448,79450],{"class":256,"line":16996},[254,79447,52558],{"class":264},[254,79449,51752],{"class":51441},[254,79451,51448],{"class":264},[254,79453,79454,79456,79458,79460,79462,79464],{"class":256,"line":17010},[254,79455,52285],{"class":264},[254,79457,51752],{"class":51441},[254,79459,53627],{"class":2103},[254,79461,310],{"class":264},[254,79463,62749],{"class":369},[254,79465,51448],{"class":264},[254,79467,79468],{"class":256,"line":17022},[254,79469,79470],{"class":323},"    \u003C!-- \u003Cdiv class=\"item\">\n",[254,79472,79473],{"class":256,"line":17027},[254,79474,79475],{"class":323},"      \u003Cimg src=\"\" alt=\"\">\n",[254,79477,79478],{"class":256,"line":17040},[254,79479,79480],{"class":323},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[254,79482,79483],{"class":256,"line":17045},[254,79484,79485],{"class":323},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[254,79487,79488],{"class":256,"line":17050},[254,79489,79490],{"class":323},"    \u003C\u002Fdiv> -->\n",[254,79492,79493,79495,79497],{"class":256,"line":17055},[254,79494,52558],{"class":264},[254,79496,51752],{"class":51441},[254,79498,51448],{"class":264},[254,79500,79501,79503,79505],{"class":256,"line":17068},[254,79502,52285],{"class":264},[254,79504,51954],{"class":51441},[254,79506,51448],{"class":264},[254,79508,79509],{"class":256,"line":17073},[254,79510,79511],{"class":323},"    \u002F\u002F 2. 初始化数据\n",[254,79513,79514,79516,79519,79521],{"class":256,"line":32774},[254,79515,11362],{"class":260},[254,79517,79518],{"class":313}," goodsList",[254,79520,13705],{"class":260},[254,79522,55588],{"class":264},[254,79524,79525],{"class":256,"line":32780},[254,79526,79527],{"class":264},"      {\n",[254,79529,79530,79533,79536],{"class":256,"line":32786},[254,79531,79532],{"class":264},"        id: ",[254,79534,79535],{"class":369},"'4001172'",[254,79537,31607],{"class":264},[254,79539,79540,79543,79546],{"class":256,"line":32792},[254,79541,79542],{"class":264},"        name: ",[254,79544,79545],{"class":369},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[254,79547,31607],{"class":264},[254,79549,79550,79553,79556],{"class":256,"line":32798},[254,79551,79552],{"class":264},"        price: ",[254,79554,79555],{"class":369},"'289.00'",[254,79557,31607],{"class":264},[254,79559,79560,79563,79566],{"class":256,"line":32809},[254,79561,79562],{"class":264},"        picture: ",[254,79564,79565],{"class":369},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[254,79567,31607],{"class":264},[254,79569,79570],{"class":256,"line":32815},[254,79571,78033],{"class":264},[254,79573,79574],{"class":256,"line":32835},[254,79575,79527],{"class":264},[254,79577,79578,79580,79583],{"class":256,"line":32841},[254,79579,79532],{"class":264},[254,79581,79582],{"class":369},"'4001594'",[254,79584,31607],{"class":264},[254,79586,79587,79589,79592],{"class":256,"line":32852},[254,79588,79542],{"class":264},[254,79590,79591],{"class":369},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[254,79593,31607],{"class":264},[254,79595,79596,79598,79601],{"class":256,"line":32858},[254,79597,79552],{"class":264},[254,79599,79600],{"class":369},"'288.00'",[254,79602,31607],{"class":264},[254,79604,79605,79607,79610],{"class":256,"line":32864},[254,79606,79562],{"class":264},[254,79608,79609],{"class":369},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[254,79611,31607],{"class":264},[254,79613,79614],{"class":256,"line":32870},[254,79615,78033],{"class":264},[254,79617,79618],{"class":256,"line":32876},[254,79619,79527],{"class":264},[254,79621,79622,79624,79627],{"class":256,"line":32882},[254,79623,79532],{"class":264},[254,79625,79626],{"class":369},"'4001009'",[254,79628,31607],{"class":264},[254,79630,79631,79633,79636],{"class":256,"line":32888},[254,79632,79542],{"class":264},[254,79634,79635],{"class":369},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[254,79637,31607],{"class":264},[254,79639,79640,79642,79645],{"class":256,"line":32894},[254,79641,79552],{"class":264},[254,79643,79644],{"class":369},"'109.00'",[254,79646,31607],{"class":264},[254,79648,79649,79651,79654],{"class":256,"line":32914},[254,79650,79562],{"class":264},[254,79652,79653],{"class":369},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[254,79655,31607],{"class":264},[254,79657,79658],{"class":256,"line":32920},[254,79659,78033],{"class":264},[254,79661,79662],{"class":256,"line":32936},[254,79663,79527],{"class":264},[254,79665,79666,79668,79671],{"class":256,"line":32942},[254,79667,79532],{"class":264},[254,79669,79670],{"class":369},"'4001874'",[254,79672,31607],{"class":264},[254,79674,79675,79677,79680],{"class":256,"line":32956},[254,79676,79542],{"class":264},[254,79678,79679],{"class":369},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[254,79681,31607],{"class":264},[254,79683,79684,79686,79689],{"class":256,"line":32962},[254,79685,79552],{"class":264},[254,79687,79688],{"class":369},"'488.00'",[254,79690,31607],{"class":264},[254,79692,79693,79695,79698],{"class":256,"line":32977},[254,79694,79562],{"class":264},[254,79696,79697],{"class":369},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[254,79699,31607],{"class":264},[254,79701,79702],{"class":256,"line":32983},[254,79703,78033],{"class":264},[254,79705,79706],{"class":256,"line":32992},[254,79707,79527],{"class":264},[254,79709,79710,79712,79715],{"class":256,"line":32998},[254,79711,79532],{"class":264},[254,79713,79714],{"class":369},"'4001649'",[254,79716,31607],{"class":264},[254,79718,79719,79721,79724],{"class":256,"line":33007},[254,79720,79542],{"class":264},[254,79722,79723],{"class":369},"'大师监制龙泉青瓷茶叶罐'",[254,79725,31607],{"class":264},[254,79727,79728,79730,79733],{"class":256,"line":33013},[254,79729,79552],{"class":264},[254,79731,79732],{"class":369},"'139.00'",[254,79734,31607],{"class":264},[254,79736,79737,79739,79742],{"class":256,"line":33019},[254,79738,79562],{"class":264},[254,79740,79741],{"class":369},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[254,79743,31607],{"class":264},[254,79745,79746],{"class":256,"line":33028},[254,79747,78033],{"class":264},[254,79749,79750],{"class":256,"line":33034},[254,79751,79527],{"class":264},[254,79753,79754,79756,79759],{"class":256,"line":33045},[254,79755,79532],{"class":264},[254,79757,79758],{"class":369},"'3997185'",[254,79760,31607],{"class":264},[254,79762,79763,79765,79768],{"class":256,"line":33051},[254,79764,79542],{"class":264},[254,79766,79767],{"class":369},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[254,79769,31607],{"class":264},[254,79771,79772,79774,79777],{"class":256,"line":33070},[254,79773,79552],{"class":264},[254,79775,79776],{"class":369},"'108.00'",[254,79778,31607],{"class":264},[254,79780,79781,79783,79786],{"class":256,"line":33076},[254,79782,79562],{"class":264},[254,79784,79785],{"class":369},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[254,79787,31607],{"class":264},[254,79789,79790],{"class":256,"line":33087},[254,79791,78033],{"class":264},[254,79793,79794],{"class":256,"line":33093},[254,79795,79527],{"class":264},[254,79797,79798,79800,79803],{"class":256,"line":33113},[254,79799,79532],{"class":264},[254,79801,79802],{"class":369},"'3997403'",[254,79804,31607],{"class":264},[254,79806,79807,79809,79812],{"class":256,"line":33129},[254,79808,79542],{"class":264},[254,79810,79811],{"class":369},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[254,79813,31607],{"class":264},[254,79815,79816,79818,79821],{"class":256,"line":33135},[254,79817,79552],{"class":264},[254,79819,79820],{"class":369},"'100.00'",[254,79822,31607],{"class":264},[254,79824,79825,79827,79830],{"class":256,"line":33149},[254,79826,79562],{"class":264},[254,79828,79829],{"class":369},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[254,79831,31607],{"class":264},[254,79833,79834],{"class":256,"line":33155},[254,79835,78033],{"class":264},[254,79837,79838],{"class":256,"line":33161},[254,79839,79527],{"class":264},[254,79841,79842,79844,79847],{"class":256,"line":33172},[254,79843,79532],{"class":264},[254,79845,79846],{"class":369},"'3998274'",[254,79848,31607],{"class":264},[254,79850,79851,79853,79856],{"class":256,"line":33178},[254,79852,79542],{"class":264},[254,79854,79855],{"class":369},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[254,79857,31607],{"class":264},[254,79859,79860,79862,79864],{"class":256,"line":33184},[254,79861,79552],{"class":264},[254,79863,79732],{"class":369},[254,79865,31607],{"class":264},[254,79867,79868,79870,79873],{"class":256,"line":33194},[254,79869,79562],{"class":264},[254,79871,79872],{"class":369},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[254,79874,31607],{"class":264},[254,79876,79877],{"class":256,"line":33200},[254,79878,78033],{"class":264},[254,79880,79881],{"class":256,"line":33211},[254,79882,53250],{"class":264},[254,79884,79885],{"class":256,"line":33217},[254,79886,2540],{"emptyLinePlaceholder":184},[254,79888,79889],{"class":256,"line":33227},[254,79890,79891],{"class":323},"    \u002F\u002F 1.渲染函数\n",[254,79893,79894,79896,79898,79900,79902],{"class":256,"line":33232},[254,79895,70225],{"class":260},[254,79897,70228],{"class":2103},[254,79899,265],{"class":264},[254,79901,4020],{"class":5357},[254,79903,12583],{"class":264},[254,79905,79906],{"class":256,"line":33238},[254,79907,79908],{"class":323},"      \u002F\u002F 声明空字符串\n",[254,79910,79911,79914,79917,79919],{"class":256,"line":33287},[254,79912,79913],{"class":260},"      let",[254,79915,79916],{"class":264}," str ",[254,79918,310],{"class":260},[254,79920,70245],{"class":369},[254,79922,79923],{"class":256,"line":33334},[254,79924,70250],{"class":323},[254,79926,79927,79929,79932,79934,79937,79940],{"class":256,"line":33339},[254,79928,58148],{"class":264},[254,79930,79931],{"class":2103},"forEach",[254,79933,265],{"class":264},[254,79935,79936],{"class":5357},"item",[254,79938,79939],{"class":260}," =>",[254,79941,15713],{"class":264},[254,79943,79944,79946,79949,79952,79954,79957,79959,79962,79965,79967],{"class":256,"line":33345},[254,79945,61411],{"class":260},[254,79947,79948],{"class":264}," { ",[254,79950,79951],{"class":313},"name",[254,79953,12576],{"class":264},[254,79955,79956],{"class":313},"price",[254,79958,12576],{"class":264},[254,79960,79961],{"class":313},"picture",[254,79963,79964],{"class":264}," } ",[254,79966,310],{"class":260},[254,79968,79969],{"class":264}," item\n",[254,79971,79972,79975,79977],{"class":256,"line":33364},[254,79973,79974],{"class":264},"        str ",[254,79976,9618],{"class":260},[254,79978,70309],{"class":369},[254,79980,79981],{"class":256,"line":33370},[254,79982,79983],{"class":369},"          \u003Cdiv class=\"item\">\n",[254,79985,79986,79989,79991],{"class":256,"line":33390},[254,79987,79988],{"class":369},"            \u003Cimg src=\"${",[254,79990,79961],{"class":264},[254,79992,79993],{"class":369},"}\" alt=\"\">\n",[254,79995,79996,79999,80001],{"class":256,"line":33396},[254,79997,79998],{"class":369},"            \u003Cp class=\"name\">${",[254,80000,79951],{"class":264},[254,80002,80003],{"class":369},"}\u003C\u002Fp>\n",[254,80005,80006,80009,80011],{"class":256,"line":33402},[254,80007,80008],{"class":369},"            \u003Cp class=\"price\">${",[254,80010,79956],{"class":264},[254,80012,80003],{"class":369},[254,80014,80015],{"class":256,"line":33412},[254,80016,80017],{"class":369},"          \u003C\u002Fdiv>\n",[254,80019,80020],{"class":256,"line":33417},[254,80021,80022],{"class":369},"        `\n",[254,80024,80025],{"class":256,"line":33423},[254,80026,64956],{"class":264},[254,80028,80029],{"class":256,"line":33439},[254,80030,80031],{"class":323},"      \u002F\u002F 追加给List\n",[254,80033,80034,80036,80038,80040,80043,80045,80047],{"class":256,"line":33484},[254,80035,55912],{"class":264},[254,80037,54540],{"class":2103},[254,80039,265],{"class":264},[254,80041,80042],{"class":369},"'.list'",[254,80044,74390],{"class":264},[254,80046,310],{"class":260},[254,80048,74126],{"class":264},[254,80050,80051],{"class":256,"line":33490},[254,80052,2327],{"class":264},[254,80054,80055],{"class":256,"line":33496},[254,80056,80057],{"class":323},"    \u002F\u002F 页面一打开就需要渲染\n",[254,80059,80060,80063],{"class":256,"line":33502},[254,80061,80062],{"class":2103},"    render",[254,80064,80065],{"class":264},"(goodsList)\n",[254,80067,80068],{"class":256,"line":33513},[254,80069,80070],{"class":323},"    \u002F\u002F 2.过滤筛选\n",[254,80072,80073,80075,80077,80079,80082,80084,80086,80088,80090,80092,80094,80096],{"class":256,"line":33519},[254,80074,52548],{"class":264},[254,80076,54540],{"class":2103},[254,80078,265],{"class":264},[254,80080,80081],{"class":369},"'.filter'",[254,80083,30967],{"class":264},[254,80085,57954],{"class":2103},[254,80087,265],{"class":264},[254,80089,57959],{"class":369},[254,80091,12576],{"class":264},[254,80093,339],{"class":5357},[254,80095,79939],{"class":260},[254,80097,15713],{"class":264},[254,80099,80100],{"class":256,"line":33525},[254,80101,80102],{"class":323},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[254,80104,80105,80107,80109,80112,80114,80116,80118,80120],{"class":256,"line":33531},[254,80106,58369],{"class":260},[254,80108,79948],{"class":264},[254,80110,80111],{"class":313},"tagName",[254,80113,12576],{"class":264},[254,80115,31678],{"class":313},[254,80117,79964],{"class":264},[254,80119,310],{"class":260},[254,80121,80122],{"class":264}," e.target\n",[254,80124,80125],{"class":256,"line":33549},[254,80126,80127],{"class":323},"      \u002F\u002F 判断\n",[254,80129,80130,80132,80134,80136,80138],{"class":256,"line":33563},[254,80131,54621],{"class":260},[254,80133,67175],{"class":264},[254,80135,54627],{"class":260},[254,80137,68397],{"class":369},[254,80139,12583],{"class":264},[254,80141,80142],{"class":256,"line":33572},[254,80143,80144],{"class":323},"        \u002F\u002F console.log(11)\n",[254,80146,80147],{"class":256,"line":33581},[254,80148,80149],{"class":323},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[254,80151,80152],{"class":256,"line":33590},[254,80153,80154],{"class":323},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[254,80156,80157,80159,80161,80163],{"class":256,"line":33599},[254,80158,51971],{"class":260},[254,80160,51974],{"class":264},[254,80162,310],{"class":260},[254,80164,80165],{"class":264}," goodsList\n",[254,80167,80168,80170,80173,80175,80178],{"class":256,"line":33605},[254,80169,2637],{"class":260},[254,80171,80172],{"class":264}," (dataset.index ",[254,80174,54627],{"class":260},[254,80176,80177],{"class":369}," '1'",[254,80179,12583],{"class":264},[254,80181,80182,80185,80187,80190,80193,80195,80197,80199,80202,80204,80206,80209,80211,80213,80215],{"class":256,"line":33611},[254,80183,80184],{"class":264},"          arr ",[254,80186,310],{"class":260},[254,80188,80189],{"class":264}," goodsList.",[254,80191,80192],{"class":2103},"filter",[254,80194,265],{"class":264},[254,80196,79936],{"class":5357},[254,80198,79939],{"class":260},[254,80200,80201],{"class":264}," item.price ",[254,80203,1850],{"class":260},[254,80205,4233],{"class":313},[254,80207,80208],{"class":260}," &&",[254,80210,80201],{"class":264},[254,80212,1728],{"class":260},[254,80214,5895],{"class":313},[254,80216,271],{"class":264},[254,80218,80219,80222,80224,80226,80228,80230,80233],{"class":256,"line":33619},[254,80220,80221],{"class":264},"        } ",[254,80223,1841],{"class":260},[254,80225,1844],{"class":260},[254,80227,80172],{"class":264},[254,80229,54627],{"class":260},[254,80231,80232],{"class":369}," '2'",[254,80234,12583],{"class":264},[254,80236,80237,80239,80241,80243,80245,80247,80249,80251,80253,80255,80257,80259,80261,80263,80266],{"class":256,"line":33624},[254,80238,80184],{"class":264},[254,80240,310],{"class":260},[254,80242,80189],{"class":264},[254,80244,80192],{"class":2103},[254,80246,265],{"class":264},[254,80248,79936],{"class":5357},[254,80250,79939],{"class":260},[254,80252,80201],{"class":264},[254,80254,1850],{"class":260},[254,80256,5895],{"class":313},[254,80258,80208],{"class":260},[254,80260,80201],{"class":264},[254,80262,1728],{"class":260},[254,80264,80265],{"class":313}," 300",[254,80267,271],{"class":264},[254,80269,80270,80272,80274,80276,80278,80280,80283],{"class":256,"line":33630},[254,80271,80221],{"class":264},[254,80273,1841],{"class":260},[254,80275,1844],{"class":260},[254,80277,80172],{"class":264},[254,80279,54627],{"class":260},[254,80281,80282],{"class":369}," '3'",[254,80284,12583],{"class":264},[254,80286,80287,80289,80291,80293,80295,80297,80299,80301,80303,80305,80307],{"class":256,"line":33641},[254,80288,80184],{"class":264},[254,80290,310],{"class":260},[254,80292,80189],{"class":264},[254,80294,80192],{"class":2103},[254,80296,265],{"class":264},[254,80298,79936],{"class":5357},[254,80300,79939],{"class":260},[254,80302,80201],{"class":264},[254,80304,1850],{"class":260},[254,80306,80265],{"class":313},[254,80308,271],{"class":264},[254,80310,80311],{"class":256,"line":33647},[254,80312,2669],{"class":264},[254,80314,80315],{"class":256,"line":33667},[254,80316,80317],{"class":323},"        \u002F\u002F 渲染函数\n",[254,80319,80320,80322],{"class":256,"line":33673},[254,80321,70549],{"class":2103},[254,80323,52553],{"class":264},[254,80325,80326],{"class":256,"line":33679},[254,80327,52539],{"class":264},[254,80329,80330],{"class":256,"line":33685},[254,80331,2540],{"emptyLinePlaceholder":184},[254,80333,80334],{"class":256,"line":33702},[254,80335,33602],{"class":264},[254,80337,80338,80340,80342],{"class":256,"line":33708},[254,80339,52558],{"class":264},[254,80341,51954],{"class":51441},[254,80343,51448],{"class":264},[254,80345,80346,80348,80350],{"class":256,"line":33714},[254,80347,51926],{"class":264},[254,80349,51941],{"class":51441},[254,80351,51448],{"class":264},[254,80353,80354],{"class":256,"line":33720},[254,80355,2540],{"emptyLinePlaceholder":184},[254,80357,80358,80360,80362],{"class":256,"line":33726},[254,80359,51926],{"class":264},[254,80361,50776],{"class":51441},[254,80363,51448],{"class":264},[34,80365,80367],{"id":80366},"_410-深入了解对象","4.10 深入了解对象",[225,80369,80371],{"id":80370},"_4101-创建对象","4.10.1 创建对象",[14,80373,80374],{},[1602,80375],{"alt":174,"src":80376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[14,80378,80379],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[225,80381,80383],{"id":80382},"_4102-构造函数","4.10.2 构造函数",[14,80385,80386,80389],{},[414,80387,80388],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[14,80391,80392,80395],{},[414,80393,80394],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[245,80397,80399],{"className":50774,"code":80398,"language":50776,"meta":174,"style":174},"\u003Cscript>\n\u002F\u002F例：\nfunction Pig(name,age,gender) {\n    this.name=name\n    this.age=age\n    this.gender=gender    \n}\n\u002F\u002F创建佩奇对象\nconst Peppa=new Pig('佩奇',6,'女')\n\u002F\u002F创建乔治对象\nconst George=new Pig('乔治',3,'男')\n\u003C\u002Fscript>\n",[251,80400,80401,80409,80414,80435,80448,80460,80472,80476,80481,80508,80513,80540],{"__ignoreMap":174},[254,80402,80403,80405,80407],{"class":256,"line":257},[254,80404,1174],{"class":264},[254,80406,51954],{"class":51441},[254,80408,51448],{"class":264},[254,80410,80411],{"class":256,"line":175},[254,80412,80413],{"class":323},"\u002F\u002F例：\n",[254,80415,80416,80418,80421,80423,80425,80427,80429,80431,80433],{"class":256,"line":1319},[254,80417,54590],{"class":260},[254,80419,80420],{"class":2103}," Pig",[254,80422,265],{"class":264},[254,80424,79951],{"class":5357},[254,80426,642],{"class":264},[254,80428,70362],{"class":5357},[254,80430,642],{"class":264},[254,80432,70379],{"class":5357},[254,80434,12583],{"class":264},[254,80436,80437,80440,80443,80445],{"class":256,"line":1334},[254,80438,80439],{"class":313},"    this",[254,80441,80442],{"class":264},".name",[254,80444,310],{"class":260},[254,80446,80447],{"class":264},"name\n",[254,80449,80450,80452,80455,80457],{"class":256,"line":1340},[254,80451,80439],{"class":313},[254,80453,80454],{"class":264},".age",[254,80456,310],{"class":260},[254,80458,80459],{"class":264},"age\n",[254,80461,80462,80464,80467,80469],{"class":256,"line":1354},[254,80463,80439],{"class":313},[254,80465,80466],{"class":264},".gender",[254,80468,310],{"class":260},[254,80470,80471],{"class":264},"gender    \n",[254,80473,80474],{"class":256,"line":1360},[254,80475,1705],{"class":264},[254,80477,80478],{"class":256,"line":1451},[254,80479,80480],{"class":323},"\u002F\u002F创建佩奇对象\n",[254,80482,80483,80485,80488,80490,80492,80494,80497,80499,80501,80503,80506],{"class":256,"line":1457},[254,80484,6933],{"class":260},[254,80486,80487],{"class":313}," Peppa",[254,80489,11858],{"class":260},[254,80491,80420],{"class":2103},[254,80493,265],{"class":264},[254,80495,80496],{"class":369},"'佩奇'",[254,80498,642],{"class":264},[254,80500,608],{"class":313},[254,80502,642],{"class":264},[254,80504,80505],{"class":369},"'女'",[254,80507,271],{"class":264},[254,80509,80510],{"class":256,"line":1469},[254,80511,80512],{"class":323},"\u002F\u002F创建乔治对象\n",[254,80514,80515,80517,80520,80522,80524,80526,80529,80531,80533,80535,80538],{"class":256,"line":1752},[254,80516,6933],{"class":260},[254,80518,80519],{"class":313}," George",[254,80521,11858],{"class":260},[254,80523,80420],{"class":2103},[254,80525,265],{"class":264},[254,80527,80528],{"class":369},"'乔治'",[254,80530,642],{"class":264},[254,80532,336],{"class":313},[254,80534,642],{"class":264},[254,80536,80537],{"class":369},"'男'",[254,80539,271],{"class":264},[254,80541,80542,80544,80546],{"class":256,"line":1757},[254,80543,51926],{"class":264},[254,80545,51954],{"class":51441},[254,80547,51448],{"class":264},[14,80549,80550],{},[1602,80551],{"alt":174,"src":80552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[14,80554,80555],{},[1602,80556],{"alt":174,"src":80557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[14,80559,80560],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[14,80562,80563],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[14,80565,80566],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[14,80568,80569],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[14,80571,80572],{},"这里用等号是因为：对象.属性=值",[14,80574,80575],{},"①利用对象字面量创建对象",[14,80577,80578],{},"const o={",[14,80580,80581],{},"name:'pink'",[14,80583,80584],{},"} ②利用new Object创建对象",[14,80586,80587],{},"const o=new Object({name:'pink'})",[14,80589,80590],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[14,80592,80593],{},"构造函数创建对象的执行过程：",[14,80595,80596],{},[1602,80597],{"alt":174,"src":80598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[225,80600,80602],{"id":80601},"_4103-实例成员","4.10.3 实例成员",[14,80604,80605],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[21,80607,80608,80611,80614],{},[24,80609,80610],{},"实例对象的属性和方法即为实例成员",[24,80612,80613],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[24,80615,80616],{},"构造函数创建的实例对象彼此独立互不影响",[225,80618,80620],{"id":80619},"_4104-静态成员","4.10.4 静态成员",[14,80622,80623],{},[1602,80624],{"alt":174,"src":80625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[14,80627,80628],{},"静态成员有Date.now() Math.PI Math.random()",[14,80630,80631],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[14,80633,80634],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[14,80636,80637],{},"function Pig(name) n {",[14,80639,80640],{},"this.name=name",[14,80642,1210],{},[14,80644,80645],{},"Pig.eyes=2",[14,80647,80648],{},"Pig.sayHai=function () { console.log(this) }",[14,80650,80651],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[14,80653,80654],{},"console.log(Pig.eyes) \u002F\u002F2",[14,80656,11473],{},[21,80658,80659,80662,80665,80668,80671],{},[24,80660,80661],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[24,80663,80664],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[24,80666,80667],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[24,80669,80670],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[24,80672,80673],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[14,80675,80676],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[225,80678,80680],{"id":80679},"_4105-内置构造函数","4.10.5 内置构造函数",[14,80682,80683],{},"内置构造函数包含：",[14,80685,80686],{},[1602,80687],{"alt":174,"src":80688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[14,80690,80691],{},[1602,80692],{"alt":174,"src":80693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[14,80695,80696],{},"这些基本数据类型，js对他们进行了包装",[51954,80698,80699],{},"\n\n\u002F\u002F const str = 'pink'\n\nconsole.log(str.length)\n\nconst num = 12\n\n\u002F\u002F toFixed()是保留几位小数\n\nconsole.log(num.toFixed(2))\n\n\u002F\u002F 虽然写了const str='pink'\n\n\u002F\u002F 但是内部是按照下面的形式进行执行的：\n\n\u002F\u002Fjs底层完成的，把简单数据类型包装为了复杂数据类型，就是把他转化为了对象，就可以直接使用它的属性和方法了，下面这行代码是不需要自己写的\n\nconst str = String('pink')\n\n",[22139,80701,80703],{"id":80702},"_41051-object","4.10.5.1 Object",[14,80705,80706],{},"Object 是内置的构造函数，用于创建普通对象",[14,80708,80709],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[245,80711,80713],{"className":50774,"code":80712,"language":50776,"meta":174,"style":174},"const user=new Object({name:'小明',age:15})\n",[251,80714,80715],{"__ignoreMap":174},[254,80716,80717],{"class":256,"line":257},[254,80718,80712],{"class":264},[14,80720,80721],{},"三个常用的静态方法：",[23051,80723,80725],{"id":80724},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[14,80727,80728],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[14,80730,80731],{},[1602,80732],{"alt":174,"src":80733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[14,80735,80736],{},[1602,80737],{"alt":174,"src":80738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[245,80740,80742],{"className":53208,"code":80741,"language":53210,"meta":174,"style":174},"\u003Cbody>\n  \u003Cscript>\n    const o = { name: 'pink', age: 6 }\n    \u002F\u002F 获得所有属性名\n    const arr = Object.keys(o)\n    console.log(arr)\n    \u002F\u002F 获得所有属性值\n    console.log(Object.values(o))\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[251,80743,80744,80752,80760,80765,80770,80775,80780,80785,80790,80798],{"__ignoreMap":174},[254,80745,80746,80748,80750],{"class":256,"line":257},[254,80747,1174],{"class":264},[254,80749,51941],{"class":51441},[254,80751,51448],{"class":264},[254,80753,80754,80756,80758],{"class":256,"line":175},[254,80755,52285],{"class":264},[254,80757,51954],{"class":51441},[254,80759,51448],{"class":264},[254,80761,80762],{"class":256,"line":1319},[254,80763,80764],{"class":264},"    const o = { name: 'pink', age: 6 }\n",[254,80766,80767],{"class":256,"line":1334},[254,80768,80769],{"class":264},"    \u002F\u002F 获得所有属性名\n",[254,80771,80772],{"class":256,"line":1340},[254,80773,80774],{"class":264},"    const arr = Object.keys(o)\n",[254,80776,80777],{"class":256,"line":1354},[254,80778,80779],{"class":264},"    console.log(arr)\n",[254,80781,80782],{"class":256,"line":1360},[254,80783,80784],{"class":264},"    \u002F\u002F 获得所有属性值\n",[254,80786,80787],{"class":256,"line":1451},[254,80788,80789],{"class":264},"    console.log(Object.values(o))\n",[254,80791,80792,80794,80796],{"class":256,"line":1457},[254,80793,52558],{"class":264},[254,80795,51954],{"class":51441},[254,80797,51448],{"class":264},[254,80799,80800,80802,80804],{"class":256,"line":1469},[254,80801,51926],{"class":264},[254,80803,51941],{"class":51441},[254,80805,51448],{"class":264},[23051,80807,80809],{"id":80808},"_410512-object-assign","4.10.5.1.2 Object. assign",[14,80811,80812],{},"Object.assign(oo,o)",[14,80814,80815],{},"后的东西添加给前 是追加",[14,80817,80818],{},[1602,80819],{"alt":174,"src":80820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[14,80822,80823],{},[1602,80824],{"alt":174,"src":80825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[245,80827,80829],{"className":53208,"code":80828,"language":53210,"meta":174,"style":174},"\u003Cbody>\n  \u003Cscript>\n    const o = { name: 'pink', age: 6 }\n    \u002F\u002F 获得所有属性名\n    const arr = Object.keys(o)\n    console.log(arr)\n    \u002F\u002F 获得所有属性值\n    console.log(Object.values(o))\n    const oo = {}\n    Object.assign(oo, o)\n    console.log(oo)\n    Object.assign(o, { gender: '女' })\n    console.log(o)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[251,80830,80831,80839,80847,80851,80855,80859,80863,80867,80871,80876,80881,80886,80891,80896,80904],{"__ignoreMap":174},[254,80832,80833,80835,80837],{"class":256,"line":257},[254,80834,1174],{"class":264},[254,80836,51941],{"class":51441},[254,80838,51448],{"class":264},[254,80840,80841,80843,80845],{"class":256,"line":175},[254,80842,52285],{"class":264},[254,80844,51954],{"class":51441},[254,80846,51448],{"class":264},[254,80848,80849],{"class":256,"line":1319},[254,80850,80764],{"class":264},[254,80852,80853],{"class":256,"line":1334},[254,80854,80769],{"class":264},[254,80856,80857],{"class":256,"line":1340},[254,80858,80774],{"class":264},[254,80860,80861],{"class":256,"line":1354},[254,80862,80779],{"class":264},[254,80864,80865],{"class":256,"line":1360},[254,80866,80784],{"class":264},[254,80868,80869],{"class":256,"line":1451},[254,80870,80789],{"class":264},[254,80872,80873],{"class":256,"line":1457},[254,80874,80875],{"class":264},"    const oo = {}\n",[254,80877,80878],{"class":256,"line":1469},[254,80879,80880],{"class":264},"    Object.assign(oo, o)\n",[254,80882,80883],{"class":256,"line":1752},[254,80884,80885],{"class":264},"    console.log(oo)\n",[254,80887,80888],{"class":256,"line":1757},[254,80889,80890],{"class":264},"    Object.assign(o, { gender: '女' })\n",[254,80892,80893],{"class":256,"line":1763},[254,80894,80895],{"class":264},"    console.log(o)\n",[254,80897,80898,80900,80902],{"class":256,"line":1768},[254,80899,52558],{"class":264},[254,80901,51954],{"class":51441},[254,80903,51448],{"class":264},[254,80905,80906,80908,80910],{"class":256,"line":1782},[254,80907,51926],{"class":264},[254,80909,51941],{"class":51441},[254,80911,51448],{"class":264},[14,80913,80914],{},[1602,80915],{"alt":174,"src":80916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[22139,80918,80920],{"id":80919},"_41052-array","4.10.5.2 Array",[14,80922,80923],{},"Array 是内置的构造函数，用于创建数组",[14,80925,80926],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[245,80928,80930],{"className":50774,"code":80929,"language":50776,"meta":174,"style":174},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[251,80931,80932,80937],{"__ignoreMap":174},[254,80933,80934],{"class":256,"line":257},[254,80935,80936],{"class":264},"const arr=new Array(3,5)\n",[254,80938,80939],{"class":256,"line":175},[254,80940,80941],{"class":264},"console.log(arr)  \u002F\u002F[3,5]\n",[14,80943,80944],{},"Array的实例方法，这个方法是实例成员",[14,80946,80947],{},[1602,80948],{"alt":174,"src":80949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[23051,80951,80953],{"id":80952},"_410521-reduce","4.10.5.2.1 reduce",[14,80955,80956],{},[1602,80957],{"alt":174,"src":80958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[245,80960,80962],{"className":53208,"code":80961,"language":53210,"meta":174,"style":174},"\u003Cbody>\n  \u003Cscript>\n    const arr = [1, 5, 8]\n    \u002F\u002F 1.没有初始值\n    const total = arr.reduce(function (prev, current) {\n      return prev + current\n    })\n    console.log(total)   \u002F\u002F14\n    \u002F\u002F 2.有初始值\n    const total1 = arr.reduce(function (prev, current) {\n      return prev + current\n    }, 10)\n    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n\n    \u002F\u002F 3.箭头函数写法\n    const total2 = arr.reduce((prev, current) => prev + current, 10)\n    console.log(total2)   \u002F\u002F24\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[251,80963,80964,80972,80980,80985,80990,80995,81000,81004,81009,81014,81019,81023,81028,81033,81037,81042,81047,81052,81060],{"__ignoreMap":174},[254,80965,80966,80968,80970],{"class":256,"line":257},[254,80967,1174],{"class":264},[254,80969,51941],{"class":51441},[254,80971,51448],{"class":264},[254,80973,80974,80976,80978],{"class":256,"line":175},[254,80975,52285],{"class":264},[254,80977,51954],{"class":51441},[254,80979,51448],{"class":264},[254,80981,80982],{"class":256,"line":1319},[254,80983,80984],{"class":264},"    const arr = [1, 5, 8]\n",[254,80986,80987],{"class":256,"line":1334},[254,80988,80989],{"class":264},"    \u002F\u002F 1.没有初始值\n",[254,80991,80992],{"class":256,"line":1340},[254,80993,80994],{"class":264},"    const total = arr.reduce(function (prev, current) {\n",[254,80996,80997],{"class":256,"line":1354},[254,80998,80999],{"class":264},"      return prev + current\n",[254,81001,81002],{"class":256,"line":1360},[254,81003,33602],{"class":264},[254,81005,81006],{"class":256,"line":1451},[254,81007,81008],{"class":264},"    console.log(total)   \u002F\u002F14\n",[254,81010,81011],{"class":256,"line":1457},[254,81012,81013],{"class":264},"    \u002F\u002F 2.有初始值\n",[254,81015,81016],{"class":256,"line":1469},[254,81017,81018],{"class":264},"    const total1 = arr.reduce(function (prev, current) {\n",[254,81020,81021],{"class":256,"line":1752},[254,81022,80999],{"class":264},[254,81024,81025],{"class":256,"line":1757},[254,81026,81027],{"class":264},"    }, 10)\n",[254,81029,81030],{"class":256,"line":1763},[254,81031,81032],{"class":264},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[254,81034,81035],{"class":256,"line":1768},[254,81036,2540],{"emptyLinePlaceholder":184},[254,81038,81039],{"class":256,"line":1782},[254,81040,81041],{"class":264},"    \u002F\u002F 3.箭头函数写法\n",[254,81043,81044],{"class":256,"line":1787},[254,81045,81046],{"class":264},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[254,81048,81049],{"class":256,"line":1793},[254,81050,81051],{"class":264},"    console.log(total2)   \u002F\u002F24\n",[254,81053,81054,81056,81058],{"class":256,"line":1814},[254,81055,52558],{"class":264},[254,81057,51954],{"class":51441},[254,81059,51448],{"class":264},[254,81061,81062,81064,81066],{"class":256,"line":1819},[254,81063,51926],{"class":264},[254,81065,51941],{"class":51441},[254,81067,51448],{"class":264},[14,81069,81070],{},"执行过程：",[21,81072,81073,81076,81079],{},[24,81074,81075],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[24,81077,81078],{},"每一次循环，把返回值给作为下一次循环的上一次值",[24,81080,81081],{},"如果有起始值，则起始值作为上一次值",[245,81083,81085],{"className":53208,"code":81084,"language":53210,"meta":174,"style":174},"\u003Cbody>\n  \u003Cscript>\n    const arr = [1, 5, 8]\n    \u002F\u002F 1.没有初始值\n    const total = arr.reduce(function (prev, current) {\n      return prev + current\n    })\n    console.log(total)   \u002F\u002F14\n    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n    \u002F\u002F     1              5                    6\n    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n    \u002F\u002F     6              8                    14\n    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n    \u002F\u002F 2.有初始值\n    const total1 = arr.reduce(function (prev, current) {\n      return prev + current\n    }, 10)\n    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n    \u002F\u002F     10             1                     11\n    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n    \u002F\u002F     11             5                    16\n    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n    \u002F\u002F     16             8                    24\n    \u002F\u002F 有初始值时循环次数就是数组的长度\n    \u002F\u002F 3.箭头函数写法\n    const total2 = arr.reduce((prev, current) => prev + current, 10)\n    console.log(total2)   \u002F\u002F24\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[251,81086,81087,81095,81103,81107,81111,81115,81119,81123,81127,81132,81137,81142,81147,81152,81156,81160,81164,81168,81172,81176,81181,81185,81190,81194,81199,81204,81208,81212,81216,81224],{"__ignoreMap":174},[254,81088,81089,81091,81093],{"class":256,"line":257},[254,81090,1174],{"class":264},[254,81092,51941],{"class":51441},[254,81094,51448],{"class":264},[254,81096,81097,81099,81101],{"class":256,"line":175},[254,81098,52285],{"class":264},[254,81100,51954],{"class":51441},[254,81102,51448],{"class":264},[254,81104,81105],{"class":256,"line":1319},[254,81106,80984],{"class":264},[254,81108,81109],{"class":256,"line":1334},[254,81110,80989],{"class":264},[254,81112,81113],{"class":256,"line":1340},[254,81114,80994],{"class":264},[254,81116,81117],{"class":256,"line":1354},[254,81118,80999],{"class":264},[254,81120,81121],{"class":256,"line":1360},[254,81122,33602],{"class":264},[254,81124,81125],{"class":256,"line":1451},[254,81126,81008],{"class":264},[254,81128,81129],{"class":256,"line":1457},[254,81130,81131],{"class":264},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[254,81133,81134],{"class":256,"line":1469},[254,81135,81136],{"class":264},"    \u002F\u002F     1              5                    6\n",[254,81138,81139],{"class":256,"line":1752},[254,81140,81141],{"class":264},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[254,81143,81144],{"class":256,"line":1757},[254,81145,81146],{"class":264},"    \u002F\u002F     6              8                    14\n",[254,81148,81149],{"class":256,"line":1763},[254,81150,81151],{"class":264},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[254,81153,81154],{"class":256,"line":1768},[254,81155,81013],{"class":264},[254,81157,81158],{"class":256,"line":1782},[254,81159,81018],{"class":264},[254,81161,81162],{"class":256,"line":1787},[254,81163,80999],{"class":264},[254,81165,81166],{"class":256,"line":1793},[254,81167,81027],{"class":264},[254,81169,81170],{"class":256,"line":1814},[254,81171,81032],{"class":264},[254,81173,81174],{"class":256,"line":1819},[254,81175,81131],{"class":264},[254,81177,81178],{"class":256,"line":1833},[254,81179,81180],{"class":264},"    \u002F\u002F     10             1                     11\n",[254,81182,81183],{"class":256,"line":1838},[254,81184,81141],{"class":264},[254,81186,81187],{"class":256,"line":1867},[254,81188,81189],{"class":264},"    \u002F\u002F     11             5                    16\n",[254,81191,81192],{"class":256,"line":1872},[254,81193,81141],{"class":264},[254,81195,81196],{"class":256,"line":1889},[254,81197,81198],{"class":264},"    \u002F\u002F     16             8                    24\n",[254,81200,81201],{"class":256,"line":1894},[254,81202,81203],{"class":264},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[254,81205,81206],{"class":256,"line":1899},[254,81207,81041],{"class":264},[254,81209,81210],{"class":256,"line":1904},[254,81211,81046],{"class":264},[254,81213,81214],{"class":256,"line":1918},[254,81215,81051],{"class":264},[254,81217,81218,81220,81222],{"class":256,"line":1923},[254,81219,52558],{"class":264},[254,81221,51954],{"class":51441},[254,81223,51448],{"class":264},[254,81225,81226,81228,81230],{"class":256,"line":2717},[254,81227,51926],{"class":264},[254,81229,51941],{"class":51441},[254,81231,51448],{"class":264},[23051,81233,81235],{"id":81234},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[14,81237,81238],{},[1602,81239],{"alt":174,"src":81240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[245,81242,81244],{"className":53208,"code":81243,"language":53210,"meta":174,"style":174},"\u003Cbody>\n  \u003Cscript>\n    const arr = [\n      { name: '张三', salary: 10000 },\n      { name: '李四', salary: 10000 },\n      { name: '王五', salary: 10000 }\n    ]\n    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n    \u002F\u002F prev是累计值\n    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n    console.log(total)\n    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n    \u002F\u002F    0       10000*1.3=13000       13000\n    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n    \u002F\u002F  13000     10000*1.3=13000       26000\n    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n    \u002F\u002F  26000     10000*1.3=13000       39000\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[251,81245,81246,81254,81262,81267,81272,81277,81282,81286,81291,81296,81301,81306,81311,81316,81320,81325,81329,81334,81342],{"__ignoreMap":174},[254,81247,81248,81250,81252],{"class":256,"line":257},[254,81249,1174],{"class":264},[254,81251,51941],{"class":51441},[254,81253,51448],{"class":264},[254,81255,81256,81258,81260],{"class":256,"line":175},[254,81257,52285],{"class":264},[254,81259,51954],{"class":51441},[254,81261,51448],{"class":264},[254,81263,81264],{"class":256,"line":1319},[254,81265,81266],{"class":264},"    const arr = [\n",[254,81268,81269],{"class":256,"line":1334},[254,81270,81271],{"class":264},"      { name: '张三', salary: 10000 },\n",[254,81273,81274],{"class":256,"line":1340},[254,81275,81276],{"class":264},"      { name: '李四', salary: 10000 },\n",[254,81278,81279],{"class":256,"line":1354},[254,81280,81281],{"class":264},"      { name: '王五', salary: 10000 }\n",[254,81283,81284],{"class":256,"line":1360},[254,81285,53250],{"class":264},[254,81287,81288],{"class":256,"line":1451},[254,81289,81290],{"class":264},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[254,81292,81293],{"class":256,"line":1457},[254,81294,81295],{"class":264},"    \u002F\u002F prev是累计值\n",[254,81297,81298],{"class":256,"line":1469},[254,81299,81300],{"class":264},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[254,81302,81303],{"class":256,"line":1752},[254,81304,81305],{"class":264},"    console.log(total)\n",[254,81307,81308],{"class":256,"line":1757},[254,81309,81310],{"class":264},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[254,81312,81313],{"class":256,"line":1763},[254,81314,81315],{"class":264},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[254,81317,81318],{"class":256,"line":1768},[254,81319,81310],{"class":264},[254,81321,81322],{"class":256,"line":1782},[254,81323,81324],{"class":264},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[254,81326,81327],{"class":256,"line":1787},[254,81328,81310],{"class":264},[254,81330,81331],{"class":256,"line":1793},[254,81332,81333],{"class":264},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[254,81335,81336,81338,81340],{"class":256,"line":1814},[254,81337,52558],{"class":264},[254,81339,51954],{"class":51441},[254,81341,51448],{"class":264},[254,81343,81344,81346,81348],{"class":256,"line":1819},[254,81345,51926],{"class":264},[254,81347,51941],{"class":51441},[254,81349,51448],{"class":264},[23051,81351,81353],{"id":81352},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[14,81355,81356],{},[1602,81357],{"alt":174,"src":81358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[14,81360,81361],{},[1602,81362],{"alt":174,"src":81363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[21,81365,81366],{},[24,81367,81368],{},"find()",[14,81370,81371],{},"循环查找，找到第一个就ok",[14,81373,81374],{},[42,81375,81378],{"href":81376,"rel":81377},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[151],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[245,81380,81382],{"className":50774,"code":81381,"language":50776,"meta":174,"style":174},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[251,81383,81384,81389,81394],{"__ignoreMap":174},[254,81385,81386],{"class":256,"line":257},[254,81387,81388],{"class":264},"const array1 = [5, 12, 8, 130, 44]\n",[254,81390,81391],{"class":256,"line":175},[254,81392,81393],{"class":264},"const found = array1.find((element) => element > 10)\n",[254,81395,81396],{"class":256,"line":1319},[254,81397,81398],{"class":264},"console.log(found)  \u002F\u002F12\n",[14,81400,81401,81403,81404,81409,81410,81413,81414,81416,81417,81422,81423,81425,81426,81428,81429,81431,81432],{},[251,81402,81368],{}," 方法是一个",[42,81405,81408],{"href":81406,"rel":81407},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FArray#%E8%BF%AD%E4%BB%A3%E6%96%B9%E6%B3%95",[151],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[251,81411,81412],{},"callbackFn"," 函数，直到 ",[251,81415,81412],{}," 返回一个",[42,81418,81421],{"href":81419,"rel":81420},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[151],"真值","。然后 ",[251,81424,81368],{}," 返回该元素并停止迭代数组。如果 ",[251,81427,81412],{}," 从未返回真值，则 ",[251,81430,81368],{}," 返回 ",[251,81433,81434],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[245,81436,81438],{"className":53208,"code":81437,"language":53210,"meta":174,"style":174},"\u003Cbody>\n  \u003Cscript>\n    const arr = ['red', 'blue', 'green']\n    const found = arr.find(item => item === 'pink')\n    console.log(found)   \u002F\u002F没有，输出undefined\n\n    \u002F\u002F 使用场景，用于查找数据\n    const arr1 = [\n      {\n        name: '小米',\n        price: 1999\n      },\n      {\n        name: '华为',\n        price: 3999\n      }\n    ]\n    \u002F\u002F 这小米这个对象，并且返回这个对象\n    \u002F\u002F const found1 = arr1.find(item => {\n    \u002F\u002F   if (item.name === '小米') {\n    \u002F\u002F     return item\n    \u002F\u002F   }\n    \u002F\u002F })\n    \u002F\u002F 另一种写法\n    const found1 = arr1.find(item => {\n      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n      return item.name = '小米'\n    })\n    console.log(found1)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n",[251,81439,81440,81448,81456,81461,81466,81471,81475,81480,81485,81489,81494,81499,81503,81507,81512,81517,81521,81525,81530,81535,81540,81545,81550,81554,81559,81564,81569,81574,81578,81583,81591],{"__ignoreMap":174},[254,81441,81442,81444,81446],{"class":256,"line":257},[254,81443,1174],{"class":264},[254,81445,51941],{"class":51441},[254,81447,51448],{"class":264},[254,81449,81450,81452,81454],{"class":256,"line":175},[254,81451,52285],{"class":264},[254,81453,51954],{"class":51441},[254,81455,51448],{"class":264},[254,81457,81458],{"class":256,"line":1319},[254,81459,81460],{"class":264},"    const arr = ['red', 'blue', 'green']\n",[254,81462,81463],{"class":256,"line":1334},[254,81464,81465],{"class":264},"    const found = arr.find(item => item === 'pink')\n",[254,81467,81468],{"class":256,"line":1340},[254,81469,81470],{"class":264},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[254,81472,81473],{"class":256,"line":1354},[254,81474,2540],{"emptyLinePlaceholder":184},[254,81476,81477],{"class":256,"line":1360},[254,81478,81479],{"class":264},"    \u002F\u002F 使用场景，用于查找数据\n",[254,81481,81482],{"class":256,"line":1451},[254,81483,81484],{"class":264},"    const arr1 = [\n",[254,81486,81487],{"class":256,"line":1457},[254,81488,79527],{"class":264},[254,81490,81491],{"class":256,"line":1469},[254,81492,81493],{"class":264},"        name: '小米',\n",[254,81495,81496],{"class":256,"line":1752},[254,81497,81498],{"class":264},"        price: 1999\n",[254,81500,81501],{"class":256,"line":1757},[254,81502,78033],{"class":264},[254,81504,81505],{"class":256,"line":1763},[254,81506,79527],{"class":264},[254,81508,81509],{"class":256,"line":1768},[254,81510,81511],{"class":264},"        name: '华为',\n",[254,81513,81514],{"class":256,"line":1782},[254,81515,81516],{"class":264},"        price: 3999\n",[254,81518,81519],{"class":256,"line":1787},[254,81520,52539],{"class":264},[254,81522,81523],{"class":256,"line":1793},[254,81524,53250],{"class":264},[254,81526,81527],{"class":256,"line":1814},[254,81528,81529],{"class":264},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[254,81531,81532],{"class":256,"line":1819},[254,81533,81534],{"class":264},"    \u002F\u002F const found1 = arr1.find(item => {\n",[254,81536,81537],{"class":256,"line":1833},[254,81538,81539],{"class":264},"    \u002F\u002F   if (item.name === '小米') {\n",[254,81541,81542],{"class":256,"line":1838},[254,81543,81544],{"class":264},"    \u002F\u002F     return item\n",[254,81546,81547],{"class":256,"line":1867},[254,81548,81549],{"class":264},"    \u002F\u002F   }\n",[254,81551,81552],{"class":256,"line":1872},[254,81553,63431],{"class":264},[254,81555,81556],{"class":256,"line":1889},[254,81557,81558],{"class":264},"    \u002F\u002F 另一种写法\n",[254,81560,81561],{"class":256,"line":1894},[254,81562,81563],{"class":264},"    const found1 = arr1.find(item => {\n",[254,81565,81566],{"class":256,"line":1899},[254,81567,81568],{"class":264},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[254,81570,81571],{"class":256,"line":1904},[254,81572,81573],{"class":264},"      return item.name = '小米'\n",[254,81575,81576],{"class":256,"line":1918},[254,81577,33602],{"class":264},[254,81579,81580],{"class":256,"line":1923},[254,81581,81582],{"class":264},"    console.log(found1)\n",[254,81584,81585,81587,81589],{"class":256,"line":2717},[254,81586,52558],{"class":264},[254,81588,51954],{"class":51441},[254,81590,51448],{"class":264},[254,81592,81593,81595,81597],{"class":256,"line":2731},[254,81594,51926],{"class":264},[254,81596,51941],{"class":51441},[254,81598,51448],{"class":264},[14,81600,81601],{},[1602,81602],{"alt":174,"src":81603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[14,81605,81606],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[21,81608,81609],{"start":175},[24,81610,81611],{},"every()返回的是布尔值",[14,81613,81614],{},[42,81615,81618],{"href":81616,"rel":81617},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[151],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[14,81620,81621],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[14,81623,81624],{},"some是只有有一个就没问题",[14,81626,81627],{},"every是必须全是才行",[245,81629,81633],{"className":81630,"code":81631,"language":81632,"meta":174,"style":174},"language-sql shiki shiki-themes github-light github-dark","function isBigEnough(element, index, array) {\n  return element >= 10;\n}\n[12, 5, 8, 130, 44].every(isBigEnough); \u002F\u002F false\n[12, 54, 18, 130, 44].every(isBigEnough); \u002F\u002F true\n","sql",[251,81634,81635,81651,81665,81669,81678],{"__ignoreMap":174},[254,81636,81637,81639,81642,81644,81646,81649],{"class":256,"line":257},[254,81638,54590],{"class":260},[254,81640,81641],{"class":264}," isBigEnough(element, ",[254,81643,74199],{"class":260},[254,81645,12576],{"class":264},[254,81647,81648],{"class":260},"array",[254,81650,12583],{"class":264},[254,81652,81653,81656,81659,81661,81663],{"class":256,"line":175},[254,81654,81655],{"class":260},"  return",[254,81657,81658],{"class":264}," element ",[254,81660,1850],{"class":260},[254,81662,2178],{"class":313},[254,81664,1430],{"class":264},[254,81666,81667],{"class":256,"line":1319},[254,81668,1705],{"class":264},[254,81670,81671,81674,81676],{"class":256,"line":1334},[254,81672,81673],{"class":264},"[12, 5, 8, 130, 44].every(isBigEnough); ",[254,81675,33470],{"class":260},[254,81677,54657],{"class":264},[254,81679,81680,81683,81685],{"class":256,"line":1340},[254,81681,81682],{"class":264},"[12, 54, 18, 130, 44].every(isBigEnough); ",[254,81684,33470],{"class":260},[254,81686,58081],{"class":264},[245,81688,81690],{"className":53208,"code":81689,"language":53210,"meta":174,"style":174},"\u003Cbody>\n  \u003Cscript>\n    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n    const arr = [10, 20, 30]\n    const flag = arr.every(item => item >= 10)\n    console.log(flag)    \u002F\u002Ftrue\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[251,81691,81692,81700,81708,81713,81717,81722,81727,81735],{"__ignoreMap":174},[254,81693,81694,81696,81698],{"class":256,"line":257},[254,81695,1174],{"class":264},[254,81697,51941],{"class":51441},[254,81699,51448],{"class":264},[254,81701,81702,81704,81706],{"class":256,"line":175},[254,81703,52285],{"class":264},[254,81705,51954],{"class":51441},[254,81707,51448],{"class":264},[254,81709,81710],{"class":256,"line":1319},[254,81711,81712],{"class":264},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[254,81714,81715],{"class":256,"line":1334},[254,81716,78463],{"class":264},[254,81718,81719],{"class":256,"line":1340},[254,81720,81721],{"class":264},"    const flag = arr.every(item => item >= 10)\n",[254,81723,81724],{"class":256,"line":1354},[254,81725,81726],{"class":264},"    console.log(flag)    \u002F\u002Ftrue\n",[254,81728,81729,81731,81733],{"class":256,"line":1360},[254,81730,52558],{"class":264},[254,81732,51954],{"class":51441},[254,81734,51448],{"class":264},[254,81736,81737,81739,81741],{"class":256,"line":1451},[254,81738,51926],{"class":264},[254,81740,51941],{"class":51441},[254,81742,51448],{"class":264},[245,81744,81746],{"className":53208,"code":81745,"language":53210,"meta":174,"style":174},"\u003Cbody>\n  \u003Cscript>\n    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n    const arr = [10, 0, 5]\n    const flag = arr.some(item => item >= 10)\n    console.log(flag)   \u002F\u002Ftrue\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[251,81747,81748,81756,81764,81768,81773,81778,81783,81791],{"__ignoreMap":174},[254,81749,81750,81752,81754],{"class":256,"line":257},[254,81751,1174],{"class":264},[254,81753,51941],{"class":51441},[254,81755,51448],{"class":264},[254,81757,81758,81760,81762],{"class":256,"line":175},[254,81759,52285],{"class":264},[254,81761,51954],{"class":51441},[254,81763,51448],{"class":264},[254,81765,81766],{"class":256,"line":1319},[254,81767,81712],{"class":264},[254,81769,81770],{"class":256,"line":1334},[254,81771,81772],{"class":264},"    const arr = [10, 0, 5]\n",[254,81774,81775],{"class":256,"line":1340},[254,81776,81777],{"class":264},"    const flag = arr.some(item => item >= 10)\n",[254,81779,81780],{"class":256,"line":1354},[254,81781,81782],{"class":264},"    console.log(flag)   \u002F\u002Ftrue\n",[254,81784,81785,81787,81789],{"class":256,"line":1360},[254,81786,52558],{"class":264},[254,81788,51954],{"class":51441},[254,81790,51448],{"class":264},[254,81792,81793,81795,81797],{"class":256,"line":1451},[254,81794,51926],{"class":264},[254,81796,51941],{"class":51441},[254,81798,51448],{"class":264},[23051,81800,81802],{"id":81801},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[14,81804,81805],{},[1602,81806],{"alt":174,"src":81807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[245,81809,81811],{"className":50774,"code":81810,"language":50776,"meta":174,"style":174},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    div {\n      width: 200px;\n      height: 40px;\n      line-height: 40px;\n      font: 12px;\n      text-align: center;\n      background-color: pink;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv>\u003C\u002Fdiv>\n  \u003Cscript>\n    const spec = { size: '40cm*40cm', color: '黑色' }\n    \u002F\u002F const arr = Object.values(spec)\n    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n    document.querySelector('div').innerHTML = Object.values(spec).join('\u002F')\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[251,81812,81813,81823,81837,81841,81849,81863,81883,81895,81903,81910,81922,81934,81946,81958,81968,81978,81982,81990,81998,82002,82010,82022,82030,82052,82057,82062,82095,82103,82111,82115],{"__ignoreMap":174},[254,81814,81815,81817,81819,81821],{"class":256,"line":257},[254,81816,51438],{"class":264},[254,81818,51442],{"class":51441},[254,81820,51445],{"class":2103},[254,81822,51448],{"class":264},[254,81824,81825,81827,81829,81831,81833,81835],{"class":256,"line":175},[254,81826,1174],{"class":264},[254,81828,50776],{"class":51441},[254,81830,51457],{"class":2103},[254,81832,310],{"class":264},[254,81834,51462],{"class":369},[254,81836,51448],{"class":264},[254,81838,81839],{"class":256,"line":1319},[254,81840,2540],{"emptyLinePlaceholder":184},[254,81842,81843,81845,81847],{"class":256,"line":1334},[254,81844,1174],{"class":264},[254,81846,51475],{"class":51441},[254,81848,51448],{"class":264},[254,81850,81851,81853,81855,81857,81859,81861],{"class":256,"line":1340},[254,81852,52285],{"class":264},[254,81854,51485],{"class":51441},[254,81856,51488],{"class":2103},[254,81858,310],{"class":264},[254,81860,51493],{"class":369},[254,81862,51448],{"class":264},[254,81864,81865,81867,81869,81871,81873,81875,81877,81879,81881],{"class":256,"line":1354},[254,81866,52285],{"class":264},[254,81868,51485],{"class":51441},[254,81870,15061],{"class":2103},[254,81872,310],{"class":264},[254,81874,51532],{"class":369},[254,81876,51512],{"class":2103},[254,81878,310],{"class":264},[254,81880,51539],{"class":369},[254,81882,51448],{"class":264},[254,81884,81885,81887,81889,81891,81893],{"class":256,"line":1360},[254,81886,52285],{"class":264},[254,81888,51548],{"class":51441},[254,81890,51551],{"class":264},[254,81892,51548],{"class":51441},[254,81894,51448],{"class":264},[254,81896,81897,81899,81901],{"class":256,"line":1451},[254,81898,52285],{"class":264},[254,81900,5267],{"class":51441},[254,81902,51448],{"class":264},[254,81904,81905,81908],{"class":256,"line":1457},[254,81906,81907],{"class":51441},"    div",[254,81909,15713],{"class":264},[254,81911,81912,81914,81916,81918,81920],{"class":256,"line":1469},[254,81913,54912],{"class":313},[254,81915,51578],{"class":264},[254,81917,1862],{"class":313},[254,81919,51633],{"class":260},[254,81921,1430],{"class":264},[254,81923,81924,81926,81928,81930,81932],{"class":256,"line":1752},[254,81925,54926],{"class":313},[254,81927,51578],{"class":264},[254,81929,665],{"class":313},[254,81931,51633],{"class":260},[254,81933,1430],{"class":264},[254,81935,81936,81938,81940,81942,81944],{"class":256,"line":1757},[254,81937,57500],{"class":313},[254,81939,51578],{"class":264},[254,81941,665],{"class":313},[254,81943,51633],{"class":260},[254,81945,1430],{"class":264},[254,81947,81948,81950,81952,81954,81956],{"class":256,"line":1763},[254,81949,65274],{"class":313},[254,81951,51578],{"class":264},[254,81953,762],{"class":313},[254,81955,51633],{"class":260},[254,81957,1430],{"class":264},[254,81959,81960,81962,81964,81966],{"class":256,"line":1768},[254,81961,57427],{"class":313},[254,81963,51578],{"class":264},[254,81965,51733],{"class":313},[254,81967,1430],{"class":264},[254,81969,81970,81972,81974,81976],{"class":256,"line":1782},[254,81971,55025],{"class":313},[254,81973,51578],{"class":264},[254,81975,51786],{"class":313},[254,81977,1430],{"class":264},[254,81979,81980],{"class":256,"line":1787},[254,81981,2327],{"class":264},[254,81983,81984,81986,81988],{"class":256,"line":1793},[254,81985,52558],{"class":264},[254,81987,5267],{"class":51441},[254,81989,51448],{"class":264},[254,81991,81992,81994,81996],{"class":256,"line":1814},[254,81993,51926],{"class":264},[254,81995,51475],{"class":51441},[254,81997,51448],{"class":264},[254,81999,82000],{"class":256,"line":1819},[254,82001,2540],{"emptyLinePlaceholder":184},[254,82003,82004,82006,82008],{"class":256,"line":1833},[254,82005,1174],{"class":264},[254,82007,51941],{"class":51441},[254,82009,51448],{"class":264},[254,82011,82012,82014,82016,82018,82020],{"class":256,"line":1838},[254,82013,52285],{"class":264},[254,82015,51752],{"class":51441},[254,82017,55455],{"class":264},[254,82019,51752],{"class":51441},[254,82021,51448],{"class":264},[254,82023,82024,82026,82028],{"class":256,"line":1867},[254,82025,52285],{"class":264},[254,82027,51954],{"class":51441},[254,82029,51448],{"class":264},[254,82031,82032,82034,82037,82039,82042,82045,82047,82050],{"class":256,"line":1872},[254,82033,11362],{"class":260},[254,82035,82036],{"class":313}," spec",[254,82038,13705],{"class":260},[254,82040,82041],{"class":264}," { size: ",[254,82043,82044],{"class":369},"'40cm*40cm'",[254,82046,55605],{"class":264},[254,82048,82049],{"class":369},"'黑色'",[254,82051,55745],{"class":264},[254,82053,82054],{"class":256,"line":1889},[254,82055,82056],{"class":323},"    \u002F\u002F const arr = Object.values(spec)\n",[254,82058,82059],{"class":256,"line":1894},[254,82060,82061],{"class":323},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[254,82063,82064,82066,82068,82070,82073,82075,82077,82080,82083,82086,82088,82090,82093],{"class":256,"line":1899},[254,82065,52548],{"class":264},[254,82067,54540],{"class":2103},[254,82069,265],{"class":264},[254,82071,82072],{"class":369},"'div'",[254,82074,74390],{"class":264},[254,82076,310],{"class":260},[254,82078,82079],{"class":264}," Object.",[254,82081,82082],{"class":2103},"values",[254,82084,82085],{"class":264},"(spec).",[254,82087,74364],{"class":2103},[254,82089,265],{"class":264},[254,82091,82092],{"class":369},"'\u002F'",[254,82094,271],{"class":264},[254,82096,82097,82099,82101],{"class":256,"line":1904},[254,82098,52558],{"class":264},[254,82100,51954],{"class":51441},[254,82102,51448],{"class":264},[254,82104,82105,82107,82109],{"class":256,"line":1918},[254,82106,51926],{"class":264},[254,82108,51941],{"class":51441},[254,82110,51448],{"class":264},[254,82112,82113],{"class":256,"line":1923},[254,82114,2540],{"emptyLinePlaceholder":184},[254,82116,82117,82119,82121],{"class":256,"line":2717},[254,82118,51926],{"class":264},[254,82120,50776],{"class":51441},[254,82122,51448],{"class":264},[14,82124,82125],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[23051,82127,82129],{"id":82128},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[14,82131,82132],{},"静态方法，将伪数组转换为真数组",[14,82134,82135],{},[1602,82136],{"alt":174,"src":82137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[245,82139,82141],{"className":53208,"code":82140,"language":53210,"meta":174,"style":174},"\u003Cbody>\n  \u003Cul>\n    \u003Cli>\u003C\u002Fli>\n    \u003Cli>\u003C\u002Fli>\n    \u003Cli>\u003C\u002Fli>\n  \u003C\u002Ful>\n  \u003Cscript>\n    const lis = document.querySelectorAll('li')\n    const liss = Array.from(lis)\n    liss.pop()\n    console.log(liss)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[251,82142,82143,82151,82159,82171,82183,82195,82203,82211,82216,82221,82226,82231,82239],{"__ignoreMap":174},[254,82144,82145,82147,82149],{"class":256,"line":257},[254,82146,1174],{"class":264},[254,82148,51941],{"class":51441},[254,82150,51448],{"class":264},[254,82152,82153,82155,82157],{"class":256,"line":175},[254,82154,52285],{"class":264},[254,82156,1271],{"class":51441},[254,82158,51448],{"class":264},[254,82160,82161,82163,82165,82167,82169],{"class":256,"line":1319},[254,82162,51482],{"class":264},[254,82164,24],{"class":51441},[254,82166,55455],{"class":264},[254,82168,24],{"class":51441},[254,82170,51448],{"class":264},[254,82172,82173,82175,82177,82179,82181],{"class":256,"line":1334},[254,82174,51482],{"class":264},[254,82176,24],{"class":51441},[254,82178,55455],{"class":264},[254,82180,24],{"class":51441},[254,82182,51448],{"class":264},[254,82184,82185,82187,82189,82191,82193],{"class":256,"line":1340},[254,82186,51482],{"class":264},[254,82188,24],{"class":51441},[254,82190,55455],{"class":264},[254,82192,24],{"class":51441},[254,82194,51448],{"class":264},[254,82196,82197,82199,82201],{"class":256,"line":1354},[254,82198,52558],{"class":264},[254,82200,1271],{"class":51441},[254,82202,51448],{"class":264},[254,82204,82205,82207,82209],{"class":256,"line":1360},[254,82206,52285],{"class":264},[254,82208,51954],{"class":51441},[254,82210,51448],{"class":264},[254,82212,82213],{"class":256,"line":1451},[254,82214,82215],{"class":264},"    const lis = document.querySelectorAll('li')\n",[254,82217,82218],{"class":256,"line":1457},[254,82219,82220],{"class":264},"    const liss = Array.from(lis)\n",[254,82222,82223],{"class":256,"line":1469},[254,82224,82225],{"class":264},"    liss.pop()\n",[254,82227,82228],{"class":256,"line":1752},[254,82229,82230],{"class":264},"    console.log(liss)\n",[254,82232,82233,82235,82237],{"class":256,"line":1757},[254,82234,52558],{"class":264},[254,82236,51954],{"class":51441},[254,82238,51448],{"class":264},[254,82240,82241,82243,82245],{"class":256,"line":1763},[254,82242,51926],{"class":264},[254,82244,51941],{"class":51441},[254,82246,51448],{"class":264},[14,82248,82249],{},[1602,82250],{"alt":174,"src":82251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[22139,82253,82255],{"id":82254},"_41053-string","4.10.5.3 String",[14,82257,82258],{},[1602,82259],{"alt":174,"src":82260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[23051,82262,82264],{"id":82263},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[245,82266,82268],{"className":53208,"code":82267,"language":53210,"meta":174,"style":174},"\u003Cbody>\n  \u003Cscript>\n    \u002F\u002F 把字符串转化为数组\n    const str = 'pink,red'\n    const arr = str.split(',')\n    console.log(arr)\n    const str1 = '2025-8-25'\n    const arr1 = str1.split('-')\n    console.log(arr1)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[251,82269,82270,82278,82286,82291,82296,82301,82305,82310,82315,82320,82328],{"__ignoreMap":174},[254,82271,82272,82274,82276],{"class":256,"line":257},[254,82273,1174],{"class":264},[254,82275,51941],{"class":51441},[254,82277,51448],{"class":264},[254,82279,82280,82282,82284],{"class":256,"line":175},[254,82281,52285],{"class":264},[254,82283,51954],{"class":51441},[254,82285,51448],{"class":264},[254,82287,82288],{"class":256,"line":1319},[254,82289,82290],{"class":264},"    \u002F\u002F 把字符串转化为数组\n",[254,82292,82293],{"class":256,"line":1334},[254,82294,82295],{"class":264},"    const str = 'pink,red'\n",[254,82297,82298],{"class":256,"line":1340},[254,82299,82300],{"class":264},"    const arr = str.split(',')\n",[254,82302,82303],{"class":256,"line":1354},[254,82304,80779],{"class":264},[254,82306,82307],{"class":256,"line":1360},[254,82308,82309],{"class":264},"    const str1 = '2025-8-25'\n",[254,82311,82312],{"class":256,"line":1451},[254,82313,82314],{"class":264},"    const arr1 = str1.split('-')\n",[254,82316,82317],{"class":256,"line":1457},[254,82318,82319],{"class":264},"    console.log(arr1)\n",[254,82321,82322,82324,82326],{"class":256,"line":1469},[254,82323,52558],{"class":264},[254,82325,51954],{"class":51441},[254,82327,51448],{"class":264},[254,82329,82330,82332,82334],{"class":256,"line":1752},[254,82331,51926],{"class":264},[254,82333,51941],{"class":51441},[254,82335,51448],{"class":264},[23051,82337,82339],{"id":82338},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[14,82341,5322],{},[14,82343,82344],{},"substring(indexStart)",[14,82346,82347],{},"substring(indexStart, indexEnd)",[1271,82349,82350,82361,82373,82383],{},[24,82351,82352,82353,82356,82357,82360],{},"如果省略了 ",[251,82354,82355],{},"indexEnd","，则 ",[251,82358,82359],{},"substring()"," 提取字符直到字符串的末尾",[24,82362,82363,82364,82367,82368,82356,82370,82372],{},"如果 ",[251,82365,82366],{},"indexStart"," 等于 ",[251,82369,82355],{},[251,82371,82359],{}," 返回一个空字符串",[24,82374,82363,82375,82377,82378,82356,82380,82382],{},[251,82376,82366],{}," 大于 ",[251,82379,82355],{},[251,82381,82359],{}," 的效果就像交换了这两个参数一样",[24,82384,82385],{},"结束的索引号不包含想要截取的部分",[245,82387,82389],{"className":81630,"code":82388,"language":81632,"meta":174,"style":174},"const anyString = \"Mozilla\";\n\nconsole.log(anyString.substring(0, 1))  \u002F\u002F 'M'\nconsole.log(anyString.substring(1, 0))  \u002F\u002F 'M'\n\nconsole.log(anyString.substring(0, 6))  \u002F\u002F 'Mozill'\n\nconsole.log(anyString.substring(4))  \u002F\u002F 'lla'\nconsole.log(anyString.substring(4, 7))   \u002F\u002F 'lla'\nconsole.log(anyString.substring(7, 4))  \u002F\u002F 'lla'\n\nconsole.log(anyString.substring(0, 7))  \u002F\u002F 'Mozilla'\nconsole.log(anyString.substring(0, 10))  \u002F\u002F 'Mozilla'\n",[251,82390,82391,82403,82407,82441,82471,82475,82506,82510,82537,82567,82597,82601,82632],{"__ignoreMap":174},[254,82392,82393,82396,82398,82401],{"class":256,"line":257},[254,82394,82395],{"class":264},"const anyString ",[254,82397,310],{"class":260},[254,82399,82400],{"class":369}," \"Mozilla\"",[254,82402,1430],{"class":264},[254,82404,82405],{"class":256,"line":175},[254,82406,2540],{"emptyLinePlaceholder":184},[254,82408,82409,82412,82414,82416,82418,82421,82423,82426,82428,82430,82432,82434,82436,82438],{"class":256,"line":1319},[254,82410,82411],{"class":313},"console",[254,82413,822],{"class":264},[254,82415,58388],{"class":313},[254,82417,265],{"class":264},[254,82419,82420],{"class":313},"anyString",[254,82422,822],{"class":264},[254,82424,82425],{"class":313},"substring",[254,82427,265],{"class":264},[254,82429,456],{"class":313},[254,82431,12576],{"class":264},[254,82433,482],{"class":313},[254,82435,75394],{"class":264},[254,82437,33470],{"class":260},[254,82439,82440],{"class":369}," 'M'\n",[254,82442,82443,82445,82447,82449,82451,82453,82455,82457,82459,82461,82463,82465,82467,82469],{"class":256,"line":1334},[254,82444,82411],{"class":313},[254,82446,822],{"class":264},[254,82448,58388],{"class":313},[254,82450,265],{"class":264},[254,82452,82420],{"class":313},[254,82454,822],{"class":264},[254,82456,82425],{"class":313},[254,82458,265],{"class":264},[254,82460,482],{"class":313},[254,82462,12576],{"class":264},[254,82464,456],{"class":313},[254,82466,75394],{"class":264},[254,82468,33470],{"class":260},[254,82470,82440],{"class":369},[254,82472,82473],{"class":256,"line":1340},[254,82474,2540],{"emptyLinePlaceholder":184},[254,82476,82477,82479,82481,82483,82485,82487,82489,82491,82493,82495,82497,82499,82501,82503],{"class":256,"line":1354},[254,82478,82411],{"class":313},[254,82480,822],{"class":264},[254,82482,58388],{"class":313},[254,82484,265],{"class":264},[254,82486,82420],{"class":313},[254,82488,822],{"class":264},[254,82490,82425],{"class":313},[254,82492,265],{"class":264},[254,82494,456],{"class":313},[254,82496,12576],{"class":264},[254,82498,608],{"class":313},[254,82500,75394],{"class":264},[254,82502,33470],{"class":260},[254,82504,82505],{"class":369}," 'Mozill'\n",[254,82507,82508],{"class":256,"line":1360},[254,82509,2540],{"emptyLinePlaceholder":184},[254,82511,82512,82514,82516,82518,82520,82522,82524,82526,82528,82530,82532,82534],{"class":256,"line":1451},[254,82513,82411],{"class":313},[254,82515,822],{"class":264},[254,82517,58388],{"class":313},[254,82519,265],{"class":264},[254,82521,82420],{"class":313},[254,82523,822],{"class":264},[254,82525,82425],{"class":313},[254,82527,265],{"class":264},[254,82529,557],{"class":313},[254,82531,75394],{"class":264},[254,82533,33470],{"class":260},[254,82535,82536],{"class":369}," 'lla'\n",[254,82538,82539,82541,82543,82545,82547,82549,82551,82553,82555,82557,82559,82561,82563,82565],{"class":256,"line":1457},[254,82540,82411],{"class":313},[254,82542,822],{"class":264},[254,82544,58388],{"class":313},[254,82546,265],{"class":264},[254,82548,82420],{"class":313},[254,82550,822],{"class":264},[254,82552,82425],{"class":313},[254,82554,265],{"class":264},[254,82556,557],{"class":313},[254,82558,12576],{"class":264},[254,82560,633],{"class":313},[254,82562,75450],{"class":264},[254,82564,33470],{"class":260},[254,82566,82536],{"class":369},[254,82568,82569,82571,82573,82575,82577,82579,82581,82583,82585,82587,82589,82591,82593,82595],{"class":256,"line":1469},[254,82570,82411],{"class":313},[254,82572,822],{"class":264},[254,82574,58388],{"class":313},[254,82576,265],{"class":264},[254,82578,82420],{"class":313},[254,82580,822],{"class":264},[254,82582,82425],{"class":313},[254,82584,265],{"class":264},[254,82586,633],{"class":313},[254,82588,12576],{"class":264},[254,82590,557],{"class":313},[254,82592,75394],{"class":264},[254,82594,33470],{"class":260},[254,82596,82536],{"class":369},[254,82598,82599],{"class":256,"line":1752},[254,82600,2540],{"emptyLinePlaceholder":184},[254,82602,82603,82605,82607,82609,82611,82613,82615,82617,82619,82621,82623,82625,82627,82629],{"class":256,"line":1757},[254,82604,82411],{"class":313},[254,82606,822],{"class":264},[254,82608,58388],{"class":313},[254,82610,265],{"class":264},[254,82612,82420],{"class":313},[254,82614,822],{"class":264},[254,82616,82425],{"class":313},[254,82618,265],{"class":264},[254,82620,456],{"class":313},[254,82622,12576],{"class":264},[254,82624,633],{"class":313},[254,82626,75394],{"class":264},[254,82628,33470],{"class":260},[254,82630,82631],{"class":369}," 'Mozilla'\n",[254,82633,82634,82636,82638,82640,82642,82644,82646,82648,82650,82652,82654,82656,82658,82660],{"class":256,"line":1763},[254,82635,82411],{"class":313},[254,82637,822],{"class":264},[254,82639,58388],{"class":313},[254,82641,265],{"class":264},[254,82643,82420],{"class":313},[254,82645,822],{"class":264},[254,82647,82425],{"class":313},[254,82649,265],{"class":264},[254,82651,456],{"class":313},[254,82653,12576],{"class":264},[254,82655,710],{"class":313},[254,82657,75394],{"class":264},[254,82659,33470],{"class":260},[254,82661,82631],{"class":369},[23051,82663,82665],{"id":82664},"_410533-startswith","4.10.5.3.3 startsWith",[14,82667,82668,82671,82672,82677,82678,82680,82681],{},[251,82669,82670],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[414,82673,82674],{},[251,82675,82676],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[251,82679,1502],{}," 或 ",[251,82682,66161],{},[245,82684,82686],{"className":77636,"code":82685,"language":77638,"meta":174,"style":174},"const str1 = \"Saturday night plans\"\nconsole.log(str1.startsWith(\"Sat\"))\n\u002F\u002F Expected output: true\nconsole.log(str1.startsWith(\"Sat\", 3))\n\u002F\u002F Expected output: false\n",[251,82687,82688,82700,82719,82724,82744],{"__ignoreMap":174},[254,82689,82690,82692,82695,82697],{"class":256,"line":257},[254,82691,6933],{"class":260},[254,82693,82694],{"class":264}," str1 ",[254,82696,310],{"class":260},[254,82698,82699],{"class":369}," \"Saturday night plans\"\n",[254,82701,82702,82704,82706,82709,82712,82714,82717],{"class":256,"line":175},[254,82703,77673],{"class":264},[254,82705,58388],{"class":2103},[254,82707,82708],{"class":264},"(str1.",[254,82710,82711],{"class":2103},"startsWith",[254,82713,265],{"class":264},[254,82715,82716],{"class":369},"\"Sat\"",[254,82718,30638],{"class":264},[254,82720,82721],{"class":256,"line":1319},[254,82722,82723],{"class":323},"\u002F\u002F Expected output: true\n",[254,82725,82726,82728,82730,82732,82734,82736,82738,82740,82742],{"class":256,"line":1334},[254,82727,77673],{"class":264},[254,82729,58388],{"class":2103},[254,82731,82708],{"class":264},[254,82733,82711],{"class":2103},[254,82735,265],{"class":264},[254,82737,82716],{"class":369},[254,82739,12576],{"class":264},[254,82741,336],{"class":313},[254,82743,30638],{"class":264},[254,82745,82746],{"class":256,"line":1340},[254,82747,82748],{"class":323},"\u002F\u002F Expected output: false\n",[245,82750,82752],{"className":50774,"code":82751,"language":50776,"meta":174,"style":174},"startsWith(searchString)\nstartsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n\nconst str3 = 'pink老师上课中'\nconsole.log(str3.startsWith('pink'))   \u002F\u002Ftrue\nconsole.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[251,82753,82754,82759,82764,82768,82773,82778],{"__ignoreMap":174},[254,82755,82756],{"class":256,"line":257},[254,82757,82758],{"class":264},"startsWith(searchString)\n",[254,82760,82761],{"class":256,"line":175},[254,82762,82763],{"class":264},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[254,82765,82766],{"class":256,"line":1319},[254,82767,2540],{"emptyLinePlaceholder":184},[254,82769,82770],{"class":256,"line":1334},[254,82771,82772],{"class":264},"const str3 = 'pink老师上课中'\n",[254,82774,82775],{"class":256,"line":1340},[254,82776,82777],{"class":264},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[254,82779,82780],{"class":256,"line":1354},[254,82781,82782],{"class":264},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[23051,82784,82786],{"id":82785},"_410534-includes","4.10.5.3.4 includes",[14,82788,82789],{},"includes(searchString) includes(searchString, position)",[21,82791,82792],{},[24,82793,82794],{},"searchString:",[14,82796,82797,82798,82800,82801,82806,82807,82812,82813,21641,82816,82819,82820,82823],{},"一个要在 ",[251,82799,1439],{}," 中查找的字符串。",[42,82802,82805],{"href":82803,"rel":82804},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FRegExp#%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E7%9A%84%E7%89%B9%E6%AE%8A%E5%A4%84%E7%90%86",[151],"不能是正则表达式","。所有非正则表达式的值都会被",[42,82808,82811],{"href":82809,"rel":82810},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString#%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%BC%BA%E5%88%B6%E8%BD%AC%E6%8D%A2",[151],"强制转换为字符串","，因此如果该参数被省略或传入 ",[251,82814,82815],{},"undefined",[251,82817,82818],{},"includes()"," 方法会在字符串中搜索 ",[251,82821,82822],{},"\"undefined\"","，这通常不是你想要的",[21,82825,82826],{"start":175},[24,82827,82828,1123],{},[251,82829,82830],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[14,82832,82833,82834,82837,82838],{},"在字符串中开始搜索 ",[251,82835,82836],{},"searchString"," 的位置。默认值为 ",[251,82839,456],{},[21,82841,82842],{"start":1319},[24,82843,82844],{},"返回值：",[14,82846,82847,82848,82850,82851,82855,82856],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[251,82849,82836],{}," 为空字符串的情况），则返回 ",[414,82852,82853],{},[251,82854,1502],{}," ，否则返回 ",[414,82857,82858],{},[251,82859,66161],{},[21,82861,82862],{"start":1334},[24,82863,82864],{},"异常：",[14,82866,82363,82867,13936,82869,82873],{},[251,82868,82836],{},[42,82870,82872],{"href":82803,"rel":82871},[151],"是一个正则表达式","，则会抛出",[14,82875,82876],{},"只要是有就是true，不需要非得以谁开头结尾",[245,82878,82880],{"className":77636,"code":82879,"language":77638,"meta":174,"style":174},"const str = \"To be, or not to be, that is the question.\"\nconsole.log(str.includes(\"To be\"))  \u002F\u002F true\nconsole.log(str.includes(\"question\"))  \u002F\u002F true\nconsole.log(str.includes(\"nonexistent\"))  \u002F\u002F false\nconsole.log(str.includes(\"To be\", 1))  \u002F\u002F false\nconsole.log(str.includes(\"TO BE\"))  \u002F\u002F false\nconsole.log(str.includes(\"\"))  \u002F\u002F true\n",[251,82881,82882,82893,82916,82935,82955,82977,82996],{"__ignoreMap":174},[254,82883,82884,82886,82888,82890],{"class":256,"line":257},[254,82885,6933],{"class":260},[254,82887,79916],{"class":264},[254,82889,310],{"class":260},[254,82891,82892],{"class":369}," \"To be, or not to be, that is the question.\"\n",[254,82894,82895,82897,82899,82902,82905,82907,82910,82913],{"class":256,"line":175},[254,82896,77673],{"class":264},[254,82898,58388],{"class":2103},[254,82900,82901],{"class":264},"(str.",[254,82903,82904],{"class":2103},"includes",[254,82906,265],{"class":264},[254,82908,82909],{"class":369},"\"To be\"",[254,82911,82912],{"class":264},"))",[254,82914,82915],{"class":323},"  \u002F\u002F true\n",[254,82917,82918,82920,82922,82924,82926,82928,82931,82933],{"class":256,"line":1319},[254,82919,77673],{"class":264},[254,82921,58388],{"class":2103},[254,82923,82901],{"class":264},[254,82925,82904],{"class":2103},[254,82927,265],{"class":264},[254,82929,82930],{"class":369},"\"question\"",[254,82932,82912],{"class":264},[254,82934,82915],{"class":323},[254,82936,82937,82939,82941,82943,82945,82947,82950,82952],{"class":256,"line":1334},[254,82938,77673],{"class":264},[254,82940,58388],{"class":2103},[254,82942,82901],{"class":264},[254,82944,82904],{"class":2103},[254,82946,265],{"class":264},[254,82948,82949],{"class":369},"\"nonexistent\"",[254,82951,82912],{"class":264},[254,82953,82954],{"class":323},"  \u002F\u002F false\n",[254,82956,82957,82959,82961,82963,82965,82967,82969,82971,82973,82975],{"class":256,"line":1340},[254,82958,77673],{"class":264},[254,82960,58388],{"class":2103},[254,82962,82901],{"class":264},[254,82964,82904],{"class":2103},[254,82966,265],{"class":264},[254,82968,82909],{"class":369},[254,82970,12576],{"class":264},[254,82972,482],{"class":313},[254,82974,82912],{"class":264},[254,82976,82954],{"class":323},[254,82978,82979,82981,82983,82985,82987,82989,82992,82994],{"class":256,"line":1354},[254,82980,77673],{"class":264},[254,82982,58388],{"class":2103},[254,82984,82901],{"class":264},[254,82986,82904],{"class":2103},[254,82988,265],{"class":264},[254,82990,82991],{"class":369},"\"TO BE\"",[254,82993,82912],{"class":264},[254,82995,82954],{"class":323},[254,82997,82998,83000,83002,83004,83006,83008,83010,83012],{"class":256,"line":1360},[254,82999,77673],{"class":264},[254,83001,58388],{"class":2103},[254,83003,82901],{"class":264},[254,83005,82904],{"class":2103},[254,83007,265],{"class":264},[254,83009,7793],{"class":369},[254,83011,82912],{"class":264},[254,83013,82915],{"class":323},[23051,83015,83017],{"id":83016},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[245,83019,83021],{"className":53208,"code":83020,"language":53210,"meta":174,"style":174},"\u003Cbody>\n  \u003Cscript>\n    const num = 10\n    \u002F\u002F 强制转换\n    console.log(String(num))\n    \u002F\u002F toString()方法转换\n    console.log(num.toString())\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[251,83022,83023,83031,83039,83044,83049,83054,83059,83064,83072],{"__ignoreMap":174},[254,83024,83025,83027,83029],{"class":256,"line":257},[254,83026,1174],{"class":264},[254,83028,51941],{"class":51441},[254,83030,51448],{"class":264},[254,83032,83033,83035,83037],{"class":256,"line":175},[254,83034,52285],{"class":264},[254,83036,51954],{"class":51441},[254,83038,51448],{"class":264},[254,83040,83041],{"class":256,"line":1319},[254,83042,83043],{"class":264},"    const num = 10\n",[254,83045,83046],{"class":256,"line":1334},[254,83047,83048],{"class":264},"    \u002F\u002F 强制转换\n",[254,83050,83051],{"class":256,"line":1340},[254,83052,83053],{"class":264},"    console.log(String(num))\n",[254,83055,83056],{"class":256,"line":1354},[254,83057,83058],{"class":264},"    \u002F\u002F toString()方法转换\n",[254,83060,83061],{"class":256,"line":1360},[254,83062,83063],{"class":264},"    console.log(num.toString())\n",[254,83065,83066,83068,83070],{"class":256,"line":1451},[254,83067,52558],{"class":264},[254,83069,51954],{"class":51441},[254,83071,51448],{"class":264},[254,83073,83074,83076,83078],{"class":256,"line":1457},[254,83075,51926],{"class":264},[254,83077,51941],{"class":51441},[254,83079,51448],{"class":264},[23051,83081,83083],{"id":83082},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[14,83085,83086],{},[1602,83087],{"alt":174,"src":83088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[245,83090,83092],{"className":50774,"code":83091,"language":50776,"meta":174,"style":174},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv>\u003C\u002Fdiv>\n  \u003Cscript>\n    const gift = '50g的茶叶，清洗球'\n    \u002F\u002F 1.把字符串拆分为数组\n    \u002F\u002F console.log(gift.split(','))\n    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n    const str = gift.split('，').map(item => `\u003Cspan>【赠品】${item}\u003C\u002Fspan>\u003Cbr>`).join('')\n    document.querySelector('div').innerHTML = str\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[251,83093,83094,83104,83118,83122,83130,83144,83164,83176,83184,83188,83196,83208,83216,83228,83233,83238,83243,83290,83306,83314,83322,83326],{"__ignoreMap":174},[254,83095,83096,83098,83100,83102],{"class":256,"line":257},[254,83097,51438],{"class":264},[254,83099,51442],{"class":51441},[254,83101,51445],{"class":2103},[254,83103,51448],{"class":264},[254,83105,83106,83108,83110,83112,83114,83116],{"class":256,"line":175},[254,83107,1174],{"class":264},[254,83109,50776],{"class":51441},[254,83111,51457],{"class":2103},[254,83113,310],{"class":264},[254,83115,51462],{"class":369},[254,83117,51448],{"class":264},[254,83119,83120],{"class":256,"line":1319},[254,83121,2540],{"emptyLinePlaceholder":184},[254,83123,83124,83126,83128],{"class":256,"line":1334},[254,83125,1174],{"class":264},[254,83127,51475],{"class":51441},[254,83129,51448],{"class":264},[254,83131,83132,83134,83136,83138,83140,83142],{"class":256,"line":1340},[254,83133,52285],{"class":264},[254,83135,51485],{"class":51441},[254,83137,51488],{"class":2103},[254,83139,310],{"class":264},[254,83141,51493],{"class":369},[254,83143,51448],{"class":264},[254,83145,83146,83148,83150,83152,83154,83156,83158,83160,83162],{"class":256,"line":1354},[254,83147,52285],{"class":264},[254,83149,51485],{"class":51441},[254,83151,15061],{"class":2103},[254,83153,310],{"class":264},[254,83155,51532],{"class":369},[254,83157,51512],{"class":2103},[254,83159,310],{"class":264},[254,83161,51539],{"class":369},[254,83163,51448],{"class":264},[254,83165,83166,83168,83170,83172,83174],{"class":256,"line":1360},[254,83167,52285],{"class":264},[254,83169,51548],{"class":51441},[254,83171,51551],{"class":264},[254,83173,51548],{"class":51441},[254,83175,51448],{"class":264},[254,83177,83178,83180,83182],{"class":256,"line":1451},[254,83179,51926],{"class":264},[254,83181,51475],{"class":51441},[254,83183,51448],{"class":264},[254,83185,83186],{"class":256,"line":1457},[254,83187,2540],{"emptyLinePlaceholder":184},[254,83189,83190,83192,83194],{"class":256,"line":1469},[254,83191,1174],{"class":264},[254,83193,51941],{"class":51441},[254,83195,51448],{"class":264},[254,83197,83198,83200,83202,83204,83206],{"class":256,"line":1752},[254,83199,52285],{"class":264},[254,83201,51752],{"class":51441},[254,83203,55455],{"class":264},[254,83205,51752],{"class":51441},[254,83207,51448],{"class":264},[254,83209,83210,83212,83214],{"class":256,"line":1757},[254,83211,52285],{"class":264},[254,83213,51954],{"class":51441},[254,83215,51448],{"class":264},[254,83217,83218,83220,83223,83225],{"class":256,"line":1763},[254,83219,11362],{"class":260},[254,83221,83222],{"class":313}," gift",[254,83224,13705],{"class":260},[254,83226,83227],{"class":369}," '50g的茶叶，清洗球'\n",[254,83229,83230],{"class":256,"line":1768},[254,83231,83232],{"class":323},"    \u002F\u002F 1.把字符串拆分为数组\n",[254,83234,83235],{"class":256,"line":1782},[254,83236,83237],{"class":323},"    \u002F\u002F console.log(gift.split(','))\n",[254,83239,83240],{"class":256,"line":1787},[254,83241,83242],{"class":323},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[254,83244,83245,83247,83249,83251,83254,83257,83259,83262,83264,83266,83268,83270,83272,83275,83277,83280,83282,83284,83286,83288],{"class":256,"line":1793},[254,83246,11362],{"class":260},[254,83248,74060],{"class":313},[254,83250,13705],{"class":260},[254,83252,83253],{"class":264}," gift.",[254,83255,83256],{"class":2103},"split",[254,83258,265],{"class":264},[254,83260,83261],{"class":369},"'，'",[254,83263,30967],{"class":264},[254,83265,74185],{"class":2103},[254,83267,265],{"class":264},[254,83269,79936],{"class":5357},[254,83271,79939],{"class":260},[254,83273,83274],{"class":369}," `\u003Cspan>【赠品】${",[254,83276,79936],{"class":264},[254,83278,83279],{"class":369},"}\u003C\u002Fspan>\u003Cbr>`",[254,83281,30967],{"class":264},[254,83283,74364],{"class":2103},[254,83285,265],{"class":264},[254,83287,74369],{"class":369},[254,83289,271],{"class":264},[254,83291,83292,83294,83296,83298,83300,83302,83304],{"class":256,"line":1814},[254,83293,52548],{"class":264},[254,83295,54540],{"class":2103},[254,83297,265],{"class":264},[254,83299,82072],{"class":369},[254,83301,74390],{"class":264},[254,83303,310],{"class":260},[254,83305,74126],{"class":264},[254,83307,83308,83310,83312],{"class":256,"line":1819},[254,83309,52558],{"class":264},[254,83311,51954],{"class":51441},[254,83313,51448],{"class":264},[254,83315,83316,83318,83320],{"class":256,"line":1833},[254,83317,51926],{"class":264},[254,83319,51941],{"class":51441},[254,83321,51448],{"class":264},[254,83323,83324],{"class":256,"line":1838},[254,83325,2540],{"emptyLinePlaceholder":184},[254,83327,83328,83330,83332],{"class":256,"line":1867},[254,83329,51926],{"class":264},[254,83331,50776],{"class":51441},[254,83333,51448],{"class":264},[22139,83335,83337],{"id":83336},"_41054-number","4.10.5.4 Number",[14,83339,83340],{},[1602,83341],{"alt":174,"src":83342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[14,83344,83345],{},"整数也可以进行toFixed来保留小数",[14,83347,83348],{},"比如：",[14,83350,83351],{},"const price=10",[14,83353,83354],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[22139,83356,83358],{"id":83357},"_41055-购物车展示","4.10.5.5 购物车展示",[14,83360,83361],{},[1602,83362],{"alt":174,"src":83363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[245,83365,83367],{"className":50774,"code":83366,"language":50776,"meta":174,"style":174},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      padding: 0;\n      margin: 0;\n      box-sizing: border-box;\n    }\n\n    .list {\n      width: 990px;\n      margin: 100px auto;\n    }\n\n    .item {\n      padding: 15px;\n      transition: all ease .5s;\n      display: flex;\n      border: 1px solid #e4e4e4;\n    }\n\n    .item:hover {\n      cursor: pointer;\n      background-color: #f5f5f5;\n    }\n\n    .item img {\n      width: 80px;\n      height: 80px;\n      margin-right: 5px;\n    }\n\n    .item .name {\n      width: 200px;\n    }\n\n    .item .name .tag {\n      display: block;\n      padding: 2px;\n      font-size: 12px;\n      color: #999;\n    }\n\n    .item .price,\n    .item .sub-total {\n      font-size: 18px;\n      color: firebrick;\n      flex: 1;\n    }\n\n    .item .price::before,\n    .item .sub-total::before,\n    .amount::before {\n      content: '￥';\n      font-size: 12px;\n    }\n\n    .item .spec {\n      flex: 2;\n      color: #888;\n      font-size: 14px;\n      margin-left: 20px;\n    }\n\n    .item .count {\n      flex: 1;\n      color: #aaa;\n    }\n\n    .total {\n      width: 990px;\n      margin: 0 auto;\n      display: flex;\n      justify-content: flex-end;\n      border-top: 1px solid #4e4e4e;\n      padding: 20px;\n    }\n\n    .total .amount {\n      font-size: 18px;\n      color: firebrick;\n      font-weight: 700;\n      margin-right: 50px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"list\">\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"total\">\n    \u003Cdiv>合计：\u003Cspan class=\"amount\">\u003C\u002Fspan>\u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    const goodsList = [\n      {\n        id: '4001172',\n        name: '称心如意手摇咖啡磨豆机咖啡豆研磨机',\n        price: 289.9,\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg',\n        count: 2,\n        spec: { color: '白色' }\n      },\n      {\n        id: '4001009',\n        name: '竹制干泡茶盘正方形沥水茶台品茶盘',\n        price: 109.8,\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png',\n        count: 3,\n        spec: { size: '40cm*40cm', color: '黑色' }\n      },\n      {\n        id: '4001874',\n        name: '古法温酒汝瓷酒具套装白酒杯莲花温酒器',\n        price: 488,\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png',\n        count: 1,\n        spec: { color: '青色', sum: '一大四小' }\n      },\n      {\n        id: '4001649',\n        name: '大师监制龙泉青瓷茶叶罐',\n        price: 139,\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png',\n        count: 1,\n        spec: { size: '小号', color: '紫色' },\n        gift: '50g茶叶,清洗球'\n      }\n    ]\n    \u002F\u002F  1.根据数据渲染页面\n    document.querySelector('.list').innerHTML = goodsList.map(item => {\n      \u002F\u002F 对象解构\n      const { picture, name, count, price, spec, gift } = item\n      \u002F\u002F 规格文字模块处理\n      const text = Object.values(spec).join('\u002F')\n      \u002F\u002F 处理赠品模块\n      const str = gift ? gift.split(',').map(item => `\u003Cspan class=\"tag\">【赠品】${item}\u003C\u002Fspan>`).join('') : ''\n      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n      const subtotal = ((price * 100 * count) \u002F 100).toFixed(2)\n\n      return `\n        \u003Cdiv class=\"item\">\n          \u003Cimg src=\"${picture}\" alt=\"\">\n          \u003Cp class=\"name\">${name}${str}\u003C\u002Fp>\n          \u003Cp class=\"spec\">${text}\u003C\u002Fp>\n          \u003Cp class=\"price\">${price.toFixed(2)}\u003C\u002Fp>\n          \u003Cp class=\"count\">x${count}\u003C\u002Fp>\n          \u003Cp class=\"sub-total\">${subtotal}\u003C\u002Fp>\n        \u003C\u002Fdiv> \n             `\n    }).join('')\n    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n    const total = goodsList.reduce((prev, item) => prev + (item.price * 100 * item.count) \u002F 100, 0)\n    document.querySelector('.amount').innerHTML = total.toFixed(2)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[251,83368,83369,83379,83393,83397,83405,83419,83439,83451,83459,83465,83475,83485,83495,83499,83503,83509,83521,83535,83539,83543,83549,83561,83577,83587,83603,83607,83611,83617,83627,83637,83641,83645,83653,83665,83677,83689,83693,83697,83705,83717,83721,83725,83736,83746,83758,83770,83780,83784,83788,83796,83805,83817,83827,83837,83841,83845,83853,83862,83869,83879,83891,83895,83899,83908,83918,83929,83941,83953,83957,83961,83970,83980,83991,83995,83999,84005,84017,84029,84039,84049,84067,84079,84083,84087,84096,84108,84118,84128,84140,84144,84152,84160,84164,84172,84186,84194,84208,84236,84244,84252,84262,84266,84274,84282,84291,84299,84308,84318,84322,84326,84334,84342,84351,84359,84367,84380,84384,84388,84396,84404,84413,84421,84429,84444,84448,84452,84460,84468,84477,84485,84493,84507,84515,84519,84523,84528,84554,84559,84596,84601,84624,84629,84683,84688,84724,84728,84734,84739,84748,84762,84771,84790,84799,84809,84814,84819,84832,84837,84891,84917,84925,84933,84937],{"__ignoreMap":174},[254,83370,83371,83373,83375,83377],{"class":256,"line":257},[254,83372,51438],{"class":264},[254,83374,51442],{"class":51441},[254,83376,51445],{"class":2103},[254,83378,51448],{"class":264},[254,83380,83381,83383,83385,83387,83389,83391],{"class":256,"line":175},[254,83382,1174],{"class":264},[254,83384,50776],{"class":51441},[254,83386,51457],{"class":2103},[254,83388,310],{"class":264},[254,83390,51462],{"class":369},[254,83392,51448],{"class":264},[254,83394,83395],{"class":256,"line":1319},[254,83396,2540],{"emptyLinePlaceholder":184},[254,83398,83399,83401,83403],{"class":256,"line":1334},[254,83400,1174],{"class":264},[254,83402,51475],{"class":51441},[254,83404,51448],{"class":264},[254,83406,83407,83409,83411,83413,83415,83417],{"class":256,"line":1340},[254,83408,52285],{"class":264},[254,83410,51485],{"class":51441},[254,83412,51488],{"class":2103},[254,83414,310],{"class":264},[254,83416,51493],{"class":369},[254,83418,51448],{"class":264},[254,83420,83421,83423,83425,83427,83429,83431,83433,83435,83437],{"class":256,"line":1354},[254,83422,52285],{"class":264},[254,83424,51485],{"class":51441},[254,83426,15061],{"class":2103},[254,83428,310],{"class":264},[254,83430,51532],{"class":369},[254,83432,51512],{"class":2103},[254,83434,310],{"class":264},[254,83436,51539],{"class":369},[254,83438,51448],{"class":264},[254,83440,83441,83443,83445,83447,83449],{"class":256,"line":1360},[254,83442,52285],{"class":264},[254,83444,51548],{"class":51441},[254,83446,51551],{"class":264},[254,83448,51548],{"class":51441},[254,83450,51448],{"class":264},[254,83452,83453,83455,83457],{"class":256,"line":1451},[254,83454,52285],{"class":264},[254,83456,5267],{"class":51441},[254,83458,51448],{"class":264},[254,83460,83461,83463],{"class":256,"line":1457},[254,83462,6544],{"class":51441},[254,83464,15713],{"class":264},[254,83466,83467,83469,83471,83473],{"class":256,"line":1469},[254,83468,54836],{"class":313},[254,83470,51578],{"class":264},[254,83472,456],{"class":313},[254,83474,1430],{"class":264},[254,83476,83477,83479,83481,83483],{"class":256,"line":1752},[254,83478,54847],{"class":313},[254,83480,51578],{"class":264},[254,83482,456],{"class":313},[254,83484,1430],{"class":264},[254,83486,83487,83489,83491,83493],{"class":256,"line":1757},[254,83488,72737],{"class":313},[254,83490,51578],{"class":264},[254,83492,60646],{"class":313},[254,83494,1430],{"class":264},[254,83496,83497],{"class":256,"line":1763},[254,83498,2327],{"class":264},[254,83500,83501],{"class":256,"line":1768},[254,83502,2540],{"emptyLinePlaceholder":184},[254,83504,83505,83507],{"class":256,"line":1782},[254,83506,62264],{"class":2103},[254,83508,15713],{"class":264},[254,83510,83511,83513,83515,83517,83519],{"class":256,"line":1787},[254,83512,54912],{"class":313},[254,83514,51578],{"class":264},[254,83516,78715],{"class":313},[254,83518,51633],{"class":260},[254,83520,1430],{"class":264},[254,83522,83523,83525,83527,83529,83531,83533],{"class":256,"line":1793},[254,83524,54847],{"class":313},[254,83526,51578],{"class":264},[254,83528,575],{"class":313},[254,83530,51633],{"class":260},[254,83532,51697],{"class":313},[254,83534,1430],{"class":264},[254,83536,83537],{"class":256,"line":1814},[254,83538,2327],{"class":264},[254,83540,83541],{"class":256,"line":1819},[254,83542,2540],{"emptyLinePlaceholder":184},[254,83544,83545,83547],{"class":256,"line":1833},[254,83546,78766],{"class":2103},[254,83548,15713],{"class":264},[254,83550,83551,83553,83555,83557,83559],{"class":256,"line":1838},[254,83552,54836],{"class":313},[254,83554,51578],{"class":264},[254,83556,839],{"class":313},[254,83558,51633],{"class":260},[254,83560,1430],{"class":264},[254,83562,83563,83565,83567,83569,83571,83573,83575],{"class":256,"line":1867},[254,83564,62001],{"class":313},[254,83566,51578],{"class":264},[254,83568,28262],{"class":313},[254,83570,78821],{"class":313},[254,83572,78824],{"class":313},[254,83574,959],{"class":260},[254,83576,1430],{"class":264},[254,83578,83579,83581,83583,83585],{"class":256,"line":1872},[254,83580,55150],{"class":313},[254,83582,51578],{"class":264},[254,83584,51618],{"class":313},[254,83586,1430],{"class":264},[254,83588,83589,83591,83593,83595,83597,83599,83601],{"class":256,"line":1889},[254,83590,62118],{"class":313},[254,83592,51578],{"class":264},[254,83594,482],{"class":313},[254,83596,51633],{"class":260},[254,83598,51662],{"class":313},[254,83600,62385],{"class":313},[254,83602,1430],{"class":264},[254,83604,83605],{"class":256,"line":1894},[254,83606,2327],{"class":264},[254,83608,83609],{"class":256,"line":1899},[254,83610,2540],{"emptyLinePlaceholder":184},[254,83612,83613,83615],{"class":256,"line":1904},[254,83614,78884],{"class":2103},[254,83616,15713],{"class":264},[254,83618,83619,83621,83623,83625],{"class":256,"line":1918},[254,83620,62166],{"class":313},[254,83622,51578],{"class":264},[254,83624,62171],{"class":313},[254,83626,1430],{"class":264},[254,83628,83629,83631,83633,83635],{"class":256,"line":1923},[254,83630,55025],{"class":313},[254,83632,51578],{"class":264},[254,83634,61959],{"class":313},[254,83636,1430],{"class":264},[254,83638,83639],{"class":256,"line":2717},[254,83640,2327],{"class":264},[254,83642,83643],{"class":256,"line":2731},[254,83644,2540],{"emptyLinePlaceholder":184},[254,83646,83647,83649,83651],{"class":256,"line":2739},[254,83648,78766],{"class":2103},[254,83650,55756],{"class":51441},[254,83652,15713],{"class":264},[254,83654,83655,83657,83659,83661,83663],{"class":256,"line":2744},[254,83656,54912],{"class":313},[254,83658,51578],{"class":264},[254,83660,876],{"class":313},[254,83662,51633],{"class":260},[254,83664,1430],{"class":264},[254,83666,83667,83669,83671,83673,83675],{"class":256,"line":2750},[254,83668,54926],{"class":313},[254,83670,51578],{"class":264},[254,83672,876],{"class":313},[254,83674,51633],{"class":260},[254,83676,1430],{"class":264},[254,83678,83679,83681,83683,83685,83687],{"class":256,"line":2756},[254,83680,61891],{"class":313},[254,83682,51578],{"class":264},[254,83684,583],{"class":313},[254,83686,51633],{"class":260},[254,83688,1430],{"class":264},[254,83690,83691],{"class":256,"line":2761},[254,83692,2327],{"class":264},[254,83694,83695],{"class":256,"line":8089},[254,83696,2540],{"emptyLinePlaceholder":184},[254,83698,83699,83701,83703],{"class":256,"line":8113},[254,83700,78766],{"class":2103},[254,83702,62445],{"class":2103},[254,83704,15713],{"class":264},[254,83706,83707,83709,83711,83713,83715],{"class":256,"line":8118},[254,83708,54912],{"class":313},[254,83710,51578],{"class":264},[254,83712,1862],{"class":313},[254,83714,51633],{"class":260},[254,83716,1430],{"class":264},[254,83718,83719],{"class":256,"line":8124},[254,83720,2327],{"class":264},[254,83722,83723],{"class":256,"line":8151},[254,83724,2540],{"emptyLinePlaceholder":184},[254,83726,83727,83729,83731,83734],{"class":256,"line":8156},[254,83728,78766],{"class":2103},[254,83730,62445],{"class":2103},[254,83732,83733],{"class":2103}," .tag",[254,83735,15713],{"class":264},[254,83737,83738,83740,83742,83744],{"class":256,"line":8162},[254,83739,55150],{"class":313},[254,83741,51578],{"class":264},[254,83743,61010],{"class":313},[254,83745,1430],{"class":264},[254,83747,83748,83750,83752,83754,83756],{"class":256,"line":8174},[254,83749,54836],{"class":313},[254,83751,51578],{"class":264},[254,83753,342],{"class":313},[254,83755,51633],{"class":260},[254,83757,1430],{"class":264},[254,83759,83760,83762,83764,83766,83768],{"class":256,"line":8186},[254,83761,55063],{"class":313},[254,83763,51578],{"class":264},[254,83765,762],{"class":313},[254,83767,51633],{"class":260},[254,83769,1430],{"class":264},[254,83771,83772,83774,83776,83778],{"class":256,"line":8198},[254,83773,57557],{"class":313},[254,83775,51578],{"class":264},[254,83777,62211],{"class":313},[254,83779,1430],{"class":264},[254,83781,83782],{"class":256,"line":9857},[254,83783,2327],{"class":264},[254,83785,83786],{"class":256,"line":9882},[254,83787,2540],{"emptyLinePlaceholder":184},[254,83789,83790,83792,83794],{"class":256,"line":9905},[254,83791,78766],{"class":2103},[254,83793,79058],{"class":2103},[254,83795,31607],{"class":264},[254,83797,83798,83800,83803],{"class":256,"line":9929},[254,83799,78766],{"class":2103},[254,83801,83802],{"class":2103}," .sub-total",[254,83804,15713],{"class":264},[254,83806,83807,83809,83811,83813,83815],{"class":256,"line":9934},[254,83808,55063],{"class":313},[254,83810,51578],{"class":264},[254,83812,914],{"class":313},[254,83814,51633],{"class":260},[254,83816,1430],{"class":264},[254,83818,83819,83821,83823,83825],{"class":256,"line":9939},[254,83820,57557],{"class":313},[254,83822,51578],{"class":264},[254,83824,79081],{"class":313},[254,83826,1430],{"class":264},[254,83828,83829,83831,83833,83835],{"class":256,"line":9944},[254,83830,61978],{"class":313},[254,83832,51578],{"class":264},[254,83834,482],{"class":313},[254,83836,1430],{"class":264},[254,83838,83839],{"class":256,"line":9953},[254,83840,2327],{"class":264},[254,83842,83843],{"class":256,"line":9958},[254,83844,2540],{"emptyLinePlaceholder":184},[254,83846,83847,83849,83851],{"class":256,"line":9964},[254,83848,78766],{"class":2103},[254,83850,79098],{"class":2103},[254,83852,31607],{"class":264},[254,83854,83855,83857,83860],{"class":256,"line":9985},[254,83856,78766],{"class":2103},[254,83858,83859],{"class":2103}," .sub-total::before",[254,83861,31607],{"class":264},[254,83863,83864,83867],{"class":256,"line":9991},[254,83865,83866],{"class":2103},"    .amount::before",[254,83868,15713],{"class":264},[254,83870,83871,83873,83875,83877],{"class":256,"line":10005},[254,83872,79105],{"class":313},[254,83874,51578],{"class":264},[254,83876,79110],{"class":369},[254,83878,1430],{"class":264},[254,83880,83881,83883,83885,83887,83889],{"class":256,"line":10011},[254,83882,55063],{"class":313},[254,83884,51578],{"class":264},[254,83886,762],{"class":313},[254,83888,51633],{"class":260},[254,83890,1430],{"class":264},[254,83892,83893],{"class":256,"line":10038},[254,83894,2327],{"class":264},[254,83896,83897],{"class":256,"line":10047},[254,83898,2540],{"emptyLinePlaceholder":184},[254,83900,83901,83903,83906],{"class":256,"line":10053},[254,83902,78766],{"class":2103},[254,83904,83905],{"class":2103}," .spec",[254,83907,15713],{"class":264},[254,83909,83910,83912,83914,83916],{"class":256,"line":10061},[254,83911,61978],{"class":313},[254,83913,51578],{"class":264},[254,83915,342],{"class":313},[254,83917,1430],{"class":264},[254,83919,83920,83922,83924,83927],{"class":256,"line":10066},[254,83921,57557],{"class":313},[254,83923,51578],{"class":264},[254,83925,83926],{"class":313},"#888",[254,83928,1430],{"class":264},[254,83930,83931,83933,83935,83937,83939],{"class":256,"line":16745},[254,83932,55063],{"class":313},[254,83934,51578],{"class":264},[254,83936,813],{"class":313},[254,83938,51633],{"class":260},[254,83940,1430],{"class":264},[254,83942,83943,83945,83947,83949,83951],{"class":256,"line":16751},[254,83944,62141],{"class":313},[254,83946,51578],{"class":264},[254,83948,964],{"class":313},[254,83950,51633],{"class":260},[254,83952,1430],{"class":264},[254,83954,83955],{"class":256,"line":16774},[254,83956,2327],{"class":264},[254,83958,83959],{"class":256,"line":16780},[254,83960,2540],{"emptyLinePlaceholder":184},[254,83962,83963,83965,83968],{"class":256,"line":16803},[254,83964,78766],{"class":2103},[254,83966,83967],{"class":2103}," .count",[254,83969,15713],{"class":264},[254,83971,83972,83974,83976,83978],{"class":256,"line":16817},[254,83973,61978],{"class":313},[254,83975,51578],{"class":264},[254,83977,482],{"class":313},[254,83979,1430],{"class":264},[254,83981,83982,83984,83986,83989],{"class":256,"line":16837},[254,83983,57557],{"class":313},[254,83985,51578],{"class":264},[254,83987,83988],{"class":313},"#aaa",[254,83990,1430],{"class":264},[254,83992,83993],{"class":256,"line":16843},[254,83994,2327],{"class":264},[254,83996,83997],{"class":256,"line":16854},[254,83998,2540],{"emptyLinePlaceholder":184},[254,84000,84001,84003],{"class":256,"line":16877},[254,84002,72616],{"class":2103},[254,84004,15713],{"class":264},[254,84006,84007,84009,84011,84013,84015],{"class":256,"line":16899},[254,84008,54912],{"class":313},[254,84010,51578],{"class":264},[254,84012,78715],{"class":313},[254,84014,51633],{"class":260},[254,84016,1430],{"class":264},[254,84018,84019,84021,84023,84025,84027],{"class":256,"line":16904},[254,84020,54847],{"class":313},[254,84022,51578],{"class":264},[254,84024,456],{"class":313},[254,84026,51697],{"class":313},[254,84028,1430],{"class":264},[254,84030,84031,84033,84035,84037],{"class":256,"line":16910},[254,84032,55150],{"class":313},[254,84034,51578],{"class":264},[254,84036,51618],{"class":313},[254,84038,1430],{"class":264},[254,84040,84041,84043,84045,84047],{"class":256,"line":16924},[254,84042,55161],{"class":313},[254,84044,51578],{"class":264},[254,84046,51721],{"class":313},[254,84048,1430],{"class":264},[254,84050,84051,84054,84056,84058,84060,84062,84065],{"class":256,"line":16937},[254,84052,84053],{"class":313},"      border-top",[254,84055,51578],{"class":264},[254,84057,482],{"class":313},[254,84059,51633],{"class":260},[254,84061,51662],{"class":313},[254,84063,84064],{"class":313}," #4e4e4e",[254,84066,1430],{"class":264},[254,84068,84069,84071,84073,84075,84077],{"class":256,"line":16942},[254,84070,54836],{"class":313},[254,84072,51578],{"class":264},[254,84074,964],{"class":313},[254,84076,51633],{"class":260},[254,84078,1430],{"class":264},[254,84080,84081],{"class":256,"line":16956},[254,84082,2327],{"class":264},[254,84084,84085],{"class":256,"line":16961},[254,84086,2540],{"emptyLinePlaceholder":184},[254,84088,84089,84091,84094],{"class":256,"line":16967},[254,84090,72616],{"class":2103},[254,84092,84093],{"class":2103}," .amount",[254,84095,15713],{"class":264},[254,84097,84098,84100,84102,84104,84106],{"class":256,"line":16972},[254,84099,55063],{"class":313},[254,84101,51578],{"class":264},[254,84103,914],{"class":313},[254,84105,51633],{"class":260},[254,84107,1430],{"class":264},[254,84109,84110,84112,84114,84116],{"class":256,"line":16986},[254,84111,57557],{"class":313},[254,84113,51578],{"class":264},[254,84115,79081],{"class":313},[254,84117,1430],{"class":264},[254,84119,84120,84122,84124,84126],{"class":256,"line":16991},[254,84121,62475],{"class":313},[254,84123,51578],{"class":264},[254,84125,51630],{"class":313},[254,84127,1430],{"class":264},[254,84129,84130,84132,84134,84136,84138],{"class":256,"line":16996},[254,84131,61891],{"class":313},[254,84133,51578],{"class":264},[254,84135,920],{"class":313},[254,84137,51633],{"class":260},[254,84139,1430],{"class":264},[254,84141,84142],{"class":256,"line":17010},[254,84143,2327],{"class":264},[254,84145,84146,84148,84150],{"class":256,"line":17022},[254,84147,52558],{"class":264},[254,84149,5267],{"class":51441},[254,84151,51448],{"class":264},[254,84153,84154,84156,84158],{"class":256,"line":17027},[254,84155,51926],{"class":264},[254,84157,51475],{"class":51441},[254,84159,51448],{"class":264},[254,84161,84162],{"class":256,"line":17040},[254,84163,2540],{"emptyLinePlaceholder":184},[254,84165,84166,84168,84170],{"class":256,"line":17045},[254,84167,1174],{"class":264},[254,84169,51941],{"class":51441},[254,84171,51448],{"class":264},[254,84173,84174,84176,84178,84180,84182,84184],{"class":256,"line":17050},[254,84175,52285],{"class":264},[254,84177,51752],{"class":51441},[254,84179,53627],{"class":2103},[254,84181,310],{"class":264},[254,84183,62749],{"class":369},[254,84185,51448],{"class":264},[254,84187,84188,84190,84192],{"class":256,"line":17055},[254,84189,52558],{"class":264},[254,84191,51752],{"class":51441},[254,84193,51448],{"class":264},[254,84195,84196,84198,84200,84202,84204,84206],{"class":256,"line":17068},[254,84197,52285],{"class":264},[254,84199,51752],{"class":51441},[254,84201,53627],{"class":2103},[254,84203,310],{"class":264},[254,84205,62721],{"class":369},[254,84207,51448],{"class":264},[254,84209,84210,84212,84214,84217,84219,84221,84223,84226,84228,84230,84232,84234],{"class":256,"line":17073},[254,84211,51482],{"class":264},[254,84213,51752],{"class":51441},[254,84215,84216],{"class":264},">合计：\u003C",[254,84218,254],{"class":51441},[254,84220,53627],{"class":2103},[254,84222,310],{"class":264},[254,84224,84225],{"class":369},"\"amount\"",[254,84227,55455],{"class":264},[254,84229,254],{"class":51441},[254,84231,55455],{"class":264},[254,84233,51752],{"class":51441},[254,84235,51448],{"class":264},[254,84237,84238,84240,84242],{"class":256,"line":32774},[254,84239,52558],{"class":264},[254,84241,51752],{"class":51441},[254,84243,51448],{"class":264},[254,84245,84246,84248,84250],{"class":256,"line":32780},[254,84247,52285],{"class":264},[254,84249,51954],{"class":51441},[254,84251,51448],{"class":264},[254,84253,84254,84256,84258,84260],{"class":256,"line":32786},[254,84255,11362],{"class":260},[254,84257,79518],{"class":313},[254,84259,13705],{"class":260},[254,84261,55588],{"class":264},[254,84263,84264],{"class":256,"line":32792},[254,84265,79527],{"class":264},[254,84267,84268,84270,84272],{"class":256,"line":32798},[254,84269,79532],{"class":264},[254,84271,79535],{"class":369},[254,84273,31607],{"class":264},[254,84275,84276,84278,84280],{"class":256,"line":32809},[254,84277,79542],{"class":264},[254,84279,79545],{"class":369},[254,84281,31607],{"class":264},[254,84283,84284,84286,84289],{"class":256,"line":32815},[254,84285,79552],{"class":264},[254,84287,84288],{"class":313},"289.9",[254,84290,31607],{"class":264},[254,84292,84293,84295,84297],{"class":256,"line":32835},[254,84294,79562],{"class":264},[254,84296,79565],{"class":369},[254,84298,31607],{"class":264},[254,84300,84301,84304,84306],{"class":256,"line":32841},[254,84302,84303],{"class":264},"        count: ",[254,84305,342],{"class":313},[254,84307,31607],{"class":264},[254,84309,84310,84313,84316],{"class":256,"line":32852},[254,84311,84312],{"class":264},"        spec: { color: ",[254,84314,84315],{"class":369},"'白色'",[254,84317,55745],{"class":264},[254,84319,84320],{"class":256,"line":32858},[254,84321,78033],{"class":264},[254,84323,84324],{"class":256,"line":32864},[254,84325,79527],{"class":264},[254,84327,84328,84330,84332],{"class":256,"line":32870},[254,84329,79532],{"class":264},[254,84331,79626],{"class":369},[254,84333,31607],{"class":264},[254,84335,84336,84338,84340],{"class":256,"line":32876},[254,84337,79542],{"class":264},[254,84339,79635],{"class":369},[254,84341,31607],{"class":264},[254,84343,84344,84346,84349],{"class":256,"line":32882},[254,84345,79552],{"class":264},[254,84347,84348],{"class":313},"109.8",[254,84350,31607],{"class":264},[254,84352,84353,84355,84357],{"class":256,"line":32888},[254,84354,79562],{"class":264},[254,84356,79653],{"class":369},[254,84358,31607],{"class":264},[254,84360,84361,84363,84365],{"class":256,"line":32894},[254,84362,84303],{"class":264},[254,84364,336],{"class":313},[254,84366,31607],{"class":264},[254,84368,84369,84372,84374,84376,84378],{"class":256,"line":32914},[254,84370,84371],{"class":264},"        spec: { size: ",[254,84373,82044],{"class":369},[254,84375,55605],{"class":264},[254,84377,82049],{"class":369},[254,84379,55745],{"class":264},[254,84381,84382],{"class":256,"line":32920},[254,84383,78033],{"class":264},[254,84385,84386],{"class":256,"line":32936},[254,84387,79527],{"class":264},[254,84389,84390,84392,84394],{"class":256,"line":32942},[254,84391,79532],{"class":264},[254,84393,79670],{"class":369},[254,84395,31607],{"class":264},[254,84397,84398,84400,84402],{"class":256,"line":32956},[254,84399,79542],{"class":264},[254,84401,79679],{"class":369},[254,84403,31607],{"class":264},[254,84405,84406,84408,84411],{"class":256,"line":32962},[254,84407,79552],{"class":264},[254,84409,84410],{"class":313},"488",[254,84412,31607],{"class":264},[254,84414,84415,84417,84419],{"class":256,"line":32977},[254,84416,79562],{"class":264},[254,84418,79697],{"class":369},[254,84420,31607],{"class":264},[254,84422,84423,84425,84427],{"class":256,"line":32983},[254,84424,84303],{"class":264},[254,84426,482],{"class":313},[254,84428,31607],{"class":264},[254,84430,84431,84433,84436,84439,84442],{"class":256,"line":32992},[254,84432,84312],{"class":264},[254,84434,84435],{"class":369},"'青色'",[254,84437,84438],{"class":264},", sum: ",[254,84440,84441],{"class":369},"'一大四小'",[254,84443,55745],{"class":264},[254,84445,84446],{"class":256,"line":32998},[254,84447,78033],{"class":264},[254,84449,84450],{"class":256,"line":33007},[254,84451,79527],{"class":264},[254,84453,84454,84456,84458],{"class":256,"line":33013},[254,84455,79532],{"class":264},[254,84457,79714],{"class":369},[254,84459,31607],{"class":264},[254,84461,84462,84464,84466],{"class":256,"line":33019},[254,84463,79542],{"class":264},[254,84465,79723],{"class":369},[254,84467,31607],{"class":264},[254,84469,84470,84472,84475],{"class":256,"line":33028},[254,84471,79552],{"class":264},[254,84473,84474],{"class":313},"139",[254,84476,31607],{"class":264},[254,84478,84479,84481,84483],{"class":256,"line":33034},[254,84480,79562],{"class":264},[254,84482,79741],{"class":369},[254,84484,31607],{"class":264},[254,84486,84487,84489,84491],{"class":256,"line":33045},[254,84488,84303],{"class":264},[254,84490,482],{"class":313},[254,84492,31607],{"class":264},[254,84494,84495,84497,84500,84502,84505],{"class":256,"line":33051},[254,84496,84371],{"class":264},[254,84498,84499],{"class":369},"'小号'",[254,84501,55605],{"class":264},[254,84503,84504],{"class":369},"'紫色'",[254,84506,55611],{"class":264},[254,84508,84509,84512],{"class":256,"line":33070},[254,84510,84511],{"class":264},"        gift: ",[254,84513,84514],{"class":369},"'50g茶叶,清洗球'\n",[254,84516,84517],{"class":256,"line":33076},[254,84518,52539],{"class":264},[254,84520,84521],{"class":256,"line":33087},[254,84522,53250],{"class":264},[254,84524,84525],{"class":256,"line":33093},[254,84526,84527],{"class":323},"    \u002F\u002F  1.根据数据渲染页面\n",[254,84529,84530,84532,84534,84536,84538,84540,84542,84544,84546,84548,84550,84552],{"class":256,"line":33113},[254,84531,52548],{"class":264},[254,84533,54540],{"class":2103},[254,84535,265],{"class":264},[254,84537,80042],{"class":369},[254,84539,74390],{"class":264},[254,84541,310],{"class":260},[254,84543,80189],{"class":264},[254,84545,74185],{"class":2103},[254,84547,265],{"class":264},[254,84549,79936],{"class":5357},[254,84551,79939],{"class":260},[254,84553,15713],{"class":264},[254,84555,84556],{"class":256,"line":33129},[254,84557,84558],{"class":323},"      \u002F\u002F 对象解构\n",[254,84560,84561,84563,84565,84567,84569,84571,84573,84576,84578,84580,84582,84585,84587,84590,84592,84594],{"class":256,"line":33135},[254,84562,58369],{"class":260},[254,84564,79948],{"class":264},[254,84566,79961],{"class":313},[254,84568,12576],{"class":264},[254,84570,79951],{"class":313},[254,84572,12576],{"class":264},[254,84574,84575],{"class":313},"count",[254,84577,12576],{"class":264},[254,84579,79956],{"class":313},[254,84581,12576],{"class":264},[254,84583,84584],{"class":313},"spec",[254,84586,12576],{"class":264},[254,84588,84589],{"class":313},"gift",[254,84591,79964],{"class":264},[254,84593,310],{"class":260},[254,84595,79969],{"class":264},[254,84597,84598],{"class":256,"line":33149},[254,84599,84600],{"class":323},"      \u002F\u002F 规格文字模块处理\n",[254,84602,84603,84605,84608,84610,84612,84614,84616,84618,84620,84622],{"class":256,"line":33155},[254,84604,58369],{"class":260},[254,84606,84607],{"class":313}," text",[254,84609,13705],{"class":260},[254,84611,82079],{"class":264},[254,84613,82082],{"class":2103},[254,84615,82085],{"class":264},[254,84617,74364],{"class":2103},[254,84619,265],{"class":264},[254,84621,82092],{"class":369},[254,84623,271],{"class":264},[254,84625,84626],{"class":256,"line":33161},[254,84627,84628],{"class":323},"      \u002F\u002F 处理赠品模块\n",[254,84630,84631,84633,84635,84637,84640,84642,84644,84646,84648,84651,84653,84655,84657,84659,84661,84664,84666,84669,84671,84673,84675,84677,84679,84681],{"class":256,"line":33172},[254,84632,58369],{"class":260},[254,84634,74060],{"class":313},[254,84636,13705],{"class":260},[254,84638,84639],{"class":264}," gift ",[254,84641,1250],{"class":260},[254,84643,83253],{"class":264},[254,84645,83256],{"class":2103},[254,84647,265],{"class":264},[254,84649,84650],{"class":369},"','",[254,84652,30967],{"class":264},[254,84654,74185],{"class":2103},[254,84656,265],{"class":264},[254,84658,79936],{"class":5357},[254,84660,79939],{"class":260},[254,84662,84663],{"class":369}," `\u003Cspan class=\"tag\">【赠品】${",[254,84665,79936],{"class":264},[254,84667,84668],{"class":369},"}\u003C\u002Fspan>`",[254,84670,30967],{"class":264},[254,84672,74364],{"class":2103},[254,84674,265],{"class":264},[254,84676,74369],{"class":369},[254,84678,13855],{"class":264},[254,84680,1123],{"class":260},[254,84682,70245],{"class":369},[254,84684,84685],{"class":256,"line":33178},[254,84686,84687],{"class":323},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[254,84689,84690,84692,84695,84697,84700,84702,84704,84706,84709,84711,84713,84715,84718,84720,84722],{"class":256,"line":33184},[254,84691,58369],{"class":260},[254,84693,84694],{"class":313}," subtotal",[254,84696,13705],{"class":260},[254,84698,84699],{"class":264}," ((price ",[254,84701,719],{"class":260},[254,84703,5895],{"class":313},[254,84705,6659],{"class":260},[254,84707,84708],{"class":264}," count) ",[254,84710,848],{"class":260},[254,84712,5895],{"class":313},[254,84714,30967],{"class":264},[254,84716,84717],{"class":2103},"toFixed",[254,84719,265],{"class":264},[254,84721,342],{"class":313},[254,84723,271],{"class":264},[254,84725,84726],{"class":256,"line":33194},[254,84727,2540],{"emptyLinePlaceholder":184},[254,84729,84730,84732],{"class":256,"line":33200},[254,84731,74123],{"class":260},[254,84733,70309],{"class":369},[254,84735,84736],{"class":256,"line":33211},[254,84737,84738],{"class":369},"        \u003Cdiv class=\"item\">\n",[254,84740,84741,84744,84746],{"class":256,"line":33217},[254,84742,84743],{"class":369},"          \u003Cimg src=\"${",[254,84745,79961],{"class":264},[254,84747,79993],{"class":369},[254,84749,84750,84753,84755,84758,84760],{"class":256,"line":33227},[254,84751,84752],{"class":369},"          \u003Cp class=\"name\">${",[254,84754,79951],{"class":264},[254,84756,84757],{"class":369},"}${",[254,84759,1439],{"class":264},[254,84761,80003],{"class":369},[254,84763,84764,84767,84769],{"class":256,"line":33232},[254,84765,84766],{"class":369},"          \u003Cp class=\"spec\">${",[254,84768,5328],{"class":264},[254,84770,80003],{"class":369},[254,84772,84773,84776,84778,84780,84782,84784,84786,84788],{"class":256,"line":33238},[254,84774,84775],{"class":369},"          \u003Cp class=\"price\">${",[254,84777,79956],{"class":264},[254,84779,822],{"class":369},[254,84781,84717],{"class":2103},[254,84783,265],{"class":369},[254,84785,342],{"class":313},[254,84787,693],{"class":369},[254,84789,80003],{"class":369},[254,84791,84792,84795,84797],{"class":256,"line":33287},[254,84793,84794],{"class":369},"          \u003Cp class=\"count\">x${",[254,84796,84575],{"class":264},[254,84798,80003],{"class":369},[254,84800,84801,84804,84807],{"class":256,"line":33334},[254,84802,84803],{"class":369},"          \u003Cp class=\"sub-total\">${",[254,84805,84806],{"class":264},"subtotal",[254,84808,80003],{"class":369},[254,84810,84811],{"class":256,"line":33339},[254,84812,84813],{"class":369},"        \u003C\u002Fdiv> \n",[254,84815,84816],{"class":256,"line":33345},[254,84817,84818],{"class":369},"             `\n",[254,84820,84821,84824,84826,84828,84830],{"class":256,"line":33364},[254,84822,84823],{"class":264},"    }).",[254,84825,74364],{"class":2103},[254,84827,265],{"class":264},[254,84829,74369],{"class":369},[254,84831,271],{"class":264},[254,84833,84834],{"class":256,"line":33370},[254,84835,84836],{"class":323},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[254,84838,84839,84841,84843,84845,84847,84850,84852,84855,84857,84859,84861,84864,84867,84869,84872,84874,84876,84878,84881,84883,84885,84887,84889],{"class":256,"line":33390},[254,84840,11362],{"class":260},[254,84842,62926],{"class":313},[254,84844,13705],{"class":260},[254,84846,80189],{"class":264},[254,84848,84849],{"class":2103},"reduce",[254,84851,2516],{"class":264},[254,84853,84854],{"class":5357},"prev",[254,84856,12576],{"class":264},[254,84858,79936],{"class":5357},[254,84860,13855],{"class":264},[254,84862,84863],{"class":260},"=>",[254,84865,84866],{"class":264}," prev ",[254,84868,745],{"class":260},[254,84870,84871],{"class":264}," (item.price ",[254,84873,719],{"class":260},[254,84875,5895],{"class":313},[254,84877,6659],{"class":260},[254,84879,84880],{"class":264}," item.count) ",[254,84882,848],{"class":260},[254,84884,5895],{"class":313},[254,84886,12576],{"class":264},[254,84888,456],{"class":313},[254,84890,271],{"class":264},[254,84892,84893,84895,84897,84899,84902,84904,84906,84909,84911,84913,84915],{"class":256,"line":33396},[254,84894,52548],{"class":264},[254,84896,54540],{"class":2103},[254,84898,265],{"class":264},[254,84900,84901],{"class":369},"'.amount'",[254,84903,74390],{"class":264},[254,84905,310],{"class":260},[254,84907,84908],{"class":264}," total.",[254,84910,84717],{"class":2103},[254,84912,265],{"class":264},[254,84914,342],{"class":313},[254,84916,271],{"class":264},[254,84918,84919,84921,84923],{"class":256,"line":33402},[254,84920,52558],{"class":264},[254,84922,51954],{"class":51441},[254,84924,51448],{"class":264},[254,84926,84927,84929,84931],{"class":256,"line":33412},[254,84928,51926],{"class":264},[254,84930,51941],{"class":51441},[254,84932,51448],{"class":264},[254,84934,84935],{"class":256,"line":33417},[254,84936,2540],{"emptyLinePlaceholder":184},[254,84938,84939,84941,84943],{"class":256,"line":33423},[254,84940,51926],{"class":264},[254,84942,50776],{"class":51441},[254,84944,51448],{"class":264},[34,84946,84948],{"id":84947},"_411-编程思想","4.11 编程思想",[225,84950,84952],{"id":84951},"_4111-面向过程介绍","4.11.1 面向过程介绍",[14,84954,84955,84958],{},[414,84956,84957],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[14,84960,84961],{},"调用就可以了",[14,84963,84964],{},[1602,84965],{"alt":174,"src":84966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[225,84968,84970],{"id":84969},"_4112-面向对象","4.11.2 面向对象",[14,84972,84973],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[14,84975,84976],{},[1602,84977],{"alt":174,"src":84978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[14,84980,84981],{},"面向对象的特性：",[1271,84983,84984,84987,84990],{},[24,84985,84986],{},"封装性",[24,84988,84989],{},"继承性",[24,84991,84992],{},"多态性",[225,84994,84996],{"id":84995},"_4113-两者比较","4.11.3 两者比较",[14,84998,84999],{},[1602,85000],{"alt":174,"src":85001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[34,85003,85005],{"id":85004},"_412-构造函数回顾","4.12 构造函数回顾",[14,85007,85008],{},[1602,85009],{"alt":174,"src":85010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[14,85012,85013],{},[1602,85014],{"alt":174,"src":85015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[14,85017,85018],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[14,85020,85021],{},[1602,85022],{"alt":174,"src":85023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[34,85025,85027],{"id":85026},"_413-原型","4.13 原型",[225,85029,85031],{"id":85030},"_4131-原型对象的认识","4.13.1 原型对象的认识",[14,85033,85034],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[14,85036,85037],{},[1602,85038],{"alt":174,"src":85039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[14,85041,85042],{},[1602,85043],{"alt":174,"src":85044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[14,85046,85047],{},"原型是构造函数的属性，它也是一个对象",[14,85049,85050],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[14,85052,85053],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[245,85055,85057],{"className":53208,"code":85056,"language":53210,"meta":174,"style":174},"\u003Cbody>\n  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n  \u003Cscript>\n    function Star(uname, age) {\n      this.uname = uname,\n        this.age = age\n      \u002F\u002F this.sing = function () {\n      \u002F\u002F   console.log('唱歌')\n\n      \u002F\u002F }\n    }\n    Star.prototype.sing = function () {\n      console.log('唱歌')\n    }\n    \u002F\u002F console.dir(Star.prototype)\n    const pink = new Star('pink', 18)\n    const red = new Star('red', 20)\n    pink.sing()\n    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[251,85058,85059,85067,85072,85080,85085,85090,85095,85100,85105,85109,85113,85117,85122,85127,85131,85136,85141,85146,85151,85156,85160,85168],{"__ignoreMap":174},[254,85060,85061,85063,85065],{"class":256,"line":257},[254,85062,1174],{"class":264},[254,85064,51941],{"class":51441},[254,85066,51448],{"class":264},[254,85068,85069],{"class":256,"line":175},[254,85070,85071],{"class":323},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[254,85073,85074,85076,85078],{"class":256,"line":1319},[254,85075,52285],{"class":264},[254,85077,51954],{"class":51441},[254,85079,51448],{"class":264},[254,85081,85082],{"class":256,"line":1334},[254,85083,85084],{"class":264},"    function Star(uname, age) {\n",[254,85086,85087],{"class":256,"line":1340},[254,85088,85089],{"class":264},"      this.uname = uname,\n",[254,85091,85092],{"class":256,"line":1354},[254,85093,85094],{"class":264},"        this.age = age\n",[254,85096,85097],{"class":256,"line":1360},[254,85098,85099],{"class":264},"      \u002F\u002F this.sing = function () {\n",[254,85101,85102],{"class":256,"line":1451},[254,85103,85104],{"class":264},"      \u002F\u002F   console.log('唱歌')\n",[254,85106,85107],{"class":256,"line":1457},[254,85108,2540],{"emptyLinePlaceholder":184},[254,85110,85111],{"class":256,"line":1469},[254,85112,60178],{"class":264},[254,85114,85115],{"class":256,"line":1752},[254,85116,2327],{"class":264},[254,85118,85119],{"class":256,"line":1757},[254,85120,85121],{"class":264},"    Star.prototype.sing = function () {\n",[254,85123,85124],{"class":256,"line":1763},[254,85125,85126],{"class":264},"      console.log('唱歌')\n",[254,85128,85129],{"class":256,"line":1768},[254,85130,2327],{"class":264},[254,85132,85133],{"class":256,"line":1782},[254,85134,85135],{"class":264},"    \u002F\u002F console.dir(Star.prototype)\n",[254,85137,85138],{"class":256,"line":1787},[254,85139,85140],{"class":264},"    const pink = new Star('pink', 18)\n",[254,85142,85143],{"class":256,"line":1793},[254,85144,85145],{"class":264},"    const red = new Star('red', 20)\n",[254,85147,85148],{"class":256,"line":1814},[254,85149,85150],{"class":264},"    pink.sing()\n",[254,85152,85153],{"class":256,"line":1819},[254,85154,85155],{"class":264},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[254,85157,85158],{"class":256,"line":1833},[254,85159,2540],{"emptyLinePlaceholder":184},[254,85161,85162,85164,85166],{"class":256,"line":1838},[254,85163,52558],{"class":264},[254,85165,51954],{"class":51441},[254,85167,51448],{"class":264},[254,85169,85170,85172,85174],{"class":256,"line":1867},[254,85171,51926],{"class":264},[254,85173,51941],{"class":51441},[254,85175,51448],{"class":264},[14,85177,85178],{},[1602,85179],{"alt":174,"src":85180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[245,85182,85184],{"className":53208,"code":85183,"language":53210,"meta":174,"style":174},"\u003Cbody>\n  \u003Cscript>\n    let that\n    function Star(uname) {\n      this.uname = uname\n      that = this\n    }\n    \u002F\u002F 实例对象是 ldh\n    const ldh = new Star('刘德华')\n    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n\n    Star.sing = function () {\n      console.log('唱歌')\n    }\n    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[251,85185,85186,85194,85202,85207,85212,85217,85222,85226,85231,85236,85241,85245,85250,85254,85258,85263,85267,85275],{"__ignoreMap":174},[254,85187,85188,85190,85192],{"class":256,"line":257},[254,85189,1174],{"class":264},[254,85191,51941],{"class":51441},[254,85193,51448],{"class":264},[254,85195,85196,85198,85200],{"class":256,"line":175},[254,85197,52285],{"class":264},[254,85199,51954],{"class":51441},[254,85201,51448],{"class":264},[254,85203,85204],{"class":256,"line":1319},[254,85205,85206],{"class":264},"    let that\n",[254,85208,85209],{"class":256,"line":1334},[254,85210,85211],{"class":264},"    function Star(uname) {\n",[254,85213,85214],{"class":256,"line":1340},[254,85215,85216],{"class":264},"      this.uname = uname\n",[254,85218,85219],{"class":256,"line":1354},[254,85220,85221],{"class":264},"      that = this\n",[254,85223,85224],{"class":256,"line":1360},[254,85225,2327],{"class":264},[254,85227,85228],{"class":256,"line":1451},[254,85229,85230],{"class":264},"    \u002F\u002F 实例对象是 ldh\n",[254,85232,85233],{"class":256,"line":1457},[254,85234,85235],{"class":264},"    const ldh = new Star('刘德华')\n",[254,85237,85238],{"class":256,"line":1469},[254,85239,85240],{"class":264},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[254,85242,85243],{"class":256,"line":1752},[254,85244,2540],{"emptyLinePlaceholder":184},[254,85246,85247],{"class":256,"line":1757},[254,85248,85249],{"class":264},"    Star.sing = function () {\n",[254,85251,85252],{"class":256,"line":1763},[254,85253,85126],{"class":264},[254,85255,85256],{"class":256,"line":1768},[254,85257,2327],{"class":264},[254,85259,85260],{"class":256,"line":1782},[254,85261,85262],{"class":264},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[254,85264,85265],{"class":256,"line":1787},[254,85266,2540],{"emptyLinePlaceholder":184},[254,85268,85269,85271,85273],{"class":256,"line":1793},[254,85270,52558],{"class":264},[254,85272,51954],{"class":51441},[254,85274,51448],{"class":264},[254,85276,85277,85279,85281],{"class":256,"line":1814},[254,85278,51926],{"class":264},[254,85280,51941],{"class":51441},[254,85282,51448],{"class":264},[14,85284,85285],{},"构造函数的this指向的是实例对象；",[14,85287,85288],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[225,85290,85292],{"id":85291},"_4132-数组扩展方法","4.13.2 数组扩展方法",[14,85294,85295],{},[1602,85296],{"alt":174,"src":85297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[245,85299,85301],{"className":53208,"code":85300,"language":53210,"meta":174,"style":174},"\u003Cbody>\n  \u003Cscript>\n    \u002F\u002F 注意数组不可以直接用min和max求最值\n    const arr = [1, 2, 3]\n    \u002F\u002F 自己定义数组的扩展方法\n    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n    \u002F\u002F 2.自定义的方法写到prototype身上\n    \u002F\u002F ①.最大值\n    Array.prototype.max = function () {\n      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n      return Math.max(...this)\n      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n    }\n    console.log(arr.max())\n    \u002F\u002F ②最小值\n    Array.prototype.min = function () {\n      return Math.min(...this)\n    }\n    console.log(arr.min())\n    \u002F\u002F③求和\n    Array.prototype.sum = function () {\n      return this.reduce((prev, current) => prev + current, 0)\n    }\n    console.log(arr.sum())\n    \u002F\u002F ③排序\n    Array.prototype.rever = function () {\n      return this.reverse()\n    }\n    console.log(arr.rever())\n\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[251,85302,85303,85311,85319,85324,85329,85334,85339,85344,85349,85354,85359,85364,85369,85373,85378,85383,85388,85393,85397,85402,85407,85412,85417,85421,85426,85431,85436,85441,85445,85450,85454,85462],{"__ignoreMap":174},[254,85304,85305,85307,85309],{"class":256,"line":257},[254,85306,1174],{"class":264},[254,85308,51941],{"class":51441},[254,85310,51448],{"class":264},[254,85312,85313,85315,85317],{"class":256,"line":175},[254,85314,52285],{"class":264},[254,85316,51954],{"class":51441},[254,85318,51448],{"class":264},[254,85320,85321],{"class":256,"line":1319},[254,85322,85323],{"class":264},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[254,85325,85326],{"class":256,"line":1334},[254,85327,85328],{"class":264},"    const arr = [1, 2, 3]\n",[254,85330,85331],{"class":256,"line":1340},[254,85332,85333],{"class":264},"    \u002F\u002F 自己定义数组的扩展方法\n",[254,85335,85336],{"class":256,"line":1354},[254,85337,85338],{"class":264},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[254,85340,85341],{"class":256,"line":1360},[254,85342,85343],{"class":264},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[254,85345,85346],{"class":256,"line":1451},[254,85347,85348],{"class":264},"    \u002F\u002F ①.最大值\n",[254,85350,85351],{"class":256,"line":1457},[254,85352,85353],{"class":264},"    Array.prototype.max = function () {\n",[254,85355,85356],{"class":256,"line":1469},[254,85357,85358],{"class":264},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[254,85360,85361],{"class":256,"line":1752},[254,85362,85363],{"class":264},"      return Math.max(...this)\n",[254,85365,85366],{"class":256,"line":1757},[254,85367,85368],{"class":264},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[254,85370,85371],{"class":256,"line":1763},[254,85372,2327],{"class":264},[254,85374,85375],{"class":256,"line":1768},[254,85376,85377],{"class":264},"    console.log(arr.max())\n",[254,85379,85380],{"class":256,"line":1782},[254,85381,85382],{"class":264},"    \u002F\u002F ②最小值\n",[254,85384,85385],{"class":256,"line":1787},[254,85386,85387],{"class":264},"    Array.prototype.min = function () {\n",[254,85389,85390],{"class":256,"line":1793},[254,85391,85392],{"class":264},"      return Math.min(...this)\n",[254,85394,85395],{"class":256,"line":1814},[254,85396,2327],{"class":264},[254,85398,85399],{"class":256,"line":1819},[254,85400,85401],{"class":264},"    console.log(arr.min())\n",[254,85403,85404],{"class":256,"line":1833},[254,85405,85406],{"class":264},"    \u002F\u002F③求和\n",[254,85408,85409],{"class":256,"line":1838},[254,85410,85411],{"class":264},"    Array.prototype.sum = function () {\n",[254,85413,85414],{"class":256,"line":1867},[254,85415,85416],{"class":264},"      return this.reduce((prev, current) => prev + current, 0)\n",[254,85418,85419],{"class":256,"line":1872},[254,85420,2327],{"class":264},[254,85422,85423],{"class":256,"line":1889},[254,85424,85425],{"class":264},"    console.log(arr.sum())\n",[254,85427,85428],{"class":256,"line":1894},[254,85429,85430],{"class":264},"    \u002F\u002F ③排序\n",[254,85432,85433],{"class":256,"line":1899},[254,85434,85435],{"class":264},"    Array.prototype.rever = function () {\n",[254,85437,85438],{"class":256,"line":1904},[254,85439,85440],{"class":264},"      return this.reverse()\n",[254,85442,85443],{"class":256,"line":1918},[254,85444,2327],{"class":264},[254,85446,85447],{"class":256,"line":1923},[254,85448,85449],{"class":264},"    console.log(arr.rever())\n",[254,85451,85452],{"class":256,"line":2717},[254,85453,2540],{"emptyLinePlaceholder":184},[254,85455,85456,85458,85460],{"class":256,"line":2731},[254,85457,52558],{"class":264},[254,85459,51954],{"class":51441},[254,85461,51448],{"class":264},[254,85463,85464,85466,85468],{"class":256,"line":2739},[254,85465,51926],{"class":264},[254,85467,51941],{"class":51441},[254,85469,51448],{"class":264},[14,85471,85472],{},[1602,85473],{"alt":174,"src":85474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[225,85476,85478],{"id":85477},"_4133-constructor-属性","4.13.3 constructor 属性",[14,85480,85481],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[14,85483,85484],{},[1602,85485],{"alt":174,"src":85486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[245,85488,85490],{"className":53208,"code":85489,"language":53210,"meta":174,"style":174},"\u003Cbody>\n  \u003Cscript>\n    \u002F\u002Fconstructor   单词是构造函数的意思\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(Star.prototype)\n    console.log(Star.prototype.constructor === Star)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[251,85491,85492,85500,85508,85513,85518,85522,85527,85532,85537,85545],{"__ignoreMap":174},[254,85493,85494,85496,85498],{"class":256,"line":257},[254,85495,1174],{"class":264},[254,85497,51941],{"class":51441},[254,85499,51448],{"class":264},[254,85501,85502,85504,85506],{"class":256,"line":175},[254,85503,52285],{"class":264},[254,85505,51954],{"class":51441},[254,85507,51448],{"class":264},[254,85509,85510],{"class":256,"line":1319},[254,85511,85512],{"class":264},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[254,85514,85515],{"class":256,"line":1334},[254,85516,85517],{"class":264},"    function Star() {\n",[254,85519,85520],{"class":256,"line":1340},[254,85521,2327],{"class":264},[254,85523,85524],{"class":256,"line":1354},[254,85525,85526],{"class":264},"    const ldh = new Star()\n",[254,85528,85529],{"class":256,"line":1360},[254,85530,85531],{"class":264},"    console.log(Star.prototype)\n",[254,85533,85534],{"class":256,"line":1451},[254,85535,85536],{"class":264},"    console.log(Star.prototype.constructor === Star)\n",[254,85538,85539,85541,85543],{"class":256,"line":1457},[254,85540,52558],{"class":264},[254,85542,51954],{"class":51441},[254,85544,51448],{"class":264},[254,85546,85547,85549,85551],{"class":256,"line":1469},[254,85548,51926],{"class":264},[254,85550,51941],{"class":51441},[254,85552,51448],{"class":264},[14,85554,85555],{},[1602,85556],{"alt":174,"src":85557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[14,85559,85560],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[245,85562,85564],{"className":53208,"code":85563,"language":53210,"meta":174,"style":174},"  \u003Cscript>\n    \u002F\u002Fconstructor   单词是构造函数的意思\n    function Star() {\n    }\n    \u002F\u002F const ldh = new Star()\n    \u002F\u002F console.log(Star.prototype)\n    \u002F\u002F console.log(Star.prototype.constructor === Star)\n\n    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n    \u002F\u002F Star.prototype.sing = function () {\n    \u002F\u002F   console.log('唱歌')\n    \u002F\u002F }\n    \u002F\u002F Star.prototype.dance = function () {\n    \u002F\u002F   console.log('跳舞')\n    \u002F\u002F }\n    console.log(Star.prototype)\n    Star.prototype = {\n      sing: function () {\n        console.log('唱歌')\n      },\n      dance: function () {\n        console.log('跳舞')\n      }\n    }\n    console.log(Star.prototype)\n  \u003C\u002Fscript>\n",[251,85565,85566,85574,85578,85582,85586,85591,85596,85601,85605,85610,85615,85620,85625,85630,85635,85639,85643,85648,85653,85658,85662,85667,85672,85676,85680,85684],{"__ignoreMap":174},[254,85567,85568,85570,85572],{"class":256,"line":257},[254,85569,52285],{"class":264},[254,85571,51954],{"class":51441},[254,85573,51448],{"class":264},[254,85575,85576],{"class":256,"line":175},[254,85577,85512],{"class":264},[254,85579,85580],{"class":256,"line":1319},[254,85581,85517],{"class":264},[254,85583,85584],{"class":256,"line":1334},[254,85585,2327],{"class":264},[254,85587,85588],{"class":256,"line":1340},[254,85589,85590],{"class":264},"    \u002F\u002F const ldh = new Star()\n",[254,85592,85593],{"class":256,"line":1354},[254,85594,85595],{"class":264},"    \u002F\u002F console.log(Star.prototype)\n",[254,85597,85598],{"class":256,"line":1360},[254,85599,85600],{"class":264},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[254,85602,85603],{"class":256,"line":1451},[254,85604,2540],{"emptyLinePlaceholder":184},[254,85606,85607],{"class":256,"line":1457},[254,85608,85609],{"class":264},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[254,85611,85612],{"class":256,"line":1469},[254,85613,85614],{"class":264},"    \u002F\u002F Star.prototype.sing = function () {\n",[254,85616,85617],{"class":256,"line":1752},[254,85618,85619],{"class":264},"    \u002F\u002F   console.log('唱歌')\n",[254,85621,85622],{"class":256,"line":1757},[254,85623,85624],{"class":264},"    \u002F\u002F }\n",[254,85626,85627],{"class":256,"line":1763},[254,85628,85629],{"class":264},"    \u002F\u002F Star.prototype.dance = function () {\n",[254,85631,85632],{"class":256,"line":1768},[254,85633,85634],{"class":264},"    \u002F\u002F   console.log('跳舞')\n",[254,85636,85637],{"class":256,"line":1782},[254,85638,85624],{"class":264},[254,85640,85641],{"class":256,"line":1787},[254,85642,85531],{"class":264},[254,85644,85645],{"class":256,"line":1793},[254,85646,85647],{"class":264},"    Star.prototype = {\n",[254,85649,85650],{"class":256,"line":1814},[254,85651,85652],{"class":264},"      sing: function () {\n",[254,85654,85655],{"class":256,"line":1819},[254,85656,85657],{"class":264},"        console.log('唱歌')\n",[254,85659,85660],{"class":256,"line":1833},[254,85661,78033],{"class":264},[254,85663,85664],{"class":256,"line":1838},[254,85665,85666],{"class":264},"      dance: function () {\n",[254,85668,85669],{"class":256,"line":1867},[254,85670,85671],{"class":264},"        console.log('跳舞')\n",[254,85673,85674],{"class":256,"line":1872},[254,85675,52539],{"class":264},[254,85677,85678],{"class":256,"line":1889},[254,85679,2327],{"class":264},[254,85681,85682],{"class":256,"line":1894},[254,85683,85531],{"class":264},[254,85685,85686,85688,85690],{"class":256,"line":1899},[254,85687,52558],{"class":264},[254,85689,51954],{"class":51441},[254,85691,51448],{"class":264},[14,85693,85694],{},"进行输出结果后会发现：",[14,85696,85697],{},[1602,85698],{"alt":174,"src":85699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[14,85701,85702],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[14,85704,85705],{},"所以，要重新指回创造这个原型对象的构造函数",[245,85707,85709],{"className":71354,"code":85708,"language":71356,"meta":174,"style":174},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[251,85710,85711,85725,85730,85735,85746,85759,85764,85775,85789,85793],{"__ignoreMap":174},[254,85712,85713,85716,85718,85721,85723],{"class":256,"line":257},[254,85714,85715],{"class":313},"Star",[254,85717,822],{"class":264},[254,85719,85720],{"class":313},"prototype",[254,85722,13705],{"class":260},[254,85724,15713],{"class":264},[254,85726,85727],{"class":256,"line":175},[254,85728,85729],{"class":323},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[254,85731,85732],{"class":256,"line":1319},[254,85733,85734],{"class":264},"  constructor: Star,\n",[254,85736,85737,85740,85742,85744],{"class":256,"line":1334},[254,85738,85739],{"class":2103},"  sing",[254,85741,51578],{"class":264},[254,85743,54590],{"class":260},[254,85745,54593],{"class":264},[254,85747,85748,85750,85752,85754,85757],{"class":256,"line":1340},[254,85749,73894],{"class":264},[254,85751,58388],{"class":2103},[254,85753,265],{"class":264},[254,85755,85756],{"class":369},"'唱歌'",[254,85758,271],{"class":264},[254,85760,85761],{"class":256,"line":1354},[254,85762,85763],{"class":264},"   },\n",[254,85765,85766,85769,85771,85773],{"class":256,"line":1360},[254,85767,85768],{"class":2103},"   dance",[254,85770,51578],{"class":264},[254,85772,54590],{"class":260},[254,85774,54593],{"class":264},[254,85776,85777,85780,85782,85784,85787],{"class":256,"line":1451},[254,85778,85779],{"class":264},"     console.",[254,85781,58388],{"class":2103},[254,85783,265],{"class":264},[254,85785,85786],{"class":369},"'跳舞'",[254,85788,271],{"class":264},[254,85790,85791],{"class":256,"line":1457},[254,85792,4449],{"class":264},[254,85794,85795],{"class":256,"line":1469},[254,85796,1705],{"class":264},[14,85798,85799],{},[1602,85800],{"alt":174,"src":85801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[14,85803,85804],{},"总结1：",[14,85806,85807],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[14,85809,85810],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[14,85812,85813],{},"constructor指的是他的来源",[14,85815,85816],{},[1602,85817],{"alt":174,"src":85818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[14,85820,85821],{},[1602,85822],{"alt":174,"src":85823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[14,85825,85826],{},"总结2：",[14,85828,85829],{},[1602,85830],{"alt":174,"src":85831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[14,85833,85834],{},[1602,85835],{"alt":174,"src":85836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[14,85838,85839],{},[1602,85840],{"alt":174,"src":85841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[225,85843,85845],{"id":85844},"_4134-对象原型","4.13.4 对象原型",[14,85847,85848],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[14,85850,85851],{},"对象原型就是__proto__这个属性",[14,85853,85854],{},[1602,85855],{"alt":174,"src":85856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[14,85858,85859],{},[1602,85860],{"alt":174,"src":85861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[14,85863,85864],{},[1602,85865],{"alt":174,"src":85866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[14,85868,85869],{},[1602,85870],{"alt":174,"src":85871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[245,85873,85875],{"className":53208,"code":85874,"language":53210,"meta":174,"style":174},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[251,85876,85877,85885,85893,85897,85901,85905,85910,85918],{"__ignoreMap":174},[254,85878,85879,85881,85883],{"class":256,"line":257},[254,85880,1174],{"class":264},[254,85882,51941],{"class":51441},[254,85884,51448],{"class":264},[254,85886,85887,85889,85891],{"class":256,"line":175},[254,85888,52285],{"class":264},[254,85890,51954],{"class":51441},[254,85892,51448],{"class":264},[254,85894,85895],{"class":256,"line":1319},[254,85896,85517],{"class":264},[254,85898,85899],{"class":256,"line":1334},[254,85900,2327],{"class":264},[254,85902,85903],{"class":256,"line":1340},[254,85904,85526],{"class":264},[254,85906,85907],{"class":256,"line":1354},[254,85908,85909],{"class":264},"    console.log(ldh)\n",[254,85911,85912,85914,85916],{"class":256,"line":1360},[254,85913,52558],{"class":264},[254,85915,51954],{"class":51441},[254,85917,51448],{"class":264},[254,85919,85920,85922,85924],{"class":256,"line":1451},[254,85921,51926],{"class":264},[254,85923,51941],{"class":51441},[254,85925,51448],{"class":264},[14,85927,85928],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[14,85930,85931],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[14,85933,85934],{},[1602,85935],{"alt":174,"src":85936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[14,85938,85939],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[14,85941,85942],{},"对象原型指向原型对象",[14,85944,85945],{},[1602,85946],{"alt":174,"src":85947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[14,85949,85950],{},[1602,85951],{"alt":174,"src":85952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[14,85954,85955],{},[1602,85956],{"alt":174,"src":85957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[225,85959,85961],{"id":85960},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[14,85963,85964],{},[1602,85965],{"alt":174,"src":85966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[21,85968,85969,85972,85975,85978],{},[24,85970,85971],{},"构造函数通过new的形式实例化得到实例对象",[24,85973,85974],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[24,85976,85977],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[24,85979,85980],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[14,85982,85983],{},[1602,85984],{"alt":174,"src":85985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[14,85987,85988],{},"题目梳理：",[14,85990,85991],{},[1602,85992],{"alt":174,"src":85993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[225,85995,85997],{"id":85996},"_4136-原型继承","4.13.6 原型继承",[14,85999,86000],{},[1602,86001],{"alt":174,"src":86002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[14,86004,86005],{},[1602,86006],{"alt":174,"src":86007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[14,86009,86010],{},[1602,86011],{"alt":174,"src":86012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[14,86014,86015],{},[1602,86016],{"alt":174,"src":86017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[14,86019,86020],{},[1602,86021],{"alt":174,"src":86022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[14,86024,86025],{},[1602,86026],{"alt":174,"src":86027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[14,86029,86030],{},[1602,86031],{"alt":174,"src":86032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[14,86034,86035],{},[1602,86036],{"alt":174,"src":86037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[14,86039,86040],{},"回顾：构造函数每次new得到对象都是不同的",[225,86042,86044],{"id":86043},"_4137-原型链","4.13.7 原型链",[14,86046,86047],{},[1602,86048],{"alt":174,"src":86049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[14,86051,86052],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[14,86054,86055],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[14,86057,86058],{},"大哥是Object",[14,86060,86061],{},[1602,86062],{"alt":174,"src":86063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[14,86065,86066],{},[1602,86067],{"alt":174,"src":86068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[14,86070,86071],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[14,86073,86074],{},"万物皆对象",[225,86076,86078],{"id":86077},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[14,86080,86081],{},"模态框",[14,86083,86084],{},"以后遇见这个效果直接使用这个就行",[14,86086,86087],{},[1602,86088],{"alt":174,"src":86089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[14,86091,86092],{},[1602,86093],{"alt":174,"src":86094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[14,86096,86097],{},[1602,86098],{"alt":174,"src":86099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[14,86101,86102],{},[1602,86103],{"alt":174,"src":86104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[14,86106,86107],{},"补充知识点：",[21,86109,86110],{},[24,86111,86112],{},"append()",[14,86114,86115],{},[1602,86116],{"alt":174,"src":86117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[245,86119,86121],{"className":50774,"code":86120,"language":50776,"meta":174,"style":174},"append(param1)\nappend(param1, param2)\nappend(param1, param2, \u002F* …, *\u002F paramN)\n\n\n\nlet div = document.createElement(\"div\");\nlet p = document.createElement(\"p\");\ndiv.append(p);\n\nconsole.log(div.childNodes); \u002F\u002F NodeList [ \u003Cp> ]\n",[251,86122,86123,86128,86133,86138,86142,86146,86150,86155,86160,86165,86169],{"__ignoreMap":174},[254,86124,86125],{"class":256,"line":257},[254,86126,86127],{"class":264},"append(param1)\n",[254,86129,86130],{"class":256,"line":175},[254,86131,86132],{"class":264},"append(param1, param2)\n",[254,86134,86135],{"class":256,"line":1319},[254,86136,86137],{"class":264},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[254,86139,86140],{"class":256,"line":1334},[254,86141,2540],{"emptyLinePlaceholder":184},[254,86143,86144],{"class":256,"line":1340},[254,86145,2540],{"emptyLinePlaceholder":184},[254,86147,86148],{"class":256,"line":1354},[254,86149,2540],{"emptyLinePlaceholder":184},[254,86151,86152],{"class":256,"line":1360},[254,86153,86154],{"class":264},"let div = document.createElement(\"div\");\n",[254,86156,86157],{"class":256,"line":1451},[254,86158,86159],{"class":264},"let p = document.createElement(\"p\");\n",[254,86161,86162],{"class":256,"line":1457},[254,86163,86164],{"class":264},"div.append(p);\n",[254,86166,86167],{"class":256,"line":1469},[254,86168,2540],{"emptyLinePlaceholder":184},[254,86170,86171,86174,86176],{"class":256,"line":1752},[254,86172,86173],{"class":264},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[254,86175,14],{"class":51441},[254,86177,86178],{"class":264},"> ]\n",[21,86180,86181],{"start":175},[24,86182,86183],{},"remove()",[14,86185,86186],{},"自己删自己",[14,86188,86189],{},[1602,86190],{"alt":174,"src":86191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[245,86193,86195],{"className":50774,"code":86194,"language":50776,"meta":174,"style":174},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    .modal {\n      width: 300px;\n      min-height: 100px;\n      box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);\n      border-radius: 4px;\n      position: fixed;\n      z-index: 999;\n      left: 50%;\n      top: 50%;\n      transform: translate3d(-50%, -50%, 0);\n      background-color: #fff;\n    }\n\n    .modal .header {\n      line-height: 40px;\n      padding: 0 10px;\n      position: relative;\n      font-size: 20px;\n    }\n\n    .modal .header i {\n      font-style: normal;\n      color: #999;\n      position: absolute;\n      right: 15px;\n      top: -2px;\n      cursor: pointer;\n    }\n\n    .modal .body {\n      text-align: center;\n      padding: 10px;\n    }\n\n    .modal .footer {\n      display: flex;\n      justify-content: flex-end;\n      padding: 10px;\n    }\n\n    .modal .footer a {\n      padding: 3px 8px;\n      background: #ccc;\n      text-decoration: none;\n      color: #fff;\n      border-radius: 2px;\n      margin-right: 10px;\n      font-size: 14px;\n    }\n\n    .modal .footer a.submit {\n      background-color: #369;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cbutton id=\"delete\">删除\u003C\u002Fbutton>\n  \u003Cbutton id=\"login\">登录\u003C\u002Fbutton>\n  \u003Cscript>\n    \u002F\u002F 1.Model 构造函数的封装  模态框\n    function Modal(title = '', message = '') {\n      \u002F\u002F 创建Model 模态框盒子\n      \u002F\u002F 1.1 创建div标签\n      this.modalBox = document.createElement('div')\n      \u002F\u002F 1.2 给div 添加类名为model\n      this.modalBox.className = 'modal'\n      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n      this.modalBox.innerHTML = `\n        \u003Cdiv class=\"header\">${title}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n        \u003Cdiv class=\"body\">${message}\u003C\u002Fdiv>\n      `\n      \u002F\u002F console.log(this.modalBox)\n    }\n    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n    \u002F\u002F 2.给构造函数原型对象挂载open方法\n    Modal.prototype.open = function () {\n      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n      const box = document.querySelector('.modal')\n      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n      box && box.remove()\n      \u002F\u002F 主要这个方法不要用箭头函数\n      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n      \u002F\u002F append可以增加对象\n      document.body.append(this.modalBox)\n\n      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n      this.modalBox.querySelector('i').addEventListener('click', () => {\n        \u002F\u002F 这个地方需要用到箭头函数\n        \u002F\u002F 这个this是指向的是上上级 是实例对象\n        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n        this.close()\n      })\n    }\n\n    \u002F\u002F 测试一下 点击 删除按钮\n    document.querySelector('#delete').addEventListener('click', () => {\n      \u002F\u002F 先调用Model构造函数\n      const del = new Modal('温馨的提示', '您没有删除权限操作')\n      \u002F\u002F 实例对象调用open方法\n      del.open()\n    })\n    \u002F\u002F 测试一下 点击 登录按钮\n    document.querySelector('#login').addEventListener('click', () => {\n      \u002F\u002F 先调用Model构造函数\n      const log = new Modal('友情提示', '您还没有登录呢')\n      \u002F\u002F 实例对象调用open方法\n      log.open()\n    })\n    \u002F\u002F 3.给构造函数原型对象挂载close方法\n    Modal.prototype.close = function () {\n      this.modalBox.remove()\n    }\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[251,86196,86197,86207,86221,86225,86233,86247,86267,86279,86287,86294,86306,86319,86354,86366,86377,86389,86401,86413,86440,86450,86454,86458,86467,86479,86493,86503,86515,86519,86523,86533,86544,86554,86564,86577,86590,86600,86604,86608,86617,86627,86639,86643,86647,86656,86666,86676,86688,86692,86696,86706,86722,86733,86743,86753,86765,86777,86789,86793,86797,86810,86821,86825,86833,86841,86845,86853,86873,86893,86901,86906,86932,86937,86942,86961,86966,86978,86983,86994,87004,87014,87019,87024,87028,87033,87038,87043,87063,87068,87088,87093,87107,87112,87117,87122,87138,87142,87147,87176,87181,87186,87191,87202,87206,87210,87214,87219,87244,87249,87274,87279,87288,87292,87297,87322,87326,87351,87355,87364,87368,87373,87391,87401,87405,87413,87421,87425],{"__ignoreMap":174},[254,86198,86199,86201,86203,86205],{"class":256,"line":257},[254,86200,51438],{"class":264},[254,86202,51442],{"class":51441},[254,86204,51445],{"class":2103},[254,86206,51448],{"class":264},[254,86208,86209,86211,86213,86215,86217,86219],{"class":256,"line":175},[254,86210,1174],{"class":264},[254,86212,50776],{"class":51441},[254,86214,51457],{"class":2103},[254,86216,310],{"class":264},[254,86218,51462],{"class":369},[254,86220,51448],{"class":264},[254,86222,86223],{"class":256,"line":1319},[254,86224,2540],{"emptyLinePlaceholder":184},[254,86226,86227,86229,86231],{"class":256,"line":1334},[254,86228,1174],{"class":264},[254,86230,51475],{"class":51441},[254,86232,51448],{"class":264},[254,86234,86235,86237,86239,86241,86243,86245],{"class":256,"line":1340},[254,86236,52285],{"class":264},[254,86238,51485],{"class":51441},[254,86240,51488],{"class":2103},[254,86242,310],{"class":264},[254,86244,51493],{"class":369},[254,86246,51448],{"class":264},[254,86248,86249,86251,86253,86255,86257,86259,86261,86263,86265],{"class":256,"line":1354},[254,86250,52285],{"class":264},[254,86252,51485],{"class":51441},[254,86254,15061],{"class":2103},[254,86256,310],{"class":264},[254,86258,51532],{"class":369},[254,86260,51512],{"class":2103},[254,86262,310],{"class":264},[254,86264,51539],{"class":369},[254,86266,51448],{"class":264},[254,86268,86269,86271,86273,86275,86277],{"class":256,"line":1360},[254,86270,52285],{"class":264},[254,86272,51548],{"class":51441},[254,86274,51551],{"class":264},[254,86276,51548],{"class":51441},[254,86278,51448],{"class":264},[254,86280,86281,86283,86285],{"class":256,"line":1451},[254,86282,52285],{"class":264},[254,86284,5267],{"class":51441},[254,86286,51448],{"class":264},[254,86288,86289,86292],{"class":256,"line":1457},[254,86290,86291],{"class":2103},"    .modal",[254,86293,15713],{"class":264},[254,86295,86296,86298,86300,86302,86304],{"class":256,"line":1469},[254,86297,54912],{"class":313},[254,86299,51578],{"class":264},[254,86301,4113],{"class":313},[254,86303,51633],{"class":260},[254,86305,1430],{"class":264},[254,86307,86308,86311,86313,86315,86317],{"class":256,"line":1752},[254,86309,86310],{"class":313},"      min-height",[254,86312,51578],{"class":264},[254,86314,575],{"class":313},[254,86316,51633],{"class":260},[254,86318,1430],{"class":264},[254,86320,86321,86323,86325,86327,86329,86331,86333,86335,86337,86339,86341,86343,86345,86347,86349,86352],{"class":256,"line":1757},[254,86322,78891],{"class":313},[254,86324,51578],{"class":264},[254,86326,456],{"class":313},[254,86328,4233],{"class":313},[254,86330,2178],{"class":313},[254,86332,51633],{"class":260},[254,86334,78908],{"class":313},[254,86336,265],{"class":264},[254,86338,456],{"class":313},[254,86340,12576],{"class":264},[254,86342,456],{"class":313},[254,86344,12576],{"class":264},[254,86346,456],{"class":313},[254,86348,12576],{"class":264},[254,86350,86351],{"class":313},"0.1",[254,86353,2859],{"class":264},[254,86355,86356,86358,86360,86362,86364],{"class":256,"line":1763},[254,86357,55275],{"class":313},[254,86359,51578],{"class":264},[254,86361,557],{"class":313},[254,86363,51633],{"class":260},[254,86365,1430],{"class":264},[254,86367,86368,86370,86372,86375],{"class":256,"line":1768},[254,86369,54900],{"class":313},[254,86371,51578],{"class":264},[254,86373,86374],{"class":313},"fixed",[254,86376,1430],{"class":264},[254,86378,86379,86382,86384,86387],{"class":256,"line":1782},[254,86380,86381],{"class":313},"      z-index",[254,86383,51578],{"class":264},[254,86385,86386],{"class":313},"999",[254,86388,1430],{"class":264},[254,86390,86391,86393,86395,86397,86399],{"class":256,"line":1787},[254,86392,54979],{"class":313},[254,86394,51578],{"class":264},[254,86396,920],{"class":313},[254,86398,592],{"class":260},[254,86400,1430],{"class":264},[254,86402,86403,86405,86407,86409,86411],{"class":256,"line":1793},[254,86404,55088],{"class":313},[254,86406,51578],{"class":264},[254,86408,920],{"class":313},[254,86410,592],{"class":260},[254,86412,1430],{"class":264},[254,86414,86415,86417,86419,86421,86423,86426,86428,86430,86432,86434,86436,86438],{"class":256,"line":1814},[254,86416,78932],{"class":313},[254,86418,51578],{"class":264},[254,86420,78937],{"class":313},[254,86422,265],{"class":264},[254,86424,86425],{"class":313},"-50",[254,86427,592],{"class":260},[254,86429,12576],{"class":264},[254,86431,86425],{"class":313},[254,86433,592],{"class":260},[254,86435,12576],{"class":264},[254,86437,456],{"class":313},[254,86439,2859],{"class":264},[254,86441,86442,86444,86446,86448],{"class":256,"line":1819},[254,86443,55025],{"class":313},[254,86445,51578],{"class":264},[254,86447,60983],{"class":313},[254,86449,1430],{"class":264},[254,86451,86452],{"class":256,"line":1833},[254,86453,2327],{"class":264},[254,86455,86456],{"class":256,"line":1838},[254,86457,2540],{"emptyLinePlaceholder":184},[254,86459,86460,86462,86465],{"class":256,"line":1867},[254,86461,86291],{"class":2103},[254,86463,86464],{"class":2103}," .header",[254,86466,15713],{"class":264},[254,86468,86469,86471,86473,86475,86477],{"class":256,"line":1872},[254,86470,57500],{"class":313},[254,86472,51578],{"class":264},[254,86474,665],{"class":313},[254,86476,51633],{"class":260},[254,86478,1430],{"class":264},[254,86480,86481,86483,86485,86487,86489,86491],{"class":256,"line":1889},[254,86482,54836],{"class":313},[254,86484,51578],{"class":264},[254,86486,456],{"class":313},[254,86488,2178],{"class":313},[254,86490,51633],{"class":260},[254,86492,1430],{"class":264},[254,86494,86495,86497,86499,86501],{"class":256,"line":1894},[254,86496,54900],{"class":313},[254,86498,51578],{"class":264},[254,86500,54905],{"class":313},[254,86502,1430],{"class":264},[254,86504,86505,86507,86509,86511,86513],{"class":256,"line":1899},[254,86506,55063],{"class":313},[254,86508,51578],{"class":264},[254,86510,964],{"class":313},[254,86512,51633],{"class":260},[254,86514,1430],{"class":264},[254,86516,86517],{"class":256,"line":1904},[254,86518,2327],{"class":264},[254,86520,86521],{"class":256,"line":1918},[254,86522,2540],{"emptyLinePlaceholder":184},[254,86524,86525,86527,86529,86531],{"class":256,"line":1923},[254,86526,86291],{"class":2103},[254,86528,86464],{"class":2103},[254,86530,3172],{"class":51441},[254,86532,15713],{"class":264},[254,86534,86535,86538,86540,86542],{"class":256,"line":2717},[254,86536,86537],{"class":313},"      font-style",[254,86539,51578],{"class":264},[254,86541,63982],{"class":313},[254,86543,1430],{"class":264},[254,86545,86546,86548,86550,86552],{"class":256,"line":2731},[254,86547,57557],{"class":313},[254,86549,51578],{"class":264},[254,86551,62211],{"class":313},[254,86553,1430],{"class":264},[254,86555,86556,86558,86560,86562],{"class":256,"line":2739},[254,86557,54900],{"class":313},[254,86559,51578],{"class":264},[254,86561,54972],{"class":313},[254,86563,1430],{"class":264},[254,86565,86566,86569,86571,86573,86575],{"class":256,"line":2744},[254,86567,86568],{"class":313},"      right",[254,86570,51578],{"class":264},[254,86572,839],{"class":313},[254,86574,51633],{"class":260},[254,86576,1430],{"class":264},[254,86578,86579,86581,86583,86586,86588],{"class":256,"line":2750},[254,86580,55088],{"class":313},[254,86582,51578],{"class":264},[254,86584,86585],{"class":313},"-2",[254,86587,51633],{"class":260},[254,86589,1430],{"class":264},[254,86591,86592,86594,86596,86598],{"class":256,"line":2756},[254,86593,62166],{"class":313},[254,86595,51578],{"class":264},[254,86597,62171],{"class":313},[254,86599,1430],{"class":264},[254,86601,86602],{"class":256,"line":2761},[254,86603,2327],{"class":264},[254,86605,86606],{"class":256,"line":8089},[254,86607,2540],{"emptyLinePlaceholder":184},[254,86609,86610,86612,86615],{"class":256,"line":8113},[254,86611,86291],{"class":2103},[254,86613,86614],{"class":2103}," .body",[254,86616,15713],{"class":264},[254,86618,86619,86621,86623,86625],{"class":256,"line":8118},[254,86620,57427],{"class":313},[254,86622,51578],{"class":264},[254,86624,51733],{"class":313},[254,86626,1430],{"class":264},[254,86628,86629,86631,86633,86635,86637],{"class":256,"line":8124},[254,86630,54836],{"class":313},[254,86632,51578],{"class":264},[254,86634,710],{"class":313},[254,86636,51633],{"class":260},[254,86638,1430],{"class":264},[254,86640,86641],{"class":256,"line":8151},[254,86642,2327],{"class":264},[254,86644,86645],{"class":256,"line":8156},[254,86646,2540],{"emptyLinePlaceholder":184},[254,86648,86649,86651,86654],{"class":256,"line":8162},[254,86650,86291],{"class":2103},[254,86652,86653],{"class":2103}," .footer",[254,86655,15713],{"class":264},[254,86657,86658,86660,86662,86664],{"class":256,"line":8174},[254,86659,55150],{"class":313},[254,86661,51578],{"class":264},[254,86663,51618],{"class":313},[254,86665,1430],{"class":264},[254,86667,86668,86670,86672,86674],{"class":256,"line":8186},[254,86669,55161],{"class":313},[254,86671,51578],{"class":264},[254,86673,51721],{"class":313},[254,86675,1430],{"class":264},[254,86677,86678,86680,86682,86684,86686],{"class":256,"line":8198},[254,86679,54836],{"class":313},[254,86681,51578],{"class":264},[254,86683,710],{"class":313},[254,86685,51633],{"class":260},[254,86687,1430],{"class":264},[254,86689,86690],{"class":256,"line":9857},[254,86691,2327],{"class":264},[254,86693,86694],{"class":256,"line":9882},[254,86695,2540],{"emptyLinePlaceholder":184},[254,86697,86698,86700,86702,86704],{"class":256,"line":9905},[254,86699,86291],{"class":2103},[254,86701,86653],{"class":2103},[254,86703,1538],{"class":51441},[254,86705,15713],{"class":264},[254,86707,86708,86710,86712,86714,86716,86718,86720],{"class":256,"line":9929},[254,86709,54836],{"class":313},[254,86711,51578],{"class":264},[254,86713,336],{"class":313},[254,86715,51633],{"class":260},[254,86717,2223],{"class":313},[254,86719,51633],{"class":260},[254,86721,1430],{"class":264},[254,86723,86724,86726,86728,86731],{"class":256,"line":9934},[254,86725,61862],{"class":313},[254,86727,51578],{"class":264},[254,86729,86730],{"class":313},"#ccc",[254,86732,1430],{"class":264},[254,86734,86735,86737,86739,86741],{"class":256,"line":9939},[254,86736,64111],{"class":313},[254,86738,51578],{"class":264},[254,86740,54878],{"class":313},[254,86742,1430],{"class":264},[254,86744,86745,86747,86749,86751],{"class":256,"line":9944},[254,86746,57557],{"class":313},[254,86748,51578],{"class":264},[254,86750,60983],{"class":313},[254,86752,1430],{"class":264},[254,86754,86755,86757,86759,86761,86763],{"class":256,"line":9953},[254,86756,55275],{"class":313},[254,86758,51578],{"class":264},[254,86760,342],{"class":313},[254,86762,51633],{"class":260},[254,86764,1430],{"class":264},[254,86766,86767,86769,86771,86773,86775],{"class":256,"line":9958},[254,86768,61891],{"class":313},[254,86770,51578],{"class":264},[254,86772,710],{"class":313},[254,86774,51633],{"class":260},[254,86776,1430],{"class":264},[254,86778,86779,86781,86783,86785,86787],{"class":256,"line":9964},[254,86780,55063],{"class":313},[254,86782,51578],{"class":264},[254,86784,813],{"class":313},[254,86786,51633],{"class":260},[254,86788,1430],{"class":264},[254,86790,86791],{"class":256,"line":9985},[254,86792,2327],{"class":264},[254,86794,86795],{"class":256,"line":9991},[254,86796,2540],{"emptyLinePlaceholder":184},[254,86798,86799,86801,86803,86805,86808],{"class":256,"line":10005},[254,86800,86291],{"class":2103},[254,86802,86653],{"class":2103},[254,86804,1538],{"class":51441},[254,86806,86807],{"class":2103},".submit",[254,86809,15713],{"class":264},[254,86811,86812,86814,86816,86819],{"class":256,"line":10011},[254,86813,55025],{"class":313},[254,86815,51578],{"class":264},[254,86817,86818],{"class":313},"#369",[254,86820,1430],{"class":264},[254,86822,86823],{"class":256,"line":10038},[254,86824,2327],{"class":264},[254,86826,86827,86829,86831],{"class":256,"line":10047},[254,86828,52558],{"class":264},[254,86830,5267],{"class":51441},[254,86832,51448],{"class":264},[254,86834,86835,86837,86839],{"class":256,"line":10053},[254,86836,51926],{"class":264},[254,86838,51475],{"class":51441},[254,86840,51448],{"class":264},[254,86842,86843],{"class":256,"line":10061},[254,86844,2540],{"emptyLinePlaceholder":184},[254,86846,86847,86849,86851],{"class":256,"line":10066},[254,86848,1174],{"class":264},[254,86850,51941],{"class":51441},[254,86852,51448],{"class":264},[254,86854,86855,86857,86859,86861,86863,86866,86869,86871],{"class":256,"line":16745},[254,86856,52285],{"class":264},[254,86858,54028],{"class":51441},[254,86860,15100],{"class":2103},[254,86862,310],{"class":264},[254,86864,86865],{"class":369},"\"delete\"",[254,86867,86868],{"class":264},">删除\u003C\u002F",[254,86870,54028],{"class":51441},[254,86872,51448],{"class":264},[254,86874,86875,86877,86879,86881,86883,86886,86889,86891],{"class":256,"line":16751},[254,86876,52285],{"class":264},[254,86878,54028],{"class":51441},[254,86880,15100],{"class":2103},[254,86882,310],{"class":264},[254,86884,86885],{"class":369},"\"login\"",[254,86887,86888],{"class":264},">登录\u003C\u002F",[254,86890,54028],{"class":51441},[254,86892,51448],{"class":264},[254,86894,86895,86897,86899],{"class":256,"line":16774},[254,86896,52285],{"class":264},[254,86898,51954],{"class":51441},[254,86900,51448],{"class":264},[254,86902,86903],{"class":256,"line":16780},[254,86904,86905],{"class":323},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[254,86907,86908,86910,86913,86915,86917,86919,86921,86923,86926,86928,86930],{"class":256,"line":16803},[254,86909,70225],{"class":260},[254,86911,86912],{"class":2103}," Modal",[254,86914,265],{"class":264},[254,86916,51548],{"class":5357},[254,86918,13705],{"class":260},[254,86920,70071],{"class":369},[254,86922,12576],{"class":264},[254,86924,86925],{"class":5357},"message",[254,86927,13705],{"class":260},[254,86929,70071],{"class":369},[254,86931,12583],{"class":264},[254,86933,86934],{"class":256,"line":16817},[254,86935,86936],{"class":323},"      \u002F\u002F 创建Model 模态框盒子\n",[254,86938,86939],{"class":256,"line":16837},[254,86940,86941],{"class":323},"      \u002F\u002F 1.1 创建div标签\n",[254,86943,86944,86946,86949,86951,86953,86955,86957,86959],{"class":256,"line":16843},[254,86945,70192],{"class":313},[254,86947,86948],{"class":264},".modalBox ",[254,86950,310],{"class":260},[254,86952,54537],{"class":264},[254,86954,70292],{"class":2103},[254,86956,265],{"class":264},[254,86958,82072],{"class":369},[254,86960,271],{"class":264},[254,86962,86963],{"class":256,"line":16854},[254,86964,86965],{"class":323},"      \u002F\u002F 1.2 给div 添加类名为model\n",[254,86967,86968,86970,86973,86975],{"class":256,"line":16877},[254,86969,70192],{"class":313},[254,86971,86972],{"class":264},".modalBox.className ",[254,86974,310],{"class":260},[254,86976,86977],{"class":369}," 'modal'\n",[254,86979,86980],{"class":256,"line":16899},[254,86981,86982],{"class":323},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[254,86984,86985,86987,86990,86992],{"class":256,"line":16904},[254,86986,70192],{"class":313},[254,86988,86989],{"class":264},".modalBox.innerHTML ",[254,86991,310],{"class":260},[254,86993,70309],{"class":369},[254,86995,86996,86999,87001],{"class":256,"line":16910},[254,86997,86998],{"class":369},"        \u003Cdiv class=\"header\">${",[254,87000,51548],{"class":264},[254,87002,87003],{"class":369},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[254,87005,87006,87009,87011],{"class":256,"line":16924},[254,87007,87008],{"class":369},"        \u003Cdiv class=\"body\">${",[254,87010,86925],{"class":264},[254,87012,87013],{"class":369},"}\u003C\u002Fdiv>\n",[254,87015,87016],{"class":256,"line":16937},[254,87017,87018],{"class":369},"      `\n",[254,87020,87021],{"class":256,"line":16942},[254,87022,87023],{"class":323},"      \u002F\u002F console.log(this.modalBox)\n",[254,87025,87026],{"class":256,"line":16956},[254,87027,2327],{"class":264},[254,87029,87030],{"class":256,"line":16961},[254,87031,87032],{"class":323},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[254,87034,87035],{"class":256,"line":16967},[254,87036,87037],{"class":323},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[254,87039,87040],{"class":256,"line":16972},[254,87041,87042],{"class":323},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[254,87044,87045,87048,87050,87052,87054,87057,87059,87061],{"class":256,"line":16986},[254,87046,87047],{"class":313},"    Modal",[254,87049,822],{"class":264},[254,87051,85720],{"class":313},[254,87053,822],{"class":264},[254,87055,87056],{"class":2103},"open",[254,87058,13705],{"class":260},[254,87060,59059],{"class":260},[254,87062,54593],{"class":264},[254,87064,87065],{"class":256,"line":16991},[254,87066,87067],{"class":323},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[254,87069,87070,87072,87075,87077,87079,87081,87083,87086],{"class":256,"line":16996},[254,87071,58369],{"class":260},[254,87073,87074],{"class":313}," box",[254,87076,13705],{"class":260},[254,87078,54537],{"class":264},[254,87080,54540],{"class":2103},[254,87082,265],{"class":264},[254,87084,87085],{"class":369},"'.modal'",[254,87087,271],{"class":264},[254,87089,87090],{"class":256,"line":17010},[254,87091,87092],{"class":323},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[254,87094,87095,87098,87100,87103,87105],{"class":256,"line":17022},[254,87096,87097],{"class":264},"      box ",[254,87099,1855],{"class":260},[254,87101,87102],{"class":264}," box.",[254,87104,57147],{"class":2103},[254,87106,2116],{"class":264},[254,87108,87109],{"class":256,"line":17027},[254,87110,87111],{"class":323},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[254,87113,87114],{"class":256,"line":17040},[254,87115,87116],{"class":323},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[254,87118,87119],{"class":256,"line":17045},[254,87120,87121],{"class":323},"      \u002F\u002F append可以增加对象\n",[254,87123,87124,87127,87130,87132,87135],{"class":256,"line":17050},[254,87125,87126],{"class":264},"      document.body.",[254,87128,87129],{"class":2103},"append",[254,87131,265],{"class":264},[254,87133,87134],{"class":313},"this",[254,87136,87137],{"class":264},".modalBox)\n",[254,87139,87140],{"class":256,"line":17055},[254,87141,2540],{"emptyLinePlaceholder":184},[254,87143,87144],{"class":256,"line":17068},[254,87145,87146],{"class":323},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[254,87148,87149,87151,87154,87156,87158,87161,87163,87165,87167,87169,87172,87174],{"class":256,"line":17073},[254,87150,70192],{"class":313},[254,87152,87153],{"class":264},".modalBox.",[254,87155,54540],{"class":2103},[254,87157,265],{"class":264},[254,87159,87160],{"class":369},"'i'",[254,87162,30967],{"class":264},[254,87164,57954],{"class":2103},[254,87166,265],{"class":264},[254,87168,57959],{"class":369},[254,87170,87171],{"class":264},", () ",[254,87173,84863],{"class":260},[254,87175,15713],{"class":264},[254,87177,87178],{"class":256,"line":32774},[254,87179,87180],{"class":323},"        \u002F\u002F 这个地方需要用到箭头函数\n",[254,87182,87183],{"class":256,"line":32780},[254,87184,87185],{"class":323},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[254,87187,87188],{"class":256,"line":32786},[254,87189,87190],{"class":323},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[254,87192,87193,87195,87197,87200],{"class":256,"line":32792},[254,87194,64867],{"class":313},[254,87196,822],{"class":264},[254,87198,87199],{"class":2103},"close",[254,87201,2116],{"class":264},[254,87203,87204],{"class":256,"line":32798},[254,87205,64956],{"class":264},[254,87207,87208],{"class":256,"line":32809},[254,87209,2327],{"class":264},[254,87211,87212],{"class":256,"line":32815},[254,87213,2540],{"emptyLinePlaceholder":184},[254,87215,87216],{"class":256,"line":32835},[254,87217,87218],{"class":323},"    \u002F\u002F 测试一下 点击 删除按钮\n",[254,87220,87221,87223,87225,87227,87230,87232,87234,87236,87238,87240,87242],{"class":256,"line":32841},[254,87222,52548],{"class":264},[254,87224,54540],{"class":2103},[254,87226,265],{"class":264},[254,87228,87229],{"class":369},"'#delete'",[254,87231,30967],{"class":264},[254,87233,57954],{"class":2103},[254,87235,265],{"class":264},[254,87237,57959],{"class":369},[254,87239,87171],{"class":264},[254,87241,84863],{"class":260},[254,87243,15713],{"class":264},[254,87245,87246],{"class":256,"line":32852},[254,87247,87248],{"class":323},"      \u002F\u002F 先调用Model构造函数\n",[254,87250,87251,87253,87256,87258,87260,87262,87264,87267,87269,87272],{"class":256,"line":32858},[254,87252,58369],{"class":260},[254,87254,87255],{"class":313}," del",[254,87257,13705],{"class":260},[254,87259,11719],{"class":260},[254,87261,86912],{"class":2103},[254,87263,265],{"class":264},[254,87265,87266],{"class":369},"'温馨的提示'",[254,87268,12576],{"class":264},[254,87270,87271],{"class":369},"'您没有删除权限操作'",[254,87273,271],{"class":264},[254,87275,87276],{"class":256,"line":32864},[254,87277,87278],{"class":323},"      \u002F\u002F 实例对象调用open方法\n",[254,87280,87281,87284,87286],{"class":256,"line":32870},[254,87282,87283],{"class":264},"      del.",[254,87285,87056],{"class":2103},[254,87287,2116],{"class":264},[254,87289,87290],{"class":256,"line":32876},[254,87291,33602],{"class":264},[254,87293,87294],{"class":256,"line":32882},[254,87295,87296],{"class":323},"    \u002F\u002F 测试一下 点击 登录按钮\n",[254,87298,87299,87301,87303,87305,87308,87310,87312,87314,87316,87318,87320],{"class":256,"line":32888},[254,87300,52548],{"class":264},[254,87302,54540],{"class":2103},[254,87304,265],{"class":264},[254,87306,87307],{"class":369},"'#login'",[254,87309,30967],{"class":264},[254,87311,57954],{"class":2103},[254,87313,265],{"class":264},[254,87315,57959],{"class":369},[254,87317,87171],{"class":264},[254,87319,84863],{"class":260},[254,87321,15713],{"class":264},[254,87323,87324],{"class":256,"line":32894},[254,87325,87248],{"class":323},[254,87327,87328,87330,87333,87335,87337,87339,87341,87344,87346,87349],{"class":256,"line":32914},[254,87329,58369],{"class":260},[254,87331,87332],{"class":313}," log",[254,87334,13705],{"class":260},[254,87336,11719],{"class":260},[254,87338,86912],{"class":2103},[254,87340,265],{"class":264},[254,87342,87343],{"class":369},"'友情提示'",[254,87345,12576],{"class":264},[254,87347,87348],{"class":369},"'您还没有登录呢'",[254,87350,271],{"class":264},[254,87352,87353],{"class":256,"line":32920},[254,87354,87278],{"class":323},[254,87356,87357,87360,87362],{"class":256,"line":32936},[254,87358,87359],{"class":264},"      log.",[254,87361,87056],{"class":2103},[254,87363,2116],{"class":264},[254,87365,87366],{"class":256,"line":32942},[254,87367,33602],{"class":264},[254,87369,87370],{"class":256,"line":32956},[254,87371,87372],{"class":323},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[254,87374,87375,87377,87379,87381,87383,87385,87387,87389],{"class":256,"line":32962},[254,87376,87047],{"class":313},[254,87378,822],{"class":264},[254,87380,85720],{"class":313},[254,87382,822],{"class":264},[254,87384,87199],{"class":2103},[254,87386,13705],{"class":260},[254,87388,59059],{"class":260},[254,87390,54593],{"class":264},[254,87392,87393,87395,87397,87399],{"class":256,"line":32977},[254,87394,70192],{"class":313},[254,87396,87153],{"class":264},[254,87398,57147],{"class":2103},[254,87400,2116],{"class":264},[254,87402,87403],{"class":256,"line":32983},[254,87404,2327],{"class":264},[254,87406,87407,87409,87411],{"class":256,"line":32992},[254,87408,52558],{"class":264},[254,87410,51954],{"class":51441},[254,87412,51448],{"class":264},[254,87414,87415,87417,87419],{"class":256,"line":32998},[254,87416,51926],{"class":264},[254,87418,51941],{"class":51441},[254,87420,51448],{"class":264},[254,87422,87423],{"class":256,"line":33007},[254,87424,2540],{"emptyLinePlaceholder":184},[254,87426,87427,87429,87431],{"class":256,"line":33013},[254,87428,51926],{"class":264},[254,87430,50776],{"class":51441},[254,87432,51448],{"class":264},[14,87434,87435],{},[1602,87436],{"alt":174,"src":87437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[34,87439,87441],{"id":87440},"_414-深浅拷贝","4.14 深浅拷贝",[225,87443,87445],{"id":87444},"_4141-浅拷贝","4.14.1 浅拷贝",[14,87447,87448],{},[1602,87449],{"alt":174,"src":87450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[14,87452,87453],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[14,87455,87456],{},[1602,87457],{"alt":174,"src":87458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[14,87460,87461],{},[1602,87462],{"alt":174,"src":87463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[14,87465,87466],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[14,87468,87469],{},[1602,87470],{"alt":174,"src":87471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[14,87473,11473],{},[14,87475,87476],{},[1602,87477],{"alt":174,"src":87478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[225,87480,87482],{"id":87481},"_4142-深拷贝","4.14.2 深拷贝",[14,87484,87485],{},"深拷贝：拷贝的是对象，不是地址",[14,87487,87488],{},"常用的三种方法：",[21,87490,87491,87494,87497],{},[24,87492,87493],{},"通过递归实现深拷贝",[24,87495,87496],{},"lodash\u002FcloneDeep",[24,87498,87499],{},"通过JSON.stringify()实现",[22139,87501,87503],{"id":87502},"_41421-递归函数","4.14.2.1 递归函数",[14,87505,87506],{},[1602,87507],{"alt":174,"src":87508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[21,87510,87511],{},[24,87512,87513],{},"死递归占溢出：",[245,87515,87517],{"className":53208,"code":87516,"language":53210,"meta":174,"style":174},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[251,87518,87519,87527,87535,87539,87544,87548,87553,87561],{"__ignoreMap":174},[254,87520,87521,87523,87525],{"class":256,"line":257},[254,87522,1174],{"class":264},[254,87524,51941],{"class":51441},[254,87526,51448],{"class":264},[254,87528,87529,87531,87533],{"class":256,"line":175},[254,87530,52285],{"class":264},[254,87532,51954],{"class":51441},[254,87534,51448],{"class":264},[254,87536,87537],{"class":256,"line":1319},[254,87538,77284],{"class":264},[254,87540,87541],{"class":256,"line":1334},[254,87542,87543],{"class":264},"      fn()\n",[254,87545,87546],{"class":256,"line":1340},[254,87547,2327],{"class":264},[254,87549,87550],{"class":256,"line":1354},[254,87551,87552],{"class":264},"    fn()\n",[254,87554,87555,87557,87559],{"class":256,"line":1360},[254,87556,52558],{"class":264},[254,87558,51954],{"class":51441},[254,87560,51448],{"class":264},[254,87562,87563,87565,87567],{"class":256,"line":1451},[254,87564,51926],{"class":264},[254,87566,51941],{"class":51441},[254,87568,51448],{"class":264},[21,87570,87571],{"start":175},[24,87572,87573],{},"递归函数要加判断条件：",[14,87575,87576],{},[1602,87577],{"alt":174,"src":87578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[21,87580,87581],{"start":1319},[24,87582,87583],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[245,87585,87587],{"className":50774,"code":87586,"language":50776,"meta":174,"style":174},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv>\u003C\u002Fdiv>\n  \u003Cscript>\n    function getTime() {\n      document.querySelector('div').innerHTML = new Date().toLocaleString()\n      setTimeout(getTime, 1000)\n    }\n    getTime()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[251,87588,87589,87599,87613,87617,87625,87639,87659,87671,87679,87683,87691,87703,87711,87719,87744,87756,87760,87767,87775,87783,87787],{"__ignoreMap":174},[254,87590,87591,87593,87595,87597],{"class":256,"line":257},[254,87592,51438],{"class":264},[254,87594,51442],{"class":51441},[254,87596,51445],{"class":2103},[254,87598,51448],{"class":264},[254,87600,87601,87603,87605,87607,87609,87611],{"class":256,"line":175},[254,87602,1174],{"class":264},[254,87604,50776],{"class":51441},[254,87606,51457],{"class":2103},[254,87608,310],{"class":264},[254,87610,51462],{"class":369},[254,87612,51448],{"class":264},[254,87614,87615],{"class":256,"line":1319},[254,87616,2540],{"emptyLinePlaceholder":184},[254,87618,87619,87621,87623],{"class":256,"line":1334},[254,87620,1174],{"class":264},[254,87622,51475],{"class":51441},[254,87624,51448],{"class":264},[254,87626,87627,87629,87631,87633,87635,87637],{"class":256,"line":1340},[254,87628,52285],{"class":264},[254,87630,51485],{"class":51441},[254,87632,51488],{"class":2103},[254,87634,310],{"class":264},[254,87636,51493],{"class":369},[254,87638,51448],{"class":264},[254,87640,87641,87643,87645,87647,87649,87651,87653,87655,87657],{"class":256,"line":1354},[254,87642,52285],{"class":264},[254,87644,51485],{"class":51441},[254,87646,15061],{"class":2103},[254,87648,310],{"class":264},[254,87650,51532],{"class":369},[254,87652,51512],{"class":2103},[254,87654,310],{"class":264},[254,87656,51539],{"class":369},[254,87658,51448],{"class":264},[254,87660,87661,87663,87665,87667,87669],{"class":256,"line":1360},[254,87662,52285],{"class":264},[254,87664,51548],{"class":51441},[254,87666,51551],{"class":264},[254,87668,51548],{"class":51441},[254,87670,51448],{"class":264},[254,87672,87673,87675,87677],{"class":256,"line":1451},[254,87674,51926],{"class":264},[254,87676,51475],{"class":51441},[254,87678,51448],{"class":264},[254,87680,87681],{"class":256,"line":1457},[254,87682,2540],{"emptyLinePlaceholder":184},[254,87684,87685,87687,87689],{"class":256,"line":1469},[254,87686,1174],{"class":264},[254,87688,51941],{"class":51441},[254,87690,51448],{"class":264},[254,87692,87693,87695,87697,87699,87701],{"class":256,"line":1752},[254,87694,52285],{"class":264},[254,87696,51752],{"class":51441},[254,87698,55455],{"class":264},[254,87700,51752],{"class":51441},[254,87702,51448],{"class":264},[254,87704,87705,87707,87709],{"class":256,"line":1757},[254,87706,52285],{"class":264},[254,87708,51954],{"class":51441},[254,87710,51448],{"class":264},[254,87712,87713,87715,87717],{"class":256,"line":1763},[254,87714,70225],{"class":260},[254,87716,73914],{"class":2103},[254,87718,10994],{"class":264},[254,87720,87721,87723,87725,87727,87729,87731,87733,87735,87737,87739,87742],{"class":256,"line":1768},[254,87722,55912],{"class":264},[254,87724,54540],{"class":2103},[254,87726,265],{"class":264},[254,87728,82072],{"class":369},[254,87730,74390],{"class":264},[254,87732,310],{"class":260},[254,87734,11719],{"class":260},[254,87736,73930],{"class":2103},[254,87738,17402],{"class":264},[254,87740,87741],{"class":2103},"toLocaleString",[254,87743,2116],{"class":264},[254,87745,87746,87749,87752,87754],{"class":256,"line":1782},[254,87747,87748],{"class":2103},"      setTimeout",[254,87750,87751],{"class":264},"(getTime, ",[254,87753,6551],{"class":313},[254,87755,271],{"class":264},[254,87757,87758],{"class":256,"line":1787},[254,87759,2327],{"class":264},[254,87761,87762,87765],{"class":256,"line":1793},[254,87763,87764],{"class":2103},"    getTime",[254,87766,2116],{"class":264},[254,87768,87769,87771,87773],{"class":256,"line":1814},[254,87770,52558],{"class":264},[254,87772,51954],{"class":51441},[254,87774,51448],{"class":264},[254,87776,87777,87779,87781],{"class":256,"line":1819},[254,87778,51926],{"class":264},[254,87780,51941],{"class":51441},[254,87782,51448],{"class":264},[254,87784,87785],{"class":256,"line":1833},[254,87786,2540],{"emptyLinePlaceholder":184},[254,87788,87789,87791,87793],{"class":256,"line":1838},[254,87790,51926],{"class":264},[254,87792,50776],{"class":51441},[254,87794,51448],{"class":264},[14,87796,87797],{},[1602,87798],{"alt":174,"src":87799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[21,87801,87802],{"start":1334},[24,87803,87493],{},[14,87805,87806],{},[1602,87807],{"alt":174,"src":87808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[14,87810,87811],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[14,87813,39330],{},[14,87815,87816],{},"这个是简易版的递归函数深拷贝",[14,87818,87819],{},"一定要注意先数组再对象，因为万物皆可对象",[245,87821,87823],{"className":50774,"code":87822,"language":50776,"meta":174,"style":174},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cscript>\n    const obj = {\n      uname: 'pink',\n      age: 18,\n      hobby: ['乒乓球', '足球'],\n      family: {\n        baby: '小pink'\n      }\n    }\n    const o = {}\n    \u002F\u002F 拷贝函数\n    function deepCopy(newObj, oldObj) {\n      for (let k in oldObj) {\n        \u002F\u002F 处理数组的问题\n        \u002F\u002F 判断是否属于数组\n        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n        if (oldObj[k] instanceof Array) {\n          \u002F\u002F newObj[k]  接收的内容放到[]\n          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n          newObj[k] = []\n          deepCopy(newObj[k], oldObj[k])\n        } else if (oldObj[k] instanceof Object) {\n          newObj[k] = {}\n          deepCopy(newObj[k], oldObj[k])\n        } else {\n          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n          \u002F\u002F newObj[k]与newObj写法是等价的\n          newObj[k] = oldObj[k]\n        }\n      }\n    }\n    deepCopy(o, obj) \u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n    console.log(o)\n    o.age = 20\n    o.hobby[0] = '篮球'\n    o.family = '老pink'\n    console.log(obj)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[251,87824,87825,87835,87849,87853,87861,87875,87895,87907,87915,87919,87927,87935,87945,87954,87962,87978,87982,87990,87994,87998,88010,88015,88034,88050,88055,88060,88065,88080,88085,88090,88099,88107,88124,88132,88138,88146,88151,88156,88165,88169,88173,88177,88188,88197,88207,88221,88231,88239,88247,88255,88259],{"__ignoreMap":174},[254,87826,87827,87829,87831,87833],{"class":256,"line":257},[254,87828,51438],{"class":264},[254,87830,51442],{"class":51441},[254,87832,51445],{"class":2103},[254,87834,51448],{"class":264},[254,87836,87837,87839,87841,87843,87845,87847],{"class":256,"line":175},[254,87838,1174],{"class":264},[254,87840,50776],{"class":51441},[254,87842,51457],{"class":2103},[254,87844,310],{"class":264},[254,87846,51462],{"class":369},[254,87848,51448],{"class":264},[254,87850,87851],{"class":256,"line":1319},[254,87852,2540],{"emptyLinePlaceholder":184},[254,87854,87855,87857,87859],{"class":256,"line":1334},[254,87856,1174],{"class":264},[254,87858,51475],{"class":51441},[254,87860,51448],{"class":264},[254,87862,87863,87865,87867,87869,87871,87873],{"class":256,"line":1340},[254,87864,52285],{"class":264},[254,87866,51485],{"class":51441},[254,87868,51488],{"class":2103},[254,87870,310],{"class":264},[254,87872,51493],{"class":369},[254,87874,51448],{"class":264},[254,87876,87877,87879,87881,87883,87885,87887,87889,87891,87893],{"class":256,"line":1354},[254,87878,52285],{"class":264},[254,87880,51485],{"class":51441},[254,87882,15061],{"class":2103},[254,87884,310],{"class":264},[254,87886,51532],{"class":369},[254,87888,51512],{"class":2103},[254,87890,310],{"class":264},[254,87892,51539],{"class":369},[254,87894,51448],{"class":264},[254,87896,87897,87899,87901,87903,87905],{"class":256,"line":1360},[254,87898,52285],{"class":264},[254,87900,51548],{"class":51441},[254,87902,51551],{"class":264},[254,87904,51548],{"class":51441},[254,87906,51448],{"class":264},[254,87908,87909,87911,87913],{"class":256,"line":1451},[254,87910,51926],{"class":264},[254,87912,51475],{"class":51441},[254,87914,51448],{"class":264},[254,87916,87917],{"class":256,"line":1457},[254,87918,2540],{"emptyLinePlaceholder":184},[254,87920,87921,87923,87925],{"class":256,"line":1469},[254,87922,1174],{"class":264},[254,87924,51941],{"class":51441},[254,87926,51448],{"class":264},[254,87928,87929,87931,87933],{"class":256,"line":1752},[254,87930,52285],{"class":264},[254,87932,51954],{"class":51441},[254,87934,51448],{"class":264},[254,87936,87937,87939,87941,87943],{"class":256,"line":1757},[254,87938,11362],{"class":260},[254,87940,70112],{"class":313},[254,87942,13705],{"class":260},[254,87944,15713],{"class":264},[254,87946,87947,87949,87952],{"class":256,"line":1763},[254,87948,71757],{"class":264},[254,87950,87951],{"class":369},"'pink'",[254,87953,31607],{"class":264},[254,87955,87956,87958,87960],{"class":256,"line":1768},[254,87957,71767],{"class":264},[254,87959,914],{"class":313},[254,87961,31607],{"class":264},[254,87963,87964,87967,87970,87972,87975],{"class":256,"line":1782},[254,87965,87966],{"class":264},"      hobby: [",[254,87968,87969],{"class":369},"'乒乓球'",[254,87971,12576],{"class":264},[254,87973,87974],{"class":369},"'足球'",[254,87976,87977],{"class":264},"],\n",[254,87979,87980],{"class":256,"line":1787},[254,87981,78013],{"class":264},[254,87983,87984,87987],{"class":256,"line":1793},[254,87985,87986],{"class":264},"        baby: ",[254,87988,87989],{"class":369},"'小pink'\n",[254,87991,87992],{"class":256,"line":1814},[254,87993,52539],{"class":264},[254,87995,87996],{"class":256,"line":1819},[254,87997,2327],{"class":264},[254,87999,88000,88002,88005,88007],{"class":256,"line":1833},[254,88001,11362],{"class":260},[254,88003,88004],{"class":313}," o",[254,88006,13705],{"class":260},[254,88008,88009],{"class":264}," {}\n",[254,88011,88012],{"class":256,"line":1838},[254,88013,88014],{"class":323},"    \u002F\u002F 拷贝函数\n",[254,88016,88017,88019,88022,88024,88027,88029,88032],{"class":256,"line":1867},[254,88018,70225],{"class":260},[254,88020,88021],{"class":2103}," deepCopy",[254,88023,265],{"class":264},[254,88025,88026],{"class":5357},"newObj",[254,88028,12576],{"class":264},[254,88030,88031],{"class":5357},"oldObj",[254,88033,12583],{"class":264},[254,88035,88036,88038,88040,88042,88045,88047],{"class":256,"line":1872},[254,88037,52425],{"class":260},[254,88039,1798],{"class":264},[254,88041,51988],{"class":260},[254,88043,88044],{"class":264}," k ",[254,88046,26184],{"class":260},[254,88048,88049],{"class":264}," oldObj) {\n",[254,88051,88052],{"class":256,"line":1889},[254,88053,88054],{"class":323},"        \u002F\u002F 处理数组的问题\n",[254,88056,88057],{"class":256,"line":1894},[254,88058,88059],{"class":323},"        \u002F\u002F 判断是否属于数组\n",[254,88061,88062],{"class":256,"line":1899},[254,88063,88064],{"class":323},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[254,88066,88067,88069,88072,88075,88078],{"class":256,"line":1904},[254,88068,2637],{"class":260},[254,88070,88071],{"class":264}," (oldObj[k] ",[254,88073,88074],{"class":260},"instanceof",[254,88076,88077],{"class":2103}," Array",[254,88079,12583],{"class":264},[254,88081,88082],{"class":256,"line":1918},[254,88083,88084],{"class":323},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[254,88086,88087],{"class":256,"line":1923},[254,88088,88089],{"class":323},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[254,88091,88092,88095,88097],{"class":256,"line":2717},[254,88093,88094],{"class":264},"          newObj[k] ",[254,88096,310],{"class":260},[254,88098,51979],{"class":264},[254,88100,88101,88104],{"class":256,"line":2731},[254,88102,88103],{"class":2103},"          deepCopy",[254,88105,88106],{"class":264},"(newObj[k], oldObj[k])\n",[254,88108,88109,88111,88113,88115,88117,88119,88122],{"class":256,"line":2739},[254,88110,80221],{"class":264},[254,88112,1841],{"class":260},[254,88114,1844],{"class":260},[254,88116,88071],{"class":264},[254,88118,88074],{"class":260},[254,88120,88121],{"class":2103}," Object",[254,88123,12583],{"class":264},[254,88125,88126,88128,88130],{"class":256,"line":2744},[254,88127,88094],{"class":264},[254,88129,310],{"class":260},[254,88131,88009],{"class":264},[254,88133,88134,88136],{"class":256,"line":2750},[254,88135,88103],{"class":2103},[254,88137,88106],{"class":264},[254,88139,88140,88142,88144],{"class":256,"line":2756},[254,88141,80221],{"class":264},[254,88143,1841],{"class":260},[254,88145,15713],{"class":264},[254,88147,88148],{"class":256,"line":2761},[254,88149,88150],{"class":323},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[254,88152,88153],{"class":256,"line":8089},[254,88154,88155],{"class":323},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[254,88157,88158,88160,88162],{"class":256,"line":8113},[254,88159,88094],{"class":264},[254,88161,310],{"class":260},[254,88163,88164],{"class":264}," oldObj[k]\n",[254,88166,88167],{"class":256,"line":8118},[254,88168,2669],{"class":264},[254,88170,88171],{"class":256,"line":8124},[254,88172,52539],{"class":264},[254,88174,88175],{"class":256,"line":8151},[254,88176,2327],{"class":264},[254,88178,88179,88182,88185],{"class":256,"line":8156},[254,88180,88181],{"class":2103},"    deepCopy",[254,88183,88184],{"class":264},"(o, obj) ",[254,88186,88187],{"class":323},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[254,88189,88190,88192,88194],{"class":256,"line":8162},[254,88191,73894],{"class":264},[254,88193,58388],{"class":2103},[254,88195,88196],{"class":264},"(o)\n",[254,88198,88199,88202,88204],{"class":256,"line":8174},[254,88200,88201],{"class":264},"    o.age ",[254,88203,310],{"class":260},[254,88205,88206],{"class":313}," 20\n",[254,88208,88209,88212,88214,88216,88218],{"class":256,"line":8186},[254,88210,88211],{"class":264},"    o.hobby[",[254,88213,456],{"class":313},[254,88215,4583],{"class":264},[254,88217,310],{"class":260},[254,88219,88220],{"class":369}," '篮球'\n",[254,88222,88223,88226,88228],{"class":256,"line":8198},[254,88224,88225],{"class":264},"    o.family ",[254,88227,310],{"class":260},[254,88229,88230],{"class":369}," '老pink'\n",[254,88232,88233,88235,88237],{"class":256,"line":9857},[254,88234,73894],{"class":264},[254,88236,58388],{"class":2103},[254,88238,70177],{"class":264},[254,88240,88241,88243,88245],{"class":256,"line":9882},[254,88242,52558],{"class":264},[254,88244,51954],{"class":51441},[254,88246,51448],{"class":264},[254,88248,88249,88251,88253],{"class":256,"line":9905},[254,88250,51926],{"class":264},[254,88252,51941],{"class":51441},[254,88254,51448],{"class":264},[254,88256,88257],{"class":256,"line":9929},[254,88258,2540],{"emptyLinePlaceholder":184},[254,88260,88261,88263,88265],{"class":256,"line":9934},[254,88262,51926],{"class":264},[254,88264,50776],{"class":51441},[254,88266,51448],{"class":264},[14,88268,88269],{},[1602,88270],{"alt":174,"src":88271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[22139,88273,88275,88276],{"id":88274},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[414,88277,88278],{},"js库lodash里面cloneDeep内部实现了深拷贝",[14,88280,88281],{},[42,88282,88283],{"href":88283,"rel":88284},"https:\u002F\u002Fwww.lodashjs.com\u002F",[151],[14,88286,88287],{},"lodash里边的方法都要加上一个下划线_",[14,88289,88290],{},"_.cloneDeep()",[245,88292,88294],{"className":50774,"code":88293,"language":50776,"meta":174,"style":174},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003C!-- 先引用这个库 -->\n  \u003Cscript src=\"lodash.min.js\">\u003C\u002Fscript>\n  \u003Cscript>\n    const obj = {\n      uname: 'pink',\n      age: 18,\n      hobby: ['乒乓球', '足球'],\n      family: {\n        baby: '小pink'\n      }\n    }\n    const o = _.cloneDeep(obj)\n    console.log(o)\n    o.family.baby = '老pink'\n    console.log(obj)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[251,88295,88296,88306,88320,88324,88332,88346,88366,88378,88386,88390,88398,88403,88422,88430,88440,88448,88456,88468,88472,88478,88482,88486,88502,88510,88519,88527,88535,88543,88547],{"__ignoreMap":174},[254,88297,88298,88300,88302,88304],{"class":256,"line":257},[254,88299,51438],{"class":264},[254,88301,51442],{"class":51441},[254,88303,51445],{"class":2103},[254,88305,51448],{"class":264},[254,88307,88308,88310,88312,88314,88316,88318],{"class":256,"line":175},[254,88309,1174],{"class":264},[254,88311,50776],{"class":51441},[254,88313,51457],{"class":2103},[254,88315,310],{"class":264},[254,88317,51462],{"class":369},[254,88319,51448],{"class":264},[254,88321,88322],{"class":256,"line":1319},[254,88323,2540],{"emptyLinePlaceholder":184},[254,88325,88326,88328,88330],{"class":256,"line":1334},[254,88327,1174],{"class":264},[254,88329,51475],{"class":51441},[254,88331,51448],{"class":264},[254,88333,88334,88336,88338,88340,88342,88344],{"class":256,"line":1340},[254,88335,52285],{"class":264},[254,88337,51485],{"class":51441},[254,88339,51488],{"class":2103},[254,88341,310],{"class":264},[254,88343,51493],{"class":369},[254,88345,51448],{"class":264},[254,88347,88348,88350,88352,88354,88356,88358,88360,88362,88364],{"class":256,"line":1354},[254,88349,52285],{"class":264},[254,88351,51485],{"class":51441},[254,88353,15061],{"class":2103},[254,88355,310],{"class":264},[254,88357,51532],{"class":369},[254,88359,51512],{"class":2103},[254,88361,310],{"class":264},[254,88363,51539],{"class":369},[254,88365,51448],{"class":264},[254,88367,88368,88370,88372,88374,88376],{"class":256,"line":1360},[254,88369,52285],{"class":264},[254,88371,51548],{"class":51441},[254,88373,51551],{"class":264},[254,88375,51548],{"class":51441},[254,88377,51448],{"class":264},[254,88379,88380,88382,88384],{"class":256,"line":1451},[254,88381,51926],{"class":264},[254,88383,51475],{"class":51441},[254,88385,51448],{"class":264},[254,88387,88388],{"class":256,"line":1457},[254,88389,2540],{"emptyLinePlaceholder":184},[254,88391,88392,88394,88396],{"class":256,"line":1469},[254,88393,1174],{"class":264},[254,88395,51941],{"class":51441},[254,88397,51448],{"class":264},[254,88399,88400],{"class":256,"line":1752},[254,88401,88402],{"class":323},"  \u003C!-- 先引用这个库 -->\n",[254,88404,88405,88407,88409,88411,88413,88416,88418,88420],{"class":256,"line":1757},[254,88406,52285],{"class":264},[254,88408,51954],{"class":51441},[254,88410,55380],{"class":2103},[254,88412,310],{"class":264},[254,88414,88415],{"class":369},"\"lodash.min.js\"",[254,88417,55455],{"class":264},[254,88419,51954],{"class":51441},[254,88421,51448],{"class":264},[254,88423,88424,88426,88428],{"class":256,"line":1763},[254,88425,52285],{"class":264},[254,88427,51954],{"class":51441},[254,88429,51448],{"class":264},[254,88431,88432,88434,88436,88438],{"class":256,"line":1768},[254,88433,11362],{"class":260},[254,88435,70112],{"class":313},[254,88437,13705],{"class":260},[254,88439,15713],{"class":264},[254,88441,88442,88444,88446],{"class":256,"line":1782},[254,88443,71757],{"class":264},[254,88445,87951],{"class":369},[254,88447,31607],{"class":264},[254,88449,88450,88452,88454],{"class":256,"line":1787},[254,88451,71767],{"class":264},[254,88453,914],{"class":313},[254,88455,31607],{"class":264},[254,88457,88458,88460,88462,88464,88466],{"class":256,"line":1793},[254,88459,87966],{"class":264},[254,88461,87969],{"class":369},[254,88463,12576],{"class":264},[254,88465,87974],{"class":369},[254,88467,87977],{"class":264},[254,88469,88470],{"class":256,"line":1814},[254,88471,78013],{"class":264},[254,88473,88474,88476],{"class":256,"line":1819},[254,88475,87986],{"class":264},[254,88477,87989],{"class":369},[254,88479,88480],{"class":256,"line":1833},[254,88481,52539],{"class":264},[254,88483,88484],{"class":256,"line":1838},[254,88485,2327],{"class":264},[254,88487,88488,88490,88492,88494,88497,88500],{"class":256,"line":1867},[254,88489,11362],{"class":260},[254,88491,88004],{"class":313},[254,88493,13705],{"class":260},[254,88495,88496],{"class":264}," _.",[254,88498,88499],{"class":2103},"cloneDeep",[254,88501,70177],{"class":264},[254,88503,88504,88506,88508],{"class":256,"line":1872},[254,88505,73894],{"class":264},[254,88507,58388],{"class":2103},[254,88509,88196],{"class":264},[254,88511,88512,88515,88517],{"class":256,"line":1889},[254,88513,88514],{"class":264},"    o.family.baby ",[254,88516,310],{"class":260},[254,88518,88230],{"class":369},[254,88520,88521,88523,88525],{"class":256,"line":1894},[254,88522,73894],{"class":264},[254,88524,58388],{"class":2103},[254,88526,70177],{"class":264},[254,88528,88529,88531,88533],{"class":256,"line":1899},[254,88530,52558],{"class":264},[254,88532,51954],{"class":51441},[254,88534,51448],{"class":264},[254,88536,88537,88539,88541],{"class":256,"line":1904},[254,88538,51926],{"class":264},[254,88540,51941],{"class":51441},[254,88542,51448],{"class":264},[254,88544,88545],{"class":256,"line":1918},[254,88546,2540],{"emptyLinePlaceholder":184},[254,88548,88549,88551,88553],{"class":256,"line":1923},[254,88550,51926],{"class":264},[254,88552,50776],{"class":51441},[254,88554,51448],{"class":264},[14,88556,88557],{},[1602,88558],{"alt":174,"src":88559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[22139,88561,88563],{"id":88562},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[245,88565,88567],{"className":50774,"code":88566,"language":50776,"meta":174,"style":174},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cscript>\n    const obj = {\n      uname: 'pink',\n      age: 18,\n      hobby: ['乒乓球', '足球'],\n      family: {\n        baby: '小pink'\n      }\n    }\n    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n    const o = JSON.parse(JSON.stringify(obj))\n    console.log(o)\n    o.family.baby = '123'\n    console.log(obj)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[251,88568,88569,88579,88593,88597,88605,88619,88639,88651,88659,88663,88671,88679,88689,88697,88705,88717,88721,88727,88731,88735,88740,88745,88750,88776,88784,88793,88801,88809,88817,88821],{"__ignoreMap":174},[254,88570,88571,88573,88575,88577],{"class":256,"line":257},[254,88572,51438],{"class":264},[254,88574,51442],{"class":51441},[254,88576,51445],{"class":2103},[254,88578,51448],{"class":264},[254,88580,88581,88583,88585,88587,88589,88591],{"class":256,"line":175},[254,88582,1174],{"class":264},[254,88584,50776],{"class":51441},[254,88586,51457],{"class":2103},[254,88588,310],{"class":264},[254,88590,51462],{"class":369},[254,88592,51448],{"class":264},[254,88594,88595],{"class":256,"line":1319},[254,88596,2540],{"emptyLinePlaceholder":184},[254,88598,88599,88601,88603],{"class":256,"line":1334},[254,88600,1174],{"class":264},[254,88602,51475],{"class":51441},[254,88604,51448],{"class":264},[254,88606,88607,88609,88611,88613,88615,88617],{"class":256,"line":1340},[254,88608,52285],{"class":264},[254,88610,51485],{"class":51441},[254,88612,51488],{"class":2103},[254,88614,310],{"class":264},[254,88616,51493],{"class":369},[254,88618,51448],{"class":264},[254,88620,88621,88623,88625,88627,88629,88631,88633,88635,88637],{"class":256,"line":1354},[254,88622,52285],{"class":264},[254,88624,51485],{"class":51441},[254,88626,15061],{"class":2103},[254,88628,310],{"class":264},[254,88630,51532],{"class":369},[254,88632,51512],{"class":2103},[254,88634,310],{"class":264},[254,88636,51539],{"class":369},[254,88638,51448],{"class":264},[254,88640,88641,88643,88645,88647,88649],{"class":256,"line":1360},[254,88642,52285],{"class":264},[254,88644,51548],{"class":51441},[254,88646,51551],{"class":264},[254,88648,51548],{"class":51441},[254,88650,51448],{"class":264},[254,88652,88653,88655,88657],{"class":256,"line":1451},[254,88654,51926],{"class":264},[254,88656,51475],{"class":51441},[254,88658,51448],{"class":264},[254,88660,88661],{"class":256,"line":1457},[254,88662,2540],{"emptyLinePlaceholder":184},[254,88664,88665,88667,88669],{"class":256,"line":1469},[254,88666,1174],{"class":264},[254,88668,51941],{"class":51441},[254,88670,51448],{"class":264},[254,88672,88673,88675,88677],{"class":256,"line":1752},[254,88674,52285],{"class":264},[254,88676,51954],{"class":51441},[254,88678,51448],{"class":264},[254,88680,88681,88683,88685,88687],{"class":256,"line":1757},[254,88682,11362],{"class":260},[254,88684,70112],{"class":313},[254,88686,13705],{"class":260},[254,88688,15713],{"class":264},[254,88690,88691,88693,88695],{"class":256,"line":1763},[254,88692,71757],{"class":264},[254,88694,87951],{"class":369},[254,88696,31607],{"class":264},[254,88698,88699,88701,88703],{"class":256,"line":1768},[254,88700,71767],{"class":264},[254,88702,914],{"class":313},[254,88704,31607],{"class":264},[254,88706,88707,88709,88711,88713,88715],{"class":256,"line":1782},[254,88708,87966],{"class":264},[254,88710,87969],{"class":369},[254,88712,12576],{"class":264},[254,88714,87974],{"class":369},[254,88716,87977],{"class":264},[254,88718,88719],{"class":256,"line":1787},[254,88720,78013],{"class":264},[254,88722,88723,88725],{"class":256,"line":1793},[254,88724,87986],{"class":264},[254,88726,87989],{"class":369},[254,88728,88729],{"class":256,"line":1814},[254,88730,52539],{"class":264},[254,88732,88733],{"class":256,"line":1819},[254,88734,2327],{"class":264},[254,88736,88737],{"class":256,"line":1833},[254,88738,88739],{"class":323},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[254,88741,88742],{"class":256,"line":1838},[254,88743,88744],{"class":323},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[254,88746,88747],{"class":256,"line":1867},[254,88748,88749],{"class":323},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[254,88751,88752,88754,88756,88758,88761,88763,88766,88768,88770,88772,88774],{"class":256,"line":1872},[254,88753,11362],{"class":260},[254,88755,88004],{"class":313},[254,88757,13705],{"class":260},[254,88759,88760],{"class":313}," JSON",[254,88762,822],{"class":264},[254,88764,88765],{"class":2103},"parse",[254,88767,265],{"class":264},[254,88769,71805],{"class":313},[254,88771,822],{"class":264},[254,88773,71810],{"class":2103},[254,88775,71813],{"class":264},[254,88777,88778,88780,88782],{"class":256,"line":1889},[254,88779,73894],{"class":264},[254,88781,58388],{"class":2103},[254,88783,88196],{"class":264},[254,88785,88786,88788,88790],{"class":256,"line":1894},[254,88787,88514],{"class":264},[254,88789,310],{"class":260},[254,88791,88792],{"class":369}," '123'\n",[254,88794,88795,88797,88799],{"class":256,"line":1899},[254,88796,73894],{"class":264},[254,88798,58388],{"class":2103},[254,88800,70177],{"class":264},[254,88802,88803,88805,88807],{"class":256,"line":1904},[254,88804,52558],{"class":264},[254,88806,51954],{"class":51441},[254,88808,51448],{"class":264},[254,88810,88811,88813,88815],{"class":256,"line":1918},[254,88812,51926],{"class":264},[254,88814,51941],{"class":51441},[254,88816,51448],{"class":264},[254,88818,88819],{"class":256,"line":1923},[254,88820,2540],{"emptyLinePlaceholder":184},[254,88822,88823,88825,88827],{"class":256,"line":2717},[254,88824,51926],{"class":264},[254,88826,50776],{"class":51441},[254,88828,51448],{"class":264},[14,88830,88831],{},[1602,88832],{"alt":174,"src":88833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[34,88835,88837],{"id":88836},"_415-异常处理","4.15 异常处理",[21,88839,88840],{},[24,88841,88842],{},"throw抛异常",[14,88844,88845],{},[1602,88846],{"alt":174,"src":88847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[21,88849,88850],{"start":175},[24,88851,88852],{},"try\u002Fcatch 捕获错误信息",[14,88854,88855],{},[1602,88856],{"alt":174,"src":88857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[245,88859,88861],{"className":50774,"code":88860,"language":50776,"meta":174,"style":174},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cp>123\u003C\u002Fp>\n  \u003Cscript>\n    function fn() {\n      try {\n        \u002F\u002F 可能发生错误的代码  要写到try中\n        const p = document.querySelector('.p')\n        p.style.color = 'red'\n      } catch (err) {\n        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n        console.log(err.message)\n        \u002F\u002F 想要中断程序，需要加return\n        \u002F\u002F return\n        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n        throw new Error('你看看，选择器错误了吧')\n      }\n      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n      finally {\n        alert('弹出对话框')\n      }\n      console.log(11)\n\n    }\n    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[251,88862,88863,88873,88887,88891,88899,88913,88933,88945,88953,88957,88965,88977,88985,88994,89001,89006,89025,89034,89045,89050,89060,89065,89070,89075,89092,89096,89101,89108,89120,89124,89136,89140,89144,89149,89154,89161,89169,89177,89181],{"__ignoreMap":174},[254,88864,88865,88867,88869,88871],{"class":256,"line":257},[254,88866,51438],{"class":264},[254,88868,51442],{"class":51441},[254,88870,51445],{"class":2103},[254,88872,51448],{"class":264},[254,88874,88875,88877,88879,88881,88883,88885],{"class":256,"line":175},[254,88876,1174],{"class":264},[254,88878,50776],{"class":51441},[254,88880,51457],{"class":2103},[254,88882,310],{"class":264},[254,88884,51462],{"class":369},[254,88886,51448],{"class":264},[254,88888,88889],{"class":256,"line":1319},[254,88890,2540],{"emptyLinePlaceholder":184},[254,88892,88893,88895,88897],{"class":256,"line":1334},[254,88894,1174],{"class":264},[254,88896,51475],{"class":51441},[254,88898,51448],{"class":264},[254,88900,88901,88903,88905,88907,88909,88911],{"class":256,"line":1340},[254,88902,52285],{"class":264},[254,88904,51485],{"class":51441},[254,88906,51488],{"class":2103},[254,88908,310],{"class":264},[254,88910,51493],{"class":369},[254,88912,51448],{"class":264},[254,88914,88915,88917,88919,88921,88923,88925,88927,88929,88931],{"class":256,"line":1354},[254,88916,52285],{"class":264},[254,88918,51485],{"class":51441},[254,88920,15061],{"class":2103},[254,88922,310],{"class":264},[254,88924,51532],{"class":369},[254,88926,51512],{"class":2103},[254,88928,310],{"class":264},[254,88930,51539],{"class":369},[254,88932,51448],{"class":264},[254,88934,88935,88937,88939,88941,88943],{"class":256,"line":1360},[254,88936,52285],{"class":264},[254,88938,51548],{"class":51441},[254,88940,51551],{"class":264},[254,88942,51548],{"class":51441},[254,88944,51448],{"class":264},[254,88946,88947,88949,88951],{"class":256,"line":1451},[254,88948,51926],{"class":264},[254,88950,51475],{"class":51441},[254,88952,51448],{"class":264},[254,88954,88955],{"class":256,"line":1457},[254,88956,2540],{"emptyLinePlaceholder":184},[254,88958,88959,88961,88963],{"class":256,"line":1469},[254,88960,1174],{"class":264},[254,88962,51941],{"class":51441},[254,88964,51448],{"class":264},[254,88966,88967,88969,88971,88973,88975],{"class":256,"line":1752},[254,88968,52285],{"class":264},[254,88970,14],{"class":51441},[254,88972,53635],{"class":264},[254,88974,14],{"class":51441},[254,88976,51448],{"class":264},[254,88978,88979,88981,88983],{"class":256,"line":1757},[254,88980,52285],{"class":264},[254,88982,51954],{"class":51441},[254,88984,51448],{"class":264},[254,88986,88987,88989,88992],{"class":256,"line":1763},[254,88988,70225],{"class":260},[254,88990,88991],{"class":2103}," fn",[254,88993,10994],{"class":264},[254,88995,88996,88999],{"class":256,"line":1768},[254,88997,88998],{"class":260},"      try",[254,89000,15713],{"class":264},[254,89002,89003],{"class":256,"line":1782},[254,89004,89005],{"class":323},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[254,89007,89008,89010,89012,89014,89016,89018,89020,89023],{"class":256,"line":1787},[254,89009,61411],{"class":260},[254,89011,6966],{"class":313},[254,89013,13705],{"class":260},[254,89015,54537],{"class":264},[254,89017,54540],{"class":2103},[254,89019,265],{"class":264},[254,89021,89022],{"class":369},"'.p'",[254,89024,271],{"class":264},[254,89026,89027,89030,89032],{"class":256,"line":1793},[254,89028,89029],{"class":264},"        p.style.color ",[254,89031,310],{"class":260},[254,89033,67192],{"class":369},[254,89035,89036,89039,89042],{"class":256,"line":1814},[254,89037,89038],{"class":264},"      } ",[254,89040,89041],{"class":260},"catch",[254,89043,89044],{"class":264}," (err) {\n",[254,89046,89047],{"class":256,"line":1819},[254,89048,89049],{"class":323},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[254,89051,89052,89055,89057],{"class":256,"line":1833},[254,89053,89054],{"class":264},"        console.",[254,89056,58388],{"class":2103},[254,89058,89059],{"class":264},"(err.message)\n",[254,89061,89062],{"class":256,"line":1838},[254,89063,89064],{"class":323},"        \u002F\u002F 想要中断程序，需要加return\n",[254,89066,89067],{"class":256,"line":1867},[254,89068,89069],{"class":323},"        \u002F\u002F return\n",[254,89071,89072],{"class":256,"line":1872},[254,89073,89074],{"class":323},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[254,89076,89077,89080,89082,89085,89087,89090],{"class":256,"line":1889},[254,89078,89079],{"class":260},"        throw",[254,89081,11719],{"class":260},[254,89083,89084],{"class":2103}," Error",[254,89086,265],{"class":264},[254,89088,89089],{"class":369},"'你看看，选择器错误了吧'",[254,89091,271],{"class":264},[254,89093,89094],{"class":256,"line":1894},[254,89095,52539],{"class":264},[254,89097,89098],{"class":256,"line":1899},[254,89099,89100],{"class":323},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[254,89102,89103,89106],{"class":256,"line":1904},[254,89104,89105],{"class":260},"      finally",[254,89107,15713],{"class":264},[254,89109,89110,89113,89115,89118],{"class":256,"line":1918},[254,89111,89112],{"class":2103},"        alert",[254,89114,265],{"class":264},[254,89116,89117],{"class":369},"'弹出对话框'",[254,89119,271],{"class":264},[254,89121,89122],{"class":256,"line":1923},[254,89123,52539],{"class":264},[254,89125,89126,89128,89130,89132,89134],{"class":256,"line":2717},[254,89127,58385],{"class":264},[254,89129,58388],{"class":2103},[254,89131,265],{"class":264},[254,89133,736],{"class":313},[254,89135,271],{"class":264},[254,89137,89138],{"class":256,"line":2731},[254,89139,2540],{"emptyLinePlaceholder":184},[254,89141,89142],{"class":256,"line":2739},[254,89143,2327],{"class":264},[254,89145,89146],{"class":256,"line":2744},[254,89147,89148],{"class":323},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[254,89150,89151],{"class":256,"line":2750},[254,89152,89153],{"class":323},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[254,89155,89156,89159],{"class":256,"line":2756},[254,89157,89158],{"class":2103},"    fn",[254,89160,2116],{"class":264},[254,89162,89163,89165,89167],{"class":256,"line":2761},[254,89164,52558],{"class":264},[254,89166,51954],{"class":51441},[254,89168,51448],{"class":264},[254,89170,89171,89173,89175],{"class":256,"line":8089},[254,89172,51926],{"class":264},[254,89174,51941],{"class":51441},[254,89176,51448],{"class":264},[254,89178,89179],{"class":256,"line":8113},[254,89180,2540],{"emptyLinePlaceholder":184},[254,89182,89183,89185,89187],{"class":256,"line":8118},[254,89184,51926],{"class":264},[254,89186,50776],{"class":51441},[254,89188,51448],{"class":264},[14,89190,89191],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[21,89193,89194],{"start":1319},[24,89195,89196],{},"debugger",[14,89198,89199],{},[1602,89200],{"alt":174,"src":89201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[14,89203,89204],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[34,89206,89208],{"id":89207},"_416-处理this","4.16 处理this",[225,89210,89212],{"id":89211},"_4161-this的指向","4.16.1 this的指向",[21,89214,89215],{},[24,89216,89217],{},"普通函数的this",[14,89219,89220],{},[1602,89221],{"alt":174,"src":89222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[21,89224,89225],{"start":175},[24,89226,89227],{},"箭头函数的this",[14,89229,89230],{},[1602,89231],{"alt":174,"src":89232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[14,89234,89235],{},[1602,89236],{"alt":174,"src":89237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[14,89239,89240],{},[1602,89241],{"alt":174,"src":89242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[225,89244,89246],{"id":89245},"_4162-this的改变","4.16.2 this的改变",[14,89248,89249],{},"call() apply() bind()",[21,89251,89252],{},[24,89253,89254],{},"call()",[14,89256,89257],{},[1602,89258],{"alt":174,"src":89259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[14,89261,89262],{},"两个作用：①调用函数；②改变this指向",[245,89264,89266],{"className":53208,"code":89265,"language":53210,"meta":174,"style":174},"\u003Cbody>\n  \u003Cscript>\n    const obj = {\n      uname: 'pink'\n    }\n    function fn(x, y) {\n      console.log(this)  \u002F\u002Fwindow\n      console.log(x + y)\n    }\n    fn.call(obj, 1, 2)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[251,89267,89268,89276,89284,89288,89293,89297,89302,89307,89312,89316,89321,89329],{"__ignoreMap":174},[254,89269,89270,89272,89274],{"class":256,"line":257},[254,89271,1174],{"class":264},[254,89273,51941],{"class":51441},[254,89275,51448],{"class":264},[254,89277,89278,89280,89282],{"class":256,"line":175},[254,89279,52285],{"class":264},[254,89281,51954],{"class":51441},[254,89283,51448],{"class":264},[254,89285,89286],{"class":256,"line":1319},[254,89287,71664],{"class":264},[254,89289,89290],{"class":256,"line":1334},[254,89291,89292],{"class":264},"      uname: 'pink'\n",[254,89294,89295],{"class":256,"line":1340},[254,89296,2327],{"class":264},[254,89298,89299],{"class":256,"line":1354},[254,89300,89301],{"class":264},"    function fn(x, y) {\n",[254,89303,89304],{"class":256,"line":1360},[254,89305,89306],{"class":264},"      console.log(this)  \u002F\u002Fwindow\n",[254,89308,89309],{"class":256,"line":1451},[254,89310,89311],{"class":264},"      console.log(x + y)\n",[254,89313,89314],{"class":256,"line":1457},[254,89315,2327],{"class":264},[254,89317,89318],{"class":256,"line":1469},[254,89319,89320],{"class":264},"    fn.call(obj, 1, 2)\n",[254,89322,89323,89325,89327],{"class":256,"line":1752},[254,89324,52558],{"class":264},[254,89326,51954],{"class":51441},[254,89328,51448],{"class":264},[254,89330,89331,89333,89335],{"class":256,"line":1757},[254,89332,51926],{"class":264},[254,89334,51941],{"class":51441},[254,89336,51448],{"class":264},[14,89338,89339],{},[1602,89340],{"alt":174,"src":89341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[21,89343,89344],{"start":175},[24,89345,89346],{},"apply()",[14,89348,89349],{},[1602,89350],{"alt":174,"src":89351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[14,89353,89262],{},[14,89355,89356],{},"call传递的是普通参数，而apply必须传递的是数组",[245,89358,89360],{"className":50774,"code":89359,"language":50776,"meta":174,"style":174},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cscript>\n    const obj = {\n      age: 18\n    }\n    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n    function fn(x, y) {\n      console.log(this)\n      console.log(x + y)\n    }\n    \u002F\u002F fn.apply(this指向谁, 数组参数)\n    fn.apply(obj, [1, 2])\n    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n\n    \u002F\u002F 使用场景：求数组最大值\n    \u002F\u002F const max = Math.max(1, 2, 3)\n    \u002F\u002F console.log(max)   \u002F\u002F3\n    \u002F\u002F 指向空或者Math都是可以的\n    const arr = [100, 44, 77]\n    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n    const max = Math.max.apply(Math, arr)\n    const min = Math.min.apply(Math, arr)\n    console.log(max, min)     \u002F\u002F100,4\n\n    \u002F\u002F 求最大值的另一种方式:展开运算符\n    console.log(Max.max(...arr))\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[251,89361,89362,89372,89386,89390,89398,89412,89432,89444,89452,89456,89464,89472,89482,89489,89493,89498,89514,89526,89540,89544,89549,89568,89573,89577,89582,89587,89595,89600,89622,89627,89643,89659,89671,89675,89680,89699,89707,89715,89719],{"__ignoreMap":174},[254,89363,89364,89366,89368,89370],{"class":256,"line":257},[254,89365,51438],{"class":264},[254,89367,51442],{"class":51441},[254,89369,51445],{"class":2103},[254,89371,51448],{"class":264},[254,89373,89374,89376,89378,89380,89382,89384],{"class":256,"line":175},[254,89375,1174],{"class":264},[254,89377,50776],{"class":51441},[254,89379,51457],{"class":2103},[254,89381,310],{"class":264},[254,89383,51462],{"class":369},[254,89385,51448],{"class":264},[254,89387,89388],{"class":256,"line":1319},[254,89389,2540],{"emptyLinePlaceholder":184},[254,89391,89392,89394,89396],{"class":256,"line":1334},[254,89393,1174],{"class":264},[254,89395,51475],{"class":51441},[254,89397,51448],{"class":264},[254,89399,89400,89402,89404,89406,89408,89410],{"class":256,"line":1340},[254,89401,52285],{"class":264},[254,89403,51485],{"class":51441},[254,89405,51488],{"class":2103},[254,89407,310],{"class":264},[254,89409,51493],{"class":369},[254,89411,51448],{"class":264},[254,89413,89414,89416,89418,89420,89422,89424,89426,89428,89430],{"class":256,"line":1354},[254,89415,52285],{"class":264},[254,89417,51485],{"class":51441},[254,89419,15061],{"class":2103},[254,89421,310],{"class":264},[254,89423,51532],{"class":369},[254,89425,51512],{"class":2103},[254,89427,310],{"class":264},[254,89429,51539],{"class":369},[254,89431,51448],{"class":264},[254,89433,89434,89436,89438,89440,89442],{"class":256,"line":1360},[254,89435,52285],{"class":264},[254,89437,51548],{"class":51441},[254,89439,51551],{"class":264},[254,89441,51548],{"class":51441},[254,89443,51448],{"class":264},[254,89445,89446,89448,89450],{"class":256,"line":1451},[254,89447,51926],{"class":264},[254,89449,51475],{"class":51441},[254,89451,51448],{"class":264},[254,89453,89454],{"class":256,"line":1457},[254,89455,2540],{"emptyLinePlaceholder":184},[254,89457,89458,89460,89462],{"class":256,"line":1469},[254,89459,1174],{"class":264},[254,89461,51941],{"class":51441},[254,89463,51448],{"class":264},[254,89465,89466,89468,89470],{"class":256,"line":1752},[254,89467,52285],{"class":264},[254,89469,51954],{"class":51441},[254,89471,51448],{"class":264},[254,89473,89474,89476,89478,89480],{"class":256,"line":1757},[254,89475,11362],{"class":260},[254,89477,70112],{"class":313},[254,89479,13705],{"class":260},[254,89481,15713],{"class":264},[254,89483,89484,89486],{"class":256,"line":1763},[254,89485,71767],{"class":264},[254,89487,89488],{"class":313},"18\n",[254,89490,89491],{"class":256,"line":1768},[254,89492,2327],{"class":264},[254,89494,89495],{"class":256,"line":1782},[254,89496,89497],{"class":323},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[254,89499,89500,89502,89504,89506,89508,89510,89512],{"class":256,"line":1787},[254,89501,70225],{"class":260},[254,89503,88991],{"class":2103},[254,89505,265],{"class":264},[254,89507,1084],{"class":5357},[254,89509,12576],{"class":264},[254,89511,1109],{"class":5357},[254,89513,12583],{"class":264},[254,89515,89516,89518,89520,89522,89524],{"class":256,"line":1793},[254,89517,58385],{"class":264},[254,89519,58388],{"class":2103},[254,89521,265],{"class":264},[254,89523,87134],{"class":313},[254,89525,271],{"class":264},[254,89527,89528,89530,89532,89535,89537],{"class":256,"line":1814},[254,89529,58385],{"class":264},[254,89531,58388],{"class":2103},[254,89533,89534],{"class":264},"(x ",[254,89536,745],{"class":260},[254,89538,89539],{"class":264}," y)\n",[254,89541,89542],{"class":256,"line":1819},[254,89543,2327],{"class":264},[254,89545,89546],{"class":256,"line":1833},[254,89547,89548],{"class":323},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[254,89550,89551,89554,89557,89560,89562,89564,89566],{"class":256,"line":1838},[254,89552,89553],{"class":264},"    fn.",[254,89555,89556],{"class":2103},"apply",[254,89558,89559],{"class":264},"(obj, [",[254,89561,482],{"class":313},[254,89563,12576],{"class":264},[254,89565,342],{"class":313},[254,89567,4797],{"class":264},[254,89569,89570],{"class":256,"line":1867},[254,89571,89572],{"class":323},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[254,89574,89575],{"class":256,"line":1872},[254,89576,2540],{"emptyLinePlaceholder":184},[254,89578,89579],{"class":256,"line":1889},[254,89580,89581],{"class":323},"    \u002F\u002F 使用场景：求数组最大值\n",[254,89583,89584],{"class":256,"line":1894},[254,89585,89586],{"class":323},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[254,89588,89589,89592],{"class":256,"line":1899},[254,89590,89591],{"class":323},"    \u002F\u002F console.log(max)",[254,89593,89594],{"class":323},"   \u002F\u002F3\n",[254,89596,89597],{"class":256,"line":1904},[254,89598,89599],{"class":323},"    \u002F\u002F 指向空或者Math都是可以的\n",[254,89601,89602,89604,89606,89608,89610,89612,89614,89616,89618,89620],{"class":256,"line":1918},[254,89603,11362],{"class":260},[254,89605,57836],{"class":313},[254,89607,13705],{"class":260},[254,89609,52367],{"class":264},[254,89611,575],{"class":313},[254,89613,12576],{"class":264},[254,89615,768],{"class":313},[254,89617,12576],{"class":264},[254,89619,799],{"class":313},[254,89621,33387],{"class":264},[254,89623,89624],{"class":256,"line":1923},[254,89625,89626],{"class":323},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[254,89628,89629,89631,89633,89635,89638,89640],{"class":256,"line":2717},[254,89630,11362],{"class":260},[254,89632,6092],{"class":313},[254,89634,13705],{"class":260},[254,89636,89637],{"class":264}," Math.max.",[254,89639,89556],{"class":2103},[254,89641,89642],{"class":264},"(Math, arr)\n",[254,89644,89645,89647,89650,89652,89655,89657],{"class":256,"line":2731},[254,89646,11362],{"class":260},[254,89648,89649],{"class":313}," min",[254,89651,13705],{"class":260},[254,89653,89654],{"class":264}," Math.min.",[254,89656,89556],{"class":2103},[254,89658,89642],{"class":264},[254,89660,89661,89663,89665,89668],{"class":256,"line":2739},[254,89662,73894],{"class":264},[254,89664,58388],{"class":2103},[254,89666,89667],{"class":264},"(max, min)     ",[254,89669,89670],{"class":323},"\u002F\u002F100,4\n",[254,89672,89673],{"class":256,"line":2744},[254,89674,2540],{"emptyLinePlaceholder":184},[254,89676,89677],{"class":256,"line":2750},[254,89678,89679],{"class":323},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[254,89681,89682,89684,89686,89689,89691,89693,89696],{"class":256,"line":2756},[254,89683,73894],{"class":264},[254,89685,58388],{"class":2103},[254,89687,89688],{"class":264},"(Max.",[254,89690,6156],{"class":2103},[254,89692,265],{"class":264},[254,89694,89695],{"class":260},"...",[254,89697,89698],{"class":264},"arr))\n",[254,89700,89701,89703,89705],{"class":256,"line":2761},[254,89702,52558],{"class":264},[254,89704,51954],{"class":51441},[254,89706,51448],{"class":264},[254,89708,89709,89711,89713],{"class":256,"line":8089},[254,89710,51926],{"class":264},[254,89712,51941],{"class":51441},[254,89714,51448],{"class":264},[254,89716,89717],{"class":256,"line":8113},[254,89718,2540],{"emptyLinePlaceholder":184},[254,89720,89721,89723,89725],{"class":256,"line":8118},[254,89722,51926],{"class":264},[254,89724,50776],{"class":51441},[254,89726,51448],{"class":264},[14,89728,89729],{},[1602,89730],{"alt":174,"src":89731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[21,89733,89734],{"start":1319},[24,89735,89736],{},"bind()",[14,89738,89739],{},[1602,89740],{"alt":174,"src":89741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[14,89743,89744],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[14,89746,89747],{},"bind的语法跟call很相似",[245,89749,89751],{"className":53208,"code":89750,"language":53210,"meta":174,"style":174},"\u003Cbody>\n  \u003Cscript>\n    const obj = {\n      age: 18\n    }\n    function fn() {\n      console.log(this)\n    }\n    \u002F\u002F 1.bind 不会调用函数\n    \u002F\u002F 2.bind能改变this的指向\n    fn.bind()\n    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n    const fun = fn.bind(obj)\n    \u002F\u002F console.log(fun)\n    \u002F\u002F 调用,查看this的指向\n    fun()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[251,89752,89753,89761,89769,89773,89778,89782,89786,89791,89795,89800,89805,89810,89815,89820,89825,89830,89834,89842],{"__ignoreMap":174},[254,89754,89755,89757,89759],{"class":256,"line":257},[254,89756,1174],{"class":264},[254,89758,51941],{"class":51441},[254,89760,51448],{"class":264},[254,89762,89763,89765,89767],{"class":256,"line":175},[254,89764,52285],{"class":264},[254,89766,51954],{"class":51441},[254,89768,51448],{"class":264},[254,89770,89771],{"class":256,"line":1319},[254,89772,71664],{"class":264},[254,89774,89775],{"class":256,"line":1334},[254,89776,89777],{"class":264},"      age: 18\n",[254,89779,89780],{"class":256,"line":1340},[254,89781,2327],{"class":264},[254,89783,89784],{"class":256,"line":1354},[254,89785,77284],{"class":264},[254,89787,89788],{"class":256,"line":1360},[254,89789,89790],{"class":264},"      console.log(this)\n",[254,89792,89793],{"class":256,"line":1451},[254,89794,2327],{"class":264},[254,89796,89797],{"class":256,"line":1457},[254,89798,89799],{"class":264},"    \u002F\u002F 1.bind 不会调用函数\n",[254,89801,89802],{"class":256,"line":1469},[254,89803,89804],{"class":264},"    \u002F\u002F 2.bind能改变this的指向\n",[254,89806,89807],{"class":256,"line":1752},[254,89808,89809],{"class":264},"    fn.bind()\n",[254,89811,89812],{"class":256,"line":1757},[254,89813,89814],{"class":264},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[254,89816,89817],{"class":256,"line":1763},[254,89818,89819],{"class":264},"    const fun = fn.bind(obj)\n",[254,89821,89822],{"class":256,"line":1768},[254,89823,89824],{"class":264},"    \u002F\u002F console.log(fun)\n",[254,89826,89827],{"class":256,"line":1782},[254,89828,89829],{"class":264},"    \u002F\u002F 调用,查看this的指向\n",[254,89831,89832],{"class":256,"line":1787},[254,89833,52792],{"class":264},[254,89835,89836,89838,89840],{"class":256,"line":1793},[254,89837,52558],{"class":264},[254,89839,51954],{"class":51441},[254,89841,51448],{"class":264},[254,89843,89844,89846,89848],{"class":256,"line":1814},[254,89845,51926],{"class":264},[254,89847,51941],{"class":51441},[254,89849,51448],{"class":264},[14,89851,89852],{},[1602,89853],{"alt":174,"src":89854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[21,89856,89857],{"start":1334},[24,89858,89859],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[245,89861,89863],{"className":53208,"code":89862,"language":53210,"meta":174,"style":174},"\u003Cbody>\n  \u003Cbutton>禁用\u003C\u002Fbutton>\n  \u003Cscript>\n    const btn = document.querySelector('button')\n    btn.addEventListener('click', function () {\n      this.disabled = true\n      \u002F\u002F 定时器是window进行调用的\n      setTimeout(function () {\n        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n        this.disabled = false\n      }.bind(this), 2000)\n      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[251,89864,89865,89873,89886,89894,89899,89903,89908,89913,89918,89923,89928,89933,89938,89943,89947,89955],{"__ignoreMap":174},[254,89866,89867,89869,89871],{"class":256,"line":257},[254,89868,1174],{"class":264},[254,89870,51941],{"class":51441},[254,89872,51448],{"class":264},[254,89874,89875,89877,89879,89882,89884],{"class":256,"line":175},[254,89876,52285],{"class":264},[254,89878,54028],{"class":51441},[254,89880,89881],{"class":264},">禁用\u003C\u002F",[254,89883,54028],{"class":51441},[254,89885,51448],{"class":264},[254,89887,89888,89890,89892],{"class":256,"line":1319},[254,89889,52285],{"class":264},[254,89891,51954],{"class":51441},[254,89893,51448],{"class":264},[254,89895,89896],{"class":256,"line":1334},[254,89897,89898],{"class":264},"    const btn = document.querySelector('button')\n",[254,89900,89901],{"class":256,"line":1340},[254,89902,59157],{"class":264},[254,89904,89905],{"class":256,"line":1354},[254,89906,89907],{"class":264},"      this.disabled = true\n",[254,89909,89910],{"class":256,"line":1360},[254,89911,89912],{"class":264},"      \u002F\u002F 定时器是window进行调用的\n",[254,89914,89915],{"class":256,"line":1451},[254,89916,89917],{"class":264},"      setTimeout(function () {\n",[254,89919,89920],{"class":256,"line":1457},[254,89921,89922],{"class":264},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[254,89924,89925],{"class":256,"line":1469},[254,89926,89927],{"class":264},"        this.disabled = false\n",[254,89929,89930],{"class":256,"line":1752},[254,89931,89932],{"class":264},"      }.bind(this), 2000)\n",[254,89934,89935],{"class":256,"line":1757},[254,89936,89937],{"class":264},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[254,89939,89940],{"class":256,"line":1763},[254,89941,89942],{"class":264},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[254,89944,89945],{"class":256,"line":1768},[254,89946,33602],{"class":264},[254,89948,89949,89951,89953],{"class":256,"line":1782},[254,89950,52558],{"class":264},[254,89952,51954],{"class":51441},[254,89954,51448],{"class":264},[254,89956,89957,89959,89961],{"class":256,"line":1787},[254,89958,51926],{"class":264},[254,89960,51941],{"class":51441},[254,89962,51448],{"class":264},[21,89964,89965],{"start":1340},[24,89966,22094],{},[14,89968,89969],{},[1602,89970],{"alt":174,"src":89971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[34,89973,89975],{"id":89974},"_417-性能优化","4.17 性能优化",[225,89977,89979],{"id":89978},"_4171-防抖","4.17.1 防抖",[14,89981,89982],{},[1602,89983],{"alt":174,"src":89984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[14,89986,89987],{},[414,89988,89989],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[14,89991,89992],{},"防抖实现方式：",[1271,89994,89995],{},[24,89996,89997],{},"lodash 提供了防抖处理",[14,89999,90000],{},"_.debounce(func,[wait=0],[options={}])",[14,90002,90003],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[245,90005,90007],{"className":50774,"code":90006,"language":50776,"meta":174,"style":174},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    .box {\n      box-sizing: border-box;\n      width: 200px;\n      height: 200px;\n      background-color: gray;\n      font-size: 25px;\n      color: #fff;\n      text-align: center;\n      padding-top: 5px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"box\">\u003C\u002Fdiv>\n  \u003Cscript src=\"lodash.min.js\">\u003C\u002Fscript>\n  \u003Cscript>\n    const box = document.querySelector('.box')\n    let i = 0\n    function mouseMove() {\n      box.innerHTML = i++\n      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n    }\n    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n    box.addEventListener('mousemove', _.debounce(mouseMove, 500))\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[251,90008,90009,90019,90033,90037,90045,90059,90079,90091,90099,90105,90115,90127,90139,90150,90162,90172,90182,90195,90199,90207,90215,90219,90227,90245,90263,90271,90290,90300,90309,90320,90325,90329,90334,90339,90344,90369,90377,90385,90389],{"__ignoreMap":174},[254,90010,90011,90013,90015,90017],{"class":256,"line":257},[254,90012,51438],{"class":264},[254,90014,51442],{"class":51441},[254,90016,51445],{"class":2103},[254,90018,51448],{"class":264},[254,90020,90021,90023,90025,90027,90029,90031],{"class":256,"line":175},[254,90022,1174],{"class":264},[254,90024,50776],{"class":51441},[254,90026,51457],{"class":2103},[254,90028,310],{"class":264},[254,90030,51462],{"class":369},[254,90032,51448],{"class":264},[254,90034,90035],{"class":256,"line":1319},[254,90036,2540],{"emptyLinePlaceholder":184},[254,90038,90039,90041,90043],{"class":256,"line":1334},[254,90040,1174],{"class":264},[254,90042,51475],{"class":51441},[254,90044,51448],{"class":264},[254,90046,90047,90049,90051,90053,90055,90057],{"class":256,"line":1340},[254,90048,52285],{"class":264},[254,90050,51485],{"class":51441},[254,90052,51488],{"class":2103},[254,90054,310],{"class":264},[254,90056,51493],{"class":369},[254,90058,51448],{"class":264},[254,90060,90061,90063,90065,90067,90069,90071,90073,90075,90077],{"class":256,"line":1354},[254,90062,52285],{"class":264},[254,90064,51485],{"class":51441},[254,90066,15061],{"class":2103},[254,90068,310],{"class":264},[254,90070,51532],{"class":369},[254,90072,51512],{"class":2103},[254,90074,310],{"class":264},[254,90076,51539],{"class":369},[254,90078,51448],{"class":264},[254,90080,90081,90083,90085,90087,90089],{"class":256,"line":1360},[254,90082,52285],{"class":264},[254,90084,51548],{"class":51441},[254,90086,51551],{"class":264},[254,90088,51548],{"class":51441},[254,90090,51448],{"class":264},[254,90092,90093,90095,90097],{"class":256,"line":1451},[254,90094,52285],{"class":264},[254,90096,5267],{"class":51441},[254,90098,51448],{"class":264},[254,90100,90101,90103],{"class":256,"line":1457},[254,90102,54893],{"class":2103},[254,90104,15713],{"class":264},[254,90106,90107,90109,90111,90113],{"class":256,"line":1469},[254,90108,72737],{"class":313},[254,90110,51578],{"class":264},[254,90112,60646],{"class":313},[254,90114,1430],{"class":264},[254,90116,90117,90119,90121,90123,90125],{"class":256,"line":1752},[254,90118,54912],{"class":313},[254,90120,51578],{"class":264},[254,90122,1862],{"class":313},[254,90124,51633],{"class":260},[254,90126,1430],{"class":264},[254,90128,90129,90131,90133,90135,90137],{"class":256,"line":1757},[254,90130,54926],{"class":313},[254,90132,51578],{"class":264},[254,90134,1862],{"class":313},[254,90136,51633],{"class":260},[254,90138,1430],{"class":264},[254,90140,90141,90143,90145,90148],{"class":256,"line":1763},[254,90142,55025],{"class":313},[254,90144,51578],{"class":264},[254,90146,90147],{"class":313},"gray",[254,90149,1430],{"class":264},[254,90151,90152,90154,90156,90158,90160],{"class":256,"line":1768},[254,90153,55063],{"class":313},[254,90155,51578],{"class":264},[254,90157,1089],{"class":313},[254,90159,51633],{"class":260},[254,90161,1430],{"class":264},[254,90163,90164,90166,90168,90170],{"class":256,"line":1782},[254,90165,57557],{"class":313},[254,90167,51578],{"class":264},[254,90169,60983],{"class":313},[254,90171,1430],{"class":264},[254,90173,90174,90176,90178,90180],{"class":256,"line":1787},[254,90175,57427],{"class":313},[254,90177,51578],{"class":264},[254,90179,51733],{"class":313},[254,90181,1430],{"class":264},[254,90183,90184,90187,90189,90191,90193],{"class":256,"line":1793},[254,90185,90186],{"class":313},"      padding-top",[254,90188,51578],{"class":264},[254,90190,583],{"class":313},[254,90192,51633],{"class":260},[254,90194,1430],{"class":264},[254,90196,90197],{"class":256,"line":1814},[254,90198,2327],{"class":264},[254,90200,90201,90203,90205],{"class":256,"line":1819},[254,90202,52558],{"class":264},[254,90204,5267],{"class":51441},[254,90206,51448],{"class":264},[254,90208,90209,90211,90213],{"class":256,"line":1833},[254,90210,51926],{"class":264},[254,90212,51475],{"class":51441},[254,90214,51448],{"class":264},[254,90216,90217],{"class":256,"line":1838},[254,90218,2540],{"emptyLinePlaceholder":184},[254,90220,90221,90223,90225],{"class":256,"line":1867},[254,90222,1174],{"class":264},[254,90224,51941],{"class":51441},[254,90226,51448],{"class":264},[254,90228,90229,90231,90233,90235,90237,90239,90241,90243],{"class":256,"line":1872},[254,90230,52285],{"class":264},[254,90232,51752],{"class":51441},[254,90234,53627],{"class":2103},[254,90236,310],{"class":264},[254,90238,53632],{"class":369},[254,90240,55455],{"class":264},[254,90242,51752],{"class":51441},[254,90244,51448],{"class":264},[254,90246,90247,90249,90251,90253,90255,90257,90259,90261],{"class":256,"line":1889},[254,90248,52285],{"class":264},[254,90250,51954],{"class":51441},[254,90252,55380],{"class":2103},[254,90254,310],{"class":264},[254,90256,88415],{"class":369},[254,90258,55455],{"class":264},[254,90260,51954],{"class":51441},[254,90262,51448],{"class":264},[254,90264,90265,90267,90269],{"class":256,"line":1894},[254,90266,52285],{"class":264},[254,90268,51954],{"class":51441},[254,90270,51448],{"class":264},[254,90272,90273,90275,90277,90279,90281,90283,90285,90288],{"class":256,"line":1899},[254,90274,11362],{"class":260},[254,90276,87074],{"class":313},[254,90278,13705],{"class":260},[254,90280,54537],{"class":264},[254,90282,54540],{"class":2103},[254,90284,265],{"class":264},[254,90286,90287],{"class":369},"'.box'",[254,90289,271],{"class":264},[254,90291,90292,90294,90296,90298],{"class":256,"line":1904},[254,90293,52360],{"class":260},[254,90295,9579],{"class":264},[254,90297,310],{"class":260},[254,90299,47474],{"class":313},[254,90301,90302,90304,90307],{"class":256,"line":1918},[254,90303,70225],{"class":260},[254,90305,90306],{"class":2103}," mouseMove",[254,90308,10994],{"class":264},[254,90310,90311,90314,90316,90318],{"class":256,"line":1923},[254,90312,90313],{"class":264},"      box.innerHTML ",[254,90315,310],{"class":260},[254,90317,3172],{"class":264},[254,90319,2842],{"class":260},[254,90321,90322],{"class":256,"line":2717},[254,90323,90324],{"class":323},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[254,90326,90327],{"class":256,"line":2731},[254,90328,2327],{"class":264},[254,90330,90331],{"class":256,"line":2739},[254,90332,90333],{"class":323},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[254,90335,90336],{"class":256,"line":2744},[254,90337,90338],{"class":323},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[254,90340,90341],{"class":256,"line":2750},[254,90342,90343],{"class":323},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[254,90345,90346,90349,90351,90353,90356,90359,90362,90365,90367],{"class":256,"line":2756},[254,90347,90348],{"class":264},"    box.",[254,90350,57954],{"class":2103},[254,90352,265],{"class":264},[254,90354,90355],{"class":369},"'mousemove'",[254,90357,90358],{"class":264},", _.",[254,90360,90361],{"class":2103},"debounce",[254,90363,90364],{"class":264},"(mouseMove, ",[254,90366,65215],{"class":313},[254,90368,30638],{"class":264},[254,90370,90371,90373,90375],{"class":256,"line":2761},[254,90372,52558],{"class":264},[254,90374,51954],{"class":51441},[254,90376,51448],{"class":264},[254,90378,90379,90381,90383],{"class":256,"line":8089},[254,90380,51926],{"class":264},[254,90382,51941],{"class":51441},[254,90384,51448],{"class":264},[254,90386,90387],{"class":256,"line":8113},[254,90388,2540],{"emptyLinePlaceholder":184},[254,90390,90391,90393,90395],{"class":256,"line":8118},[254,90392,51926],{"class":264},[254,90394,50776],{"class":51441},[254,90396,51448],{"class":264},[1271,90398,90399],{},[24,90400,90401],{},"手写一个防抖函数来处理",[14,90403,90404],{},"防抖的核心就是利用定时器来实现的：",[14,90406,90407],{},"①声明一个定时器变量",[14,90409,90410],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[14,90412,90413],{},"③如果没有定时器则开启定时器，记得存到变量里面",[245,90415,90417],{"className":50774,"code":90416,"language":50776,"meta":174,"style":174},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    .box {\n      box-sizing: border-box;\n      width: 200px;\n      height: 200px;\n      background-color: gray;\n      font-size: 25px;\n      color: #fff;\n      text-align: center;\n      padding-top: 5px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"box\">\u003C\u002Fdiv>\n  \u003Cscript src=\"lodash.min.js\">\u003C\u002Fscript>\n  \u003Cscript>\n    const box = document.querySelector('.box')\n    let i = 0\n    function mouseMove() {\n      box.innerHTML = i++\n      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n    }\n    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n    \u002F\u002F 手写防抖函数\n    \u002F\u002F 核心是利用延时器setTimeout来实现的\n    \u002F\u002F 1.声明定时器变量\n    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n    \u002F\u002F 4.定时器里面写函数调用\n    function debounce(fn, t) {\n      let timer\n      \u002F\u002F return 返回一个匿名函数\n      return function () {\n        \u002F\u002F 这里边写第二三四步\n        if (timer) clearTimeout(timer)\n        timer = setTimeout(function () {\n          fn() \u002F\u002F加小括号调用fn }, t)\n        }, t)\n      }\n    }\n    box.addEventListener('mousemove', debounce(mouseMove, 500))\n\n    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[251,90418,90419,90429,90443,90447,90455,90469,90489,90501,90509,90515,90525,90537,90549,90559,90571,90581,90591,90603,90607,90615,90623,90627,90635,90653,90671,90679,90697,90707,90715,90725,90729,90733,90737,90742,90747,90752,90757,90762,90767,90785,90792,90797,90805,90810,90823,90839,90849,90854,90858,90862,90882,90886,90891,90896,90901,90906,90914,90922,90926],{"__ignoreMap":174},[254,90420,90421,90423,90425,90427],{"class":256,"line":257},[254,90422,51438],{"class":264},[254,90424,51442],{"class":51441},[254,90426,51445],{"class":2103},[254,90428,51448],{"class":264},[254,90430,90431,90433,90435,90437,90439,90441],{"class":256,"line":175},[254,90432,1174],{"class":264},[254,90434,50776],{"class":51441},[254,90436,51457],{"class":2103},[254,90438,310],{"class":264},[254,90440,51462],{"class":369},[254,90442,51448],{"class":264},[254,90444,90445],{"class":256,"line":1319},[254,90446,2540],{"emptyLinePlaceholder":184},[254,90448,90449,90451,90453],{"class":256,"line":1334},[254,90450,1174],{"class":264},[254,90452,51475],{"class":51441},[254,90454,51448],{"class":264},[254,90456,90457,90459,90461,90463,90465,90467],{"class":256,"line":1340},[254,90458,52285],{"class":264},[254,90460,51485],{"class":51441},[254,90462,51488],{"class":2103},[254,90464,310],{"class":264},[254,90466,51493],{"class":369},[254,90468,51448],{"class":264},[254,90470,90471,90473,90475,90477,90479,90481,90483,90485,90487],{"class":256,"line":1354},[254,90472,52285],{"class":264},[254,90474,51485],{"class":51441},[254,90476,15061],{"class":2103},[254,90478,310],{"class":264},[254,90480,51532],{"class":369},[254,90482,51512],{"class":2103},[254,90484,310],{"class":264},[254,90486,51539],{"class":369},[254,90488,51448],{"class":264},[254,90490,90491,90493,90495,90497,90499],{"class":256,"line":1360},[254,90492,52285],{"class":264},[254,90494,51548],{"class":51441},[254,90496,51551],{"class":264},[254,90498,51548],{"class":51441},[254,90500,51448],{"class":264},[254,90502,90503,90505,90507],{"class":256,"line":1451},[254,90504,52285],{"class":264},[254,90506,5267],{"class":51441},[254,90508,51448],{"class":264},[254,90510,90511,90513],{"class":256,"line":1457},[254,90512,54893],{"class":2103},[254,90514,15713],{"class":264},[254,90516,90517,90519,90521,90523],{"class":256,"line":1469},[254,90518,72737],{"class":313},[254,90520,51578],{"class":264},[254,90522,60646],{"class":313},[254,90524,1430],{"class":264},[254,90526,90527,90529,90531,90533,90535],{"class":256,"line":1752},[254,90528,54912],{"class":313},[254,90530,51578],{"class":264},[254,90532,1862],{"class":313},[254,90534,51633],{"class":260},[254,90536,1430],{"class":264},[254,90538,90539,90541,90543,90545,90547],{"class":256,"line":1757},[254,90540,54926],{"class":313},[254,90542,51578],{"class":264},[254,90544,1862],{"class":313},[254,90546,51633],{"class":260},[254,90548,1430],{"class":264},[254,90550,90551,90553,90555,90557],{"class":256,"line":1763},[254,90552,55025],{"class":313},[254,90554,51578],{"class":264},[254,90556,90147],{"class":313},[254,90558,1430],{"class":264},[254,90560,90561,90563,90565,90567,90569],{"class":256,"line":1768},[254,90562,55063],{"class":313},[254,90564,51578],{"class":264},[254,90566,1089],{"class":313},[254,90568,51633],{"class":260},[254,90570,1430],{"class":264},[254,90572,90573,90575,90577,90579],{"class":256,"line":1782},[254,90574,57557],{"class":313},[254,90576,51578],{"class":264},[254,90578,60983],{"class":313},[254,90580,1430],{"class":264},[254,90582,90583,90585,90587,90589],{"class":256,"line":1787},[254,90584,57427],{"class":313},[254,90586,51578],{"class":264},[254,90588,51733],{"class":313},[254,90590,1430],{"class":264},[254,90592,90593,90595,90597,90599,90601],{"class":256,"line":1793},[254,90594,90186],{"class":313},[254,90596,51578],{"class":264},[254,90598,583],{"class":313},[254,90600,51633],{"class":260},[254,90602,1430],{"class":264},[254,90604,90605],{"class":256,"line":1814},[254,90606,2327],{"class":264},[254,90608,90609,90611,90613],{"class":256,"line":1819},[254,90610,52558],{"class":264},[254,90612,5267],{"class":51441},[254,90614,51448],{"class":264},[254,90616,90617,90619,90621],{"class":256,"line":1833},[254,90618,51926],{"class":264},[254,90620,51475],{"class":51441},[254,90622,51448],{"class":264},[254,90624,90625],{"class":256,"line":1838},[254,90626,2540],{"emptyLinePlaceholder":184},[254,90628,90629,90631,90633],{"class":256,"line":1867},[254,90630,1174],{"class":264},[254,90632,51941],{"class":51441},[254,90634,51448],{"class":264},[254,90636,90637,90639,90641,90643,90645,90647,90649,90651],{"class":256,"line":1872},[254,90638,52285],{"class":264},[254,90640,51752],{"class":51441},[254,90642,53627],{"class":2103},[254,90644,310],{"class":264},[254,90646,53632],{"class":369},[254,90648,55455],{"class":264},[254,90650,51752],{"class":51441},[254,90652,51448],{"class":264},[254,90654,90655,90657,90659,90661,90663,90665,90667,90669],{"class":256,"line":1889},[254,90656,52285],{"class":264},[254,90658,51954],{"class":51441},[254,90660,55380],{"class":2103},[254,90662,310],{"class":264},[254,90664,88415],{"class":369},[254,90666,55455],{"class":264},[254,90668,51954],{"class":51441},[254,90670,51448],{"class":264},[254,90672,90673,90675,90677],{"class":256,"line":1894},[254,90674,52285],{"class":264},[254,90676,51954],{"class":51441},[254,90678,51448],{"class":264},[254,90680,90681,90683,90685,90687,90689,90691,90693,90695],{"class":256,"line":1899},[254,90682,11362],{"class":260},[254,90684,87074],{"class":313},[254,90686,13705],{"class":260},[254,90688,54537],{"class":264},[254,90690,54540],{"class":2103},[254,90692,265],{"class":264},[254,90694,90287],{"class":369},[254,90696,271],{"class":264},[254,90698,90699,90701,90703,90705],{"class":256,"line":1904},[254,90700,52360],{"class":260},[254,90702,9579],{"class":264},[254,90704,310],{"class":260},[254,90706,47474],{"class":313},[254,90708,90709,90711,90713],{"class":256,"line":1918},[254,90710,70225],{"class":260},[254,90712,90306],{"class":2103},[254,90714,10994],{"class":264},[254,90716,90717,90719,90721,90723],{"class":256,"line":1923},[254,90718,90313],{"class":264},[254,90720,310],{"class":260},[254,90722,3172],{"class":264},[254,90724,2842],{"class":260},[254,90726,90727],{"class":256,"line":2717},[254,90728,90324],{"class":323},[254,90730,90731],{"class":256,"line":2731},[254,90732,2327],{"class":264},[254,90734,90735],{"class":256,"line":2739},[254,90736,90333],{"class":323},[254,90738,90739],{"class":256,"line":2744},[254,90740,90741],{"class":323},"    \u002F\u002F 手写防抖函数\n",[254,90743,90744],{"class":256,"line":2750},[254,90745,90746],{"class":323},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[254,90748,90749],{"class":256,"line":2756},[254,90750,90751],{"class":323},"    \u002F\u002F 1.声明定时器变量\n",[254,90753,90754],{"class":256,"line":2761},[254,90755,90756],{"class":323},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[254,90758,90759],{"class":256,"line":8089},[254,90760,90761],{"class":323},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[254,90763,90764],{"class":256,"line":8113},[254,90765,90766],{"class":323},"    \u002F\u002F 4.定时器里面写函数调用\n",[254,90768,90769,90771,90774,90776,90779,90781,90783],{"class":256,"line":8118},[254,90770,70225],{"class":260},[254,90772,90773],{"class":2103}," debounce",[254,90775,265],{"class":264},[254,90777,90778],{"class":5357},"fn",[254,90780,12576],{"class":264},[254,90782,984],{"class":5357},[254,90784,12583],{"class":264},[254,90786,90787,90789],{"class":256,"line":8124},[254,90788,79913],{"class":260},[254,90790,90791],{"class":264}," timer\n",[254,90793,90794],{"class":256,"line":8151},[254,90795,90796],{"class":323},"      \u002F\u002F return 返回一个匿名函数\n",[254,90798,90799,90801,90803],{"class":256,"line":8156},[254,90800,74123],{"class":260},[254,90802,59059],{"class":260},[254,90804,54593],{"class":264},[254,90806,90807],{"class":256,"line":8162},[254,90808,90809],{"class":323},"        \u002F\u002F 这里边写第二三四步\n",[254,90811,90812,90814,90817,90820],{"class":256,"line":8174},[254,90813,2637],{"class":260},[254,90815,90816],{"class":264}," (timer) ",[254,90818,90819],{"class":2103},"clearTimeout",[254,90821,90822],{"class":264},"(timer)\n",[254,90824,90825,90828,90830,90833,90835,90837],{"class":256,"line":8186},[254,90826,90827],{"class":264},"        timer ",[254,90829,310],{"class":260},[254,90831,90832],{"class":2103}," setTimeout",[254,90834,265],{"class":264},[254,90836,54590],{"class":260},[254,90838,54593],{"class":264},[254,90840,90841,90844,90846],{"class":256,"line":8198},[254,90842,90843],{"class":2103},"          fn",[254,90845,13191],{"class":264},[254,90847,90848],{"class":323},"\u002F\u002F加小括号调用fn }, t)\n",[254,90850,90851],{"class":256,"line":9857},[254,90852,90853],{"class":264},"        }, t)\n",[254,90855,90856],{"class":256,"line":9882},[254,90857,52539],{"class":264},[254,90859,90860],{"class":256,"line":9905},[254,90861,2327],{"class":264},[254,90863,90864,90866,90868,90870,90872,90874,90876,90878,90880],{"class":256,"line":9929},[254,90865,90348],{"class":264},[254,90867,57954],{"class":2103},[254,90869,265],{"class":264},[254,90871,90355],{"class":369},[254,90873,12576],{"class":264},[254,90875,90361],{"class":2103},[254,90877,90364],{"class":264},[254,90879,65215],{"class":313},[254,90881,30638],{"class":264},[254,90883,90884],{"class":256,"line":9934},[254,90885,2540],{"emptyLinePlaceholder":184},[254,90887,90888],{"class":256,"line":9939},[254,90889,90890],{"class":323},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[254,90892,90893],{"class":256,"line":9944},[254,90894,90895],{"class":323},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[254,90897,90898],{"class":256,"line":9953},[254,90899,90900],{"class":323},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[254,90902,90903],{"class":256,"line":9958},[254,90904,90905],{"class":323},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[254,90907,90908,90910,90912],{"class":256,"line":9964},[254,90909,52558],{"class":264},[254,90911,51954],{"class":51441},[254,90913,51448],{"class":264},[254,90915,90916,90918,90920],{"class":256,"line":9985},[254,90917,51926],{"class":264},[254,90919,51941],{"class":51441},[254,90921,51448],{"class":264},[254,90923,90924],{"class":256,"line":9991},[254,90925,2540],{"emptyLinePlaceholder":184},[254,90927,90928,90930,90932],{"class":256,"line":10005},[254,90929,51926],{"class":264},[254,90931,50776],{"class":51441},[254,90933,51448],{"class":264},[225,90935,90937],{"id":90936},"_4172-节流","4.17.2 节流",[14,90939,90940],{},[1602,90941],{"alt":174,"src":90942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[14,90944,90945],{},[1602,90946],{"alt":174,"src":90947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[14,90949,90950],{},[414,90951,90952],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[14,90954,90955],{},"实现方式：",[1271,90957,90958],{},[24,90959,90960],{},"lodash 提供的节流函数来处理",[14,90962,90963],{},"_.throttle(func,[wait=0],[options=])",[14,90965,90966],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[245,90968,90970],{"className":50774,"code":90969,"language":50776,"meta":174,"style":174},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    .box {\n      box-sizing: border-box;\n      width: 200px;\n      height: 200px;\n      background-color: gray;\n      font-size: 25px;\n      color: #fff;\n      text-align: center;\n      padding-top: 5px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"box\">\u003C\u002Fdiv>\n  \u003Cscript src=\"lodash.min.js\">\u003C\u002Fscript>\n  \u003Cscript>\n    const box = document.querySelector('.box')\n    let i = 0\n    function mouseMove() {\n      box.innerHTML = i++\n      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n    }\n    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n    \u002F\u002F 语法:_.throttle(fun,时间)\n    box.addEventListener('mousemove', _.throttle(mouseMove, 500))\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[251,90971,90972,90982,90996,91000,91008,91022,91042,91054,91062,91068,91078,91090,91102,91112,91124,91134,91144,91156,91160,91168,91176,91180,91188,91206,91224,91232,91250,91260,91268,91278,91282,91286,91290,91295,91300,91321,91329,91337,91341],{"__ignoreMap":174},[254,90973,90974,90976,90978,90980],{"class":256,"line":257},[254,90975,51438],{"class":264},[254,90977,51442],{"class":51441},[254,90979,51445],{"class":2103},[254,90981,51448],{"class":264},[254,90983,90984,90986,90988,90990,90992,90994],{"class":256,"line":175},[254,90985,1174],{"class":264},[254,90987,50776],{"class":51441},[254,90989,51457],{"class":2103},[254,90991,310],{"class":264},[254,90993,51462],{"class":369},[254,90995,51448],{"class":264},[254,90997,90998],{"class":256,"line":1319},[254,90999,2540],{"emptyLinePlaceholder":184},[254,91001,91002,91004,91006],{"class":256,"line":1334},[254,91003,1174],{"class":264},[254,91005,51475],{"class":51441},[254,91007,51448],{"class":264},[254,91009,91010,91012,91014,91016,91018,91020],{"class":256,"line":1340},[254,91011,52285],{"class":264},[254,91013,51485],{"class":51441},[254,91015,51488],{"class":2103},[254,91017,310],{"class":264},[254,91019,51493],{"class":369},[254,91021,51448],{"class":264},[254,91023,91024,91026,91028,91030,91032,91034,91036,91038,91040],{"class":256,"line":1354},[254,91025,52285],{"class":264},[254,91027,51485],{"class":51441},[254,91029,15061],{"class":2103},[254,91031,310],{"class":264},[254,91033,51532],{"class":369},[254,91035,51512],{"class":2103},[254,91037,310],{"class":264},[254,91039,51539],{"class":369},[254,91041,51448],{"class":264},[254,91043,91044,91046,91048,91050,91052],{"class":256,"line":1360},[254,91045,52285],{"class":264},[254,91047,51548],{"class":51441},[254,91049,51551],{"class":264},[254,91051,51548],{"class":51441},[254,91053,51448],{"class":264},[254,91055,91056,91058,91060],{"class":256,"line":1451},[254,91057,52285],{"class":264},[254,91059,5267],{"class":51441},[254,91061,51448],{"class":264},[254,91063,91064,91066],{"class":256,"line":1457},[254,91065,54893],{"class":2103},[254,91067,15713],{"class":264},[254,91069,91070,91072,91074,91076],{"class":256,"line":1469},[254,91071,72737],{"class":313},[254,91073,51578],{"class":264},[254,91075,60646],{"class":313},[254,91077,1430],{"class":264},[254,91079,91080,91082,91084,91086,91088],{"class":256,"line":1752},[254,91081,54912],{"class":313},[254,91083,51578],{"class":264},[254,91085,1862],{"class":313},[254,91087,51633],{"class":260},[254,91089,1430],{"class":264},[254,91091,91092,91094,91096,91098,91100],{"class":256,"line":1757},[254,91093,54926],{"class":313},[254,91095,51578],{"class":264},[254,91097,1862],{"class":313},[254,91099,51633],{"class":260},[254,91101,1430],{"class":264},[254,91103,91104,91106,91108,91110],{"class":256,"line":1763},[254,91105,55025],{"class":313},[254,91107,51578],{"class":264},[254,91109,90147],{"class":313},[254,91111,1430],{"class":264},[254,91113,91114,91116,91118,91120,91122],{"class":256,"line":1768},[254,91115,55063],{"class":313},[254,91117,51578],{"class":264},[254,91119,1089],{"class":313},[254,91121,51633],{"class":260},[254,91123,1430],{"class":264},[254,91125,91126,91128,91130,91132],{"class":256,"line":1782},[254,91127,57557],{"class":313},[254,91129,51578],{"class":264},[254,91131,60983],{"class":313},[254,91133,1430],{"class":264},[254,91135,91136,91138,91140,91142],{"class":256,"line":1787},[254,91137,57427],{"class":313},[254,91139,51578],{"class":264},[254,91141,51733],{"class":313},[254,91143,1430],{"class":264},[254,91145,91146,91148,91150,91152,91154],{"class":256,"line":1793},[254,91147,90186],{"class":313},[254,91149,51578],{"class":264},[254,91151,583],{"class":313},[254,91153,51633],{"class":260},[254,91155,1430],{"class":264},[254,91157,91158],{"class":256,"line":1814},[254,91159,2327],{"class":264},[254,91161,91162,91164,91166],{"class":256,"line":1819},[254,91163,52558],{"class":264},[254,91165,5267],{"class":51441},[254,91167,51448],{"class":264},[254,91169,91170,91172,91174],{"class":256,"line":1833},[254,91171,51926],{"class":264},[254,91173,51475],{"class":51441},[254,91175,51448],{"class":264},[254,91177,91178],{"class":256,"line":1838},[254,91179,2540],{"emptyLinePlaceholder":184},[254,91181,91182,91184,91186],{"class":256,"line":1867},[254,91183,1174],{"class":264},[254,91185,51941],{"class":51441},[254,91187,51448],{"class":264},[254,91189,91190,91192,91194,91196,91198,91200,91202,91204],{"class":256,"line":1872},[254,91191,52285],{"class":264},[254,91193,51752],{"class":51441},[254,91195,53627],{"class":2103},[254,91197,310],{"class":264},[254,91199,53632],{"class":369},[254,91201,55455],{"class":264},[254,91203,51752],{"class":51441},[254,91205,51448],{"class":264},[254,91207,91208,91210,91212,91214,91216,91218,91220,91222],{"class":256,"line":1889},[254,91209,52285],{"class":264},[254,91211,51954],{"class":51441},[254,91213,55380],{"class":2103},[254,91215,310],{"class":264},[254,91217,88415],{"class":369},[254,91219,55455],{"class":264},[254,91221,51954],{"class":51441},[254,91223,51448],{"class":264},[254,91225,91226,91228,91230],{"class":256,"line":1894},[254,91227,52285],{"class":264},[254,91229,51954],{"class":51441},[254,91231,51448],{"class":264},[254,91233,91234,91236,91238,91240,91242,91244,91246,91248],{"class":256,"line":1899},[254,91235,11362],{"class":260},[254,91237,87074],{"class":313},[254,91239,13705],{"class":260},[254,91241,54537],{"class":264},[254,91243,54540],{"class":2103},[254,91245,265],{"class":264},[254,91247,90287],{"class":369},[254,91249,271],{"class":264},[254,91251,91252,91254,91256,91258],{"class":256,"line":1904},[254,91253,52360],{"class":260},[254,91255,9579],{"class":264},[254,91257,310],{"class":260},[254,91259,47474],{"class":313},[254,91261,91262,91264,91266],{"class":256,"line":1918},[254,91263,70225],{"class":260},[254,91265,90306],{"class":2103},[254,91267,10994],{"class":264},[254,91269,91270,91272,91274,91276],{"class":256,"line":1923},[254,91271,90313],{"class":264},[254,91273,310],{"class":260},[254,91275,3172],{"class":264},[254,91277,2842],{"class":260},[254,91279,91280],{"class":256,"line":2717},[254,91281,90324],{"class":323},[254,91283,91284],{"class":256,"line":2731},[254,91285,2327],{"class":264},[254,91287,91288],{"class":256,"line":2739},[254,91289,90333],{"class":323},[254,91291,91292],{"class":256,"line":2744},[254,91293,91294],{"class":323},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[254,91296,91297],{"class":256,"line":2750},[254,91298,91299],{"class":323},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[254,91301,91302,91304,91306,91308,91310,91312,91315,91317,91319],{"class":256,"line":2756},[254,91303,90348],{"class":264},[254,91305,57954],{"class":2103},[254,91307,265],{"class":264},[254,91309,90355],{"class":369},[254,91311,90358],{"class":264},[254,91313,91314],{"class":2103},"throttle",[254,91316,90364],{"class":264},[254,91318,65215],{"class":313},[254,91320,30638],{"class":264},[254,91322,91323,91325,91327],{"class":256,"line":2761},[254,91324,52558],{"class":264},[254,91326,51954],{"class":51441},[254,91328,51448],{"class":264},[254,91330,91331,91333,91335],{"class":256,"line":8089},[254,91332,51926],{"class":264},[254,91334,51941],{"class":51441},[254,91336,51448],{"class":264},[254,91338,91339],{"class":256,"line":8113},[254,91340,2540],{"emptyLinePlaceholder":184},[254,91342,91343,91345,91347],{"class":256,"line":8118},[254,91344,51926],{"class":264},[254,91346,50776],{"class":51441},[254,91348,51448],{"class":264},[1271,91350,91351],{},[24,91352,91353],{},"手写一个节流函数来处理",[14,91355,71093],{},[14,91357,90407],{},[14,91359,91360],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[14,91362,91363],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[245,91365,91367],{"className":50774,"code":91366,"language":50776,"meta":174,"style":174},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    .box {\n      box-sizing: border-box;\n      width: 200px;\n      height: 200px;\n      background-color: gray;\n      font-size: 25px;\n      color: #fff;\n      text-align: center;\n      padding-top: 5px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"box\">\u003C\u002Fdiv>\n  \u003Cscript src=\"lodash.min.js\">\u003C\u002Fscript>\n  \u003Cscript>\n    const box = document.querySelector('.box')\n    let i = 0\n    function mouseMove() {\n      box.innerHTML = i++\n      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n    }\n    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n    \u002F\u002F 手写节流函数  每隔500ms+1\n    \u002F\u002F 1.声明一个定时器变量\n    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n    \u002F\u002F 3.1定时器里面调用执行函数\n    \u002F\u002F 3.2定时器里面要把定时器清空\n    function throttle(fn, t) {\n      let timer\n      return function () {\n        if (!timer) {\n          timer = setTimeout(function () {\n            fn()\n            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n            timer = null\n            \u002F\u002F 不能用clearTimeout(timer)\n            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n          }, t)\n        }\n      }\n    }\n    box.addEventListener('mousemove', throttle(mouseMove, 500))\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[251,91368,91369,91379,91393,91397,91405,91419,91439,91451,91459,91465,91475,91487,91499,91509,91521,91531,91541,91553,91557,91565,91573,91577,91585,91603,91621,91629,91647,91657,91665,91675,91679,91683,91687,91692,91697,91702,91707,91712,91717,91734,91740,91748,91759,91774,91781,91786,91791,91801,91806,91811,91816,91820,91824,91828,91848,91856,91864,91868],{"__ignoreMap":174},[254,91370,91371,91373,91375,91377],{"class":256,"line":257},[254,91372,51438],{"class":264},[254,91374,51442],{"class":51441},[254,91376,51445],{"class":2103},[254,91378,51448],{"class":264},[254,91380,91381,91383,91385,91387,91389,91391],{"class":256,"line":175},[254,91382,1174],{"class":264},[254,91384,50776],{"class":51441},[254,91386,51457],{"class":2103},[254,91388,310],{"class":264},[254,91390,51462],{"class":369},[254,91392,51448],{"class":264},[254,91394,91395],{"class":256,"line":1319},[254,91396,2540],{"emptyLinePlaceholder":184},[254,91398,91399,91401,91403],{"class":256,"line":1334},[254,91400,1174],{"class":264},[254,91402,51475],{"class":51441},[254,91404,51448],{"class":264},[254,91406,91407,91409,91411,91413,91415,91417],{"class":256,"line":1340},[254,91408,52285],{"class":264},[254,91410,51485],{"class":51441},[254,91412,51488],{"class":2103},[254,91414,310],{"class":264},[254,91416,51493],{"class":369},[254,91418,51448],{"class":264},[254,91420,91421,91423,91425,91427,91429,91431,91433,91435,91437],{"class":256,"line":1354},[254,91422,52285],{"class":264},[254,91424,51485],{"class":51441},[254,91426,15061],{"class":2103},[254,91428,310],{"class":264},[254,91430,51532],{"class":369},[254,91432,51512],{"class":2103},[254,91434,310],{"class":264},[254,91436,51539],{"class":369},[254,91438,51448],{"class":264},[254,91440,91441,91443,91445,91447,91449],{"class":256,"line":1360},[254,91442,52285],{"class":264},[254,91444,51548],{"class":51441},[254,91446,51551],{"class":264},[254,91448,51548],{"class":51441},[254,91450,51448],{"class":264},[254,91452,91453,91455,91457],{"class":256,"line":1451},[254,91454,52285],{"class":264},[254,91456,5267],{"class":51441},[254,91458,51448],{"class":264},[254,91460,91461,91463],{"class":256,"line":1457},[254,91462,54893],{"class":2103},[254,91464,15713],{"class":264},[254,91466,91467,91469,91471,91473],{"class":256,"line":1469},[254,91468,72737],{"class":313},[254,91470,51578],{"class":264},[254,91472,60646],{"class":313},[254,91474,1430],{"class":264},[254,91476,91477,91479,91481,91483,91485],{"class":256,"line":1752},[254,91478,54912],{"class":313},[254,91480,51578],{"class":264},[254,91482,1862],{"class":313},[254,91484,51633],{"class":260},[254,91486,1430],{"class":264},[254,91488,91489,91491,91493,91495,91497],{"class":256,"line":1757},[254,91490,54926],{"class":313},[254,91492,51578],{"class":264},[254,91494,1862],{"class":313},[254,91496,51633],{"class":260},[254,91498,1430],{"class":264},[254,91500,91501,91503,91505,91507],{"class":256,"line":1763},[254,91502,55025],{"class":313},[254,91504,51578],{"class":264},[254,91506,90147],{"class":313},[254,91508,1430],{"class":264},[254,91510,91511,91513,91515,91517,91519],{"class":256,"line":1768},[254,91512,55063],{"class":313},[254,91514,51578],{"class":264},[254,91516,1089],{"class":313},[254,91518,51633],{"class":260},[254,91520,1430],{"class":264},[254,91522,91523,91525,91527,91529],{"class":256,"line":1782},[254,91524,57557],{"class":313},[254,91526,51578],{"class":264},[254,91528,60983],{"class":313},[254,91530,1430],{"class":264},[254,91532,91533,91535,91537,91539],{"class":256,"line":1787},[254,91534,57427],{"class":313},[254,91536,51578],{"class":264},[254,91538,51733],{"class":313},[254,91540,1430],{"class":264},[254,91542,91543,91545,91547,91549,91551],{"class":256,"line":1793},[254,91544,90186],{"class":313},[254,91546,51578],{"class":264},[254,91548,583],{"class":313},[254,91550,51633],{"class":260},[254,91552,1430],{"class":264},[254,91554,91555],{"class":256,"line":1814},[254,91556,2327],{"class":264},[254,91558,91559,91561,91563],{"class":256,"line":1819},[254,91560,52558],{"class":264},[254,91562,5267],{"class":51441},[254,91564,51448],{"class":264},[254,91566,91567,91569,91571],{"class":256,"line":1833},[254,91568,51926],{"class":264},[254,91570,51475],{"class":51441},[254,91572,51448],{"class":264},[254,91574,91575],{"class":256,"line":1838},[254,91576,2540],{"emptyLinePlaceholder":184},[254,91578,91579,91581,91583],{"class":256,"line":1867},[254,91580,1174],{"class":264},[254,91582,51941],{"class":51441},[254,91584,51448],{"class":264},[254,91586,91587,91589,91591,91593,91595,91597,91599,91601],{"class":256,"line":1872},[254,91588,52285],{"class":264},[254,91590,51752],{"class":51441},[254,91592,53627],{"class":2103},[254,91594,310],{"class":264},[254,91596,53632],{"class":369},[254,91598,55455],{"class":264},[254,91600,51752],{"class":51441},[254,91602,51448],{"class":264},[254,91604,91605,91607,91609,91611,91613,91615,91617,91619],{"class":256,"line":1889},[254,91606,52285],{"class":264},[254,91608,51954],{"class":51441},[254,91610,55380],{"class":2103},[254,91612,310],{"class":264},[254,91614,88415],{"class":369},[254,91616,55455],{"class":264},[254,91618,51954],{"class":51441},[254,91620,51448],{"class":264},[254,91622,91623,91625,91627],{"class":256,"line":1894},[254,91624,52285],{"class":264},[254,91626,51954],{"class":51441},[254,91628,51448],{"class":264},[254,91630,91631,91633,91635,91637,91639,91641,91643,91645],{"class":256,"line":1899},[254,91632,11362],{"class":260},[254,91634,87074],{"class":313},[254,91636,13705],{"class":260},[254,91638,54537],{"class":264},[254,91640,54540],{"class":2103},[254,91642,265],{"class":264},[254,91644,90287],{"class":369},[254,91646,271],{"class":264},[254,91648,91649,91651,91653,91655],{"class":256,"line":1904},[254,91650,52360],{"class":260},[254,91652,9579],{"class":264},[254,91654,310],{"class":260},[254,91656,47474],{"class":313},[254,91658,91659,91661,91663],{"class":256,"line":1918},[254,91660,70225],{"class":260},[254,91662,90306],{"class":2103},[254,91664,10994],{"class":264},[254,91666,91667,91669,91671,91673],{"class":256,"line":1923},[254,91668,90313],{"class":264},[254,91670,310],{"class":260},[254,91672,3172],{"class":264},[254,91674,2842],{"class":260},[254,91676,91677],{"class":256,"line":2717},[254,91678,90324],{"class":323},[254,91680,91681],{"class":256,"line":2731},[254,91682,2327],{"class":264},[254,91684,91685],{"class":256,"line":2739},[254,91686,90333],{"class":323},[254,91688,91689],{"class":256,"line":2744},[254,91690,91691],{"class":323},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[254,91693,91694],{"class":256,"line":2750},[254,91695,91696],{"class":323},"    \u002F\u002F 1.声明一个定时器变量\n",[254,91698,91699],{"class":256,"line":2756},[254,91700,91701],{"class":323},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[254,91703,91704],{"class":256,"line":2761},[254,91705,91706],{"class":323},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[254,91708,91709],{"class":256,"line":8089},[254,91710,91711],{"class":323},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[254,91713,91714],{"class":256,"line":8113},[254,91715,91716],{"class":323},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[254,91718,91719,91721,91724,91726,91728,91730,91732],{"class":256,"line":8118},[254,91720,70225],{"class":260},[254,91722,91723],{"class":2103}," throttle",[254,91725,265],{"class":264},[254,91727,90778],{"class":5357},[254,91729,12576],{"class":264},[254,91731,984],{"class":5357},[254,91733,12583],{"class":264},[254,91735,91736,91738],{"class":256,"line":8124},[254,91737,79913],{"class":260},[254,91739,90791],{"class":264},[254,91741,91742,91744,91746],{"class":256,"line":8151},[254,91743,74123],{"class":260},[254,91745,59059],{"class":260},[254,91747,54593],{"class":264},[254,91749,91750,91752,91754,91756],{"class":256,"line":8156},[254,91751,2637],{"class":260},[254,91753,1798],{"class":264},[254,91755,491],{"class":260},[254,91757,91758],{"class":264},"timer) {\n",[254,91760,91761,91764,91766,91768,91770,91772],{"class":256,"line":8162},[254,91762,91763],{"class":264},"          timer ",[254,91765,310],{"class":260},[254,91767,90832],{"class":2103},[254,91769,265],{"class":264},[254,91771,54590],{"class":260},[254,91773,54593],{"class":264},[254,91775,91776,91779],{"class":256,"line":8174},[254,91777,91778],{"class":2103},"            fn",[254,91780,2116],{"class":264},[254,91782,91783],{"class":256,"line":8186},[254,91784,91785],{"class":323},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[254,91787,91788],{"class":256,"line":8198},[254,91789,91790],{"class":323},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[254,91792,91793,91796,91798],{"class":256,"line":9857},[254,91794,91795],{"class":264},"            timer ",[254,91797,310],{"class":260},[254,91799,91800],{"class":313}," null\n",[254,91802,91803],{"class":256,"line":9882},[254,91804,91805],{"class":323},"            \u002F\u002F 不能用clearTimeout(timer)\n",[254,91807,91808],{"class":256,"line":9905},[254,91809,91810],{"class":323},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[254,91812,91813],{"class":256,"line":9929},[254,91814,91815],{"class":264},"          }, t)\n",[254,91817,91818],{"class":256,"line":9934},[254,91819,2669],{"class":264},[254,91821,91822],{"class":256,"line":9939},[254,91823,52539],{"class":264},[254,91825,91826],{"class":256,"line":9944},[254,91827,2327],{"class":264},[254,91829,91830,91832,91834,91836,91838,91840,91842,91844,91846],{"class":256,"line":9953},[254,91831,90348],{"class":264},[254,91833,57954],{"class":2103},[254,91835,265],{"class":264},[254,91837,90355],{"class":369},[254,91839,12576],{"class":264},[254,91841,91314],{"class":2103},[254,91843,90364],{"class":264},[254,91845,65215],{"class":313},[254,91847,30638],{"class":264},[254,91849,91850,91852,91854],{"class":256,"line":9958},[254,91851,52558],{"class":264},[254,91853,51954],{"class":51441},[254,91855,51448],{"class":264},[254,91857,91858,91860,91862],{"class":256,"line":9964},[254,91859,51926],{"class":264},[254,91861,51941],{"class":51441},[254,91863,51448],{"class":264},[254,91865,91866],{"class":256,"line":9985},[254,91867,2540],{"emptyLinePlaceholder":184},[254,91869,91870,91872,91874],{"class":256,"line":9991},[254,91871,51926],{"class":264},[254,91873,50776],{"class":51441},[254,91875,51448],{"class":264},[225,91877,91879],{"id":91878},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[245,91881,91883],{"className":53208,"code":91882,"language":53210,"meta":174,"style":174},"\u003Cbody>\n  \u003Cscript>\n    let timer = null\n    timer = setTimeout(() => {\n      clearTimeout(timer)\n      console.log(timer)\n    }, 1000)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[251,91884,91885,91893,91901,91906,91911,91916,91921,91925,91933],{"__ignoreMap":174},[254,91886,91887,91889,91891],{"class":256,"line":257},[254,91888,1174],{"class":264},[254,91890,51941],{"class":51441},[254,91892,51448],{"class":264},[254,91894,91895,91897,91899],{"class":256,"line":175},[254,91896,52285],{"class":264},[254,91898,51954],{"class":51441},[254,91900,51448],{"class":264},[254,91902,91903],{"class":256,"line":1319},[254,91904,91905],{"class":264},"    let timer = null\n",[254,91907,91908],{"class":256,"line":1334},[254,91909,91910],{"class":264},"    timer = setTimeout(() => {\n",[254,91912,91913],{"class":256,"line":1340},[254,91914,91915],{"class":264},"      clearTimeout(timer)\n",[254,91917,91918],{"class":256,"line":1354},[254,91919,91920],{"class":264},"      console.log(timer)\n",[254,91922,91923],{"class":256,"line":1360},[254,91924,60366],{"class":264},[254,91926,91927,91929,91931],{"class":256,"line":1451},[254,91928,52558],{"class":264},[254,91930,51954],{"class":51441},[254,91932,51448],{"class":264},[254,91934,91935,91937,91939],{"class":256,"line":1457},[254,91936,51926],{"class":264},[254,91938,51941],{"class":51441},[254,91940,51448],{"class":264},[14,91942,91943],{},"输出为1",[14,91945,91946],{},"在开启的定时器里边写清除定时器",[14,91948,91949],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[225,91951,91953],{"id":91952},"_4174-节流综合案例","4.17.4 节流综合案例",[14,91955,91956],{},"页面打开，可以记录上一次的视频播放位置",[14,91958,91959],{},[1602,91960],{"alt":174,"src":91961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[14,91963,91964],{},[1602,91965],{"alt":174,"src":91966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[245,91968,91970],{"className":50774,"code":91969,"language":50776,"meta":174,"style":174},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\" \u002F>\n  \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" \u002F>\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \u002F>\n  \u003Cmeta name=\"referrer\" content=\"never\" \u002F>\n  \u003Ctitle>综合案例\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      padding: 0;\n      margin: 0;\n      box-sizing: border-box;\n    }\n\n    .container {\n      width: 1200px;\n      margin: 0 auto;\n    }\n\n    .video video {\n      width: 100%;\n      padding: 20px 0;\n    }\n\n    .elevator {\n      position: fixed;\n      top: 280px;\n      right: 20px;\n      z-index: 999;\n      background: #fff;\n      border: 1px solid #e4e4e4;\n      width: 60px;\n    }\n\n    .elevator a {\n      display: block;\n      padding: 10px;\n      text-decoration: none;\n      text-align: center;\n      color: #999;\n    }\n\n    .elevator a.active {\n      color: #1286ff;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"container\">\n    \u003Cdiv class=\"header\">\n      \u003Ca href=\"http:\u002F\u002Fpip.itcast.cn\">\n        \u003Cimg src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\" alt=\"\" \u002F>\n      \u003C\u002Fa>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"video\">\n      \u003Cvideo src=\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\" controls>\u003C\u002Fvideo>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"elevator\">\n      \u003Ca href=\"javascript:;\" data-ref=\"video\">视频介绍\u003C\u002Fa>\n      \u003Ca href=\"javascript:;\" data-ref=\"intro\">课程简介\u003C\u002Fa>\n      \u003Ca href=\"javascript:;\" data-ref=\"outline\">评论列表\u003C\u002Fa>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript src=\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\">\u003C\u002Fscript>\n  \u003Cscript>\n    \u002F\u002F 1.获取元素 要对视频进行操作\n    const video = document.querySelector('video')\n    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n    video.ontimeupdate = _.throttle(() => {\n      \u002F\u002F 要进行本地存储,存当前播放的时间\n      \u002F\u002F 控制台输出当前的时间\n      \u002F\u002F console.log(video.currentTime)  \u002F\u002F获得当前的视频时间\n      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n      localStorage.setItem('currentTime', video.currentTime)\n    }, 1000)\n    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n    video.onloadeddata = () => {\n      \u002F\u002F console.log(11)\n      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n      video.currentTime = localStorage.getItem('currentTime') || 0\n    }\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[251,91971,91972,91982,91996,92000,92008,92022,92042,92062,92084,92097,92105,92111,92121,92131,92141,92145,92149,92156,92169,92181,92185,92189,92199,92211,92225,92229,92233,92240,92250,92263,92275,92285,92295,92311,92323,92327,92331,92339,92349,92361,92371,92381,92391,92395,92399,92409,92420,92424,92432,92440,92444,92452,92467,92482,92497,92518,92526,92534,92549,92571,92579,92594,92620,92646,92672,92680,92688,92707,92715,92720,92739,92744,92762,92767,92772,92780,92785,92799,92807,92812,92829,92833,92838,92860,92864,92872,92880,92884],{"__ignoreMap":174},[254,91973,91974,91976,91978,91980],{"class":256,"line":257},[254,91975,51438],{"class":264},[254,91977,51442],{"class":51441},[254,91979,51445],{"class":2103},[254,91981,51448],{"class":264},[254,91983,91984,91986,91988,91990,91992,91994],{"class":256,"line":175},[254,91985,1174],{"class":264},[254,91987,50776],{"class":51441},[254,91989,51457],{"class":2103},[254,91991,310],{"class":264},[254,91993,51462],{"class":369},[254,91995,51448],{"class":264},[254,91997,91998],{"class":256,"line":1319},[254,91999,2540],{"emptyLinePlaceholder":184},[254,92001,92002,92004,92006],{"class":256,"line":1334},[254,92003,1174],{"class":264},[254,92005,51475],{"class":51441},[254,92007,51448],{"class":264},[254,92009,92010,92012,92014,92016,92018,92020],{"class":256,"line":1340},[254,92011,52285],{"class":264},[254,92013,51485],{"class":51441},[254,92015,51488],{"class":2103},[254,92017,310],{"class":264},[254,92019,51493],{"class":369},[254,92021,59268],{"class":264},[254,92023,92024,92026,92028,92030,92032,92034,92036,92038,92040],{"class":256,"line":1354},[254,92025,52285],{"class":264},[254,92027,51485],{"class":51441},[254,92029,51504],{"class":2103},[254,92031,310],{"class":264},[254,92033,51509],{"class":369},[254,92035,51512],{"class":2103},[254,92037,310],{"class":264},[254,92039,51517],{"class":369},[254,92041,59268],{"class":264},[254,92043,92044,92046,92048,92050,92052,92054,92056,92058,92060],{"class":256,"line":1360},[254,92045,52285],{"class":264},[254,92047,51485],{"class":51441},[254,92049,15061],{"class":2103},[254,92051,310],{"class":264},[254,92053,51532],{"class":369},[254,92055,51512],{"class":2103},[254,92057,310],{"class":264},[254,92059,51539],{"class":369},[254,92061,59268],{"class":264},[254,92063,92064,92066,92068,92070,92072,92075,92077,92079,92082],{"class":256,"line":1451},[254,92065,52285],{"class":264},[254,92067,51485],{"class":51441},[254,92069,15061],{"class":2103},[254,92071,310],{"class":264},[254,92073,92074],{"class":369},"\"referrer\"",[254,92076,51512],{"class":2103},[254,92078,310],{"class":264},[254,92080,92081],{"class":369},"\"never\"",[254,92083,59268],{"class":264},[254,92085,92086,92088,92090,92093,92095],{"class":256,"line":1457},[254,92087,52285],{"class":264},[254,92089,51548],{"class":51441},[254,92091,92092],{"class":264},">综合案例\u003C\u002F",[254,92094,51548],{"class":51441},[254,92096,51448],{"class":264},[254,92098,92099,92101,92103],{"class":256,"line":1469},[254,92100,52285],{"class":264},[254,92102,5267],{"class":51441},[254,92104,51448],{"class":264},[254,92106,92107,92109],{"class":256,"line":1752},[254,92108,6544],{"class":51441},[254,92110,15713],{"class":264},[254,92112,92113,92115,92117,92119],{"class":256,"line":1757},[254,92114,54836],{"class":313},[254,92116,51578],{"class":264},[254,92118,456],{"class":313},[254,92120,1430],{"class":264},[254,92122,92123,92125,92127,92129],{"class":256,"line":1763},[254,92124,54847],{"class":313},[254,92126,51578],{"class":264},[254,92128,456],{"class":313},[254,92130,1430],{"class":264},[254,92132,92133,92135,92137,92139],{"class":256,"line":1768},[254,92134,72737],{"class":313},[254,92136,51578],{"class":264},[254,92138,60646],{"class":313},[254,92140,1430],{"class":264},[254,92142,92143],{"class":256,"line":1782},[254,92144,2327],{"class":264},[254,92146,92147],{"class":256,"line":1787},[254,92148,2540],{"emptyLinePlaceholder":184},[254,92150,92151,92154],{"class":256,"line":1793},[254,92152,92153],{"class":2103},"    .container",[254,92155,15713],{"class":264},[254,92157,92158,92160,92162,92165,92167],{"class":256,"line":1814},[254,92159,54912],{"class":313},[254,92161,51578],{"class":264},[254,92163,92164],{"class":313},"1200",[254,92166,51633],{"class":260},[254,92168,1430],{"class":264},[254,92170,92171,92173,92175,92177,92179],{"class":256,"line":1819},[254,92172,54847],{"class":313},[254,92174,51578],{"class":264},[254,92176,456],{"class":313},[254,92178,51697],{"class":313},[254,92180,1430],{"class":264},[254,92182,92183],{"class":256,"line":1833},[254,92184,2327],{"class":264},[254,92186,92187],{"class":256,"line":1838},[254,92188,2540],{"emptyLinePlaceholder":184},[254,92190,92191,92194,92197],{"class":256,"line":1867},[254,92192,92193],{"class":2103},"    .video",[254,92195,92196],{"class":51441}," video",[254,92198,15713],{"class":264},[254,92200,92201,92203,92205,92207,92209],{"class":256,"line":1872},[254,92202,54912],{"class":313},[254,92204,51578],{"class":264},[254,92206,575],{"class":313},[254,92208,592],{"class":260},[254,92210,1430],{"class":264},[254,92212,92213,92215,92217,92219,92221,92223],{"class":256,"line":1889},[254,92214,54836],{"class":313},[254,92216,51578],{"class":264},[254,92218,964],{"class":313},[254,92220,51633],{"class":260},[254,92222,4233],{"class":313},[254,92224,1430],{"class":264},[254,92226,92227],{"class":256,"line":1894},[254,92228,2327],{"class":264},[254,92230,92231],{"class":256,"line":1899},[254,92232,2540],{"emptyLinePlaceholder":184},[254,92234,92235,92238],{"class":256,"line":1904},[254,92236,92237],{"class":2103},"    .elevator",[254,92239,15713],{"class":264},[254,92241,92242,92244,92246,92248],{"class":256,"line":1918},[254,92243,54900],{"class":313},[254,92245,51578],{"class":264},[254,92247,86374],{"class":313},[254,92249,1430],{"class":264},[254,92251,92252,92254,92256,92259,92261],{"class":256,"line":1923},[254,92253,55088],{"class":313},[254,92255,51578],{"class":264},[254,92257,92258],{"class":313},"280",[254,92260,51633],{"class":260},[254,92262,1430],{"class":264},[254,92264,92265,92267,92269,92271,92273],{"class":256,"line":2717},[254,92266,86568],{"class":313},[254,92268,51578],{"class":264},[254,92270,964],{"class":313},[254,92272,51633],{"class":260},[254,92274,1430],{"class":264},[254,92276,92277,92279,92281,92283],{"class":256,"line":2731},[254,92278,86381],{"class":313},[254,92280,51578],{"class":264},[254,92282,86386],{"class":313},[254,92284,1430],{"class":264},[254,92286,92287,92289,92291,92293],{"class":256,"line":2739},[254,92288,61862],{"class":313},[254,92290,51578],{"class":264},[254,92292,60983],{"class":313},[254,92294,1430],{"class":264},[254,92296,92297,92299,92301,92303,92305,92307,92309],{"class":256,"line":2744},[254,92298,62118],{"class":313},[254,92300,51578],{"class":264},[254,92302,482],{"class":313},[254,92304,51633],{"class":260},[254,92306,51662],{"class":313},[254,92308,62385],{"class":313},[254,92310,1430],{"class":264},[254,92312,92313,92315,92317,92319,92321],{"class":256,"line":2750},[254,92314,54912],{"class":313},[254,92316,51578],{"class":264},[254,92318,1171],{"class":313},[254,92320,51633],{"class":260},[254,92322,1430],{"class":264},[254,92324,92325],{"class":256,"line":2756},[254,92326,2327],{"class":264},[254,92328,92329],{"class":256,"line":2761},[254,92330,2540],{"emptyLinePlaceholder":184},[254,92332,92333,92335,92337],{"class":256,"line":8089},[254,92334,92237],{"class":2103},[254,92336,1538],{"class":51441},[254,92338,15713],{"class":264},[254,92340,92341,92343,92345,92347],{"class":256,"line":8113},[254,92342,55150],{"class":313},[254,92344,51578],{"class":264},[254,92346,61010],{"class":313},[254,92348,1430],{"class":264},[254,92350,92351,92353,92355,92357,92359],{"class":256,"line":8118},[254,92352,54836],{"class":313},[254,92354,51578],{"class":264},[254,92356,710],{"class":313},[254,92358,51633],{"class":260},[254,92360,1430],{"class":264},[254,92362,92363,92365,92367,92369],{"class":256,"line":8124},[254,92364,64111],{"class":313},[254,92366,51578],{"class":264},[254,92368,54878],{"class":313},[254,92370,1430],{"class":264},[254,92372,92373,92375,92377,92379],{"class":256,"line":8151},[254,92374,57427],{"class":313},[254,92376,51578],{"class":264},[254,92378,51733],{"class":313},[254,92380,1430],{"class":264},[254,92382,92383,92385,92387,92389],{"class":256,"line":8156},[254,92384,57557],{"class":313},[254,92386,51578],{"class":264},[254,92388,62211],{"class":313},[254,92390,1430],{"class":264},[254,92392,92393],{"class":256,"line":8162},[254,92394,2327],{"class":264},[254,92396,92397],{"class":256,"line":8174},[254,92398,2540],{"emptyLinePlaceholder":184},[254,92400,92401,92403,92405,92407],{"class":256,"line":8186},[254,92402,92237],{"class":2103},[254,92404,1538],{"class":51441},[254,92406,64165],{"class":2103},[254,92408,15713],{"class":264},[254,92410,92411,92413,92415,92418],{"class":256,"line":8198},[254,92412,57557],{"class":313},[254,92414,51578],{"class":264},[254,92416,92417],{"class":313},"#1286ff",[254,92419,1430],{"class":264},[254,92421,92422],{"class":256,"line":9857},[254,92423,2327],{"class":264},[254,92425,92426,92428,92430],{"class":256,"line":9882},[254,92427,52558],{"class":264},[254,92429,5267],{"class":51441},[254,92431,51448],{"class":264},[254,92433,92434,92436,92438],{"class":256,"line":9905},[254,92435,51926],{"class":264},[254,92437,51475],{"class":51441},[254,92439,51448],{"class":264},[254,92441,92442],{"class":256,"line":9929},[254,92443,2540],{"emptyLinePlaceholder":184},[254,92445,92446,92448,92450],{"class":256,"line":9934},[254,92447,1174],{"class":264},[254,92449,51941],{"class":51441},[254,92451,51448],{"class":264},[254,92453,92454,92456,92458,92460,92462,92465],{"class":256,"line":9939},[254,92455,52285],{"class":264},[254,92457,51752],{"class":51441},[254,92459,53627],{"class":2103},[254,92461,310],{"class":264},[254,92463,92464],{"class":369},"\"container\"",[254,92466,51448],{"class":264},[254,92468,92469,92471,92473,92475,92477,92480],{"class":256,"line":9944},[254,92470,51482],{"class":264},[254,92472,51752],{"class":51441},[254,92474,53627],{"class":2103},[254,92476,310],{"class":264},[254,92478,92479],{"class":369},"\"header\"",[254,92481,51448],{"class":264},[254,92483,92484,92486,92488,92490,92492,92495],{"class":256,"line":9953},[254,92485,55375],{"class":264},[254,92487,42],{"class":51441},[254,92489,61198],{"class":2103},[254,92491,310],{"class":264},[254,92493,92494],{"class":369},"\"http:\u002F\u002Fpip.itcast.cn\"",[254,92496,51448],{"class":264},[254,92498,92499,92501,92503,92505,92507,92510,92512,92514,92516],{"class":256,"line":9958},[254,92500,55443],{"class":264},[254,92502,1602],{"class":51441},[254,92504,55380],{"class":2103},[254,92506,310],{"class":264},[254,92508,92509],{"class":369},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[254,92511,55388],{"class":2103},[254,92513,310],{"class":264},[254,92515,7793],{"class":369},[254,92517,59268],{"class":264},[254,92519,92520,92522,92524],{"class":256,"line":9964},[254,92521,55548],{"class":264},[254,92523,42],{"class":51441},[254,92525,51448],{"class":264},[254,92527,92528,92530,92532],{"class":256,"line":9985},[254,92529,51917],{"class":264},[254,92531,51752],{"class":51441},[254,92533,51448],{"class":264},[254,92535,92536,92538,92540,92542,92544,92547],{"class":256,"line":9991},[254,92537,51482],{"class":264},[254,92539,51752],{"class":51441},[254,92541,53627],{"class":2103},[254,92543,310],{"class":264},[254,92545,92546],{"class":369},"\"video\"",[254,92548,51448],{"class":264},[254,92550,92551,92553,92555,92557,92559,92562,92565,92567,92569],{"class":256,"line":10005},[254,92552,55375],{"class":264},[254,92554,28324],{"class":51441},[254,92556,55380],{"class":2103},[254,92558,310],{"class":264},[254,92560,92561],{"class":369},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[254,92563,92564],{"class":2103}," controls",[254,92566,55455],{"class":264},[254,92568,28324],{"class":51441},[254,92570,51448],{"class":264},[254,92572,92573,92575,92577],{"class":256,"line":10011},[254,92574,51917],{"class":264},[254,92576,51752],{"class":51441},[254,92578,51448],{"class":264},[254,92580,92581,92583,92585,92587,92589,92592],{"class":256,"line":10038},[254,92582,51482],{"class":264},[254,92584,51752],{"class":51441},[254,92586,53627],{"class":2103},[254,92588,310],{"class":264},[254,92590,92591],{"class":369},"\"elevator\"",[254,92593,51448],{"class":264},[254,92595,92596,92598,92600,92602,92604,92606,92609,92611,92613,92616,92618],{"class":256,"line":10047},[254,92597,55375],{"class":264},[254,92599,42],{"class":51441},[254,92601,61198],{"class":2103},[254,92603,310],{"class":264},[254,92605,64377],{"class":369},[254,92607,92608],{"class":2103}," data-ref",[254,92610,310],{"class":264},[254,92612,92546],{"class":369},[254,92614,92615],{"class":264},">视频介绍\u003C\u002F",[254,92617,42],{"class":51441},[254,92619,51448],{"class":264},[254,92621,92622,92624,92626,92628,92630,92632,92634,92636,92639,92642,92644],{"class":256,"line":10053},[254,92623,55375],{"class":264},[254,92625,42],{"class":51441},[254,92627,61198],{"class":2103},[254,92629,310],{"class":264},[254,92631,64377],{"class":369},[254,92633,92608],{"class":2103},[254,92635,310],{"class":264},[254,92637,92638],{"class":369},"\"intro\"",[254,92640,92641],{"class":264},">课程简介\u003C\u002F",[254,92643,42],{"class":51441},[254,92645,51448],{"class":264},[254,92647,92648,92650,92652,92654,92656,92658,92660,92662,92665,92668,92670],{"class":256,"line":10061},[254,92649,55375],{"class":264},[254,92651,42],{"class":51441},[254,92653,61198],{"class":2103},[254,92655,310],{"class":264},[254,92657,64377],{"class":369},[254,92659,92608],{"class":2103},[254,92661,310],{"class":264},[254,92663,92664],{"class":369},"\"outline\"",[254,92666,92667],{"class":264},">评论列表\u003C\u002F",[254,92669,42],{"class":51441},[254,92671,51448],{"class":264},[254,92673,92674,92676,92678],{"class":256,"line":10066},[254,92675,51917],{"class":264},[254,92677,51752],{"class":51441},[254,92679,51448],{"class":264},[254,92681,92682,92684,92686],{"class":256,"line":16745},[254,92683,52558],{"class":264},[254,92685,51752],{"class":51441},[254,92687,51448],{"class":264},[254,92689,92690,92692,92694,92696,92698,92701,92703,92705],{"class":256,"line":16751},[254,92691,52285],{"class":264},[254,92693,51954],{"class":51441},[254,92695,55380],{"class":2103},[254,92697,310],{"class":264},[254,92699,92700],{"class":369},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[254,92702,55455],{"class":264},[254,92704,51954],{"class":51441},[254,92706,51448],{"class":264},[254,92708,92709,92711,92713],{"class":256,"line":16774},[254,92710,52285],{"class":264},[254,92712,51954],{"class":51441},[254,92714,51448],{"class":264},[254,92716,92717],{"class":256,"line":16780},[254,92718,92719],{"class":323},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[254,92721,92722,92724,92726,92728,92730,92732,92734,92737],{"class":256,"line":16803},[254,92723,11362],{"class":260},[254,92725,92196],{"class":313},[254,92727,13705],{"class":260},[254,92729,54537],{"class":264},[254,92731,54540],{"class":2103},[254,92733,265],{"class":264},[254,92735,92736],{"class":369},"'video'",[254,92738,271],{"class":264},[254,92740,92741],{"class":256,"line":16817},[254,92742,92743],{"class":323},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[254,92745,92746,92749,92751,92753,92755,92758,92760],{"class":256,"line":16837},[254,92747,92748],{"class":264},"    video.ontimeupdate ",[254,92750,310],{"class":260},[254,92752,88496],{"class":264},[254,92754,91314],{"class":2103},[254,92756,92757],{"class":264},"(() ",[254,92759,84863],{"class":260},[254,92761,15713],{"class":264},[254,92763,92764],{"class":256,"line":16843},[254,92765,92766],{"class":323},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[254,92768,92769],{"class":256,"line":16854},[254,92770,92771],{"class":323},"      \u002F\u002F 控制台输出当前的时间\n",[254,92773,92774,92777],{"class":256,"line":16877},[254,92775,92776],{"class":323},"      \u002F\u002F console.log(video.currentTime)",[254,92778,92779],{"class":323},"  \u002F\u002F获得当前的视频时间\n",[254,92781,92782],{"class":256,"line":16899},[254,92783,92784],{"class":323},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[254,92786,92787,92789,92791,92793,92796],{"class":256,"line":16904},[254,92788,74824],{"class":264},[254,92790,71795],{"class":2103},[254,92792,265],{"class":264},[254,92794,92795],{"class":369},"'currentTime'",[254,92797,92798],{"class":264},", video.currentTime)\n",[254,92800,92801,92803,92805],{"class":256,"line":16910},[254,92802,54676],{"class":264},[254,92804,6551],{"class":313},[254,92806,271],{"class":264},[254,92808,92809],{"class":256,"line":16924},[254,92810,92811],{"class":323},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[254,92813,92814,92817,92820,92822,92825,92827],{"class":256,"line":16937},[254,92815,92816],{"class":264},"    video.",[254,92818,92819],{"class":2103},"onloadeddata",[254,92821,13705],{"class":260},[254,92823,92824],{"class":264}," () ",[254,92826,84863],{"class":260},[254,92828,15713],{"class":264},[254,92830,92831],{"class":256,"line":16942},[254,92832,60153],{"class":323},[254,92834,92835],{"class":256,"line":16956},[254,92836,92837],{"class":323},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[254,92839,92840,92843,92845,92848,92850,92852,92854,92856,92858],{"class":256,"line":16961},[254,92841,92842],{"class":264},"      video.currentTime ",[254,92844,310],{"class":260},[254,92846,92847],{"class":264}," localStorage.",[254,92849,71826],{"class":2103},[254,92851,265],{"class":264},[254,92853,92795],{"class":369},[254,92855,13855],{"class":264},[254,92857,71498],{"class":260},[254,92859,47474],{"class":313},[254,92861,92862],{"class":256,"line":16967},[254,92863,2327],{"class":264},[254,92865,92866,92868,92870],{"class":256,"line":16972},[254,92867,52558],{"class":264},[254,92869,51954],{"class":51441},[254,92871,51448],{"class":264},[254,92873,92874,92876,92878],{"class":256,"line":16986},[254,92875,51926],{"class":264},[254,92877,51941],{"class":51441},[254,92879,51448],{"class":264},[254,92881,92882],{"class":256,"line":16991},[254,92883,2540],{"emptyLinePlaceholder":184},[254,92885,92886,92888,92890],{"class":256,"line":16996},[254,92887,51926],{"class":264},[254,92889,50776],{"class":51441},[254,92891,51448],{"class":264},[5267,92893,92894],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s7hpK, html code.shiki .s7hpK{--shiki-default:#B31D28;--shiki-default-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":174,"searchDepth":175,"depth":175,"links":92896},[92897,92902,92906,92907,92908,92913,92918,92919,92920,92921,92928,92933,92934,92944,92948,92949,92953],{"id":76832,"depth":175,"text":76833,"children":92898},[92899,92900,92901],{"id":76836,"depth":1319,"text":76837},{"id":76861,"depth":1319,"text":76862},{"id":76873,"depth":1319,"text":76874},{"id":76885,"depth":175,"text":76886,"children":92903},[92904,92905],{"id":76889,"depth":1319,"text":76890},{"id":76904,"depth":1319,"text":76905},{"id":76956,"depth":175,"text":76957},{"id":77000,"depth":175,"text":77001},{"id":77017,"depth":175,"text":77018,"children":92909},[92910,92911,92912],{"id":77021,"depth":1319,"text":77022},{"id":77034,"depth":1319,"text":77035},{"id":77139,"depth":1319,"text":77140},{"id":77428,"depth":175,"text":77429,"children":92914},[92915,92916,92917],{"id":77432,"depth":1319,"text":77433},{"id":77875,"depth":1319,"text":77876},{"id":78286,"depth":1319,"text":78287},{"id":78349,"depth":175,"text":78350},{"id":78428,"depth":175,"text":78429},{"id":78521,"depth":175,"text":78522},{"id":80366,"depth":175,"text":80367,"children":92922},[92923,92924,92925,92926,92927],{"id":80370,"depth":1319,"text":80371},{"id":80382,"depth":1319,"text":80383},{"id":80601,"depth":1319,"text":80602},{"id":80619,"depth":1319,"text":80620},{"id":80679,"depth":1319,"text":80680},{"id":84947,"depth":175,"text":84948,"children":92929},[92930,92931,92932],{"id":84951,"depth":1319,"text":84952},{"id":84969,"depth":1319,"text":84970},{"id":84995,"depth":1319,"text":84996},{"id":85004,"depth":175,"text":85005},{"id":85026,"depth":175,"text":85027,"children":92935},[92936,92937,92938,92939,92940,92941,92942,92943],{"id":85030,"depth":1319,"text":85031},{"id":85291,"depth":1319,"text":85292},{"id":85477,"depth":1319,"text":85478},{"id":85844,"depth":1319,"text":85845},{"id":85960,"depth":1319,"text":85961},{"id":85996,"depth":1319,"text":85997},{"id":86043,"depth":1319,"text":86044},{"id":86077,"depth":1319,"text":86078},{"id":87440,"depth":175,"text":87441,"children":92945},[92946,92947],{"id":87444,"depth":1319,"text":87445},{"id":87481,"depth":1319,"text":87482},{"id":88836,"depth":175,"text":88837},{"id":89207,"depth":175,"text":89208,"children":92950},[92951,92952],{"id":89211,"depth":1319,"text":89212},{"id":89245,"depth":1319,"text":89246},{"id":89974,"depth":175,"text":89975,"children":92954},[92955,92956,92957,92958],{"id":89978,"depth":1319,"text":89979},{"id":90936,"depth":1319,"text":90937},{"id":91878,"depth":1319,"text":91879},{"id":91952,"depth":1319,"text":91953},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":76821,"description":23518},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":92965,"title":92966,"body":92967,"description":92978,"extension":181,"meta":92979,"navigation":184,"path":92981,"seo":92982,"stem":92983,"__hash__":92984},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":92968,"toc":92976},[92969],[14,92970,92971,92972],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[42,92973,92974],{"href":92974,"rel":92975},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[151],{"title":174,"searchDepth":175,"depth":175,"links":92977},[],"三件套第三套学习",{"category":92980},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":92966,"description":92978},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":92986,"title":92987,"body":92988,"description":23518,"extension":181,"meta":93093,"navigation":184,"path":93094,"seo":93095,"stem":93096,"__hash__":93097},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":92989,"toc":93088},[92990,92997,93000,93003,93006,93010,93019,93022,93025,93029,93038,93041,93045,93048,93068,93071,93085],[14,92991,92992],{},[42,92993,92996],{"href":92994,"rel":92995},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[151],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,92998,92987],{"id":92999},"_1安装",[14,93001,93002],{},"numpy是科学计算基础库,底层是C语言",[14,93004,93005],{},"三种方式：",[34,93007,93009],{"id":93008},"_11-通过pip安装","1.1 通过pip安装",[245,93011,93013],{"className":30519,"code":93012,"language":30521,"meta":174,"style":174},"pip install numpy\n",[251,93014,93015],{"__ignoreMap":174},[254,93016,93017],{"class":256,"line":257},[254,93018,93012],{"class":264},[14,93020,93021],{},"首选方式，自动处理依赖项",[14,93023,93024],{},"在提示系统命令符中使用cmd",[34,93026,93028],{"id":93027},"_12-通过anaconda安装","1.2 通过Anaconda安装",[245,93030,93032],{"className":30519,"code":93031,"language":30521,"meta":174,"style":174},"conda install numpy\n",[251,93033,93034],{"__ignoreMap":174},[254,93035,93036],{"class":256,"line":257},[254,93037,93031],{"class":264},[14,93039,93040],{},"自动解决环境依赖",[34,93042,93044],{"id":93043},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[14,93046,93047],{},"对于Debian\u002FUbuntu",[245,93049,93051],{"className":30519,"code":93050,"language":30521,"meta":174,"style":174},"sudo apt-get install python3-numpy\n",[251,93052,93053],{"__ignoreMap":174},[254,93054,93055,93058,93060,93063,93065],{"class":256,"line":257},[254,93056,93057],{"class":264},"sudo apt",[254,93059,796],{"class":260},[254,93061,93062],{"class":264},"get install python3",[254,93064,796],{"class":260},[254,93066,93067],{"class":264},"numpy\n",[14,93069,93070],{},"对于Fedora:",[245,93072,93074],{"className":30519,"code":93073,"language":30521,"meta":174,"style":174},"sudo dnf install python3-numpy\n",[251,93075,93076],{"__ignoreMap":174},[254,93077,93078,93081,93083],{"class":256,"line":257},[254,93079,93080],{"class":264},"sudo dnf install python3",[254,93082,796],{"class":260},[254,93084,93067],{"class":264},[5267,93086,93087],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":174,"searchDepth":175,"depth":175,"links":93089},[93090,93091,93092],{"id":93008,"depth":175,"text":93009},{"id":93027,"depth":175,"text":93028},{"id":93043,"depth":175,"text":93044},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":92987,"description":23518},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":93099,"title":93100,"body":93101,"description":23518,"extension":181,"meta":93214,"navigation":184,"path":93215,"seo":93216,"stem":93217,"__hash__":93218},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":93102,"toc":93212},[93103,93106,93109,93112,93115,93118,93121,93124,93127,93130,93206,93209],[10,93104,93100],{"id":93105},"_10算数函数",[14,93107,93108],{},"加减乘除运算跟python基础语法没区别",[14,93110,93111],{},"除了python那种方法外还可以使用函数",[14,93113,93114],{},"加：np.add(a,b)",[14,93116,93117],{},"减：np.subtract(a,b)",[14,93119,93120],{},"乘：np.multiply(a,b)",[14,93122,93123],{},"除：np.divide(a,b) == a\u002Fb",[14,93125,93126],{},"取余：np.mod(a,b) == a%b",[14,93128,93129],{},"必须会的用法：",[245,93131,93133],{"className":30519,"code":93132,"language":30521,"meta":174,"style":174},"a=np.arange(9).reshape(3,3)\nb=np.array([10,10,10])\nresult=np.empty_like(a)\nnp.add(a,b,out=result)\nresult\n",[251,93134,93135,93157,93178,93188,93201],{"__ignoreMap":174},[254,93136,93137,93139,93141,93144,93146,93149,93151,93153,93155],{"class":256,"line":257},[254,93138,42],{"class":264},[254,93140,310],{"class":260},[254,93142,93143],{"class":264},"np.arange(",[254,93145,684],{"class":313},[254,93147,93148],{"class":264},").reshape(",[254,93150,336],{"class":313},[254,93152,642],{"class":264},[254,93154,336],{"class":313},[254,93156,271],{"class":264},[254,93158,93159,93161,93163,93166,93168,93170,93172,93174,93176],{"class":256,"line":175},[254,93160,527],{"class":264},[254,93162,310],{"class":260},[254,93164,93165],{"class":264},"np.array([",[254,93167,710],{"class":313},[254,93169,642],{"class":264},[254,93171,710],{"class":313},[254,93173,642],{"class":264},[254,93175,710],{"class":313},[254,93177,4797],{"class":264},[254,93179,93180,93183,93185],{"class":256,"line":1319},[254,93181,93182],{"class":264},"result",[254,93184,310],{"class":260},[254,93186,93187],{"class":264},"np.empty_like(a)\n",[254,93189,93190,93193,93196,93198],{"class":256,"line":1334},[254,93191,93192],{"class":264},"np.add(a,b,",[254,93194,93195],{"class":5357},"out",[254,93197,310],{"class":260},[254,93199,93200],{"class":264},"result)\n",[254,93202,93203],{"class":256,"line":1340},[254,93204,93205],{"class":264},"result\n",[14,93207,93208],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[5267,93210,93211],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":174,"searchDepth":175,"depth":175,"links":93213},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":93100,"description":23518},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93220,"title":93221,"body":93222,"description":23518,"extension":181,"meta":93984,"navigation":184,"path":93985,"seo":93986,"stem":93987,"__hash__":93988},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93223,"toc":93971},[93224,93227,93230,93233,93237,93276,93280,93324,93384,93388,93391,93430,93433,93478,93482,93518,93522,93591,93595,93659,93663,93666,93669,93672,93675,93711,93715,93755,93759,93831,93834,93838,93901,93905,93968],[10,93225,93221],{"id":93226},"_11统计函数",[14,93228,93229],{},"sum max min mean",[14,93231,93232],{},"这些有axis参数，可以指定方向",[34,93234,93236],{"id":93235},"_111-sum求和函数","11.1 sum()求和函数",[245,93238,93240],{"className":30519,"code":93239,"language":30521,"meta":174,"style":174},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[251,93241,93242,93247,93268],{"__ignoreMap":174},[254,93243,93244],{"class":256,"line":257},[254,93245,93246],{"class":323},"#创建一维数组\n",[254,93248,93249,93251,93253,93256,93258,93260,93262,93264,93266],{"class":256,"line":175},[254,93250,42],{"class":264},[254,93252,310],{"class":260},[254,93254,93255],{"class":264},"np.random.randint(",[254,93257,482],{"class":313},[254,93259,642],{"class":264},[254,93261,575],{"class":313},[254,93263,642],{"class":264},[254,93265,964],{"class":313},[254,93267,271],{"class":264},[254,93269,93270,93273],{"class":256,"line":1319},[254,93271,93272],{"class":264},"np.sum(a)",[254,93274,93275],{"class":323},"#求和\n",[34,93277,93279],{"id":93278},"_112-max求最大值函数","11.2 max()求最大值函数",[245,93281,93283],{"className":30519,"code":93282,"language":30521,"meta":174,"style":174},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[251,93284,93285,93289,93309,93314,93319],{"__ignoreMap":174},[254,93286,93287],{"class":256,"line":257},[254,93288,93246],{"class":323},[254,93290,93291,93293,93295,93297,93299,93301,93303,93305,93307],{"class":256,"line":175},[254,93292,42],{"class":264},[254,93294,310],{"class":260},[254,93296,93255],{"class":264},[254,93298,482],{"class":313},[254,93300,642],{"class":264},[254,93302,575],{"class":313},[254,93304,642],{"class":264},[254,93306,964],{"class":313},[254,93308,271],{"class":264},[254,93310,93311],{"class":256,"line":1319},[254,93312,93313],{"class":264},"np.max(a)\n",[254,93315,93316],{"class":256,"line":1334},[254,93317,93318],{"class":323},"#最大索引(求最大元素的索引)arg\n",[254,93320,93321],{"class":256,"line":1340},[254,93322,93323],{"class":264},"np.argmax(a)\n",[245,93325,93327],{"className":30519,"code":93326,"language":30521,"meta":174,"style":174},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[251,93328,93329,93350,93370,93374],{"__ignoreMap":174},[254,93330,93331,93333,93335,93338,93340,93342,93344,93346,93348],{"class":256,"line":257},[254,93332,11060],{"class":264},[254,93334,310],{"class":260},[254,93336,93337],{"class":264}," np.array([",[254,93339,482],{"class":313},[254,93341,12576],{"class":264},[254,93343,583],{"class":313},[254,93345,12576],{"class":264},[254,93347,336],{"class":313},[254,93349,4797],{"class":264},[254,93351,93352,93354,93356,93358,93360,93362,93364,93366,93368],{"class":256,"line":175},[254,93353,11086],{"class":264},[254,93355,310],{"class":260},[254,93357,93337],{"class":264},[254,93359,336],{"class":313},[254,93361,12576],{"class":264},[254,93363,342],{"class":313},[254,93365,12576],{"class":264},[254,93367,557],{"class":313},[254,93369,4797],{"class":264},[254,93371,93372],{"class":256,"line":1319},[254,93373,2540],{"emptyLinePlaceholder":184},[254,93375,93376,93378,93381],{"class":256,"line":1334},[254,93377,30556],{"class":313},[254,93379,93380],{"class":264},"(np.maximum(a, b))   ",[254,93382,93383],{"class":323},"# [3 5 4]，每个位置上取较大值\n",[34,93385,93387],{"id":93386},"_113-mean求平均值函数","11.3 mean()求平均值函数",[14,93389,93390],{},"①一维数组：",[245,93392,93394],{"className":30519,"code":93393,"language":30521,"meta":174,"style":174},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[251,93395,93396,93400,93420,93425],{"__ignoreMap":174},[254,93397,93398],{"class":256,"line":257},[254,93399,93246],{"class":323},[254,93401,93402,93404,93406,93408,93410,93412,93414,93416,93418],{"class":256,"line":175},[254,93403,42],{"class":264},[254,93405,310],{"class":260},[254,93407,93255],{"class":264},[254,93409,482],{"class":313},[254,93411,642],{"class":264},[254,93413,575],{"class":313},[254,93415,642],{"class":264},[254,93417,964],{"class":313},[254,93419,271],{"class":264},[254,93421,93422],{"class":256,"line":1319},[254,93423,93424],{"class":323},"#求平均值\n",[254,93426,93427],{"class":256,"line":1334},[254,93428,93429],{"class":264},"np.mean(a)\n",[14,93431,93432],{},"②二维数组",[245,93434,93436],{"className":30519,"code":93435,"language":30521,"meta":174,"style":174},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[251,93437,93438,93443,93468,93473],{"__ignoreMap":174},[254,93439,93440],{"class":256,"line":257},[254,93441,93442],{"class":323},"#二维数组\n",[254,93444,93445,93448,93450,93452,93454,93456,93458,93460,93462,93464,93466],{"class":256,"line":175},[254,93446,93447],{"class":264},"aa",[254,93449,310],{"class":260},[254,93451,93143],{"class":264},[254,93453,482],{"class":313},[254,93455,642],{"class":264},[254,93457,787],{"class":313},[254,93459,93148],{"class":264},[254,93461,336],{"class":313},[254,93463,642],{"class":264},[254,93465,557],{"class":313},[254,93467,271],{"class":264},[254,93469,93470],{"class":256,"line":1319},[254,93471,93472],{"class":323},"#对数组中的所有数求平均\n",[254,93474,93475],{"class":256,"line":1334},[254,93476,93477],{"class":264},"np.mean(aa)\n",[34,93479,93481],{"id":93480},"_114-median求中位数函数","11.4 median()求中位数函数",[245,93483,93485],{"className":30519,"code":93484,"language":30521,"meta":174,"style":174},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[251,93486,93487,93492,93508,93513],{"__ignoreMap":174},[254,93488,93489],{"class":256,"line":257},[254,93490,93491],{"class":323},"#求中位数\n",[254,93493,93494,93496,93498,93500,93502,93504,93506],{"class":256,"line":175},[254,93495,527],{"class":264},[254,93497,310],{"class":260},[254,93499,93143],{"class":264},[254,93501,482],{"class":313},[254,93503,642],{"class":264},[254,93505,710],{"class":313},[254,93507,271],{"class":264},[254,93509,93510],{"class":256,"line":1319},[254,93511,93512],{"class":264},"np.median(b)\n",[254,93514,93515],{"class":256,"line":1334},[254,93516,93517],{"class":323},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[34,93519,93521],{"id":93520},"_115-power求幂运算函数","11.5 power()求幂运算函数",[245,93523,93525],{"className":30519,"code":93524,"language":30521,"meta":174,"style":174},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[251,93526,93527,93543,93548,93553,93562,93567,93576],{"__ignoreMap":174},[254,93528,93529,93531,93533,93535,93537,93539,93541],{"class":256,"line":257},[254,93530,527],{"class":264},[254,93532,310],{"class":260},[254,93534,93143],{"class":264},[254,93536,482],{"class":313},[254,93538,642],{"class":264},[254,93540,710],{"class":313},[254,93542,271],{"class":264},[254,93544,93545],{"class":256,"line":175},[254,93546,93547],{"class":323},"#幂运算\n",[254,93549,93550],{"class":256,"line":1319},[254,93551,93552],{"class":323},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[254,93554,93555,93558,93560],{"class":256,"line":1334},[254,93556,93557],{"class":264},"np.power(b,",[254,93559,342],{"class":313},[254,93561,271],{"class":264},[254,93563,93564],{"class":256,"line":1340},[254,93565,93566],{"class":323},"#或者以下代码，将数据存储起来\n",[254,93568,93569,93571,93573],{"class":256,"line":1354},[254,93570,1109],{"class":264},[254,93572,310],{"class":260},[254,93574,93575],{"class":264},"np.empty_like(b)\n",[254,93577,93578,93580,93582,93584,93586,93588],{"class":256,"line":1360},[254,93579,93557],{"class":264},[254,93581,342],{"class":313},[254,93583,642],{"class":264},[254,93585,93195],{"class":5357},[254,93587,310],{"class":260},[254,93589,93590],{"class":264},"y)\n",[34,93592,93594],{"id":93593},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[245,93596,93598],{"className":30519,"code":93597,"language":30521,"meta":174,"style":174},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[251,93599,93600,93616,93621,93626,93630,93648],{"__ignoreMap":174},[254,93601,93602,93604,93606,93608,93610,93612,93614],{"class":256,"line":257},[254,93603,527],{"class":264},[254,93605,310],{"class":260},[254,93607,93143],{"class":264},[254,93609,482],{"class":313},[254,93611,642],{"class":264},[254,93613,710],{"class":313},[254,93615,271],{"class":264},[254,93617,93618],{"class":256,"line":175},[254,93619,93620],{"class":323},"#开方\n",[254,93622,93623],{"class":256,"line":1319},[254,93624,93625],{"class":264},"np.sqrt(b)\n",[254,93627,93628],{"class":256,"line":1334},[254,93629,93566],{"class":323},[254,93631,93632,93634,93636,93639,93642,93644,93646],{"class":256,"line":1340},[254,93633,1109],{"class":264},[254,93635,310],{"class":260},[254,93637,93638],{"class":264},"np.empty_like(b,",[254,93640,93641],{"class":5357},"dtype",[254,93643,310],{"class":260},[254,93645,304],{"class":313},[254,93647,271],{"class":264},[254,93649,93650,93653,93655,93657],{"class":256,"line":1354},[254,93651,93652],{"class":264},"np.sqrt(b,",[254,93654,93195],{"class":5357},[254,93656,310],{"class":260},[254,93658,93590],{"class":264},[34,93660,93662],{"id":93661},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[14,93664,93665],{},"对数组中的元素累计求和，可指定轴",[14,93667,93668],{},"#累计求和的意思是：",[14,93670,93671],{},"a = np.array([1, 2, 3, 4])",[14,93673,93674],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[245,93676,93678],{"className":30519,"code":93677,"language":30521,"meta":174,"style":174},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[251,93679,93680,93696,93701,93706],{"__ignoreMap":174},[254,93681,93682,93684,93686,93688,93690,93692,93694],{"class":256,"line":257},[254,93683,527],{"class":264},[254,93685,310],{"class":260},[254,93687,93143],{"class":264},[254,93689,482],{"class":313},[254,93691,642],{"class":264},[254,93693,710],{"class":313},[254,93695,271],{"class":264},[254,93697,93698],{"class":256,"line":175},[254,93699,93700],{"class":264},"np.cumsum(b)\n",[254,93702,93703],{"class":256,"line":1319},[254,93704,93705],{"class":323},"#结果：\n",[254,93707,93708],{"class":256,"line":1334},[254,93709,93710],{"class":323},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[34,93712,93714],{"id":93713},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[245,93716,93718],{"className":30519,"code":93717,"language":30521,"meta":174,"style":174},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[251,93719,93720,93736,93741,93746,93750],{"__ignoreMap":174},[254,93721,93722,93724,93726,93728,93730,93732,93734],{"class":256,"line":257},[254,93723,527],{"class":264},[254,93725,310],{"class":260},[254,93727,93143],{"class":264},[254,93729,482],{"class":313},[254,93731,642],{"class":264},[254,93733,710],{"class":313},[254,93735,271],{"class":264},[254,93737,93738],{"class":256,"line":175},[254,93739,93740],{"class":323},"#对数组中的元素累计求积，可指定轴\n",[254,93742,93743],{"class":256,"line":1319},[254,93744,93745],{"class":264},"np.cumprod(b)\n",[254,93747,93748],{"class":256,"line":1334},[254,93749,93705],{"class":323},[254,93751,93752],{"class":256,"line":1340},[254,93753,93754],{"class":323},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[34,93756,93758],{"id":93757},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[245,93760,93762],{"className":30519,"code":93761,"language":30521,"meta":174,"style":174},"#删除数组中的重复数据，并对数据进行排序\na=np.array([1,2,3,12,3,10,32,0,23,4])\nnp.unique(a)\n#结果：\n#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[251,93763,93764,93769,93817,93822,93826],{"__ignoreMap":174},[254,93765,93766],{"class":256,"line":257},[254,93767,93768],{"class":323},"#删除数组中的重复数据，并对数据进行排序\n",[254,93770,93771,93773,93775,93777,93779,93781,93783,93785,93787,93789,93791,93793,93795,93797,93799,93801,93803,93805,93807,93809,93811,93813,93815],{"class":256,"line":175},[254,93772,42],{"class":264},[254,93774,310],{"class":260},[254,93776,93165],{"class":264},[254,93778,482],{"class":313},[254,93780,642],{"class":264},[254,93782,342],{"class":313},[254,93784,642],{"class":264},[254,93786,336],{"class":313},[254,93788,642],{"class":264},[254,93790,762],{"class":313},[254,93792,642],{"class":264},[254,93794,336],{"class":313},[254,93796,642],{"class":264},[254,93798,710],{"class":313},[254,93800,642],{"class":264},[254,93802,462],{"class":313},[254,93804,642],{"class":264},[254,93806,456],{"class":313},[254,93808,642],{"class":264},[254,93810,1039],{"class":313},[254,93812,642],{"class":264},[254,93814,557],{"class":313},[254,93816,4797],{"class":264},[254,93818,93819],{"class":256,"line":1319},[254,93820,93821],{"class":264},"np.unique(a)\n",[254,93823,93824],{"class":256,"line":1334},[254,93825,93705],{"class":323},[254,93827,93828],{"class":256,"line":1340},[254,93829,93830],{"class":323},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[14,93832,93833],{},"升序形式排序",[34,93835,93837],{"id":93836},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[245,93839,93841],{"className":30519,"code":93840,"language":30521,"meta":174,"style":174},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[251,93842,93843,93891,93896],{"__ignoreMap":174},[254,93844,93845,93847,93849,93851,93853,93855,93857,93859,93861,93863,93865,93867,93869,93871,93873,93875,93877,93879,93881,93883,93885,93887,93889],{"class":256,"line":257},[254,93846,42],{"class":264},[254,93848,310],{"class":260},[254,93850,93165],{"class":264},[254,93852,482],{"class":313},[254,93854,642],{"class":264},[254,93856,342],{"class":313},[254,93858,642],{"class":264},[254,93860,336],{"class":313},[254,93862,642],{"class":264},[254,93864,762],{"class":313},[254,93866,642],{"class":264},[254,93868,336],{"class":313},[254,93870,642],{"class":264},[254,93872,710],{"class":313},[254,93874,642],{"class":264},[254,93876,462],{"class":313},[254,93878,642],{"class":264},[254,93880,456],{"class":313},[254,93882,642],{"class":264},[254,93884,1039],{"class":313},[254,93886,642],{"class":264},[254,93888,557],{"class":313},[254,93890,4797],{"class":264},[254,93892,93893],{"class":256,"line":175},[254,93894,93895],{"class":323},"#返回数组中非零元素的索引\n",[254,93897,93898],{"class":256,"line":1319},[254,93899,93900],{"class":264},"np.nonzero(a)\n",[34,93902,93904],{"id":93903},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[245,93906,93908],{"className":30519,"code":93907,"language":30521,"meta":174,"style":174},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[251,93909,93910,93958,93963],{"__ignoreMap":174},[254,93911,93912,93914,93916,93918,93920,93922,93924,93926,93928,93930,93932,93934,93936,93938,93940,93942,93944,93946,93948,93950,93952,93954,93956],{"class":256,"line":257},[254,93913,42],{"class":264},[254,93915,310],{"class":260},[254,93917,93165],{"class":264},[254,93919,482],{"class":313},[254,93921,642],{"class":264},[254,93923,342],{"class":313},[254,93925,642],{"class":264},[254,93927,336],{"class":313},[254,93929,642],{"class":264},[254,93931,762],{"class":313},[254,93933,642],{"class":264},[254,93935,336],{"class":313},[254,93937,642],{"class":264},[254,93939,710],{"class":313},[254,93941,642],{"class":264},[254,93943,462],{"class":313},[254,93945,642],{"class":264},[254,93947,456],{"class":313},[254,93949,642],{"class":264},[254,93951,1039],{"class":313},[254,93953,642],{"class":264},[254,93955,557],{"class":313},[254,93957,4797],{"class":264},[254,93959,93960],{"class":256,"line":175},[254,93961,93962],{"class":323},"#计算一组数中最大值与最小值的差，可指定轴\n",[254,93964,93965],{"class":256,"line":1319},[254,93966,93967],{"class":264},"np.ptp(a)\n",[5267,93969,93970],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":174,"searchDepth":175,"depth":175,"links":93972},[93973,93974,93975,93976,93977,93978,93979,93980,93981,93982,93983],{"id":93235,"depth":175,"text":93236},{"id":93278,"depth":175,"text":93279},{"id":93386,"depth":175,"text":93387},{"id":93480,"depth":175,"text":93481},{"id":93520,"depth":175,"text":93521},{"id":93593,"depth":175,"text":93594},{"id":93661,"depth":175,"text":93662},{"id":93713,"depth":175,"text":93714},{"id":93757,"depth":175,"text":93758},{"id":93836,"depth":175,"text":93837},{"id":93903,"depth":175,"text":93904},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93221,"description":23518},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":93990,"title":93991,"body":93992,"description":23518,"extension":181,"meta":94647,"navigation":184,"path":94648,"seo":94649,"stem":94650,"__hash__":94651},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":93993,"toc":94635},[93994,93997,94001,94004,94220,94224,94227,94436,94440,94506,94511,94515,94518,94521,94559,94563,94566,94571,94575,94578,94581,94586,94590,94593,94597,94600,94603,94608,94612,94615,94618,94623,94627,94632],[10,93995,93991],{"id":93996},"_12其他常用函数",[34,93998,94000],{"id":93999},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[14,94002,94003],{},"将数组的数据按照行列复制扩展",[245,94005,94007],{"className":30519,"code":94006,"language":30521,"meta":174,"style":174},"a=np.arange(1,5)\nnp.tile(a,2)\n#结果：\n#array([1, 2, 3, 4, 1, 2, 3, 4])\n#行复制两次，列复制三次\nnp.tile(a,(2,3))\n#结果：\n'''\narray([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n'''\n#创建二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.tile(aa,2)#一个数的时候就是行\n#结果：\n'''\narray([[ 1,  2,  3,  1,  2,  3],\n       [ 4,  5,  6,  4,  5,  6],\n       [ 7,  8,  9,  7,  8,  9],\n       [10, 11, 12, 10, 11, 12]])\n'''\nnp.tile(aa,(2,3))\n#结果：\n'''\narray([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n'''\n\n",[251,94008,94009,94025,94034,94038,94043,94048,94061,94065,94070,94075,94080,94084,94089,94113,94125,94129,94133,94138,94143,94148,94153,94157,94170,94174,94178,94183,94188,94193,94198,94203,94207,94211,94216],{"__ignoreMap":174},[254,94010,94011,94013,94015,94017,94019,94021,94023],{"class":256,"line":257},[254,94012,42],{"class":264},[254,94014,310],{"class":260},[254,94016,93143],{"class":264},[254,94018,482],{"class":313},[254,94020,642],{"class":264},[254,94022,583],{"class":313},[254,94024,271],{"class":264},[254,94026,94027,94030,94032],{"class":256,"line":175},[254,94028,94029],{"class":264},"np.tile(a,",[254,94031,342],{"class":313},[254,94033,271],{"class":264},[254,94035,94036],{"class":256,"line":1319},[254,94037,93705],{"class":323},[254,94039,94040],{"class":256,"line":1334},[254,94041,94042],{"class":323},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[254,94044,94045],{"class":256,"line":1340},[254,94046,94047],{"class":323},"#行复制两次，列复制三次\n",[254,94049,94050,94053,94055,94057,94059],{"class":256,"line":1354},[254,94051,94052],{"class":264},"np.tile(a,(",[254,94054,342],{"class":313},[254,94056,642],{"class":264},[254,94058,336],{"class":313},[254,94060,30638],{"class":264},[254,94062,94063],{"class":256,"line":1360},[254,94064,93705],{"class":323},[254,94066,94067],{"class":256,"line":1451},[254,94068,94069],{"class":369},"'''\n",[254,94071,94072],{"class":256,"line":1457},[254,94073,94074],{"class":369},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[254,94076,94077],{"class":256,"line":1469},[254,94078,94079],{"class":369},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[254,94081,94082],{"class":256,"line":1752},[254,94083,94069],{"class":369},[254,94085,94086],{"class":256,"line":1757},[254,94087,94088],{"class":323},"#创建二维数组\n",[254,94090,94091,94093,94095,94097,94099,94101,94103,94105,94107,94109,94111],{"class":256,"line":1763},[254,94092,93447],{"class":264},[254,94094,310],{"class":260},[254,94096,93143],{"class":264},[254,94098,482],{"class":313},[254,94100,642],{"class":264},[254,94102,787],{"class":313},[254,94104,93148],{"class":264},[254,94106,557],{"class":313},[254,94108,642],{"class":264},[254,94110,336],{"class":313},[254,94112,271],{"class":264},[254,94114,94115,94118,94120,94122],{"class":256,"line":1768},[254,94116,94117],{"class":264},"np.tile(aa,",[254,94119,342],{"class":313},[254,94121,693],{"class":264},[254,94123,94124],{"class":323},"#一个数的时候就是行\n",[254,94126,94127],{"class":256,"line":1782},[254,94128,93705],{"class":323},[254,94130,94131],{"class":256,"line":1787},[254,94132,94069],{"class":369},[254,94134,94135],{"class":256,"line":1793},[254,94136,94137],{"class":369},"array([[ 1,  2,  3,  1,  2,  3],\n",[254,94139,94140],{"class":256,"line":1814},[254,94141,94142],{"class":369},"       [ 4,  5,  6,  4,  5,  6],\n",[254,94144,94145],{"class":256,"line":1819},[254,94146,94147],{"class":369},"       [ 7,  8,  9,  7,  8,  9],\n",[254,94149,94150],{"class":256,"line":1833},[254,94151,94152],{"class":369},"       [10, 11, 12, 10, 11, 12]])\n",[254,94154,94155],{"class":256,"line":1838},[254,94156,94069],{"class":369},[254,94158,94159,94162,94164,94166,94168],{"class":256,"line":1867},[254,94160,94161],{"class":264},"np.tile(aa,(",[254,94163,342],{"class":313},[254,94165,642],{"class":264},[254,94167,336],{"class":313},[254,94169,30638],{"class":264},[254,94171,94172],{"class":256,"line":1872},[254,94173,93705],{"class":323},[254,94175,94176],{"class":256,"line":1889},[254,94177,94069],{"class":369},[254,94179,94180],{"class":256,"line":1894},[254,94181,94182],{"class":369},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[254,94184,94185],{"class":256,"line":1899},[254,94186,94187],{"class":369},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[254,94189,94190],{"class":256,"line":1904},[254,94191,94192],{"class":369},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[254,94194,94195],{"class":256,"line":1918},[254,94196,94197],{"class":369},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[254,94199,94200],{"class":256,"line":1923},[254,94201,94202],{"class":369},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[254,94204,94205],{"class":256,"line":2717},[254,94206,94187],{"class":369},[254,94208,94209],{"class":256,"line":2731},[254,94210,94192],{"class":369},[254,94212,94213],{"class":256,"line":2739},[254,94214,94215],{"class":369},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[254,94217,94218],{"class":256,"line":2744},[254,94219,94069],{"class":369},[34,94221,94223],{"id":94222},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[14,94225,94226],{},"repeat()将数组中的每个元素重复若干次",[245,94228,94230],{"className":30519,"code":94229,"language":30521,"meta":174,"style":174},"a=np.arange(1,5)\nnp.repeat(a,3)\n#结果：\n#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\naa=np.arange(1,13).reshape(4,3)\n#这个重复之后二维变成一维\nnp.repeat(aa,2)\n'''\narray([ 1,  1,  2,  2,  3,  3,  4,  4,  5,  5,  6,  6,  7,  7,  8,  8,  9, 9, 10, 10, 11, 11, 12, 12])\n'''\n#指定axis\nnp.repeat(aa,2,axis=0)\n#结果：\n'''\narray([[ 1,  2,  3],\n       [ 1,  2,  3],\n       [ 4,  5,  6],\n       [ 4,  5,  6],\n       [ 7,  8,  9],\n       [ 7,  8,  9],\n       [10, 11, 12],\n       [10, 11, 12]])\n'''\nnp.repeat(aa,2,axis=1)\n#结果：\n'''\narray([[ 1,  1,  2,  2,  3,  3],\n       [ 4,  4,  5,  5,  6,  6],\n       [ 7,  7,  8,  8,  9,  9],\n       [10, 10, 11, 11, 12, 12]])\n'''\n",[251,94231,94232,94248,94257,94261,94266,94290,94295,94304,94308,94313,94317,94322,94338,94342,94346,94351,94356,94361,94365,94370,94374,94379,94384,94388,94404,94408,94412,94417,94422,94427,94432],{"__ignoreMap":174},[254,94233,94234,94236,94238,94240,94242,94244,94246],{"class":256,"line":257},[254,94235,42],{"class":264},[254,94237,310],{"class":260},[254,94239,93143],{"class":264},[254,94241,482],{"class":313},[254,94243,642],{"class":264},[254,94245,583],{"class":313},[254,94247,271],{"class":264},[254,94249,94250,94253,94255],{"class":256,"line":175},[254,94251,94252],{"class":264},"np.repeat(a,",[254,94254,336],{"class":313},[254,94256,271],{"class":264},[254,94258,94259],{"class":256,"line":1319},[254,94260,93705],{"class":323},[254,94262,94263],{"class":256,"line":1334},[254,94264,94265],{"class":323},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[254,94267,94268,94270,94272,94274,94276,94278,94280,94282,94284,94286,94288],{"class":256,"line":1340},[254,94269,93447],{"class":264},[254,94271,310],{"class":260},[254,94273,93143],{"class":264},[254,94275,482],{"class":313},[254,94277,642],{"class":264},[254,94279,787],{"class":313},[254,94281,93148],{"class":264},[254,94283,557],{"class":313},[254,94285,642],{"class":264},[254,94287,336],{"class":313},[254,94289,271],{"class":264},[254,94291,94292],{"class":256,"line":1354},[254,94293,94294],{"class":323},"#这个重复之后二维变成一维\n",[254,94296,94297,94300,94302],{"class":256,"line":1360},[254,94298,94299],{"class":264},"np.repeat(aa,",[254,94301,342],{"class":313},[254,94303,271],{"class":264},[254,94305,94306],{"class":256,"line":1451},[254,94307,94069],{"class":369},[254,94309,94310],{"class":256,"line":1457},[254,94311,94312],{"class":369},"array([ 1,  1,  2,  2,  3,  3,  4,  4,  5,  5,  6,  6,  7,  7,  8,  8,  9, 9, 10, 10, 11, 11, 12, 12])\n",[254,94314,94315],{"class":256,"line":1469},[254,94316,94069],{"class":369},[254,94318,94319],{"class":256,"line":1752},[254,94320,94321],{"class":323},"#指定axis\n",[254,94323,94324,94326,94328,94330,94332,94334,94336],{"class":256,"line":1757},[254,94325,94299],{"class":264},[254,94327,342],{"class":313},[254,94329,642],{"class":264},[254,94331,47655],{"class":5357},[254,94333,310],{"class":260},[254,94335,456],{"class":313},[254,94337,271],{"class":264},[254,94339,94340],{"class":256,"line":1763},[254,94341,93705],{"class":323},[254,94343,94344],{"class":256,"line":1768},[254,94345,94069],{"class":369},[254,94347,94348],{"class":256,"line":1782},[254,94349,94350],{"class":369},"array([[ 1,  2,  3],\n",[254,94352,94353],{"class":256,"line":1787},[254,94354,94355],{"class":369},"       [ 1,  2,  3],\n",[254,94357,94358],{"class":256,"line":1793},[254,94359,94360],{"class":369},"       [ 4,  5,  6],\n",[254,94362,94363],{"class":256,"line":1814},[254,94364,94360],{"class":369},[254,94366,94367],{"class":256,"line":1819},[254,94368,94369],{"class":369},"       [ 7,  8,  9],\n",[254,94371,94372],{"class":256,"line":1833},[254,94373,94369],{"class":369},[254,94375,94376],{"class":256,"line":1838},[254,94377,94378],{"class":369},"       [10, 11, 12],\n",[254,94380,94381],{"class":256,"line":1867},[254,94382,94383],{"class":369},"       [10, 11, 12]])\n",[254,94385,94386],{"class":256,"line":1872},[254,94387,94069],{"class":369},[254,94389,94390,94392,94394,94396,94398,94400,94402],{"class":256,"line":1889},[254,94391,94299],{"class":264},[254,94393,342],{"class":313},[254,94395,642],{"class":264},[254,94397,47655],{"class":5357},[254,94399,310],{"class":260},[254,94401,482],{"class":313},[254,94403,271],{"class":264},[254,94405,94406],{"class":256,"line":1894},[254,94407,93705],{"class":323},[254,94409,94410],{"class":256,"line":1899},[254,94411,94069],{"class":369},[254,94413,94414],{"class":256,"line":1904},[254,94415,94416],{"class":369},"array([[ 1,  1,  2,  2,  3,  3],\n",[254,94418,94419],{"class":256,"line":1918},[254,94420,94421],{"class":369},"       [ 4,  4,  5,  5,  6,  6],\n",[254,94423,94424],{"class":256,"line":1923},[254,94425,94426],{"class":369},"       [ 7,  7,  8,  8,  9,  9],\n",[254,94428,94429],{"class":256,"line":2717},[254,94430,94431],{"class":369},"       [10, 10, 11, 11, 12, 12]])\n",[254,94433,94434],{"class":256,"line":2731},[254,94435,94069],{"class":369},[34,94437,94439],{"id":94438},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[245,94441,94443],{"className":30519,"code":94442,"language":30521,"meta":174,"style":174},"a=np.arange(1,5)\n#array([，2，3，4])\nnp.roll(a,2)#传正数向后调多少位，传负数向前调多少位\n#结果：\n#array([3, 4, 1, 2])\nnp.roll(a,-1)\n#结果：\n#array([2, 3, 4, 1])\n",[251,94444,94445,94461,94466,94478,94482,94487,94497,94501],{"__ignoreMap":174},[254,94446,94447,94449,94451,94453,94455,94457,94459],{"class":256,"line":257},[254,94448,42],{"class":264},[254,94450,310],{"class":260},[254,94452,93143],{"class":264},[254,94454,482],{"class":313},[254,94456,642],{"class":264},[254,94458,583],{"class":313},[254,94460,271],{"class":264},[254,94462,94463],{"class":256,"line":175},[254,94464,94465],{"class":323},"#array([，2，3，4])\n",[254,94467,94468,94471,94473,94475],{"class":256,"line":1319},[254,94469,94470],{"class":264},"np.roll(a,",[254,94472,342],{"class":313},[254,94474,693],{"class":264},[254,94476,94477],{"class":323},"#传正数向后调多少位，传负数向前调多少位\n",[254,94479,94480],{"class":256,"line":1334},[254,94481,93705],{"class":323},[254,94483,94484],{"class":256,"line":1340},[254,94485,94486],{"class":323},"#array([3, 4, 1, 2])\n",[254,94488,94489,94491,94493,94495],{"class":256,"line":1354},[254,94490,94470],{"class":264},[254,94492,796],{"class":260},[254,94494,482],{"class":313},[254,94496,271],{"class":264},[254,94498,94499],{"class":256,"line":1360},[254,94500,93705],{"class":323},[254,94502,94503],{"class":256,"line":1451},[254,94504,94505],{"class":323},"#array([2, 3, 4, 1])\n",[14,94507,94508],{},[1602,94509],{"alt":174,"src":94510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[34,94512,94514],{"id":94513},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[14,94516,94517],{},"resize()重新调整数组的大小",[14,94519,94520],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[245,94522,94524],{"className":30519,"code":94523,"language":30521,"meta":174,"style":174},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[251,94525,94526,94531,94544],{"__ignoreMap":174},[254,94527,94528],{"class":256,"line":257},[254,94529,94530],{"class":323},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[254,94532,94533,94536,94538,94540,94542],{"class":256,"line":175},[254,94534,94535],{"class":264},"np.resize(aa,(",[254,94537,342],{"class":313},[254,94539,642],{"class":264},[254,94541,608],{"class":313},[254,94543,30638],{"class":264},[254,94545,94546,94548,94550,94552,94554,94556],{"class":256,"line":1319},[254,94547,94535],{"class":264},[254,94549,342],{"class":313},[254,94551,642],{"class":264},[254,94553,684],{"class":313},[254,94555,82912],{"class":264},[254,94557,94558],{"class":323},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[34,94560,94562],{"id":94561},"_125-placeput函数","12.5 place()\u002Fput()函数",[14,94564,94565],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[14,94567,94568],{},[1602,94569],{"alt":174,"src":94570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[34,94572,94574],{"id":94573},"_126-保存加载文件","12.6 保存加载文件",[14,94576,94577],{},"savetxt():将数据保存到txt文件中",[14,94579,94580],{},"loadtxt():从文件加载数据",[14,94582,94583],{},[1602,94584],{"alt":174,"src":94585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[34,94587,94589],{"id":94588},"_127-genfromtxt函数","12.7 genfromtxt()函数",[14,94591,94592],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[34,94594,94596],{"id":94595},"_128-anyall函数","12.8 any()\u002Fall()函数",[14,94598,94599],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[14,94601,94602],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[14,94604,94605],{},[1602,94606],{"alt":174,"src":94607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[34,94609,94611],{"id":94610},"_129-where语句","12.9 where语句",[14,94613,94614],{},"np.where(条件,x,y)",[14,94616,94617],{},"如果条件为True,对应值为x,否则对应值为y",[14,94619,94620],{},[1602,94621],{"alt":174,"src":94622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[34,94624,94626],{"id":94625},"_1210-dot矩阵","12.10 dot()矩阵",[14,94628,94629],{},[1602,94630],{"alt":174,"src":94631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[5267,94633,94634],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":174,"searchDepth":175,"depth":175,"links":94636},[94637,94638,94639,94640,94641,94642,94643,94644,94645,94646],{"id":93999,"depth":175,"text":94000},{"id":94222,"depth":175,"text":94223},{"id":94438,"depth":175,"text":94439},{"id":94513,"depth":175,"text":94514},{"id":94561,"depth":175,"text":94562},{"id":94573,"depth":175,"text":94574},{"id":94588,"depth":175,"text":94589},{"id":94595,"depth":175,"text":94596},{"id":94610,"depth":175,"text":94611},{"id":94625,"depth":175,"text":94626},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":93991,"description":23518},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":94653,"title":94654,"body":94655,"description":23518,"extension":181,"meta":95008,"navigation":184,"path":95009,"seo":95010,"stem":95011,"__hash__":95012},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":94656,"toc":95006},[94657,94660,94663,94666,94669,94672,94737,94739,95003],[10,94658,94654],{"id":94659},"_13数组排序",[14,94661,94662],{},"排序主要用到的方法是np.sort和np.argsort",[14,94664,94665],{},"其中np.sort()对数组直接排序",[14,94667,94668],{},"而np.argsort()是返回排序后的原始索引",[14,94670,94671],{},"①一维数组",[245,94673,94675],{"className":30519,"code":94674,"language":30521,"meta":174,"style":174},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[251,94676,94677,94681,94721,94729],{"__ignoreMap":174},[254,94678,94679],{"class":256,"line":257},[254,94680,93246],{"class":323},[254,94682,94683,94685,94687,94689,94691,94693,94695,94697,94699,94701,94703,94705,94707,94709,94711,94713,94715,94717,94719],{"class":256,"line":175},[254,94684,42],{"class":264},[254,94686,310],{"class":260},[254,94688,93165],{"class":264},[254,94690,336],{"class":313},[254,94692,642],{"class":264},[254,94694,762],{"class":313},[254,94696,642],{"class":264},[254,94698,659],{"class":313},[254,94700,642],{"class":264},[254,94702,1039],{"class":313},[254,94704,642],{"class":264},[254,94706,543],{"class":313},[254,94708,642],{"class":264},[254,94710,1157],{"class":313},[254,94712,642],{"class":264},[254,94714,608],{"class":313},[254,94716,642],{"class":264},[254,94718,710],{"class":313},[254,94720,4797],{"class":264},[254,94722,94723,94726],{"class":256,"line":1319},[254,94724,94725],{"class":264},"np.sort(a)",[254,94727,94728],{"class":323},"#升序排序\n",[254,94730,94731,94734],{"class":256,"line":1334},[254,94732,94733],{"class":264},"np.argsort(a)",[254,94735,94736],{"class":323},"#按照元素大小来索引排序\n",[14,94738,93432],{},[245,94740,94742],{"className":30519,"code":94741,"language":30521,"meta":174,"style":174},"np.random.seed(0)#保证每次值一样\naa=np.random.randint(100,size=(4,6))\n#原数组：\n'''\narray([[44, 47, 64, 67, 67,  9],\n       [83, 21, 36, 87, 70, 88],\n       [88, 12, 58, 65, 39, 87],\n       [46, 88, 81, 37, 25, 77]], dtype=int32)\n'''\nnp.sort(aa)#每行进行了排序\n'''\narray([[ 9, 44, 47, 64, 67, 67],\n       [21, 36, 70, 83, 87, 88],\n       [12, 39, 58, 65, 87, 88],\n       [25, 37, 46, 77, 81, 88]], dtype=int32)\n'''\n#axis=0时\nnp.sort(aa,axis=0)\n'''\narray([[44, 12, 36, 37, 25,  9],\n       [46, 21, 58, 65, 39, 77],\n       [83, 47, 64, 67, 67, 87],\n       [88, 88, 81, 87, 70, 88]], dtype=int32)\n'''\n#axis=1时,为默认值\nnp.sort(aa,axis=1)\n'''\narray([[ 9, 44, 47, 64, 67, 67],\n       [21, 36, 70, 83, 87, 88],\n       [12, 39, 58, 65, 87, 88],\n       [25, 37, 46, 77, 81, 88]], dtype=int32)\n'''\n#按最后一列排序\nb=aa[:,-1]\n#获取最后一列排好序的索引\nindex=np.argsort(b)\naa[index]\n'''\narray([[44, 47, 64, 67, 67,  9],\n       [46, 88, 81, 37, 25, 77],\n       [88, 12, 58, 65, 39, 87],\n       [83, 21, 36, 87, 70, 88]], dtype=int32)\n'''\n",[251,94743,94744,94756,94782,94787,94791,94796,94801,94806,94811,94815,94823,94827,94832,94837,94842,94847,94851,94856,94869,94873,94878,94883,94888,94893,94897,94902,94914,94918,94922,94926,94930,94934,94938,94943,94958,94963,94972,94977,94981,94985,94990,94994,94999],{"__ignoreMap":174},[254,94745,94746,94749,94751,94753],{"class":256,"line":257},[254,94747,94748],{"class":264},"np.random.seed(",[254,94750,456],{"class":313},[254,94752,693],{"class":264},[254,94754,94755],{"class":323},"#保证每次值一样\n",[254,94757,94758,94760,94762,94764,94766,94768,94770,94772,94774,94776,94778,94780],{"class":256,"line":175},[254,94759,93447],{"class":264},[254,94761,310],{"class":260},[254,94763,93255],{"class":264},[254,94765,575],{"class":313},[254,94767,642],{"class":264},[254,94769,31637],{"class":5357},[254,94771,310],{"class":260},[254,94773,265],{"class":264},[254,94775,557],{"class":313},[254,94777,642],{"class":264},[254,94779,608],{"class":313},[254,94781,30638],{"class":264},[254,94783,94784],{"class":256,"line":1319},[254,94785,94786],{"class":323},"#原数组：\n",[254,94788,94789],{"class":256,"line":1334},[254,94790,94069],{"class":369},[254,94792,94793],{"class":256,"line":1340},[254,94794,94795],{"class":369},"array([[44, 47, 64, 67, 67,  9],\n",[254,94797,94798],{"class":256,"line":1354},[254,94799,94800],{"class":369},"       [83, 21, 36, 87, 70, 88],\n",[254,94802,94803],{"class":256,"line":1360},[254,94804,94805],{"class":369},"       [88, 12, 58, 65, 39, 87],\n",[254,94807,94808],{"class":256,"line":1451},[254,94809,94810],{"class":369},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[254,94812,94813],{"class":256,"line":1457},[254,94814,94069],{"class":369},[254,94816,94817,94820],{"class":256,"line":1469},[254,94818,94819],{"class":264},"np.sort(aa)",[254,94821,94822],{"class":323},"#每行进行了排序\n",[254,94824,94825],{"class":256,"line":1752},[254,94826,94069],{"class":369},[254,94828,94829],{"class":256,"line":1757},[254,94830,94831],{"class":369},"array([[ 9, 44, 47, 64, 67, 67],\n",[254,94833,94834],{"class":256,"line":1763},[254,94835,94836],{"class":369},"       [21, 36, 70, 83, 87, 88],\n",[254,94838,94839],{"class":256,"line":1768},[254,94840,94841],{"class":369},"       [12, 39, 58, 65, 87, 88],\n",[254,94843,94844],{"class":256,"line":1782},[254,94845,94846],{"class":369},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[254,94848,94849],{"class":256,"line":1787},[254,94850,94069],{"class":369},[254,94852,94853],{"class":256,"line":1793},[254,94854,94855],{"class":323},"#axis=0时\n",[254,94857,94858,94861,94863,94865,94867],{"class":256,"line":1814},[254,94859,94860],{"class":264},"np.sort(aa,",[254,94862,47655],{"class":5357},[254,94864,310],{"class":260},[254,94866,456],{"class":313},[254,94868,271],{"class":264},[254,94870,94871],{"class":256,"line":1819},[254,94872,94069],{"class":369},[254,94874,94875],{"class":256,"line":1833},[254,94876,94877],{"class":369},"array([[44, 12, 36, 37, 25,  9],\n",[254,94879,94880],{"class":256,"line":1838},[254,94881,94882],{"class":369},"       [46, 21, 58, 65, 39, 77],\n",[254,94884,94885],{"class":256,"line":1867},[254,94886,94887],{"class":369},"       [83, 47, 64, 67, 67, 87],\n",[254,94889,94890],{"class":256,"line":1872},[254,94891,94892],{"class":369},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[254,94894,94895],{"class":256,"line":1889},[254,94896,94069],{"class":369},[254,94898,94899],{"class":256,"line":1894},[254,94900,94901],{"class":323},"#axis=1时,为默认值\n",[254,94903,94904,94906,94908,94910,94912],{"class":256,"line":1899},[254,94905,94860],{"class":264},[254,94907,47655],{"class":5357},[254,94909,310],{"class":260},[254,94911,482],{"class":313},[254,94913,271],{"class":264},[254,94915,94916],{"class":256,"line":1904},[254,94917,94069],{"class":369},[254,94919,94920],{"class":256,"line":1918},[254,94921,94831],{"class":369},[254,94923,94924],{"class":256,"line":1923},[254,94925,94836],{"class":369},[254,94927,94928],{"class":256,"line":2717},[254,94929,94841],{"class":369},[254,94931,94932],{"class":256,"line":2731},[254,94933,94846],{"class":369},[254,94935,94936],{"class":256,"line":2739},[254,94937,94069],{"class":369},[254,94939,94940],{"class":256,"line":2744},[254,94941,94942],{"class":323},"#按最后一列排序\n",[254,94944,94945,94947,94949,94952,94954,94956],{"class":256,"line":2750},[254,94946,527],{"class":264},[254,94948,310],{"class":260},[254,94950,94951],{"class":264},"aa[:,",[254,94953,796],{"class":260},[254,94955,482],{"class":313},[254,94957,33387],{"class":264},[254,94959,94960],{"class":256,"line":2756},[254,94961,94962],{"class":323},"#获取最后一列排好序的索引\n",[254,94964,94965,94967,94969],{"class":256,"line":2761},[254,94966,74199],{"class":264},[254,94968,310],{"class":260},[254,94970,94971],{"class":264},"np.argsort(b)\n",[254,94973,94974],{"class":256,"line":8089},[254,94975,94976],{"class":264},"aa[index]\n",[254,94978,94979],{"class":256,"line":8113},[254,94980,94069],{"class":369},[254,94982,94983],{"class":256,"line":8118},[254,94984,94795],{"class":369},[254,94986,94987],{"class":256,"line":8124},[254,94988,94989],{"class":369},"       [46, 88, 81, 37, 25, 77],\n",[254,94991,94992],{"class":256,"line":8151},[254,94993,94805],{"class":369},[254,94995,94996],{"class":256,"line":8156},[254,94997,94998],{"class":369},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[254,95000,95001],{"class":256,"line":8162},[254,95002,94069],{"class":369},[5267,95004,95005],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":174,"searchDepth":175,"depth":175,"links":95007},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":94654,"description":23518},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":95014,"title":95015,"body":95016,"description":23518,"extension":181,"meta":95046,"navigation":184,"path":95047,"seo":95048,"stem":95049,"__hash__":95050},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":95017,"toc":95044},[95018,95021,95024,95027,95030,95033,95036,95039],[10,95019,95015],{"id":95020},"_14广播机制",[14,95022,95023],{},"广播的规则：",[14,95025,95026],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[14,95028,95029],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[14,95031,95032],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[14,95034,95035],{},"3.如果没有维度形状为1，则会引发异常",[14,95037,95038],{},"也就是只有维度或者个数为1才可以进行广播操作",[14,95040,95041],{},[1602,95042],{"alt":174,"src":95043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":174,"searchDepth":175,"depth":175,"links":95045},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":95015,"description":23518},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":95052,"title":95053,"body":95054,"description":23518,"extension":181,"meta":95152,"navigation":184,"path":95153,"seo":95154,"stem":95155,"__hash__":95156},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":95055,"toc":95150},[95056,95059,95062,95147],[10,95057,95053],{"id":95058},"_15比较掩码",[14,95060,95061],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[245,95063,95065],{"className":30519,"code":95064,"language":30521,"meta":174,"style":174},"a=np.array([[1,2,3],[11,12,13],[21,22,23]])\na\u003C20#结果是一个由True,False组成的数组\na[a\u003C20]#小于20的元素会存到这个数组中\n#结果：\n#array([ 1,  2,  3, 11, 12, 13])\n",[251,95066,95067,95113,95124,95138,95142],{"__ignoreMap":174},[254,95068,95069,95071,95073,95076,95078,95080,95082,95084,95086,95088,95090,95092,95094,95096,95098,95100,95102,95104,95106,95108,95110],{"class":256,"line":257},[254,95070,42],{"class":264},[254,95072,310],{"class":260},[254,95074,95075],{"class":264},"np.array([[",[254,95077,482],{"class":313},[254,95079,642],{"class":264},[254,95081,342],{"class":313},[254,95083,642],{"class":264},[254,95085,336],{"class":313},[254,95087,48171],{"class":264},[254,95089,736],{"class":313},[254,95091,642],{"class":264},[254,95093,762],{"class":313},[254,95095,642],{"class":264},[254,95097,787],{"class":313},[254,95099,48171],{"class":264},[254,95101,989],{"class":313},[254,95103,642],{"class":264},[254,95105,1014],{"class":313},[254,95107,642],{"class":264},[254,95109,1039],{"class":313},[254,95111,95112],{"class":264},"]])\n",[254,95114,95115,95117,95119,95121],{"class":256,"line":175},[254,95116,42],{"class":264},[254,95118,1174],{"class":260},[254,95120,964],{"class":313},[254,95122,95123],{"class":323},"#结果是一个由True,False组成的数组\n",[254,95125,95126,95129,95131,95133,95135],{"class":256,"line":1319},[254,95127,95128],{"class":264},"a[a",[254,95130,1174],{"class":260},[254,95132,964],{"class":313},[254,95134,1204],{"class":264},[254,95136,95137],{"class":323},"#小于20的元素会存到这个数组中\n",[254,95139,95140],{"class":256,"line":1334},[254,95141,93705],{"class":323},[254,95143,95144],{"class":256,"line":1340},[254,95145,95146],{"class":323},"#array([ 1,  2,  3, 11, 12, 13])\n",[5267,95148,95149],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":174,"searchDepth":175,"depth":175,"links":95151},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":95053,"description":23518},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":95158,"title":95159,"body":95160,"description":23518,"extension":181,"meta":95252,"navigation":184,"path":95253,"seo":95254,"stem":95255,"__hash__":95256},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95161,"toc":95250},[95162,95165,95168,95171,95174,95177,95242,95247],[10,95163,95159],{"id":95164},"_16魔法命令time",[14,95166,95167],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[14,95169,95170],{},"%:行模式",[14,95172,95173],{},"%%:单元格模式",[14,95175,95176],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[245,95178,95180],{"className":30519,"code":95179,"language":30521,"meta":174,"style":174},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[251,95181,95182,95187,95194,95199,95208,95221,95225,95233],{"__ignoreMap":174},[254,95183,95184],{"class":256,"line":257},[254,95185,95186],{"class":323},"#程序执行时间\n",[254,95188,95189,95191],{"class":256,"line":175},[254,95190,30533],{"class":260},[254,95192,95193],{"class":264}," time \n",[254,95195,95196],{"class":256,"line":1319},[254,95197,95198],{"class":323},"#获取时间\n",[254,95200,95201,95204,95206],{"class":256,"line":1334},[254,95202,95203],{"class":264},"start",[254,95205,310],{"class":260},[254,95207,32559],{"class":264},[254,95209,95210,95213,95216,95218],{"class":256,"line":1340},[254,95211,95212],{"class":264},"time.sleep(",[254,95214,95215],{"class":313},"0.4",[254,95217,693],{"class":264},[254,95219,95220],{"class":323},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[254,95222,95223],{"class":256,"line":1354},[254,95224,95198],{"class":323},[254,95226,95227,95229,95231],{"class":256,"line":1360},[254,95228,45942],{"class":264},[254,95230,310],{"class":260},[254,95232,32559],{"class":264},[254,95234,95235,95237,95239],{"class":256,"line":1451},[254,95236,45942],{"class":264},[254,95238,796],{"class":260},[254,95240,95241],{"class":264},"start\n",[14,95243,95244],{},[1602,95245],{"alt":174,"src":95246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[5267,95248,95249],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":174,"searchDepth":175,"depth":175,"links":95251},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":95159,"description":23518},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95258,"title":95259,"body":95260,"description":23518,"extension":181,"meta":95295,"navigation":184,"path":95296,"seo":95297,"stem":95298,"__hash__":95299},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95261,"toc":95293},[95262,95265,95268,95271,95274,95277,95280,95283,95288],[10,95263,95259],{"id":95264},"_17魔法命令timeit",[14,95266,95267],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[14,95269,95270],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[14,95272,95273],{},"单元格模式：",[14,95275,95276],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[14,95278,95279],{},"初始化语句执行次数由轮数来决定",[14,95281,95282],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[14,95284,95285],{},[1602,95286],{"alt":174,"src":95287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[14,95289,95290],{},[1602,95291],{"alt":174,"src":95292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":174,"searchDepth":175,"depth":175,"links":95294},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95259,"description":23518},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95301,"title":95302,"body":95303,"description":23518,"extension":181,"meta":95321,"navigation":184,"path":95322,"seo":95323,"stem":95324,"__hash__":95325},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95304,"toc":95319},[95305,95308,95311,95314],[10,95306,95302],{"id":95307},"_18魔法命令writefile和run",[14,95309,95310],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[14,95312,95313],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[14,95315,95316],{},[1602,95317],{"alt":174,"src":95318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":174,"searchDepth":175,"depth":175,"links":95320},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95302,"description":23518},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95327,"title":95328,"body":95329,"description":23518,"extension":181,"meta":95382,"navigation":184,"path":95383,"seo":95384,"stem":95385,"__hash__":95386},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95330,"toc":95380},[95331,95334,95337,95339,95342,95345,95350,95353,95356,95359,95362,95365,95368,95371,95374,95377],[10,95332,95328],{"id":95333},"_19魔法命令memit",[14,95335,95336],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[14,95338,24740],{},[14,95340,95341],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[14,95343,95344],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[14,95346,95347],{},[1602,95348],{"alt":174,"src":95349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[14,95351,95352],{},"补充：",[14,95354,95355],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[14,95357,95358],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[14,95360,95361],{},"解决方法：",[14,95363,95364],{},"1.cmd",[14,95366,95367],{},"2.依次输入以下代码：",[14,95369,95370],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[14,95372,95373],{},"pip install --upgrade ipython",[14,95375,95376],{},"#升级 memory_profiler 和 setuptools",[14,95378,95379],{},"pip install --upgrade memory_profiler setuptools",{"title":174,"searchDepth":175,"depth":175,"links":95381},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95328,"description":23518},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95388,"title":95389,"body":95390,"description":23518,"extension":181,"meta":97036,"navigation":184,"path":97037,"seo":97038,"stem":97039,"__hash__":97040},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95391,"toc":97006},[95392,95395,95399,95403,95464,95467,95472,95476,95481,95486,95491,95496,95499,95504,95508,95512,95545,95548,95551,95554,95606,95609,95645,95648,95690,95694,95715,95717,95754,95756,95761,95763,95768,95772,95775,95803,95807,95811,95864,95868,95960,95964,95968,95971,95976,95980,96005,96010,96014,96017,96020,96023,96026,96029,96032,96035,96047,96051,96055,96058,96090,96093,96116,96119,96145,96148,96174,96177,96211,96214,96276,96280,96283,96287,96290,96316,96319,96322,96327,96330,96399,96401,96406,96467,96470,96481,96487,96492,96496,96499,96512,96516,96531,96533,96556,96558,96584,96587,96590,96593,96641,96643,96648,96652,96656,96683,96687,96714,96717,96722,96727,96817,96821,96879,96884,96887,96890,96932,96936,96992,96997,97000,97003],[10,95393,95389],{"id":95394},"_2创建数组",[34,95396,95398],{"id":95397},"_21-array函数创建数组","2.1 array()函数创建数组",[225,95400,95402],{"id":95401},"_221-函数语句","2.2.1 函数语句",[245,95404,95406],{"className":30519,"code":95405,"language":30521,"meta":174,"style":174},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[251,95407,95408],{"__ignoreMap":174},[254,95409,95410,95413,95416,95418,95420,95422,95424,95426,95429,95431,95434,95436,95439,95441,95443,95445,95448,95450,95453,95455,95458,95460,95462],{"class":256,"line":257},[254,95411,95412],{"class":264},"numpy.array(",[254,95414,95415],{"class":313},"object",[254,95417,12576],{"class":264},[254,95419,93641],{"class":5357},[254,95421,13705],{"class":260},[254,95423,39074],{"class":313},[254,95425,12576],{"class":264},[254,95427,95428],{"class":5357},"copy",[254,95430,13705],{"class":260},[254,95432,95433],{"class":313}," True",[254,95435,12576],{"class":264},[254,95437,95438],{"class":5357},"order",[254,95440,13705],{"class":260},[254,95442,39074],{"class":313},[254,95444,12576],{"class":264},[254,95446,95447],{"class":5357},"subok",[254,95449,13705],{"class":260},[254,95451,95452],{"class":313}," False",[254,95454,12576],{"class":264},[254,95456,95457],{"class":5357},"ndmin",[254,95459,13705],{"class":260},[254,95461,4233],{"class":313},[254,95463,271],{"class":264},[14,95465,95466],{},"参数：",[14,95468,95469],{},[1602,95470],{"alt":174,"src":95471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[225,95473,95475],{"id":95474},"_222-实例","2.2.2 实例",[14,95477,95478],{},[1602,95479],{"alt":174,"src":95480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[14,95482,95483],{},[1602,95484],{"alt":174,"src":95485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[14,95487,95488],{},[1602,95489],{"alt":174,"src":95490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[14,95492,95493],{},[1602,95494],{"alt":174,"src":95495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[14,95497,95498],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[14,95500,95501],{},[1602,95502],{"alt":174,"src":95503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[34,95505,95507],{"id":95506},"_22-随机数创建数组","2.2 随机数创建数组",[225,95509,95511],{"id":95510},"_221-random语句","2.2.1 random语句",[245,95513,95515],{"className":30519,"code":95514,"language":30521,"meta":174,"style":174},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[251,95516,95517,95522,95527,95535,95540],{"__ignoreMap":174},[254,95518,95519],{"class":256,"line":257},[254,95520,95521],{"class":323},"#random.random()\n",[254,95523,95524],{"class":256,"line":175},[254,95525,95526],{"class":323},"#确定随机种子,就是每次运行结果是相同的\n",[254,95528,95529,95531,95533],{"class":256,"line":1319},[254,95530,94748],{"class":264},[254,95532,456],{"class":313},[254,95534,271],{"class":264},[254,95536,95537],{"class":256,"line":1334},[254,95538,95539],{"class":264},"np.random.random()\n",[254,95541,95542],{"class":256,"line":1340},[254,95543,95544],{"class":323},"#生成一个随机的数目\n",[14,95546,95547],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[14,95549,95550],{},"可以指定数组形状 size",[14,95552,95553],{},"①生成一维数组",[245,95555,95557],{"className":30519,"code":95556,"language":30521,"meta":174,"style":174},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[251,95558,95559,95564,95577,95582,95598],{"__ignoreMap":174},[254,95560,95561],{"class":256,"line":257},[254,95562,95563],{"class":323},"#random.random(size())\n",[254,95565,95566,95569,95571,95573,95575],{"class":256,"line":175},[254,95567,95568],{"class":264},"np.random.random(",[254,95570,31637],{"class":5357},[254,95572,310],{"class":260},[254,95574,583],{"class":313},[254,95576,271],{"class":264},[254,95578,95579],{"class":256,"line":1319},[254,95580,95581],{"class":323},"#生成一位的五个元素\n",[254,95583,95584,95586,95588,95590,95592,95594,95596],{"class":256,"line":1334},[254,95585,42],{"class":264},[254,95587,310],{"class":260},[254,95589,95568],{"class":264},[254,95591,31637],{"class":5357},[254,95593,310],{"class":260},[254,95595,557],{"class":313},[254,95597,271],{"class":264},[254,95599,95600,95603],{"class":256,"line":1340},[254,95601,95602],{"class":264},"a.shape ",[254,95604,95605],{"class":323},"#输出数组形状\n",[14,95607,95608],{},"②生成二维数组",[245,95610,95612],{"className":30519,"code":95611,"language":30521,"meta":174,"style":174},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[251,95613,95614,95618,95640],{"__ignoreMap":174},[254,95615,95616],{"class":256,"line":257},[254,95617,93442],{"class":323},[254,95619,95620,95622,95624,95626,95628,95630,95632,95634,95636,95638],{"class":256,"line":175},[254,95621,93447],{"class":264},[254,95623,310],{"class":260},[254,95625,95568],{"class":264},[254,95627,31637],{"class":5357},[254,95629,310],{"class":260},[254,95631,265],{"class":264},[254,95633,557],{"class":313},[254,95635,642],{"class":264},[254,95637,583],{"class":313},[254,95639,30638],{"class":264},[254,95641,95642],{"class":256,"line":1319},[254,95643,95644],{"class":323},"#生成四行五列的数组\n",[14,95646,95647],{},"③生成三维数组",[245,95649,95651],{"className":30519,"code":95650,"language":30521,"meta":174,"style":174},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[251,95652,95653,95658,95685],{"__ignoreMap":174},[254,95654,95655],{"class":256,"line":257},[254,95656,95657],{"class":323},"#三维数组\n",[254,95659,95660,95663,95665,95667,95669,95671,95673,95675,95677,95679,95681,95683],{"class":256,"line":175},[254,95661,95662],{"class":264},"aaa",[254,95664,310],{"class":260},[254,95666,95568],{"class":264},[254,95668,31637],{"class":5357},[254,95670,310],{"class":260},[254,95672,265],{"class":264},[254,95674,342],{"class":313},[254,95676,642],{"class":264},[254,95678,336],{"class":313},[254,95680,642],{"class":264},[254,95682,557],{"class":313},[254,95684,30638],{"class":264},[254,95686,95687],{"class":256,"line":1319},[254,95688,95689],{"class":264},"aaa.shape\n",[225,95691,95693],{"id":95692},"_222-randint语句","2.2.2 randint语句",[245,95695,95697],{"className":30519,"code":95696,"language":30521,"meta":174,"style":174},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[251,95698,95699,95704],{"__ignoreMap":174},[254,95700,95701],{"class":256,"line":257},[254,95702,95703],{"class":323},"#生成随机的整数 random.randint(low,high,size)\n",[254,95705,95706,95708,95710,95712],{"class":256,"line":175},[254,95707,93255],{"class":264},[254,95709,583],{"class":313},[254,95711,13855],{"class":264},[254,95713,95714],{"class":323},"#0~5中的随机一个数\n",[14,95716,95553],{},[245,95718,95720],{"className":30519,"code":95719,"language":30521,"meta":174,"style":174},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[251,95721,95722,95727,95749],{"__ignoreMap":174},[254,95723,95724],{"class":256,"line":257},[254,95725,95726],{"class":323},"#一维\n",[254,95728,95729,95731,95733,95735,95737,95739,95741,95743,95745,95747],{"class":256,"line":175},[254,95730,93255],{"class":264},[254,95732,482],{"class":313},[254,95734,642],{"class":264},[254,95736,736],{"class":313},[254,95738,642],{"class":264},[254,95740,31637],{"class":5357},[254,95742,310],{"class":260},[254,95744,265],{"class":264},[254,95746,710],{"class":313},[254,95748,30638],{"class":264},[254,95750,95751],{"class":256,"line":1319},[254,95752,95753],{"class":323},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[14,95755,95608],{},[14,95757,95758],{},[1602,95759],{"alt":174,"src":95760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[14,95762,95647],{},[14,95764,95765],{},[1602,95766],{"alt":174,"src":95767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[225,95769,95771],{"id":95770},"_222-rand语句","2.2.2 rand语句",[14,95773,95774],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[245,95776,95778],{"className":30519,"code":95777,"language":30521,"meta":174,"style":174},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[251,95779,95780,95793,95798],{"__ignoreMap":174},[254,95781,95782,95785,95787,95789,95791],{"class":256,"line":257},[254,95783,95784],{"class":264},"np.random.rand(",[254,95786,575],{"class":313},[254,95788,642],{"class":264},[254,95790,710],{"class":313},[254,95792,271],{"class":264},[254,95794,95795],{"class":256,"line":175},[254,95796,95797],{"class":323},"#第一个参数100：行数，表示有100个样本\n",[254,95799,95800],{"class":256,"line":1319},[254,95801,95802],{"class":323},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[34,95804,95806],{"id":95805},"_23-arange创建数组","2.3 arange()创建数组",[225,95808,95810],{"id":95809},"_231-函数语句","2.3.1 函数语句",[245,95812,95814],{"className":30519,"code":95813,"language":30521,"meta":174,"style":174},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[251,95815,95816,95830,95835,95840,95845,95850,95855,95860],{"__ignoreMap":174},[254,95817,95818,95821,95823,95825,95828],{"class":256,"line":257},[254,95819,95820],{"class":264},"numpy.arange([start,] stop[, step], ",[254,95822,93641],{"class":5357},[254,95824,310],{"class":260},[254,95826,95827],{"class":313},"None",[254,95829,271],{"class":264},[254,95831,95832],{"class":256,"line":175},[254,95833,95834],{"class":323},"#参数\n",[254,95836,95837],{"class":256,"line":1319},[254,95838,95839],{"class":369},"\"\"\"\n",[254,95841,95842],{"class":256,"line":1334},[254,95843,95844],{"class":369},"start:起始值，可选，默认从 0 开始。\n",[254,95846,95847],{"class":256,"line":1340},[254,95848,95849],{"class":369},"stop:结束值（不包含该值）。\n",[254,95851,95852],{"class":256,"line":1354},[254,95853,95854],{"class":369},"step:步长，可选，默认是 1。可以为浮点数。\n",[254,95856,95857],{"class":256,"line":1360},[254,95858,95859],{"class":369},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[254,95861,95862],{"class":256,"line":1451},[254,95863,95839],{"class":369},[225,95865,95867],{"id":95866},"_232-实例","2.3.2 实例",[245,95869,95871],{"className":30519,"code":95870,"language":30521,"meta":174,"style":174},"#创建一维数组\nnp.arange(1,21,1,dtype=int)\n#输出结果：\n#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n#创建二维数组\nnp.array([np.arange(1,4),np.arange(4,7)])\n#结果：\n\"\"\"\narray([[1, 2, 3],\n       [4, 5, 6]])\n\"\"\"\n",[251,95872,95873,95877,95901,95906,95911,95915,95938,95942,95946,95951,95956],{"__ignoreMap":174},[254,95874,95875],{"class":256,"line":257},[254,95876,93246],{"class":323},[254,95878,95879,95881,95883,95885,95887,95889,95891,95893,95895,95897,95899],{"class":256,"line":175},[254,95880,93143],{"class":264},[254,95882,482],{"class":313},[254,95884,642],{"class":264},[254,95886,989],{"class":313},[254,95888,642],{"class":264},[254,95890,482],{"class":313},[254,95892,642],{"class":264},[254,95894,93641],{"class":5357},[254,95896,310],{"class":260},[254,95898,268],{"class":313},[254,95900,271],{"class":264},[254,95902,95903],{"class":256,"line":1319},[254,95904,95905],{"class":323},"#输出结果：\n",[254,95907,95908],{"class":256,"line":1334},[254,95909,95910],{"class":323},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[254,95912,95913],{"class":256,"line":1340},[254,95914,94088],{"class":323},[254,95916,95917,95920,95922,95924,95926,95929,95931,95933,95935],{"class":256,"line":1354},[254,95918,95919],{"class":264},"np.array([np.arange(",[254,95921,482],{"class":313},[254,95923,642],{"class":264},[254,95925,557],{"class":313},[254,95927,95928],{"class":264},"),np.arange(",[254,95930,557],{"class":313},[254,95932,642],{"class":264},[254,95934,633],{"class":313},[254,95936,95937],{"class":264},")])\n",[254,95939,95940],{"class":256,"line":1360},[254,95941,93705],{"class":323},[254,95943,95944],{"class":256,"line":1451},[254,95945,95839],{"class":369},[254,95947,95948],{"class":256,"line":1457},[254,95949,95950],{"class":369},"array([[1, 2, 3],\n",[254,95952,95953],{"class":256,"line":1469},[254,95954,95955],{"class":369},"       [4, 5, 6]])\n",[254,95957,95958],{"class":256,"line":1752},[254,95959,95839],{"class":369},[34,95961,95963],{"id":95962},"_24-生态分布","2.4 生态分布",[225,95965,95967],{"id":95966},"_241-标准正态分布","2.4.1 标准正态分布",[14,95969,95970],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[14,95972,95973],{},[1602,95974],{"alt":174,"src":95975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[225,95977,95979],{"id":95978},"_242-常规正态分布","2.4.2 常规正态分布",[245,95981,95983],{"className":30519,"code":95982,"language":30521,"meta":174,"style":174},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[251,95984,95985,95990,95995,96000],{"__ignoreMap":174},[254,95986,95987],{"class":256,"line":257},[254,95988,95989],{"class":264},"random.normal(loc,scale,size)也可以生成正态分布\n",[254,95991,95992],{"class":256,"line":175},[254,95993,95994],{"class":323},"#loc:期望\n",[254,95996,95997],{"class":256,"line":1319},[254,95998,95999],{"class":323},"#scale:方差\n",[254,96001,96002],{"class":256,"line":1334},[254,96003,96004],{"class":323},"#size:用于确定是几维的数列\n",[14,96006,96007],{},[1602,96008],{"alt":174,"src":96009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[34,96011,96013],{"id":96012},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[14,96015,96016],{},"ndim:秩，维度个数",[14,96018,96019],{},"size:数组元素的个数",[14,96021,96022],{},"shape:数组的形状",[14,96024,96025],{},"dtype:数组元素的类型",[14,96027,96028],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[14,96030,96031],{},"他们都是属性，通过数组.属性的形式来确定",[14,96033,96034],{},"如果需要输出多个可以通过以下方式：",[245,96036,96038],{"className":30519,"code":96037,"language":30521,"meta":174,"style":174},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[251,96039,96040],{"__ignoreMap":174},[254,96041,96042,96044],{"class":256,"line":257},[254,96043,30556],{"class":313},[254,96045,96046],{"class":264},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[34,96048,96050],{"id":96049},"_26-其他方式创建数组","2.6 其他方式创建数组",[225,96052,96054],{"id":96053},"_261-zeros创建数组","2.6.1 zeros()创建数组",[14,96056,96057],{},"①创建一维数组",[245,96059,96061],{"className":30519,"code":96060,"language":30521,"meta":174,"style":174},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[251,96062,96063,96072,96076,96081,96086],{"__ignoreMap":174},[254,96064,96065,96068,96070],{"class":256,"line":257},[254,96066,96067],{"class":264},"np.zeros(",[254,96069,710],{"class":313},[254,96071,271],{"class":264},[254,96073,96074],{"class":256,"line":175},[254,96075,95839],{"class":369},[254,96077,96078],{"class":256,"line":1319},[254,96079,96080],{"class":369},"输出结果：\n",[254,96082,96083],{"class":256,"line":1334},[254,96084,96085],{"class":369},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[254,96087,96088],{"class":256,"line":1340},[254,96089,95839],{"class":369},[14,96091,96092],{},"上方代码等价于：",[245,96094,96096],{"className":30519,"code":96095,"language":30521,"meta":174,"style":174},"np.zeros(shape=(10))#创建10个元素的0数组\n",[251,96097,96098],{"__ignoreMap":174},[254,96099,96100,96102,96105,96107,96109,96111,96113],{"class":256,"line":257},[254,96101,96067],{"class":264},[254,96103,96104],{"class":5357},"shape",[254,96106,310],{"class":260},[254,96108,265],{"class":264},[254,96110,710],{"class":313},[254,96112,82912],{"class":264},[254,96114,96115],{"class":323},"#创建10个元素的0数组\n",[14,96117,96118],{},"也可以指定类型",[245,96120,96122],{"className":30519,"code":96121,"language":30521,"meta":174,"style":174},"#指定类型\nnp.zeros(5,dtype=int)\n",[251,96123,96124,96129],{"__ignoreMap":174},[254,96125,96126],{"class":256,"line":257},[254,96127,96128],{"class":323},"#指定类型\n",[254,96130,96131,96133,96135,96137,96139,96141,96143],{"class":256,"line":175},[254,96132,96067],{"class":264},[254,96134,583],{"class":313},[254,96136,642],{"class":264},[254,96138,93641],{"class":5357},[254,96140,310],{"class":260},[254,96142,268],{"class":313},[254,96144,271],{"class":264},[14,96146,96147],{},"②创建二维数组",[245,96149,96151],{"className":30519,"code":96150,"language":30521,"meta":174,"style":174},"np.zeros((3,4),dtype=int)\n",[251,96152,96153],{"__ignoreMap":174},[254,96154,96155,96158,96160,96162,96164,96166,96168,96170,96172],{"class":256,"line":257},[254,96156,96157],{"class":264},"np.zeros((",[254,96159,336],{"class":313},[254,96161,642],{"class":264},[254,96163,557],{"class":313},[254,96165,42397],{"class":264},[254,96167,93641],{"class":5357},[254,96169,310],{"class":260},[254,96171,268],{"class":313},[254,96173,271],{"class":264},[14,96175,96176],{},"③创建三维数组",[245,96178,96180],{"className":30519,"code":96179,"language":30521,"meta":174,"style":174},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[251,96181,96182,96187],{"__ignoreMap":174},[254,96183,96184],{"class":256,"line":257},[254,96185,96186],{"class":323},"#创建三维数组\n",[254,96188,96189,96191,96193,96195,96197,96199,96201,96203,96205,96207,96209],{"class":256,"line":175},[254,96190,96157],{"class":264},[254,96192,336],{"class":313},[254,96194,642],{"class":264},[254,96196,557],{"class":313},[254,96198,642],{"class":264},[254,96200,583],{"class":313},[254,96202,42397],{"class":264},[254,96204,93641],{"class":5357},[254,96206,310],{"class":260},[254,96208,268],{"class":313},[254,96210,271],{"class":264},[14,96212,96213],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[245,96215,96217],{"className":30519,"code":96216,"language":30521,"meta":174,"style":174},"#使用zeros_like将创建的一维数组变成全0的数组\na=np.arange(4)#这个得到的结果：一维数组0，1，2，3\nnp.zeros_like(a)\n#使用zeros_like将创建的二维数组变成全0的数组\naa=np.random.random(size=(4,5))\nnp.zeros_like(aa)\n",[251,96218,96219,96224,96239,96244,96249,96271],{"__ignoreMap":174},[254,96220,96221],{"class":256,"line":257},[254,96222,96223],{"class":323},"#使用zeros_like将创建的一维数组变成全0的数组\n",[254,96225,96226,96228,96230,96232,96234,96236],{"class":256,"line":175},[254,96227,42],{"class":264},[254,96229,310],{"class":260},[254,96231,93143],{"class":264},[254,96233,557],{"class":313},[254,96235,693],{"class":264},[254,96237,96238],{"class":323},"#这个得到的结果：一维数组0，1，2，3\n",[254,96240,96241],{"class":256,"line":1319},[254,96242,96243],{"class":264},"np.zeros_like(a)\n",[254,96245,96246],{"class":256,"line":1334},[254,96247,96248],{"class":323},"#使用zeros_like将创建的二维数组变成全0的数组\n",[254,96250,96251,96253,96255,96257,96259,96261,96263,96265,96267,96269],{"class":256,"line":1340},[254,96252,93447],{"class":264},[254,96254,310],{"class":260},[254,96256,95568],{"class":264},[254,96258,31637],{"class":5357},[254,96260,310],{"class":260},[254,96262,265],{"class":264},[254,96264,557],{"class":313},[254,96266,642],{"class":264},[254,96268,583],{"class":313},[254,96270,30638],{"class":264},[254,96272,96273],{"class":256,"line":1354},[254,96274,96275],{"class":264},"np.zeros_like(aa)\n",[225,96277,96279],{"id":96278},"_262-ones创建数组","2.6.2 ones()创建数组",[14,96281,96282],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[225,96284,96286],{"id":96285},"_263-empty创建数组","2.6.3 empty()创建数组",[14,96288,96289],{},"①empty()用法",[245,96291,96293],{"className":30519,"code":96292,"language":30521,"meta":174,"style":174},"numpy.empty(shape,dtype=float,order='c')\n",[251,96294,96295],{"__ignoreMap":174},[254,96296,96297,96300,96302,96304,96306,96308,96310,96312,96314],{"class":256,"line":257},[254,96298,96299],{"class":264},"numpy.empty(shape,",[254,96301,93641],{"class":5357},[254,96303,310],{"class":260},[254,96305,304],{"class":313},[254,96307,642],{"class":264},[254,96309,95438],{"class":5357},[254,96311,310],{"class":260},[254,96313,76169],{"class":369},[254,96315,271],{"class":264},[14,96317,96318],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[14,96320,96321],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[14,96323,96324],{},[1602,96325],{"alt":174,"src":96326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[14,96328,96329],{},"②empty()用法",[245,96331,96333],{"className":30519,"code":96332,"language":30521,"meta":174,"style":174},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[251,96334,96335,96356,96368,96389,96394],{"__ignoreMap":174},[254,96336,96337,96339,96341,96344,96346,96348,96350,96352,96354],{"class":256,"line":257},[254,96338,1109],{"class":264},[254,96340,310],{"class":260},[254,96342,96343],{"class":264},"np.empty(",[254,96345,710],{"class":313},[254,96347,642],{"class":264},[254,96349,93641],{"class":5357},[254,96351,310],{"class":260},[254,96353,268],{"class":313},[254,96355,271],{"class":264},[254,96357,96358,96360,96362,96364,96366],{"class":256,"line":175},[254,96359,1084],{"class":264},[254,96361,310],{"class":260},[254,96363,93143],{"class":264},[254,96365,583],{"class":313},[254,96367,271],{"class":264},[254,96369,96370,96373,96375,96378,96380,96382,96385,96387],{"class":256,"line":1319},[254,96371,96372],{"class":264},"np.add(",[254,96374,342],{"class":313},[254,96376,96377],{"class":264},",x,",[254,96379,93195],{"class":5357},[254,96381,310],{"class":260},[254,96383,96384],{"class":264},"y[:",[254,96386,583],{"class":313},[254,96388,4797],{"class":264},[254,96390,96391],{"class":256,"line":1334},[254,96392,96393],{"class":323},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[254,96395,96396],{"class":256,"line":1340},[254,96397,96398],{"class":264},"y\n",[14,96400,11655],{},[14,96402,96403],{},[1602,96404],{"alt":174,"src":96405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[245,96407,96409],{"className":30519,"code":96408,"language":30521,"meta":174,"style":174},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[251,96410,96411,96427,96447,96462],{"__ignoreMap":174},[254,96412,96413,96415,96417,96419,96421,96423,96425],{"class":256,"line":257},[254,96414,1084],{"class":264},[254,96416,310],{"class":260},[254,96418,93143],{"class":264},[254,96420,482],{"class":313},[254,96422,642],{"class":264},[254,96424,608],{"class":313},[254,96426,271],{"class":264},[254,96428,96429,96431,96433,96435,96437,96439,96441,96443,96445],{"class":256,"line":175},[254,96430,1109],{"class":264},[254,96432,310],{"class":260},[254,96434,96343],{"class":264},[254,96436,583],{"class":313},[254,96438,642],{"class":264},[254,96440,93641],{"class":5357},[254,96442,310],{"class":260},[254,96444,268],{"class":313},[254,96446,271],{"class":264},[254,96448,96449,96452,96454,96456,96458,96460],{"class":256,"line":1319},[254,96450,96451],{"class":264},"np.add(x,",[254,96453,342],{"class":313},[254,96455,642],{"class":264},[254,96457,93195],{"class":5357},[254,96459,310],{"class":260},[254,96461,93590],{"class":264},[254,96463,96464],{"class":256,"line":1334},[254,96465,96466],{"class":323},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[14,96468,96469],{},"③empty_like()",[14,96471,96472],{},[414,96473,96474,96475,96480],{},"创建一个",[414,96476,96477],{},[414,96478,96479],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[14,96482,96483,96486],{},[251,96484,96485],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[14,96488,96489],{},[1602,96490],{"alt":174,"src":96491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[225,96493,96495],{"id":96494},"_264-用法","2.6.4 ？？用法",[14,96497,96498],{},"当想查看一个函数的参数时，可以通过？？来实现",[245,96500,96502],{"className":30519,"code":96501,"language":30521,"meta":174,"style":174},"np.full??\n",[251,96503,96504],{"__ignoreMap":174},[254,96505,96506,96509],{"class":256,"line":257},[254,96507,96508],{"class":264},"np.full",[254,96510,96511],{"class":77544},"??\n",[225,96513,96515],{"id":96514},"_265-full创建数组","2.6.5 full()创建数组",[245,96517,96519],{"className":30519,"code":96518,"language":30521,"meta":174,"style":174},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[251,96520,96521,96526],{"__ignoreMap":174},[254,96522,96523],{"class":256,"line":257},[254,96524,96525],{"class":264},"full(shape,fill_value)\n",[254,96527,96528],{"class":256,"line":175},[254,96529,96530],{"class":264},"创建全为某个指定值的数组\n",[14,96532,94671],{},[245,96534,96536],{"className":30519,"code":96535,"language":30521,"meta":174,"style":174},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[251,96537,96538,96543],{"__ignoreMap":174},[254,96539,96540],{"class":256,"line":257},[254,96541,96542],{"class":323},"#创建一个一维数组,以20进行填充\n",[254,96544,96545,96548,96550,96552,96554],{"class":256,"line":175},[254,96546,96547],{"class":264},"np.full(",[254,96549,710],{"class":313},[254,96551,642],{"class":264},[254,96553,964],{"class":313},[254,96555,271],{"class":264},[14,96557,93432],{},[245,96559,96561],{"className":30519,"code":96560,"language":30521,"meta":174,"style":174},"#创建二维数组\nnp.full((3,5),11)\n",[251,96562,96563,96567],{"__ignoreMap":174},[254,96564,96565],{"class":256,"line":257},[254,96566,94088],{"class":323},[254,96568,96569,96572,96574,96576,96578,96580,96582],{"class":256,"line":175},[254,96570,96571],{"class":264},"np.full((",[254,96573,336],{"class":313},[254,96575,642],{"class":264},[254,96577,583],{"class":313},[254,96579,42397],{"class":264},[254,96581,736],{"class":313},[254,96583,271],{"class":264},[14,96585,96586],{},"③full_like用法",[14,96588,96589],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[14,96591,96592],{},"这里是指定填充而已",[245,96594,96596],{"className":30519,"code":96595,"language":30521,"meta":174,"style":174},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[251,96597,96598,96603,96627,96632],{"__ignoreMap":174},[254,96599,96600],{"class":256,"line":257},[254,96601,96602],{"class":323},"#创建一个指定形状数组\n",[254,96604,96605,96607,96609,96611,96613,96615,96617,96619,96621,96623,96625],{"class":256,"line":175},[254,96606,42],{"class":264},[254,96608,310],{"class":260},[254,96610,93143],{"class":264},[254,96612,482],{"class":313},[254,96614,642],{"class":264},[254,96616,589],{"class":313},[254,96618,93148],{"class":264},[254,96620,557],{"class":313},[254,96622,642],{"class":264},[254,96624,684],{"class":313},[254,96626,271],{"class":264},[254,96628,96629],{"class":256,"line":1319},[254,96630,96631],{"class":323},"#进行指定填充\n",[254,96633,96634,96637,96639],{"class":256,"line":1334},[254,96635,96636],{"class":264},"np.full_like(a,",[254,96638,710],{"class":313},[254,96640,271],{"class":264},[14,96642,11655],{},[14,96644,96645],{},[1602,96646],{"alt":174,"src":96647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[225,96649,96651],{"id":96650},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[22139,96653,96655],{"id":96654},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[245,96657,96659],{"className":30519,"code":96658,"language":30521,"meta":174,"style":174},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[251,96660,96661,96678],{"__ignoreMap":174},[254,96662,96663,96666,96668,96670,96672,96674,96676],{"class":256,"line":257},[254,96664,96665],{"class":264},"np.eye(",[254,96667,557],{"class":313},[254,96669,642],{"class":264},[254,96671,93641],{"class":5357},[254,96673,310],{"class":260},[254,96675,268],{"class":313},[254,96677,271],{"class":264},[254,96679,96680],{"class":256,"line":175},[254,96681,96682],{"class":323},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[22139,96684,96686],{"id":96685},"_2662-法2identity","2.6.6.2 法2：identity()",[245,96688,96690],{"className":30519,"code":96689,"language":30521,"meta":174,"style":174},"#identity()\nnp.identity(5,dtype=int)\n",[251,96691,96692,96697],{"__ignoreMap":174},[254,96693,96694],{"class":256,"line":257},[254,96695,96696],{"class":323},"#identity()\n",[254,96698,96699,96702,96704,96706,96708,96710,96712],{"class":256,"line":175},[254,96700,96701],{"class":264},"np.identity(",[254,96703,583],{"class":313},[254,96705,642],{"class":264},[254,96707,93641],{"class":5357},[254,96709,310],{"class":260},[254,96711,268],{"class":313},[254,96713,271],{"class":264},[14,96715,96716],{},"两个函数是有区别的",[14,96718,96719],{},[1602,96720],{"alt":174,"src":96721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[14,96723,96724],{},[1602,96725],{"alt":174,"src":96726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[245,96728,96730],{"className":30519,"code":96729,"language":30521,"meta":174,"style":174},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\nnp.eye(3, 4)\n# 输出:\n# [[1. 0. 0. 0.]\n#  [0. 1. 0. 0.]\n#  [0. 0. 1. 0.]]\n\n# 对角线向上偏移1\nnp.eye(3, 4, k=1)\n# 输出:\n# [[0. 1. 0. 0.]\n#  [0. 0. 1. 0.]\n#  [0. 0. 0. 1.]]\n\n",[251,96731,96732,96737,96749,96754,96759,96764,96769,96773,96778,96798,96802,96807,96812],{"__ignoreMap":174},[254,96733,96734],{"class":256,"line":257},[254,96735,96736],{"class":323},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[254,96738,96739,96741,96743,96745,96747],{"class":256,"line":175},[254,96740,96665],{"class":264},[254,96742,336],{"class":313},[254,96744,12576],{"class":264},[254,96746,557],{"class":313},[254,96748,271],{"class":264},[254,96750,96751],{"class":256,"line":1319},[254,96752,96753],{"class":323},"# 输出:\n",[254,96755,96756],{"class":256,"line":1334},[254,96757,96758],{"class":323},"# [[1. 0. 0. 0.]\n",[254,96760,96761],{"class":256,"line":1340},[254,96762,96763],{"class":323},"#  [0. 1. 0. 0.]\n",[254,96765,96766],{"class":256,"line":1354},[254,96767,96768],{"class":323},"#  [0. 0. 1. 0.]]\n",[254,96770,96771],{"class":256,"line":1360},[254,96772,2540],{"emptyLinePlaceholder":184},[254,96774,96775],{"class":256,"line":1451},[254,96776,96777],{"class":323},"# 对角线向上偏移1\n",[254,96779,96780,96782,96784,96786,96788,96790,96792,96794,96796],{"class":256,"line":1457},[254,96781,96665],{"class":264},[254,96783,336],{"class":313},[254,96785,12576],{"class":264},[254,96787,557],{"class":313},[254,96789,12576],{"class":264},[254,96791,757],{"class":5357},[254,96793,310],{"class":260},[254,96795,482],{"class":313},[254,96797,271],{"class":264},[254,96799,96800],{"class":256,"line":1469},[254,96801,96753],{"class":323},[254,96803,96804],{"class":256,"line":1752},[254,96805,96806],{"class":323},"# [[0. 1. 0. 0.]\n",[254,96808,96809],{"class":256,"line":1757},[254,96810,96811],{"class":323},"#  [0. 0. 1. 0.]\n",[254,96813,96814],{"class":256,"line":1763},[254,96815,96816],{"class":323},"#  [0. 0. 0. 1.]]\n",[225,96818,96820],{"id":96819},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[245,96822,96824],{"className":30519,"code":96823,"language":30521,"meta":174,"style":174},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n\"\"\"\nnp.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n参数介绍：\nstart：序列的起始值\nstop:序列的终止值，如果endpoint为True，该值包含数列中\nnum：要生长的等步长的样本数量，默认为50\nendpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\nretstep：如果为True时，生长的数组中会显示间距，反之不显示\ndtype：ndarry的数据类型\n\"\"\"\n",[251,96825,96826,96831,96835,96840,96845,96850,96855,96860,96865,96870,96875],{"__ignoreMap":174},[254,96827,96828],{"class":256,"line":257},[254,96829,96830],{"class":323},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[254,96832,96833],{"class":256,"line":175},[254,96834,95839],{"class":369},[254,96836,96837],{"class":256,"line":1319},[254,96838,96839],{"class":369},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[254,96841,96842],{"class":256,"line":1334},[254,96843,96844],{"class":369},"参数介绍：\n",[254,96846,96847],{"class":256,"line":1340},[254,96848,96849],{"class":369},"start：序列的起始值\n",[254,96851,96852],{"class":256,"line":1354},[254,96853,96854],{"class":369},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[254,96856,96857],{"class":256,"line":1360},[254,96858,96859],{"class":369},"num：要生长的等步长的样本数量，默认为50\n",[254,96861,96862],{"class":256,"line":1451},[254,96863,96864],{"class":369},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[254,96866,96867],{"class":256,"line":1457},[254,96868,96869],{"class":369},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[254,96871,96872],{"class":256,"line":1469},[254,96873,96874],{"class":369},"dtype：ndarry的数据类型\n",[254,96876,96877],{"class":256,"line":1752},[254,96878,95839],{"class":369},[14,96880,96881],{},[1602,96882],{"alt":174,"src":96883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[14,96885,96886],{},"这里num=是可以省略的",[14,96888,96889],{},"也就是下方两行代码结果是一模一样的",[245,96891,96893],{"className":30519,"code":96892,"language":30521,"meta":174,"style":174},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[251,96894,96895,96912],{"__ignoreMap":174},[254,96896,96897,96900,96902,96904,96906,96908,96910],{"class":256,"line":257},[254,96898,96899],{"class":264},"np.linspace(",[254,96901,482],{"class":313},[254,96903,642],{"class":264},[254,96905,583],{"class":313},[254,96907,642],{"class":264},[254,96909,583],{"class":313},[254,96911,271],{"class":264},[254,96913,96914,96916,96918,96920,96922,96924,96926,96928,96930],{"class":256,"line":175},[254,96915,96899],{"class":264},[254,96917,482],{"class":313},[254,96919,642],{"class":264},[254,96921,583],{"class":313},[254,96923,642],{"class":264},[254,96925,1805],{"class":5357},[254,96927,310],{"class":260},[254,96929,583],{"class":313},[254,96931,271],{"class":264},[225,96933,96935],{"id":96934},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[245,96937,96939],{"className":30519,"code":96938,"language":30521,"meta":174,"style":174},"#logspace函数用于创建一个等比数列，格式如下：\n\"\"\"\nnp.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n参数为：\nstart:序列的起始位置为：base**start\nstop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\nnum：要生长的等步长的样本数量，默认为50\nendpoint：是否包含 stop 这个值，默认是 True\nbase：对数的底数，默认是 10（常见对数）\ndtype：ndarry的数据类型\n\"\"\"\n",[251,96940,96941,96946,96950,96955,96960,96965,96970,96974,96979,96984,96988],{"__ignoreMap":174},[254,96942,96943],{"class":256,"line":257},[254,96944,96945],{"class":323},"#logspace函数用于创建一个等比数列，格式如下：\n",[254,96947,96948],{"class":256,"line":175},[254,96949,95839],{"class":369},[254,96951,96952],{"class":256,"line":1319},[254,96953,96954],{"class":369},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[254,96956,96957],{"class":256,"line":1334},[254,96958,96959],{"class":369},"参数为：\n",[254,96961,96962],{"class":256,"line":1340},[254,96963,96964],{"class":369},"start:序列的起始位置为：base**start\n",[254,96966,96967],{"class":256,"line":1354},[254,96968,96969],{"class":369},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[254,96971,96972],{"class":256,"line":1360},[254,96973,96859],{"class":369},[254,96975,96976],{"class":256,"line":1451},[254,96977,96978],{"class":369},"endpoint：是否包含 stop 这个值，默认是 True\n",[254,96980,96981],{"class":256,"line":1457},[254,96982,96983],{"class":369},"base：对数的底数，默认是 10（常见对数）\n",[254,96985,96986],{"class":256,"line":1469},[254,96987,96874],{"class":369},[254,96989,96990],{"class":256,"line":1752},[254,96991,95839],{"class":369},[14,96993,96994],{},[1602,96995],{"alt":174,"src":96996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[14,96998,96999],{},"logspace()函数中的num参数也是可以不写num=的",[14,97001,97002],{},"endpoint是不可以省略的",[5267,97004,97005],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s7hpK, html code.shiki .s7hpK{--shiki-default:#B31D28;--shiki-default-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic}",{"title":174,"searchDepth":175,"depth":175,"links":97007},[97008,97012,97017,97021,97025,97026],{"id":95397,"depth":175,"text":95398,"children":97009},[97010,97011],{"id":95401,"depth":1319,"text":95402},{"id":95474,"depth":1319,"text":95475},{"id":95506,"depth":175,"text":95507,"children":97013},[97014,97015,97016],{"id":95510,"depth":1319,"text":95511},{"id":95692,"depth":1319,"text":95693},{"id":95770,"depth":1319,"text":95771},{"id":95805,"depth":175,"text":95806,"children":97018},[97019,97020],{"id":95809,"depth":1319,"text":95810},{"id":95866,"depth":1319,"text":95867},{"id":95962,"depth":175,"text":95963,"children":97022},[97023,97024],{"id":95966,"depth":1319,"text":95967},{"id":95978,"depth":1319,"text":95979},{"id":96012,"depth":175,"text":96013},{"id":96049,"depth":175,"text":96050,"children":97027},[97028,97029,97030,97031,97032,97033,97034,97035],{"id":96053,"depth":1319,"text":96054},{"id":96278,"depth":1319,"text":96279},{"id":96285,"depth":1319,"text":96286},{"id":96494,"depth":1319,"text":96495},{"id":96514,"depth":1319,"text":96515},{"id":96650,"depth":1319,"text":96651},{"id":96819,"depth":1319,"text":96820},{"id":96934,"depth":1319,"text":96935},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95389,"description":23518},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":97042,"title":97043,"body":97044,"description":23518,"extension":181,"meta":97137,"navigation":184,"path":97138,"seo":97139,"stem":97140,"__hash__":97141},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":97045,"toc":97135},[97046,97049,97052,97055,97058,97061,97064,97067,97070,97073,97076,97079,97081,97084,97087,97092,97095,97098,97132],[10,97047,97043],{"id":97048},"_20魔法命令mprun",[14,97050,97051],{},"逐行分析数据内存的使用情况",[14,97053,97054],{},"语法格式：",[14,97056,97057],{},"%mprun -f 模块名.函数名 模块名.函数名()",[14,97059,97060],{},"分析结果列如下：",[14,97062,97063],{},"Line行号",[14,97065,97066],{},"Mem usage内存使用大小",[14,97068,97069],{},"increment内存增量",[14,97071,97072],{},"Line content代码内容",[14,97074,97075],{},"补充说明：",[14,97077,97078],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[14,97080,95344],{},[14,97082,97083],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[14,97085,97086],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[14,97088,97089],{},[1602,97090],{"alt":174,"src":97091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[14,97093,97094],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[14,97096,97097],{},"这时候需要重新加载模块",[245,97099,97101],{"className":30519,"code":97100,"language":30521,"meta":174,"style":174},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[251,97102,97103,97108,97115,97120],{"__ignoreMap":174},[254,97104,97105],{"class":256,"line":257},[254,97106,97107],{"class":323},"#重新加载模块\n",[254,97109,97110,97112],{"class":256,"line":175},[254,97111,30533],{"class":260},[254,97113,97114],{"class":264}," importlib\n",[254,97116,97117],{"class":256,"line":1319},[254,97118,97119],{"class":264},"importlib.reload(mprun_test)\n",[254,97121,97122,97124,97127,97129],{"class":256,"line":1334},[254,97123,592],{"class":260},[254,97125,97126],{"class":264},"mprun ",[254,97128,796],{"class":260},[254,97130,97131],{"class":264},"f mprun_test.fun_test mprun_test.fun_test()\n",[5267,97133,97134],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":174,"searchDepth":175,"depth":175,"links":97136},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":97043,"description":23518},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":97143,"title":97144,"body":97145,"description":23518,"extension":181,"meta":97162,"navigation":184,"path":97163,"seo":97164,"stem":97165,"__hash__":97166},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":97146,"toc":97160},[97147,97150,97155],[10,97148,97144],{"id":97149},"_3一维数组的索引和切片",[14,97151,97152],{},[1602,97153],{"alt":174,"src":97154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[14,97156,97157],{},[1602,97158],{"alt":174,"src":97159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":174,"searchDepth":175,"depth":175,"links":97161},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":97144,"description":23518},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97168,"title":97169,"body":97170,"description":23518,"extension":181,"meta":97653,"navigation":184,"path":97654,"seo":97655,"stem":97656,"__hash__":97657},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97171,"toc":97651},[97172,97175,97178,97183,97216,97219,97257,97260,97294,97297,97402,97405,97442,97445,97546,97549,97600,97603,97645,97648],[10,97173,97169],{"id":97174},"_4二维数组的索引与切片",[14,97176,97177],{},"①获取指定单个元素",[14,97179,97180],{},[1602,97181],{"alt":174,"src":97182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[245,97184,97186],{"className":30519,"code":97185,"language":30521,"meta":174,"style":174},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[251,97187,97188,97193,97198,97203],{"__ignoreMap":174},[254,97189,97190],{"class":256,"line":257},[254,97191,97192],{"class":323},"#获取元素9\n",[254,97194,97195],{"class":256,"line":175},[254,97196,97197],{"class":323},"#先获取所在行，再获取所在列\n",[254,97199,97200],{"class":256,"line":1319},[254,97201,97202],{"class":323},"#数组[行索引号，列索引号]\n",[254,97204,97205,97208,97210,97212,97214],{"class":256,"line":1334},[254,97206,97207],{"class":264},"a[",[254,97209,482],{"class":313},[254,97211,642],{"class":264},[254,97213,342],{"class":313},[254,97215,33387],{"class":264},[14,97217,97218],{},"②获取整行元素",[245,97220,97222],{"className":30519,"code":97221,"language":30521,"meta":174,"style":174},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[251,97223,97224,97229,97234,97242,97247],{"__ignoreMap":174},[254,97225,97226],{"class":256,"line":257},[254,97227,97228],{"class":323},"#获取整行 数组[行索引号]\n",[254,97230,97231],{"class":256,"line":175},[254,97232,97233],{"class":323},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[254,97235,97236,97238,97240],{"class":256,"line":1319},[254,97237,97207],{"class":264},[254,97239,342],{"class":313},[254,97241,33387],{"class":264},[254,97243,97244],{"class":256,"line":1334},[254,97245,97246],{"class":323},"#也可以负索引获取一行\n",[254,97248,97249,97251,97253,97255],{"class":256,"line":1340},[254,97250,97207],{"class":264},[254,97252,796],{"class":260},[254,97254,482],{"class":313},[254,97256,33387],{"class":264},[14,97258,97259],{},"③获取整列元素",[245,97261,97263],{"className":30519,"code":97262,"language":30521,"meta":174,"style":174},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[251,97264,97265,97270,97279,97284],{"__ignoreMap":174},[254,97266,97267],{"class":256,"line":257},[254,97268,97269],{"class":323},"#获取整列 数组名[:,列索引]\n",[254,97271,97272,97275,97277],{"class":256,"line":175},[254,97273,97274],{"class":264},"a[:,",[254,97276,342],{"class":313},[254,97278,33387],{"class":264},[254,97280,97281],{"class":256,"line":1319},[254,97282,97283],{"class":323},"#也可以负索引获取一列\n",[254,97285,97286,97288,97290,97292],{"class":256,"line":1334},[254,97287,97274],{"class":264},[254,97289,796],{"class":260},[254,97291,482],{"class":313},[254,97293,33387],{"class":264},[14,97295,97296],{},"④部分行部分列的元素",[245,97298,97300],{"className":30519,"code":97299,"language":30521,"meta":174,"style":174},"#部分行部分列 数组名[行切片，列切片]\na[:2,:]\n#结果：\n'''\narray([[ 1,  2,  3,  4,  5,  6],\n       [ 7,  8,  9, 10, 11, 12]])\n'''\na[:,1:4]\n#结果：\n'''\narray([[ 2,  3,  4],\n       [ 8,  9, 10],\n       [14, 15, 16],\n       [20, 21, 22]])\n'''\n#对列行同时进行切片，使用了step参数\na[::2,::2]\n",[251,97301,97302,97307,97317,97321,97325,97330,97335,97339,97351,97355,97359,97364,97369,97374,97379,97383,97388],{"__ignoreMap":174},[254,97303,97304],{"class":256,"line":257},[254,97305,97306],{"class":323},"#部分行部分列 数组名[行切片，列切片]\n",[254,97308,97309,97312,97314],{"class":256,"line":175},[254,97310,97311],{"class":264},"a[:",[254,97313,342],{"class":313},[254,97315,97316],{"class":264},",:]\n",[254,97318,97319],{"class":256,"line":1319},[254,97320,93705],{"class":323},[254,97322,97323],{"class":256,"line":1334},[254,97324,94069],{"class":369},[254,97326,97327],{"class":256,"line":1340},[254,97328,97329],{"class":369},"array([[ 1,  2,  3,  4,  5,  6],\n",[254,97331,97332],{"class":256,"line":1354},[254,97333,97334],{"class":369},"       [ 7,  8,  9, 10, 11, 12]])\n",[254,97336,97337],{"class":256,"line":1360},[254,97338,94069],{"class":369},[254,97340,97341,97343,97345,97347,97349],{"class":256,"line":1451},[254,97342,97274],{"class":264},[254,97344,482],{"class":313},[254,97346,1123],{"class":264},[254,97348,557],{"class":313},[254,97350,33387],{"class":264},[254,97352,97353],{"class":256,"line":1457},[254,97354,93705],{"class":323},[254,97356,97357],{"class":256,"line":1469},[254,97358,94069],{"class":369},[254,97360,97361],{"class":256,"line":1752},[254,97362,97363],{"class":369},"array([[ 2,  3,  4],\n",[254,97365,97366],{"class":256,"line":1757},[254,97367,97368],{"class":369},"       [ 8,  9, 10],\n",[254,97370,97371],{"class":256,"line":1763},[254,97372,97373],{"class":369},"       [14, 15, 16],\n",[254,97375,97376],{"class":256,"line":1768},[254,97377,97378],{"class":369},"       [20, 21, 22]])\n",[254,97380,97381],{"class":256,"line":1782},[254,97382,94069],{"class":369},[254,97384,97385],{"class":256,"line":1787},[254,97386,97387],{"class":323},"#对列行同时进行切片，使用了step参数\n",[254,97389,97390,97393,97395,97398,97400],{"class":256,"line":1793},[254,97391,97392],{"class":264},"a[::",[254,97394,342],{"class":313},[254,97396,97397],{"class":264},",::",[254,97399,342],{"class":313},[254,97401,33387],{"class":264},[14,97403,97404],{},"⑤同时获取两个元素",[245,97406,97408],{"className":30519,"code":97407,"language":30521,"meta":174,"style":174},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[251,97409,97410,97415,97420],{"__ignoreMap":174},[254,97411,97412],{"class":256,"line":257},[254,97413,97414],{"class":323},"#同时获取第三行第二列，第四行第一列\n",[254,97416,97417],{"class":256,"line":175},[254,97418,97419],{"class":323},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[254,97421,97422,97425,97427,97429,97431,97433,97435,97437,97439],{"class":256,"line":1319},[254,97423,97424],{"class":264},"a[(",[254,97426,342],{"class":313},[254,97428,642],{"class":264},[254,97430,336],{"class":313},[254,97432,42388],{"class":264},[254,97434,482],{"class":313},[254,97436,642],{"class":264},[254,97438,456],{"class":313},[254,97440,97441],{"class":264},")]\n",[14,97443,97444],{},"⑥切片，对行进行反向获取",[245,97446,97448],{"className":30519,"code":97447,"language":30521,"meta":174,"style":174},"#切片 对所有行进行反向获取\na[::-1]\n#结果：\n'''\narray([[19, 20, 21, 22, 23, 24],\n       [13, 14, 15, 16, 17, 18],\n       [ 7,  8,  9, 10, 11, 12],\n       [ 1,  2,  3,  4,  5,  6]])\n'''\n#对行列都进行反向切片获取\na[::-1,::-1]\n'''\narray([[24, 23, 22, 21, 20, 19],\n       [18, 17, 16, 15, 14, 13],\n       [12, 11, 10,  9,  8,  7],\n       [ 6,  5,  4,  3,  2,  1]])\n'''\n",[251,97449,97450,97455,97465,97469,97473,97478,97483,97488,97493,97497,97502,97518,97522,97527,97532,97537,97542],{"__ignoreMap":174},[254,97451,97452],{"class":256,"line":257},[254,97453,97454],{"class":323},"#切片 对所有行进行反向获取\n",[254,97456,97457,97459,97461,97463],{"class":256,"line":175},[254,97458,97392],{"class":264},[254,97460,796],{"class":260},[254,97462,482],{"class":313},[254,97464,33387],{"class":264},[254,97466,97467],{"class":256,"line":1319},[254,97468,93705],{"class":323},[254,97470,97471],{"class":256,"line":1334},[254,97472,94069],{"class":369},[254,97474,97475],{"class":256,"line":1340},[254,97476,97477],{"class":369},"array([[19, 20, 21, 22, 23, 24],\n",[254,97479,97480],{"class":256,"line":1354},[254,97481,97482],{"class":369},"       [13, 14, 15, 16, 17, 18],\n",[254,97484,97485],{"class":256,"line":1360},[254,97486,97487],{"class":369},"       [ 7,  8,  9, 10, 11, 12],\n",[254,97489,97490],{"class":256,"line":1451},[254,97491,97492],{"class":369},"       [ 1,  2,  3,  4,  5,  6]])\n",[254,97494,97495],{"class":256,"line":1457},[254,97496,94069],{"class":369},[254,97498,97499],{"class":256,"line":1469},[254,97500,97501],{"class":323},"#对行列都进行反向切片获取\n",[254,97503,97504,97506,97508,97510,97512,97514,97516],{"class":256,"line":1752},[254,97505,97392],{"class":264},[254,97507,796],{"class":260},[254,97509,482],{"class":313},[254,97511,97397],{"class":264},[254,97513,796],{"class":260},[254,97515,482],{"class":313},[254,97517,33387],{"class":264},[254,97519,97520],{"class":256,"line":1757},[254,97521,94069],{"class":369},[254,97523,97524],{"class":256,"line":1763},[254,97525,97526],{"class":369},"array([[24, 23, 22, 21, 20, 19],\n",[254,97528,97529],{"class":256,"line":1768},[254,97530,97531],{"class":369},"       [18, 17, 16, 15, 14, 13],\n",[254,97533,97534],{"class":256,"line":1782},[254,97535,97536],{"class":369},"       [12, 11, 10,  9,  8,  7],\n",[254,97538,97539],{"class":256,"line":1787},[254,97540,97541],{"class":369},"       [ 6,  5,  4,  3,  2,  1]])\n",[254,97543,97544],{"class":256,"line":1793},[254,97545,94069],{"class":369},[14,97547,97548],{},"⑦修改元素",[245,97550,97552],{"className":30519,"code":97551,"language":30521,"meta":174,"style":174},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[251,97553,97554,97559,97577,97582],{"__ignoreMap":174},[254,97555,97556],{"class":256,"line":257},[254,97557,97558],{"class":323},"#获取前两行和前两列\n",[254,97560,97561,97564,97566,97568,97570,97573,97575],{"class":256,"line":175},[254,97562,97563],{"class":264},"sub_a",[254,97565,310],{"class":260},[254,97567,97311],{"class":264},[254,97569,342],{"class":313},[254,97571,97572],{"class":264},",:",[254,97574,342],{"class":313},[254,97576,33387],{"class":264},[254,97578,97579],{"class":256,"line":1319},[254,97580,97581],{"class":323},"#修改sub_a第一个元素的值\n",[254,97583,97584,97587,97589,97591,97593,97595,97597],{"class":256,"line":1334},[254,97585,97586],{"class":264},"sub_a[",[254,97588,456],{"class":313},[254,97590,642],{"class":264},[254,97592,456],{"class":313},[254,97594,1204],{"class":264},[254,97596,310],{"class":260},[254,97598,97599],{"class":313},"100\n",[14,97601,97602],{},"⑧数组复制copy()",[245,97604,97606],{"className":30519,"code":97605,"language":30521,"meta":174,"style":174},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[251,97607,97608,97613,97623,97628],{"__ignoreMap":174},[254,97609,97610],{"class":256,"line":257},[254,97611,97612],{"class":323},"#数组复制\n",[254,97614,97615,97618,97620],{"class":256,"line":175},[254,97616,97617],{"class":264},"copy_a",[254,97619,310],{"class":260},[254,97621,97622],{"class":264},"np.copy(sub_a)\n",[254,97624,97625],{"class":256,"line":1319},[254,97626,97627],{"class":323},"#修改copy_a后不影响原数组\n",[254,97629,97630,97633,97635,97637,97639,97641,97643],{"class":256,"line":1334},[254,97631,97632],{"class":264},"copy_a[",[254,97634,456],{"class":313},[254,97636,642],{"class":264},[254,97638,456],{"class":313},[254,97640,1204],{"class":264},[254,97642,310],{"class":260},[254,97644,97599],{"class":313},[14,97646,97647],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[5267,97649,97650],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":174,"searchDepth":175,"depth":175,"links":97652},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97169,"description":23518},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":97659,"title":97660,"body":97661,"description":23518,"extension":181,"meta":98153,"navigation":184,"path":98154,"seo":98155,"stem":98156,"__hash__":98157},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":97662,"toc":98145},[97663,97666,97670,97673,97676,97729,97732,97757,97760,97779,97799,97802,97818,97822,97868,97872,97914,97918,97921,97924,97927,97930,97933,97995,98055,98059,98062,98119,98123,98128,98137,98142],[10,97664,97660],{"id":97665},"_5改变数组的维度",[34,97667,97669],{"id":97668},"_51-使用reshape","5.1 使用reshape()",[14,97671,97672],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[14,97674,97675],{},"①一维数组转换为二维数组",[245,97677,97679],{"className":30519,"code":97678,"language":30521,"meta":174,"style":174},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[251,97680,97681,97697,97702,97707,97712],{"__ignoreMap":174},[254,97682,97683,97685,97687,97689,97691,97693,97695],{"class":256,"line":257},[254,97684,42],{"class":264},[254,97686,310],{"class":260},[254,97688,93143],{"class":264},[254,97690,482],{"class":313},[254,97692,642],{"class":264},[254,97694,787],{"class":313},[254,97696,271],{"class":264},[254,97698,97699],{"class":256,"line":175},[254,97700,97701],{"class":323},"#将一维数组进行转换\n",[254,97703,97704],{"class":256,"line":1319},[254,97705,97706],{"class":323},"#注意点：元素个数不可以变\n",[254,97708,97709],{"class":256,"line":1334},[254,97710,97711],{"class":323},"#转换维度要保持一致，不一致就异常！！！\n",[254,97713,97714,97716,97718,97721,97723,97725,97727],{"class":256,"line":1340},[254,97715,93447],{"class":264},[254,97717,310],{"class":260},[254,97719,97720],{"class":264},"a.reshape(",[254,97722,342],{"class":313},[254,97724,642],{"class":264},[254,97726,608],{"class":313},[254,97728,271],{"class":264},[14,97730,97731],{},"②一维数组转换为三维数组",[245,97733,97735],{"className":30519,"code":97734,"language":30521,"meta":174,"style":174},"aaa=a.reshape(2,3,2)\n",[251,97736,97737],{"__ignoreMap":174},[254,97738,97739,97741,97743,97745,97747,97749,97751,97753,97755],{"class":256,"line":257},[254,97740,95662],{"class":264},[254,97742,310],{"class":260},[254,97744,97720],{"class":264},[254,97746,342],{"class":313},[254,97748,642],{"class":264},[254,97750,336],{"class":313},[254,97752,642],{"class":264},[254,97754,342],{"class":313},[254,97756,271],{"class":264},[14,97758,97759],{},"③二维数组转化为一维数组",[245,97761,97763],{"className":30519,"code":97762,"language":30521,"meta":174,"style":174},"#知道元素个数：\naa.reshape(12)\n",[251,97764,97765,97770],{"__ignoreMap":174},[254,97766,97767],{"class":256,"line":257},[254,97768,97769],{"class":323},"#知道元素个数：\n",[254,97771,97772,97775,97777],{"class":256,"line":175},[254,97773,97774],{"class":264},"aa.reshape(",[254,97776,762],{"class":313},[254,97778,271],{"class":264},[245,97780,97782],{"className":30519,"code":97781,"language":30521,"meta":174,"style":174},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[251,97783,97784,97789],{"__ignoreMap":174},[254,97785,97786],{"class":256,"line":257},[254,97787,97788],{"class":323},"#不知道元素个数，参数传递-1\n",[254,97790,97791,97793,97795,97797],{"class":256,"line":175},[254,97792,97774],{"class":264},[254,97794,796],{"class":260},[254,97796,482],{"class":313},[254,97798,271],{"class":264},[14,97800,97801],{},"④三维数组转换为一维数组",[245,97803,97805],{"className":30519,"code":97804,"language":30521,"meta":174,"style":174},"aaa.reshape(-1)\n",[251,97806,97807],{"__ignoreMap":174},[254,97808,97809,97812,97814,97816],{"class":256,"line":257},[254,97810,97811],{"class":264},"aaa.reshape(",[254,97813,796],{"class":260},[254,97815,482],{"class":313},[254,97817,271],{"class":264},[34,97819,97821],{"id":97820},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[245,97823,97825],{"className":30519,"code":97824,"language":30521,"meta":174,"style":174},"aa=np.arange(1,13).reshape(2,6)#转换为2行6列的数组\naa.revel()\n#结果：\n#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[251,97826,97827,97854,97859,97863],{"__ignoreMap":174},[254,97828,97829,97831,97833,97835,97837,97839,97841,97843,97845,97847,97849,97851],{"class":256,"line":257},[254,97830,93447],{"class":264},[254,97832,310],{"class":260},[254,97834,93143],{"class":264},[254,97836,482],{"class":313},[254,97838,642],{"class":264},[254,97840,787],{"class":313},[254,97842,93148],{"class":264},[254,97844,342],{"class":313},[254,97846,642],{"class":264},[254,97848,608],{"class":313},[254,97850,693],{"class":264},[254,97852,97853],{"class":323},"#转换为2行6列的数组\n",[254,97855,97856],{"class":256,"line":175},[254,97857,97858],{"class":264},"aa.revel()\n",[254,97860,97861],{"class":256,"line":1319},[254,97862,93705],{"class":323},[254,97864,97865],{"class":256,"line":1334},[254,97866,97867],{"class":323},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[34,97869,97871],{"id":97870},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[245,97873,97875],{"className":30519,"code":97874,"language":30521,"meta":174,"style":174},"aa=np.arange(1,13).reshape(2,6)\naa.flatten()\n#结果：\n#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[251,97876,97877,97901,97906,97910],{"__ignoreMap":174},[254,97878,97879,97881,97883,97885,97887,97889,97891,97893,97895,97897,97899],{"class":256,"line":257},[254,97880,93447],{"class":264},[254,97882,310],{"class":260},[254,97884,93143],{"class":264},[254,97886,482],{"class":313},[254,97888,642],{"class":264},[254,97890,787],{"class":313},[254,97892,93148],{"class":264},[254,97894,342],{"class":313},[254,97896,642],{"class":264},[254,97898,608],{"class":313},[254,97900,271],{"class":264},[254,97902,97903],{"class":256,"line":175},[254,97904,97905],{"class":264},"aa.flatten()\n",[254,97907,97908],{"class":256,"line":1319},[254,97909,93705],{"class":323},[254,97911,97912],{"class":256,"line":1334},[254,97913,97867],{"class":323},[34,97915,97917],{"id":97916},"_54-使用resize","5.4 使用resize()",[14,97919,97920],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[14,97922,97923],{},"通过resize方法可以改变数组的维度",[14,97925,97926],{},"#resize修改数组维度",[14,97928,97929],{},"#以元组的形式指定形状",[14,97931,97932],{},"#改变的是原数组",[245,97934,97936],{"className":30519,"code":97935,"language":30521,"meta":174,"style":174},"a=np.arange(1,13)\na.shape=(2,6)#改变了原数组\na=resize((12))\n#结果：\n#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[251,97937,97938,97954,97974,97987,97991],{"__ignoreMap":174},[254,97939,97940,97942,97944,97946,97948,97950,97952],{"class":256,"line":257},[254,97941,42],{"class":264},[254,97943,310],{"class":260},[254,97945,93143],{"class":264},[254,97947,482],{"class":313},[254,97949,642],{"class":264},[254,97951,787],{"class":313},[254,97953,271],{"class":264},[254,97955,97956,97959,97961,97963,97965,97967,97969,97971],{"class":256,"line":175},[254,97957,97958],{"class":264},"a.shape",[254,97960,310],{"class":260},[254,97962,265],{"class":264},[254,97964,342],{"class":313},[254,97966,642],{"class":264},[254,97968,608],{"class":313},[254,97970,693],{"class":264},[254,97972,97973],{"class":323},"#改变了原数组\n",[254,97975,97976,97978,97980,97983,97985],{"class":256,"line":1319},[254,97977,42],{"class":264},[254,97979,310],{"class":260},[254,97981,97982],{"class":264},"resize((",[254,97984,762],{"class":313},[254,97986,30638],{"class":264},[254,97988,97989],{"class":256,"line":1334},[254,97990,93705],{"class":323},[254,97992,97993],{"class":256,"line":1340},[254,97994,97867],{"class":323},[245,97996,97998],{"className":30519,"code":97997,"language":30521,"meta":174,"style":174},"a.resize((6,2))\n#结果：\n'''\narray([[ 1,  2],\n       [ 3,  4],\n       [ 5,  6],\n       [ 7,  8],\n       [ 9, 10],\n       [11, 12]])\n'''\n",[251,97999,98000,98013,98017,98021,98026,98031,98036,98041,98046,98051],{"__ignoreMap":174},[254,98001,98002,98005,98007,98009,98011],{"class":256,"line":257},[254,98003,98004],{"class":264},"a.resize((",[254,98006,608],{"class":313},[254,98008,642],{"class":264},[254,98010,342],{"class":313},[254,98012,30638],{"class":264},[254,98014,98015],{"class":256,"line":175},[254,98016,93705],{"class":323},[254,98018,98019],{"class":256,"line":1319},[254,98020,94069],{"class":369},[254,98022,98023],{"class":256,"line":1334},[254,98024,98025],{"class":369},"array([[ 1,  2],\n",[254,98027,98028],{"class":256,"line":1340},[254,98029,98030],{"class":369},"       [ 3,  4],\n",[254,98032,98033],{"class":256,"line":1354},[254,98034,98035],{"class":369},"       [ 5,  6],\n",[254,98037,98038],{"class":256,"line":1360},[254,98039,98040],{"class":369},"       [ 7,  8],\n",[254,98042,98043],{"class":256,"line":1451},[254,98044,98045],{"class":369},"       [ 9, 10],\n",[254,98047,98048],{"class":256,"line":1457},[254,98049,98050],{"class":369},"       [11, 12]])\n",[254,98052,98053],{"class":256,"line":1469},[254,98054,94069],{"class":369},[34,98056,98058],{"id":98057},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[14,98060,98061],{},"改变了原数组",[245,98063,98065],{"className":30519,"code":98064,"language":30521,"meta":174,"style":174},"a=np.arange(1,13)\na.shape=(2,6)\n#结果：\n'''\narray([[ 1,  2,  3,  4,  5,  6],\n       [ 7,  8,  9, 10, 11, 12]])\n'''\n",[251,98066,98067,98083,98099,98103,98107,98111,98115],{"__ignoreMap":174},[254,98068,98069,98071,98073,98075,98077,98079,98081],{"class":256,"line":257},[254,98070,42],{"class":264},[254,98072,310],{"class":260},[254,98074,93143],{"class":264},[254,98076,482],{"class":313},[254,98078,642],{"class":264},[254,98080,787],{"class":313},[254,98082,271],{"class":264},[254,98084,98085,98087,98089,98091,98093,98095,98097],{"class":256,"line":175},[254,98086,97958],{"class":264},[254,98088,310],{"class":260},[254,98090,265],{"class":264},[254,98092,342],{"class":313},[254,98094,642],{"class":264},[254,98096,608],{"class":313},[254,98098,271],{"class":264},[254,98100,98101],{"class":256,"line":1319},[254,98102,93705],{"class":323},[254,98104,98105],{"class":256,"line":1334},[254,98106,94069],{"class":369},[254,98108,98109],{"class":256,"line":1340},[254,98110,97329],{"class":369},[254,98112,98113],{"class":256,"line":1354},[254,98114,97334],{"class":369},[254,98116,98117],{"class":256,"line":1360},[254,98118,94069],{"class":369},[34,98120,98122],{"id":98121},"_56-重要比较","5.6 重要比较：",[14,98124,98125],{},[1602,98126],{"alt":174,"src":98127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[14,98129,98130,98131,98133,98134,98136],{},"口诀：NumPy 函数要么用 ",[251,98132,96104],{},"，要么用 ",[251,98135,31637],{},"，创建结构用 shape，造数据用 size",[14,98138,98139],{},[1602,98140],{"alt":174,"src":98141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[5267,98143,98144],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":174,"searchDepth":175,"depth":175,"links":98146},[98147,98148,98149,98150,98151,98152],{"id":97668,"depth":175,"text":97669},{"id":97820,"depth":175,"text":97821},{"id":97870,"depth":175,"text":97871},{"id":97916,"depth":175,"text":97917},{"id":98057,"depth":175,"text":98058},{"id":98121,"depth":175,"text":98122},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":97660,"description":23518},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":98159,"title":98160,"body":98161,"description":23518,"extension":181,"meta":99233,"navigation":184,"path":99234,"seo":99235,"stem":99236,"__hash__":99237},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98162,"toc":99227},[98163,98166,98170,98173,98176,98179,98244,98247,98287,98290,98372,98375,98380,98402,98404,98409,98414,98417,98420,98575,98578,98780,98784,98787,98790,98858,98860,98865,98868,98871,98951,98955,98958,98960,99033,99035,99040,99042,99122,99126,99129,99132,99135,99138,99141,99144,99224],[10,98164,98160],{"id":98165},"_6数组的拼接",[34,98167,98169],{"id":98168},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[14,98171,98172],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[14,98174,98175],{},"函数内部传两个数列构成的数列或者元组",[14,98177,98178],{},"①一维数组的拼接",[245,98180,98182],{"className":30519,"code":98181,"language":30521,"meta":174,"style":174},"a=np.array([1,2,3])\nb=np.array([4,5,6])\n#调用concatenate进行数组拼接\nnp.concatenate((a,b))\n#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n#np.concatenate([a,b])\n",[251,98183,98184,98204,98224,98229,98234,98239],{"__ignoreMap":174},[254,98185,98186,98188,98190,98192,98194,98196,98198,98200,98202],{"class":256,"line":257},[254,98187,42],{"class":264},[254,98189,310],{"class":260},[254,98191,93165],{"class":264},[254,98193,482],{"class":313},[254,98195,642],{"class":264},[254,98197,342],{"class":313},[254,98199,642],{"class":264},[254,98201,336],{"class":313},[254,98203,4797],{"class":264},[254,98205,98206,98208,98210,98212,98214,98216,98218,98220,98222],{"class":256,"line":175},[254,98207,527],{"class":264},[254,98209,310],{"class":260},[254,98211,93165],{"class":264},[254,98213,557],{"class":313},[254,98215,642],{"class":264},[254,98217,583],{"class":313},[254,98219,642],{"class":264},[254,98221,608],{"class":313},[254,98223,4797],{"class":264},[254,98225,98226],{"class":256,"line":1319},[254,98227,98228],{"class":323},"#调用concatenate进行数组拼接\n",[254,98230,98231],{"class":256,"line":1334},[254,98232,98233],{"class":264},"np.concatenate((a,b))\n",[254,98235,98236],{"class":256,"line":1340},[254,98237,98238],{"class":323},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[254,98240,98241],{"class":256,"line":1354},[254,98242,98243],{"class":323},"#np.concatenate([a,b])\n",[14,98245,98246],{},"②一维多个数组拼接",[245,98248,98250],{"className":30519,"code":98249,"language":30521,"meta":174,"style":174},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[251,98251,98252,98257,98277,98282],{"__ignoreMap":174},[254,98253,98254],{"class":256,"line":257},[254,98255,98256],{"class":323},"#也可以多个数组进行拼接\n",[254,98258,98259,98261,98263,98265,98267,98269,98271,98273,98275],{"class":256,"line":175},[254,98260,552],{"class":264},[254,98262,310],{"class":260},[254,98264,93165],{"class":264},[254,98266,710],{"class":313},[254,98268,642],{"class":264},[254,98270,736],{"class":313},[254,98272,642],{"class":264},[254,98274,787],{"class":313},[254,98276,4797],{"class":264},[254,98278,98279],{"class":256,"line":1319},[254,98280,98281],{"class":264},"c\n",[254,98283,98284],{"class":256,"line":1334},[254,98285,98286],{"class":264},"np.concatenate((a,b,c))\n",[14,98288,98289],{},"③二维数组拼接",[245,98291,98293],{"className":30519,"code":98292,"language":30521,"meta":174,"style":174},"#二维数组使用concatenate进行拼接\naa=np.arange(1,13).reshape(3,4)\nbb=np.arange(101,113).reshape(3,4)\n#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\nnp.concatenate((aa,bb),axis=0)\n",[251,98294,98295,98300,98324,98349,98354,98359],{"__ignoreMap":174},[254,98296,98297],{"class":256,"line":257},[254,98298,98299],{"class":323},"#二维数组使用concatenate进行拼接\n",[254,98301,98302,98304,98306,98308,98310,98312,98314,98316,98318,98320,98322],{"class":256,"line":175},[254,98303,93447],{"class":264},[254,98305,310],{"class":260},[254,98307,93143],{"class":264},[254,98309,482],{"class":313},[254,98311,642],{"class":264},[254,98313,787],{"class":313},[254,98315,93148],{"class":264},[254,98317,336],{"class":313},[254,98319,642],{"class":264},[254,98321,557],{"class":313},[254,98323,271],{"class":264},[254,98325,98326,98329,98331,98333,98335,98337,98339,98341,98343,98345,98347],{"class":256,"line":1319},[254,98327,98328],{"class":264},"bb",[254,98330,310],{"class":260},[254,98332,93143],{"class":264},[254,98334,601],{"class":313},[254,98336,642],{"class":264},[254,98338,906],{"class":313},[254,98340,93148],{"class":264},[254,98342,336],{"class":313},[254,98344,642],{"class":264},[254,98346,557],{"class":313},[254,98348,271],{"class":264},[254,98350,98351],{"class":256,"line":1334},[254,98352,98353],{"class":323},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[254,98355,98356],{"class":256,"line":1340},[254,98357,98358],{"class":323},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[254,98360,98361,98364,98366,98368,98370],{"class":256,"line":1354},[254,98362,98363],{"class":264},"np.concatenate((aa,bb),",[254,98365,47655],{"class":5357},[254,98367,310],{"class":260},[254,98369,456],{"class":313},[254,98371,271],{"class":264},[14,98373,98374],{},"结果：",[14,98376,98377],{},[1602,98378],{"alt":174,"src":98379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[245,98381,98383],{"className":30519,"code":98382,"language":30521,"meta":174,"style":174},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[251,98384,98385,98390],{"__ignoreMap":174},[254,98386,98387],{"class":256,"line":257},[254,98388,98389],{"class":323},"#指定axis为1进行拼接\n",[254,98391,98392,98394,98396,98398,98400],{"class":256,"line":175},[254,98393,98363],{"class":264},[254,98395,47655],{"class":5357},[254,98397,310],{"class":260},[254,98399,482],{"class":313},[254,98401,271],{"class":264},[14,98403,98374],{},[14,98405,98406],{},[1602,98407],{"alt":174,"src":98408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[14,98410,98411],{},[414,98412,98413],{},"二维数组总结：0竖着方向，1横着方向",[14,98415,98416],{},"④三维数组拼接",[14,98418,98419],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[245,98421,98423],{"className":30519,"code":98422,"language":30521,"meta":174,"style":174},"#两个三行六列\naaa=np.arange(1,37).reshape(2,3,6)\nbbb=np.arange(101,137).reshape(2,3,6)\n#axis=0\ns=np.concatenate((aaa,bbb),axis=0)\ns.shape\n#输出：(4,3,6)\n#axis=1\nss=np.concatenate((aaa,bbb),axis=1)\nss.shape\n#输出：(2,6,6)\n#axis=2\nnp.concatenate((aaa,bbb),axis=2).shape\n#输出：（2，3，12）\n",[251,98424,98425,98430,98458,98488,98493,98510,98515,98520,98525,98542,98547,98552,98557,98570],{"__ignoreMap":174},[254,98426,98427],{"class":256,"line":257},[254,98428,98429],{"class":323},"#两个三行六列\n",[254,98431,98432,98434,98436,98438,98440,98442,98444,98446,98448,98450,98452,98454,98456],{"class":256,"line":175},[254,98433,95662],{"class":264},[254,98435,310],{"class":260},[254,98437,93143],{"class":264},[254,98439,482],{"class":313},[254,98441,642],{"class":264},[254,98443,589],{"class":313},[254,98445,93148],{"class":264},[254,98447,342],{"class":313},[254,98449,642],{"class":264},[254,98451,336],{"class":313},[254,98453,642],{"class":264},[254,98455,608],{"class":313},[254,98457,271],{"class":264},[254,98459,98460,98463,98465,98467,98469,98471,98474,98476,98478,98480,98482,98484,98486],{"class":256,"line":1319},[254,98461,98462],{"class":264},"bbb",[254,98464,310],{"class":260},[254,98466,93143],{"class":264},[254,98468,601],{"class":313},[254,98470,642],{"class":264},[254,98472,98473],{"class":313},"137",[254,98475,93148],{"class":264},[254,98477,342],{"class":313},[254,98479,642],{"class":264},[254,98481,336],{"class":313},[254,98483,642],{"class":264},[254,98485,608],{"class":313},[254,98487,271],{"class":264},[254,98489,98490],{"class":256,"line":1334},[254,98491,98492],{"class":323},"#axis=0\n",[254,98494,98495,98497,98499,98502,98504,98506,98508],{"class":256,"line":1340},[254,98496,959],{"class":264},[254,98498,310],{"class":260},[254,98500,98501],{"class":264},"np.concatenate((aaa,bbb),",[254,98503,47655],{"class":5357},[254,98505,310],{"class":260},[254,98507,456],{"class":313},[254,98509,271],{"class":264},[254,98511,98512],{"class":256,"line":1354},[254,98513,98514],{"class":264},"s.shape\n",[254,98516,98517],{"class":256,"line":1360},[254,98518,98519],{"class":323},"#输出：(4,3,6)\n",[254,98521,98522],{"class":256,"line":1451},[254,98523,98524],{"class":323},"#axis=1\n",[254,98526,98527,98530,98532,98534,98536,98538,98540],{"class":256,"line":1457},[254,98528,98529],{"class":264},"ss",[254,98531,310],{"class":260},[254,98533,98501],{"class":264},[254,98535,47655],{"class":5357},[254,98537,310],{"class":260},[254,98539,482],{"class":313},[254,98541,271],{"class":264},[254,98543,98544],{"class":256,"line":1469},[254,98545,98546],{"class":264},"ss.shape\n",[254,98548,98549],{"class":256,"line":1752},[254,98550,98551],{"class":323},"#输出：(2,6,6)\n",[254,98553,98554],{"class":256,"line":1757},[254,98555,98556],{"class":323},"#axis=2\n",[254,98558,98559,98561,98563,98565,98567],{"class":256,"line":1763},[254,98560,98501],{"class":264},[254,98562,47655],{"class":5357},[254,98564,310],{"class":260},[254,98566,342],{"class":313},[254,98568,98569],{"class":264},").shape\n",[254,98571,98572],{"class":256,"line":1768},[254,98573,98574],{"class":323},"#输出：（2，3，12）\n",[14,98576,98577],{},"⑤四维数组拼接",[245,98579,98581],{"className":30519,"code":98580,"language":30521,"meta":174,"style":174},"#两个三行六列\naaa=np.arange(1,37).reshape(2,3,6)\nbbb=np.arange(101,137).reshape(2,3,6)\naaaa=aaa.reshape(2,3,3,2)\nbbbb=bbb.reshape(2,3,3,2)\n#axis=0\nnp.concatenate((aaaa,bbbb),axis=0).shape\n#结果：（4，3，3，2）\n#axis=1\nnp.concatenate((aaaa,bbbb),axis=1).shape\n#结果：（2，6，3，2）\n#axis=2\nnp.concatenate((aaaa,bbbb),axis=2).shape\n#结果：（2，3，6，2）\n#axis=3\nnp.concatenate((aaaa,bbbb),axis=3).shape\n#结果：（2，3，3，4）\n",[251,98582,98583,98587,98615,98643,98668,98694,98698,98711,98716,98720,98732,98737,98741,98753,98758,98763,98775],{"__ignoreMap":174},[254,98584,98585],{"class":256,"line":257},[254,98586,98429],{"class":323},[254,98588,98589,98591,98593,98595,98597,98599,98601,98603,98605,98607,98609,98611,98613],{"class":256,"line":175},[254,98590,95662],{"class":264},[254,98592,310],{"class":260},[254,98594,93143],{"class":264},[254,98596,482],{"class":313},[254,98598,642],{"class":264},[254,98600,589],{"class":313},[254,98602,93148],{"class":264},[254,98604,342],{"class":313},[254,98606,642],{"class":264},[254,98608,336],{"class":313},[254,98610,642],{"class":264},[254,98612,608],{"class":313},[254,98614,271],{"class":264},[254,98616,98617,98619,98621,98623,98625,98627,98629,98631,98633,98635,98637,98639,98641],{"class":256,"line":1319},[254,98618,98462],{"class":264},[254,98620,310],{"class":260},[254,98622,93143],{"class":264},[254,98624,601],{"class":313},[254,98626,642],{"class":264},[254,98628,98473],{"class":313},[254,98630,93148],{"class":264},[254,98632,342],{"class":313},[254,98634,642],{"class":264},[254,98636,336],{"class":313},[254,98638,642],{"class":264},[254,98640,608],{"class":313},[254,98642,271],{"class":264},[254,98644,98645,98648,98650,98652,98654,98656,98658,98660,98662,98664,98666],{"class":256,"line":1334},[254,98646,98647],{"class":264},"aaaa",[254,98649,310],{"class":260},[254,98651,97811],{"class":264},[254,98653,342],{"class":313},[254,98655,642],{"class":264},[254,98657,336],{"class":313},[254,98659,642],{"class":264},[254,98661,336],{"class":313},[254,98663,642],{"class":264},[254,98665,342],{"class":313},[254,98667,271],{"class":264},[254,98669,98670,98673,98675,98678,98680,98682,98684,98686,98688,98690,98692],{"class":256,"line":1340},[254,98671,98672],{"class":264},"bbbb",[254,98674,310],{"class":260},[254,98676,98677],{"class":264},"bbb.reshape(",[254,98679,342],{"class":313},[254,98681,642],{"class":264},[254,98683,336],{"class":313},[254,98685,642],{"class":264},[254,98687,336],{"class":313},[254,98689,642],{"class":264},[254,98691,342],{"class":313},[254,98693,271],{"class":264},[254,98695,98696],{"class":256,"line":1354},[254,98697,98492],{"class":323},[254,98699,98700,98703,98705,98707,98709],{"class":256,"line":1360},[254,98701,98702],{"class":264},"np.concatenate((aaaa,bbbb),",[254,98704,47655],{"class":5357},[254,98706,310],{"class":260},[254,98708,456],{"class":313},[254,98710,98569],{"class":264},[254,98712,98713],{"class":256,"line":1451},[254,98714,98715],{"class":323},"#结果：（4，3，3，2）\n",[254,98717,98718],{"class":256,"line":1457},[254,98719,98524],{"class":323},[254,98721,98722,98724,98726,98728,98730],{"class":256,"line":1469},[254,98723,98702],{"class":264},[254,98725,47655],{"class":5357},[254,98727,310],{"class":260},[254,98729,482],{"class":313},[254,98731,98569],{"class":264},[254,98733,98734],{"class":256,"line":1752},[254,98735,98736],{"class":323},"#结果：（2，6，3，2）\n",[254,98738,98739],{"class":256,"line":1757},[254,98740,98556],{"class":323},[254,98742,98743,98745,98747,98749,98751],{"class":256,"line":1763},[254,98744,98702],{"class":264},[254,98746,47655],{"class":5357},[254,98748,310],{"class":260},[254,98750,342],{"class":313},[254,98752,98569],{"class":264},[254,98754,98755],{"class":256,"line":1768},[254,98756,98757],{"class":323},"#结果：（2，3，6，2）\n",[254,98759,98760],{"class":256,"line":1782},[254,98761,98762],{"class":323},"#axis=3\n",[254,98764,98765,98767,98769,98771,98773],{"class":256,"line":1787},[254,98766,98702],{"class":264},[254,98768,47655],{"class":5357},[254,98770,310],{"class":260},[254,98772,336],{"class":313},[254,98774,98569],{"class":264},[254,98776,98777],{"class":256,"line":1793},[254,98778,98779],{"class":323},"#结果：（2，3，3，4）\n",[34,98781,98783],{"id":98782},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[14,98785,98786],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[14,98788,98789],{},"①二维数组",[245,98791,98793],{"className":30519,"code":98792,"language":30521,"meta":174,"style":174},"aa=np.arange(1,13).reshape(3,4)\nbb=np.arange(101,113).reshape(3,4)\nnp.hstack((aa,bb))\n#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n#np.hstack([aa,bb])\n",[251,98794,98795,98819,98843,98848,98853],{"__ignoreMap":174},[254,98796,98797,98799,98801,98803,98805,98807,98809,98811,98813,98815,98817],{"class":256,"line":257},[254,98798,93447],{"class":264},[254,98800,310],{"class":260},[254,98802,93143],{"class":264},[254,98804,482],{"class":313},[254,98806,642],{"class":264},[254,98808,787],{"class":313},[254,98810,93148],{"class":264},[254,98812,336],{"class":313},[254,98814,642],{"class":264},[254,98816,557],{"class":313},[254,98818,271],{"class":264},[254,98820,98821,98823,98825,98827,98829,98831,98833,98835,98837,98839,98841],{"class":256,"line":175},[254,98822,98328],{"class":264},[254,98824,310],{"class":260},[254,98826,93143],{"class":264},[254,98828,601],{"class":313},[254,98830,642],{"class":264},[254,98832,906],{"class":313},[254,98834,93148],{"class":264},[254,98836,336],{"class":313},[254,98838,642],{"class":264},[254,98840,557],{"class":313},[254,98842,271],{"class":264},[254,98844,98845],{"class":256,"line":1319},[254,98846,98847],{"class":264},"np.hstack((aa,bb))\n",[254,98849,98850],{"class":256,"line":1334},[254,98851,98852],{"class":323},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[254,98854,98855],{"class":256,"line":1340},[254,98856,98857],{"class":323},"#np.hstack([aa,bb])\n",[14,98859,98374],{},[14,98861,98862],{},[1602,98863],{"alt":174,"src":98864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[14,98866,98867],{},"等效于concatenate()函数中axis=1时的情况",[14,98869,98870],{},"②三维数组",[245,98872,98874],{"className":30519,"code":98873,"language":30521,"meta":174,"style":174},"#两个三行六列\naaa=np.arange(1,37).reshape(2,3,6)\nbbb=np.arange(101,137).reshape(2,3,6)\n#使用hstack\nnp.hstack((aaa,bbb)).shape\n#输出：（2，6，6）\n",[251,98875,98876,98880,98908,98936,98941,98946],{"__ignoreMap":174},[254,98877,98878],{"class":256,"line":257},[254,98879,98429],{"class":323},[254,98881,98882,98884,98886,98888,98890,98892,98894,98896,98898,98900,98902,98904,98906],{"class":256,"line":175},[254,98883,95662],{"class":264},[254,98885,310],{"class":260},[254,98887,93143],{"class":264},[254,98889,482],{"class":313},[254,98891,642],{"class":264},[254,98893,589],{"class":313},[254,98895,93148],{"class":264},[254,98897,342],{"class":313},[254,98899,642],{"class":264},[254,98901,336],{"class":313},[254,98903,642],{"class":264},[254,98905,608],{"class":313},[254,98907,271],{"class":264},[254,98909,98910,98912,98914,98916,98918,98920,98922,98924,98926,98928,98930,98932,98934],{"class":256,"line":1319},[254,98911,98462],{"class":264},[254,98913,310],{"class":260},[254,98915,93143],{"class":264},[254,98917,601],{"class":313},[254,98919,642],{"class":264},[254,98921,98473],{"class":313},[254,98923,93148],{"class":264},[254,98925,342],{"class":313},[254,98927,642],{"class":264},[254,98929,336],{"class":313},[254,98931,642],{"class":264},[254,98933,608],{"class":313},[254,98935,271],{"class":264},[254,98937,98938],{"class":256,"line":1334},[254,98939,98940],{"class":323},"#使用hstack\n",[254,98942,98943],{"class":256,"line":1340},[254,98944,98945],{"class":264},"np.hstack((aaa,bbb)).shape\n",[254,98947,98948],{"class":256,"line":1354},[254,98949,98950],{"class":323},"#输出：（2，6，6）\n",[34,98952,98954],{"id":98953},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[14,98956,98957],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[14,98959,98789],{},[245,98961,98963],{"className":30519,"code":98962,"language":30521,"meta":174,"style":174},"aa=np.arange(1,13).reshape(3,4)\nbb=np.arange(101,113).reshape(3,4)\n#vstack 垂直方向进行堆叠\nnp.vstack((aa,bb))\n#与hstack传的参数类似，等价于：\nnp.vstack([aa,bb])\n",[251,98964,98965,98989,99013,99018,99023,99028],{"__ignoreMap":174},[254,98966,98967,98969,98971,98973,98975,98977,98979,98981,98983,98985,98987],{"class":256,"line":257},[254,98968,93447],{"class":264},[254,98970,310],{"class":260},[254,98972,93143],{"class":264},[254,98974,482],{"class":313},[254,98976,642],{"class":264},[254,98978,787],{"class":313},[254,98980,93148],{"class":264},[254,98982,336],{"class":313},[254,98984,642],{"class":264},[254,98986,557],{"class":313},[254,98988,271],{"class":264},[254,98990,98991,98993,98995,98997,98999,99001,99003,99005,99007,99009,99011],{"class":256,"line":175},[254,98992,98328],{"class":264},[254,98994,310],{"class":260},[254,98996,93143],{"class":264},[254,98998,601],{"class":313},[254,99000,642],{"class":264},[254,99002,906],{"class":313},[254,99004,93148],{"class":264},[254,99006,336],{"class":313},[254,99008,642],{"class":264},[254,99010,557],{"class":313},[254,99012,271],{"class":264},[254,99014,99015],{"class":256,"line":1319},[254,99016,99017],{"class":323},"#vstack 垂直方向进行堆叠\n",[254,99019,99020],{"class":256,"line":1334},[254,99021,99022],{"class":264},"np.vstack((aa,bb))\n",[254,99024,99025],{"class":256,"line":1340},[254,99026,99027],{"class":323},"#与hstack传的参数类似，等价于：\n",[254,99029,99030],{"class":256,"line":1354},[254,99031,99032],{"class":264},"np.vstack([aa,bb])\n",[14,99034,98374],{},[14,99036,99037],{},[1602,99038],{"alt":174,"src":99039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[14,99041,98870],{},[245,99043,99045],{"className":30519,"code":99044,"language":30521,"meta":174,"style":174},"#两个三行六列\naaa=np.arange(1,37).reshape(2,3,6)\nbbb=np.arange(101,137).reshape(2,3,6)\n#使用vstack\nnp.vstack((aaa,bbb)).shape\n#输出：（4，3，6）\n",[251,99046,99047,99051,99079,99107,99112,99117],{"__ignoreMap":174},[254,99048,99049],{"class":256,"line":257},[254,99050,98429],{"class":323},[254,99052,99053,99055,99057,99059,99061,99063,99065,99067,99069,99071,99073,99075,99077],{"class":256,"line":175},[254,99054,95662],{"class":264},[254,99056,310],{"class":260},[254,99058,93143],{"class":264},[254,99060,482],{"class":313},[254,99062,642],{"class":264},[254,99064,589],{"class":313},[254,99066,93148],{"class":264},[254,99068,342],{"class":313},[254,99070,642],{"class":264},[254,99072,336],{"class":313},[254,99074,642],{"class":264},[254,99076,608],{"class":313},[254,99078,271],{"class":264},[254,99080,99081,99083,99085,99087,99089,99091,99093,99095,99097,99099,99101,99103,99105],{"class":256,"line":1319},[254,99082,98462],{"class":264},[254,99084,310],{"class":260},[254,99086,93143],{"class":264},[254,99088,601],{"class":313},[254,99090,642],{"class":264},[254,99092,98473],{"class":313},[254,99094,93148],{"class":264},[254,99096,342],{"class":313},[254,99098,642],{"class":264},[254,99100,336],{"class":313},[254,99102,642],{"class":264},[254,99104,608],{"class":313},[254,99106,271],{"class":264},[254,99108,99109],{"class":256,"line":1334},[254,99110,99111],{"class":323},"#使用vstack\n",[254,99113,99114],{"class":256,"line":1340},[254,99115,99116],{"class":264},"np.vstack((aaa,bbb)).shape\n",[254,99118,99119],{"class":256,"line":1354},[254,99120,99121],{"class":323},"#输出：（4，3，6）\n",[34,99123,99125],{"id":99124},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[14,99127,99128],{},"该方法是三维数组特有的方法",[14,99130,99131],{},"也就是说",[14,99133,99134],{},"一维数组拼接方法用：concatenate()",[14,99136,99137],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[14,99139,99140],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[14,99142,99143],{},"四维数组及多维数组只能用concatenate进行拼接",[245,99145,99147],{"className":30519,"code":99146,"language":30521,"meta":174,"style":174},"#两个三行六列\naaa=np.arange(1,37).reshape(2,3,6)\nbbb=np.arange(101,137).reshape(2,3,6)\n#使用dstack\nnp.dstack((aaa,bbb)).shape\n#结果：（2，3，12）\n",[251,99148,99149,99153,99181,99209,99214,99219],{"__ignoreMap":174},[254,99150,99151],{"class":256,"line":257},[254,99152,98429],{"class":323},[254,99154,99155,99157,99159,99161,99163,99165,99167,99169,99171,99173,99175,99177,99179],{"class":256,"line":175},[254,99156,95662],{"class":264},[254,99158,310],{"class":260},[254,99160,93143],{"class":264},[254,99162,482],{"class":313},[254,99164,642],{"class":264},[254,99166,589],{"class":313},[254,99168,93148],{"class":264},[254,99170,342],{"class":313},[254,99172,642],{"class":264},[254,99174,336],{"class":313},[254,99176,642],{"class":264},[254,99178,608],{"class":313},[254,99180,271],{"class":264},[254,99182,99183,99185,99187,99189,99191,99193,99195,99197,99199,99201,99203,99205,99207],{"class":256,"line":1319},[254,99184,98462],{"class":264},[254,99186,310],{"class":260},[254,99188,93143],{"class":264},[254,99190,601],{"class":313},[254,99192,642],{"class":264},[254,99194,98473],{"class":313},[254,99196,93148],{"class":264},[254,99198,342],{"class":313},[254,99200,642],{"class":264},[254,99202,336],{"class":313},[254,99204,642],{"class":264},[254,99206,608],{"class":313},[254,99208,271],{"class":264},[254,99210,99211],{"class":256,"line":1334},[254,99212,99213],{"class":323},"#使用dstack\n",[254,99215,99216],{"class":256,"line":1340},[254,99217,99218],{"class":264},"np.dstack((aaa,bbb)).shape\n",[254,99220,99221],{"class":256,"line":1354},[254,99222,99223],{"class":323},"#结果：（2，3，12）\n",[5267,99225,99226],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":174,"searchDepth":175,"depth":175,"links":99228},[99229,99230,99231,99232],{"id":98168,"depth":175,"text":98169},{"id":98782,"depth":175,"text":98783},{"id":98953,"depth":175,"text":98954},{"id":99124,"depth":175,"text":99125},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98160,"description":23518},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99239,"title":99240,"body":99241,"description":23518,"extension":181,"meta":99516,"navigation":184,"path":99517,"seo":99518,"stem":99519,"__hash__":99520},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99242,"toc":99514},[99243,99246,99249,99343,99346,99349,99352,99355,99358,99361,99364,99367,99511],[10,99244,99240],{"id":99245},"_7数组转置",[14,99247,99248],{},"使用transpose()函数",[245,99250,99252],{"className":30519,"code":99251,"language":30521,"meta":174,"style":174},"import numpy as np\na= np.arange(1,13).reshape(4,3)\n#二维数组转置\n#调用transpose()函数\na.transpose()\n#对于二维数组也可以采用.T来实现\na.T#与上述代码一样\n#结果：\n'''\narray([[ 1,  4,  7, 10],\n       [ 2,  5,  8, 11],\n       [ 3,  6,  9, 12]])\n'''\n",[251,99253,99254,99264,99288,99293,99298,99303,99308,99316,99320,99324,99329,99334,99339],{"__ignoreMap":174},[254,99255,99256,99258,99260,99262],{"class":256,"line":257},[254,99257,30533],{"class":260},[254,99259,31521],{"class":264},[254,99261,31524],{"class":260},[254,99263,31527],{"class":264},[254,99265,99266,99268,99270,99272,99274,99276,99278,99280,99282,99284,99286],{"class":256,"line":175},[254,99267,42],{"class":264},[254,99269,310],{"class":260},[254,99271,31858],{"class":264},[254,99273,482],{"class":313},[254,99275,642],{"class":264},[254,99277,787],{"class":313},[254,99279,93148],{"class":264},[254,99281,557],{"class":313},[254,99283,642],{"class":264},[254,99285,336],{"class":313},[254,99287,271],{"class":264},[254,99289,99290],{"class":256,"line":1319},[254,99291,99292],{"class":323},"#二维数组转置\n",[254,99294,99295],{"class":256,"line":1334},[254,99296,99297],{"class":323},"#调用transpose()函数\n",[254,99299,99300],{"class":256,"line":1340},[254,99301,99302],{"class":264},"a.transpose()\n",[254,99304,99305],{"class":256,"line":1354},[254,99306,99307],{"class":323},"#对于二维数组也可以采用.T来实现\n",[254,99309,99310,99313],{"class":256,"line":1360},[254,99311,99312],{"class":264},"a.T",[254,99314,99315],{"class":323},"#与上述代码一样\n",[254,99317,99318],{"class":256,"line":1451},[254,99319,93705],{"class":323},[254,99321,99322],{"class":256,"line":1457},[254,99323,94069],{"class":369},[254,99325,99326],{"class":256,"line":1469},[254,99327,99328],{"class":369},"array([[ 1,  4,  7, 10],\n",[254,99330,99331],{"class":256,"line":1752},[254,99332,99333],{"class":369},"       [ 2,  5,  8, 11],\n",[254,99335,99336],{"class":256,"line":1757},[254,99337,99338],{"class":369},"       [ 3,  6,  9, 12]])\n",[254,99340,99341],{"class":256,"line":1763},[254,99342,94069],{"class":369},[14,99344,99345],{},"也可以使用np.transpose()的形式",[14,99347,99348],{},"#多维数组进行转置 np.transpose()",[14,99350,99351],{},"#对二维数组也可以使用np.transpose()进行转置",[14,99353,99354],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[14,99356,99357],{},"第二个参数，维度可以理解为用axis中的数来理解",[14,99359,99360],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[14,99362,99363],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[14,99365,99366],{},"四维及以上的数组也是一样的道理",[245,99368,99370],{"className":30519,"code":99369,"language":30521,"meta":174,"style":174},"x=np.arange(1,37).reshape(3,6,2)\nx.shape\n#结果：（3,6,2）\n#使用np.transpose()进行转置 变为(2,6,3)\nnp.transpose(x,(2,1,0)).shape\n#结果：(2,6,3)\naaaa=np.arange(1,37).reshape(3,2,1,6)\naaaa.shape\n#结果：（3，2，1，6）\n#使用np.transpose()进行转置 变为(2,1,3,6)\nnp.transpose(aaaa,(1,2,0,3)).shape\n#结果：(2,1,3,6)\n",[251,99371,99372,99400,99405,99410,99415,99433,99438,99470,99475,99480,99485,99506],{"__ignoreMap":174},[254,99373,99374,99376,99378,99380,99382,99384,99386,99388,99390,99392,99394,99396,99398],{"class":256,"line":257},[254,99375,1084],{"class":264},[254,99377,310],{"class":260},[254,99379,93143],{"class":264},[254,99381,482],{"class":313},[254,99383,642],{"class":264},[254,99385,589],{"class":313},[254,99387,93148],{"class":264},[254,99389,336],{"class":313},[254,99391,642],{"class":264},[254,99393,608],{"class":313},[254,99395,642],{"class":264},[254,99397,342],{"class":313},[254,99399,271],{"class":264},[254,99401,99402],{"class":256,"line":175},[254,99403,99404],{"class":264},"x.shape\n",[254,99406,99407],{"class":256,"line":1319},[254,99408,99409],{"class":323},"#结果：（3,6,2）\n",[254,99411,99412],{"class":256,"line":1334},[254,99413,99414],{"class":323},"#使用np.transpose()进行转置 变为(2,6,3)\n",[254,99416,99417,99420,99422,99424,99426,99428,99430],{"class":256,"line":1340},[254,99418,99419],{"class":264},"np.transpose(x,(",[254,99421,342],{"class":313},[254,99423,642],{"class":264},[254,99425,482],{"class":313},[254,99427,642],{"class":264},[254,99429,456],{"class":313},[254,99431,99432],{"class":264},")).shape\n",[254,99434,99435],{"class":256,"line":1354},[254,99436,99437],{"class":323},"#结果：(2,6,3)\n",[254,99439,99440,99442,99444,99446,99448,99450,99452,99454,99456,99458,99460,99462,99464,99466,99468],{"class":256,"line":1360},[254,99441,98647],{"class":264},[254,99443,310],{"class":260},[254,99445,93143],{"class":264},[254,99447,482],{"class":313},[254,99449,642],{"class":264},[254,99451,589],{"class":313},[254,99453,93148],{"class":264},[254,99455,336],{"class":313},[254,99457,642],{"class":264},[254,99459,342],{"class":313},[254,99461,642],{"class":264},[254,99463,482],{"class":313},[254,99465,642],{"class":264},[254,99467,608],{"class":313},[254,99469,271],{"class":264},[254,99471,99472],{"class":256,"line":1451},[254,99473,99474],{"class":264},"aaaa.shape\n",[254,99476,99477],{"class":256,"line":1457},[254,99478,99479],{"class":323},"#结果：（3，2，1，6）\n",[254,99481,99482],{"class":256,"line":1469},[254,99483,99484],{"class":323},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[254,99486,99487,99490,99492,99494,99496,99498,99500,99502,99504],{"class":256,"line":1752},[254,99488,99489],{"class":264},"np.transpose(aaaa,(",[254,99491,482],{"class":313},[254,99493,642],{"class":264},[254,99495,342],{"class":313},[254,99497,642],{"class":264},[254,99499,456],{"class":313},[254,99501,642],{"class":264},[254,99503,336],{"class":313},[254,99505,99432],{"class":264},[254,99507,99508],{"class":256,"line":1757},[254,99509,99510],{"class":323},"#结果：(2,1,3,6)\n",[5267,99512,99513],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":174,"searchDepth":175,"depth":175,"links":99515},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99240,"description":23518},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":99522,"title":99523,"body":99524,"description":23518,"extension":181,"meta":100258,"navigation":184,"path":100259,"seo":100260,"stem":100261,"__hash__":100262},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":99525,"toc":100256},[99526,99529,99532,99535,99538,99541,99544,99547,99550,99659,99662,99665,100253],[10,99527,99523],{"id":99528},"_8数组分割",[14,99530,99531],{},"split分割",[14,99533,99534],{},"numpy.split(ary,indics_or_sections,axis)",[14,99536,99537],{},"解释：",[14,99539,99540],{},"ary:被分割的数组",[14,99542,99543],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[14,99545,99546],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[14,99548,99549],{},"①一维数组的分割",[245,99551,99553],{"className":30519,"code":99552,"language":30521,"meta":174,"style":174},"a=np.arange(1,9)\n#如果传入整数，必须能够平分，否则会报错\nnp.split(a,2)\n#结果：\n#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\nnp.split(a,4)\n#结果：\n#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n#传入数组\nnp.split(a,[3,5])\n#结果：\n#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\nnp.split(a,[5,7])\n#结果：\n#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[251,99554,99555,99571,99576,99585,99589,99594,99602,99606,99611,99616,99629,99633,99638,99650,99654],{"__ignoreMap":174},[254,99556,99557,99559,99561,99563,99565,99567,99569],{"class":256,"line":257},[254,99558,42],{"class":264},[254,99560,310],{"class":260},[254,99562,93143],{"class":264},[254,99564,482],{"class":313},[254,99566,642],{"class":264},[254,99568,684],{"class":313},[254,99570,271],{"class":264},[254,99572,99573],{"class":256,"line":175},[254,99574,99575],{"class":323},"#如果传入整数，必须能够平分，否则会报错\n",[254,99577,99578,99581,99583],{"class":256,"line":1319},[254,99579,99580],{"class":264},"np.split(a,",[254,99582,342],{"class":313},[254,99584,271],{"class":264},[254,99586,99587],{"class":256,"line":1334},[254,99588,93705],{"class":323},[254,99590,99591],{"class":256,"line":1340},[254,99592,99593],{"class":323},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[254,99595,99596,99598,99600],{"class":256,"line":1354},[254,99597,99580],{"class":264},[254,99599,557],{"class":313},[254,99601,271],{"class":264},[254,99603,99604],{"class":256,"line":1360},[254,99605,93705],{"class":323},[254,99607,99608],{"class":256,"line":1451},[254,99609,99610],{"class":323},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[254,99612,99613],{"class":256,"line":1457},[254,99614,99615],{"class":323},"#传入数组\n",[254,99617,99618,99621,99623,99625,99627],{"class":256,"line":1469},[254,99619,99620],{"class":264},"np.split(a,[",[254,99622,336],{"class":313},[254,99624,642],{"class":264},[254,99626,583],{"class":313},[254,99628,4797],{"class":264},[254,99630,99631],{"class":256,"line":1752},[254,99632,93705],{"class":323},[254,99634,99635],{"class":256,"line":1757},[254,99636,99637],{"class":323},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[254,99639,99640,99642,99644,99646,99648],{"class":256,"line":1763},[254,99641,99620],{"class":264},[254,99643,583],{"class":313},[254,99645,642],{"class":264},[254,99647,633],{"class":313},[254,99649,4797],{"class":264},[254,99651,99652],{"class":256,"line":1768},[254,99653,93705],{"class":323},[254,99655,99656],{"class":256,"line":1782},[254,99657,99658],{"class":323},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[14,99660,99661],{},"②二维数组的分割",[14,99663,99664],{},"使用split()",[245,99666,99668],{"className":30519,"code":99667,"language":30521,"meta":174,"style":174},"#二维数组分割\naa=np.arange(1,37).reshape(6,6)\n#默认axis=0  传入整数平均分,按行来的\nnp.split(aa,3)\n#输出结果：\n'''\n[array([[ 1,  2,  3,  4,  5,  6],\n        [ 7,  8,  9, 10, 11, 12]]),\n array([[13, 14, 15, 16, 17, 18],\n        [19, 20, 21, 22, 23, 24]]),\n array([[25, 26, 27, 28, 29, 30],\n        [31, 32, 33, 34, 35, 36]])]\n '''\n#传入数组\nnp.split(aa,[2,5])\n#输出结果：\n'''\n[array([[ 1,  2,  3,  4,  5,  6],\n        [ 7,  8,  9, 10, 11, 12]]),\n array([[13, 14, 15, 16, 17, 18],\n        [19, 20, 21, 22, 23, 24],\n        [25, 26, 27, 28, 29, 30]]),\n array([[31, 32, 33, 34, 35, 36]])]\n'''\n#axis=1 按照列来分\nnp.split(aa,3,axis=1)\n#输出结果：\n'''\n[array([[ 1,  2],\n        [ 7,  8],\n        [13, 14],\n        [19, 20],\n        [25, 26],\n        [31, 32]]),\n array([[ 3,  4],\n        [ 9, 10],\n        [15, 16],\n        [21, 22],\n        [27, 28],\n        [33, 34]]),\n array([[ 5,  6],\n        [11, 12],\n        [17, 18],\n        [23, 24],\n        [29, 30],\n        [35, 36]])]\n '''\n#传入数组\nnp.split(aa,[1,2],axis=1)\n#结果：\n'''\n[array([[ 1],\n        [ 7],\n        [13],\n        [19],\n        [25],\n        [31]]),\n array([[ 2],\n        [ 8],\n        [14],\n        [20],\n        [26],\n        [32]]),\n array([[ 3,  4,  5,  6],\n        [ 9, 10, 11, 12],\n        [15, 16, 17, 18],\n        [21, 22, 23, 24],\n        [27, 28, 29, 30],\n        [33, 34, 35, 36]])]\n'''\n#在处理二维数组时也可以直接用vsplit()和hsplit()函数\nnp.vsplit(aa,3)\n#结果：\n'''\n[array([[ 1,  2,  3,  4,  5,  6],\n        [ 7,  8,  9, 10, 11, 12]]),\n array([[13, 14, 15, 16, 17, 18],\n        [19, 20, 21, 22, 23, 24]]),\n array([[25, 26, 27, 28, 29, 30],\n        [31, 32, 33, 34, 35, 36]])]\n'''\nnp.hsplit(aa,3)\n#结果：\n'''\n[array([[ 1,  2],\n        [ 7,  8],\n        [13, 14],\n        [19, 20],\n        [25, 26],\n        [31, 32]]),\n array([[ 3,  4],\n        [ 9, 10],\n        [15, 16],\n        [21, 22],\n        [27, 28],\n        [33, 34]]),\n array([[ 5,  6],\n        [11, 12],\n        [17, 18],\n        [23, 24],\n        [29, 30],\n        [35, 36]])]\n'''\nnp.vsplit(aa,[2,5])\n#结果：\n'''\n[array([[ 1,  2,  3,  4,  5,  6],\n        [ 7,  8,  9, 10, 11, 12]]),\n array([[13, 14, 15, 16, 17, 18],\n        [19, 20, 21, 22, 23, 24],\n        [25, 26, 27, 28, 29, 30]]),\n array([[31, 32, 33, 34, 35, 36]])]\n '''\n",[251,99669,99670,99675,99699,99704,99713,99717,99721,99726,99731,99736,99741,99746,99751,99756,99760,99773,99777,99781,99785,99789,99793,99798,99803,99808,99812,99817,99833,99837,99841,99846,99851,99856,99861,99866,99871,99876,99881,99886,99891,99896,99901,99906,99911,99916,99921,99926,99931,99935,99939,99959,99963,99967,99972,99977,99982,99987,99992,99997,100002,100007,100012,100017,100022,100027,100032,100037,100042,100047,100052,100057,100061,100066,100075,100079,100083,100087,100091,100095,100099,100103,100107,100111,100120,100124,100128,100132,100136,100140,100144,100148,100152,100156,100160,100164,100168,100172,100176,100180,100184,100188,100192,100196,100200,100204,100217,100221,100225,100229,100233,100237,100241,100245,100249],{"__ignoreMap":174},[254,99671,99672],{"class":256,"line":257},[254,99673,99674],{"class":323},"#二维数组分割\n",[254,99676,99677,99679,99681,99683,99685,99687,99689,99691,99693,99695,99697],{"class":256,"line":175},[254,99678,93447],{"class":264},[254,99680,310],{"class":260},[254,99682,93143],{"class":264},[254,99684,482],{"class":313},[254,99686,642],{"class":264},[254,99688,589],{"class":313},[254,99690,93148],{"class":264},[254,99692,608],{"class":313},[254,99694,642],{"class":264},[254,99696,608],{"class":313},[254,99698,271],{"class":264},[254,99700,99701],{"class":256,"line":1319},[254,99702,99703],{"class":323},"#默认axis=0  传入整数平均分,按行来的\n",[254,99705,99706,99709,99711],{"class":256,"line":1334},[254,99707,99708],{"class":264},"np.split(aa,",[254,99710,336],{"class":313},[254,99712,271],{"class":264},[254,99714,99715],{"class":256,"line":1340},[254,99716,95905],{"class":323},[254,99718,99719],{"class":256,"line":1354},[254,99720,94069],{"class":369},[254,99722,99723],{"class":256,"line":1360},[254,99724,99725],{"class":369},"[array([[ 1,  2,  3,  4,  5,  6],\n",[254,99727,99728],{"class":256,"line":1451},[254,99729,99730],{"class":369},"        [ 7,  8,  9, 10, 11, 12]]),\n",[254,99732,99733],{"class":256,"line":1457},[254,99734,99735],{"class":369}," array([[13, 14, 15, 16, 17, 18],\n",[254,99737,99738],{"class":256,"line":1469},[254,99739,99740],{"class":369},"        [19, 20, 21, 22, 23, 24]]),\n",[254,99742,99743],{"class":256,"line":1752},[254,99744,99745],{"class":369}," array([[25, 26, 27, 28, 29, 30],\n",[254,99747,99748],{"class":256,"line":1757},[254,99749,99750],{"class":369},"        [31, 32, 33, 34, 35, 36]])]\n",[254,99752,99753],{"class":256,"line":1763},[254,99754,99755],{"class":369}," '''\n",[254,99757,99758],{"class":256,"line":1768},[254,99759,99615],{"class":323},[254,99761,99762,99765,99767,99769,99771],{"class":256,"line":1782},[254,99763,99764],{"class":264},"np.split(aa,[",[254,99766,342],{"class":313},[254,99768,642],{"class":264},[254,99770,583],{"class":313},[254,99772,4797],{"class":264},[254,99774,99775],{"class":256,"line":1787},[254,99776,95905],{"class":323},[254,99778,99779],{"class":256,"line":1793},[254,99780,94069],{"class":369},[254,99782,99783],{"class":256,"line":1814},[254,99784,99725],{"class":369},[254,99786,99787],{"class":256,"line":1819},[254,99788,99730],{"class":369},[254,99790,99791],{"class":256,"line":1833},[254,99792,99735],{"class":369},[254,99794,99795],{"class":256,"line":1838},[254,99796,99797],{"class":369},"        [19, 20, 21, 22, 23, 24],\n",[254,99799,99800],{"class":256,"line":1867},[254,99801,99802],{"class":369},"        [25, 26, 27, 28, 29, 30]]),\n",[254,99804,99805],{"class":256,"line":1872},[254,99806,99807],{"class":369}," array([[31, 32, 33, 34, 35, 36]])]\n",[254,99809,99810],{"class":256,"line":1889},[254,99811,94069],{"class":369},[254,99813,99814],{"class":256,"line":1894},[254,99815,99816],{"class":323},"#axis=1 按照列来分\n",[254,99818,99819,99821,99823,99825,99827,99829,99831],{"class":256,"line":1899},[254,99820,99708],{"class":264},[254,99822,336],{"class":313},[254,99824,642],{"class":264},[254,99826,47655],{"class":5357},[254,99828,310],{"class":260},[254,99830,482],{"class":313},[254,99832,271],{"class":264},[254,99834,99835],{"class":256,"line":1904},[254,99836,95905],{"class":323},[254,99838,99839],{"class":256,"line":1918},[254,99840,94069],{"class":369},[254,99842,99843],{"class":256,"line":1923},[254,99844,99845],{"class":369},"[array([[ 1,  2],\n",[254,99847,99848],{"class":256,"line":2717},[254,99849,99850],{"class":369},"        [ 7,  8],\n",[254,99852,99853],{"class":256,"line":2731},[254,99854,99855],{"class":369},"        [13, 14],\n",[254,99857,99858],{"class":256,"line":2739},[254,99859,99860],{"class":369},"        [19, 20],\n",[254,99862,99863],{"class":256,"line":2744},[254,99864,99865],{"class":369},"        [25, 26],\n",[254,99867,99868],{"class":256,"line":2750},[254,99869,99870],{"class":369},"        [31, 32]]),\n",[254,99872,99873],{"class":256,"line":2756},[254,99874,99875],{"class":369}," array([[ 3,  4],\n",[254,99877,99878],{"class":256,"line":2761},[254,99879,99880],{"class":369},"        [ 9, 10],\n",[254,99882,99883],{"class":256,"line":8089},[254,99884,99885],{"class":369},"        [15, 16],\n",[254,99887,99888],{"class":256,"line":8113},[254,99889,99890],{"class":369},"        [21, 22],\n",[254,99892,99893],{"class":256,"line":8118},[254,99894,99895],{"class":369},"        [27, 28],\n",[254,99897,99898],{"class":256,"line":8124},[254,99899,99900],{"class":369},"        [33, 34]]),\n",[254,99902,99903],{"class":256,"line":8151},[254,99904,99905],{"class":369}," array([[ 5,  6],\n",[254,99907,99908],{"class":256,"line":8156},[254,99909,99910],{"class":369},"        [11, 12],\n",[254,99912,99913],{"class":256,"line":8162},[254,99914,99915],{"class":369},"        [17, 18],\n",[254,99917,99918],{"class":256,"line":8174},[254,99919,99920],{"class":369},"        [23, 24],\n",[254,99922,99923],{"class":256,"line":8186},[254,99924,99925],{"class":369},"        [29, 30],\n",[254,99927,99928],{"class":256,"line":8198},[254,99929,99930],{"class":369},"        [35, 36]])]\n",[254,99932,99933],{"class":256,"line":9857},[254,99934,99755],{"class":369},[254,99936,99937],{"class":256,"line":9882},[254,99938,99615],{"class":323},[254,99940,99941,99943,99945,99947,99949,99951,99953,99955,99957],{"class":256,"line":9905},[254,99942,99764],{"class":264},[254,99944,482],{"class":313},[254,99946,642],{"class":264},[254,99948,342],{"class":313},[254,99950,41750],{"class":264},[254,99952,47655],{"class":5357},[254,99954,310],{"class":260},[254,99956,482],{"class":313},[254,99958,271],{"class":264},[254,99960,99961],{"class":256,"line":9929},[254,99962,93705],{"class":323},[254,99964,99965],{"class":256,"line":9934},[254,99966,94069],{"class":369},[254,99968,99969],{"class":256,"line":9939},[254,99970,99971],{"class":369},"[array([[ 1],\n",[254,99973,99974],{"class":256,"line":9944},[254,99975,99976],{"class":369},"        [ 7],\n",[254,99978,99979],{"class":256,"line":9953},[254,99980,99981],{"class":369},"        [13],\n",[254,99983,99984],{"class":256,"line":9958},[254,99985,99986],{"class":369},"        [19],\n",[254,99988,99989],{"class":256,"line":9964},[254,99990,99991],{"class":369},"        [25],\n",[254,99993,99994],{"class":256,"line":9985},[254,99995,99996],{"class":369},"        [31]]),\n",[254,99998,99999],{"class":256,"line":9991},[254,100000,100001],{"class":369}," array([[ 2],\n",[254,100003,100004],{"class":256,"line":10005},[254,100005,100006],{"class":369},"        [ 8],\n",[254,100008,100009],{"class":256,"line":10011},[254,100010,100011],{"class":369},"        [14],\n",[254,100013,100014],{"class":256,"line":10038},[254,100015,100016],{"class":369},"        [20],\n",[254,100018,100019],{"class":256,"line":10047},[254,100020,100021],{"class":369},"        [26],\n",[254,100023,100024],{"class":256,"line":10053},[254,100025,100026],{"class":369},"        [32]]),\n",[254,100028,100029],{"class":256,"line":10061},[254,100030,100031],{"class":369}," array([[ 3,  4,  5,  6],\n",[254,100033,100034],{"class":256,"line":10066},[254,100035,100036],{"class":369},"        [ 9, 10, 11, 12],\n",[254,100038,100039],{"class":256,"line":16745},[254,100040,100041],{"class":369},"        [15, 16, 17, 18],\n",[254,100043,100044],{"class":256,"line":16751},[254,100045,100046],{"class":369},"        [21, 22, 23, 24],\n",[254,100048,100049],{"class":256,"line":16774},[254,100050,100051],{"class":369},"        [27, 28, 29, 30],\n",[254,100053,100054],{"class":256,"line":16780},[254,100055,100056],{"class":369},"        [33, 34, 35, 36]])]\n",[254,100058,100059],{"class":256,"line":16803},[254,100060,94069],{"class":369},[254,100062,100063],{"class":256,"line":16817},[254,100064,100065],{"class":323},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[254,100067,100068,100071,100073],{"class":256,"line":16837},[254,100069,100070],{"class":264},"np.vsplit(aa,",[254,100072,336],{"class":313},[254,100074,271],{"class":264},[254,100076,100077],{"class":256,"line":16843},[254,100078,93705],{"class":323},[254,100080,100081],{"class":256,"line":16854},[254,100082,94069],{"class":369},[254,100084,100085],{"class":256,"line":16877},[254,100086,99725],{"class":369},[254,100088,100089],{"class":256,"line":16899},[254,100090,99730],{"class":369},[254,100092,100093],{"class":256,"line":16904},[254,100094,99735],{"class":369},[254,100096,100097],{"class":256,"line":16910},[254,100098,99740],{"class":369},[254,100100,100101],{"class":256,"line":16924},[254,100102,99745],{"class":369},[254,100104,100105],{"class":256,"line":16937},[254,100106,99750],{"class":369},[254,100108,100109],{"class":256,"line":16942},[254,100110,94069],{"class":369},[254,100112,100113,100116,100118],{"class":256,"line":16956},[254,100114,100115],{"class":264},"np.hsplit(aa,",[254,100117,336],{"class":313},[254,100119,271],{"class":264},[254,100121,100122],{"class":256,"line":16961},[254,100123,93705],{"class":323},[254,100125,100126],{"class":256,"line":16967},[254,100127,94069],{"class":369},[254,100129,100130],{"class":256,"line":16972},[254,100131,99845],{"class":369},[254,100133,100134],{"class":256,"line":16986},[254,100135,99850],{"class":369},[254,100137,100138],{"class":256,"line":16991},[254,100139,99855],{"class":369},[254,100141,100142],{"class":256,"line":16996},[254,100143,99860],{"class":369},[254,100145,100146],{"class":256,"line":17010},[254,100147,99865],{"class":369},[254,100149,100150],{"class":256,"line":17022},[254,100151,99870],{"class":369},[254,100153,100154],{"class":256,"line":17027},[254,100155,99875],{"class":369},[254,100157,100158],{"class":256,"line":17040},[254,100159,99880],{"class":369},[254,100161,100162],{"class":256,"line":17045},[254,100163,99885],{"class":369},[254,100165,100166],{"class":256,"line":17050},[254,100167,99890],{"class":369},[254,100169,100170],{"class":256,"line":17055},[254,100171,99895],{"class":369},[254,100173,100174],{"class":256,"line":17068},[254,100175,99900],{"class":369},[254,100177,100178],{"class":256,"line":17073},[254,100179,99905],{"class":369},[254,100181,100182],{"class":256,"line":32774},[254,100183,99910],{"class":369},[254,100185,100186],{"class":256,"line":32780},[254,100187,99915],{"class":369},[254,100189,100190],{"class":256,"line":32786},[254,100191,99920],{"class":369},[254,100193,100194],{"class":256,"line":32792},[254,100195,99925],{"class":369},[254,100197,100198],{"class":256,"line":32798},[254,100199,99930],{"class":369},[254,100201,100202],{"class":256,"line":32809},[254,100203,94069],{"class":369},[254,100205,100206,100209,100211,100213,100215],{"class":256,"line":32815},[254,100207,100208],{"class":264},"np.vsplit(aa,[",[254,100210,342],{"class":313},[254,100212,642],{"class":264},[254,100214,583],{"class":313},[254,100216,4797],{"class":264},[254,100218,100219],{"class":256,"line":32835},[254,100220,93705],{"class":323},[254,100222,100223],{"class":256,"line":32841},[254,100224,94069],{"class":369},[254,100226,100227],{"class":256,"line":32852},[254,100228,99725],{"class":369},[254,100230,100231],{"class":256,"line":32858},[254,100232,99730],{"class":369},[254,100234,100235],{"class":256,"line":32864},[254,100236,99735],{"class":369},[254,100238,100239],{"class":256,"line":32870},[254,100240,99797],{"class":369},[254,100242,100243],{"class":256,"line":32876},[254,100244,99802],{"class":369},[254,100246,100247],{"class":256,"line":32882},[254,100248,99807],{"class":369},[254,100250,100251],{"class":256,"line":32888},[254,100252,99755],{"class":369},[5267,100254,100255],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":174,"searchDepth":175,"depth":175,"links":100257},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":99523,"description":23518},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100264,"title":100265,"body":100266,"description":23518,"extension":181,"meta":100760,"navigation":184,"path":100761,"seo":100762,"stem":100763,"__hash__":100764},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100267,"toc":100751},[100268,100271,100274,100299,100303,100362,100414,100418,100420,100456,100510,100512,100550,100621,100625,100630,100634,100637,100670,100673,100677,100680,100683,100686,100689,100694,100698,100701,100704,100707,100710,100715,100719,100724,100727,100748],[10,100269,100265],{"id":100270},"_9数学函数",[14,100272,100273],{},"补充回顾：python的列表推导式",[245,100275,100277],{"className":30519,"code":100276,"language":30521,"meta":174,"style":174},"[1\u002Fi for i in a]\n",[251,100278,100279],{"__ignoreMap":174},[254,100280,100281,100283,100285,100287,100290,100292,100294,100296],{"class":256,"line":257},[254,100282,1154],{"class":264},[254,100284,482],{"class":313},[254,100286,848],{"class":260},[254,100288,100289],{"class":264},"i ",[254,100291,3165],{"class":260},[254,100293,9579],{"class":264},[254,100295,26184],{"class":260},[254,100297,100298],{"class":264}," a]\n",[34,100300,100302],{"id":100301},"_91-求倒数","9.1 求倒数",[245,100304,100306],{"className":30519,"code":100305,"language":30521,"meta":174,"style":174},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[251,100307,100308,100313,100341,100353],{"__ignoreMap":174},[254,100309,100310],{"class":256,"line":257},[254,100311,100312],{"class":323},"#数组求倒数\n",[254,100314,100315,100317,100319,100321,100323,100325,100327,100329,100331,100333,100335,100337,100339],{"class":256,"line":175},[254,100316,42],{"class":264},[254,100318,310],{"class":260},[254,100320,1154],{"class":264},[254,100322,482],{"class":313},[254,100324,642],{"class":264},[254,100326,342],{"class":313},[254,100328,642],{"class":264},[254,100330,336],{"class":313},[254,100332,642],{"class":264},[254,100334,557],{"class":313},[254,100336,642],{"class":264},[254,100338,583],{"class":313},[254,100340,33387],{"class":264},[254,100342,100343,100345,100347,100350],{"class":256,"line":1319},[254,100344,527],{"class":264},[254,100346,310],{"class":260},[254,100348,100349],{"class":264},"np.array(a)",[254,100351,100352],{"class":323},"#将列表转换为数组\n",[254,100354,100355,100357,100359],{"class":256,"line":1334},[254,100356,482],{"class":313},[254,100358,848],{"class":260},[254,100360,100361],{"class":264},"b\n",[245,100363,100365],{"className":30519,"code":100364,"language":30521,"meta":174,"style":174},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[251,100366,100367,100395,100404,100409],{"__ignoreMap":174},[254,100368,100369,100371,100373,100375,100377,100379,100381,100383,100385,100387,100389,100391,100393],{"class":256,"line":257},[254,100370,42],{"class":264},[254,100372,310],{"class":260},[254,100374,1154],{"class":264},[254,100376,482],{"class":313},[254,100378,642],{"class":264},[254,100380,342],{"class":313},[254,100382,642],{"class":264},[254,100384,336],{"class":313},[254,100386,642],{"class":264},[254,100388,557],{"class":313},[254,100390,642],{"class":264},[254,100392,583],{"class":313},[254,100394,33387],{"class":264},[254,100396,100397,100399,100401],{"class":256,"line":175},[254,100398,527],{"class":264},[254,100400,310],{"class":260},[254,100402,100403],{"class":264},"np.array(a)\n",[254,100405,100406],{"class":256,"line":1319},[254,100407,100408],{"class":323},"#调用numpy中的函数reciprocal()\n",[254,100410,100411],{"class":256,"line":1334},[254,100412,100413],{"class":264},"np.reciprocal(b)\n",[34,100415,100417],{"id":100416},"_92-求平方","9.2 求平方",[14,100419,94671],{},[245,100421,100423],{"className":30519,"code":100422,"language":30521,"meta":174,"style":174},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[251,100424,100425,100430,100435,100451],{"__ignoreMap":174},[254,100426,100427],{"class":256,"line":257},[254,100428,100429],{"class":323},"#square()，求平方\n",[254,100431,100432],{"class":256,"line":175},[254,100433,100434],{"class":323},"#一维数组\n",[254,100436,100437,100439,100441,100443,100445,100447,100449],{"class":256,"line":1319},[254,100438,42],{"class":264},[254,100440,310],{"class":260},[254,100442,93143],{"class":264},[254,100444,482],{"class":313},[254,100446,642],{"class":264},[254,100448,710],{"class":313},[254,100450,271],{"class":264},[254,100452,100453],{"class":256,"line":1334},[254,100454,100455],{"class":264},"np.square(a)\n",[245,100457,100459],{"className":30519,"code":100458,"language":30521,"meta":174,"style":174},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[251,100460,100461,100466,100471,100492],{"__ignoreMap":174},[254,100462,100463],{"class":256,"line":257},[254,100464,100465],{"class":323},"#或者通过循环遍历的形式来计算\n",[254,100467,100468],{"class":256,"line":175},[254,100469,100470],{"class":323},"#这是一个列表\n",[254,100472,100473,100476,100478,100480,100482,100484,100486,100489],{"class":256,"line":1319},[254,100474,100475],{"class":264},"[i",[254,100477,719],{"class":260},[254,100479,100289],{"class":264},[254,100481,3165],{"class":260},[254,100483,9579],{"class":264},[254,100485,26184],{"class":260},[254,100487,100488],{"class":264}," a]",[254,100490,100491],{"class":323},"#这个求完之后在数列当中\n",[254,100493,100494,100497,100499,100501,100503,100505,100507],{"class":256,"line":1334},[254,100495,100496],{"class":264},"np.array([i",[254,100498,719],{"class":260},[254,100500,100289],{"class":264},[254,100502,3165],{"class":260},[254,100504,9579],{"class":264},[254,100506,26184],{"class":260},[254,100508,100509],{"class":264}," a])\n",[14,100511,93432],{},[245,100513,100515],{"className":30519,"code":100514,"language":30521,"meta":174,"style":174},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[251,100516,100517,100521,100545],{"__ignoreMap":174},[254,100518,100519],{"class":256,"line":257},[254,100520,93442],{"class":323},[254,100522,100523,100525,100527,100529,100531,100533,100535,100537,100539,100541,100543],{"class":256,"line":175},[254,100524,93447],{"class":264},[254,100526,310],{"class":260},[254,100528,93143],{"class":264},[254,100530,482],{"class":313},[254,100532,642],{"class":264},[254,100534,787],{"class":313},[254,100536,93148],{"class":264},[254,100538,557],{"class":313},[254,100540,642],{"class":264},[254,100542,336],{"class":313},[254,100544,271],{"class":264},[254,100546,100547],{"class":256,"line":1319},[254,100548,100549],{"class":264},"np.square(aa)\n",[245,100551,100553],{"className":30519,"code":100552,"language":30521,"meta":174,"style":174},"#传统的方式\nbb=np.empty_like(aa)\nfor i in range(4):\n    for j in range(3):\n        bb[i,j]=aa[i,j]*aa[i,j]\nbb\n",[251,100554,100555,100560,100569,100585,100601,100616],{"__ignoreMap":174},[254,100556,100557],{"class":256,"line":257},[254,100558,100559],{"class":323},"#传统的方式\n",[254,100561,100562,100564,100566],{"class":256,"line":175},[254,100563,98328],{"class":264},[254,100565,310],{"class":260},[254,100567,100568],{"class":264},"np.empty_like(aa)\n",[254,100570,100571,100573,100575,100577,100579,100581,100583],{"class":256,"line":1319},[254,100572,3165],{"class":260},[254,100574,9579],{"class":264},[254,100576,26184],{"class":260},[254,100578,32584],{"class":313},[254,100580,265],{"class":264},[254,100582,557],{"class":313},[254,100584,30927],{"class":264},[254,100586,100587,100589,100591,100593,100595,100597,100599],{"class":256,"line":1334},[254,100588,3341],{"class":260},[254,100590,9641],{"class":264},[254,100592,26184],{"class":260},[254,100594,32584],{"class":313},[254,100596,265],{"class":264},[254,100598,336],{"class":313},[254,100600,30927],{"class":264},[254,100602,100603,100606,100608,100611,100613],{"class":256,"line":1340},[254,100604,100605],{"class":264},"        bb[i,j]",[254,100607,310],{"class":260},[254,100609,100610],{"class":264},"aa[i,j]",[254,100612,719],{"class":260},[254,100614,100615],{"class":264},"aa[i,j]\n",[254,100617,100618],{"class":256,"line":1354},[254,100619,100620],{"class":264},"bb\n",[34,100622,100624],{"id":100623},"_93-求各元素的符号","9.3 求各元素的符号",[14,100626,100627],{},[1602,100628],{"alt":174,"src":100629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[34,100631,100633],{"id":100632},"_94-modf函数","9.4 modf函数",[14,100635,100636],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[245,100638,100640],{"className":30519,"code":100639,"language":30521,"meta":174,"style":174},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[251,100641,100642,100665],{"__ignoreMap":174},[254,100643,100644,100646,100648,100650,100652,100654,100656,100658,100660,100663],{"class":256,"line":257},[254,100645,42],{"class":264},[254,100647,310],{"class":260},[254,100649,93143],{"class":264},[254,100651,796],{"class":260},[254,100653,710],{"class":313},[254,100655,642],{"class":264},[254,100657,710],{"class":313},[254,100659,642],{"class":264},[254,100661,100662],{"class":313},"0.3",[254,100664,271],{"class":264},[254,100666,100667],{"class":256,"line":175},[254,100668,100669],{"class":264},"np.modf(a)\n",[14,100671,100672],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[34,100674,100676],{"id":100675},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[14,100678,100679],{},"np.cell()",[14,100681,100682],{},"np.floor()",[14,100684,100685],{},"np.rint()",[14,100687,100688],{},"对各元素分别向上取整、向下取整、四舍五入",[14,100690,100691],{},[1602,100692],{"alt":174,"src":100693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[34,100695,100697],{"id":100696},"_96-around函数","9.6 around()函数",[14,100699,100700],{},"around()函数也可以实现对数的小数位数进行操作",[14,100702,100703],{},"其中的参数：",[14,100705,100706],{},"1.要传的数组",[14,100708,100709],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[14,100711,100712],{},[1602,100713],{"alt":174,"src":100714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[34,100716,100718],{"id":100717},"_97-三角函数","9.7 三角函数",[14,100720,100721],{},[1602,100722],{"alt":174,"src":100723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[14,100725,100726],{},"引入图像模块非常重要",[245,100728,100730],{"className":30519,"code":100729,"language":30521,"meta":174,"style":174},"from matplotlib import pyplot as plt\n",[251,100731,100732],{"__ignoreMap":174},[254,100733,100734,100736,100739,100741,100744,100746],{"class":256,"line":257},[254,100735,30878],{"class":260},[254,100737,100738],{"class":264}," matplotlib ",[254,100740,30533],{"class":260},[254,100742,100743],{"class":264}," pyplot ",[254,100745,31524],{"class":260},[254,100747,31578],{"class":264},[5267,100749,100750],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":174,"searchDepth":175,"depth":175,"links":100752},[100753,100754,100755,100756,100757,100758,100759],{"id":100301,"depth":175,"text":100302},{"id":100416,"depth":175,"text":100417},{"id":100623,"depth":175,"text":100624},{"id":100632,"depth":175,"text":100633},{"id":100675,"depth":175,"text":100676},{"id":100696,"depth":175,"text":100697},{"id":100717,"depth":175,"text":100718},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100265,"description":23518},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":100766,"title":100767,"body":100768,"description":23518,"extension":181,"meta":100772,"navigation":184,"path":100773,"seo":100774,"stem":100775,"__hash__":100776},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":100769,"toc":100770},[],{"title":174,"searchDepth":175,"depth":175,"links":100771},[],{"category":50561},"\u002Fwiki\u002F2025-08-14-numpy",{"title":100767,"description":23518},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":100778,"title":100779,"body":100780,"description":174,"extension":181,"meta":102788,"navigation":184,"path":102789,"seo":102790,"stem":102791,"__hash__":102792},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":100781,"toc":102764},[100782,100785,100789,100792,100795,100801,100804,100827,100830,100864,100867,100908,100912,100915,101008,101011,101055,101058,101075,101078,101092,101095,101098,101143,101146,101183,101187,101190,101196,101201,101221,101225,101228,101294,101297,101315,101319,101322,101351,101361,101367,101371,101374,101380,101391,101395,101398,101428,101431,101711,101714,101717,101728,101731,101734,101756,101763,101766,101784,101787,101790,101804,101812,101815,101841,101847,101850,101853,101863,101875,101895,101904,101924,101934,101958,101971,101985,101990,102031,102048,102073,102085,102105,102111,102156,102175,102192,102205,102221,102228,102240,102249,102284,102305,102330,102343,102367,102382,102407,102410,102431,102440,102443,102454,102458,102461,102467,102479,102486,102490,102493,102505,102508,102522,102525,102535,102545,102548,102588,102591,102595,102601,102604,102618,102622,102625,102658,102662,102665,102688,102696,102699,102705,102711,102714,102717,102745,102749,102752,102758,102761],[10,100783,100779],{"id":100784},"_1环境安装与第一个-mujoco-程序",[34,100786,100788],{"id":100787},"_1目标说明","1.目标说明",[14,100790,100791],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[14,100793,100794],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[245,100796,100799],{"className":100797,"code":100798,"language":5328,"meta":174},[5326],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[251,100800,100798],{"__ignoreMap":174},[14,100802,100803],{},"需要掌握:",[21,100805,100806,100809,100812,100817,100822],{},[24,100807,100808],{},"Fedora 44 下 MuJoCo 的系统依赖",[24,100810,100811],{},"Python 虚拟环境创建",[24,100813,100814],{},[251,100815,100816],{},"mujoco.MjModel",[24,100818,100819],{},[251,100820,100821],{},"mujoco.MjData",[24,100823,100824],{},[251,100825,100826],{},"mujoco.mj_step(model, data)",[14,100828,100829],{},"MuJoCo 中最重要的两个对象:",[402,100831,100832,100842],{},[405,100833,100834],{},[408,100835,100836,100839],{},[411,100837,100838],{"align":23877},"对象",[411,100840,100841],{"align":23877},"含义",[449,100843,100844,100854],{},[408,100845,100846,100851],{},[454,100847,100848],{"align":23877},[251,100849,100850],{},"MjModel",[454,100852,100853],{"align":23877},"模型结构，来自 XML，基本不随时间变化",[408,100855,100856,100861],{},[454,100857,100858],{"align":23877},[251,100859,100860],{},"MjData",[454,100862,100863],{"align":23877},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[14,100865,100866],{},"可以先用一个类比理解：",[402,100868,100869,100879],{},[405,100870,100871],{},[408,100872,100873,100876],{},[411,100874,100875],{"align":23877},"类比",[411,100877,100878],{"align":23877},"MuJoCo 对象",[449,100880,100881,100890,100899],{},[408,100882,100883,100886],{},[454,100884,100885],{"align":23877},"游戏地图和角色配置",[454,100887,100888],{"align":23877},[251,100889,100850],{},[408,100891,100892,100895],{},[454,100893,100894],{"align":23877},"游戏运行到当前帧的状态",[454,100896,100897],{"align":23877},[251,100898,100860],{},[408,100900,100901,100904],{},[454,100902,100903],{"align":23877},"前进一帧",[454,100905,100906],{"align":23877},[251,100907,100826],{},[34,100909,100911],{"id":100910},"_2环境与依赖安装","2.环境与依赖安装",[14,100913,100914],{},"Fedora 44 系统依赖:",[245,100916,100918],{"className":23963,"code":100917,"language":23965,"meta":174,"style":174},"sudo dnf install -y \\\n  python3 python3-pip python3-virtualenv \\\n  mesa-libGL mesa-libGLU mesa-dri-drivers \\\n  libglvnd-glx libglvnd-opengl \\\n  glfw glfw-devel \\\n  libX11 libXcursor libXi libXinerama libXrandr \\\n  gcc gcc-c++ make\n",[251,100919,100920,100932,100945,100958,100968,100978,100997],{"__ignoreMap":174},[254,100921,100922,100924,100926,100928,100930],{"class":256,"line":257},[254,100923,24717],{"class":2103},[254,100925,26456],{"class":369},[254,100927,23975],{"class":369},[254,100929,26541],{"class":313},[254,100931,24819],{"class":313},[254,100933,100934,100937,100940,100943],{"class":256,"line":175},[254,100935,100936],{"class":369},"  python3",[254,100938,100939],{"class":369}," python3-pip",[254,100941,100942],{"class":369}," python3-virtualenv",[254,100944,24819],{"class":313},[254,100946,100947,100950,100953,100956],{"class":256,"line":1319},[254,100948,100949],{"class":369},"  mesa-libGL",[254,100951,100952],{"class":369}," mesa-libGLU",[254,100954,100955],{"class":369}," mesa-dri-drivers",[254,100957,24819],{"class":313},[254,100959,100960,100963,100966],{"class":256,"line":1334},[254,100961,100962],{"class":369},"  libglvnd-glx",[254,100964,100965],{"class":369}," libglvnd-opengl",[254,100967,24819],{"class":313},[254,100969,100970,100973,100976],{"class":256,"line":1340},[254,100971,100972],{"class":369},"  glfw",[254,100974,100975],{"class":369}," glfw-devel",[254,100977,24819],{"class":313},[254,100979,100980,100983,100986,100989,100992,100995],{"class":256,"line":1354},[254,100981,100982],{"class":369},"  libX11",[254,100984,100985],{"class":369}," libXcursor",[254,100987,100988],{"class":369}," libXi",[254,100990,100991],{"class":369}," libXinerama",[254,100993,100994],{"class":369}," libXrandr",[254,100996,24819],{"class":313},[254,100998,100999,101002,101005],{"class":256,"line":1360},[254,101000,101001],{"class":369},"  gcc",[254,101003,101004],{"class":369}," gcc-c++",[254,101006,101007],{"class":369}," make\n",[14,101009,101010],{},"创建 Python 环境:",[245,101012,101014],{"className":23963,"code":101013,"language":23965,"meta":174,"style":174},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[251,101015,101016,101030,101038],{"__ignoreMap":174},[254,101017,101018,101021,101024,101027],{"class":256,"line":257},[254,101019,101020],{"class":2103},"python3",[254,101022,101023],{"class":313}," -m",[254,101025,101026],{"class":369}," venv",[254,101028,101029],{"class":369}," .venv\n",[254,101031,101032,101035],{"class":256,"line":175},[254,101033,101034],{"class":313},"source",[254,101036,101037],{"class":369}," .venv\u002Fbin\u002Factivate\n",[254,101039,101040,101042,101044,101047,101049,101052],{"class":256,"line":1319},[254,101041,30521],{"class":2103},[254,101043,101023],{"class":313},[254,101045,101046],{"class":369}," pip",[254,101048,23975],{"class":369},[254,101050,101051],{"class":313}," --upgrade",[254,101053,101054],{"class":369}," pip\n",[14,101056,101057],{},"pip 安装:",[245,101059,101061],{"className":23963,"code":101060,"language":23965,"meta":174,"style":174},"pip install \"mujoco>=2.3\" numpy\n",[251,101062,101063],{"__ignoreMap":174},[254,101064,101065,101067,101069,101072],{"class":256,"line":257},[254,101066,23972],{"class":2103},[254,101068,23975],{"class":369},[254,101070,101071],{"class":369}," \"mujoco>=2.3\"",[254,101073,101074],{"class":369}," numpy\n",[14,101076,101077],{},"安装完成后，先做最小检查：",[245,101079,101081],{"className":23963,"code":101080,"language":23965,"meta":174,"style":174},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[251,101082,101083],{"__ignoreMap":174},[254,101084,101085,101087,101089],{"class":256,"line":257},[254,101086,30521],{"class":2103},[254,101088,30499],{"class":313},[254,101090,101091],{"class":369}," \"import mujoco; print(mujoco.__version__)\"\n",[14,101093,101094],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[14,101096,101097],{},"conda 安装:",[245,101099,101101],{"className":23963,"code":101100,"language":23965,"meta":174,"style":174},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[251,101102,101103,101123,101133],{"__ignoreMap":174},[254,101104,101105,101107,101109,101111,101114,101117,101120],{"class":256,"line":257},[254,101106,30471],{"class":2103},[254,101108,29317],{"class":369},[254,101110,25256],{"class":313},[254,101112,101113],{"class":369}," mujoco-study",[254,101115,101116],{"class":369}," python=",[254,101118,101119],{"class":313},"3.10",[254,101121,101122],{"class":313}," -y\n",[254,101124,101125,101127,101130],{"class":256,"line":175},[254,101126,30471],{"class":2103},[254,101128,101129],{"class":369}," activate",[254,101131,101132],{"class":369}," mujoco-study\n",[254,101134,101135,101137,101139,101141],{"class":256,"line":1319},[254,101136,23972],{"class":2103},[254,101138,23975],{"class":369},[254,101140,101071],{"class":369},[254,101142,101074],{"class":369},[14,101144,101145],{},"版本冲突说明:",[21,101147,101148,101154,101164,101173],{},[24,101149,101150,101151,28526],{},"不要安装 ",[251,101152,101153],{},"mujoco-py",[24,101155,101156,101157,101159,101160,101163],{},"如果旧项目里同时安装了 ",[251,101158,101153],{}," 和 ",[251,101161,101162],{},"mujoco","，建议新建干净虚拟环境。",[24,101165,101166,101169,101170,28526],{},[251,101167,101168],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[251,101171,101172],{},"~\u002F.mujoco\u002Fmujoco210",[24,101174,101175,101176,82680,101179,101182],{},"离屏渲染可能涉及 OpenGL 后端，",[251,101177,101178],{},"MUJOCO_GL=egl",[251,101180,101181],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[34,101184,101186],{"id":101185},"_3核心概念解释","3.核心概念解释",[14,101188,101189],{},"MuJoCo 的基本执行流程:",[245,101191,101194],{"className":101192,"code":101193,"language":5328,"meta":174},[5326],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[251,101195,101193],{"__ignoreMap":174},[14,101197,101198,101200],{},[251,101199,100850],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[14,101202,101203,101205,101206,477,101209,477,101212,477,101215,477,101218,28526],{},[251,101204,100860],{}," 存放仿真运行时状态，例如 ",[251,101207,101208],{},"data.time",[251,101210,101211],{},"data.qpos",[251,101213,101214],{},"data.qvel",[251,101216,101217],{},"data.ctrl",[251,101219,101220],{},"data.xpos",[225,101222,101224],{"id":101223},"xml-是什么","XML 是什么",[14,101226,101227],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[245,101229,101231],{"className":53208,"code":101230,"language":53210,"meta":174,"style":174},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n  \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\"\u002F>\n\u003C\u002Fbody>\n",[251,101232,101233,101255,101286],{"__ignoreMap":174},[254,101234,101235,101237,101239,101241,101243,101245,101248,101250,101253],{"class":256,"line":257},[254,101236,1174],{"class":264},[254,101238,51941],{"class":51441},[254,101240,15061],{"class":2103},[254,101242,310],{"class":264},[254,101244,53632],{"class":369},[254,101246,101247],{"class":2103}," pos",[254,101249,310],{"class":264},[254,101251,101252],{"class":369},"\"0 0 1\"",[254,101254,51448],{"class":264},[254,101256,101257,101259,101262,101264,101266,101269,101271,101273,101275,101278,101280,101283],{"class":256,"line":175},[254,101258,52285],{"class":264},[254,101260,101261],{"class":51441},"geom",[254,101263,15061],{"class":2103},[254,101265,310],{"class":264},[254,101267,101268],{"class":369},"\"box_geom\"",[254,101270,53965],{"class":2103},[254,101272,310],{"class":264},[254,101274,53632],{"class":369},[254,101276,101277],{"class":2103}," size",[254,101279,310],{"class":264},[254,101281,101282],{"class":369},"\"0.1 0.1 0.1\"",[254,101284,101285],{"class":264},"\u002F>\n",[254,101287,101288,101290,101292],{"class":256,"line":1319},[254,101289,51926],{"class":264},[254,101291,51941],{"class":51441},[254,101293,51448],{"class":264},[14,101295,101296],{},"这段意思是：",[21,101298,101299,101305,101312],{},[24,101300,101301,101302,101304],{},"创建一个叫 ",[251,101303,53855],{}," 的刚体。",[24,101306,101307,101308,101311],{},"它初始放在 ",[251,101309,101310],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[24,101313,101314],{},"它里面有一个盒子形状的几何体。",[225,101316,101318],{"id":101317},"timestep-是什么","timestep 是什么",[14,101320,101321],{},"XML 里的：",[245,101323,101325],{"className":53208,"code":101324,"language":53210,"meta":174,"style":174},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[251,101326,101327],{"__ignoreMap":174},[254,101328,101329,101331,101333,101336,101338,101341,101344,101346,101349],{"class":256,"line":257},[254,101330,1174],{"class":264},[254,101332,69307],{"class":51441},[254,101334,101335],{"class":2103}," timestep",[254,101337,310],{"class":264},[254,101339,101340],{"class":369},"\"0.01\"",[254,101342,101343],{"class":2103}," gravity",[254,101345,310],{"class":264},[254,101347,101348],{"class":369},"\"0 0 -9.81\"",[254,101350,101285],{"class":264},[14,101352,101353,101354,101357,101358,101360],{},"表示每调用一次 ",[251,101355,101356],{},"mj_step","，仿真时间前进 ",[251,101359,39127],{}," 秒。循环 100 次，大约就是 1 秒：",[245,101362,101365],{"className":101363,"code":101364,"language":5328,"meta":174},[5326],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[251,101366,101364],{"__ignoreMap":174},[225,101368,101370],{"id":101369},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[14,101372,101373],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[245,101375,101378],{"className":101376,"code":101377,"language":5328,"meta":174},[5326],"x y z qw qx qy qz\n",[251,101379,101377],{"__ignoreMap":174},[14,101381,101382,101383,101386,101387,101390],{},"表示一个自由刚体的位置和姿态。其中 ",[251,101384,101385],{},"x y z"," 是位置，",[251,101388,101389],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[34,101392,101394],{"id":101393},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[14,101396,101397],{},"新建文件:",[245,101399,101401],{"className":23963,"code":101400,"language":23965,"meta":174,"style":174},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[251,101402,101403,101413,101420],{"__ignoreMap":174},[254,101404,101405,101408,101410],{"class":256,"line":257},[254,101406,101407],{"class":2103},"mkdir",[254,101409,29357],{"class":313},[254,101411,101412],{"class":369}," mujoco_tutorial\n",[254,101414,101415,101418],{"class":256,"line":175},[254,101416,101417],{"class":313},"cd",[254,101419,101412],{"class":369},[254,101421,101422,101425],{"class":256,"line":1319},[254,101423,101424],{"class":2103},"touch",[254,101426,101427],{"class":369}," ch1_first_sim.py\n",[14,101429,101430],{},"写入:",[245,101432,101434],{"className":30519,"code":101433,"language":30521,"meta":174,"style":174},"import mujoco\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"first_sim\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n\n  \u003Cworldbody>\n    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n\n    \u003Cbody name=\"box\" pos=\"0 0 1\">\n      \u003Cfreejoint name=\"box_free\"\u002F>\n      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n\n    print(\"nq:\", model.nq)\n    print(\"nv:\", model.nv)\n    print(\"nu:\", model.nu)\n    print(\"initial time:\", data.time)\n    print(\"initial qpos:\", data.qpos.copy())\n\n    for _ in range(100):\n        mujoco.mj_step(model, data)\n\n    print(\"final time:\", data.time)\n    print(\"final qpos:\", data.qpos.copy())\n\n\nif __name__ == \"__main__\":\n    main()\n",[251,101435,101436,101443,101447,101451,101461,101466,101471,101475,101480,101485,101489,101494,101499,101504,101509,101514,101519,101523,101527,101531,101544,101558,101568,101572,101584,101596,101608,101620,101632,101636,101653,101658,101662,101673,101684,101688,101692,101706],{"__ignoreMap":174},[254,101437,101438,101440],{"class":256,"line":257},[254,101439,30533],{"class":260},[254,101441,101442],{"class":264}," mujoco\n",[254,101444,101445],{"class":256,"line":175},[254,101446,2540],{"emptyLinePlaceholder":184},[254,101448,101449],{"class":256,"line":1319},[254,101450,2540],{"emptyLinePlaceholder":184},[254,101452,101453,101456,101458],{"class":256,"line":1334},[254,101454,101455],{"class":313},"XML",[254,101457,13705],{"class":260},[254,101459,101460],{"class":369}," \"\"\"\n",[254,101462,101463],{"class":256,"line":1340},[254,101464,101465],{"class":369},"\u003Cmujoco model=\"first_sim\">\n",[254,101467,101468],{"class":256,"line":1354},[254,101469,101470],{"class":369},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[254,101472,101473],{"class":256,"line":1360},[254,101474,2540],{"emptyLinePlaceholder":184},[254,101476,101477],{"class":256,"line":1451},[254,101478,101479],{"class":369},"  \u003Cworldbody>\n",[254,101481,101482],{"class":256,"line":1457},[254,101483,101484],{"class":369},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[254,101486,101487],{"class":256,"line":1469},[254,101488,2540],{"emptyLinePlaceholder":184},[254,101490,101491],{"class":256,"line":1752},[254,101492,101493],{"class":369},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[254,101495,101496],{"class":256,"line":1757},[254,101497,101498],{"class":369},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[254,101500,101501],{"class":256,"line":1763},[254,101502,101503],{"class":369},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[254,101505,101506],{"class":256,"line":1768},[254,101507,101508],{"class":369},"    \u003C\u002Fbody>\n",[254,101510,101511],{"class":256,"line":1782},[254,101512,101513],{"class":369},"  \u003C\u002Fworldbody>\n",[254,101515,101516],{"class":256,"line":1787},[254,101517,101518],{"class":369},"\u003C\u002Fmujoco>\n",[254,101520,101521],{"class":256,"line":1793},[254,101522,95839],{"class":369},[254,101524,101525],{"class":256,"line":1814},[254,101526,2540],{"emptyLinePlaceholder":184},[254,101528,101529],{"class":256,"line":1819},[254,101530,2540],{"emptyLinePlaceholder":184},[254,101532,101533,101535,101537,101540,101542],{"class":256,"line":1833},[254,101534,32088],{"class":260},[254,101536,2113],{"class":2103},[254,101538,101539],{"class":264},"() -> ",[254,101541,95827],{"class":313},[254,101543,3879],{"class":264},[254,101545,101546,101549,101551,101554,101556],{"class":256,"line":1838},[254,101547,101548],{"class":264},"    model ",[254,101550,310],{"class":260},[254,101552,101553],{"class":264}," mujoco.MjModel.from_xml_string(",[254,101555,101455],{"class":313},[254,101557,271],{"class":264},[254,101559,101560,101563,101565],{"class":256,"line":1867},[254,101561,101562],{"class":264},"    data ",[254,101564,310],{"class":260},[254,101566,101567],{"class":264}," mujoco.MjData(model)\n",[254,101569,101570],{"class":256,"line":1872},[254,101571,2540],{"emptyLinePlaceholder":184},[254,101573,101574,101576,101578,101581],{"class":256,"line":1889},[254,101575,31440],{"class":313},[254,101577,265],{"class":264},[254,101579,101580],{"class":369},"\"nq:\"",[254,101582,101583],{"class":264},", model.nq)\n",[254,101585,101586,101588,101590,101593],{"class":256,"line":1894},[254,101587,31440],{"class":313},[254,101589,265],{"class":264},[254,101591,101592],{"class":369},"\"nv:\"",[254,101594,101595],{"class":264},", model.nv)\n",[254,101597,101598,101600,101602,101605],{"class":256,"line":1899},[254,101599,31440],{"class":313},[254,101601,265],{"class":264},[254,101603,101604],{"class":369},"\"nu:\"",[254,101606,101607],{"class":264},", model.nu)\n",[254,101609,101610,101612,101614,101617],{"class":256,"line":1904},[254,101611,31440],{"class":313},[254,101613,265],{"class":264},[254,101615,101616],{"class":369},"\"initial time:\"",[254,101618,101619],{"class":264},", data.time)\n",[254,101621,101622,101624,101626,101629],{"class":256,"line":1918},[254,101623,31440],{"class":313},[254,101625,265],{"class":264},[254,101627,101628],{"class":369},"\"initial qpos:\"",[254,101630,101631],{"class":264},", data.qpos.copy())\n",[254,101633,101634],{"class":256,"line":1923},[254,101635,2540],{"emptyLinePlaceholder":184},[254,101637,101638,101640,101643,101645,101647,101649,101651],{"class":256,"line":2717},[254,101639,3341],{"class":260},[254,101641,101642],{"class":264}," _ ",[254,101644,26184],{"class":260},[254,101646,32584],{"class":313},[254,101648,265],{"class":264},[254,101650,575],{"class":313},[254,101652,30927],{"class":264},[254,101654,101655],{"class":256,"line":2731},[254,101656,101657],{"class":264},"        mujoco.mj_step(model, data)\n",[254,101659,101660],{"class":256,"line":2739},[254,101661,2540],{"emptyLinePlaceholder":184},[254,101663,101664,101666,101668,101671],{"class":256,"line":2744},[254,101665,31440],{"class":313},[254,101667,265],{"class":264},[254,101669,101670],{"class":369},"\"final time:\"",[254,101672,101619],{"class":264},[254,101674,101675,101677,101679,101682],{"class":256,"line":2750},[254,101676,31440],{"class":313},[254,101678,265],{"class":264},[254,101680,101681],{"class":369},"\"final qpos:\"",[254,101683,101631],{"class":264},[254,101685,101686],{"class":256,"line":2756},[254,101687,2540],{"emptyLinePlaceholder":184},[254,101689,101690],{"class":256,"line":2761},[254,101691,2540],{"emptyLinePlaceholder":184},[254,101693,101694,101696,101698,101701,101704],{"class":256,"line":8089},[254,101695,1671],{"class":260},[254,101697,31361],{"class":313},[254,101699,101700],{"class":260}," ==",[254,101702,101703],{"class":369}," \"__main__\"",[254,101705,3879],{"class":264},[254,101707,101708],{"class":256,"line":8113},[254,101709,101710],{"class":264},"    main()\n",[225,101712,101713],{"id":101713},"代码逐段解释",[14,101715,101716],{},"导入库：",[245,101718,101720],{"className":30519,"code":101719,"language":30521,"meta":174,"style":174},"import mujoco\n",[251,101721,101722],{"__ignoreMap":174},[254,101723,101724,101726],{"class":256,"line":257},[254,101725,30533],{"class":260},[254,101727,101442],{"class":264},[14,101729,101730],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[14,101732,101733],{},"定义 XML：",[245,101735,101737],{"className":30519,"code":101736,"language":30521,"meta":174,"style":174},"XML = \"\"\"\n...\n\"\"\"\n",[251,101738,101739,101747,101752],{"__ignoreMap":174},[254,101740,101741,101743,101745],{"class":256,"line":257},[254,101742,101455],{"class":313},[254,101744,13705],{"class":260},[254,101746,101460],{"class":369},[254,101748,101749],{"class":256,"line":175},[254,101750,101751],{"class":369},"...\n",[254,101753,101754],{"class":256,"line":1319},[254,101755,95839],{"class":369},[14,101757,101758,101759,101762],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[251,101760,101761],{},"freejoint"," 的方块。",[14,101764,101765],{},"编译模型：",[245,101767,101769],{"className":30519,"code":101768,"language":30521,"meta":174,"style":174},"model = mujoco.MjModel.from_xml_string(XML)\n",[251,101770,101771],{"__ignoreMap":174},[254,101772,101773,101776,101778,101780,101782],{"class":256,"line":257},[254,101774,101775],{"class":264},"model ",[254,101777,310],{"class":260},[254,101779,101553],{"class":264},[254,101781,101455],{"class":313},[254,101783,271],{"class":264},[14,101785,101786],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[14,101788,101789],{},"创建数据：",[245,101791,101793],{"className":30519,"code":101792,"language":30521,"meta":174,"style":174},"data = mujoco.MjData(model)\n",[251,101794,101795],{"__ignoreMap":174},[254,101796,101797,101800,101802],{"class":256,"line":257},[254,101798,101799],{"class":264},"data ",[254,101801,310],{"class":260},[254,101803,101567],{"class":264},[14,101805,101806,101808,101809,101811],{},[251,101807,33542],{}," 会保存仿真当前状态。刚创建时，时间是 ",[251,101810,456],{},"，方块还在初始位置。",[14,101813,101814],{},"推进仿真：",[245,101816,101818],{"className":30519,"code":101817,"language":30521,"meta":174,"style":174},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[251,101819,101820,101836],{"__ignoreMap":174},[254,101821,101822,101824,101826,101828,101830,101832,101834],{"class":256,"line":257},[254,101823,3165],{"class":260},[254,101825,101642],{"class":264},[254,101827,26184],{"class":260},[254,101829,32584],{"class":313},[254,101831,265],{"class":264},[254,101833,575],{"class":313},[254,101835,30927],{"class":264},[254,101837,101838],{"class":256,"line":175},[254,101839,101840],{"class":264},"    mujoco.mj_step(model, data)\n",[14,101842,101843,101844,101846],{},"每次 ",[251,101845,101356],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[225,101848,101849],{"id":101849},"代码逐行细讲",[14,101851,101852],{},"下面把完整代码按新手视角拆开讲。",[245,101854,101855],{"className":30519,"code":101719,"language":30521,"meta":174,"style":174},[251,101856,101857],{"__ignoreMap":174},[254,101858,101859,101861],{"class":256,"line":257},[254,101860,30533],{"class":260},[254,101862,101442],{"class":264},[14,101864,101865,101867,101868,477,101870,477,101872,28526],{},[251,101866,30533],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[251,101869,100816],{},[251,101871,100821],{},[251,101873,101874],{},"mujoco.mj_step",[245,101876,101877],{"className":30519,"code":101736,"language":30521,"meta":174,"style":174},[251,101878,101879,101887,101891],{"__ignoreMap":174},[254,101880,101881,101883,101885],{"class":256,"line":257},[254,101882,101455],{"class":313},[254,101884,13705],{"class":260},[254,101886,101460],{"class":369},[254,101888,101889],{"class":256,"line":175},[254,101890,101751],{"class":369},[254,101892,101893],{"class":256,"line":1319},[254,101894,95839],{"class":369},[14,101896,101897,101899,101900,101903],{},[251,101898,101455],{}," 是一个变量名。右边的三引号 ",[251,101901,101902],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[245,101905,101906],{"className":53208,"code":101465,"language":53210,"meta":174,"style":174},[251,101907,101908],{"__ignoreMap":174},[254,101909,101910,101912,101914,101917,101919,101922],{"class":256,"line":257},[254,101911,1174],{"class":264},[254,101913,101162],{"class":51441},[254,101915,101916],{"class":2103}," model",[254,101918,310],{"class":264},[254,101920,101921],{"class":369},"\"first_sim\"",[254,101923,51448],{"class":264},[14,101925,101926,101927,101930,101931,28526],{},"这是 XML 的根标签。",[251,101928,101929],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[251,101932,101933],{},"first_sim",[245,101935,101936],{"className":53208,"code":101324,"language":53210,"meta":174,"style":174},[251,101937,101938],{"__ignoreMap":174},[254,101939,101940,101942,101944,101946,101948,101950,101952,101954,101956],{"class":256,"line":257},[254,101941,1174],{"class":264},[254,101943,69307],{"class":51441},[254,101945,101335],{"class":2103},[254,101947,310],{"class":264},[254,101949,101340],{"class":369},[254,101951,101343],{"class":2103},[254,101953,310],{"class":264},[254,101955,101348],{"class":369},[254,101957,101285],{"class":264},[14,101959,101960,101962,101963,101966,101967,101970],{},[251,101961,69307],{}," 用来设置仿真参数。",[251,101964,101965],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[251,101968,101969],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[245,101972,101974],{"className":53208,"code":101973,"language":53210,"meta":174,"style":174},"\u003Cworldbody>\n",[251,101975,101976],{"__ignoreMap":174},[254,101977,101978,101980,101983],{"class":256,"line":257},[254,101979,1174],{"class":264},[254,101981,101982],{"class":51441},"worldbody",[254,101984,51448],{"class":264},[14,101986,101987,101989],{},[251,101988,101982],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[245,101991,101993],{"className":53208,"code":101992,"language":53210,"meta":174,"style":174},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[251,101994,101995],{"__ignoreMap":174},[254,101996,101997,101999,102001,102003,102005,102008,102010,102012,102015,102017,102019,102022,102024,102026,102029],{"class":256,"line":257},[254,101998,1174],{"class":264},[254,102000,101261],{"class":51441},[254,102002,15061],{"class":2103},[254,102004,310],{"class":264},[254,102006,102007],{"class":369},"\"floor\"",[254,102009,53965],{"class":2103},[254,102011,310],{"class":264},[254,102013,102014],{"class":369},"\"plane\"",[254,102016,101277],{"class":2103},[254,102018,310],{"class":264},[254,102020,102021],{"class":369},"\"2 2 0.1\"",[254,102023,78908],{"class":2103},[254,102025,310],{"class":264},[254,102027,102028],{"class":369},"\"0.8 0.8 0.8 1\"",[254,102030,101285],{"class":264},[14,102032,102033,102034,102036,102037,102040,102041,102044,102045,102047],{},"这行创建地面。",[251,102035,101261],{}," 是几何体。",[251,102038,102039],{},"name=\"floor\""," 是名字。",[251,102042,102043],{},"type=\"plane\""," 表示平面。",[251,102046,55251],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[245,102049,102051],{"className":53208,"code":102050,"language":53210,"meta":174,"style":174},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[251,102052,102053],{"__ignoreMap":174},[254,102054,102055,102057,102059,102061,102063,102065,102067,102069,102071],{"class":256,"line":257},[254,102056,1174],{"class":264},[254,102058,51941],{"class":51441},[254,102060,15061],{"class":2103},[254,102062,310],{"class":264},[254,102064,53632],{"class":369},[254,102066,101247],{"class":2103},[254,102068,310],{"class":264},[254,102070,101252],{"class":369},[254,102072,51448],{"class":264},[14,102074,102075,102076,28526,102078,102081,102082,102084],{},"这行创建一个刚体，名字叫 ",[251,102077,53855],{},[251,102079,102080],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[251,102083,101310],{},"，也就是离地面 1 米高。",[245,102086,102088],{"className":53208,"code":102087,"language":53210,"meta":174,"style":174},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[251,102089,102090],{"__ignoreMap":174},[254,102091,102092,102094,102096,102098,102100,102103],{"class":256,"line":257},[254,102093,1174],{"class":264},[254,102095,101761],{"class":51441},[254,102097,15061],{"class":2103},[254,102099,310],{"class":264},[254,102101,102102],{"class":369},"\"box_free\"",[254,102104,101285],{"class":264},[14,102106,102107,102108,102110],{},"这行很重要。",[251,102109,101761],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[245,102112,102114],{"className":53208,"code":102113,"language":53210,"meta":174,"style":174},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[251,102115,102116],{"__ignoreMap":174},[254,102117,102118,102120,102122,102124,102126,102128,102130,102132,102134,102136,102138,102140,102143,102145,102147,102149,102151,102154],{"class":256,"line":257},[254,102119,1174],{"class":264},[254,102121,101261],{"class":51441},[254,102123,15061],{"class":2103},[254,102125,310],{"class":264},[254,102127,101268],{"class":369},[254,102129,53965],{"class":2103},[254,102131,310],{"class":264},[254,102133,53632],{"class":369},[254,102135,101277],{"class":2103},[254,102137,310],{"class":264},[254,102139,101282],{"class":369},[254,102141,102142],{"class":2103}," mass",[254,102144,310],{"class":264},[254,102146,3818],{"class":369},[254,102148,78908],{"class":2103},[254,102150,310],{"class":264},[254,102152,102153],{"class":369},"\"1 0 0 1\"",[254,102155,101285],{"class":264},[14,102157,102158,102159,102162,102163,102166,102167,102170,102171,102174],{},"这行给 box body 添加一个盒子形状。",[251,102160,102161],{},"type=\"box\""," 表示形状是盒子。",[251,102164,102165],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[251,102168,102169],{},"mass=\"1\""," 表示质量是 1。",[251,102172,102173],{},"rgba=\"1 0 0 1\""," 表示红色。",[245,102176,102178],{"className":30519,"code":102177,"language":30521,"meta":174,"style":174},"def main() -> None:\n",[251,102179,102180],{"__ignoreMap":174},[254,102181,102182,102184,102186,102188,102190],{"class":256,"line":257},[254,102183,32088],{"class":260},[254,102185,2113],{"class":2103},[254,102187,101539],{"class":264},[254,102189,95827],{"class":313},[254,102191,3879],{"class":264},[14,102193,102194,102196,102197,102200,102201,102204],{},[251,102195,32088],{}," 用来定义函数。这里定义了一个叫 ",[251,102198,102199],{},"main"," 的函数。",[251,102202,102203],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[245,102206,102207],{"className":30519,"code":101768,"language":30521,"meta":174,"style":174},[251,102208,102209],{"__ignoreMap":174},[254,102210,102211,102213,102215,102217,102219],{"class":256,"line":257},[254,102212,101775],{"class":264},[254,102214,310],{"class":260},[254,102216,101553],{"class":264},[254,102218,101455],{"class":313},[254,102220,271],{"class":264},[14,102222,102223,102224,102227],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[251,102225,102226],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[245,102229,102230],{"className":30519,"code":101792,"language":30521,"meta":174,"style":174},[251,102231,102232],{"__ignoreMap":174},[254,102233,102234,102236,102238],{"class":256,"line":257},[254,102235,101799],{"class":264},[254,102237,310],{"class":260},[254,102239,101567],{"class":264},[14,102241,102242,102243,102245,102246,102248],{},"这行创建仿真数据。",[251,102244,33542],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[251,102247,33542],{}," 都会变化。",[245,102250,102252],{"className":30519,"code":102251,"language":30521,"meta":174,"style":174},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[251,102253,102254,102264,102274],{"__ignoreMap":174},[254,102255,102256,102258,102260,102262],{"class":256,"line":257},[254,102257,30556],{"class":313},[254,102259,265],{"class":264},[254,102261,101580],{"class":369},[254,102263,101583],{"class":264},[254,102265,102266,102268,102270,102272],{"class":256,"line":175},[254,102267,30556],{"class":313},[254,102269,265],{"class":264},[254,102271,101592],{"class":369},[254,102273,101595],{"class":264},[254,102275,102276,102278,102280,102282],{"class":256,"line":1319},[254,102277,30556],{"class":313},[254,102279,265],{"class":264},[254,102281,101604],{"class":369},[254,102283,101607],{"class":264},[14,102285,102286,102288,102289,102292,102293,102296,102297,102300,102301,102304],{},[251,102287,30556],{}," 用来输出信息。",[251,102290,102291],{},"model.nq"," 是位置变量数量，",[251,102294,102295],{},"model.nv"," 是速度变量数量，",[251,102298,102299],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[251,102302,102303],{},"nu"," 是 0。",[245,102306,102308],{"className":30519,"code":102307,"language":30521,"meta":174,"style":174},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[251,102309,102310,102320],{"__ignoreMap":174},[254,102311,102312,102314,102316,102318],{"class":256,"line":257},[254,102313,30556],{"class":313},[254,102315,265],{"class":264},[254,102317,101616],{"class":369},[254,102319,101619],{"class":264},[254,102321,102322,102324,102326,102328],{"class":256,"line":175},[254,102323,30556],{"class":313},[254,102325,265],{"class":264},[254,102327,101628],{"class":369},[254,102329,101631],{"class":264},[14,102331,102332,102333,102335,102336,102338,102339,102342],{},"这里打印初始时间和初始位置。",[251,102334,101208],{}," 一开始是 0。",[251,102337,101211],{}," 是位置数组。",[251,102340,102341],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[245,102344,102345],{"className":30519,"code":101817,"language":30521,"meta":174,"style":174},[251,102346,102347,102363],{"__ignoreMap":174},[254,102348,102349,102351,102353,102355,102357,102359,102361],{"class":256,"line":257},[254,102350,3165],{"class":260},[254,102352,101642],{"class":264},[254,102354,26184],{"class":260},[254,102356,32584],{"class":313},[254,102358,265],{"class":264},[254,102360,575],{"class":313},[254,102362,30927],{"class":264},[254,102364,102365],{"class":256,"line":175},[254,102366,101840],{"class":264},[14,102368,102369,102371,102372,102375,102376,102378,102379,102381],{},[251,102370,3165],{}," 是循环。",[251,102373,102374],{},"range(100)"," 表示循环 100 次。",[251,102377,1256],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[251,102380,101356],{},"，仿真就前进一步。",[245,102383,102385],{"className":30519,"code":102384,"language":30521,"meta":174,"style":174},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[251,102386,102387,102397],{"__ignoreMap":174},[254,102388,102389,102391,102393,102395],{"class":256,"line":257},[254,102390,30556],{"class":313},[254,102392,265],{"class":264},[254,102394,101670],{"class":369},[254,102396,101619],{"class":264},[254,102398,102399,102401,102403,102405],{"class":256,"line":175},[254,102400,30556],{"class":313},[254,102402,265],{"class":264},[254,102404,101681],{"class":369},[254,102406,101631],{"class":264},[14,102408,102409],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[245,102411,102413],{"className":30519,"code":102412,"language":30521,"meta":174,"style":174},"if __name__ == \"__main__\":\n    main()\n",[251,102414,102415,102427],{"__ignoreMap":174},[254,102416,102417,102419,102421,102423,102425],{"class":256,"line":257},[254,102418,1671],{"class":260},[254,102420,31361],{"class":313},[254,102422,101700],{"class":260},[254,102424,101703],{"class":369},[254,102426,3879],{"class":264},[254,102428,102429],{"class":256,"line":175},[254,102430,101710],{"class":264},[14,102432,102433,102434,102437,102438,28526],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[251,102435,102436],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[251,102439,102436],{},[14,102441,102442],{},"运行:",[245,102444,102446],{"className":23963,"code":102445,"language":23965,"meta":174,"style":174},"python ch1_first_sim.py\n",[251,102447,102448],{"__ignoreMap":174},[254,102449,102450,102452],{"class":256,"line":257},[254,102451,30521],{"class":2103},[254,102453,101427],{"class":369},[34,102455,102457],{"id":102456},"_5运行结果说明","5.运行结果说明",[14,102459,102460],{},"你应该看到类似输出:",[245,102462,102465],{"className":102463,"code":102464,"language":5328,"meta":174},[5326],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[251,102466,102464],{"__ignoreMap":174},[14,102468,102469,102471,102472,102475,102476,28526],{},[251,102470,101761],{}," 有 7 个位置变量: ",[251,102473,102474],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[251,102477,102478],{},"vx vy vz wx wy wz",[14,102480,102481,102482,102485],{},"你还会看到 ",[251,102483,102484],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[34,102487,102489],{"id":102488},"_6验证步骤","6.验证步骤",[14,102491,102492],{},"确认版本:",[245,102494,102495],{"className":23963,"code":101080,"language":23965,"meta":174,"style":174},[251,102496,102497],{"__ignoreMap":174},[254,102498,102499,102501,102503],{"class":256,"line":257},[254,102500,30521],{"class":2103},[254,102502,30499],{"class":313},[254,102504,101091],{"class":369},[14,102506,102507],{},"确认导入的是官方 bindings:",[245,102509,102511],{"className":23963,"code":102510,"language":23965,"meta":174,"style":174},"python -c \"import mujoco; print(mujoco)\"\n",[251,102512,102513],{"__ignoreMap":174},[254,102514,102515,102517,102519],{"class":256,"line":257},[254,102516,30521],{"class":2103},[254,102518,30499],{"class":313},[254,102520,102521],{"class":369}," \"import mujoco; print(mujoco)\"\n",[14,102523,102524],{},"运行程序:",[245,102526,102527],{"className":23963,"code":102445,"language":23965,"meta":174,"style":174},[251,102528,102529],{"__ignoreMap":174},[254,102530,102531,102533],{"class":256,"line":257},[254,102532,30521],{"class":2103},[254,102534,101427],{"class":369},[14,102536,102537,102538,102541,102542,28526],{},"检查 ",[251,102539,102540],{},"final time"," 是否约等于 ",[251,102543,102544],{},"1.0",[14,102546,102547],{},"再做几个小实验：",[21,102549,102550,102560,102568,102581],{},[24,102551,102552,102553,102555,102556,102559],{},"把 ",[251,102554,102080],{}," 改成 ",[251,102557,102558],{},"pos=\"0 0 2\"","，观察初始高度变化。",[24,102561,102552,102562,102555,102564,102567],{},[251,102563,101969],{},[251,102565,102566],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[24,102569,102552,102570,102555,102572,102575,102576,102578,102579,28526],{},[251,102571,101965],{},[251,102573,102574],{},"timestep=\"0.005\"","，观察 100 步后的 ",[251,102577,102540],{}," 是否变成约 ",[251,102580,35470],{},[24,102582,102583,102584,102587],{},"删除 ",[251,102585,102586],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[14,102589,102590],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[34,102592,102594],{"id":102593},"_7常见错误与解决方案","7.常见错误与解决方案",[225,102596,102598],{"id":102597},"modulenotfounderror-no-module-named-mujoco",[251,102599,102600],{},"ModuleNotFoundError: No module named 'mujoco'",[14,102602,102603],{},"解决:",[245,102605,102607],{"className":23963,"code":102606,"language":23965,"meta":174,"style":174},"pip install \"mujoco>=2.3\"\n",[251,102608,102609],{"__ignoreMap":174},[254,102610,102611,102613,102615],{"class":256,"line":257},[254,102612,23972],{"class":2103},[254,102614,23975],{"class":369},[254,102616,102617],{"class":369}," \"mujoco>=2.3\"\n",[225,102619,102621],{"id":102620},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[14,102623,102624],{},"先安装系统依赖:",[245,102626,102628],{"className":23963,"code":102627,"language":23965,"meta":174,"style":174},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[251,102629,102630],{"__ignoreMap":174},[254,102631,102632,102634,102636,102638,102640,102643,102645,102648,102650,102653,102655],{"class":256,"line":257},[254,102633,24717],{"class":2103},[254,102635,26456],{"class":369},[254,102637,23975],{"class":369},[254,102639,26541],{"class":313},[254,102641,102642],{"class":369}," mesa-libGL",[254,102644,100955],{"class":369},[254,102646,102647],{"class":369}," glfw",[254,102649,100975],{"class":369},[254,102651,102652],{"class":369}," libX11",[254,102654,100988],{"class":369},[254,102656,102657],{"class":369}," libXrandr\n",[225,102659,102661],{"id":102660},"xml-解析失败","XML 解析失败",[14,102663,102664],{},"检查:",[21,102666,102667,102670,102673,102679],{},[24,102668,102669],{},"标签是否闭合",[24,102671,102672],{},"属性是否带引号",[24,102674,102675,102676],{},"根节点是否是 ",[251,102677,102678],{},"\u003Cmujoco>",[24,102680,102681,102683,102684,102687],{},[251,102682,51941],{}," 是否放在 ",[251,102685,102686],{},"\u003Cworldbody>"," 内部",[225,102689,102691,102693,102694],{"id":102690},"final-time-不是严格等于-10",[251,102692,102540],{}," 不是严格等于 ",[251,102695,102544],{},[14,102697,102698],{},"这通常不是错误。浮点数计算可能得到：",[245,102700,102703],{"className":102701,"code":102702,"language":5328,"meta":174},[5326],"1.0000000000000007\n",[251,102704,102702],{"__ignoreMap":174},[14,102706,102707,102708,102710],{},"只要接近 ",[251,102709,102544],{}," 就正常。",[225,102712,102713],{"id":102713},"方块没有掉下来",[14,102715,102716],{},"检查：",[21,102718,102719,102725,102731,102736],{},[24,102720,102721,102722],{},"方块 body 里是否有 ",[251,102723,102724],{},"\u003Cfreejoint\u002F>",[24,102726,102727,102728],{},"重力是否是 ",[251,102729,102730],{},"0 0 -9.81",[24,102732,102733,102734],{},"是否真的调用了 ",[251,102735,100826],{},[24,102737,102738,102739,102741,102742],{},"你看的是否是 ",[251,102740,102484],{},"，不是 ",[251,102743,102744],{},"initial qpos",[34,102746,102748],{"id":102747},"_8本章小结","8.本章小结",[14,102750,102751],{},"本章你已经完成了 MuJoCo 的最小闭环：",[245,102753,102756],{"className":102754,"code":102755,"language":5328,"meta":174},[5326],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[251,102757,102755],{"__ignoreMap":174},[14,102759,102760],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[5267,102762,102763],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":174,"searchDepth":175,"depth":175,"links":102765},[102766,102767,102768,102773,102777,102778,102779,102787],{"id":100787,"depth":175,"text":100788},{"id":100910,"depth":175,"text":100911},{"id":101185,"depth":175,"text":101186,"children":102769},[102770,102771,102772],{"id":101223,"depth":1319,"text":101224},{"id":101317,"depth":1319,"text":101318},{"id":101369,"depth":1319,"text":101370},{"id":101393,"depth":175,"text":101394,"children":102774},[102775,102776],{"id":101713,"depth":1319,"text":101713},{"id":101849,"depth":1319,"text":101849},{"id":102456,"depth":175,"text":102457},{"id":102488,"depth":175,"text":102489},{"id":102593,"depth":175,"text":102594,"children":102780},[102781,102782,102783,102784,102786],{"id":102597,"depth":1319,"text":102600},{"id":102620,"depth":1319,"text":102621},{"id":102660,"depth":1319,"text":102661},{"id":102690,"depth":1319,"text":102785},"final time 不是严格等于 1.0",{"id":102713,"depth":1319,"text":102713},{"id":102747,"depth":175,"text":102748},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":100779,"description":174},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":102794,"title":102795,"body":102796,"description":174,"extension":181,"meta":104452,"navigation":184,"path":104453,"seo":104454,"stem":104455,"__hash__":104456},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":102797,"toc":104428},[102798,102801,102803,102806,102809,102826,102921,102924,102930,102932,102934,102958,102961,102975,102978,103019,103021,103034,103036,103039,103087,103099,103102,103105,103111,103124,103191,103194,103213,103216,103219,103225,103227,103236,103239,103243,103252,103334,103343,103347,103353,103367,103377,103379,103709,103712,103724,103726,103737,103739,103742,103760,103763,103766,103784,103795,103798,103813,103823,103825,103846,103863,103883,103889,103929,103945,103961,103967,103970,103994,104010,104015,104045,104062,104087,104090,104105,104114,104129,104138,104153,104160,104162,104172,104185,104192,104195,104234,104241,104243,104295,104297,104303,104306,104313,104320,104323,104325,104343,104346,104349,104383,104395,104397,104400,104422,104425],[10,102799,102795],{"id":102800},"_2xml-与-mjcf-物理建模基础",[34,102802,100788],{"id":100787},[14,102804,102805],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[14,102807,102808],{},"本章结束后，你应该能看懂一个简单模型里：",[21,102810,102811,102814,102817,102820,102823],{},[24,102812,102813],{},"地面在哪里。",[24,102815,102816],{},"物体初始位置在哪里。",[24,102818,102819],{},"几何体是什么形状。",[24,102821,102822],{},"哪些 body 可以自由运动。",[24,102824,102825],{},"如何用名字在 Python 里找到 XML 中的对象。",[402,102827,102828,102838],{},[405,102829,102830],{},[408,102831,102832,102835],{},[411,102833,102834],{"align":23877},"标签",[411,102836,102837],{"align":23877},"作用",[449,102839,102840,102849,102859,102868,102878,102888,102901,102911],{},[408,102841,102842,102846],{},[454,102843,102844],{"align":23877},[251,102845,102678],{},[454,102847,102848],{"align":23877},"根节点",[408,102850,102851,102856],{},[454,102852,102853],{"align":23877},[251,102854,102855],{},"\u003Coption>",[454,102857,102858],{"align":23877},"仿真参数",[408,102860,102861,102865],{},[454,102862,102863],{"align":23877},[251,102864,102686],{},[454,102866,102867],{"align":23877},"世界中的物体",[408,102869,102870,102875],{},[454,102871,102872],{"align":23877},[251,102873,102874],{},"\u003Cbody>",[454,102876,102877],{"align":23877},"刚体",[408,102879,102880,102885],{},[454,102881,102882],{"align":23877},[251,102883,102884],{},"\u003Cgeom>",[454,102886,102887],{"align":23877},"几何体、碰撞体、可视体",[408,102889,102890,102898],{},[454,102891,102892,25119,102895],{"align":23877},[251,102893,102894],{},"\u003Cjoint>",[251,102896,102897],{},"\u003Cfreejoint>",[454,102899,102900],{"align":23877},"关节",[408,102902,102903,102908],{},[454,102904,102905],{"align":23877},[251,102906,102907],{},"\u003Csite>",[454,102909,102910],{"align":23877},"标记点",[408,102912,102913,102918],{},[454,102914,102915],{"align":23877},[251,102916,102917],{},"\u003Cactuator>",[454,102919,102920],{"align":23877},"控制器",[14,102922,102923],{},"初学时可以先记住：",[245,102925,102928],{"className":102926,"code":102927,"language":5328,"meta":174},[5326],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[251,102929,102927],{"__ignoreMap":174},[34,102931,100911],{"id":100910},[14,102933,100914],{},[245,102935,102937],{"className":23963,"code":102936,"language":23965,"meta":174,"style":174},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[251,102938,102939],{"__ignoreMap":174},[254,102940,102941,102943,102945,102947,102949,102951,102953,102955],{"class":256,"line":257},[254,102942,24717],{"class":2103},[254,102944,26456],{"class":369},[254,102946,23975],{"class":369},[254,102948,26541],{"class":313},[254,102950,102642],{"class":369},[254,102952,100955],{"class":369},[254,102954,102647],{"class":369},[254,102956,102957],{"class":369}," glfw-devel\n",[14,102959,102960],{},"pip:",[245,102962,102963],{"className":23963,"code":101060,"language":23965,"meta":174,"style":174},[251,102964,102965],{"__ignoreMap":174},[254,102966,102967,102969,102971,102973],{"class":256,"line":257},[254,102968,23972],{"class":2103},[254,102970,23975],{"class":369},[254,102972,101071],{"class":369},[254,102974,101074],{"class":369},[14,102976,102977],{},"conda:",[245,102979,102981],{"className":23963,"code":102980,"language":23965,"meta":174,"style":174},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[251,102982,102983,103000,103009],{"__ignoreMap":174},[254,102984,102985,102987,102989,102991,102994,102996,102998],{"class":256,"line":257},[254,102986,30471],{"class":2103},[254,102988,29317],{"class":369},[254,102990,25256],{"class":313},[254,102992,102993],{"class":369}," mujoco-xml",[254,102995,101116],{"class":369},[254,102997,101119],{"class":313},[254,102999,101122],{"class":313},[254,103001,103002,103004,103006],{"class":256,"line":175},[254,103003,30471],{"class":2103},[254,103005,101129],{"class":369},[254,103007,103008],{"class":369}," mujoco-xml\n",[254,103010,103011,103013,103015,103017],{"class":256,"line":1319},[254,103012,23972],{"class":2103},[254,103014,23975],{"class":369},[254,103016,101071],{"class":369},[254,103018,101074],{"class":369},[14,103020,101145],{},[21,103022,103023,103026,103031],{},[24,103024,103025],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[24,103027,103028,103029,28526],{},"本章使用基础标签，适用于 ",[251,103030,101168],{},[24,103032,103033],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[34,103035,101186],{"id":101185},[14,103037,103038],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[245,103040,103042],{"className":53208,"code":103041,"language":53210,"meta":174,"style":174},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[251,103043,103044,103058,103066,103071,103079],{"__ignoreMap":174},[254,103045,103046,103048,103050,103052,103054,103056],{"class":256,"line":257},[254,103047,1174],{"class":264},[254,103049,101162],{"class":51441},[254,103051,101916],{"class":2103},[254,103053,310],{"class":264},[254,103055,62820],{"class":369},[254,103057,51448],{"class":264},[254,103059,103060,103062,103064],{"class":256,"line":175},[254,103061,52285],{"class":264},[254,103063,101982],{"class":51441},[254,103065,51448],{"class":264},[254,103067,103068],{"class":256,"line":1319},[254,103069,103070],{"class":264},"    ...\n",[254,103072,103073,103075,103077],{"class":256,"line":1334},[254,103074,52558],{"class":264},[254,103076,101982],{"class":51441},[254,103078,51448],{"class":264},[254,103080,103081,103083,103085],{"class":256,"line":1340},[254,103082,51926],{"class":264},[254,103084,101162],{"class":51441},[254,103086,51448],{"class":264},[14,103088,103089,103091,103092,103094,103095,103098],{},[251,103090,51941],{}," 表示刚体。",[251,103093,101261],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[251,103096,103097],{},"joint"," 表示刚体相对父刚体如何运动。",[225,103100,103101],{"id":103101},"层级结构非常重要",[14,103103,103104],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[245,103106,103109],{"className":103107,"code":103108,"language":5328,"meta":174},[5326],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[251,103110,103108],{"__ignoreMap":174},[14,103112,103113,101159,103116,103119,103120,103123],{},[251,103114,103115],{},"red_box_geom",[251,103117,103118],{},"box_center"," 都属于 ",[251,103121,103122],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[245,103125,103127],{"className":53208,"code":103126,"language":53210,"meta":174,"style":174},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n  \u003Cfreejoint name=\"box_free\"\u002F>\n  \u003Cgeom type=\"box\" size=\"0.1 0.1 0.1\"\u002F>\n\u003C\u002Fbody>\n",[251,103128,103129,103149,103163,103183],{"__ignoreMap":174},[254,103130,103131,103133,103135,103137,103139,103141,103143,103145,103147],{"class":256,"line":257},[254,103132,1174],{"class":264},[254,103134,51941],{"class":51441},[254,103136,15061],{"class":2103},[254,103138,310],{"class":264},[254,103140,53632],{"class":369},[254,103142,101247],{"class":2103},[254,103144,310],{"class":264},[254,103146,101252],{"class":369},[254,103148,51448],{"class":264},[254,103150,103151,103153,103155,103157,103159,103161],{"class":256,"line":175},[254,103152,52285],{"class":264},[254,103154,101761],{"class":51441},[254,103156,15061],{"class":2103},[254,103158,310],{"class":264},[254,103160,102102],{"class":369},[254,103162,101285],{"class":264},[254,103164,103165,103167,103169,103171,103173,103175,103177,103179,103181],{"class":256,"line":1319},[254,103166,52285],{"class":264},[254,103168,101261],{"class":51441},[254,103170,53965],{"class":2103},[254,103172,310],{"class":264},[254,103174,53632],{"class":369},[254,103176,101277],{"class":2103},[254,103178,310],{"class":264},[254,103180,101282],{"class":369},[254,103182,101285],{"class":264},[254,103184,103185,103187,103189],{"class":256,"line":1334},[254,103186,51926],{"class":264},[254,103188,51941],{"class":51441},[254,103190,51448],{"class":264},[14,103192,103193],{},"含义:",[21,103195,103196,103202,103207,103210],{},[24,103197,103198,103199,103201],{},"创建名为 ",[251,103200,53855],{}," 的刚体",[24,103203,103204,103205],{},"初始位置在世界坐标 ",[251,103206,101310],{},[24,103208,103209],{},"它有一个自由关节",[24,103211,103212],{},"它有一个盒子几何体",[225,103214,103215],{"id":103215},"坐标怎么理解",[14,103217,103218],{},"MuJoCo 默认使用三维坐标：",[245,103220,103223],{"className":103221,"code":103222,"language":5328,"meta":174},[5326],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[251,103224,103222],{"__ignoreMap":174},[14,103226,14774],{},[245,103228,103230],{"className":53208,"code":103229,"language":53210,"meta":174,"style":174},"pos=\"0 0 1\"\n",[251,103231,103232],{"__ignoreMap":174},[254,103233,103234],{"class":256,"line":257},[254,103235,103229],{"class":264},[14,103237,103238],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[225,103240,103242],{"id":103241},"geom-的-size-怎么理解","geom 的 size 怎么理解",[14,103244,103245,103246,82671,103249,103251],{},"不同 ",[251,103247,103248],{},"type",[251,103250,31637],{}," 含义不同：",[402,103253,103254,103269],{},[405,103255,103256],{},[408,103257,103258,103262,103267],{},[411,103259,103260],{"align":23877},[251,103261,103248],{},[411,103263,103264,103266],{"align":23877},[251,103265,31637],{}," 示例",[411,103268,100841],{"align":23877},[449,103270,103271,103285,103300,103319],{},[408,103272,103273,103277,103282],{},[454,103274,103275],{"align":23877},[251,103276,53855],{},[454,103278,103279],{"align":23877},[251,103280,103281],{},"size=\"0.1 0.2 0.3\"",[454,103283,103284],{"align":23877},"x\u002Fy\u002Fz 半边长，不是完整长度",[408,103286,103287,103292,103297],{},[454,103288,103289],{"align":23877},[251,103290,103291],{},"sphere",[454,103293,103294],{"align":23877},[251,103295,103296],{},"size=\"0.1\"",[454,103298,103299],{"align":23877},"球半径",[408,103301,103302,103307,103312],{},[454,103303,103304],{"align":23877},[251,103305,103306],{},"capsule",[454,103308,103309],{"align":23877},[251,103310,103311],{},"size=\"0.03\"",[454,103313,103314,103315,103318],{"align":23877},"胶囊半径，长度常用 ",[251,103316,103317],{},"fromto"," 指定",[408,103320,103321,103326,103331],{},[454,103322,103323],{"align":23877},[251,103324,103325],{},"plane",[454,103327,103328],{"align":23877},[251,103329,103330],{},"size=\"3 3 0.1\"",[454,103332,103333],{"align":23877},"可视平面大小，通常当地面",[14,103335,103336,103337,103339,103340,103342],{},"最容易踩坑的是 box：",[251,103338,102165],{}," 表示边长大约是 ",[251,103341,32178],{},"，因为 MuJoCo 用的是半边长。",[225,103344,103346],{"id":103345},"site-是什么","site 是什么",[14,103348,103349,103352],{},[251,103350,103351],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[21,103354,103355,103358,103361,103364],{},[24,103356,103357],{},"标记机械臂末端。",[24,103359,103360],{},"标记目标位置。",[24,103362,103363],{},"放传感器或相机参考点。",[24,103365,103366],{},"在 Python 中读取某个关键点的世界坐标。",[14,103368,103369,103370,101159,103373,103376],{},"在后面的 Reacher 任务中，",[251,103371,103372],{},"tip",[251,103374,103375],{},"target"," 就会用 site 表示。",[34,103378,101394],{"id":101393},[245,103380,103382],{"className":30519,"code":103381,"language":30521,"meta":174,"style":174},"import mujoco\nimport numpy as np\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"xml_basic\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n\n  \u003Cworldbody>\n    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n\n    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n      \u003Cfreejoint name=\"red_box_free\"\u002F>\n      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n\n    box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n    site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n\n    if box_body_id \u003C 0:\n        raise RuntimeError(\"body red_box not found\")\n    if site_id \u003C 0:\n        raise RuntimeError(\"site box_center not found\")\n\n    for _ in range(200):\n        mujoco.mj_step(model, data)\n\n    print(\"simulation time:\", data.time)\n    print(\"box body position:\", data.xpos[box_body_id].copy())\n    print(\"site position:\", data.site_xpos[site_id].copy())\n    print(\"box qpos:\", np.array(data.qpos))\n\n\nif __name__ == \"__main__\":\n    main()\n",[251,103383,103384,103390,103400,103404,103408,103416,103421,103425,103429,103433,103438,103442,103447,103452,103457,103462,103466,103470,103474,103478,103482,103486,103498,103510,103518,103522,103537,103552,103556,103569,103584,103597,103610,103614,103630,103634,103638,103649,103661,103673,103685,103689,103693,103705],{"__ignoreMap":174},[254,103385,103386,103388],{"class":256,"line":257},[254,103387,30533],{"class":260},[254,103389,101442],{"class":264},[254,103391,103392,103394,103396,103398],{"class":256,"line":175},[254,103393,30533],{"class":260},[254,103395,31521],{"class":264},[254,103397,31524],{"class":260},[254,103399,31527],{"class":264},[254,103401,103402],{"class":256,"line":1319},[254,103403,2540],{"emptyLinePlaceholder":184},[254,103405,103406],{"class":256,"line":1334},[254,103407,2540],{"emptyLinePlaceholder":184},[254,103409,103410,103412,103414],{"class":256,"line":1340},[254,103411,101455],{"class":313},[254,103413,13705],{"class":260},[254,103415,101460],{"class":369},[254,103417,103418],{"class":256,"line":1354},[254,103419,103420],{"class":369},"\u003Cmujoco model=\"xml_basic\">\n",[254,103422,103423],{"class":256,"line":1360},[254,103424,101470],{"class":369},[254,103426,103427],{"class":256,"line":1451},[254,103428,2540],{"emptyLinePlaceholder":184},[254,103430,103431],{"class":256,"line":1457},[254,103432,101479],{"class":369},[254,103434,103435],{"class":256,"line":1469},[254,103436,103437],{"class":369},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[254,103439,103440],{"class":256,"line":1752},[254,103441,2540],{"emptyLinePlaceholder":184},[254,103443,103444],{"class":256,"line":1757},[254,103445,103446],{"class":369},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[254,103448,103449],{"class":256,"line":1763},[254,103450,103451],{"class":369},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[254,103453,103454],{"class":256,"line":1768},[254,103455,103456],{"class":369},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[254,103458,103459],{"class":256,"line":1782},[254,103460,103461],{"class":369},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[254,103463,103464],{"class":256,"line":1787},[254,103465,101508],{"class":369},[254,103467,103468],{"class":256,"line":1793},[254,103469,101513],{"class":369},[254,103471,103472],{"class":256,"line":1814},[254,103473,101518],{"class":369},[254,103475,103476],{"class":256,"line":1819},[254,103477,95839],{"class":369},[254,103479,103480],{"class":256,"line":1833},[254,103481,2540],{"emptyLinePlaceholder":184},[254,103483,103484],{"class":256,"line":1838},[254,103485,2540],{"emptyLinePlaceholder":184},[254,103487,103488,103490,103492,103494,103496],{"class":256,"line":1867},[254,103489,32088],{"class":260},[254,103491,2113],{"class":2103},[254,103493,101539],{"class":264},[254,103495,95827],{"class":313},[254,103497,3879],{"class":264},[254,103499,103500,103502,103504,103506,103508],{"class":256,"line":1872},[254,103501,101548],{"class":264},[254,103503,310],{"class":260},[254,103505,101553],{"class":264},[254,103507,101455],{"class":313},[254,103509,271],{"class":264},[254,103511,103512,103514,103516],{"class":256,"line":1889},[254,103513,101562],{"class":264},[254,103515,310],{"class":260},[254,103517,101567],{"class":264},[254,103519,103520],{"class":256,"line":1894},[254,103521,2540],{"emptyLinePlaceholder":184},[254,103523,103524,103527,103529,103532,103535],{"class":256,"line":1899},[254,103525,103526],{"class":264},"    box_body_id ",[254,103528,310],{"class":260},[254,103530,103531],{"class":264}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[254,103533,103534],{"class":369},"\"red_box\"",[254,103536,271],{"class":264},[254,103538,103539,103542,103544,103547,103550],{"class":256,"line":1904},[254,103540,103541],{"class":264},"    site_id ",[254,103543,310],{"class":260},[254,103545,103546],{"class":264}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[254,103548,103549],{"class":369},"\"box_center\"",[254,103551,271],{"class":264},[254,103553,103554],{"class":256,"line":1918},[254,103555,2540],{"emptyLinePlaceholder":184},[254,103557,103558,103560,103563,103565,103567],{"class":256,"line":1923},[254,103559,3241],{"class":260},[254,103561,103562],{"class":264}," box_body_id ",[254,103564,1174],{"class":260},[254,103566,4233],{"class":313},[254,103568,3879],{"class":264},[254,103570,103571,103574,103577,103579,103582],{"class":256,"line":2717},[254,103572,103573],{"class":260},"        raise",[254,103575,103576],{"class":313}," RuntimeError",[254,103578,265],{"class":264},[254,103580,103581],{"class":369},"\"body red_box not found\"",[254,103583,271],{"class":264},[254,103585,103586,103588,103591,103593,103595],{"class":256,"line":2731},[254,103587,3241],{"class":260},[254,103589,103590],{"class":264}," site_id ",[254,103592,1174],{"class":260},[254,103594,4233],{"class":313},[254,103596,3879],{"class":264},[254,103598,103599,103601,103603,103605,103608],{"class":256,"line":2739},[254,103600,103573],{"class":260},[254,103602,103576],{"class":313},[254,103604,265],{"class":264},[254,103606,103607],{"class":369},"\"site box_center not found\"",[254,103609,271],{"class":264},[254,103611,103612],{"class":256,"line":2744},[254,103613,2540],{"emptyLinePlaceholder":184},[254,103615,103616,103618,103620,103622,103624,103626,103628],{"class":256,"line":2750},[254,103617,3341],{"class":260},[254,103619,101642],{"class":264},[254,103621,26184],{"class":260},[254,103623,32584],{"class":313},[254,103625,265],{"class":264},[254,103627,1862],{"class":313},[254,103629,30927],{"class":264},[254,103631,103632],{"class":256,"line":2756},[254,103633,101657],{"class":264},[254,103635,103636],{"class":256,"line":2761},[254,103637,2540],{"emptyLinePlaceholder":184},[254,103639,103640,103642,103644,103647],{"class":256,"line":8089},[254,103641,31440],{"class":313},[254,103643,265],{"class":264},[254,103645,103646],{"class":369},"\"simulation time:\"",[254,103648,101619],{"class":264},[254,103650,103651,103653,103655,103658],{"class":256,"line":8113},[254,103652,31440],{"class":313},[254,103654,265],{"class":264},[254,103656,103657],{"class":369},"\"box body position:\"",[254,103659,103660],{"class":264},", data.xpos[box_body_id].copy())\n",[254,103662,103663,103665,103667,103670],{"class":256,"line":8118},[254,103664,31440],{"class":313},[254,103666,265],{"class":264},[254,103668,103669],{"class":369},"\"site position:\"",[254,103671,103672],{"class":264},", data.site_xpos[site_id].copy())\n",[254,103674,103675,103677,103679,103682],{"class":256,"line":8124},[254,103676,31440],{"class":313},[254,103678,265],{"class":264},[254,103680,103681],{"class":369},"\"box qpos:\"",[254,103683,103684],{"class":264},", np.array(data.qpos))\n",[254,103686,103687],{"class":256,"line":8151},[254,103688,2540],{"emptyLinePlaceholder":184},[254,103690,103691],{"class":256,"line":8156},[254,103692,2540],{"emptyLinePlaceholder":184},[254,103694,103695,103697,103699,103701,103703],{"class":256,"line":8162},[254,103696,1671],{"class":260},[254,103698,31361],{"class":313},[254,103700,101700],{"class":260},[254,103702,101703],{"class":369},[254,103704,3879],{"class":264},[254,103706,103707],{"class":256,"line":8174},[254,103708,101710],{"class":264},[14,103710,103711],{},"保存为：",[245,103713,103715],{"className":23963,"code":103714,"language":23965,"meta":174,"style":174},"touch ch2_xml_basic.py\n",[251,103716,103717],{"__ignoreMap":174},[254,103718,103719,103721],{"class":256,"line":257},[254,103720,101424],{"class":2103},[254,103722,103723],{"class":369}," ch2_xml_basic.py\n",[14,103725,102442],{},[245,103727,103729],{"className":23963,"code":103728,"language":23965,"meta":174,"style":174},"python ch2_xml_basic.py\n",[251,103730,103731],{"__ignoreMap":174},[254,103732,103733,103735],{"class":256,"line":257},[254,103734,30521],{"class":2103},[254,103736,103723],{"class":369},[225,103738,101713],{"id":101713},[14,103740,103741],{},"用名字查找 body：",[245,103743,103745],{"className":30519,"code":103744,"language":30521,"meta":174,"style":174},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[251,103746,103747],{"__ignoreMap":174},[254,103748,103749,103752,103754,103756,103758],{"class":256,"line":257},[254,103750,103751],{"class":264},"box_body_id ",[254,103753,310],{"class":260},[254,103755,103531],{"class":264},[254,103757,103534],{"class":369},[254,103759,271],{"class":264},[14,103761,103762],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[14,103764,103765],{},"用名字查找 site：",[245,103767,103769],{"className":30519,"code":103768,"language":30521,"meta":174,"style":174},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[251,103770,103771],{"__ignoreMap":174},[254,103772,103773,103776,103778,103780,103782],{"class":256,"line":257},[254,103774,103775],{"class":264},"site_id ",[254,103777,310],{"class":260},[254,103779,103546],{"class":264},[254,103781,103549],{"class":369},[254,103783,271],{"class":264},[14,103785,103786,103787,103790,103791,103794],{},"注意第二个参数是对象类型。查 body 就用 ",[251,103788,103789],{},"mjOBJ_BODY","，查 site 就用 ",[251,103792,103793],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[14,103796,103797],{},"读取世界坐标：",[245,103799,103801],{"className":30519,"code":103800,"language":30521,"meta":174,"style":174},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[251,103802,103803,103808],{"__ignoreMap":174},[254,103804,103805],{"class":256,"line":257},[254,103806,103807],{"class":264},"data.xpos[box_body_id]\n",[254,103809,103810],{"class":256,"line":175},[254,103811,103812],{"class":264},"data.site_xpos[site_id]\n",[14,103814,103815,103818,103819,103822],{},[251,103816,103817],{},"xpos"," 是 body 的世界坐标，",[251,103820,103821],{},"site_xpos"," 是 site 的世界坐标。",[225,103824,101849],{"id":101849},[245,103826,103828],{"className":30519,"code":103827,"language":30521,"meta":174,"style":174},"import mujoco\nimport numpy as np\n",[251,103829,103830,103836],{"__ignoreMap":174},[254,103831,103832,103834],{"class":256,"line":257},[254,103833,30533],{"class":260},[254,103835,101442],{"class":264},[254,103837,103838,103840,103842,103844],{"class":256,"line":175},[254,103839,30533],{"class":260},[254,103841,31521],{"class":264},[254,103843,31524],{"class":260},[254,103845,31527],{"class":264},[14,103847,103848,103849,103852,103853,103856,103857,477,103860,28526],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[251,103850,103851],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[251,103854,103855],{},"as np"," 是习惯写法，后面就可以写 ",[251,103858,103859],{},"np.array(...)",[251,103861,103862],{},"np.round(...)",[245,103864,103865],{"className":30519,"code":101736,"language":30521,"meta":174,"style":174},[251,103866,103867,103875,103879],{"__ignoreMap":174},[254,103868,103869,103871,103873],{"class":256,"line":257},[254,103870,101455],{"class":313},[254,103872,13705],{"class":260},[254,103874,101460],{"class":369},[254,103876,103877],{"class":256,"line":175},[254,103878,101751],{"class":369},[254,103880,103881],{"class":256,"line":1319},[254,103882,95839],{"class":369},[14,103884,103885,103886,28526],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[251,103887,103888],{},"mujoco.MjModel.from_xml_string(XML)",[245,103890,103892],{"className":53208,"code":103891,"language":53210,"meta":174,"style":174},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[251,103893,103894],{"__ignoreMap":174},[254,103895,103896,103898,103900,103902,103904,103906,103908,103910,103913,103915,103917,103920,103922,103924,103927],{"class":256,"line":257},[254,103897,1174],{"class":264},[254,103899,103351],{"class":51441},[254,103901,15061],{"class":2103},[254,103903,310],{"class":264},[254,103905,103549],{"class":369},[254,103907,101247],{"class":2103},[254,103909,310],{"class":264},[254,103911,103912],{"class":369},"\"0 0 0\"",[254,103914,101277],{"class":2103},[254,103916,310],{"class":264},[254,103918,103919],{"class":369},"\"0.03\"",[254,103921,78908],{"class":2103},[254,103923,310],{"class":264},[254,103925,103926],{"class":369},"\"0 1 0 1\"",[254,103928,101285],{"class":264},[14,103930,103931,103933,103934,103937,103938,103940,103941,103944],{},[251,103932,103351],{}," 是标记点。",[251,103935,103936],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[251,103939,103311],{}," 表示显示出来的小球大小。",[251,103942,103943],{},"rgba=\"0 1 0 1\""," 表示绿色。",[245,103946,103947],{"className":30519,"code":103744,"language":30521,"meta":174,"style":174},[251,103948,103949],{"__ignoreMap":174},[254,103950,103951,103953,103955,103957,103959],{"class":256,"line":257},[254,103952,103751],{"class":264},[254,103954,310],{"class":260},[254,103956,103531],{"class":264},[254,103958,103534],{"class":369},[254,103960,271],{"class":264},[14,103962,103963,103964,103966],{},"这行的作用是：根据名字 ",[251,103965,103534],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[14,103968,103969],{},"拆开看：",[21,103971,103972,103978,103983,103989],{},[24,103973,103974,103977],{},[251,103975,103976],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[24,103979,103980,103982],{},[251,103981,102226],{}," 是被查询的模型。",[24,103984,103985,103988],{},[251,103986,103987],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[24,103990,103991,103993],{},[251,103992,103534],{}," 是 XML 里写的名字。",[245,103995,103996],{"className":30519,"code":103768,"language":30521,"meta":174,"style":174},[251,103997,103998],{"__ignoreMap":174},[254,103999,104000,104002,104004,104006,104008],{"class":256,"line":257},[254,104001,103775],{"class":264},[254,104003,310],{"class":260},[254,104005,103546],{"class":264},[254,104007,103549],{"class":369},[254,104009,271],{"class":264},[14,104011,104012,104013,28526],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[251,104014,103549],{},[245,104016,104018],{"className":30519,"code":104017,"language":30521,"meta":174,"style":174},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[251,104019,104020,104032],{"__ignoreMap":174},[254,104021,104022,104024,104026,104028,104030],{"class":256,"line":257},[254,104023,1671],{"class":260},[254,104025,103562],{"class":264},[254,104027,1174],{"class":260},[254,104029,4233],{"class":313},[254,104031,3879],{"class":264},[254,104033,104034,104037,104039,104041,104043],{"class":256,"line":175},[254,104035,104036],{"class":260},"    raise",[254,104038,103576],{"class":313},[254,104040,265],{"class":264},[254,104042,103581],{"class":369},[254,104044,271],{"class":264},[14,104046,104047,104049,104050,104053,104054,104057,104058,104061],{},[251,104048,1671],{}," 是条件判断。",[251,104051,104052],{},"mj_name2id"," 找不到对象时会返回 ",[251,104055,104056],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[251,104059,104060],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[245,104063,104065],{"className":30519,"code":104064,"language":30521,"meta":174,"style":174},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[251,104066,104067,104083],{"__ignoreMap":174},[254,104068,104069,104071,104073,104075,104077,104079,104081],{"class":256,"line":257},[254,104070,3165],{"class":260},[254,104072,101642],{"class":264},[254,104074,26184],{"class":260},[254,104076,32584],{"class":313},[254,104078,265],{"class":264},[254,104080,1862],{"class":313},[254,104082,30927],{"class":264},[254,104084,104085],{"class":256,"line":175},[254,104086,101840],{"class":264},[14,104088,104089],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[245,104091,104093],{"className":30519,"code":104092,"language":30521,"meta":174,"style":174},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[251,104094,104095],{"__ignoreMap":174},[254,104096,104097,104099,104101,104103],{"class":256,"line":257},[254,104098,30556],{"class":313},[254,104100,265],{"class":264},[254,104102,103657],{"class":369},[254,104104,103660],{"class":264},[14,104106,104107,104109,104110,104113],{},[251,104108,101220],{}," 保存所有 body 的世界坐标。",[251,104111,104112],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[245,104115,104117],{"className":30519,"code":104116,"language":30521,"meta":174,"style":174},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[251,104118,104119],{"__ignoreMap":174},[254,104120,104121,104123,104125,104127],{"class":256,"line":257},[254,104122,30556],{"class":313},[254,104124,265],{"class":264},[254,104126,103669],{"class":369},[254,104128,103672],{"class":264},[14,104130,104131,104134,104135,104137],{},[251,104132,104133],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[251,104136,103118],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[245,104139,104141],{"className":30519,"code":104140,"language":30521,"meta":174,"style":174},"print(\"box qpos:\", np.array(data.qpos))\n",[251,104142,104143],{"__ignoreMap":174},[254,104144,104145,104147,104149,104151],{"class":256,"line":257},[254,104146,30556],{"class":313},[254,104148,265],{"class":264},[254,104150,103681],{"class":369},[254,104152,103684],{"class":264},[14,104154,104155,104156,104159],{},"这里打印广义位置数组。",[251,104157,104158],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[34,104161,102457],{"id":102456},[14,104163,104164,104165,104168,104169,28526],{},"程序会输出 ",[251,104166,104167],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[251,104170,104171],{},"qpos",[14,104173,104174,104176,104177,104180,104181,104184],{},[251,104175,104112],{}," 是 body 的世界坐标位置。",[251,104178,104179],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[251,104182,104183],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[14,104186,82363,104187,82671,104189,104191],{},[251,104188,103118],{},[251,104190,103936],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[14,104193,104194],{},"如果你把 site 改成：",[245,104196,104198],{"className":53208,"code":104197,"language":53210,"meta":174,"style":174},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[251,104199,104200],{"__ignoreMap":174},[254,104201,104202,104204,104206,104208,104210,104213,104215,104217,104220,104222,104224,104226,104228,104230,104232],{"class":256,"line":257},[254,104203,1174],{"class":264},[254,104205,103351],{"class":51441},[254,104207,15061],{"class":2103},[254,104209,310],{"class":264},[254,104211,104212],{"class":369},"\"box_top\"",[254,104214,101247],{"class":2103},[254,104216,310],{"class":264},[254,104218,104219],{"class":369},"\"0 0 0.15\"",[254,104221,101277],{"class":2103},[254,104223,310],{"class":264},[254,104225,103919],{"class":369},[254,104227,78908],{"class":2103},[254,104229,310],{"class":264},[254,104231,103926],{"class":369},[254,104233,101285],{"class":264},[14,104235,104236,104237,104240],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[251,104238,104239],{},"site position"," 就会比 body position 的 z 坐标更高。",[34,104242,102489],{"id":102488},[21,104244,104245,104254,104257,104264,104270,104281],{},[24,104246,102552,104247,104249,104250,102555,104252,28526],{},[251,104248,103122],{}," 的初始高度从 ",[251,104251,482],{},[251,104253,342],{},[24,104255,104256],{},"重新运行程序。",[24,104258,104259,104260,104263],{},"观察 ",[251,104261,104262],{},"box qpos"," 和最终位置是否变化。",[24,104265,104266,104267,104269],{},"故意把 ",[251,104268,103351],{}," 名称改错，确认程序能报错。",[24,104271,102552,104272,104274,104275,102555,104277,104280],{},[251,104273,101261],{}," 的颜色 ",[251,104276,102173],{},[251,104278,104279],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[24,104282,102552,104283,82671,104285,102555,104288,104291,104292,104294],{},[251,104284,103118],{},[251,104286,104287],{},"pos",[251,104289,104290],{},"0 0 0.2","，观察 ",[251,104293,104239],{}," 如何变化。",[34,104296,102594],{"id":102593},[225,104298,104300],{"id":104299},"xml-error-schema-violation",[251,104301,104302],{},"XML Error: Schema violation",[14,104304,104305],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[225,104307,104309,81431,104311],{"id":104308},"mj_name2id-返回-1",[251,104310,104052],{},[251,104312,104056],{},[14,104314,104315,104316,104319],{},"说明名字没有找到。检查 XML 中 ",[251,104317,104318],{},"name=\"...\"","，并确认对象类型正确。",[225,104321,104322],{"id":104322},"物体不下落",[14,104324,102664],{},[21,104326,104327,104332,104337],{},[24,104328,104329,104330],{},"body 是否有 ",[251,104331,101761],{},[24,104333,104334,104335],{},"gravity 是否为 ",[251,104336,102730],{},[24,104338,104339,104340,104342],{},"body 是否被固定在 ",[251,104341,101982],{}," 中",[225,104344,104345],{"id":104345},"坐标看起来不符合预期",[14,104347,104348],{},"先区分两种坐标：",[402,104350,104351,104360],{},[405,104352,104353],{},[408,104354,104355,104358],{},[411,104356,104357],{"align":23877},"坐标",[411,104359,100841],{"align":23877},[449,104361,104362,104372],{},[408,104363,104364,104369],{},[454,104365,104366,104367],{"align":23877},"XML 里的 ",[251,104368,104287],{},[454,104370,104371],{"align":23877},"相对父 body 的局部坐标",[408,104373,104374,104380],{},[454,104375,104376,25119,104378],{"align":23877},[251,104377,101220],{},[251,104379,104133],{},[454,104381,104382],{"align":23877},"仿真更新后的世界坐标",[14,104384,104385,104386,104388,104389,82680,104392,104394],{},"如果你修改了 ",[251,104387,101211],{},"，但还没调用 ",[251,104390,104391],{},"mj_forward",[251,104393,101356],{},"，世界坐标可能还没有更新。",[34,104396,102748],{"id":102747},[14,104398,104399],{},"MJCF 建模先掌握四件事：",[21,104401,104402,104407,104412,104417],{},[24,104403,104404,104406],{},[251,104405,51941],{}," 表示刚体层级。",[24,104408,104409,104411],{},[251,104410,101261],{}," 表示形状、碰撞和质量。",[24,104413,104414,104416],{},[251,104415,103097],{}," 决定 body 能不能动、怎么动。",[24,104418,104419,104421],{},[251,104420,103351],{}," 用来标记关键点，方便 Python 读取位置。",[14,104423,104424],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[5267,104426,104427],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":174,"searchDepth":175,"depth":175,"links":104429},[104430,104431,104432,104438,104442,104443,104444,104451],{"id":100787,"depth":175,"text":100788},{"id":100910,"depth":175,"text":100911},{"id":101185,"depth":175,"text":101186,"children":104433},[104434,104435,104436,104437],{"id":103101,"depth":1319,"text":103101},{"id":103215,"depth":1319,"text":103215},{"id":103241,"depth":1319,"text":103242},{"id":103345,"depth":1319,"text":103346},{"id":101393,"depth":175,"text":101394,"children":104439},[104440,104441],{"id":101713,"depth":1319,"text":101713},{"id":101849,"depth":1319,"text":101849},{"id":102456,"depth":175,"text":102457},{"id":102488,"depth":175,"text":102489},{"id":102593,"depth":175,"text":102594,"children":104445},[104446,104447,104449,104450],{"id":104299,"depth":1319,"text":104302},{"id":104308,"depth":1319,"text":104448},"mj_name2id 返回 -1",{"id":104322,"depth":1319,"text":104322},{"id":104345,"depth":1319,"text":104345},{"id":102747,"depth":175,"text":102748},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":102795,"description":174},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104458,"title":104459,"body":104460,"description":174,"extension":181,"meta":105955,"navigation":184,"path":105956,"seo":105957,"stem":105958,"__hash__":105959},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104461,"toc":105927},[104462,104465,104467,104470,104473,104511,104514,104520,104523,104525,104527,104554,104556,104570,104572,104613,104615,104639,104641,104644,104653,104662,104665,104674,104682,104691,104694,104704,104707,104759,104766,104772,104780,104828,104831,104850,104853,104861,104865,104874,104907,104909,105257,105259,105271,105273,105284,105286,105289,105310,105316,105319,105344,105354,105357,105365,105368,105371,105392,105403,105405,105425,105428,105449,105458,105477,105483,105508,105511,105525,105532,105556,105559,105567,105576,105592,105604,105612,105621,105623,105626,105650,105655,105658,105680,105682,105721,105723,105730,105732,105740,105743,105746,105758,105799,105806,105817,105824,105827,105876,105879,105882,105888,105890,105895,105921,105924],[10,104463,104459],{"id":104464},"_3python-控制接口读取状态与推进仿真",[34,104466,100788],{"id":100787},[14,104468,104469],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[14,104471,104472],{},"你将学习:",[21,104474,104475,104480,104485,104489,104494,104505],{},[24,104476,104477],{},[251,104478,104479],{},"MjModel.from_xml_string",[24,104481,104482],{},[251,104483,104484],{},"MjData(model)",[24,104486,104487],{},[251,104488,101356],{},[24,104490,104491],{},[251,104492,104493],{},"mj_resetData",[24,104495,104496,104497,477,104499,477,104502],{},"读取 ",[251,104498,104171],{},[251,104500,104501],{},"qvel",[251,104503,104504],{},"ctrl",[24,104506,104507,104508],{},"使用 ",[251,104509,104510],{},"model.opt.timestep",[14,104512,104513],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[245,104515,104518],{"className":104516,"code":104517,"language":5328,"meta":174},[5326],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[251,104519,104517],{"__ignoreMap":174},[14,104521,104522],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[34,104524,100911],{"id":100910},[14,104526,100914],{},[245,104528,104530],{"className":23963,"code":104529,"language":23965,"meta":174,"style":174},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[251,104531,104532],{"__ignoreMap":174},[254,104533,104534,104536,104538,104540,104542,104545,104547,104549,104551],{"class":256,"line":257},[254,104535,24717],{"class":2103},[254,104537,26456],{"class":369},[254,104539,23975],{"class":369},[254,104541,26541],{"class":313},[254,104543,104544],{"class":369}," python3",[254,104546,100939],{"class":369},[254,104548,102642],{"class":369},[254,104550,100955],{"class":369},[254,104552,104553],{"class":369}," glfw\n",[14,104555,102960],{},[245,104557,104558],{"className":23963,"code":101060,"language":23965,"meta":174,"style":174},[251,104559,104560],{"__ignoreMap":174},[254,104561,104562,104564,104566,104568],{"class":256,"line":257},[254,104563,23972],{"class":2103},[254,104565,23975],{"class":369},[254,104567,101071],{"class":369},[254,104569,101074],{"class":369},[14,104571,102977],{},[245,104573,104575],{"className":23963,"code":104574,"language":23965,"meta":174,"style":174},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[251,104576,104577,104594,104603],{"__ignoreMap":174},[254,104578,104579,104581,104583,104585,104588,104590,104592],{"class":256,"line":257},[254,104580,30471],{"class":2103},[254,104582,29317],{"class":369},[254,104584,25256],{"class":313},[254,104586,104587],{"class":369}," mujoco-python-api",[254,104589,101116],{"class":369},[254,104591,101119],{"class":313},[254,104593,101122],{"class":313},[254,104595,104596,104598,104600],{"class":256,"line":175},[254,104597,30471],{"class":2103},[254,104599,101129],{"class":369},[254,104601,104602],{"class":369}," mujoco-python-api\n",[254,104604,104605,104607,104609,104611],{"class":256,"line":1319},[254,104606,23972],{"class":2103},[254,104608,23975],{"class":369},[254,104610,101071],{"class":369},[254,104612,101074],{"class":369},[14,104614,101145],{},[21,104616,104617,104624,104633],{},[24,104618,104619,101159,104621,104623],{},[251,104620,100816],{},[251,104622,100821],{}," 是官方 Python bindings 的类名。",[24,104625,104626,104627,104630,104631,28526],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[251,104628,104629],{},"mjModel"," 在 Python 中是 ",[251,104632,100850],{},[24,104634,104635,104636,28526],{},"不要使用 ",[251,104637,104638],{},"sim = mujoco_py.MjSim(...)",[34,104640,101186],{"id":101185},[14,104642,104643],{},"仿真推进核心代码:",[245,104645,104647],{"className":30519,"code":104646,"language":30521,"meta":174,"style":174},"mujoco.mj_step(model, data)\n",[251,104648,104649],{"__ignoreMap":174},[254,104650,104651],{"class":256,"line":257},[254,104652,104646],{"class":264},[14,104654,104655,104656,477,104658,477,104660,28526],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[251,104657,101211],{},[251,104659,101214],{},[251,104661,101208],{},[14,104663,104664],{},"重置仿真:",[245,104666,104668],{"className":30519,"code":104667,"language":30521,"meta":174,"style":174},"mujoco.mj_resetData(model, data)\n",[251,104669,104670],{"__ignoreMap":174},[254,104671,104672],{"class":256,"line":257},[254,104673,104667],{"class":264},[14,104675,104676,104677,82680,104679,104681],{},"如果手动修改了 ",[251,104678,101211],{},[251,104680,101214],{},"，通常应调用:",[245,104683,104685],{"className":30519,"code":104684,"language":30521,"meta":174,"style":174},"mujoco.mj_forward(model, data)\n",[251,104686,104687],{"__ignoreMap":174},[254,104688,104689],{"class":256,"line":257},[254,104690,104684],{"class":264},[14,104692,104693],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[225,104695,104697,477,104699,477,104701,104703],{"id":104696},"qposqvelctrl-是什么",[251,104698,104171],{},[251,104700,104501],{},[251,104702,104504],{}," 是什么",[14,104705,104706],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[402,104708,104709,104721],{},[405,104710,104711],{},[408,104712,104713,104716,104718],{},[411,104714,104715],{"align":23877},"字段",[411,104717,100841],{"align":23877},[411,104719,104720],{"align":23877},"谁来修改",[449,104722,104723,104735,104747],{},[408,104724,104725,104729,104732],{},[454,104726,104727],{"align":23877},[251,104728,101211],{},[454,104730,104731],{"align":23877},"广义位置，例如小车位置、关节角、自由物体位置姿态",[454,104733,104734],{"align":23877},"MuJoCo 更新，也可以手动设置初始状态",[408,104736,104737,104741,104744],{},[454,104738,104739],{"align":23877},[251,104740,101214],{},[454,104742,104743],{"align":23877},"广义速度，例如小车速度、关节角速度",[454,104745,104746],{"align":23877},"MuJoCo 更新，也可以手动清零",[408,104748,104749,104753,104756],{},[454,104750,104751],{"align":23877},[251,104752,101217],{},[454,104754,104755],{"align":23877},"actuator 的控制输入",[454,104757,104758],{"align":23877},"主要由你的控制代码写入",[14,104760,9166,104761,101159,104763,104765],{},[251,104762,104171],{},[251,104764,104501],{}," 不一定同维。自由刚体就是典型例子：",[245,104767,104770],{"className":104768,"code":104769,"language":5328,"meta":174},[5326],"freejoint: qpos 7 维，qvel 6 维\n",[251,104771,104769],{"__ignoreMap":174},[225,104773,104775,101159,104777,104779],{"id":104774},"mj_step-和-mj_forward-的区别",[251,104776,101356],{},[251,104778,104391],{}," 的区别",[402,104781,104782,104795],{},[405,104783,104784],{},[408,104785,104786,104789,104792],{},[411,104787,104788],{"align":23877},"函数",[411,104790,104791],{"align":23877},"是否推进时间",[411,104793,104794],{"align":23877},"什么时候用",[449,104796,104797,104810],{},[408,104798,104799,104804,104807],{},[454,104800,104801],{"align":23877},[251,104802,104803],{},"mj_step(model, data)",[454,104805,104806],{"align":23877},"是",[454,104808,104809],{"align":23877},"正常仿真循环，每调用一次前进一步",[408,104811,104812,104817,104820],{},[454,104813,104814],{"align":23877},[251,104815,104816],{},"mj_forward(model, data)",[454,104818,104819],{"align":23877},"否",[454,104821,104822,104823,477,104825,104827],{"align":23877},"手动改了 ",[251,104824,104171],{},[251,104826,104501],{}," 后，刷新派生量",[14,104829,104830],{},"例如你写：",[245,104832,104834],{"className":30519,"code":104833,"language":30521,"meta":174,"style":174},"data.qpos[2] = 2.0\n",[251,104835,104836],{"__ignoreMap":174},[254,104837,104838,104841,104843,104845,104847],{"class":256,"line":257},[254,104839,104840],{"class":264},"data.qpos[",[254,104842,342],{"class":313},[254,104844,4583],{"class":264},[254,104846,310],{"class":260},[254,104848,104849],{"class":313}," 2.0\n",[14,104851,104852],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[245,104854,104855],{"className":30519,"code":104684,"language":30521,"meta":174,"style":174},[251,104856,104857],{"__ignoreMap":174},[254,104858,104859],{"class":256,"line":257},[254,104860,104684],{"class":264},[225,104862,104864],{"id":104863},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[14,104866,104867,104870,104871,104873],{},[251,104868,104869],{},"mujoco.mj_resetData(model, data)"," 会把 ",[251,104872,33542],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[245,104875,104877],{"className":30519,"code":104876,"language":30521,"meta":174,"style":174},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[251,104878,104879,104883,104893,104903],{"__ignoreMap":174},[254,104880,104881],{"class":256,"line":257},[254,104882,104667],{"class":264},[254,104884,104885,104888,104890],{"class":256,"line":175},[254,104886,104887],{"class":264},"data.qpos[:] ",[254,104889,310],{"class":260},[254,104891,104892],{"class":264}," random_qpos\n",[254,104894,104895,104898,104900],{"class":256,"line":1319},[254,104896,104897],{"class":264},"data.qvel[:] ",[254,104899,310],{"class":260},[254,104901,104902],{"class":313}," 0.0\n",[254,104904,104905],{"class":256,"line":1334},[254,104906,104684],{"class":264},[34,104908,101394],{"id":101393},[245,104910,104912],{"className":30519,"code":104911,"language":30521,"meta":174,"style":174},"import mujoco\nimport numpy as np\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"state_api\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n\n  \u003Cworldbody>\n    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n\n    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n      \u003Cfreejoint name=\"ball_free\"\u002F>\n      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n    print(prefix)\n    print(\"  timestep:\", model.opt.timestep)\n    print(\"  time:\", data.time)\n    print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n    print(\"  qvel:\", np.round(data.qvel.copy(), 4))\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n\n    print_state(\"initial\", model, data)\n\n    for _ in range(50):\n        mujoco.mj_step(model, data)\n\n    print_state(\"after 50 steps\", model, data)\n\n    mujoco.mj_resetData(model, data)\n    print_state(\"after reset\", model, data)\n\n    data.qpos[2] = 2.0\n    mujoco.mj_forward(model, data)\n    print_state(\"after manual qpos edit\", model, data)\n\n\nif __name__ == \"__main__\":\n    main()\n",[251,104913,104914,104920,104930,104934,104938,104946,104951,104955,104959,104963,104968,104972,104977,104982,104987,104991,104995,104999,105003,105007,105011,105030,105037,105049,105060,105076,105092,105096,105100,105112,105124,105132,105136,105147,105151,105167,105171,105175,105184,105188,105193,105202,105206,105219,105224,105233,105237,105241,105253],{"__ignoreMap":174},[254,104915,104916,104918],{"class":256,"line":257},[254,104917,30533],{"class":260},[254,104919,101442],{"class":264},[254,104921,104922,104924,104926,104928],{"class":256,"line":175},[254,104923,30533],{"class":260},[254,104925,31521],{"class":264},[254,104927,31524],{"class":260},[254,104929,31527],{"class":264},[254,104931,104932],{"class":256,"line":1319},[254,104933,2540],{"emptyLinePlaceholder":184},[254,104935,104936],{"class":256,"line":1334},[254,104937,2540],{"emptyLinePlaceholder":184},[254,104939,104940,104942,104944],{"class":256,"line":1340},[254,104941,101455],{"class":313},[254,104943,13705],{"class":260},[254,104945,101460],{"class":369},[254,104947,104948],{"class":256,"line":1354},[254,104949,104950],{"class":369},"\u003Cmujoco model=\"state_api\">\n",[254,104952,104953],{"class":256,"line":1360},[254,104954,101470],{"class":369},[254,104956,104957],{"class":256,"line":1451},[254,104958,2540],{"emptyLinePlaceholder":184},[254,104960,104961],{"class":256,"line":1457},[254,104962,101479],{"class":369},[254,104964,104965],{"class":256,"line":1469},[254,104966,104967],{"class":369},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[254,104969,104970],{"class":256,"line":1752},[254,104971,2540],{"emptyLinePlaceholder":184},[254,104973,104974],{"class":256,"line":1757},[254,104975,104976],{"class":369},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[254,104978,104979],{"class":256,"line":1763},[254,104980,104981],{"class":369},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[254,104983,104984],{"class":256,"line":1768},[254,104985,104986],{"class":369},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[254,104988,104989],{"class":256,"line":1782},[254,104990,101508],{"class":369},[254,104992,104993],{"class":256,"line":1787},[254,104994,101513],{"class":369},[254,104996,104997],{"class":256,"line":1793},[254,104998,101518],{"class":369},[254,105000,105001],{"class":256,"line":1814},[254,105002,95839],{"class":369},[254,105004,105005],{"class":256,"line":1819},[254,105006,2540],{"emptyLinePlaceholder":184},[254,105008,105009],{"class":256,"line":1833},[254,105010,2540],{"emptyLinePlaceholder":184},[254,105012,105013,105015,105018,105021,105023,105026,105028],{"class":256,"line":1838},[254,105014,32088],{"class":260},[254,105016,105017],{"class":2103}," print_state",[254,105019,105020],{"class":264},"(prefix: ",[254,105022,1439],{"class":313},[254,105024,105025],{"class":264},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[254,105027,95827],{"class":313},[254,105029,3879],{"class":264},[254,105031,105032,105034],{"class":256,"line":1867},[254,105033,31440],{"class":313},[254,105035,105036],{"class":264},"(prefix)\n",[254,105038,105039,105041,105043,105046],{"class":256,"line":1872},[254,105040,31440],{"class":313},[254,105042,265],{"class":264},[254,105044,105045],{"class":369},"\"  timestep:\"",[254,105047,105048],{"class":264},", model.opt.timestep)\n",[254,105050,105051,105053,105055,105058],{"class":256,"line":1889},[254,105052,31440],{"class":313},[254,105054,265],{"class":264},[254,105056,105057],{"class":369},"\"  time:\"",[254,105059,101619],{"class":264},[254,105061,105062,105064,105066,105069,105072,105074],{"class":256,"line":1894},[254,105063,31440],{"class":313},[254,105065,265],{"class":264},[254,105067,105068],{"class":369},"\"  qpos:\"",[254,105070,105071],{"class":264},", np.round(data.qpos.copy(), ",[254,105073,557],{"class":313},[254,105075,30638],{"class":264},[254,105077,105078,105080,105082,105085,105088,105090],{"class":256,"line":1899},[254,105079,31440],{"class":313},[254,105081,265],{"class":264},[254,105083,105084],{"class":369},"\"  qvel:\"",[254,105086,105087],{"class":264},", np.round(data.qvel.copy(), ",[254,105089,557],{"class":313},[254,105091,30638],{"class":264},[254,105093,105094],{"class":256,"line":1904},[254,105095,2540],{"emptyLinePlaceholder":184},[254,105097,105098],{"class":256,"line":1918},[254,105099,2540],{"emptyLinePlaceholder":184},[254,105101,105102,105104,105106,105108,105110],{"class":256,"line":1923},[254,105103,32088],{"class":260},[254,105105,2113],{"class":2103},[254,105107,101539],{"class":264},[254,105109,95827],{"class":313},[254,105111,3879],{"class":264},[254,105113,105114,105116,105118,105120,105122],{"class":256,"line":2717},[254,105115,101548],{"class":264},[254,105117,310],{"class":260},[254,105119,101553],{"class":264},[254,105121,101455],{"class":313},[254,105123,271],{"class":264},[254,105125,105126,105128,105130],{"class":256,"line":2731},[254,105127,101562],{"class":264},[254,105129,310],{"class":260},[254,105131,101567],{"class":264},[254,105133,105134],{"class":256,"line":2739},[254,105135,2540],{"emptyLinePlaceholder":184},[254,105137,105138,105141,105144],{"class":256,"line":2744},[254,105139,105140],{"class":264},"    print_state(",[254,105142,105143],{"class":369},"\"initial\"",[254,105145,105146],{"class":264},", model, data)\n",[254,105148,105149],{"class":256,"line":2750},[254,105150,2540],{"emptyLinePlaceholder":184},[254,105152,105153,105155,105157,105159,105161,105163,105165],{"class":256,"line":2756},[254,105154,3341],{"class":260},[254,105156,101642],{"class":264},[254,105158,26184],{"class":260},[254,105160,32584],{"class":313},[254,105162,265],{"class":264},[254,105164,920],{"class":313},[254,105166,30927],{"class":264},[254,105168,105169],{"class":256,"line":2761},[254,105170,101657],{"class":264},[254,105172,105173],{"class":256,"line":8089},[254,105174,2540],{"emptyLinePlaceholder":184},[254,105176,105177,105179,105182],{"class":256,"line":8113},[254,105178,105140],{"class":264},[254,105180,105181],{"class":369},"\"after 50 steps\"",[254,105183,105146],{"class":264},[254,105185,105186],{"class":256,"line":8118},[254,105187,2540],{"emptyLinePlaceholder":184},[254,105189,105190],{"class":256,"line":8124},[254,105191,105192],{"class":264},"    mujoco.mj_resetData(model, data)\n",[254,105194,105195,105197,105200],{"class":256,"line":8151},[254,105196,105140],{"class":264},[254,105198,105199],{"class":369},"\"after reset\"",[254,105201,105146],{"class":264},[254,105203,105204],{"class":256,"line":8156},[254,105205,2540],{"emptyLinePlaceholder":184},[254,105207,105208,105211,105213,105215,105217],{"class":256,"line":8162},[254,105209,105210],{"class":264},"    data.qpos[",[254,105212,342],{"class":313},[254,105214,4583],{"class":264},[254,105216,310],{"class":260},[254,105218,104849],{"class":313},[254,105220,105221],{"class":256,"line":8174},[254,105222,105223],{"class":264},"    mujoco.mj_forward(model, data)\n",[254,105225,105226,105228,105231],{"class":256,"line":8186},[254,105227,105140],{"class":264},[254,105229,105230],{"class":369},"\"after manual qpos edit\"",[254,105232,105146],{"class":264},[254,105234,105235],{"class":256,"line":8198},[254,105236,2540],{"emptyLinePlaceholder":184},[254,105238,105239],{"class":256,"line":9857},[254,105240,2540],{"emptyLinePlaceholder":184},[254,105242,105243,105245,105247,105249,105251],{"class":256,"line":9882},[254,105244,1671],{"class":260},[254,105246,31361],{"class":313},[254,105248,101700],{"class":260},[254,105250,101703],{"class":369},[254,105252,3879],{"class":264},[254,105254,105255],{"class":256,"line":9905},[254,105256,101710],{"class":264},[14,105258,103711],{},[245,105260,105262],{"className":23963,"code":105261,"language":23965,"meta":174,"style":174},"touch ch3_python_state.py\n",[251,105263,105264],{"__ignoreMap":174},[254,105265,105266,105268],{"class":256,"line":257},[254,105267,101424],{"class":2103},[254,105269,105270],{"class":369}," ch3_python_state.py\n",[14,105272,102442],{},[245,105274,105276],{"className":23963,"code":105275,"language":23965,"meta":174,"style":174},"python ch3_python_state.py\n",[251,105277,105278],{"__ignoreMap":174},[254,105279,105280,105282],{"class":256,"line":257},[254,105281,30521],{"class":2103},[254,105283,105270],{"class":369},[225,105285,101713],{"id":101713},[14,105287,105288],{},"打印状态的函数：",[245,105290,105292],{"className":30519,"code":105291,"language":30521,"meta":174,"style":174},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[251,105293,105294],{"__ignoreMap":174},[254,105295,105296,105298,105300,105302,105304,105306,105308],{"class":256,"line":257},[254,105297,32088],{"class":260},[254,105299,105017],{"class":2103},[254,105301,105020],{"class":264},[254,105303,1439],{"class":313},[254,105305,105025],{"class":264},[254,105307,95827],{"class":313},[254,105309,3879],{"class":264},[14,105311,105312,105313,105315],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[251,105314,33542],{}," 里发生了什么。",[14,105317,105318],{},"推进 50 步：",[245,105320,105322],{"className":30519,"code":105321,"language":30521,"meta":174,"style":174},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[251,105323,105324,105340],{"__ignoreMap":174},[254,105325,105326,105328,105330,105332,105334,105336,105338],{"class":256,"line":257},[254,105327,3165],{"class":260},[254,105329,101642],{"class":264},[254,105331,26184],{"class":260},[254,105333,32584],{"class":313},[254,105335,265],{"class":264},[254,105337,920],{"class":313},[254,105339,30927],{"class":264},[254,105341,105342],{"class":256,"line":175},[254,105343,101840],{"class":264},[14,105345,105346,105347,105350,105351,105353],{},"由于 ",[251,105348,105349],{},"timestep=0.01","，所以 50 步后时间约为 ",[251,105352,35470],{}," 秒。",[14,105355,105356],{},"重置：",[245,105358,105359],{"className":30519,"code":104667,"language":30521,"meta":174,"style":174},[251,105360,105361],{"__ignoreMap":174},[254,105362,105363],{"class":256,"line":257},[254,105364,104667],{"class":264},[14,105366,105367],{},"这会把时间、位置、速度恢复到初始状态。",[14,105369,105370],{},"手动改高度：",[245,105372,105374],{"className":30519,"code":105373,"language":30521,"meta":174,"style":174},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[251,105375,105376,105388],{"__ignoreMap":174},[254,105377,105378,105380,105382,105384,105386],{"class":256,"line":257},[254,105379,104840],{"class":264},[254,105381,342],{"class":313},[254,105383,4583],{"class":264},[254,105385,310],{"class":260},[254,105387,104849],{"class":313},[254,105389,105390],{"class":256,"line":175},[254,105391,104684],{"class":264},[14,105393,105394,105395,105398,105399,105402],{},"这个例子里 ",[251,105396,105397],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[251,105400,105401],{},"2.0"," 表示把小球放到更高的位置。",[225,105404,101849],{"id":101849},[245,105406,105407],{"className":30519,"code":105291,"language":30521,"meta":174,"style":174},[251,105408,105409],{"__ignoreMap":174},[254,105410,105411,105413,105415,105417,105419,105421,105423],{"class":256,"line":257},[254,105412,32088],{"class":260},[254,105414,105017],{"class":2103},[254,105416,105020],{"class":264},[254,105418,1439],{"class":313},[254,105420,105025],{"class":264},[254,105422,95827],{"class":313},[254,105424,3879],{"class":264},[14,105426,105427],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[21,105429,105430,105439,105444],{},[24,105431,105432,105435,105436,105438],{},[251,105433,105434],{},"prefix","：一段文字，比如 ",[251,105437,105143],{},"，用来说明现在打印的是哪个阶段。",[24,105440,105441,105443],{},[251,105442,102226],{},"：MuJoCo 模型。",[24,105445,105446,105448],{},[251,105447,33542],{},"：MuJoCo 当前状态。",[14,105450,105451,477,105454,105457],{},[251,105452,105453],{},"prefix: str",[251,105455,105456],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[245,105459,105461],{"className":30519,"code":105460,"language":30521,"meta":174,"style":174},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[251,105462,105463],{"__ignoreMap":174},[254,105464,105465,105467,105469,105471,105473,105475],{"class":256,"line":257},[254,105466,30556],{"class":313},[254,105468,265],{"class":264},[254,105470,105068],{"class":369},[254,105472,105071],{"class":264},[254,105474,557],{"class":313},[254,105476,30638],{"class":264},[14,105478,105479,105482],{},[251,105480,105481],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[245,105484,105486],{"className":30519,"code":105485,"language":30521,"meta":174,"style":174},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[251,105487,105488,105500],{"__ignoreMap":174},[254,105489,105490,105492,105494,105496,105498],{"class":256,"line":257},[254,105491,101775],{"class":264},[254,105493,310],{"class":260},[254,105495,101553],{"class":264},[254,105497,101455],{"class":313},[254,105499,271],{"class":264},[254,105501,105502,105504,105506],{"class":256,"line":175},[254,105503,101799],{"class":264},[254,105505,310],{"class":260},[254,105507,101567],{"class":264},[14,105509,105510],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[245,105512,105514],{"className":30519,"code":105513,"language":30521,"meta":174,"style":174},"print_state(\"initial\", model, data)\n",[251,105515,105516],{"__ignoreMap":174},[254,105517,105518,105521,105523],{"class":256,"line":257},[254,105519,105520],{"class":264},"print_state(",[254,105522,105143],{"class":369},[254,105524,105146],{"class":264},[14,105526,105527,105528,105531],{},"调用刚才定义的 ",[251,105529,105530],{},"print_state"," 函数，打印初始状态。",[245,105533,105534],{"className":30519,"code":105321,"language":30521,"meta":174,"style":174},[251,105535,105536,105552],{"__ignoreMap":174},[254,105537,105538,105540,105542,105544,105546,105548,105550],{"class":256,"line":257},[254,105539,3165],{"class":260},[254,105541,101642],{"class":264},[254,105543,26184],{"class":260},[254,105545,32584],{"class":313},[254,105547,265],{"class":264},[254,105549,920],{"class":313},[254,105551,30927],{"class":264},[254,105553,105554],{"class":256,"line":175},[254,105555,101840],{"class":264},[14,105557,105558],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[245,105560,105561],{"className":30519,"code":104667,"language":30521,"meta":174,"style":174},[251,105562,105563],{"__ignoreMap":174},[254,105564,105565],{"class":256,"line":257},[254,105566,104667],{"class":264},[14,105568,105569,105570,105572,105573,105575],{},"重置 ",[251,105571,33542],{},"。注意它不会重新创建 ",[251,105574,102226],{},"，因为模型结构没有变，只是状态回到初始值。",[245,105577,105578],{"className":30519,"code":104833,"language":30521,"meta":174,"style":174},[251,105579,105580],{"__ignoreMap":174},[254,105581,105582,105584,105586,105588,105590],{"class":256,"line":257},[254,105583,104840],{"class":264},[254,105585,342],{"class":313},[254,105587,4583],{"class":264},[254,105589,310],{"class":260},[254,105591,104849],{"class":313},[14,105593,105594,105595,477,105598,477,105601,105603],{},"这行是“手动改状态”。在 freejoint 中，",[251,105596,105597],{},"qpos[0]",[251,105599,105600],{},"qpos[1]",[251,105602,105397],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[245,105605,105606],{"className":30519,"code":104684,"language":30521,"meta":174,"style":174},[251,105607,105608],{"__ignoreMap":174},[254,105609,105610],{"class":256,"line":257},[254,105611,104684],{"class":264},[14,105613,105614,105615,105617,105618,105620],{},"手动改完 ",[251,105616,104171],{}," 后，调用 ",[251,105619,104391],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[34,105622,102457],{"id":102456},[14,105624,105625],{},"你会看到:",[21,105627,105628,105633,105638,105641],{},[24,105629,105630,105631],{},"初始时间为 ",[251,105632,456],{},[24,105634,105635,105636],{},"50 步后时间约为 ",[251,105637,35470],{},[24,105639,105640],{},"reset 后状态恢复",[24,105642,105643,105644,105647,105648],{},"手动修改 ",[251,105645,105646],{},"data.qpos[2]"," 后，小球高度变为 ",[251,105649,105401],{},[14,105651,105652,105654],{},[251,105653,105397],{}," 在这个例子中表示自由刚体的 z 坐标。",[14,105656,105657],{},"输出里可以重点看三件事：",[21,105659,105660,105668,105673],{},[24,105661,105662,105664,105665,105667],{},[251,105663,2527],{}," 是否随着 ",[251,105666,101356],{}," 增加。",[24,105669,105670,105672],{},[251,105671,104171],{}," 的 z 坐标是否因为下落而变化。",[24,105674,105675,105677,105678,28526],{},[251,105676,104493],{}," 后时间是否回到 ",[251,105679,456],{},[34,105681,102489],{"id":102488},[21,105683,105684,105690,105696,105702,105705,105714],{},[24,105685,105686,105687,28526],{},"修改 timestep 为 ",[251,105688,105689],{},"0.005",[24,105691,105692,105693,28526],{},"重新运行，检查 50 步后时间是否约为 ",[251,105694,105695],{},"0.25",[24,105697,105698,105699,28526],{},"修改重力为 ",[251,105700,105701],{},"0 0 -1.0",[24,105703,105704],{},"观察小球下降速度是否变慢。",[24,105706,102552,105707,102555,105710,105713],{},[251,105708,105709],{},"data.qpos[2] = 2.0",[251,105711,105712],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[24,105715,105716,105717,105720],{},"注释掉 ",[251,105718,105719],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[34,105722,102594],{"id":102593},[225,105724,105726,105727,105729],{"id":105725},"修改-dataqpos-后位置没有更新","修改 ",[251,105728,101211],{}," 后位置没有更新",[14,105731,102603],{},[245,105733,105734],{"className":30519,"code":104684,"language":30521,"meta":174,"style":174},[251,105735,105736],{"__ignoreMap":174},[254,105737,105738],{"class":256,"line":257},[254,105739,104684],{"class":264},[225,105741,105742],{"id":105742},"数组维度看不懂",[14,105744,105745],{},"打印模型维度:",[245,105747,105749],{"className":30519,"code":105748,"language":30521,"meta":174,"style":174},"print(model.nq, model.nv, model.nu)\n",[251,105750,105751],{"__ignoreMap":174},[254,105752,105753,105755],{"class":256,"line":257},[254,105754,30556],{"class":313},[254,105756,105757],{"class":264},"(model.nq, model.nv, model.nu)\n",[402,105759,105760,105768],{},[405,105761,105762],{},[408,105763,105764,105766],{},[411,105765,104715],{"align":23877},[411,105767,100841],{"align":23877},[449,105769,105770,105780,105790],{},[408,105771,105772,105777],{},[454,105773,105774],{"align":23877},[251,105775,105776],{},"nq",[454,105778,105779],{"align":23877},"位置变量数量",[408,105781,105782,105787],{},[454,105783,105784],{"align":23877},[251,105785,105786],{},"nv",[454,105788,105789],{"align":23877},"速度变量数量",[408,105791,105792,105796],{},[454,105793,105794],{"align":23877},[251,105795,102303],{},[454,105797,105798],{"align":23877},"控制输入数量",[225,105800,105802,105803,105805],{"id":105801},"误以为-qpos-一定等于关节数","误以为 ",[251,105804,104171],{}," 一定等于关节数",[14,105807,105808,105809,82671,105811,105813,105814,105816],{},"不是。例如 ",[251,105810,101761],{},[251,105812,104171],{}," 是 7 维，但 ",[251,105815,104501],{}," 是 6 维。",[225,105818,105820,105821,105823],{"id":105819},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[251,105822,104171],{}," 的第几位",[14,105825,105826],{},"初学时可以先打印：",[245,105828,105830],{"className":30519,"code":105829,"language":30521,"meta":174,"style":174},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[251,105831,105832,105842,105852,105864],{"__ignoreMap":174},[254,105833,105834,105836,105838,105840],{"class":256,"line":257},[254,105835,30556],{"class":313},[254,105837,265],{"class":264},[254,105839,101580],{"class":369},[254,105841,101583],{"class":264},[254,105843,105844,105846,105848,105850],{"class":256,"line":175},[254,105845,30556],{"class":313},[254,105847,265],{"class":264},[254,105849,101592],{"class":369},[254,105851,101595],{"class":264},[254,105853,105854,105856,105858,105861],{"class":256,"line":1319},[254,105855,30556],{"class":313},[254,105857,265],{"class":264},[254,105859,105860],{"class":369},"\"qpos:\"",[254,105862,105863],{"class":264},", data.qpos)\n",[254,105865,105866,105868,105870,105873],{"class":256,"line":1334},[254,105867,30556],{"class":313},[254,105869,265],{"class":264},[254,105871,105872],{"class":369},"\"qvel:\"",[254,105874,105875],{"class":264},", data.qvel)\n",[14,105877,105878],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[225,105880,105881],{"id":105881},"仿真结果每次都一样",[14,105883,105884,105885,105887],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[251,105886,104171],{},"、目标点或控制输入。",[34,105889,102748],{"id":102747},[14,105891,105892,105893,24759],{},"Python 控制 MuJoCo 的核心就是读写 ",[251,105894,33542],{},[21,105896,105897,105905,105910,105915],{},[24,105898,105899,105900,101159,105902,105904],{},"用 ",[251,105901,101211],{},[251,105903,101214],{}," 读取状态。",[24,105906,105899,105907,105909],{},[251,105908,101217],{}," 写入控制。",[24,105911,105899,105912,105914],{},[251,105913,101356],{}," 推进时间。",[24,105916,105917,105918,105920],{},"手动改状态后用 ",[251,105919,104391],{}," 刷新派生量。",[14,105922,105923],{},"理解这一章后，就可以进入关节和 actuator 控制。",[5267,105925,105926],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":174,"searchDepth":175,"depth":175,"links":105928},[105929,105930,105931,105938,105942,105943,105944,105954],{"id":100787,"depth":175,"text":100788},{"id":100910,"depth":175,"text":100911},{"id":101185,"depth":175,"text":101186,"children":105932},[105933,105935,105937],{"id":104696,"depth":1319,"text":105934},"qpos、qvel、ctrl 是什么",{"id":104774,"depth":1319,"text":105936},"mj_step 和 mj_forward 的区别",{"id":104863,"depth":1319,"text":104864},{"id":101393,"depth":175,"text":101394,"children":105939},[105940,105941],{"id":101713,"depth":1319,"text":101713},{"id":101849,"depth":1319,"text":101849},{"id":102456,"depth":175,"text":102457},{"id":102488,"depth":175,"text":102489},{"id":102593,"depth":175,"text":102594,"children":105945},[105946,105948,105949,105951,105953],{"id":105725,"depth":1319,"text":105947},"修改 data.qpos 后位置没有更新",{"id":105742,"depth":1319,"text":105742},{"id":105801,"depth":1319,"text":105950},"误以为 qpos 一定等于关节数",{"id":105819,"depth":1319,"text":105952},"不知道某个元素在 qpos 的第几位",{"id":105881,"depth":1319,"text":105881},{"id":102747,"depth":175,"text":102748},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104459,"description":174},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":105961,"title":105962,"body":105963,"description":174,"extension":181,"meta":107653,"navigation":184,"path":107654,"seo":107655,"stem":107656,"__hash__":107657},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":105964,"toc":107629},[105965,105968,105970,105973,105975,106000,106003,106022,106025,106027,106029,106053,106055,106069,106071,106112,106114,106138,106140,106143,106177,106179,106192,106195,106263,106272,106276,106279,106313,106319,106322,106326,106365,106368,106388,106392,106435,106437,106466,106469,106475,106478,106480,106874,106876,106888,106890,106901,106903,106906,106935,106943,106946,106981,106984,106986,106994,106997,106999,107010,107020,107040,107043,107079,107091,107139,107158,107200,107213,107241,107246,107267,107277,107295,107298,107332,107335,107355,107358,107377,107383,107385,107388,107394,107400,107410,107413,107419,107428,107430,107476,107478,107484,107490,107493,107496,107516,107519,107525,107531,107533,107556,107559,107562,107571,107574,107612,107614,107617,107623,107626],[10,105966,105962],{"id":105967},"_4关节actuator-与力控制",[34,105969,100788],{"id":100787},[14,105971,105972],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[14,105974,104472],{},[21,105976,105977,105983,105988,105992,105997],{},[24,105978,105979,105982],{},[251,105980,105981],{},"hinge"," 关节",[24,105984,105985],{},[251,105986,105987],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[24,105989,105990],{},[251,105991,101217],{},[24,105993,105994],{},[251,105995,105996],{},"ctrlrange",[24,105998,105999],{},"读取关节角和角速度",[14,106001,106002],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[245,106004,106006],{"className":30519,"code":106005,"language":30521,"meta":174,"style":174},"data.ctrl[0] = ...\n",[251,106007,106008],{"__ignoreMap":174},[254,106009,106010,106013,106015,106017,106019],{"class":256,"line":257},[254,106011,106012],{"class":264},"data.ctrl[",[254,106014,456],{"class":313},[254,106016,4583],{"class":264},[254,106018,310],{"class":260},[254,106020,106021],{"class":313}," ...\n",[14,106023,106024],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[34,106026,100911],{"id":100910},[14,106028,100914],{},[245,106030,106031],{"className":23963,"code":104529,"language":23965,"meta":174,"style":174},[251,106032,106033],{"__ignoreMap":174},[254,106034,106035,106037,106039,106041,106043,106045,106047,106049,106051],{"class":256,"line":257},[254,106036,24717],{"class":2103},[254,106038,26456],{"class":369},[254,106040,23975],{"class":369},[254,106042,26541],{"class":313},[254,106044,104544],{"class":369},[254,106046,100939],{"class":369},[254,106048,102642],{"class":369},[254,106050,100955],{"class":369},[254,106052,104553],{"class":369},[14,106054,102960],{},[245,106056,106057],{"className":23963,"code":101060,"language":23965,"meta":174,"style":174},[251,106058,106059],{"__ignoreMap":174},[254,106060,106061,106063,106065,106067],{"class":256,"line":257},[254,106062,23972],{"class":2103},[254,106064,23975],{"class":369},[254,106066,101071],{"class":369},[254,106068,101074],{"class":369},[14,106070,102977],{},[245,106072,106074],{"className":23963,"code":106073,"language":23965,"meta":174,"style":174},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[251,106075,106076,106093,106102],{"__ignoreMap":174},[254,106077,106078,106080,106082,106084,106087,106089,106091],{"class":256,"line":257},[254,106079,30471],{"class":2103},[254,106081,29317],{"class":369},[254,106083,25256],{"class":313},[254,106085,106086],{"class":369}," mujoco-control",[254,106088,101116],{"class":369},[254,106090,101119],{"class":313},[254,106092,101122],{"class":313},[254,106094,106095,106097,106099],{"class":256,"line":175},[254,106096,30471],{"class":2103},[254,106098,101129],{"class":369},[254,106100,106101],{"class":369}," mujoco-control\n",[254,106103,106104,106106,106108,106110],{"class":256,"line":1319},[254,106105,23972],{"class":2103},[254,106107,23975],{"class":369},[254,106109,101071],{"class":369},[254,106111,101074],{"class":369},[14,106113,101145],{},[21,106115,106116,106122,106129,106135],{},[24,106117,106118,106121],{},[251,106119,106120],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[24,106123,106124,106126,106127,28526],{},[251,106125,101217],{}," 长度等于 ",[251,106128,102299],{},[24,106130,82363,106131,106134],{},[251,106132,106133],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[24,106136,106137],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[34,106139,101186],{"id":101185},[14,106141,106142],{},"关节决定 body 如何运动:",[245,106144,106146],{"className":53208,"code":106145,"language":53210,"meta":174,"style":174},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[251,106147,106148],{"__ignoreMap":174},[254,106149,106150,106152,106154,106156,106158,106161,106163,106165,106167,106170,106172,106175],{"class":256,"line":257},[254,106151,1174],{"class":264},[254,106153,103097],{"class":51441},[254,106155,15061],{"class":2103},[254,106157,310],{"class":264},[254,106159,106160],{"class":369},"\"hinge\"",[254,106162,53965],{"class":2103},[254,106164,310],{"class":264},[254,106166,106160],{"class":369},[254,106168,106169],{"class":2103}," axis",[254,106171,310],{"class":264},[254,106173,106174],{"class":369},"\"0 1 0\"",[254,106176,101285],{"class":264},[14,106178,103193],{},[21,106180,106181,106186,106189],{},[24,106182,106183,106184],{},"名字是 ",[251,106185,105981],{},[24,106187,106188],{},"类型是旋转关节",[24,106190,106191],{},"绕 y 轴旋转",[14,106193,106194],{},"actuator 决定如何施加控制:",[245,106196,106198],{"className":53208,"code":106197,"language":53210,"meta":174,"style":174},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[251,106199,106200,106209,106255],{"__ignoreMap":174},[254,106201,106202,106204,106207],{"class":256,"line":257},[254,106203,1174],{"class":264},[254,106205,106206],{"class":51441},"actuator",[254,106208,51448],{"class":264},[254,106210,106211,106213,106216,106218,106220,106223,106226,106228,106230,106233,106235,106237,106240,106242,106245,106248,106250,106253],{"class":256,"line":175},[254,106212,52285],{"class":264},[254,106214,106215],{"class":51441},"motor",[254,106217,15061],{"class":2103},[254,106219,310],{"class":264},[254,106221,106222],{"class":369},"\"hinge_motor\"",[254,106224,106225],{"class":2103}," joint",[254,106227,310],{"class":264},[254,106229,106160],{"class":369},[254,106231,106232],{"class":2103}," gear",[254,106234,310],{"class":264},[254,106236,3818],{"class":369},[254,106238,106239],{"class":2103}," ctrlrange",[254,106241,310],{"class":264},[254,106243,106244],{"class":369},"\"-2 2\"",[254,106246,106247],{"class":2103}," ctrllimited",[254,106249,310],{"class":264},[254,106251,106252],{"class":369},"\"true\"",[254,106254,101285],{"class":264},[254,106256,106257,106259,106261],{"class":256,"line":1319},[254,106258,51926],{"class":264},[254,106260,106206],{"class":51441},[254,106262,51448],{"class":264},[14,106264,106265,106268,106269,28526],{},[251,106266,106267],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[251,106270,106271],{},"[-2, 2]",[225,106273,106275],{"id":106274},"joint-和-actuator-的关系","joint 和 actuator 的关系",[14,106277,106278],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[402,106280,106281,106291],{},[405,106282,106283],{},[408,106284,106285,106287,106289],{},[411,106286,25894],{"align":23877},[411,106288,102837],{"align":23877},[411,106290,100875],{"align":23877},[449,106292,106293,106303],{},[408,106294,106295,106297,106300],{},[454,106296,103097],{"align":23877},[454,106298,106299],{"align":23877},"定义能怎么动",[454,106301,106302],{"align":23877},"门轴允许门旋转",[408,106304,106305,106307,106310],{},[454,106306,106206],{"align":23877},[454,106308,106309],{"align":23877},"定义怎么施力或控制",[454,106311,106312],{"align":23877},"人推门、马达带动门",[14,106314,106315,106316,106318],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[251,106317,101217],{}," 主动控制它。",[14,106320,106321],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[225,106323,106325],{"id":106324},"hinge-joint","hinge joint",[245,106327,106329],{"className":53208,"code":106328,"language":53210,"meta":174,"style":174},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[251,106330,106331],{"__ignoreMap":174},[254,106332,106333,106335,106337,106339,106341,106343,106345,106347,106349,106351,106353,106355,106358,106360,106363],{"class":256,"line":257},[254,106334,1174],{"class":264},[254,106336,103097],{"class":51441},[254,106338,15061],{"class":2103},[254,106340,310],{"class":264},[254,106342,106160],{"class":369},[254,106344,53965],{"class":2103},[254,106346,310],{"class":264},[254,106348,106160],{"class":369},[254,106350,106169],{"class":2103},[254,106352,310],{"class":264},[254,106354,106174],{"class":369},[254,106356,106357],{"class":2103}," damping",[254,106359,310],{"class":264},[254,106361,106362],{"class":369},"\"0.1\"",[254,106364,101285],{"class":264},[14,106366,106367],{},"含义：",[21,106369,106370,106376,106382],{},[24,106371,106372,106375],{},[251,106373,106374],{},"type=\"hinge\"","：只能绕一个轴旋转。",[24,106377,106378,106381],{},[251,106379,106380],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[24,106383,106384,106387],{},[251,106385,106386],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[225,106389,106391],{"id":106390},"motor-actuator","motor actuator",[245,106393,106395],{"className":53208,"code":106394,"language":53210,"meta":174,"style":174},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[251,106396,106397],{"__ignoreMap":174},[254,106398,106399,106401,106403,106405,106407,106409,106411,106413,106415,106417,106419,106421,106423,106425,106427,106429,106431,106433],{"class":256,"line":257},[254,106400,1174],{"class":264},[254,106402,106215],{"class":51441},[254,106404,15061],{"class":2103},[254,106406,310],{"class":264},[254,106408,106222],{"class":369},[254,106410,106225],{"class":2103},[254,106412,310],{"class":264},[254,106414,106160],{"class":369},[254,106416,106232],{"class":2103},[254,106418,310],{"class":264},[254,106420,3818],{"class":369},[254,106422,106239],{"class":2103},[254,106424,310],{"class":264},[254,106426,106244],{"class":369},[254,106428,106247],{"class":2103},[254,106430,310],{"class":264},[254,106432,106252],{"class":369},[254,106434,101285],{"class":264},[14,106436,106367],{},[21,106438,106439,106448,106454,106460],{},[24,106440,106441,106444,106445,106447],{},[251,106442,106443],{},"joint=\"hinge\"","：这个电机作用在名为 ",[251,106446,105981],{}," 的关节上。",[24,106449,106450,106453],{},[251,106451,106452],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[24,106455,106456,106459],{},[251,106457,106458],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[24,106461,106462,106465],{},[251,106463,106464],{},"ctrllimited=\"true\"","：启用控制范围限制。",[14,106467,106468],{},"简单理解：",[245,106470,106473],{"className":106471,"code":106472,"language":5328,"meta":174},[5326],"实际施加效果 ≈ data.ctrl[0] * gear\n",[251,106474,106472],{"__ignoreMap":174},[14,106476,106477],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[34,106479,101394],{"id":101393},[245,106481,106483],{"className":30519,"code":106482,"language":30521,"meta":174,"style":174},"import math\n\nimport mujoco\nimport numpy as np\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"one_link_motor\">\n  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n\n  \u003Cworldbody>\n    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n\n      \u003Cbody name=\"link\" pos=\"0 0 0\">\n        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n        \u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\" rgba=\"0.1 0.4 1 1\"\u002F>\n      \u003C\u002Fbody>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\n  \u003Cactuator>\n    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n  \u003C\u002Factuator>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n\n    print(\"nq:\", model.nq)\n    print(\"nv:\", model.nv)\n    print(\"nu:\", model.nu)\n\n    if model.nu != 1:\n        raise RuntimeError(\"expected exactly one actuator\")\n\n    for step in range(2000):\n        t = step * model.opt.timestep\n        data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n        mujoco.mj_step(model, data)\n\n    print(\"time:\", data.time)\n    print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n    print(\"joint qvel:\", np.round(data.qvel.copy(), 4))\n    print(\"last ctrl:\", data.ctrl.copy())\n\n\nif __name__ == \"__main__\":\n    main()\n",[251,106484,106485,106492,106496,106502,106512,106516,106520,106528,106533,106538,106542,106546,106551,106556,106560,106565,106570,106575,106580,106584,106588,106592,106597,106602,106607,106611,106615,106619,106623,106635,106647,106655,106659,106669,106679,106689,106693,106706,106719,106723,106740,106754,106789,106793,106797,106808,106823,106838,106850,106854,106858,106870],{"__ignoreMap":174},[254,106486,106487,106489],{"class":256,"line":257},[254,106488,30533],{"class":260},[254,106490,106491],{"class":264}," math\n",[254,106493,106494],{"class":256,"line":175},[254,106495,2540],{"emptyLinePlaceholder":184},[254,106497,106498,106500],{"class":256,"line":1319},[254,106499,30533],{"class":260},[254,106501,101442],{"class":264},[254,106503,106504,106506,106508,106510],{"class":256,"line":1334},[254,106505,30533],{"class":260},[254,106507,31521],{"class":264},[254,106509,31524],{"class":260},[254,106511,31527],{"class":264},[254,106513,106514],{"class":256,"line":1340},[254,106515,2540],{"emptyLinePlaceholder":184},[254,106517,106518],{"class":256,"line":1354},[254,106519,2540],{"emptyLinePlaceholder":184},[254,106521,106522,106524,106526],{"class":256,"line":1360},[254,106523,101455],{"class":313},[254,106525,13705],{"class":260},[254,106527,101460],{"class":369},[254,106529,106530],{"class":256,"line":1451},[254,106531,106532],{"class":369},"\u003Cmujoco model=\"one_link_motor\">\n",[254,106534,106535],{"class":256,"line":1457},[254,106536,106537],{"class":369},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[254,106539,106540],{"class":256,"line":1469},[254,106541,2540],{"emptyLinePlaceholder":184},[254,106543,106544],{"class":256,"line":1752},[254,106545,101479],{"class":369},[254,106547,106548],{"class":256,"line":1757},[254,106549,106550],{"class":369},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[254,106552,106553],{"class":256,"line":1763},[254,106554,106555],{"class":369},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[254,106557,106558],{"class":256,"line":1768},[254,106559,2540],{"emptyLinePlaceholder":184},[254,106561,106562],{"class":256,"line":1782},[254,106563,106564],{"class":369},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[254,106566,106567],{"class":256,"line":1787},[254,106568,106569],{"class":369},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[254,106571,106572],{"class":256,"line":1793},[254,106573,106574],{"class":369},"        \u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\" rgba=\"0.1 0.4 1 1\"\u002F>\n",[254,106576,106577],{"class":256,"line":1814},[254,106578,106579],{"class":369},"      \u003C\u002Fbody>\n",[254,106581,106582],{"class":256,"line":1819},[254,106583,101508],{"class":369},[254,106585,106586],{"class":256,"line":1833},[254,106587,101513],{"class":369},[254,106589,106590],{"class":256,"line":1838},[254,106591,2540],{"emptyLinePlaceholder":184},[254,106593,106594],{"class":256,"line":1867},[254,106595,106596],{"class":369},"  \u003Cactuator>\n",[254,106598,106599],{"class":256,"line":1872},[254,106600,106601],{"class":369},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[254,106603,106604],{"class":256,"line":1889},[254,106605,106606],{"class":369},"  \u003C\u002Factuator>\n",[254,106608,106609],{"class":256,"line":1894},[254,106610,101518],{"class":369},[254,106612,106613],{"class":256,"line":1899},[254,106614,95839],{"class":369},[254,106616,106617],{"class":256,"line":1904},[254,106618,2540],{"emptyLinePlaceholder":184},[254,106620,106621],{"class":256,"line":1918},[254,106622,2540],{"emptyLinePlaceholder":184},[254,106624,106625,106627,106629,106631,106633],{"class":256,"line":1923},[254,106626,32088],{"class":260},[254,106628,2113],{"class":2103},[254,106630,101539],{"class":264},[254,106632,95827],{"class":313},[254,106634,3879],{"class":264},[254,106636,106637,106639,106641,106643,106645],{"class":256,"line":2717},[254,106638,101548],{"class":264},[254,106640,310],{"class":260},[254,106642,101553],{"class":264},[254,106644,101455],{"class":313},[254,106646,271],{"class":264},[254,106648,106649,106651,106653],{"class":256,"line":2731},[254,106650,101562],{"class":264},[254,106652,310],{"class":260},[254,106654,101567],{"class":264},[254,106656,106657],{"class":256,"line":2739},[254,106658,2540],{"emptyLinePlaceholder":184},[254,106660,106661,106663,106665,106667],{"class":256,"line":2744},[254,106662,31440],{"class":313},[254,106664,265],{"class":264},[254,106666,101580],{"class":369},[254,106668,101583],{"class":264},[254,106670,106671,106673,106675,106677],{"class":256,"line":2750},[254,106672,31440],{"class":313},[254,106674,265],{"class":264},[254,106676,101592],{"class":369},[254,106678,101595],{"class":264},[254,106680,106681,106683,106685,106687],{"class":256,"line":2756},[254,106682,31440],{"class":313},[254,106684,265],{"class":264},[254,106686,101604],{"class":369},[254,106688,101607],{"class":264},[254,106690,106691],{"class":256,"line":2761},[254,106692,2540],{"emptyLinePlaceholder":184},[254,106694,106695,106697,106700,106702,106704],{"class":256,"line":8089},[254,106696,3241],{"class":260},[254,106698,106699],{"class":264}," model.nu ",[254,106701,21089],{"class":260},[254,106703,25259],{"class":313},[254,106705,3879],{"class":264},[254,106707,106708,106710,106712,106714,106717],{"class":256,"line":8113},[254,106709,103573],{"class":260},[254,106711,103576],{"class":313},[254,106713,265],{"class":264},[254,106715,106716],{"class":369},"\"expected exactly one actuator\"",[254,106718,271],{"class":264},[254,106720,106721],{"class":256,"line":8118},[254,106722,2540],{"emptyLinePlaceholder":184},[254,106724,106725,106727,106729,106731,106733,106735,106738],{"class":256,"line":8124},[254,106726,3341],{"class":260},[254,106728,31757],{"class":264},[254,106730,26184],{"class":260},[254,106732,32584],{"class":313},[254,106734,265],{"class":264},[254,106736,106737],{"class":313},"2000",[254,106739,30927],{"class":264},[254,106741,106742,106745,106747,106749,106751],{"class":256,"line":8151},[254,106743,106744],{"class":264},"        t ",[254,106746,310],{"class":260},[254,106748,31757],{"class":264},[254,106750,719],{"class":260},[254,106752,106753],{"class":264}," model.opt.timestep\n",[254,106755,106756,106759,106761,106763,106765,106768,106770,106773,106775,106777,106780,106782,106784,106786],{"class":256,"line":8156},[254,106757,106758],{"class":264},"        data.ctrl[",[254,106760,456],{"class":313},[254,106762,4583],{"class":264},[254,106764,310],{"class":260},[254,106766,106767],{"class":313}," 1.5",[254,106769,6659],{"class":260},[254,106771,106772],{"class":264}," math.sin(",[254,106774,105401],{"class":313},[254,106776,6659],{"class":260},[254,106778,106779],{"class":264}," math.pi ",[254,106781,719],{"class":260},[254,106783,62008],{"class":313},[254,106785,6659],{"class":260},[254,106787,106788],{"class":264}," t)\n",[254,106790,106791],{"class":256,"line":8162},[254,106792,101657],{"class":264},[254,106794,106795],{"class":256,"line":8174},[254,106796,2540],{"emptyLinePlaceholder":184},[254,106798,106799,106801,106803,106806],{"class":256,"line":8186},[254,106800,31440],{"class":313},[254,106802,265],{"class":264},[254,106804,106805],{"class":369},"\"time:\"",[254,106807,101619],{"class":264},[254,106809,106810,106812,106814,106817,106819,106821],{"class":256,"line":8198},[254,106811,31440],{"class":313},[254,106813,265],{"class":264},[254,106815,106816],{"class":369},"\"joint qpos:\"",[254,106818,105071],{"class":264},[254,106820,557],{"class":313},[254,106822,30638],{"class":264},[254,106824,106825,106827,106829,106832,106834,106836],{"class":256,"line":9857},[254,106826,31440],{"class":313},[254,106828,265],{"class":264},[254,106830,106831],{"class":369},"\"joint qvel:\"",[254,106833,105087],{"class":264},[254,106835,557],{"class":313},[254,106837,30638],{"class":264},[254,106839,106840,106842,106844,106847],{"class":256,"line":9882},[254,106841,31440],{"class":313},[254,106843,265],{"class":264},[254,106845,106846],{"class":369},"\"last ctrl:\"",[254,106848,106849],{"class":264},", data.ctrl.copy())\n",[254,106851,106852],{"class":256,"line":9905},[254,106853,2540],{"emptyLinePlaceholder":184},[254,106855,106856],{"class":256,"line":9929},[254,106857,2540],{"emptyLinePlaceholder":184},[254,106859,106860,106862,106864,106866,106868],{"class":256,"line":9934},[254,106861,1671],{"class":260},[254,106863,31361],{"class":313},[254,106865,101700],{"class":260},[254,106867,101703],{"class":369},[254,106869,3879],{"class":264},[254,106871,106872],{"class":256,"line":9939},[254,106873,101710],{"class":264},[14,106875,103711],{},[245,106877,106879],{"className":23963,"code":106878,"language":23965,"meta":174,"style":174},"touch ch4_joint_motor.py\n",[251,106880,106881],{"__ignoreMap":174},[254,106882,106883,106885],{"class":256,"line":257},[254,106884,101424],{"class":2103},[254,106886,106887],{"class":369}," ch4_joint_motor.py\n",[14,106889,102442],{},[245,106891,106893],{"className":23963,"code":106892,"language":23965,"meta":174,"style":174},"python ch4_joint_motor.py\n",[251,106894,106895],{"__ignoreMap":174},[254,106896,106897,106899],{"class":256,"line":257},[254,106898,30521],{"class":2103},[254,106900,106887],{"class":369},[225,106902,101713],{"id":101713},[14,106904,106905],{},"检查 actuator 数量：",[245,106907,106909],{"className":30519,"code":106908,"language":30521,"meta":174,"style":174},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[251,106910,106911,106923],{"__ignoreMap":174},[254,106912,106913,106915,106917,106919,106921],{"class":256,"line":257},[254,106914,1671],{"class":260},[254,106916,106699],{"class":264},[254,106918,21089],{"class":260},[254,106920,25259],{"class":313},[254,106922,3879],{"class":264},[254,106924,106925,106927,106929,106931,106933],{"class":256,"line":175},[254,106926,104036],{"class":260},[254,106928,103576],{"class":313},[254,106930,265],{"class":264},[254,106932,106716],{"class":369},[254,106934,271],{"class":264},[14,106936,106937,106939,106940,106942],{},[251,106938,102299],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[251,106941,101217],{}," 长度应该是 1。",[14,106944,106945],{},"产生正弦控制信号：",[245,106947,106949],{"className":30519,"code":106948,"language":30521,"meta":174,"style":174},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[251,106950,106951],{"__ignoreMap":174},[254,106952,106953,106955,106957,106959,106961,106963,106965,106967,106969,106971,106973,106975,106977,106979],{"class":256,"line":257},[254,106954,106012],{"class":264},[254,106956,456],{"class":313},[254,106958,4583],{"class":264},[254,106960,310],{"class":260},[254,106962,106767],{"class":313},[254,106964,6659],{"class":260},[254,106966,106772],{"class":264},[254,106968,105401],{"class":313},[254,106970,6659],{"class":260},[254,106972,106779],{"class":264},[254,106974,719],{"class":260},[254,106976,62008],{"class":313},[254,106978,6659],{"class":260},[254,106980,106788],{"class":264},[14,106982,106983],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[14,106985,101814],{},[245,106987,106988],{"className":30519,"code":104646,"language":30521,"meta":174,"style":174},[251,106989,106990],{"__ignoreMap":174},[254,106991,106992],{"class":256,"line":257},[254,106993,104646],{"class":264},[14,106995,106996],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[225,106998,101849],{"id":101849},[245,107000,107002],{"className":30519,"code":107001,"language":30521,"meta":174,"style":174},"import math\n",[251,107003,107004],{"__ignoreMap":174},[254,107005,107006,107008],{"class":256,"line":257},[254,107007,30533],{"class":260},[254,107009,106491],{"class":264},[14,107011,107012,107013,101159,107016,107019],{},"导入 Python 标准库里的数学模块。后面要用 ",[251,107014,107015],{},"math.sin",[251,107017,107018],{},"math.pi"," 生成周期变化的控制信号。",[245,107021,107022],{"className":30519,"code":103827,"language":30521,"meta":174,"style":174},[251,107023,107024,107030],{"__ignoreMap":174},[254,107025,107026,107028],{"class":256,"line":257},[254,107027,30533],{"class":260},[254,107029,101442],{"class":264},[254,107031,107032,107034,107036,107038],{"class":256,"line":175},[254,107033,30533],{"class":260},[254,107035,31521],{"class":264},[254,107037,31524],{"class":260},[254,107039,31527],{"class":264},[14,107041,107042],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[245,107044,107045],{"className":53208,"code":106328,"language":53210,"meta":174,"style":174},[251,107046,107047],{"__ignoreMap":174},[254,107048,107049,107051,107053,107055,107057,107059,107061,107063,107065,107067,107069,107071,107073,107075,107077],{"class":256,"line":257},[254,107050,1174],{"class":264},[254,107052,103097],{"class":51441},[254,107054,15061],{"class":2103},[254,107056,310],{"class":264},[254,107058,106160],{"class":369},[254,107060,53965],{"class":2103},[254,107062,310],{"class":264},[254,107064,106160],{"class":369},[254,107066,106169],{"class":2103},[254,107068,310],{"class":264},[254,107070,106174],{"class":369},[254,107072,106357],{"class":2103},[254,107074,310],{"class":264},[254,107076,106362],{"class":369},[254,107078,101285],{"class":264},[14,107080,107081,107082,107084,107085,107087,107088,107090],{},"这行定义关节。",[251,107083,105981],{}," 表示旋转关节。",[251,107086,106380],{}," 表示绕 y 轴旋转。",[251,107089,106386],{}," 表示有一点阻尼，运动不会完全无损耗。",[245,107092,107094],{"className":53208,"code":107093,"language":53210,"meta":174,"style":174},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[251,107095,107096],{"__ignoreMap":174},[254,107097,107098,107100,107102,107104,107106,107109,107111,107113,107116,107119,107121,107124,107126,107128,107130,107132,107134,107137],{"class":256,"line":257},[254,107099,1174],{"class":264},[254,107101,101261],{"class":51441},[254,107103,15061],{"class":2103},[254,107105,310],{"class":264},[254,107107,107108],{"class":369},"\"link_geom\"",[254,107110,53965],{"class":2103},[254,107112,310],{"class":264},[254,107114,107115],{"class":369},"\"capsule\"",[254,107117,107118],{"class":2103}," fromto",[254,107120,310],{"class":264},[254,107122,107123],{"class":369},"\"0 0 0 0 0 0.5\"",[254,107125,101277],{"class":2103},[254,107127,310],{"class":264},[254,107129,103919],{"class":369},[254,107131,102142],{"class":2103},[254,107133,310],{"class":264},[254,107135,107136],{"class":369},"\"0.5\"",[254,107138,101285],{"class":264},[14,107140,107141,107142,107144,107145,107147,107148,107151,107152,28526,107155,107157],{},"这行定义摆杆的形状。",[251,107143,103306],{}," 是胶囊体，适合表示杆子。",[251,107146,103317],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[251,107149,107150],{},"(0,0,0)"," 延伸到 ",[251,107153,107154],{},"(0,0,0.5)",[251,107156,103311],{}," 是半径。",[245,107159,107160],{"className":53208,"code":106394,"language":53210,"meta":174,"style":174},[251,107161,107162],{"__ignoreMap":174},[254,107163,107164,107166,107168,107170,107172,107174,107176,107178,107180,107182,107184,107186,107188,107190,107192,107194,107196,107198],{"class":256,"line":257},[254,107165,1174],{"class":264},[254,107167,106215],{"class":51441},[254,107169,15061],{"class":2103},[254,107171,310],{"class":264},[254,107173,106222],{"class":369},[254,107175,106225],{"class":2103},[254,107177,310],{"class":264},[254,107179,106160],{"class":369},[254,107181,106232],{"class":2103},[254,107183,310],{"class":264},[254,107185,3818],{"class":369},[254,107187,106239],{"class":2103},[254,107189,310],{"class":264},[254,107191,106244],{"class":369},[254,107193,106247],{"class":2103},[254,107195,310],{"class":264},[254,107197,106252],{"class":369},[254,107199,101285],{"class":264},[14,107201,107202,107203,107205,107206,107209,107210,107212],{},"这行定义电机。它作用在 ",[251,107204,105981],{}," 关节上。",[251,107207,107208],{},"gear"," 可以理解成放大倍数。",[251,107211,105996],{}," 限制控制输入范围。",[245,107214,107215],{"className":30519,"code":106908,"language":30521,"meta":174,"style":174},[251,107216,107217,107229],{"__ignoreMap":174},[254,107218,107219,107221,107223,107225,107227],{"class":256,"line":257},[254,107220,1671],{"class":260},[254,107222,106699],{"class":264},[254,107224,21089],{"class":260},[254,107226,25259],{"class":313},[254,107228,3879],{"class":264},[254,107230,107231,107233,107235,107237,107239],{"class":256,"line":175},[254,107232,104036],{"class":260},[254,107234,103576],{"class":313},[254,107236,265],{"class":264},[254,107238,106716],{"class":369},[254,107240,271],{"class":264},[14,107242,107243,107245],{},[251,107244,102299],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[245,107247,107249],{"className":30519,"code":107248,"language":30521,"meta":174,"style":174},"for step in range(2000):\n",[251,107250,107251],{"__ignoreMap":174},[254,107252,107253,107255,107257,107259,107261,107263,107265],{"class":256,"line":257},[254,107254,3165],{"class":260},[254,107256,31757],{"class":264},[254,107258,26184],{"class":260},[254,107260,32584],{"class":313},[254,107262,265],{"class":264},[254,107264,106737],{"class":313},[254,107266,30927],{"class":264},[14,107268,107269,107270,107272,107273,107276],{},"循环 2000 步。这里没有用 ",[251,107271,1256],{},"，而是用 ",[251,107274,107275],{},"step","，因为后面要用当前步数计算时间。",[245,107278,107280],{"className":30519,"code":107279,"language":30521,"meta":174,"style":174},"t = step * model.opt.timestep\n",[251,107281,107282],{"__ignoreMap":174},[254,107283,107284,107287,107289,107291,107293],{"class":256,"line":257},[254,107285,107286],{"class":264},"t ",[254,107288,310],{"class":260},[254,107290,31757],{"class":264},[254,107292,719],{"class":260},[254,107294,106753],{"class":264},[14,107296,107297],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[245,107299,107300],{"className":30519,"code":106948,"language":30521,"meta":174,"style":174},[251,107301,107302],{"__ignoreMap":174},[254,107303,107304,107306,107308,107310,107312,107314,107316,107318,107320,107322,107324,107326,107328,107330],{"class":256,"line":257},[254,107305,106012],{"class":264},[254,107307,456],{"class":313},[254,107309,4583],{"class":264},[254,107311,310],{"class":260},[254,107313,106767],{"class":313},[254,107315,6659],{"class":260},[254,107317,106772],{"class":264},[254,107319,105401],{"class":313},[254,107321,6659],{"class":260},[254,107323,106779],{"class":264},[254,107325,719],{"class":260},[254,107327,62008],{"class":313},[254,107329,6659],{"class":260},[254,107331,106788],{"class":264},[14,107333,107334],{},"这行给电机输入一个正弦波。拆开看：",[21,107336,107337,107343,107349],{},[24,107338,107339,107342],{},[251,107340,107341],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[24,107344,107345,107348],{},[251,107346,107347],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[24,107350,107351,107354],{},[251,107352,107353],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[14,107356,107357],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[245,107359,107361],{"className":30519,"code":107360,"language":30521,"meta":174,"style":174},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[251,107362,107363],{"__ignoreMap":174},[254,107364,107365,107367,107369,107371,107373,107375],{"class":256,"line":257},[254,107366,30556],{"class":313},[254,107368,265],{"class":264},[254,107370,106816],{"class":369},[254,107372,105071],{"class":264},[254,107374,557],{"class":313},[254,107376,30638],{"class":264},[14,107378,107379,107380,107382],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[251,107381,101211],{}," 只有一个数。",[34,107384,102457],{"id":102456},[14,107386,107387],{},"输出类似:",[245,107389,107392],{"className":107390,"code":107391,"language":5328,"meta":174},[5326],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[251,107393,107391],{"__ignoreMap":174},[14,107395,107396,107397,107399],{},"这里 ",[251,107398,106267],{}," 是电机输入。",[14,107401,107402,107405,107406,107409],{},[251,107403,107404],{},"joint qpos"," 是关节角度，单位通常是弧度。",[251,107407,107408],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[14,107411,107412],{},"角度单位提示：",[245,107414,107417],{"className":107415,"code":107416,"language":5328,"meta":174},[5326],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[251,107418,107416],{"__ignoreMap":174},[14,107420,107421,107422,107424,107425,107427],{},"如果你看到 ",[251,107423,104171],{}," 是 ",[251,107426,35470],{},"，大约就是 28.6 度。",[34,107429,102489],{"id":102488},[21,107431,107432,107439,107442,107449,107452,107460,107468],{},[24,107433,102552,107434,102555,107436,28526],{},[251,107435,106452],{},[251,107437,107438],{},"gear=\"5\"",[24,107440,107441],{},"重新运行，观察关节运动是否更剧烈。",[24,107443,102552,107444,102555,107446,28526],{},[251,107445,105996],{},[251,107447,107448],{},"-0.2 0.2",[24,107450,107451],{},"重新运行，观察控制能力是否变弱。",[24,107453,107454,107455,107457,107458,28526],{},"去掉 actuator，确认 ",[251,107456,102299],{}," 变成 ",[251,107459,456],{},[24,107461,102552,107462,102555,107464,107467],{},[251,107463,106386],{},[251,107465,107466],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[24,107469,102552,107470,102555,107472,107475],{},[251,107471,106380],{},[251,107473,107474],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[34,107477,102594],{"id":102593},[225,107479,107481],{"id":107480},"indexerror-index-0-is-out-of-bounds",[251,107482,107483],{},"IndexError: index 0 is out of bounds",[14,107485,107486,107487,107489],{},"原因是 ",[251,107488,106133],{},"，没有 actuator。",[225,107491,107492],{"id":107492},"关节几乎不动",[14,107494,107495],{},"可能原因:",[21,107497,107498,107503,107507,107513],{},[24,107499,107500,107502],{},[251,107501,107208],{}," 太小",[24,107504,107505,107502],{},[251,107506,105996],{},[24,107508,107509,107512],{},[251,107510,107511],{},"damping"," 太大",[24,107514,107515],{},"重力方向导致运动不明显",[225,107517,107518],{"id":107518},"模型编译失败",[14,107520,107521,107522,107524],{},"检查 actuator 引用的 ",[251,107523,106443],{}," 是否存在，joint 名称是否拼写一致。",[225,107526,107528,107530],{"id":107527},"datactrl0-写了但没有效果",[251,107529,106267],{}," 写了但没有效果",[14,107532,102716],{},[21,107534,107535,107540,107543,107548,107553],{},[24,107536,107537,107539],{},[251,107538,102299],{}," 是否大于 0。",[24,107541,107542],{},"motor 是否引用了正确 joint。",[24,107544,107545,107547],{},[251,107546,107208],{}," 是否太小。",[24,107549,107550,107552],{},[251,107551,105996],{}," 是否把输入限制得太小。",[24,107554,107555],{},"body 是否真的有可动 joint。",[225,107557,107558],{"id":107558},"控制输入超过范围会怎样",[14,107560,107561],{},"如果设置了：",[245,107563,107565],{"className":53208,"code":107564,"language":53210,"meta":174,"style":174},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[251,107566,107567],{"__ignoreMap":174},[254,107568,107569],{"class":256,"line":257},[254,107570,107564],{"class":264},[14,107572,107573],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[245,107575,107577],{"className":30519,"code":107576,"language":30521,"meta":174,"style":174},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[251,107578,107579,107599],{"__ignoreMap":174},[254,107580,107581,107584,107586,107589,107591,107593,107595,107597],{"class":256,"line":257},[254,107582,107583],{"class":264},"action ",[254,107585,310],{"class":260},[254,107587,107588],{"class":264}," np.clip(action, ",[254,107590,796],{"class":260},[254,107592,105401],{"class":313},[254,107594,12576],{"class":264},[254,107596,105401],{"class":313},[254,107598,271],{"class":264},[254,107600,107601,107603,107605,107607,107609],{"class":256,"line":175},[254,107602,106012],{"class":264},[254,107604,456],{"class":313},[254,107606,4583],{"class":264},[254,107608,310],{"class":260},[254,107610,107611],{"class":264}," action\n",[34,107613,102748],{"id":102747},[14,107615,107616],{},"这一章建立了控制任务的基本形式：",[245,107618,107621],{"className":107619,"code":107620,"language":5328,"meta":174},[5326],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[251,107622,107620],{"__ignoreMap":174},[14,107624,107625],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[5267,107627,107628],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":174,"searchDepth":175,"depth":175,"links":107630},[107631,107632,107633,107638,107642,107643,107644,107652],{"id":100787,"depth":175,"text":100788},{"id":100910,"depth":175,"text":100911},{"id":101185,"depth":175,"text":101186,"children":107634},[107635,107636,107637],{"id":106274,"depth":1319,"text":106275},{"id":106324,"depth":1319,"text":106325},{"id":106390,"depth":1319,"text":106391},{"id":101393,"depth":175,"text":101394,"children":107639},[107640,107641],{"id":101713,"depth":1319,"text":101713},{"id":101849,"depth":1319,"text":101849},{"id":102456,"depth":175,"text":102457},{"id":102488,"depth":175,"text":102489},{"id":102593,"depth":175,"text":102594,"children":107645},[107646,107647,107648,107649,107651],{"id":107480,"depth":1319,"text":107483},{"id":107492,"depth":1319,"text":107492},{"id":107518,"depth":1319,"text":107518},{"id":107527,"depth":1319,"text":107650},"data.ctrl[0] 写了但没有效果",{"id":107558,"depth":1319,"text":107558},{"id":102747,"depth":175,"text":102748},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":105962,"description":174},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":107659,"title":107660,"body":107661,"description":174,"extension":181,"meta":109570,"navigation":184,"path":109571,"seo":109572,"stem":109573,"__hash__":109574},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":107662,"toc":109546},[107663,107666,107668,107671,107679,107682,107699,107702,107727,107730,107776,107778,107780,107835,107837,107856,107858,107901,107904,107921,107924,107940,107950,107957,107959,107962,107965,107999,108002,108050,108054,108057,108071,108080,108084,108087,108112,108115,108119,108132,108135,108141,108144,108159,108161,108164,108424,108426,108438,108441,108753,108755,108767,108769,108772,108787,108792,108795,108817,108820,108823,108857,108860,108864,108875,108878,108895,108898,108912,108919,108939,108946,108960,108963,108975,108990,109010,109013,109035,109038,109042,109057,109068,109083,109086,109116,109132,109161,109169,109193,109196,109214,109224,109236,109243,109252,109258,109267,109270,109272,109281,109284,109299,109301,109304,109315,109318,109329,109332,109350,109352,109369,109372,109400,109402,109406,109409,109439,109445,109448,109452,109460,109463,109465,109486,109489,109492,109508,109511,109527,109529,109532,109543],[10,107664,107660],{"id":107665},"_5viewer-可视化与-renderer-离屏渲染",[34,107667,100788],{"id":100787},[14,107669,107670],{},"本章掌握两类可视化方式:",[21,107672,107673,107676],{},[24,107674,107675],{},"交互式 viewer: 适合人工观察仿真",[24,107677,107678],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[14,107680,107681],{},"使用官方接口:",[245,107683,107685],{"className":30519,"code":107684,"language":30521,"meta":174,"style":174},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[251,107686,107687,107694],{"__ignoreMap":174},[254,107688,107689,107691],{"class":256,"line":257},[254,107690,30533],{"class":260},[254,107692,107693],{"class":264}," mujoco.viewer\n",[254,107695,107696],{"class":256,"line":175},[254,107697,107698],{"class":264},"mujoco.viewer.launch_passive(model, data)\n",[14,107700,107701],{},"以及:",[245,107703,107705],{"className":30519,"code":107704,"language":30521,"meta":174,"style":174},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[251,107706,107707,107717],{"__ignoreMap":174},[254,107708,107709,107712,107714],{"class":256,"line":257},[254,107710,107711],{"class":264},"renderer ",[254,107713,310],{"class":260},[254,107715,107716],{"class":264}," mujoco.Renderer(model)\n",[254,107718,107719,107722,107724],{"class":256,"line":175},[254,107720,107721],{"class":264},"image ",[254,107723,310],{"class":260},[254,107725,107726],{"class":264}," renderer.render()\n",[14,107728,107729],{},"新手建议先理解二者区别：",[402,107731,107732,107748],{},[405,107733,107734],{},[408,107735,107736,107739,107742,107745],{},[411,107737,107738],{"align":23877},"工具",[411,107740,107741],{"align":23877},"用途",[411,107743,107744],{"align":23877},"是否打开窗口",[411,107746,107747],{"align":23877},"常见场景",[449,107749,107750,107763],{},[408,107751,107752,107755,107758,107760],{},[454,107753,107754],{"align":23877},"Viewer",[454,107756,107757],{"align":23877},"人眼实时观察仿真",[454,107759,104806],{"align":23877},[454,107761,107762],{"align":23877},"调试模型、看控制效果",[408,107764,107765,107768,107771,107773],{},[454,107766,107767],{"align":23877},"Renderer",[454,107769,107770],{"align":23877},"生成图像数组",[454,107772,104819],{"align":23877},[454,107774,107775],{"align":23877},"保存图片、训练视觉策略、服务器批量采集",[34,107777,100911],{"id":100910},[14,107779,100914],{},[245,107781,107783],{"className":23963,"code":107782,"language":23965,"meta":174,"style":174},"sudo dnf install -y \\\n  mesa-libGL mesa-libGLU mesa-dri-drivers \\\n  libglvnd-glx libglvnd-opengl \\\n  glfw glfw-devel \\\n  libX11 libXcursor libXi libXinerama libXrandr\n",[251,107784,107785,107797,107807,107815,107823],{"__ignoreMap":174},[254,107786,107787,107789,107791,107793,107795],{"class":256,"line":257},[254,107788,24717],{"class":2103},[254,107790,26456],{"class":369},[254,107792,23975],{"class":369},[254,107794,26541],{"class":313},[254,107796,24819],{"class":313},[254,107798,107799,107801,107803,107805],{"class":256,"line":175},[254,107800,100949],{"class":369},[254,107802,100952],{"class":369},[254,107804,100955],{"class":369},[254,107806,24819],{"class":313},[254,107808,107809,107811,107813],{"class":256,"line":1319},[254,107810,100962],{"class":369},[254,107812,100965],{"class":369},[254,107814,24819],{"class":313},[254,107816,107817,107819,107821],{"class":256,"line":1334},[254,107818,100972],{"class":369},[254,107820,100975],{"class":369},[254,107822,24819],{"class":313},[254,107824,107825,107827,107829,107831,107833],{"class":256,"line":1340},[254,107826,100982],{"class":369},[254,107828,100985],{"class":369},[254,107830,100988],{"class":369},[254,107832,100991],{"class":369},[254,107834,102657],{"class":369},[14,107836,102960],{},[245,107838,107840],{"className":23963,"code":107839,"language":23965,"meta":174,"style":174},"pip install \"mujoco>=2.3\" numpy pillow\n",[251,107841,107842],{"__ignoreMap":174},[254,107843,107844,107846,107848,107850,107853],{"class":256,"line":257},[254,107845,23972],{"class":2103},[254,107847,23975],{"class":369},[254,107849,101071],{"class":369},[254,107851,107852],{"class":369}," numpy",[254,107854,107855],{"class":369}," pillow\n",[14,107857,102977],{},[245,107859,107861],{"className":23963,"code":107860,"language":23965,"meta":174,"style":174},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[251,107862,107863,107880,107889],{"__ignoreMap":174},[254,107864,107865,107867,107869,107871,107874,107876,107878],{"class":256,"line":257},[254,107866,30471],{"class":2103},[254,107868,29317],{"class":369},[254,107870,25256],{"class":313},[254,107872,107873],{"class":369}," mujoco-render",[254,107875,101116],{"class":369},[254,107877,101119],{"class":313},[254,107879,101122],{"class":313},[254,107881,107882,107884,107886],{"class":256,"line":175},[254,107883,30471],{"class":2103},[254,107885,101129],{"class":369},[254,107887,107888],{"class":369}," mujoco-render\n",[254,107890,107891,107893,107895,107897,107899],{"class":256,"line":1319},[254,107892,23972],{"class":2103},[254,107894,23975],{"class":369},[254,107896,101071],{"class":369},[254,107898,107852],{"class":369},[254,107900,107855],{"class":369},[14,107902,107903],{},"离屏渲染后端:",[245,107905,107907],{"className":23963,"code":107906,"language":23965,"meta":174,"style":174},"export MUJOCO_GL=egl\n",[251,107908,107909],{"__ignoreMap":174},[254,107910,107911,107913,107916,107918],{"class":256,"line":257},[254,107912,25183],{"class":260},[254,107914,107915],{"class":264}," MUJOCO_GL",[254,107917,310],{"class":260},[254,107919,107920],{"class":264},"egl\n",[14,107922,107923],{},"或:",[245,107925,107927],{"className":23963,"code":107926,"language":23965,"meta":174,"style":174},"export MUJOCO_GL=osmesa\n",[251,107928,107929],{"__ignoreMap":174},[254,107930,107931,107933,107935,107937],{"class":256,"line":257},[254,107932,25183],{"class":260},[254,107934,107915],{"class":264},[254,107936,310],{"class":260},[254,107938,107939],{"class":264},"osmesa\n",[14,107941,107942,107943,107946,107947,28526],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[251,107944,107945],{},"egl"," 失败，再尝试 ",[251,107948,107949],{},"osmesa",[14,107951,107952,107953,107956],{},"如果你在本机桌面环境运行，通常先不要设置 ",[251,107954,107955],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[34,107958,101186],{"id":101185},[14,107960,107961],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[14,107963,107964],{},"典型 viewer 流程:",[245,107966,107968],{"className":30519,"code":107967,"language":30521,"meta":174,"style":174},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[251,107969,107970,107983,107990,107994],{"__ignoreMap":174},[254,107971,107972,107975,107978,107980],{"class":256,"line":257},[254,107973,107974],{"class":260},"with",[254,107976,107977],{"class":264}," mujoco.viewer.launch_passive(model, data) ",[254,107979,31524],{"class":260},[254,107981,107982],{"class":264}," viewer:\n",[254,107984,107985,107987],{"class":256,"line":175},[254,107986,2391],{"class":260},[254,107988,107989],{"class":264}," viewer.is_running():\n",[254,107991,107992],{"class":256,"line":1319},[254,107993,101657],{"class":264},[254,107995,107996],{"class":256,"line":1334},[254,107997,107998],{"class":264},"        viewer.sync()\n",[14,108000,108001],{},"典型 renderer 流程:",[245,108003,108005],{"className":30519,"code":108004,"language":30521,"meta":174,"style":174},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[251,108006,108007,108033,108037,108042],{"__ignoreMap":174},[254,108008,108009,108011,108013,108016,108018,108020,108022,108024,108026,108028,108031],{"class":256,"line":257},[254,108010,107711],{"class":264},[254,108012,310],{"class":260},[254,108014,108015],{"class":264}," mujoco.Renderer(model, ",[254,108017,25122],{"class":5357},[254,108019,310],{"class":260},[254,108021,42483],{"class":313},[254,108023,12576],{"class":264},[254,108025,25118],{"class":5357},[254,108027,310],{"class":260},[254,108029,108030],{"class":313},"640",[254,108032,271],{"class":264},[254,108034,108035],{"class":256,"line":175},[254,108036,104646],{"class":264},[254,108038,108039],{"class":256,"line":1319},[254,108040,108041],{"class":264},"renderer.update_scene(data)\n",[254,108043,108044,108046,108048],{"class":256,"line":1334},[254,108045,107721],{"class":264},[254,108047,310],{"class":260},[254,108049,107726],{"class":264},[225,108051,108053],{"id":108052},"viewer-的同步逻辑","viewer 的同步逻辑",[14,108055,108056],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[245,108058,108060],{"className":30519,"code":108059,"language":30521,"meta":174,"style":174},"mujoco.mj_step(model, data)\nviewer.sync()\n",[251,108061,108062,108066],{"__ignoreMap":174},[254,108063,108064],{"class":256,"line":257},[254,108065,104646],{"class":264},[254,108067,108068],{"class":256,"line":175},[254,108069,108070],{"class":264},"viewer.sync()\n",[14,108072,108073,108075,108076,108079],{},[251,108074,101356],{}," 负责算物理，",[251,108077,108078],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[225,108081,108083],{"id":108082},"为什么要-sleep","为什么要 sleep",[14,108085,108086],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[245,108088,108090],{"className":30519,"code":108089,"language":30521,"meta":174,"style":174},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[251,108091,108092],{"__ignoreMap":174},[254,108093,108094,108097,108099,108102,108104,108107,108109],{"class":256,"line":257},[254,108095,108096],{"class":264},"sleep_time ",[254,108098,310],{"class":260},[254,108100,108101],{"class":264}," model.opt.timestep ",[254,108103,796],{"class":260},[254,108105,108106],{"class":264}," (time.time() ",[254,108108,796],{"class":260},[254,108110,108111],{"class":264}," step_start)\n",[14,108113,108114],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[225,108116,108118],{"id":108117},"renderer-输出是什么","renderer 输出是什么",[245,108120,108122],{"className":30519,"code":108121,"language":30521,"meta":174,"style":174},"image = renderer.render()\n",[251,108123,108124],{"__ignoreMap":174},[254,108125,108126,108128,108130],{"class":256,"line":257},[254,108127,107721],{"class":264},[254,108129,310],{"class":260},[254,108131,107726],{"class":264},[14,108133,108134],{},"得到的是 NumPy 数组，形状通常是：",[245,108136,108139],{"className":108137,"code":108138,"language":5328,"meta":174},[5326],"(height, width, 3)\n",[251,108140,108138],{"__ignoreMap":174},[14,108142,108143],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[245,108145,108147],{"className":30519,"code":108146,"language":30521,"meta":174,"style":174},"Image.fromarray(image).save(\"render_output.png\")\n",[251,108148,108149],{"__ignoreMap":174},[254,108150,108151,108154,108157],{"class":256,"line":257},[254,108152,108153],{"class":264},"Image.fromarray(image).save(",[254,108155,108156],{"class":369},"\"render_output.png\"",[254,108158,271],{"class":264},[34,108160,101394],{"id":101393},[14,108162,108163],{},"交互式 Viewer:",[245,108165,108167],{"className":30519,"code":108166,"language":30521,"meta":174,"style":174},"import time\n\nimport mujoco\nimport mujoco.viewer\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"viewer_demo\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n\n  \u003Cworldbody>\n    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n\n    \u003Cbody name=\"box\" pos=\"0 0 1\">\n      \u003Cfreejoint name=\"box_free\"\u002F>\n      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n\n    with mujoco.viewer.launch_passive(model, data) as viewer:\n        while viewer.is_running() and data.time \u003C 5.0:\n            step_start = time.time()\n            mujoco.mj_step(model, data)\n            viewer.sync()\n\n            sleep_time = model.opt.timestep - (time.time() - step_start)\n            if sleep_time > 0:\n                time.sleep(sleep_time)\n\n\nif __name__ == \"__main__\":\n    main()\n",[251,108168,108169,108175,108179,108185,108191,108195,108199,108207,108212,108216,108220,108224,108229,108234,108238,108242,108246,108251,108255,108259,108263,108267,108271,108275,108287,108299,108307,108311,108321,108341,108351,108356,108361,108365,108382,108395,108400,108404,108408,108420],{"__ignoreMap":174},[254,108170,108171,108173],{"class":256,"line":257},[254,108172,30533],{"class":260},[254,108174,31970],{"class":264},[254,108176,108177],{"class":256,"line":175},[254,108178,2540],{"emptyLinePlaceholder":184},[254,108180,108181,108183],{"class":256,"line":1319},[254,108182,30533],{"class":260},[254,108184,101442],{"class":264},[254,108186,108187,108189],{"class":256,"line":1334},[254,108188,30533],{"class":260},[254,108190,107693],{"class":264},[254,108192,108193],{"class":256,"line":1340},[254,108194,2540],{"emptyLinePlaceholder":184},[254,108196,108197],{"class":256,"line":1354},[254,108198,2540],{"emptyLinePlaceholder":184},[254,108200,108201,108203,108205],{"class":256,"line":1360},[254,108202,101455],{"class":313},[254,108204,13705],{"class":260},[254,108206,101460],{"class":369},[254,108208,108209],{"class":256,"line":1451},[254,108210,108211],{"class":369},"\u003Cmujoco model=\"viewer_demo\">\n",[254,108213,108214],{"class":256,"line":1457},[254,108215,101470],{"class":369},[254,108217,108218],{"class":256,"line":1469},[254,108219,2540],{"emptyLinePlaceholder":184},[254,108221,108222],{"class":256,"line":1752},[254,108223,101479],{"class":369},[254,108225,108226],{"class":256,"line":1757},[254,108227,108228],{"class":369},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[254,108230,108231],{"class":256,"line":1763},[254,108232,108233],{"class":369},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[254,108235,108236],{"class":256,"line":1768},[254,108237,2540],{"emptyLinePlaceholder":184},[254,108239,108240],{"class":256,"line":1782},[254,108241,101493],{"class":369},[254,108243,108244],{"class":256,"line":1787},[254,108245,101498],{"class":369},[254,108247,108248],{"class":256,"line":1793},[254,108249,108250],{"class":369},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[254,108252,108253],{"class":256,"line":1814},[254,108254,101508],{"class":369},[254,108256,108257],{"class":256,"line":1819},[254,108258,101513],{"class":369},[254,108260,108261],{"class":256,"line":1833},[254,108262,101518],{"class":369},[254,108264,108265],{"class":256,"line":1838},[254,108266,95839],{"class":369},[254,108268,108269],{"class":256,"line":1867},[254,108270,2540],{"emptyLinePlaceholder":184},[254,108272,108273],{"class":256,"line":1872},[254,108274,2540],{"emptyLinePlaceholder":184},[254,108276,108277,108279,108281,108283,108285],{"class":256,"line":1889},[254,108278,32088],{"class":260},[254,108280,2113],{"class":2103},[254,108282,101539],{"class":264},[254,108284,95827],{"class":313},[254,108286,3879],{"class":264},[254,108288,108289,108291,108293,108295,108297],{"class":256,"line":1894},[254,108290,101548],{"class":264},[254,108292,310],{"class":260},[254,108294,101553],{"class":264},[254,108296,101455],{"class":313},[254,108298,271],{"class":264},[254,108300,108301,108303,108305],{"class":256,"line":1899},[254,108302,101562],{"class":264},[254,108304,310],{"class":260},[254,108306,101567],{"class":264},[254,108308,108309],{"class":256,"line":1904},[254,108310,2540],{"emptyLinePlaceholder":184},[254,108312,108313,108315,108317,108319],{"class":256,"line":1918},[254,108314,34319],{"class":260},[254,108316,107977],{"class":264},[254,108318,31524],{"class":260},[254,108320,107982],{"class":264},[254,108322,108323,108326,108329,108331,108334,108336,108339],{"class":256,"line":1923},[254,108324,108325],{"class":260},"        while",[254,108327,108328],{"class":264}," viewer.is_running() ",[254,108330,30603],{"class":260},[254,108332,108333],{"class":264}," data.time ",[254,108335,1174],{"class":260},[254,108337,108338],{"class":313}," 5.0",[254,108340,3879],{"class":264},[254,108342,108343,108346,108348],{"class":256,"line":2717},[254,108344,108345],{"class":264},"            step_start ",[254,108347,310],{"class":260},[254,108349,108350],{"class":264}," time.time()\n",[254,108352,108353],{"class":256,"line":2731},[254,108354,108355],{"class":264},"            mujoco.mj_step(model, data)\n",[254,108357,108358],{"class":256,"line":2739},[254,108359,108360],{"class":264},"            viewer.sync()\n",[254,108362,108363],{"class":256,"line":2744},[254,108364,2540],{"emptyLinePlaceholder":184},[254,108366,108367,108370,108372,108374,108376,108378,108380],{"class":256,"line":2750},[254,108368,108369],{"class":264},"            sleep_time ",[254,108371,310],{"class":260},[254,108373,108101],{"class":264},[254,108375,796],{"class":260},[254,108377,108106],{"class":264},[254,108379,796],{"class":260},[254,108381,108111],{"class":264},[254,108383,108384,108386,108389,108391,108393],{"class":256,"line":2756},[254,108385,4782],{"class":260},[254,108387,108388],{"class":264}," sleep_time ",[254,108390,1224],{"class":260},[254,108392,4233],{"class":313},[254,108394,3879],{"class":264},[254,108396,108397],{"class":256,"line":2761},[254,108398,108399],{"class":264},"                time.sleep(sleep_time)\n",[254,108401,108402],{"class":256,"line":8089},[254,108403,2540],{"emptyLinePlaceholder":184},[254,108405,108406],{"class":256,"line":8113},[254,108407,2540],{"emptyLinePlaceholder":184},[254,108409,108410,108412,108414,108416,108418],{"class":256,"line":8118},[254,108411,1671],{"class":260},[254,108413,31361],{"class":313},[254,108415,101700],{"class":260},[254,108417,101703],{"class":369},[254,108419,3879],{"class":264},[254,108421,108422],{"class":256,"line":8124},[254,108423,101710],{"class":264},[14,108425,103711],{},[245,108427,108429],{"className":23963,"code":108428,"language":23965,"meta":174,"style":174},"touch ch5_viewer.py\n",[251,108430,108431],{"__ignoreMap":174},[254,108432,108433,108435],{"class":256,"line":257},[254,108434,101424],{"class":2103},[254,108436,108437],{"class":369}," ch5_viewer.py\n",[14,108439,108440],{},"离屏 Renderer 保存图片:",[245,108442,108444],{"className":30519,"code":108443,"language":30521,"meta":174,"style":174},"from pathlib import Path\n\nimport mujoco\nfrom PIL import Image\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"renderer_demo\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n\n  \u003Cworldbody>\n    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n\n    \u003Cbody name=\"box\" pos=\"0 0 1\">\n      \u003Cfreejoint name=\"box_free\"\u002F>\n      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n    renderer = mujoco.Renderer(model, height=480, width=640)\n\n    for _ in range(100):\n        mujoco.mj_step(model, data)\n\n    renderer.update_scene(data, camera=\"fixed_camera\")\n    image = renderer.render()\n\n    output_path = Path(\"render_output.png\")\n    Image.fromarray(image).save(output_path)\n    renderer.close()\n\n    print(\"saved:\", output_path.resolve())\n    print(\"image shape:\", image.shape)\n\n\nif __name__ == \"__main__\":\n    main()\n",[251,108445,108446,108458,108462,108468,108478,108482,108486,108494,108499,108503,108507,108511,108515,108520,108524,108528,108532,108536,108540,108544,108548,108552,108556,108560,108564,108576,108588,108596,108621,108625,108641,108645,108649,108664,108673,108677,108691,108696,108701,108705,108717,108729,108733,108737,108749],{"__ignoreMap":174},[254,108447,108448,108450,108453,108455],{"class":256,"line":257},[254,108449,30878],{"class":260},[254,108451,108452],{"class":264}," pathlib ",[254,108454,30533],{"class":260},[254,108456,108457],{"class":264}," Path\n",[254,108459,108460],{"class":256,"line":175},[254,108461,2540],{"emptyLinePlaceholder":184},[254,108463,108464,108466],{"class":256,"line":1319},[254,108465,30533],{"class":260},[254,108467,101442],{"class":264},[254,108469,108470,108472,108474,108476],{"class":256,"line":1334},[254,108471,30878],{"class":260},[254,108473,47404],{"class":313},[254,108475,47407],{"class":260},[254,108477,47410],{"class":264},[254,108479,108480],{"class":256,"line":1340},[254,108481,2540],{"emptyLinePlaceholder":184},[254,108483,108484],{"class":256,"line":1354},[254,108485,2540],{"emptyLinePlaceholder":184},[254,108487,108488,108490,108492],{"class":256,"line":1360},[254,108489,101455],{"class":313},[254,108491,13705],{"class":260},[254,108493,101460],{"class":369},[254,108495,108496],{"class":256,"line":1451},[254,108497,108498],{"class":369},"\u003Cmujoco model=\"renderer_demo\">\n",[254,108500,108501],{"class":256,"line":1457},[254,108502,101470],{"class":369},[254,108504,108505],{"class":256,"line":1469},[254,108506,2540],{"emptyLinePlaceholder":184},[254,108508,108509],{"class":256,"line":1752},[254,108510,101479],{"class":369},[254,108512,108513],{"class":256,"line":1757},[254,108514,108228],{"class":369},[254,108516,108517],{"class":256,"line":1763},[254,108518,108519],{"class":369},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[254,108521,108522],{"class":256,"line":1768},[254,108523,108233],{"class":369},[254,108525,108526],{"class":256,"line":1782},[254,108527,2540],{"emptyLinePlaceholder":184},[254,108529,108530],{"class":256,"line":1787},[254,108531,101493],{"class":369},[254,108533,108534],{"class":256,"line":1793},[254,108535,101498],{"class":369},[254,108537,108538],{"class":256,"line":1814},[254,108539,108250],{"class":369},[254,108541,108542],{"class":256,"line":1819},[254,108543,101508],{"class":369},[254,108545,108546],{"class":256,"line":1833},[254,108547,101513],{"class":369},[254,108549,108550],{"class":256,"line":1838},[254,108551,101518],{"class":369},[254,108553,108554],{"class":256,"line":1867},[254,108555,95839],{"class":369},[254,108557,108558],{"class":256,"line":1872},[254,108559,2540],{"emptyLinePlaceholder":184},[254,108561,108562],{"class":256,"line":1889},[254,108563,2540],{"emptyLinePlaceholder":184},[254,108565,108566,108568,108570,108572,108574],{"class":256,"line":1894},[254,108567,32088],{"class":260},[254,108569,2113],{"class":2103},[254,108571,101539],{"class":264},[254,108573,95827],{"class":313},[254,108575,3879],{"class":264},[254,108577,108578,108580,108582,108584,108586],{"class":256,"line":1899},[254,108579,101548],{"class":264},[254,108581,310],{"class":260},[254,108583,101553],{"class":264},[254,108585,101455],{"class":313},[254,108587,271],{"class":264},[254,108589,108590,108592,108594],{"class":256,"line":1904},[254,108591,101562],{"class":264},[254,108593,310],{"class":260},[254,108595,101567],{"class":264},[254,108597,108598,108601,108603,108605,108607,108609,108611,108613,108615,108617,108619],{"class":256,"line":1918},[254,108599,108600],{"class":264},"    renderer ",[254,108602,310],{"class":260},[254,108604,108015],{"class":264},[254,108606,25122],{"class":5357},[254,108608,310],{"class":260},[254,108610,42483],{"class":313},[254,108612,12576],{"class":264},[254,108614,25118],{"class":5357},[254,108616,310],{"class":260},[254,108618,108030],{"class":313},[254,108620,271],{"class":264},[254,108622,108623],{"class":256,"line":1923},[254,108624,2540],{"emptyLinePlaceholder":184},[254,108626,108627,108629,108631,108633,108635,108637,108639],{"class":256,"line":2717},[254,108628,3341],{"class":260},[254,108630,101642],{"class":264},[254,108632,26184],{"class":260},[254,108634,32584],{"class":313},[254,108636,265],{"class":264},[254,108638,575],{"class":313},[254,108640,30927],{"class":264},[254,108642,108643],{"class":256,"line":2731},[254,108644,101657],{"class":264},[254,108646,108647],{"class":256,"line":2739},[254,108648,2540],{"emptyLinePlaceholder":184},[254,108650,108651,108654,108657,108659,108662],{"class":256,"line":2744},[254,108652,108653],{"class":264},"    renderer.update_scene(data, ",[254,108655,108656],{"class":5357},"camera",[254,108658,310],{"class":260},[254,108660,108661],{"class":369},"\"fixed_camera\"",[254,108663,271],{"class":264},[254,108665,108666,108669,108671],{"class":256,"line":2750},[254,108667,108668],{"class":264},"    image ",[254,108670,310],{"class":260},[254,108672,107726],{"class":264},[254,108674,108675],{"class":256,"line":2756},[254,108676,2540],{"emptyLinePlaceholder":184},[254,108678,108679,108682,108684,108687,108689],{"class":256,"line":2761},[254,108680,108681],{"class":264},"    output_path ",[254,108683,310],{"class":260},[254,108685,108686],{"class":264}," Path(",[254,108688,108156],{"class":369},[254,108690,271],{"class":264},[254,108692,108693],{"class":256,"line":8089},[254,108694,108695],{"class":264},"    Image.fromarray(image).save(output_path)\n",[254,108697,108698],{"class":256,"line":8113},[254,108699,108700],{"class":264},"    renderer.close()\n",[254,108702,108703],{"class":256,"line":8118},[254,108704,2540],{"emptyLinePlaceholder":184},[254,108706,108707,108709,108711,108714],{"class":256,"line":8124},[254,108708,31440],{"class":313},[254,108710,265],{"class":264},[254,108712,108713],{"class":369},"\"saved:\"",[254,108715,108716],{"class":264},", output_path.resolve())\n",[254,108718,108719,108721,108723,108726],{"class":256,"line":8151},[254,108720,31440],{"class":313},[254,108722,265],{"class":264},[254,108724,108725],{"class":369},"\"image shape:\"",[254,108727,108728],{"class":264},", image.shape)\n",[254,108730,108731],{"class":256,"line":8156},[254,108732,2540],{"emptyLinePlaceholder":184},[254,108734,108735],{"class":256,"line":8162},[254,108736,2540],{"emptyLinePlaceholder":184},[254,108738,108739,108741,108743,108745,108747],{"class":256,"line":8174},[254,108740,1671],{"class":260},[254,108742,31361],{"class":313},[254,108744,101700],{"class":260},[254,108746,101703],{"class":369},[254,108748,3879],{"class":264},[254,108750,108751],{"class":256,"line":8186},[254,108752,101710],{"class":264},[14,108754,103711],{},[245,108756,108758],{"className":23963,"code":108757,"language":23965,"meta":174,"style":174},"touch ch5_renderer.py\n",[251,108759,108760],{"__ignoreMap":174},[254,108761,108762,108764],{"class":256,"line":257},[254,108763,101424],{"class":2103},[254,108765,108766],{"class":369}," ch5_renderer.py\n",[225,108768,101713],{"id":101713},[14,108770,108771],{},"viewer 上下文：",[245,108773,108775],{"className":30519,"code":108774,"language":30521,"meta":174,"style":174},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[251,108776,108777],{"__ignoreMap":174},[254,108778,108779,108781,108783,108785],{"class":256,"line":257},[254,108780,107974],{"class":260},[254,108782,107977],{"class":264},[254,108784,31524],{"class":260},[254,108786,107982],{"class":264},[14,108788,108789,108791],{},[251,108790,107974],{}," 语句会创建窗口，并在退出时自动清理资源。",[14,108793,108794],{},"窗口循环：",[245,108796,108798],{"className":30519,"code":108797,"language":30521,"meta":174,"style":174},"while viewer.is_running() and data.time \u003C 5.0:\n",[251,108799,108800],{"__ignoreMap":174},[254,108801,108802,108805,108807,108809,108811,108813,108815],{"class":256,"line":257},[254,108803,108804],{"class":260},"while",[254,108806,108328],{"class":264},[254,108808,30603],{"class":260},[254,108810,108333],{"class":264},[254,108812,1174],{"class":260},[254,108814,108338],{"class":313},[254,108816,3879],{"class":264},[14,108818,108819],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[14,108821,108822],{},"固定相机：",[245,108824,108826],{"className":53208,"code":108825,"language":53210,"meta":174,"style":174},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[251,108827,108828],{"__ignoreMap":174},[254,108829,108830,108832,108834,108836,108838,108840,108842,108844,108847,108850,108852,108855],{"class":256,"line":257},[254,108831,1174],{"class":264},[254,108833,108656],{"class":51441},[254,108835,15061],{"class":2103},[254,108837,310],{"class":264},[254,108839,108661],{"class":369},[254,108841,101247],{"class":2103},[254,108843,310],{"class":264},[254,108845,108846],{"class":369},"\"1.5 -2.0 1.2\"",[254,108848,108849],{"class":2103}," xyaxes",[254,108851,310],{"class":264},[254,108853,108854],{"class":369},"\"1 0.75 0 0 0 1\"",[254,108856,101285],{"class":264},[14,108858,108859],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[225,108861,108863],{"id":108862},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[245,108865,108867],{"className":30519,"code":108866,"language":30521,"meta":174,"style":174},"import time\n",[251,108868,108869],{"__ignoreMap":174},[254,108870,108871,108873],{"class":256,"line":257},[254,108872,30533],{"class":260},[254,108874,31970],{"class":264},[14,108876,108877],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[245,108879,108881],{"className":30519,"code":108880,"language":30521,"meta":174,"style":174},"import mujoco\nimport mujoco.viewer\n",[251,108882,108883,108889],{"__ignoreMap":174},[254,108884,108885,108887],{"class":256,"line":257},[254,108886,30533],{"class":260},[254,108888,101442],{"class":264},[254,108890,108891,108893],{"class":256,"line":175},[254,108892,30533],{"class":260},[254,108894,107693],{"class":264},[14,108896,108897],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[245,108899,108900],{"className":30519,"code":108774,"language":30521,"meta":174,"style":174},[251,108901,108902],{"__ignoreMap":174},[254,108903,108904,108906,108908,108910],{"class":256,"line":257},[254,108905,107974],{"class":260},[254,108907,107977],{"class":264},[254,108909,31524],{"class":260},[254,108911,107982],{"class":264},[14,108913,108914,108915,108918],{},"打开一个 viewer 窗口。",[251,108916,108917],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[245,108920,108921],{"className":30519,"code":108797,"language":30521,"meta":174,"style":174},[251,108922,108923],{"__ignoreMap":174},[254,108924,108925,108927,108929,108931,108933,108935,108937],{"class":256,"line":257},[254,108926,108804],{"class":260},[254,108928,108328],{"class":264},[254,108930,30603],{"class":260},[254,108932,108333],{"class":264},[254,108934,1174],{"class":260},[254,108936,108338],{"class":313},[254,108938,3879],{"class":264},[14,108940,108941,108942,108945],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[251,108943,108944],{},"viewer.is_running()"," 会变成 false，循环结束。",[245,108947,108949],{"className":30519,"code":108948,"language":30521,"meta":174,"style":174},"step_start = time.time()\n",[251,108950,108951],{"__ignoreMap":174},[254,108952,108953,108956,108958],{"class":256,"line":257},[254,108954,108955],{"class":264},"step_start ",[254,108957,310],{"class":260},[254,108959,108350],{"class":264},[14,108961,108962],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[245,108964,108965],{"className":30519,"code":108059,"language":30521,"meta":174,"style":174},[251,108966,108967,108971],{"__ignoreMap":174},[254,108968,108969],{"class":256,"line":257},[254,108970,104646],{"class":264},[254,108972,108973],{"class":256,"line":175},[254,108974,108070],{"class":264},[14,108976,108977,108979,108980,108982,108983,108985,108986,108989],{},[251,108978,101356],{}," 推进物理仿真。",[251,108981,108078],{}," 把最新的 ",[251,108984,33542],{}," 同步到窗口里显示。没有 ",[251,108987,108988],{},"sync()","，窗口可能看不到最新状态。",[245,108991,108992],{"className":30519,"code":108089,"language":30521,"meta":174,"style":174},[251,108993,108994],{"__ignoreMap":174},[254,108995,108996,108998,109000,109002,109004,109006,109008],{"class":256,"line":257},[254,108997,108096],{"class":264},[254,108999,310],{"class":260},[254,109001,108101],{"class":264},[254,109003,796],{"class":260},[254,109005,108106],{"class":264},[254,109007,796],{"class":260},[254,109009,108111],{"class":264},[14,109011,109012],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[245,109014,109016],{"className":30519,"code":109015,"language":30521,"meta":174,"style":174},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[251,109017,109018,109030],{"__ignoreMap":174},[254,109019,109020,109022,109024,109026,109028],{"class":256,"line":257},[254,109021,1671],{"class":260},[254,109023,108388],{"class":264},[254,109025,1224],{"class":260},[254,109027,4233],{"class":313},[254,109029,3879],{"class":264},[254,109031,109032],{"class":256,"line":175},[254,109033,109034],{"class":264},"    time.sleep(sleep_time)\n",[14,109036,109037],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[225,109039,109041],{"id":109040},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[245,109043,109045],{"className":30519,"code":109044,"language":30521,"meta":174,"style":174},"from pathlib import Path\n",[251,109046,109047],{"__ignoreMap":174},[254,109048,109049,109051,109053,109055],{"class":256,"line":257},[254,109050,30878],{"class":260},[254,109052,108452],{"class":264},[254,109054,30533],{"class":260},[254,109056,108457],{"class":264},[14,109058,109059,109060,109063,109064,109067],{},"导入 ",[251,109061,109062],{},"Path","，用来处理文件路径。相比直接写字符串，",[251,109065,109066],{},"Path(\"render_output.png\")"," 更清晰。",[245,109069,109071],{"className":30519,"code":109070,"language":30521,"meta":174,"style":174},"from PIL import Image\n",[251,109072,109073],{"__ignoreMap":174},[254,109074,109075,109077,109079,109081],{"class":256,"line":257},[254,109076,30878],{"class":260},[254,109078,47404],{"class":313},[254,109080,47407],{"class":260},[254,109082,47410],{"class":264},[14,109084,109085],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[245,109087,109088],{"className":53208,"code":108825,"language":53210,"meta":174,"style":174},[251,109089,109090],{"__ignoreMap":174},[254,109091,109092,109094,109096,109098,109100,109102,109104,109106,109108,109110,109112,109114],{"class":256,"line":257},[254,109093,1174],{"class":264},[254,109095,108656],{"class":51441},[254,109097,15061],{"class":2103},[254,109099,310],{"class":264},[254,109101,108661],{"class":369},[254,109103,101247],{"class":2103},[254,109105,310],{"class":264},[254,109107,108846],{"class":369},[254,109109,108849],{"class":2103},[254,109111,310],{"class":264},[254,109113,108854],{"class":369},[254,109115,101285],{"class":264},[14,109117,109118,109119,109121,109122,109124,109125,109128,109129,109131],{},"定义一个相机。",[251,109120,79951],{}," 是相机名字。",[251,109123,104287],{}," 是相机在世界里的位置。",[251,109126,109127],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[251,109130,104287],{}," 来调视角。",[245,109133,109135],{"className":30519,"code":109134,"language":30521,"meta":174,"style":174},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[251,109136,109137],{"__ignoreMap":174},[254,109138,109139,109141,109143,109145,109147,109149,109151,109153,109155,109157,109159],{"class":256,"line":257},[254,109140,107711],{"class":264},[254,109142,310],{"class":260},[254,109144,108015],{"class":264},[254,109146,25122],{"class":5357},[254,109148,310],{"class":260},[254,109150,42483],{"class":313},[254,109152,12576],{"class":264},[254,109154,25118],{"class":5357},[254,109156,310],{"class":260},[254,109158,108030],{"class":313},[254,109160,271],{"class":264},[14,109162,109163,109164,101159,109166,109168],{},"创建离屏渲染器。",[251,109165,25122],{},[251,109167,25118],{}," 决定输出图片大小。",[245,109170,109171],{"className":30519,"code":101817,"language":30521,"meta":174,"style":174},[251,109172,109173,109189],{"__ignoreMap":174},[254,109174,109175,109177,109179,109181,109183,109185,109187],{"class":256,"line":257},[254,109176,3165],{"class":260},[254,109178,101642],{"class":264},[254,109180,26184],{"class":260},[254,109182,32584],{"class":313},[254,109184,265],{"class":264},[254,109186,575],{"class":313},[254,109188,30927],{"class":264},[254,109190,109191],{"class":256,"line":175},[254,109192,101840],{"class":264},[14,109194,109195],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[245,109197,109199],{"className":30519,"code":109198,"language":30521,"meta":174,"style":174},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[251,109200,109201],{"__ignoreMap":174},[254,109202,109203,109206,109208,109210,109212],{"class":256,"line":257},[254,109204,109205],{"class":264},"renderer.update_scene(data, ",[254,109207,108656],{"class":5357},[254,109209,310],{"class":260},[254,109211,108661],{"class":369},[254,109213,271],{"class":264},[14,109215,109216,109217,109219,109220,109223],{},"告诉 renderer：用当前 ",[251,109218,33542],{}," 的状态更新画面，并使用名为 ",[251,109221,109222],{},"fixed_camera"," 的相机视角。",[245,109225,109226],{"className":30519,"code":108121,"language":30521,"meta":174,"style":174},[251,109227,109228],{"__ignoreMap":174},[254,109229,109230,109232,109234],{"class":256,"line":257},[254,109231,107721],{"class":264},[254,109233,310],{"class":260},[254,109235,107726],{"class":264},[14,109237,109238,109239,109242],{},"真正渲染出图像。",[251,109240,109241],{},"image"," 是一个 NumPy 数组，不是文件。",[245,109244,109246],{"className":30519,"code":109245,"language":30521,"meta":174,"style":174},"Image.fromarray(image).save(output_path)\n",[251,109247,109248],{"__ignoreMap":174},[254,109249,109250],{"class":256,"line":257},[254,109251,109245],{"class":264},[14,109253,109254,109255,28526],{},"把数组转换成图片，并保存到 ",[251,109256,109257],{},"render_output.png",[245,109259,109261],{"className":30519,"code":109260,"language":30521,"meta":174,"style":174},"renderer.close()\n",[251,109262,109263],{"__ignoreMap":174},[254,109264,109265],{"class":256,"line":257},[254,109266,109260],{"class":264},[14,109268,109269],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[34,109271,102457],{"id":102456},[14,109273,109274,109275,109277,109278,28526],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[251,109276,109257],{},"，并输出图像数组形状，例如 ",[251,109279,109280],{},"(480, 640, 3)",[14,109282,109283],{},"如果图片里看不到方块，先检查：",[21,109285,109286,109289,109292],{},[24,109287,109288],{},"方块是否掉到相机视野外。",[24,109290,109291],{},"camera 位置是否合理。",[24,109293,109294,109295,109298],{},"是否在 ",[251,109296,109297],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[34,109300,102489],{"id":102488},[14,109302,109303],{},"运行 viewer:",[245,109305,109307],{"className":23963,"code":109306,"language":23965,"meta":174,"style":174},"python ch5_viewer.py\n",[251,109308,109309],{"__ignoreMap":174},[254,109310,109311,109313],{"class":256,"line":257},[254,109312,30521],{"class":2103},[254,109314,108437],{"class":369},[14,109316,109317],{},"运行 renderer:",[245,109319,109321],{"className":23963,"code":109320,"language":23965,"meta":174,"style":174},"python ch5_renderer.py\n",[251,109322,109323],{"__ignoreMap":174},[254,109324,109325,109327],{"class":256,"line":257},[254,109326,30521],{"class":2103},[254,109328,108766],{"class":369},[14,109330,109331],{},"如果在服务器上运行:",[245,109333,109335],{"className":23963,"code":109334,"language":23965,"meta":174,"style":174},"MUJOCO_GL=egl python ch5_renderer.py\n",[251,109336,109337],{"__ignoreMap":174},[254,109338,109339,109341,109343,109345,109348],{"class":256,"line":257},[254,109340,107955],{"class":264},[254,109342,310],{"class":260},[254,109344,107945],{"class":369},[254,109346,109347],{"class":2103}," python",[254,109349,108766],{"class":369},[14,109351,107923],{},[245,109353,109355],{"className":23963,"code":109354,"language":23965,"meta":174,"style":174},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[251,109356,109357],{"__ignoreMap":174},[254,109358,109359,109361,109363,109365,109367],{"class":256,"line":257},[254,109360,107955],{"class":264},[254,109362,310],{"class":260},[254,109364,107949],{"class":369},[254,109366,109347],{"class":2103},[254,109368,108766],{"class":369},[14,109370,109371],{},"再做几个练习：",[21,109373,109374,109381,109384,109390],{},[24,109375,109376,109377,109380],{},"把 renderer 分辨率改成 ",[251,109378,109379],{},"height=240, width=320","，观察输出 shape。",[24,109382,109383],{},"把方块颜色改成蓝色，重新保存图片。",[24,109385,109386,109387,109389],{},"把相机 ",[251,109388,104287],{}," 改远一点，观察画面中物体是否变小。",[24,109391,109392,109393,102555,109396,109399],{},"把 viewer 示例中的 ",[251,109394,109395],{},"data.time \u003C 5.0",[251,109397,109398],{},"data.time \u003C 20.0","，观察更长时间。",[34,109401,102594],{"id":102593},[225,109403,109405],{"id":109404},"viewer-窗口打不开","viewer 窗口打不开",[14,109407,109408],{},"安装:",[245,109410,109412],{"className":23963,"code":109411,"language":23965,"meta":174,"style":174},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[251,109413,109414],{"__ignoreMap":174},[254,109415,109416,109418,109420,109422,109424,109426,109428,109430,109432,109434,109436],{"class":256,"line":257},[254,109417,24717],{"class":2103},[254,109419,26456],{"class":369},[254,109421,23975],{"class":369},[254,109423,26541],{"class":313},[254,109425,102647],{"class":369},[254,109427,100975],{"class":369},[254,109429,102652],{"class":369},[254,109431,100988],{"class":369},[254,109433,100994],{"class":369},[254,109435,100985],{"class":369},[254,109437,109438],{"class":369}," libXinerama\n",[225,109440,109442],{"id":109441},"glfwerror",[251,109443,109444],{},"GLFWError",[14,109446,109447],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[225,109449,109451],{"id":109450},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[14,109453,109454,109455,82680,109457,109459],{},"尝试 ",[251,109456,101178],{},[251,109458,101181],{},"。可能存在版本差异。",[225,109461,109462],{"id":109462},"保存图片是黑的",[14,109464,102716],{},[21,109466,109467,109470,109473,109483],{},[24,109468,109469],{},"XML 里是否有 light。",[24,109471,109472],{},"相机是否对着模型。",[24,109474,109475,109476,109479,109480,28526],{},"是否先 ",[251,109477,109478],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[251,109481,109482],{},"renderer.render()",[24,109484,109485],{},"物体是否已经掉出视野。",[225,109487,109488],{"id":109488},"远程服务器没有显示器",[14,109490,109491],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[245,109493,109494],{"className":23963,"code":109334,"language":23965,"meta":174,"style":174},[251,109495,109496],{"__ignoreMap":174},[254,109497,109498,109500,109502,109504,109506],{"class":256,"line":257},[254,109499,107955],{"class":264},[254,109501,310],{"class":260},[254,109503,107945],{"class":369},[254,109505,109347],{"class":2103},[254,109507,108766],{"class":369},[14,109509,109510],{},"如果 EGL 不可用，再尝试：",[245,109512,109513],{"className":23963,"code":109354,"language":23965,"meta":174,"style":174},[251,109514,109515],{"__ignoreMap":174},[254,109516,109517,109519,109521,109523,109525],{"class":256,"line":257},[254,109518,107955],{"class":264},[254,109520,310],{"class":260},[254,109522,107949],{"class":369},[254,109524,109347],{"class":2103},[254,109526,108766],{"class":369},[34,109528,102748],{"id":102747},[14,109530,109531],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[21,109533,109534,109537,109540],{},[24,109535,109536],{},"先用 viewer 看模型和控制是否正常。",[24,109538,109539],{},"再用 renderer 保存图片或构造视觉观测。",[24,109541,109542],{},"最后把状态、动作、图像、奖励组织成训练数据。",[5267,109544,109545],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":174,"searchDepth":175,"depth":175,"links":109547},[109548,109549,109550,109555,109560,109561,109562,109569],{"id":100787,"depth":175,"text":100788},{"id":100910,"depth":175,"text":100911},{"id":101185,"depth":175,"text":101186,"children":109551},[109552,109553,109554],{"id":108052,"depth":1319,"text":108053},{"id":108082,"depth":1319,"text":108083},{"id":108117,"depth":1319,"text":108118},{"id":101393,"depth":175,"text":101394,"children":109556},[109557,109558,109559],{"id":101713,"depth":1319,"text":101713},{"id":108862,"depth":1319,"text":108863},{"id":109040,"depth":1319,"text":109041},{"id":102456,"depth":175,"text":102457},{"id":102488,"depth":175,"text":102489},{"id":102593,"depth":175,"text":102594,"children":109563},[109564,109565,109566,109567,109568],{"id":109404,"depth":1319,"text":109405},{"id":109441,"depth":1319,"text":109444},{"id":109450,"depth":1319,"text":109451},{"id":109462,"depth":1319,"text":109462},{"id":109488,"depth":1319,"text":109488},{"id":102747,"depth":175,"text":102748},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":107660,"description":174},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":109576,"title":109577,"body":109578,"description":174,"extension":181,"meta":111489,"navigation":184,"path":111490,"seo":111491,"stem":111492,"__hash__":111493},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":109579,"toc":111465},[109580,109583,109585,109588,109590,109609,109612,109618,109621,109623,109625,109649,109651,109665,109667,109708,109710,109721,109723,109726,109732,109735,109769,109772,109804,109807,109839,109843,109846,109886,109889,109895,109898,109904,109908,109911,109917,109920,109924,109927,109967,109969,109982,109985,109987,110569,110571,110583,110586,110597,110599,110602,110621,110633,110636,110657,110660,110663,110706,110709,110712,110732,110739,110741,110759,110774,110777,110783,110786,110792,110809,110816,110847,110858,110892,110903,110920,110929,110937,110942,110956,110959,110980,110986,111000,111005,111035,111045,111070,111078,111101,111104,111120,111123,111131,111137,111159,111172,111193,111202,111241,111252,111254,111257,111263,111266,111269,111275,111278,111298,111301,111303,111342,111344,111347,111355,111358,111361,111388,111391,111401,111407,111410,111416,111418,111424,111428,111431,111433,111436,111460,111463],[10,109581,109577],{"id":109582},"_6控制任务cartpole",[34,109584,100788],{"id":100787},[14,109586,109587],{},"本章搭建一个最小 Cartpole 控制任务。",[14,109589,104472],{},[21,109591,109592,109595,109597,109600,109603,109606],{},[24,109593,109594],{},"slide joint",[24,109596,106325],{},[24,109598,109599],{},"cart force actuator",[24,109601,109602],{},"状态观测",[24,109604,109605],{},"简单控制循环",[24,109607,109608],{},"reward 设计雏形",[14,109610,109611],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[245,109613,109616],{"className":109614,"code":109615,"language":5328,"meta":174},[5326],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[251,109617,109615],{"__ignoreMap":174},[14,109619,109620],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[34,109622,100911],{"id":100910},[14,109624,100914],{},[245,109626,109627],{"className":23963,"code":104529,"language":23965,"meta":174,"style":174},[251,109628,109629],{"__ignoreMap":174},[254,109630,109631,109633,109635,109637,109639,109641,109643,109645,109647],{"class":256,"line":257},[254,109632,24717],{"class":2103},[254,109634,26456],{"class":369},[254,109636,23975],{"class":369},[254,109638,26541],{"class":313},[254,109640,104544],{"class":369},[254,109642,100939],{"class":369},[254,109644,102642],{"class":369},[254,109646,100955],{"class":369},[254,109648,104553],{"class":369},[14,109650,102960],{},[245,109652,109653],{"className":23963,"code":101060,"language":23965,"meta":174,"style":174},[251,109654,109655],{"__ignoreMap":174},[254,109656,109657,109659,109661,109663],{"class":256,"line":257},[254,109658,23972],{"class":2103},[254,109660,23975],{"class":369},[254,109662,101071],{"class":369},[254,109664,101074],{"class":369},[14,109666,102977],{},[245,109668,109670],{"className":23963,"code":109669,"language":23965,"meta":174,"style":174},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[251,109671,109672,109689,109698],{"__ignoreMap":174},[254,109673,109674,109676,109678,109680,109683,109685,109687],{"class":256,"line":257},[254,109675,30471],{"class":2103},[254,109677,29317],{"class":369},[254,109679,25256],{"class":313},[254,109681,109682],{"class":369}," mujoco-cartpole",[254,109684,101116],{"class":369},[254,109686,101119],{"class":313},[254,109688,101122],{"class":313},[254,109690,109691,109693,109695],{"class":256,"line":175},[254,109692,30471],{"class":2103},[254,109694,101129],{"class":369},[254,109696,109697],{"class":369}," mujoco-cartpole\n",[254,109699,109700,109702,109704,109706],{"class":256,"line":1319},[254,109701,23972],{"class":2103},[254,109703,23975],{"class":369},[254,109705,101071],{"class":369},[254,109707,101074],{"class":369},[14,109709,101145],{},[21,109711,109712,109715,109718],{},[24,109713,109714],{},"本章不依赖 Gymnasium。",[24,109716,109717],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[24,109719,109720],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[34,109722,101186],{"id":101185},[14,109724,109725],{},"Cartpole 的模型结构:",[245,109727,109730],{"className":109728,"code":109729,"language":5328,"meta":174},[5326],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[251,109731,109729],{"__ignoreMap":174},[14,109733,109734],{},"小车通过 slide joint 左右移动:",[245,109736,109738],{"className":53208,"code":109737,"language":53210,"meta":174,"style":174},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[251,109739,109740],{"__ignoreMap":174},[254,109741,109742,109744,109746,109748,109750,109753,109755,109757,109760,109762,109764,109767],{"class":256,"line":257},[254,109743,1174],{"class":264},[254,109745,103097],{"class":51441},[254,109747,15061],{"class":2103},[254,109749,310],{"class":264},[254,109751,109752],{"class":369},"\"cart_x\"",[254,109754,53965],{"class":2103},[254,109756,310],{"class":264},[254,109758,109759],{"class":369},"\"slide\"",[254,109761,106169],{"class":2103},[254,109763,310],{"class":264},[254,109765,109766],{"class":369},"\"1 0 0\"",[254,109768,101285],{"class":264},[14,109770,109771],{},"杆子通过 hinge joint 旋转:",[245,109773,109775],{"className":53208,"code":109774,"language":53210,"meta":174,"style":174},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[251,109776,109777],{"__ignoreMap":174},[254,109778,109779,109781,109783,109785,109787,109790,109792,109794,109796,109798,109800,109802],{"class":256,"line":257},[254,109780,1174],{"class":264},[254,109782,103097],{"class":51441},[254,109784,15061],{"class":2103},[254,109786,310],{"class":264},[254,109788,109789],{"class":369},"\"pole_hinge\"",[254,109791,53965],{"class":2103},[254,109793,310],{"class":264},[254,109795,106160],{"class":369},[254,109797,106169],{"class":2103},[254,109799,310],{"class":264},[254,109801,106174],{"class":369},[254,109803,101285],{"class":264},[14,109805,109806],{},"控制力作用在小车 slide joint 上:",[245,109808,109810],{"className":53208,"code":109809,"language":53210,"meta":174,"style":174},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[251,109811,109812],{"__ignoreMap":174},[254,109813,109814,109816,109818,109820,109822,109825,109827,109829,109831,109833,109835,109837],{"class":256,"line":257},[254,109815,1174],{"class":264},[254,109817,106215],{"class":51441},[254,109819,15061],{"class":2103},[254,109821,310],{"class":264},[254,109823,109824],{"class":369},"\"cart_motor\"",[254,109826,106225],{"class":2103},[254,109828,310],{"class":264},[254,109830,109752],{"class":369},[254,109832,106232],{"class":2103},[254,109834,310],{"class":264},[254,109836,54457],{"class":369},[254,109838,101285],{"class":264},[225,109840,109842],{"id":109841},"cartpole-的状态是什么","Cartpole 的状态是什么",[14,109844,109845],{},"这个简化模型有两个关节：",[402,109847,109848,109859],{},[405,109849,109850],{},[408,109851,109852,109854,109856],{},[411,109853,102900],{"align":23877},[411,109855,23878],{"align":23877},[411,109857,109858],{"align":23877},"对应状态",[449,109860,109861,109874],{},[408,109862,109863,109868,109871],{},[454,109864,109865],{"align":23877},[251,109866,109867],{},"cart_x",[454,109869,109870],{"align":23877},"slide",[454,109872,109873],{"align":23877},"小车 x 位置",[408,109875,109876,109881,109883],{},[454,109877,109878],{"align":23877},[251,109879,109880],{},"pole_hinge",[454,109882,105981],{"align":23877},[454,109884,109885],{"align":23877},"杆子角度",[14,109887,109888],{},"所以：",[245,109890,109893],{"className":109891,"code":109892,"language":5328,"meta":174},[5326],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[251,109894,109892],{"__ignoreMap":174},[14,109896,109897],{},"把它们拼起来就是观测：",[245,109899,109902],{"className":109900,"code":109901,"language":5328,"meta":174},[5326],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[251,109903,109901],{"__ignoreMap":174},[225,109905,109907],{"id":109906},"action-是什么","action 是什么",[14,109909,109910],{},"本章只有一个 actuator：",[245,109912,109915],{"className":109913,"code":109914,"language":5328,"meta":174},[5326],"data.ctrl[0] = action\n",[251,109916,109914],{"__ignoreMap":174},[14,109918,109919],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[225,109921,109923],{"id":109922},"reward-是什么","reward 是什么",[14,109925,109926],{},"奖励函数：",[245,109928,109930],{"className":30519,"code":109929,"language":30521,"meta":174,"style":174},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[251,109931,109932],{"__ignoreMap":174},[254,109933,109934,109936,109939,109941,109943,109945,109948,109950,109953,109955,109957,109959,109962,109964],{"class":256,"line":257},[254,109935,17187],{"class":260},[254,109937,109938],{"class":313}," float",[254,109940,265],{"class":264},[254,109942,102544],{"class":313},[254,109944,52412],{"class":260},[254,109946,109947],{"class":313}," 0.1",[254,109949,6659],{"class":260},[254,109951,109952],{"class":264}," cart_x ",[254,109954,719],{"class":260},[254,109956,109952],{"class":264},[254,109958,796],{"class":260},[254,109960,109961],{"class":264}," pole_angle ",[254,109963,719],{"class":260},[254,109965,109966],{"class":264}," pole_angle)\n",[14,109968,106367],{},[21,109970,109971,109976,109979],{},[24,109972,109973,109974,28526],{},"基础奖励是 ",[251,109975,102544],{},[24,109977,109978],{},"小车离中心越远，扣分越多。",[24,109980,109981],{},"杆子角度越大，扣分越多。",[14,109983,109984],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[34,109986,101394],{"id":101393},[245,109988,109990],{"className":30519,"code":109989,"language":30521,"meta":174,"style":174},"import mujoco\nimport numpy as np\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"cartpole\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n\n  \u003Cworldbody>\n    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n\n    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n\n      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n        \u003Cgeom name=\"pole_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.8\" size=\"0.03\" mass=\"0.2\" rgba=\"1 0.2 0.1 1\"\u002F>\n      \u003C\u002Fbody>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\n  \u003Cactuator>\n    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n  \u003C\u002Factuator>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n\n\ndef compute_reward(obs: np.ndarray) -> float:\n    cart_x = obs[0]\n    pole_angle = obs[1]\n    return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n\n    data.qpos[1] = 0.1\n    mujoco.mj_forward(model, data)\n\n    total_reward = 0.0\n\n    for step in range(1000):\n        obs = get_observation(data)\n        pole_angle = obs[1]\n        pole_angular_velocity = obs[3]\n\n        action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n        action = np.clip(action, -1.0, 1.0)\n\n        data.ctrl[0] = action\n        mujoco.mj_step(model, data)\n\n        reward = compute_reward(get_observation(data))\n        total_reward += reward\n\n        if step % 100 == 0:\n            print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n\n    print(\"total_reward:\", round(total_reward, 3))\n    print(\"final obs:\", np.round(get_observation(data), 3))\n\n\nif __name__ == \"__main__\":\n    main()\n",[251,109991,109992,109998,110008,110012,110016,110024,110029,110033,110037,110041,110046,110050,110055,110060,110065,110069,110074,110079,110084,110088,110092,110096,110100,110104,110109,110113,110117,110121,110125,110129,110139,110146,110150,110154,110168,110182,110195,110225,110229,110233,110245,110257,110265,110269,110282,110286,110290,110299,110303,110319,110329,110342,110355,110359,110382,110400,110404,110416,110420,110424,110434,110444,110448,110464,110505,110509,110529,110545,110549,110553,110565],{"__ignoreMap":174},[254,109993,109994,109996],{"class":256,"line":257},[254,109995,30533],{"class":260},[254,109997,101442],{"class":264},[254,109999,110000,110002,110004,110006],{"class":256,"line":175},[254,110001,30533],{"class":260},[254,110003,31521],{"class":264},[254,110005,31524],{"class":260},[254,110007,31527],{"class":264},[254,110009,110010],{"class":256,"line":1319},[254,110011,2540],{"emptyLinePlaceholder":184},[254,110013,110014],{"class":256,"line":1334},[254,110015,2540],{"emptyLinePlaceholder":184},[254,110017,110018,110020,110022],{"class":256,"line":1340},[254,110019,101455],{"class":313},[254,110021,13705],{"class":260},[254,110023,101460],{"class":369},[254,110025,110026],{"class":256,"line":1354},[254,110027,110028],{"class":369},"\u003Cmujoco model=\"cartpole\">\n",[254,110030,110031],{"class":256,"line":1360},[254,110032,101470],{"class":369},[254,110034,110035],{"class":256,"line":1451},[254,110036,2540],{"emptyLinePlaceholder":184},[254,110038,110039],{"class":256,"line":1457},[254,110040,101479],{"class":369},[254,110042,110043],{"class":256,"line":1469},[254,110044,110045],{"class":369},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[254,110047,110048],{"class":256,"line":1752},[254,110049,2540],{"emptyLinePlaceholder":184},[254,110051,110052],{"class":256,"line":1757},[254,110053,110054],{"class":369},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[254,110056,110057],{"class":256,"line":1763},[254,110058,110059],{"class":369},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[254,110061,110062],{"class":256,"line":1768},[254,110063,110064],{"class":369},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[254,110066,110067],{"class":256,"line":1782},[254,110068,2540],{"emptyLinePlaceholder":184},[254,110070,110071],{"class":256,"line":1787},[254,110072,110073],{"class":369},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[254,110075,110076],{"class":256,"line":1793},[254,110077,110078],{"class":369},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[254,110080,110081],{"class":256,"line":1814},[254,110082,110083],{"class":369},"        \u003Cgeom name=\"pole_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.8\" size=\"0.03\" mass=\"0.2\" rgba=\"1 0.2 0.1 1\"\u002F>\n",[254,110085,110086],{"class":256,"line":1819},[254,110087,106579],{"class":369},[254,110089,110090],{"class":256,"line":1833},[254,110091,101508],{"class":369},[254,110093,110094],{"class":256,"line":1838},[254,110095,101513],{"class":369},[254,110097,110098],{"class":256,"line":1867},[254,110099,2540],{"emptyLinePlaceholder":184},[254,110101,110102],{"class":256,"line":1872},[254,110103,106596],{"class":369},[254,110105,110106],{"class":256,"line":1889},[254,110107,110108],{"class":369},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[254,110110,110111],{"class":256,"line":1894},[254,110112,106606],{"class":369},[254,110114,110115],{"class":256,"line":1899},[254,110116,101518],{"class":369},[254,110118,110119],{"class":256,"line":1904},[254,110120,95839],{"class":369},[254,110122,110123],{"class":256,"line":1918},[254,110124,2540],{"emptyLinePlaceholder":184},[254,110126,110127],{"class":256,"line":1923},[254,110128,2540],{"emptyLinePlaceholder":184},[254,110130,110131,110133,110136],{"class":256,"line":2717},[254,110132,32088],{"class":260},[254,110134,110135],{"class":2103}," get_observation",[254,110137,110138],{"class":264},"(data: mujoco.MjData) -> np.ndarray:\n",[254,110140,110141,110143],{"class":256,"line":2731},[254,110142,4230],{"class":260},[254,110144,110145],{"class":264}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[254,110147,110148],{"class":256,"line":2739},[254,110149,2540],{"emptyLinePlaceholder":184},[254,110151,110152],{"class":256,"line":2744},[254,110153,2540],{"emptyLinePlaceholder":184},[254,110155,110156,110158,110161,110164,110166],{"class":256,"line":2750},[254,110157,32088],{"class":260},[254,110159,110160],{"class":2103}," compute_reward",[254,110162,110163],{"class":264},"(obs: np.ndarray) -> ",[254,110165,304],{"class":313},[254,110167,3879],{"class":264},[254,110169,110170,110173,110175,110178,110180],{"class":256,"line":2756},[254,110171,110172],{"class":264},"    cart_x ",[254,110174,310],{"class":260},[254,110176,110177],{"class":264}," obs[",[254,110179,456],{"class":313},[254,110181,33387],{"class":264},[254,110183,110184,110187,110189,110191,110193],{"class":256,"line":2761},[254,110185,110186],{"class":264},"    pole_angle ",[254,110188,310],{"class":260},[254,110190,110177],{"class":264},[254,110192,482],{"class":313},[254,110194,33387],{"class":264},[254,110196,110197,110199,110201,110203,110205,110207,110209,110211,110213,110215,110217,110219,110221,110223],{"class":256,"line":8089},[254,110198,4230],{"class":260},[254,110200,109938],{"class":313},[254,110202,265],{"class":264},[254,110204,102544],{"class":313},[254,110206,52412],{"class":260},[254,110208,109947],{"class":313},[254,110210,6659],{"class":260},[254,110212,109952],{"class":264},[254,110214,719],{"class":260},[254,110216,109952],{"class":264},[254,110218,796],{"class":260},[254,110220,109961],{"class":264},[254,110222,719],{"class":260},[254,110224,109966],{"class":264},[254,110226,110227],{"class":256,"line":8113},[254,110228,2540],{"emptyLinePlaceholder":184},[254,110230,110231],{"class":256,"line":8118},[254,110232,2540],{"emptyLinePlaceholder":184},[254,110234,110235,110237,110239,110241,110243],{"class":256,"line":8124},[254,110236,32088],{"class":260},[254,110238,2113],{"class":2103},[254,110240,101539],{"class":264},[254,110242,95827],{"class":313},[254,110244,3879],{"class":264},[254,110246,110247,110249,110251,110253,110255],{"class":256,"line":8151},[254,110248,101548],{"class":264},[254,110250,310],{"class":260},[254,110252,101553],{"class":264},[254,110254,101455],{"class":313},[254,110256,271],{"class":264},[254,110258,110259,110261,110263],{"class":256,"line":8156},[254,110260,101562],{"class":264},[254,110262,310],{"class":260},[254,110264,101567],{"class":264},[254,110266,110267],{"class":256,"line":8162},[254,110268,2540],{"emptyLinePlaceholder":184},[254,110270,110271,110273,110275,110277,110279],{"class":256,"line":8174},[254,110272,105210],{"class":264},[254,110274,482],{"class":313},[254,110276,4583],{"class":264},[254,110278,310],{"class":260},[254,110280,110281],{"class":313}," 0.1\n",[254,110283,110284],{"class":256,"line":8186},[254,110285,105223],{"class":264},[254,110287,110288],{"class":256,"line":8198},[254,110289,2540],{"emptyLinePlaceholder":184},[254,110291,110292,110295,110297],{"class":256,"line":9857},[254,110293,110294],{"class":264},"    total_reward ",[254,110296,310],{"class":260},[254,110298,104902],{"class":313},[254,110300,110301],{"class":256,"line":9882},[254,110302,2540],{"emptyLinePlaceholder":184},[254,110304,110305,110307,110309,110311,110313,110315,110317],{"class":256,"line":9905},[254,110306,3341],{"class":260},[254,110308,31757],{"class":264},[254,110310,26184],{"class":260},[254,110312,32584],{"class":313},[254,110314,265],{"class":264},[254,110316,6551],{"class":313},[254,110318,30927],{"class":264},[254,110320,110321,110324,110326],{"class":256,"line":9929},[254,110322,110323],{"class":264},"        obs ",[254,110325,310],{"class":260},[254,110327,110328],{"class":264}," get_observation(data)\n",[254,110330,110331,110334,110336,110338,110340],{"class":256,"line":9934},[254,110332,110333],{"class":264},"        pole_angle ",[254,110335,310],{"class":260},[254,110337,110177],{"class":264},[254,110339,482],{"class":313},[254,110341,33387],{"class":264},[254,110343,110344,110347,110349,110351,110353],{"class":256,"line":9939},[254,110345,110346],{"class":264},"        pole_angular_velocity ",[254,110348,310],{"class":260},[254,110350,110177],{"class":264},[254,110352,336],{"class":313},[254,110354,33387],{"class":264},[254,110356,110357],{"class":256,"line":9944},[254,110358,2540],{"emptyLinePlaceholder":184},[254,110360,110361,110364,110366,110369,110371,110373,110375,110377,110379],{"class":256,"line":9953},[254,110362,110363],{"class":264},"        action ",[254,110365,310],{"class":260},[254,110367,110368],{"class":313}," 2.0",[254,110370,6659],{"class":260},[254,110372,109961],{"class":264},[254,110374,745],{"class":260},[254,110376,62008],{"class":313},[254,110378,6659],{"class":260},[254,110380,110381],{"class":264}," pole_angular_velocity\n",[254,110383,110384,110386,110388,110390,110392,110394,110396,110398],{"class":256,"line":9958},[254,110385,110363],{"class":264},[254,110387,310],{"class":260},[254,110389,107588],{"class":264},[254,110391,796],{"class":260},[254,110393,102544],{"class":313},[254,110395,12576],{"class":264},[254,110397,102544],{"class":313},[254,110399,271],{"class":264},[254,110401,110402],{"class":256,"line":9964},[254,110403,2540],{"emptyLinePlaceholder":184},[254,110405,110406,110408,110410,110412,110414],{"class":256,"line":9985},[254,110407,106758],{"class":264},[254,110409,456],{"class":313},[254,110411,4583],{"class":264},[254,110413,310],{"class":260},[254,110415,107611],{"class":264},[254,110417,110418],{"class":256,"line":9991},[254,110419,101657],{"class":264},[254,110421,110422],{"class":256,"line":10005},[254,110423,2540],{"emptyLinePlaceholder":184},[254,110425,110426,110429,110431],{"class":256,"line":10011},[254,110427,110428],{"class":264},"        reward ",[254,110430,310],{"class":260},[254,110432,110433],{"class":264}," compute_reward(get_observation(data))\n",[254,110435,110436,110439,110441],{"class":256,"line":10038},[254,110437,110438],{"class":264},"        total_reward ",[254,110440,9618],{"class":260},[254,110442,110443],{"class":264}," reward\n",[254,110445,110446],{"class":256,"line":10047},[254,110447,2540],{"emptyLinePlaceholder":184},[254,110449,110450,110452,110454,110456,110458,110460,110462],{"class":256,"line":10053},[254,110451,2637],{"class":260},[254,110453,31757],{"class":264},[254,110455,592],{"class":260},[254,110457,5895],{"class":313},[254,110459,101700],{"class":260},[254,110461,4233],{"class":313},[254,110463,3879],{"class":264},[254,110465,110466,110468,110470,110473,110476,110479,110482,110484,110487,110490,110492,110494,110496,110498,110501,110503],{"class":256,"line":10061},[254,110467,34791],{"class":313},[254,110469,265],{"class":264},[254,110471,110472],{"class":369},"\"step:\"",[254,110474,110475],{"class":264},", step, ",[254,110477,110478],{"class":369},"\"obs:\"",[254,110480,110481],{"class":264},", np.round(obs, ",[254,110483,336],{"class":313},[254,110485,110486],{"class":264},"), ",[254,110488,110489],{"class":369},"\"action:\"",[254,110491,12576],{"class":264},[254,110493,32159],{"class":313},[254,110495,265],{"class":264},[254,110497,304],{"class":313},[254,110499,110500],{"class":264},"(action), ",[254,110502,336],{"class":313},[254,110504,30638],{"class":264},[254,110506,110507],{"class":256,"line":10066},[254,110508,2540],{"emptyLinePlaceholder":184},[254,110510,110511,110513,110515,110518,110520,110522,110525,110527],{"class":256,"line":16745},[254,110512,31440],{"class":313},[254,110514,265],{"class":264},[254,110516,110517],{"class":369},"\"total_reward:\"",[254,110519,12576],{"class":264},[254,110521,32159],{"class":313},[254,110523,110524],{"class":264},"(total_reward, ",[254,110526,336],{"class":313},[254,110528,30638],{"class":264},[254,110530,110531,110533,110535,110538,110541,110543],{"class":256,"line":16751},[254,110532,31440],{"class":313},[254,110534,265],{"class":264},[254,110536,110537],{"class":369},"\"final obs:\"",[254,110539,110540],{"class":264},", np.round(get_observation(data), ",[254,110542,336],{"class":313},[254,110544,30638],{"class":264},[254,110546,110547],{"class":256,"line":16774},[254,110548,2540],{"emptyLinePlaceholder":184},[254,110550,110551],{"class":256,"line":16780},[254,110552,2540],{"emptyLinePlaceholder":184},[254,110554,110555,110557,110559,110561,110563],{"class":256,"line":16803},[254,110556,1671],{"class":260},[254,110558,31361],{"class":313},[254,110560,101700],{"class":260},[254,110562,101703],{"class":369},[254,110564,3879],{"class":264},[254,110566,110567],{"class":256,"line":16817},[254,110568,101710],{"class":264},[14,110570,103711],{},[245,110572,110574],{"className":23963,"code":110573,"language":23965,"meta":174,"style":174},"touch ch6_cartpole.py\n",[251,110575,110576],{"__ignoreMap":174},[254,110577,110578,110580],{"class":256,"line":257},[254,110579,101424],{"class":2103},[254,110581,110582],{"class":369}," ch6_cartpole.py\n",[14,110584,110585],{},"运行：",[245,110587,110589],{"className":23963,"code":110588,"language":23965,"meta":174,"style":174},"python ch6_cartpole.py\n",[251,110590,110591],{"__ignoreMap":174},[254,110592,110593,110595],{"class":256,"line":257},[254,110594,30521],{"class":2103},[254,110596,110582],{"class":369},[225,110598,101713],{"id":101713},[14,110600,110601],{},"构造观测：",[245,110603,110605],{"className":30519,"code":110604,"language":30521,"meta":174,"style":174},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[251,110606,110607,110615],{"__ignoreMap":174},[254,110608,110609,110611,110613],{"class":256,"line":257},[254,110610,32088],{"class":260},[254,110612,110135],{"class":2103},[254,110614,110138],{"class":264},[254,110616,110617,110619],{"class":256,"line":175},[254,110618,4230],{"class":260},[254,110620,110145],{"class":264},[14,110622,110623,110626,110627,110629,110630,110632],{},[251,110624,110625],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[251,110628,104171],{}," 2 维，",[251,110631,104501],{}," 2 维，所以 obs 是 4 维。",[14,110634,110635],{},"设置初始角度：",[245,110637,110639],{"className":30519,"code":110638,"language":30521,"meta":174,"style":174},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[251,110640,110641,110653],{"__ignoreMap":174},[254,110642,110643,110645,110647,110649,110651],{"class":256,"line":257},[254,110644,104840],{"class":264},[254,110646,482],{"class":313},[254,110648,4583],{"class":264},[254,110650,310],{"class":260},[254,110652,110281],{"class":313},[254,110654,110655],{"class":256,"line":175},[254,110656,104684],{"class":264},[14,110658,110659],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[14,110661,110662],{},"简单反馈控制：",[245,110664,110666],{"className":30519,"code":110665,"language":30521,"meta":174,"style":174},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[251,110667,110668,110688],{"__ignoreMap":174},[254,110669,110670,110672,110674,110676,110678,110680,110682,110684,110686],{"class":256,"line":257},[254,110671,107583],{"class":264},[254,110673,310],{"class":260},[254,110675,110368],{"class":313},[254,110677,6659],{"class":260},[254,110679,109961],{"class":264},[254,110681,745],{"class":260},[254,110683,62008],{"class":313},[254,110685,6659],{"class":260},[254,110687,110381],{"class":264},[254,110689,110690,110692,110694,110696,110698,110700,110702,110704],{"class":256,"line":175},[254,110691,107583],{"class":264},[254,110693,310],{"class":260},[254,110695,107588],{"class":264},[254,110697,796],{"class":260},[254,110699,102544],{"class":313},[254,110701,12576],{"class":264},[254,110703,102544],{"class":313},[254,110705,271],{"class":264},[14,110707,110708],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[14,110710,110711],{},"限制动作：",[245,110713,110715],{"className":30519,"code":110714,"language":30521,"meta":174,"style":174},"np.clip(action, -1.0, 1.0)\n",[251,110716,110717],{"__ignoreMap":174},[254,110718,110719,110722,110724,110726,110728,110730],{"class":256,"line":257},[254,110720,110721],{"class":264},"np.clip(action, ",[254,110723,796],{"class":260},[254,110725,102544],{"class":313},[254,110727,12576],{"class":264},[254,110729,102544],{"class":313},[254,110731,271],{"class":264},[14,110733,110734,110735,110738],{},"因为 XML 里 ",[251,110736,110737],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[225,110740,101849],{"id":101849},[245,110742,110743],{"className":30519,"code":110604,"language":30521,"meta":174,"style":174},[251,110744,110745,110753],{"__ignoreMap":174},[254,110746,110747,110749,110751],{"class":256,"line":257},[254,110748,32088],{"class":260},[254,110750,110135],{"class":2103},[254,110752,110138],{"class":264},[254,110754,110755,110757],{"class":256,"line":175},[254,110756,4230],{"class":260},[254,110758,110145],{"class":264},[14,110760,110761,110762,110765,110766,110769,110770,110773],{},"这段定义了一个函数，用来获取当前观测。",[251,110763,110764],{},"data.qpos.copy()"," 是位置数组副本，",[251,110767,110768],{},"data.qvel.copy()"," 是速度数组副本。",[251,110771,110772],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[14,110775,110776],{},"在本章模型里：",[245,110778,110781],{"className":110779,"code":110780,"language":5328,"meta":174},[5326],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[251,110782,110780],{"__ignoreMap":174},[14,110784,110785],{},"所以返回的 obs 是：",[245,110787,110790],{"className":110788,"code":110789,"language":5328,"meta":174},[5326],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[251,110791,110789],{"__ignoreMap":174},[245,110793,110795],{"className":30519,"code":110794,"language":30521,"meta":174,"style":174},"def compute_reward(obs: np.ndarray) -> float:\n",[251,110796,110797],{"__ignoreMap":174},[254,110798,110799,110801,110803,110805,110807],{"class":256,"line":257},[254,110800,32088],{"class":260},[254,110802,110160],{"class":2103},[254,110804,110163],{"class":264},[254,110806,304],{"class":313},[254,110808,3879],{"class":264},[14,110810,110811,110812,110815],{},"这行定义奖励函数。输入是观测 ",[251,110813,110814],{},"obs","，输出是一个浮点数奖励。",[245,110817,110819],{"className":30519,"code":110818,"language":30521,"meta":174,"style":174},"cart_x = obs[0]\npole_angle = obs[1]\n",[251,110820,110821,110834],{"__ignoreMap":174},[254,110822,110823,110826,110828,110830,110832],{"class":256,"line":257},[254,110824,110825],{"class":264},"cart_x ",[254,110827,310],{"class":260},[254,110829,110177],{"class":264},[254,110831,456],{"class":313},[254,110833,33387],{"class":264},[254,110835,110836,110839,110841,110843,110845],{"class":256,"line":175},[254,110837,110838],{"class":264},"pole_angle ",[254,110840,310],{"class":260},[254,110842,110177],{"class":264},[254,110844,482],{"class":313},[254,110846,33387],{"class":264},[14,110848,110849,110850,110853,110854,110857],{},"数组索引从 0 开始。",[251,110851,110852],{},"obs[0]"," 是第一个元素，也就是小车位置。",[251,110855,110856],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[245,110859,110860],{"className":30519,"code":109929,"language":30521,"meta":174,"style":174},[251,110861,110862],{"__ignoreMap":174},[254,110863,110864,110866,110868,110870,110872,110874,110876,110878,110880,110882,110884,110886,110888,110890],{"class":256,"line":257},[254,110865,17187],{"class":260},[254,110867,109938],{"class":313},[254,110869,265],{"class":264},[254,110871,102544],{"class":313},[254,110873,52412],{"class":260},[254,110875,109947],{"class":313},[254,110877,6659],{"class":260},[254,110879,109952],{"class":264},[254,110881,719],{"class":260},[254,110883,109952],{"class":264},[254,110885,796],{"class":260},[254,110887,109961],{"class":264},[254,110889,719],{"class":260},[254,110891,109966],{"class":264},[14,110893,110894,110895,110898,110899,110902],{},"这行计算奖励。",[251,110896,110897],{},"cart_x * cart_x"," 是小车位置的平方，",[251,110900,110901],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[245,110904,110906],{"className":30519,"code":110905,"language":30521,"meta":174,"style":174},"data.qpos[1] = 0.1\n",[251,110907,110908],{"__ignoreMap":174},[254,110909,110910,110912,110914,110916,110918],{"class":256,"line":257},[254,110911,104840],{"class":264},[254,110913,482],{"class":313},[254,110915,4583],{"class":264},[254,110917,310],{"class":260},[254,110919,110281],{"class":313},[14,110921,110922,110923,110925,110926,110928],{},"手动设置杆子的初始角度。因为 ",[251,110924,105597],{}," 是小车位置，",[251,110927,105600],{}," 是杆子角度，所以这里改的是杆子。",[245,110930,110931],{"className":30519,"code":104684,"language":30521,"meta":174,"style":174},[251,110932,110933],{"__ignoreMap":174},[254,110934,110935],{"class":256,"line":257},[254,110936,104684],{"class":264},[14,110938,105643,110939,110941],{},[251,110940,104171],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[245,110943,110945],{"className":30519,"code":110944,"language":30521,"meta":174,"style":174},"total_reward = 0.0\n",[251,110946,110947],{"__ignoreMap":174},[254,110948,110949,110952,110954],{"class":256,"line":257},[254,110950,110951],{"class":264},"total_reward ",[254,110953,310],{"class":260},[254,110955,104902],{"class":313},[14,110957,110958],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[245,110960,110962],{"className":30519,"code":110961,"language":30521,"meta":174,"style":174},"for step in range(1000):\n",[251,110963,110964],{"__ignoreMap":174},[254,110965,110966,110968,110970,110972,110974,110976,110978],{"class":256,"line":257},[254,110967,3165],{"class":260},[254,110969,31757],{"class":264},[254,110971,26184],{"class":260},[254,110973,32584],{"class":313},[254,110975,265],{"class":264},[254,110977,6551],{"class":313},[254,110979,30927],{"class":264},[14,110981,110982,110983,110985],{},"循环 1000 步。",[251,110984,107275],{}," 是当前步数，从 0 到 999。",[245,110987,110989],{"className":30519,"code":110988,"language":30521,"meta":174,"style":174},"obs = get_observation(data)\n",[251,110990,110991],{"__ignoreMap":174},[254,110992,110993,110996,110998],{"class":256,"line":257},[254,110994,110995],{"class":264},"obs ",[254,110997,310],{"class":260},[254,110999,110328],{"class":264},[14,111001,111002,111003,28526],{},"读取当前状态，保存到 ",[251,111004,110814],{},[245,111006,111008],{"className":30519,"code":111007,"language":30521,"meta":174,"style":174},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[251,111009,111010,111022],{"__ignoreMap":174},[254,111011,111012,111014,111016,111018,111020],{"class":256,"line":257},[254,111013,110838],{"class":264},[254,111015,310],{"class":260},[254,111017,110177],{"class":264},[254,111019,482],{"class":313},[254,111021,33387],{"class":264},[254,111023,111024,111027,111029,111031,111033],{"class":256,"line":175},[254,111025,111026],{"class":264},"pole_angular_velocity ",[254,111028,310],{"class":260},[254,111030,110177],{"class":264},[254,111032,336],{"class":313},[254,111034,33387],{"class":264},[14,111036,111037,111038,111041,111042,28526],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[251,111039,111040],{},"obs[3]","？因为 obs 的顺序是 ",[251,111043,111044],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[245,111046,111048],{"className":30519,"code":111047,"language":30521,"meta":174,"style":174},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[251,111049,111050],{"__ignoreMap":174},[254,111051,111052,111054,111056,111058,111060,111062,111064,111066,111068],{"class":256,"line":257},[254,111053,107583],{"class":264},[254,111055,310],{"class":260},[254,111057,110368],{"class":313},[254,111059,6659],{"class":260},[254,111061,109961],{"class":264},[254,111063,745],{"class":260},[254,111065,62008],{"class":313},[254,111067,6659],{"class":260},[254,111069,110381],{"class":264},[14,111071,111072,111073,101159,111075,111077],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[251,111074,105401],{},[251,111076,35470],{}," 是人为设置的系数，不是固定公式。",[245,111079,111081],{"className":30519,"code":111080,"language":30521,"meta":174,"style":174},"action = np.clip(action, -1.0, 1.0)\n",[251,111082,111083],{"__ignoreMap":174},[254,111084,111085,111087,111089,111091,111093,111095,111097,111099],{"class":256,"line":257},[254,111086,107583],{"class":264},[254,111088,310],{"class":260},[254,111090,107588],{"class":264},[254,111092,796],{"class":260},[254,111094,102544],{"class":313},[254,111096,12576],{"class":264},[254,111098,102544],{"class":313},[254,111100,271],{"class":264},[14,111102,111103],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[245,111105,111106],{"className":30519,"code":109914,"language":30521,"meta":174,"style":174},[251,111107,111108],{"__ignoreMap":174},[254,111109,111110,111112,111114,111116,111118],{"class":256,"line":257},[254,111111,106012],{"class":264},[254,111113,456],{"class":313},[254,111115,4583],{"class":264},[254,111117,310],{"class":260},[254,111119,107611],{"class":264},[14,111121,111122],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[245,111124,111125],{"className":30519,"code":104646,"language":30521,"meta":174,"style":174},[251,111126,111127],{"__ignoreMap":174},[254,111128,111129],{"class":256,"line":257},[254,111130,104646],{"class":264},[14,111132,111133,111134,111136],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[251,111135,106267],{}," 计算小车和杆子的下一刻状态。",[245,111138,111140],{"className":30519,"code":111139,"language":30521,"meta":174,"style":174},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[251,111141,111142,111151],{"__ignoreMap":174},[254,111143,111144,111147,111149],{"class":256,"line":257},[254,111145,111146],{"class":264},"reward ",[254,111148,310],{"class":260},[254,111150,110433],{"class":264},[254,111152,111153,111155,111157],{"class":256,"line":175},[254,111154,110951],{"class":264},[254,111156,9618],{"class":260},[254,111158,110443],{"class":264},[14,111160,111161,111162,111164,111165,111168,111169,28526],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[251,111163,9618],{}," 是简写，",[251,111166,111167],{},"total_reward += reward"," 等价于 ",[251,111170,111171],{},"total_reward = total_reward + reward",[245,111173,111175],{"className":30519,"code":111174,"language":30521,"meta":174,"style":174},"if step % 100 == 0:\n",[251,111176,111177],{"__ignoreMap":174},[254,111178,111179,111181,111183,111185,111187,111189,111191],{"class":256,"line":257},[254,111180,1671],{"class":260},[254,111182,31757],{"class":264},[254,111184,592],{"class":260},[254,111186,5895],{"class":313},[254,111188,101700],{"class":260},[254,111190,4233],{"class":313},[254,111192,3879],{"class":264},[14,111194,111195,111197,111198,111201],{},[251,111196,592],{}," 是取余数。",[251,111199,111200],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[245,111203,111205],{"className":30519,"code":111204,"language":30521,"meta":174,"style":174},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[251,111206,111207],{"__ignoreMap":174},[254,111208,111209,111211,111213,111215,111217,111219,111221,111223,111225,111227,111229,111231,111233,111235,111237,111239],{"class":256,"line":257},[254,111210,30556],{"class":313},[254,111212,265],{"class":264},[254,111214,110472],{"class":369},[254,111216,110475],{"class":264},[254,111218,110478],{"class":369},[254,111220,110481],{"class":264},[254,111222,336],{"class":313},[254,111224,110486],{"class":264},[254,111226,110489],{"class":369},[254,111228,12576],{"class":264},[254,111230,32159],{"class":313},[254,111232,265],{"class":264},[254,111234,304],{"class":313},[254,111236,110500],{"class":264},[254,111238,336],{"class":313},[254,111240,30638],{"class":264},[14,111242,111243,111244,111247,111248,111251],{},"打印当前步数、观测和动作。",[251,111245,111246],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[251,111249,111250],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[34,111253,102457],{"id":102456},[14,111255,111256],{},"观测向量:",[245,111258,111261],{"className":111259,"code":111260,"language":5328,"meta":174},[5326],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[251,111262,111260],{"__ignoreMap":174},[14,111264,111265],{},"控制器是教学用的简单线性反馈，不保证最优。",[14,111267,111268],{},"每隔 100 步会打印一次：",[245,111270,111273],{"className":111271,"code":111272,"language":5328,"meta":174},[5326],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[251,111274,111272],{"__ignoreMap":174},[14,111276,111277],{},"重点观察：",[21,111279,111280,111286,111291],{},[24,111281,111282,111285],{},[251,111283,111284],{},"pole_angle"," 是否越来越大。",[24,111287,111288,111290],{},[251,111289,109867],{}," 是否跑得太远。",[24,111292,111293,111294,82680,111296,28526],{},"action 是否经常被 clip 到 ",[251,111295,104056],{},[251,111297,482],{},[14,111299,111300],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[34,111302,102489],{"id":102488},[21,111304,111305,111311,111314,111320,111330,111336,111339],{},[24,111306,111307,111308,28526],{},"把初始角度改为 ",[251,111309,111310],{},"data.qpos[1] = 0.3",[24,111312,111313],{},"重新运行，观察控制是否变差。",[24,111315,111316,111317,111319],{},"把 actuator ",[251,111318,107208],{}," 改小。",[24,111321,111322,111323,111326,111327,28526],{},"打印 ",[251,111324,111325],{},"model.nq, model.nv, model.nu","，应为 ",[251,111328,111329],{},"2 2 1",[24,111331,111332,111333,111335],{},"把 reward 里的 ",[251,111334,110901],{}," 系数改大，观察总奖励变化。",[24,111337,111338],{},"把控制器改成反号，观察杆子是否更容易倒。",[24,111340,111341],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[34,111343,102594],{"id":102593},[225,111345,111346],{"id":111346},"杆子方向和预期不一致",[14,111348,102537,111349,111351,111352,111354],{},[251,111350,106380],{}," 和 capsule 的 ",[251,111353,103317],{},"，必要时用 viewer 可视化确认。",[225,111356,111357],{"id":111357},"控制器越控越倒",[14,111359,111360],{},"说明反馈符号可能反了，尝试:",[245,111362,111364],{"className":30519,"code":111363,"language":30521,"meta":174,"style":174},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[251,111365,111366],{"__ignoreMap":174},[254,111367,111368,111370,111372,111374,111376,111378,111380,111382,111384,111386],{"class":256,"line":257},[254,111369,107583],{"class":264},[254,111371,310],{"class":260},[254,111373,52412],{"class":260},[254,111375,105401],{"class":313},[254,111377,6659],{"class":260},[254,111379,109961],{"class":264},[254,111381,796],{"class":260},[254,111383,62008],{"class":313},[254,111385,6659],{"class":260},[254,111387,110381],{"class":264},[225,111389,111390],{"id":111390},"小车飞走",[14,111392,111393,111394,111396,111397,111400],{},"降低 ",[251,111395,107208],{}," 或缩小 ",[251,111398,111399],{},"action"," 的 clip 范围。",[225,111402,111404,111406],{"id":111403},"obs3-为什么是杆子角速度",[251,111405,111040],{}," 为什么是杆子角速度",[14,111408,111409],{},"因为这个模型里：",[245,111411,111414],{"className":111412,"code":111413,"language":5328,"meta":174},[5326],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[251,111415,111413],{"__ignoreMap":174},[14,111417,109888],{},[245,111419,111422],{"className":111420,"code":111421,"language":5328,"meta":174},[5326],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[251,111423,111421],{"__ignoreMap":174},[225,111425,111427],{"id":111426},"reward-变成负数是否错误","reward 变成负数是否错误",[14,111429,111430],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[34,111432,102748],{"id":102747},[14,111434,111435],{},"一个控制任务通常包含：",[21,111437,111438,111441,111449,111454,111457],{},[24,111439,111440],{},"模型：Cartpole 的 body、joint、actuator。",[24,111442,111443,111444,477,111446,111448],{},"观测：从 ",[251,111445,104171],{},[251,111447,104501],{}," 里取状态。",[24,111450,111451,111452,28526],{},"动作：写入 ",[251,111453,101217],{},[24,111455,111456],{},"奖励：根据任务目标打分。",[24,111458,111459],{},"循环：obs -> action -> step -> reward。",[14,111461,111462],{},"这就是后面 Gymnasium 环境的基本骨架。",[5267,111464,104427],{},{"title":174,"searchDepth":175,"depth":175,"links":111466},[111467,111468,111469,111474,111478,111479,111480,111488],{"id":100787,"depth":175,"text":100788},{"id":100910,"depth":175,"text":100911},{"id":101185,"depth":175,"text":101186,"children":111470},[111471,111472,111473],{"id":109841,"depth":1319,"text":109842},{"id":109906,"depth":1319,"text":109907},{"id":109922,"depth":1319,"text":109923},{"id":101393,"depth":175,"text":101394,"children":111475},[111476,111477],{"id":101713,"depth":1319,"text":101713},{"id":101849,"depth":1319,"text":101849},{"id":102456,"depth":175,"text":102457},{"id":102488,"depth":175,"text":102489},{"id":102593,"depth":175,"text":102594,"children":111481},[111482,111483,111484,111485,111487],{"id":111346,"depth":1319,"text":111346},{"id":111357,"depth":1319,"text":111357},{"id":111390,"depth":1319,"text":111390},{"id":111403,"depth":1319,"text":111486},"obs[3] 为什么是杆子角速度",{"id":111426,"depth":1319,"text":111427},{"id":102747,"depth":175,"text":102748},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":109577,"description":174},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111495,"title":111496,"body":111497,"description":174,"extension":181,"meta":113511,"navigation":184,"path":113512,"seo":113513,"stem":113514,"__hash__":113515},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111498,"toc":113487},[111499,111502,111504,111507,111509,111526,111529,111532,111538,111541,111543,111545,111569,111571,111585,111587,111628,111630,111648,111650,111653,111659,111662,111690,111694,111700,111725,111728,111759,111766,111769,111772,111778,111781,111787,111790,111796,111800,111803,111828,111831,111833,112593,112595,112607,112609,112620,112622,112625,112642,112645,112647,112658,112661,112663,112709,112712,112725,112728,112810,112813,112815,112831,112841,112854,112857,112896,112906,112917,112927,112940,112943,112972,112975,112985,112988,112994,113011,113022,113024,113030,113047,113058,113079,113082,113094,113097,113118,113121,113129,113137,113154,113157,113226,113233,113241,113244,113257,113264,113266,113269,113275,113278,113281,113287,113293,113295,113335,113337,113343,113352,113355,113357,113377,113380,113383,113389,113393,113395,113422,113425,113428,113455,113461,113464,113467,113469,113472,113475,113481,113484],[10,111500,111496],{"id":111501},"_7控制任务reacher-机械臂到达目标",[34,111503,100788],{"id":100787},[14,111505,111506],{},"本章搭建一个二维两关节 reacher 任务。",[14,111508,104472],{},[21,111510,111511,111514,111517,111520,111523],{},[24,111512,111513],{},"两个 hinge joint",[24,111515,111516],{},"两个 motor actuator",[24,111518,111519],{},"site 作为末端点和目标点",[24,111521,111522],{},"根据末端和目标距离设计 reward",[24,111524,111525],{},"构造机械臂任务的基本形式",[14,111527,111528],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[14,111530,111531],{},"Reacher 任务可以理解为：",[245,111533,111536],{"className":111534,"code":111535,"language":5328,"meta":174},[5326],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[251,111537,111535],{"__ignoreMap":174},[14,111539,111540],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[34,111542,100911],{"id":100910},[14,111544,100914],{},[245,111546,111547],{"className":23963,"code":104529,"language":23965,"meta":174,"style":174},[251,111548,111549],{"__ignoreMap":174},[254,111550,111551,111553,111555,111557,111559,111561,111563,111565,111567],{"class":256,"line":257},[254,111552,24717],{"class":2103},[254,111554,26456],{"class":369},[254,111556,23975],{"class":369},[254,111558,26541],{"class":313},[254,111560,104544],{"class":369},[254,111562,100939],{"class":369},[254,111564,102642],{"class":369},[254,111566,100955],{"class":369},[254,111568,104553],{"class":369},[14,111570,102960],{},[245,111572,111573],{"className":23963,"code":101060,"language":23965,"meta":174,"style":174},[251,111574,111575],{"__ignoreMap":174},[254,111576,111577,111579,111581,111583],{"class":256,"line":257},[254,111578,23972],{"class":2103},[254,111580,23975],{"class":369},[254,111582,101071],{"class":369},[254,111584,101074],{"class":369},[14,111586,102977],{},[245,111588,111590],{"className":23963,"code":111589,"language":23965,"meta":174,"style":174},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[251,111591,111592,111609,111618],{"__ignoreMap":174},[254,111593,111594,111596,111598,111600,111603,111605,111607],{"class":256,"line":257},[254,111595,30471],{"class":2103},[254,111597,29317],{"class":369},[254,111599,25256],{"class":313},[254,111601,111602],{"class":369}," mujoco-reacher",[254,111604,101116],{"class":369},[254,111606,101119],{"class":313},[254,111608,101122],{"class":313},[254,111610,111611,111613,111615],{"class":256,"line":175},[254,111612,30471],{"class":2103},[254,111614,101129],{"class":369},[254,111616,111617],{"class":369}," mujoco-reacher\n",[254,111619,111620,111622,111624,111626],{"class":256,"line":1319},[254,111621,23972],{"class":2103},[254,111623,23975],{"class":369},[254,111625,101071],{"class":369},[254,111627,101074],{"class":369},[14,111629,101145],{},[21,111631,111632,111635,111638],{},[24,111633,111634],{},"本章使用低维状态，不使用图像输入。",[24,111636,111637],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[24,111639,111640,111641,477,111643,477,111645,111647],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[251,111642,104171],{},[251,111644,104501],{},[251,111646,103821],{}," 的方法一致。",[34,111649,101186],{"id":101185},[14,111651,111652],{},"Reacher 任务核心:",[245,111654,111657],{"className":111655,"code":111656,"language":5328,"meta":174},[5326],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[251,111658,111656],{"__ignoreMap":174},[14,111660,111661],{},"读取 site 世界坐标:",[245,111663,111665],{"className":30519,"code":111664,"language":30521,"meta":174,"style":174},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[251,111666,111667,111680],{"__ignoreMap":174},[254,111668,111669,111671,111673,111675,111678],{"class":256,"line":257},[254,111670,103775],{"class":264},[254,111672,310],{"class":260},[254,111674,103546],{"class":264},[254,111676,111677],{"class":369},"\"tip\"",[254,111679,271],{"class":264},[254,111681,111682,111685,111687],{"class":256,"line":175},[254,111683,111684],{"class":264},"tip_pos ",[254,111686,310],{"class":260},[254,111688,111689],{"class":264}," data.site_xpos[site_id]\n",[225,111691,111693],{"id":111692},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[14,111695,111696,111697,111699],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[251,111698,104171],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[245,111701,111703],{"className":30519,"code":111702,"language":30521,"meta":174,"style":174},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[251,111704,111705,111715],{"__ignoreMap":174},[254,111706,111707,111710,111712],{"class":256,"line":257},[254,111708,111709],{"class":264},"tip ",[254,111711,310],{"class":260},[254,111713,111714],{"class":264}," data.site_xpos[tip_site_id]\n",[254,111716,111717,111720,111722],{"class":256,"line":175},[254,111718,111719],{"class":264},"target ",[254,111721,310],{"class":260},[254,111723,111724],{"class":264}," data.site_xpos[target_site_id]\n",[14,111726,111727],{},"这样 reward 就很容易写：",[245,111729,111731],{"className":30519,"code":111730,"language":30521,"meta":174,"style":174},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[251,111732,111733,111748],{"__ignoreMap":174},[254,111734,111735,111738,111740,111743,111745],{"class":256,"line":257},[254,111736,111737],{"class":264},"dist ",[254,111739,310],{"class":260},[254,111741,111742],{"class":264}," np.linalg.norm(tip ",[254,111744,796],{"class":260},[254,111746,111747],{"class":264}," target)\n",[254,111749,111750,111752,111754,111756],{"class":256,"line":175},[254,111751,111146],{"class":264},[254,111753,310],{"class":260},[254,111755,52412],{"class":260},[254,111757,111758],{"class":264},"dist\n",[14,111760,111761,111762,111765],{},"距离越小，",[251,111763,111764],{},"-dist"," 越接近 0，奖励越高。",[225,111767,111768],{"id":111768},"两关节机械臂的状态",[14,111770,111771],{},"这个模型有两个 hinge joint：",[245,111773,111776],{"className":111774,"code":111775,"language":5328,"meta":174},[5326],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[251,111777,111775],{"__ignoreMap":174},[14,111779,111780],{},"再加上末端和目标位置：",[245,111782,111785],{"className":111783,"code":111784,"language":5328,"meta":174},[5326],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[251,111786,111784],{"__ignoreMap":174},[14,111788,111789],{},"总维度：",[245,111791,111794],{"className":111792,"code":111793,"language":5328,"meta":174},[5326],"2 + 2 + 3 + 3 = 10\n",[251,111795,111793],{"__ignoreMap":174},[225,111797,111799],{"id":111798},"为什么-gravity-是-0","为什么 gravity 是 0",[14,111801,111802],{},"本章把重力设为：",[245,111804,111806],{"className":53208,"code":111805,"language":53210,"meta":174,"style":174},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[251,111807,111808],{"__ignoreMap":174},[254,111809,111810,111812,111814,111816,111818,111820,111822,111824,111826],{"class":256,"line":257},[254,111811,1174],{"class":264},[254,111813,69307],{"class":51441},[254,111815,101335],{"class":2103},[254,111817,310],{"class":264},[254,111819,101340],{"class":369},[254,111821,101343],{"class":2103},[254,111823,310],{"class":264},[254,111825,103912],{"class":369},[254,111827,101285],{"class":264},[14,111829,111830],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[34,111832,101394],{"id":101393},[245,111834,111836],{"className":30519,"code":111835,"language":30521,"meta":174,"style":174},"import mujoco\nimport numpy as np\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"two_link_reacher\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n\n  \u003Cworldbody>\n    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n\n    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\" rgba=\"0.1 0.3 1 1\"\u002F>\n\n      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\" rgba=\"0.1 0.8 0.3 1\"\u002F>\n        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n      \u003C\u002Fbody>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\n  \u003Cactuator>\n    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n  \u003C\u002Factuator>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n    site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n    if site_id \u003C 0:\n        raise RuntimeError(f\"site not found: {name}\")\n    return data.site_xpos[site_id].copy()\n\n\ndef get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n    tip = site_position(model, data, \"tip\")\n    target = site_position(model, data, \"target\")\n    return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n\n\ndef reward(model: mujoco.MjModel, data: mujoco.MjData) -> float:\n    tip = site_position(model, data, \"tip\")\n    target = site_position(model, data, \"target\")\n    dist = np.linalg.norm(tip - target)\n    control_cost = 0.01 * np.sum(np.square(data.ctrl))\n    return float(-dist - control_cost)\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n    total_reward = 0.0\n\n    for step in range(500):\n        mujoco.mj_forward(model, data)\n        tip = site_position(model, data, \"tip\")\n        target = site_position(model, data, \"target\")\n        error = target - tip\n\n        data.ctrl[0] = np.clip(2.0 * error[2], -1.0, 1.0)\n        data.ctrl[1] = np.clip(2.0 * error[0], -1.0, 1.0)\n\n        mujoco.mj_step(model, data)\n        total_reward += reward(model, data)\n\n        if step % 100 == 0:\n            obs = get_obs(model, data)\n            print(\"step:\", step)\n            print(\"  tip:\", np.round(tip, 3))\n            print(\"  target:\", np.round(target, 3))\n            print(\"  ctrl:\", np.round(data.ctrl.copy(), 3))\n            print(\"  obs_dim:\", obs.shape[0])\n\n    print(\"total_reward:\", round(total_reward, 3))\n    print(\"final tip:\", np.round(site_position(model, data, \"tip\"), 3))\n    print(\"target:\", np.round(site_position(model, data, \"target\"), 3))\n\n\nif __name__ == \"__main__\":\n    main()\n",[251,111837,111838,111844,111854,111858,111862,111870,111875,111880,111884,111888,111893,111898,111902,111907,111912,111917,111921,111926,111931,111936,111941,111945,111949,111953,111957,111961,111966,111971,111975,111979,111983,111987,111991,112006,112015,112027,112050,112057,112061,112065,112075,112089,112103,112110,112114,112118,112132,112144,112156,112169,112184,112201,112205,112209,112221,112233,112241,112249,112253,112269,112274,112287,112300,112315,112319,112354,112386,112390,112394,112403,112407,112423,112433,112444,112460,112476,112492,112508,112512,112530,112550,112569,112573,112577,112589],{"__ignoreMap":174},[254,111839,111840,111842],{"class":256,"line":257},[254,111841,30533],{"class":260},[254,111843,101442],{"class":264},[254,111845,111846,111848,111850,111852],{"class":256,"line":175},[254,111847,30533],{"class":260},[254,111849,31521],{"class":264},[254,111851,31524],{"class":260},[254,111853,31527],{"class":264},[254,111855,111856],{"class":256,"line":1319},[254,111857,2540],{"emptyLinePlaceholder":184},[254,111859,111860],{"class":256,"line":1334},[254,111861,2540],{"emptyLinePlaceholder":184},[254,111863,111864,111866,111868],{"class":256,"line":1340},[254,111865,101455],{"class":313},[254,111867,13705],{"class":260},[254,111869,101460],{"class":369},[254,111871,111872],{"class":256,"line":1354},[254,111873,111874],{"class":369},"\u003Cmujoco model=\"two_link_reacher\">\n",[254,111876,111877],{"class":256,"line":1360},[254,111878,111879],{"class":369},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[254,111881,111882],{"class":256,"line":1451},[254,111883,2540],{"emptyLinePlaceholder":184},[254,111885,111886],{"class":256,"line":1457},[254,111887,101479],{"class":369},[254,111889,111890],{"class":256,"line":1469},[254,111891,111892],{"class":369},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[254,111894,111895],{"class":256,"line":1752},[254,111896,111897],{"class":369},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[254,111899,111900],{"class":256,"line":1757},[254,111901,2540],{"emptyLinePlaceholder":184},[254,111903,111904],{"class":256,"line":1763},[254,111905,111906],{"class":369},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[254,111908,111909],{"class":256,"line":1768},[254,111910,111911],{"class":369},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[254,111913,111914],{"class":256,"line":1782},[254,111915,111916],{"class":369},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[254,111918,111919],{"class":256,"line":1787},[254,111920,2540],{"emptyLinePlaceholder":184},[254,111922,111923],{"class":256,"line":1793},[254,111924,111925],{"class":369},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[254,111927,111928],{"class":256,"line":1814},[254,111929,111930],{"class":369},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[254,111932,111933],{"class":256,"line":1819},[254,111934,111935],{"class":369},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\" rgba=\"0.1 0.8 0.3 1\"\u002F>\n",[254,111937,111938],{"class":256,"line":1833},[254,111939,111940],{"class":369},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[254,111942,111943],{"class":256,"line":1838},[254,111944,106579],{"class":369},[254,111946,111947],{"class":256,"line":1867},[254,111948,101508],{"class":369},[254,111950,111951],{"class":256,"line":1872},[254,111952,101513],{"class":369},[254,111954,111955],{"class":256,"line":1889},[254,111956,2540],{"emptyLinePlaceholder":184},[254,111958,111959],{"class":256,"line":1894},[254,111960,106596],{"class":369},[254,111962,111963],{"class":256,"line":1899},[254,111964,111965],{"class":369},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[254,111967,111968],{"class":256,"line":1904},[254,111969,111970],{"class":369},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[254,111972,111973],{"class":256,"line":1918},[254,111974,106606],{"class":369},[254,111976,111977],{"class":256,"line":1923},[254,111978,101518],{"class":369},[254,111980,111981],{"class":256,"line":2717},[254,111982,95839],{"class":369},[254,111984,111985],{"class":256,"line":2731},[254,111986,2540],{"emptyLinePlaceholder":184},[254,111988,111989],{"class":256,"line":2739},[254,111990,2540],{"emptyLinePlaceholder":184},[254,111992,111993,111995,111998,112001,112003],{"class":256,"line":2744},[254,111994,32088],{"class":260},[254,111996,111997],{"class":2103}," site_position",[254,111999,112000],{"class":264},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[254,112002,1439],{"class":313},[254,112004,112005],{"class":264},") -> np.ndarray:\n",[254,112007,112008,112010,112012],{"class":256,"line":2750},[254,112009,103541],{"class":264},[254,112011,310],{"class":260},[254,112013,112014],{"class":264}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[254,112016,112017,112019,112021,112023,112025],{"class":256,"line":2756},[254,112018,3241],{"class":260},[254,112020,103590],{"class":264},[254,112022,1174],{"class":260},[254,112024,4233],{"class":313},[254,112026,3879],{"class":264},[254,112028,112029,112031,112033,112035,112037,112040,112042,112044,112046,112048],{"class":256,"line":2761},[254,112030,103573],{"class":260},[254,112032,103576],{"class":313},[254,112034,265],{"class":264},[254,112036,317],{"class":260},[254,112038,112039],{"class":369},"\"site not found: ",[254,112041,1160],{"class":313},[254,112043,79951],{"class":264},[254,112045,1210],{"class":313},[254,112047,515],{"class":369},[254,112049,271],{"class":264},[254,112051,112052,112054],{"class":256,"line":8089},[254,112053,4230],{"class":260},[254,112055,112056],{"class":264}," data.site_xpos[site_id].copy()\n",[254,112058,112059],{"class":256,"line":8113},[254,112060,2540],{"emptyLinePlaceholder":184},[254,112062,112063],{"class":256,"line":8118},[254,112064,2540],{"emptyLinePlaceholder":184},[254,112066,112067,112069,112072],{"class":256,"line":8124},[254,112068,32088],{"class":260},[254,112070,112071],{"class":2103}," get_obs",[254,112073,112074],{"class":264},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[254,112076,112077,112080,112082,112085,112087],{"class":256,"line":8151},[254,112078,112079],{"class":264},"    tip ",[254,112081,310],{"class":260},[254,112083,112084],{"class":264}," site_position(model, data, ",[254,112086,111677],{"class":369},[254,112088,271],{"class":264},[254,112090,112091,112094,112096,112098,112101],{"class":256,"line":8156},[254,112092,112093],{"class":264},"    target ",[254,112095,310],{"class":260},[254,112097,112084],{"class":264},[254,112099,112100],{"class":369},"\"target\"",[254,112102,271],{"class":264},[254,112104,112105,112107],{"class":256,"line":8162},[254,112106,4230],{"class":260},[254,112108,112109],{"class":264}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[254,112111,112112],{"class":256,"line":8174},[254,112113,2540],{"emptyLinePlaceholder":184},[254,112115,112116],{"class":256,"line":8186},[254,112117,2540],{"emptyLinePlaceholder":184},[254,112119,112120,112122,112125,112128,112130],{"class":256,"line":8198},[254,112121,32088],{"class":260},[254,112123,112124],{"class":2103}," reward",[254,112126,112127],{"class":264},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[254,112129,304],{"class":313},[254,112131,3879],{"class":264},[254,112133,112134,112136,112138,112140,112142],{"class":256,"line":9857},[254,112135,112079],{"class":264},[254,112137,310],{"class":260},[254,112139,112084],{"class":264},[254,112141,111677],{"class":369},[254,112143,271],{"class":264},[254,112145,112146,112148,112150,112152,112154],{"class":256,"line":9882},[254,112147,112093],{"class":264},[254,112149,310],{"class":260},[254,112151,112084],{"class":264},[254,112153,112100],{"class":369},[254,112155,271],{"class":264},[254,112157,112158,112161,112163,112165,112167],{"class":256,"line":9905},[254,112159,112160],{"class":264},"    dist ",[254,112162,310],{"class":260},[254,112164,111742],{"class":264},[254,112166,796],{"class":260},[254,112168,111747],{"class":264},[254,112170,112171,112174,112176,112179,112181],{"class":256,"line":9929},[254,112172,112173],{"class":264},"    control_cost ",[254,112175,310],{"class":260},[254,112177,112178],{"class":313}," 0.01",[254,112180,6659],{"class":260},[254,112182,112183],{"class":264}," np.sum(np.square(data.ctrl))\n",[254,112185,112186,112188,112190,112192,112194,112196,112198],{"class":256,"line":9934},[254,112187,4230],{"class":260},[254,112189,109938],{"class":313},[254,112191,265],{"class":264},[254,112193,796],{"class":260},[254,112195,111737],{"class":264},[254,112197,796],{"class":260},[254,112199,112200],{"class":264}," control_cost)\n",[254,112202,112203],{"class":256,"line":9939},[254,112204,2540],{"emptyLinePlaceholder":184},[254,112206,112207],{"class":256,"line":9944},[254,112208,2540],{"emptyLinePlaceholder":184},[254,112210,112211,112213,112215,112217,112219],{"class":256,"line":9953},[254,112212,32088],{"class":260},[254,112214,2113],{"class":2103},[254,112216,101539],{"class":264},[254,112218,95827],{"class":313},[254,112220,3879],{"class":264},[254,112222,112223,112225,112227,112229,112231],{"class":256,"line":9958},[254,112224,101548],{"class":264},[254,112226,310],{"class":260},[254,112228,101553],{"class":264},[254,112230,101455],{"class":313},[254,112232,271],{"class":264},[254,112234,112235,112237,112239],{"class":256,"line":9964},[254,112236,101562],{"class":264},[254,112238,310],{"class":260},[254,112240,101567],{"class":264},[254,112242,112243,112245,112247],{"class":256,"line":9985},[254,112244,110294],{"class":264},[254,112246,310],{"class":260},[254,112248,104902],{"class":313},[254,112250,112251],{"class":256,"line":9991},[254,112252,2540],{"emptyLinePlaceholder":184},[254,112254,112255,112257,112259,112261,112263,112265,112267],{"class":256,"line":10005},[254,112256,3341],{"class":260},[254,112258,31757],{"class":264},[254,112260,26184],{"class":260},[254,112262,32584],{"class":313},[254,112264,265],{"class":264},[254,112266,65215],{"class":313},[254,112268,30927],{"class":264},[254,112270,112271],{"class":256,"line":10011},[254,112272,112273],{"class":264},"        mujoco.mj_forward(model, data)\n",[254,112275,112276,112279,112281,112283,112285],{"class":256,"line":10038},[254,112277,112278],{"class":264},"        tip ",[254,112280,310],{"class":260},[254,112282,112084],{"class":264},[254,112284,111677],{"class":369},[254,112286,271],{"class":264},[254,112288,112289,112292,112294,112296,112298],{"class":256,"line":10047},[254,112290,112291],{"class":264},"        target ",[254,112293,310],{"class":260},[254,112295,112084],{"class":264},[254,112297,112100],{"class":369},[254,112299,271],{"class":264},[254,112301,112302,112305,112307,112310,112312],{"class":256,"line":10053},[254,112303,112304],{"class":264},"        error ",[254,112306,310],{"class":260},[254,112308,112309],{"class":264}," target ",[254,112311,796],{"class":260},[254,112313,112314],{"class":264}," tip\n",[254,112316,112317],{"class":256,"line":10061},[254,112318,2540],{"emptyLinePlaceholder":184},[254,112320,112321,112323,112325,112327,112329,112332,112334,112336,112339,112341,112344,112346,112348,112350,112352],{"class":256,"line":10066},[254,112322,106758],{"class":264},[254,112324,456],{"class":313},[254,112326,4583],{"class":264},[254,112328,310],{"class":260},[254,112330,112331],{"class":264}," np.clip(",[254,112333,105401],{"class":313},[254,112335,6659],{"class":260},[254,112337,112338],{"class":264}," error[",[254,112340,342],{"class":313},[254,112342,112343],{"class":264},"], ",[254,112345,796],{"class":260},[254,112347,102544],{"class":313},[254,112349,12576],{"class":264},[254,112351,102544],{"class":313},[254,112353,271],{"class":264},[254,112355,112356,112358,112360,112362,112364,112366,112368,112370,112372,112374,112376,112378,112380,112382,112384],{"class":256,"line":16745},[254,112357,106758],{"class":264},[254,112359,482],{"class":313},[254,112361,4583],{"class":264},[254,112363,310],{"class":260},[254,112365,112331],{"class":264},[254,112367,105401],{"class":313},[254,112369,6659],{"class":260},[254,112371,112338],{"class":264},[254,112373,456],{"class":313},[254,112375,112343],{"class":264},[254,112377,796],{"class":260},[254,112379,102544],{"class":313},[254,112381,12576],{"class":264},[254,112383,102544],{"class":313},[254,112385,271],{"class":264},[254,112387,112388],{"class":256,"line":16751},[254,112389,2540],{"emptyLinePlaceholder":184},[254,112391,112392],{"class":256,"line":16774},[254,112393,101657],{"class":264},[254,112395,112396,112398,112400],{"class":256,"line":16780},[254,112397,110438],{"class":264},[254,112399,9618],{"class":260},[254,112401,112402],{"class":264}," reward(model, data)\n",[254,112404,112405],{"class":256,"line":16803},[254,112406,2540],{"emptyLinePlaceholder":184},[254,112408,112409,112411,112413,112415,112417,112419,112421],{"class":256,"line":16817},[254,112410,2637],{"class":260},[254,112412,31757],{"class":264},[254,112414,592],{"class":260},[254,112416,5895],{"class":313},[254,112418,101700],{"class":260},[254,112420,4233],{"class":313},[254,112422,3879],{"class":264},[254,112424,112425,112428,112430],{"class":256,"line":16837},[254,112426,112427],{"class":264},"            obs ",[254,112429,310],{"class":260},[254,112431,112432],{"class":264}," get_obs(model, data)\n",[254,112434,112435,112437,112439,112441],{"class":256,"line":16843},[254,112436,34791],{"class":313},[254,112438,265],{"class":264},[254,112440,110472],{"class":369},[254,112442,112443],{"class":264},", step)\n",[254,112445,112446,112448,112450,112453,112456,112458],{"class":256,"line":16854},[254,112447,34791],{"class":313},[254,112449,265],{"class":264},[254,112451,112452],{"class":369},"\"  tip:\"",[254,112454,112455],{"class":264},", np.round(tip, ",[254,112457,336],{"class":313},[254,112459,30638],{"class":264},[254,112461,112462,112464,112466,112469,112472,112474],{"class":256,"line":16877},[254,112463,34791],{"class":313},[254,112465,265],{"class":264},[254,112467,112468],{"class":369},"\"  target:\"",[254,112470,112471],{"class":264},", np.round(target, ",[254,112473,336],{"class":313},[254,112475,30638],{"class":264},[254,112477,112478,112480,112482,112485,112488,112490],{"class":256,"line":16899},[254,112479,34791],{"class":313},[254,112481,265],{"class":264},[254,112483,112484],{"class":369},"\"  ctrl:\"",[254,112486,112487],{"class":264},", np.round(data.ctrl.copy(), ",[254,112489,336],{"class":313},[254,112491,30638],{"class":264},[254,112493,112494,112496,112498,112501,112504,112506],{"class":256,"line":16904},[254,112495,34791],{"class":313},[254,112497,265],{"class":264},[254,112499,112500],{"class":369},"\"  obs_dim:\"",[254,112502,112503],{"class":264},", obs.shape[",[254,112505,456],{"class":313},[254,112507,4797],{"class":264},[254,112509,112510],{"class":256,"line":16910},[254,112511,2540],{"emptyLinePlaceholder":184},[254,112513,112514,112516,112518,112520,112522,112524,112526,112528],{"class":256,"line":16924},[254,112515,31440],{"class":313},[254,112517,265],{"class":264},[254,112519,110517],{"class":369},[254,112521,12576],{"class":264},[254,112523,32159],{"class":313},[254,112525,110524],{"class":264},[254,112527,336],{"class":313},[254,112529,30638],{"class":264},[254,112531,112532,112534,112536,112539,112542,112544,112546,112548],{"class":256,"line":16937},[254,112533,31440],{"class":313},[254,112535,265],{"class":264},[254,112537,112538],{"class":369},"\"final tip:\"",[254,112540,112541],{"class":264},", np.round(site_position(model, data, ",[254,112543,111677],{"class":369},[254,112545,110486],{"class":264},[254,112547,336],{"class":313},[254,112549,30638],{"class":264},[254,112551,112552,112554,112556,112559,112561,112563,112565,112567],{"class":256,"line":16942},[254,112553,31440],{"class":313},[254,112555,265],{"class":264},[254,112557,112558],{"class":369},"\"target:\"",[254,112560,112541],{"class":264},[254,112562,112100],{"class":369},[254,112564,110486],{"class":264},[254,112566,336],{"class":313},[254,112568,30638],{"class":264},[254,112570,112571],{"class":256,"line":16956},[254,112572,2540],{"emptyLinePlaceholder":184},[254,112574,112575],{"class":256,"line":16961},[254,112576,2540],{"emptyLinePlaceholder":184},[254,112578,112579,112581,112583,112585,112587],{"class":256,"line":16967},[254,112580,1671],{"class":260},[254,112582,31361],{"class":313},[254,112584,101700],{"class":260},[254,112586,101703],{"class":369},[254,112588,3879],{"class":264},[254,112590,112591],{"class":256,"line":16972},[254,112592,101710],{"class":264},[14,112594,103711],{},[245,112596,112598],{"className":23963,"code":112597,"language":23965,"meta":174,"style":174},"touch ch7_reacher.py\n",[251,112599,112600],{"__ignoreMap":174},[254,112601,112602,112604],{"class":256,"line":257},[254,112603,101424],{"class":2103},[254,112605,112606],{"class":369}," ch7_reacher.py\n",[14,112608,110585],{},[245,112610,112612],{"className":23963,"code":112611,"language":23965,"meta":174,"style":174},"python ch7_reacher.py\n",[251,112613,112614],{"__ignoreMap":174},[254,112615,112616,112618],{"class":256,"line":257},[254,112617,30521],{"class":2103},[254,112619,112606],{"class":369},[225,112621,101713],{"id":101713},[14,112623,112624],{},"读取 site 坐标：",[245,112626,112628],{"className":30519,"code":112627,"language":30521,"meta":174,"style":174},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[251,112629,112630],{"__ignoreMap":174},[254,112631,112632,112634,112636,112638,112640],{"class":256,"line":257},[254,112633,32088],{"class":260},[254,112635,111997],{"class":2103},[254,112637,112000],{"class":264},[254,112639,1439],{"class":313},[254,112641,112005],{"class":264},[14,112643,112644],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[14,112646,110601],{},[245,112648,112650],{"className":30519,"code":112649,"language":30521,"meta":174,"style":174},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[251,112651,112652],{"__ignoreMap":174},[254,112653,112654,112656],{"class":256,"line":257},[254,112655,17187],{"class":260},[254,112657,112109],{"class":264},[14,112659,112660],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[14,112662,109926],{},[245,112664,112666],{"className":30519,"code":112665,"language":30521,"meta":174,"style":174},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[251,112667,112668,112680,112693],{"__ignoreMap":174},[254,112669,112670,112672,112674,112676,112678],{"class":256,"line":257},[254,112671,111737],{"class":264},[254,112673,310],{"class":260},[254,112675,111742],{"class":264},[254,112677,796],{"class":260},[254,112679,111747],{"class":264},[254,112681,112682,112685,112687,112689,112691],{"class":256,"line":175},[254,112683,112684],{"class":264},"control_cost ",[254,112686,310],{"class":260},[254,112688,112178],{"class":313},[254,112690,6659],{"class":260},[254,112692,112183],{"class":264},[254,112694,112695,112697,112699,112701,112703,112705,112707],{"class":256,"line":1319},[254,112696,17187],{"class":260},[254,112698,109938],{"class":313},[254,112700,265],{"class":264},[254,112702,796],{"class":260},[254,112704,111737],{"class":264},[254,112706,796],{"class":260},[254,112708,112200],{"class":264},[14,112710,112711],{},"奖励由两部分组成：",[21,112713,112714,112719],{},[24,112715,112716,112718],{},[251,112717,111764],{},"：末端离目标越远，奖励越低。",[24,112720,112721,112724],{},[251,112722,112723],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[14,112726,112727],{},"简单控制器：",[245,112729,112731],{"className":30519,"code":112730,"language":30521,"meta":174,"style":174},"error = target - tip\ndata.ctrl[0] = np.clip(2.0 * error[2], -1.0, 1.0)\ndata.ctrl[1] = np.clip(2.0 * error[0], -1.0, 1.0)\n",[251,112732,112733,112746,112778],{"__ignoreMap":174},[254,112734,112735,112738,112740,112742,112744],{"class":256,"line":257},[254,112736,112737],{"class":264},"error ",[254,112739,310],{"class":260},[254,112741,112309],{"class":264},[254,112743,796],{"class":260},[254,112745,112314],{"class":264},[254,112747,112748,112750,112752,112754,112756,112758,112760,112762,112764,112766,112768,112770,112772,112774,112776],{"class":256,"line":175},[254,112749,106012],{"class":264},[254,112751,456],{"class":313},[254,112753,4583],{"class":264},[254,112755,310],{"class":260},[254,112757,112331],{"class":264},[254,112759,105401],{"class":313},[254,112761,6659],{"class":260},[254,112763,112338],{"class":264},[254,112765,342],{"class":313},[254,112767,112343],{"class":264},[254,112769,796],{"class":260},[254,112771,102544],{"class":313},[254,112773,12576],{"class":264},[254,112775,102544],{"class":313},[254,112777,271],{"class":264},[254,112779,112780,112782,112784,112786,112788,112790,112792,112794,112796,112798,112800,112802,112804,112806,112808],{"class":256,"line":1319},[254,112781,106012],{"class":264},[254,112783,482],{"class":313},[254,112785,4583],{"class":264},[254,112787,310],{"class":260},[254,112789,112331],{"class":264},[254,112791,105401],{"class":313},[254,112793,6659],{"class":260},[254,112795,112338],{"class":264},[254,112797,456],{"class":313},[254,112799,112343],{"class":264},[254,112801,796],{"class":260},[254,112803,102544],{"class":313},[254,112805,12576],{"class":264},[254,112807,102544],{"class":313},[254,112809,271],{"class":264},[14,112811,112812],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[225,112814,101849],{"id":101849},[245,112816,112817],{"className":30519,"code":112627,"language":30521,"meta":174,"style":174},[251,112818,112819],{"__ignoreMap":174},[254,112820,112821,112823,112825,112827,112829],{"class":256,"line":257},[254,112822,32088],{"class":260},[254,112824,111997],{"class":2103},[254,112826,112000],{"class":264},[254,112828,1439],{"class":313},[254,112830,112005],{"class":264},[14,112832,112833,112834,112836,112837,82680,112839,28526],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[251,112835,79951],{}," 是 site 的名字，比如 ",[251,112838,111677],{},[251,112840,112100],{},[245,112842,112844],{"className":30519,"code":112843,"language":30521,"meta":174,"style":174},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[251,112845,112846],{"__ignoreMap":174},[254,112847,112848,112850,112852],{"class":256,"line":257},[254,112849,103775],{"class":264},[254,112851,310],{"class":260},[254,112853,112014],{"class":264},[14,112855,112856],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[245,112858,112860],{"className":30519,"code":112859,"language":30521,"meta":174,"style":174},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[251,112861,112862,112874],{"__ignoreMap":174},[254,112863,112864,112866,112868,112870,112872],{"class":256,"line":257},[254,112865,1671],{"class":260},[254,112867,103590],{"class":264},[254,112869,1174],{"class":260},[254,112871,4233],{"class":313},[254,112873,3879],{"class":264},[254,112875,112876,112878,112880,112882,112884,112886,112888,112890,112892,112894],{"class":256,"line":175},[254,112877,104036],{"class":260},[254,112879,103576],{"class":313},[254,112881,265],{"class":264},[254,112883,317],{"class":260},[254,112885,112039],{"class":369},[254,112887,1160],{"class":313},[254,112889,79951],{"class":264},[254,112891,1210],{"class":313},[254,112893,515],{"class":369},[254,112895,271],{"class":264},[14,112897,112898,112899,112902,112903,112905],{},"如果 site 没找到，就主动报错。",[251,112900,112901],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[251,112904,79951],{}," 的值放进字符串里。",[245,112907,112909],{"className":30519,"code":112908,"language":30521,"meta":174,"style":174},"return data.site_xpos[site_id].copy()\n",[251,112910,112911],{"__ignoreMap":174},[254,112912,112913,112915],{"class":256,"line":257},[254,112914,17187],{"class":260},[254,112916,112056],{"class":264},[14,112918,112919,112920,112922,112923,112926],{},"返回这个 site 的世界坐标。",[251,112921,103821],{}," 里的每一行都是一个 site 的 ",[251,112924,112925],{},"(x, y, z)"," 坐标。",[245,112928,112930],{"className":30519,"code":112929,"language":30521,"meta":174,"style":174},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[251,112931,112932],{"__ignoreMap":174},[254,112933,112934,112936,112938],{"class":256,"line":257},[254,112935,32088],{"class":260},[254,112937,112071],{"class":2103},[254,112939,112074],{"class":264},[14,112941,112942],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[245,112944,112946],{"className":30519,"code":112945,"language":30521,"meta":174,"style":174},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[251,112947,112948,112960],{"__ignoreMap":174},[254,112949,112950,112952,112954,112956,112958],{"class":256,"line":257},[254,112951,111709],{"class":264},[254,112953,310],{"class":260},[254,112955,112084],{"class":264},[254,112957,111677],{"class":369},[254,112959,271],{"class":264},[254,112961,112962,112964,112966,112968,112970],{"class":256,"line":175},[254,112963,111719],{"class":264},[254,112965,310],{"class":260},[254,112967,112084],{"class":264},[254,112969,112100],{"class":369},[254,112971,271],{"class":264},[14,112973,112974],{},"分别读取末端点和目标点的世界坐标。",[245,112976,112977],{"className":30519,"code":112649,"language":30521,"meta":174,"style":174},[251,112978,112979],{"__ignoreMap":174},[254,112980,112981,112983],{"class":256,"line":257},[254,112982,17187],{"class":260},[254,112984,112109],{"class":264},[14,112986,112987],{},"把四部分拼成一个观测数组：",[245,112989,112992],{"className":112990,"code":112991,"language":5328,"meta":174},[5326],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[251,112993,112991],{"__ignoreMap":174},[245,112995,112997],{"className":30519,"code":112996,"language":30521,"meta":174,"style":174},"dist = np.linalg.norm(tip - target)\n",[251,112998,112999],{"__ignoreMap":174},[254,113000,113001,113003,113005,113007,113009],{"class":256,"line":257},[254,113002,111737],{"class":264},[254,113004,310],{"class":260},[254,113006,111742],{"class":264},[254,113008,796],{"class":260},[254,113010,111747],{"class":264},[14,113012,113013,113014,113017,113018,113021],{},"计算 tip 到 target 的距离。",[251,113015,113016],{},"tip - target"," 得到一个三维向量，",[251,113019,113020],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[14,113023,14774],{},[245,113025,113028],{"className":113026,"code":113027,"language":5328,"meta":174},[5326],"tip    = [0.3, 0.0, 0.4]\ntarget = [0.5, 0.0, 0.4]\ntip - target = [-0.2, 0.0, 0.0]\ndistance = 0.2\n",[251,113029,113027],{"__ignoreMap":174},[245,113031,113033],{"className":30519,"code":113032,"language":30521,"meta":174,"style":174},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[251,113034,113035],{"__ignoreMap":174},[254,113036,113037,113039,113041,113043,113045],{"class":256,"line":257},[254,113038,112684],{"class":264},[254,113040,310],{"class":260},[254,113042,112178],{"class":313},[254,113044,6659],{"class":260},[254,113046,112183],{"class":264},[14,113048,113049,113050,113053,113054,113057],{},"计算动作惩罚。",[251,113051,113052],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[251,113055,113056],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[245,113059,113061],{"className":30519,"code":113060,"language":30521,"meta":174,"style":174},"return float(-dist - control_cost)\n",[251,113062,113063],{"__ignoreMap":174},[254,113064,113065,113067,113069,113071,113073,113075,113077],{"class":256,"line":257},[254,113066,17187],{"class":260},[254,113068,109938],{"class":313},[254,113070,265],{"class":264},[254,113072,796],{"class":260},[254,113074,111737],{"class":264},[254,113076,796],{"class":260},[254,113078,112200],{"class":264},[14,113080,113081],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[245,113083,113084],{"className":30519,"code":110944,"language":30521,"meta":174,"style":174},[251,113085,113086],{"__ignoreMap":174},[254,113087,113088,113090,113092],{"class":256,"line":257},[254,113089,110951],{"class":264},[254,113091,310],{"class":260},[254,113093,104902],{"class":313},[14,113095,113096],{},"累计奖励变量，记录整个运行过程的总分。",[245,113098,113100],{"className":30519,"code":113099,"language":30521,"meta":174,"style":174},"for step in range(500):\n",[251,113101,113102],{"__ignoreMap":174},[254,113103,113104,113106,113108,113110,113112,113114,113116],{"class":256,"line":257},[254,113105,3165],{"class":260},[254,113107,31757],{"class":264},[254,113109,26184],{"class":260},[254,113111,32584],{"class":313},[254,113113,265],{"class":264},[254,113115,65215],{"class":313},[254,113117,30927],{"class":264},[14,113119,113120],{},"运行 500 个控制步。",[245,113122,113123],{"className":30519,"code":104684,"language":30521,"meta":174,"style":174},[251,113124,113125],{"__ignoreMap":174},[254,113126,113127],{"class":256,"line":257},[254,113128,104684],{"class":264},[14,113130,113131,113132,101159,113134,113136],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[251,113133,103372],{},[251,113135,103375],{}," 是当前状态下的坐标。",[245,113138,113140],{"className":30519,"code":113139,"language":30521,"meta":174,"style":174},"error = target - tip\n",[251,113141,113142],{"__ignoreMap":174},[254,113143,113144,113146,113148,113150,113152],{"class":256,"line":257},[254,113145,112737],{"class":264},[254,113147,310],{"class":260},[254,113149,112309],{"class":264},[254,113151,796],{"class":260},[254,113153,112314],{"class":264},[14,113155,113156],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[245,113158,113160],{"className":30519,"code":113159,"language":30521,"meta":174,"style":174},"data.ctrl[0] = np.clip(2.0 * error[2], -1.0, 1.0)\ndata.ctrl[1] = np.clip(2.0 * error[0], -1.0, 1.0)\n",[251,113161,113162,113194],{"__ignoreMap":174},[254,113163,113164,113166,113168,113170,113172,113174,113176,113178,113180,113182,113184,113186,113188,113190,113192],{"class":256,"line":257},[254,113165,106012],{"class":264},[254,113167,456],{"class":313},[254,113169,4583],{"class":264},[254,113171,310],{"class":260},[254,113173,112331],{"class":264},[254,113175,105401],{"class":313},[254,113177,6659],{"class":260},[254,113179,112338],{"class":264},[254,113181,342],{"class":313},[254,113183,112343],{"class":264},[254,113185,796],{"class":260},[254,113187,102544],{"class":313},[254,113189,12576],{"class":264},[254,113191,102544],{"class":313},[254,113193,271],{"class":264},[254,113195,113196,113198,113200,113202,113204,113206,113208,113210,113212,113214,113216,113218,113220,113222,113224],{"class":256,"line":175},[254,113197,106012],{"class":264},[254,113199,482],{"class":313},[254,113201,4583],{"class":264},[254,113203,310],{"class":260},[254,113205,112331],{"class":264},[254,113207,105401],{"class":313},[254,113209,6659],{"class":260},[254,113211,112338],{"class":264},[254,113213,456],{"class":313},[254,113215,112343],{"class":264},[254,113217,796],{"class":260},[254,113219,102544],{"class":313},[254,113221,12576],{"class":264},[254,113223,102544],{"class":313},[254,113225,271],{"class":264},[14,113227,113228,113229,113232],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[251,113230,113231],{},"error -> ctrl -> step"," 的流程。",[245,113234,113235],{"className":30519,"code":104646,"language":30521,"meta":174,"style":174},[251,113236,113237],{"__ignoreMap":174},[254,113238,113239],{"class":256,"line":257},[254,113240,104646],{"class":264},[14,113242,113243],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[245,113245,113247],{"className":30519,"code":113246,"language":30521,"meta":174,"style":174},"obs = get_obs(model, data)\n",[251,113248,113249],{"__ignoreMap":174},[254,113250,113251,113253,113255],{"class":256,"line":257},[254,113252,110995],{"class":264},[254,113254,310],{"class":260},[254,113256,112432],{"class":264},[14,113258,113259,113260,113263],{},"读取最新观测。后面打印 ",[251,113261,113262],{},"obs.shape[0]","，用来确认观测维度是 10。",[34,113265,102457],{"id":102456},[14,113267,113268],{},"观测维度为:",[245,113270,113273],{"className":113271,"code":113272,"language":5328,"meta":174},[5326],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[251,113274,113272],{"__ignoreMap":174},[14,113276,113277],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[14,113279,113280],{},"程序每 100 步打印：",[245,113282,113285],{"className":113283,"code":113284,"language":5328,"meta":174},[5326],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[251,113286,113284],{"__ignoreMap":174},[14,113288,113289,113290,113292],{},"如果控制有效，你应该看到最终 ",[251,113291,103372],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[34,113294,102489],{"id":102488},[21,113296,113297,113300,113303,113309,113315,113322,113332],{},[24,113298,113299],{},"修改目标点位置。",[24,113301,113302],{},"重新运行，观察最终 tip 是否变化。",[24,113304,113305,113306,113308],{},"把 gravity 改成 ",[251,113307,102730],{},"，观察控制是否变差。",[24,113310,111322,113311,111326,113313,28526],{},[251,113312,102299],{},[251,113314,342],{},[24,113316,102552,113317,102555,113319,113321],{},[251,113318,110737],{},[251,113320,107448],{},"，观察机械臂是否更难移动。",[24,113323,102552,113324,82671,113326,102555,113328,113331],{},[251,113325,103375],{},[251,113327,104287],{},[251,113329,113330],{},"0.2 0 0.6","，观察 reward 和 final tip。",[24,113333,113334],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[34,113336,102594],{"id":102593},[225,113338,113340],{"id":113339},"site-not-found",[251,113341,113342],{},"site not found",[14,113344,113345,113346,101159,113349,28526],{},"检查 XML 中是否有 ",[251,113347,113348],{},"site name=\"tip\"",[251,113350,113351],{},"site name=\"target\"",[225,113353,113354],{"id":113354},"机械臂完全不动",[14,113356,102664],{},[21,113358,113359,113364,113367,113372],{},[24,113360,113361,113363],{},[251,113362,102299],{}," 是否为 2",[24,113365,113366],{},"actuator 是否引用正确 joint",[24,113368,113369,113371],{},[251,113370,101217],{}," 是否被赋值",[24,113373,113374,113375],{},"是否执行了 ",[251,113376,100826],{},[225,113378,113379],{"id":113379},"控制效果不好",[14,113381,113382],{},"正常。本章重点不是控制器最优，而是任务结构:",[245,113384,113387],{"className":113385,"code":113386,"language":5328,"meta":174},[5326],"obs → action → mj_step → reward → next_obs\n",[251,113388,113386],{"__ignoreMap":174},[225,113390,113392],{"id":113391},"tip-坐标不变化","tip 坐标不变化",[14,113394,102716],{},[21,113396,113397,113402,113410,113419],{},[24,113398,113399,113400,28526],{},"是否每步调用了 ",[251,113401,100826],{},[24,113403,113404,113405,101159,113407,28526],{},"是否写入了 ",[251,113406,106267],{},[251,113408,113409],{},"data.ctrl[1]",[24,113411,113412,113413,477,113416,28526],{},"actuator 是否正确引用 ",[251,113414,113415],{},"joint1",[251,113417,113418],{},"joint2",[24,113420,113421],{},"控制输入是否太小。",[225,113423,113424],{"id":113424},"目标点不会动",[14,113426,113427],{},"本章的 target 是固定 site：",[245,113429,113431],{"className":53208,"code":113430,"language":53210,"meta":174,"style":174},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[251,113432,113433],{"__ignoreMap":174},[254,113434,113435,113437,113439,113441,113443,113445,113447,113449,113452],{"class":256,"line":257},[254,113436,1174],{"class":264},[254,113438,103351],{"class":51441},[254,113440,15061],{"class":2103},[254,113442,310],{"class":264},[254,113444,112100],{"class":369},[254,113446,101247],{"class":2103},[254,113448,310],{"class":264},[254,113450,113451],{"class":369},"\"0.5 0 0.4\"",[254,113453,113454],{"class":264}," ...\u002F>\n",[14,113456,113457,113458,113460],{},"它直接挂在 ",[251,113459,101982],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[225,113462,113463],{"id":113463},"机械臂不像真实机械臂",[14,113465,113466],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[34,113468,102748],{"id":102747},[14,113470,113471],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[14,113473,113474],{},"核心公式：",[245,113476,113479],{"className":113477,"code":113478,"language":5328,"meta":174},[5326],"distance = ||tip - target||\nreward = -distance - action_cost\n",[251,113480,113478],{"__ignoreMap":174},[14,113482,113483],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[5267,113485,113486],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":174,"searchDepth":175,"depth":175,"links":113488},[113489,113490,113491,113496,113500,113501,113502,113510],{"id":100787,"depth":175,"text":100788},{"id":100910,"depth":175,"text":100911},{"id":101185,"depth":175,"text":101186,"children":113492},[113493,113494,113495],{"id":111692,"depth":1319,"text":111693},{"id":111768,"depth":1319,"text":111768},{"id":111798,"depth":1319,"text":111799},{"id":101393,"depth":175,"text":101394,"children":113497},[113498,113499],{"id":101713,"depth":1319,"text":101713},{"id":101849,"depth":1319,"text":101849},{"id":102456,"depth":175,"text":102457},{"id":102488,"depth":175,"text":102489},{"id":102593,"depth":175,"text":102594,"children":113503},[113504,113505,113506,113507,113508,113509],{"id":113339,"depth":1319,"text":113342},{"id":113354,"depth":1319,"text":113354},{"id":113379,"depth":1319,"text":113379},{"id":113391,"depth":1319,"text":113392},{"id":113424,"depth":1319,"text":113424},{"id":113463,"depth":1319,"text":113463},{"id":102747,"depth":175,"text":102748},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111496,"description":174},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":113517,"title":113518,"body":113519,"description":174,"extension":181,"meta":116981,"navigation":184,"path":116982,"seo":116983,"stem":116984,"__hash__":116985},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":113520,"toc":116952},[113521,113524,113526,113529,113532,113557,113560,113566,113569,113575,113577,113579,113603,113605,113623,113625,113668,113670,113697,113699,113702,113754,113757,113763,113772,113775,113813,113816,113855,113858,113866,113873,113876,113882,113884,113938,113945,113990,113993,113997,114013,114023,114025,115286,115288,115300,115302,115313,115315,115318,115339,115342,115345,115378,115384,115387,115420,115423,115426,115467,115472,115486,115489,115502,115507,115530,115532,115547,115557,115572,115579,115599,115614,115632,115635,115652,115660,115676,115682,115714,115727,115759,115769,115804,115818,115864,115878,115920,115931,115944,115950,115983,115986,116013,116023,116063,116073,116090,116097,116115,116118,116159,116172,116187,116190,116213,116216,116228,116231,116250,116255,116276,116279,116294,116297,116331,116343,116358,116361,116386,116389,116408,116411,116443,116446,116470,116476,116506,116513,116526,116529,116531,116533,116539,116542,116545,116557,116560,116562,116616,116618,116622,116628,116637,116640,116647,116649,116672,116675,116679,116681,116699,116705,116707,116740,116743,116749,116753,116756,116776,116781,116785,116792,116812,116817,116821,116824,116844,116847,116933,116937,116940,116946,116949],[10,113522,113518],{"id":113523},"_8gymnasium-风格强化学习接口基础",[34,113525,100788],{"id":100787},[14,113527,113528],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[14,113530,113531],{},"你将实现:",[245,113533,113535],{"className":30519,"code":113534,"language":30521,"meta":174,"style":174},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[251,113536,113537,113547],{"__ignoreMap":174},[254,113538,113539,113542,113544],{"class":256,"line":257},[254,113540,113541],{"class":264},"obs, info ",[254,113543,310],{"class":260},[254,113545,113546],{"class":264}," env.reset()\n",[254,113548,113549,113552,113554],{"class":256,"line":175},[254,113550,113551],{"class":264},"obs, reward, terminated, truncated, info ",[254,113553,310],{"class":260},[254,113555,113556],{"class":264}," env.step(action)\n",[14,113558,113559],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[14,113561,113562,113563,113565],{},"前面章节的代码都是“脚本式”的：在 ",[251,113564,102436],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[14,113567,113568],{},"可以先记住 Gymnasium 环境的核心交互：",[245,113570,113573],{"className":113571,"code":113572,"language":5328,"meta":174},[5326],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[251,113574,113572],{"__ignoreMap":174},[34,113576,100911],{"id":100910},[14,113578,100914],{},[245,113580,113581],{"className":23963,"code":104529,"language":23965,"meta":174,"style":174},[251,113582,113583],{"__ignoreMap":174},[254,113584,113585,113587,113589,113591,113593,113595,113597,113599,113601],{"class":256,"line":257},[254,113586,24717],{"class":2103},[254,113588,26456],{"class":369},[254,113590,23975],{"class":369},[254,113592,26541],{"class":313},[254,113594,104544],{"class":369},[254,113596,100939],{"class":369},[254,113598,102642],{"class":369},[254,113600,100955],{"class":369},[254,113602,104553],{"class":369},[14,113604,102960],{},[245,113606,113608],{"className":23963,"code":113607,"language":23965,"meta":174,"style":174},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[251,113609,113610],{"__ignoreMap":174},[254,113611,113612,113614,113616,113618,113620],{"class":256,"line":257},[254,113613,23972],{"class":2103},[254,113615,23975],{"class":369},[254,113617,101071],{"class":369},[254,113619,107852],{"class":369},[254,113621,113622],{"class":369}," gymnasium\n",[14,113624,102977],{},[245,113626,113628],{"className":23963,"code":113627,"language":23965,"meta":174,"style":174},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[251,113629,113630,113647,113656],{"__ignoreMap":174},[254,113631,113632,113634,113636,113638,113641,113643,113645],{"class":256,"line":257},[254,113633,30471],{"class":2103},[254,113635,29317],{"class":369},[254,113637,25256],{"class":313},[254,113639,113640],{"class":369}," mujoco-gym-api",[254,113642,101116],{"class":369},[254,113644,101119],{"class":313},[254,113646,101122],{"class":313},[254,113648,113649,113651,113653],{"class":256,"line":175},[254,113650,30471],{"class":2103},[254,113652,101129],{"class":369},[254,113654,113655],{"class":369}," mujoco-gym-api\n",[254,113657,113658,113660,113662,113664,113666],{"class":256,"line":1319},[254,113659,23972],{"class":2103},[254,113661,23975],{"class":369},[254,113663,101071],{"class":369},[254,113665,107852],{"class":369},[254,113667,113622],{"class":369},[14,113669,101145],{},[21,113671,113672,113682,113685,113691],{},[24,113673,113674,113675,113678,113679,28526],{},"本章使用 ",[251,113676,113677],{},"gymnasium","，不是旧版 ",[251,113680,113681],{},"gym",[24,113683,113684],{},"Gymnasium API 与旧 Gym API 有差异。",[24,113686,113687,113688,28526],{},"旧 Gym 常见返回值是 4 个: ",[251,113689,113690],{},"obs, reward, done, info",[24,113692,113693,113694,28526],{},"Gymnasium 返回值是 5 个: ",[251,113695,113696],{},"obs, reward, terminated, truncated, info",[34,113698,101186],{"id":101185},[14,113700,113701],{},"强化学习环境接口包含:",[402,113703,113704,113713],{},[405,113705,113706],{},[408,113707,113708,113711],{},[411,113709,113710],{"align":23877},"方法",[411,113712,102837],{"align":23877},[449,113714,113715,113725,113735,113745],{},[408,113716,113717,113722],{},[454,113718,113719],{"align":23877},[251,113720,113721],{},"reset()",[454,113723,113724],{"align":23877},"重置环境",[408,113726,113727,113732],{},[454,113728,113729],{"align":23877},[251,113730,113731],{},"step(action)",[454,113733,113734],{"align":23877},"执行动作",[408,113736,113737,113742],{},[454,113738,113739],{"align":23877},[251,113740,113741],{},"observation_space",[454,113743,113744],{"align":23877},"观测空间",[408,113746,113747,113752],{},[454,113748,113749],{"align":23877},[251,113750,113751],{},"action_space",[454,113753,23795],{"align":23877},[14,113755,113756],{},"一个最小环境需要完成:",[245,113758,113761],{"className":113759,"code":113760,"language":5328,"meta":174},[5326],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[251,113762,113760],{"__ignoreMap":174},[225,113764,113766,101159,113769,104779],{"id":113765},"terminated-和-truncated-的区别",[251,113767,113768],{},"terminated",[251,113770,113771],{},"truncated",[14,113773,113774],{},"Gymnasium 把“结束”拆成两个概念：",[402,113776,113777,113787],{},[405,113778,113779],{},[408,113780,113781,113783,113785],{},[411,113782,104715],{"align":23877},[411,113784,100841],{"align":23877},[411,113786,21328],{"align":23877},[449,113788,113789,113801],{},[408,113790,113791,113795,113798],{},[454,113792,113793],{"align":23877},[251,113794,113768],{},[454,113796,113797],{"align":23877},"任务自然结束",[454,113799,113800],{"align":23877},"机械臂到达目标、机器人摔倒",[408,113802,113803,113807,113810],{},[454,113804,113805],{"align":23877},[251,113806,113771],{},[454,113808,113809],{"align":23877},"因外部限制截断",[454,113811,113812],{"align":23877},"达到最大步数、时间限制",[14,113814,113815],{},"本章中：",[245,113817,113819],{"className":30519,"code":113818,"language":30521,"meta":174,"style":174},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[251,113820,113821,113836],{"__ignoreMap":174},[254,113822,113823,113826,113828,113831,113833],{"class":256,"line":257},[254,113824,113825],{"class":264},"terminated ",[254,113827,310],{"class":260},[254,113829,113830],{"class":264}," dist ",[254,113832,1174],{"class":260},[254,113834,113835],{"class":313}," 0.05\n",[254,113837,113838,113841,113843,113845,113848,113850,113852],{"class":256,"line":175},[254,113839,113840],{"class":264},"truncated ",[254,113842,310],{"class":260},[254,113844,39014],{"class":313},[254,113846,113847],{"class":264},".steps ",[254,113849,1850],{"class":260},[254,113851,39014],{"class":313},[254,113853,113854],{"class":264},".max_steps\n",[14,113856,113857],{},"也就是：",[21,113859,113860,113863],{},[24,113861,113862],{},"末端距离目标小于 0.05，任务成功结束。",[24,113864,113865],{},"步数超过上限，episode 被截断。",[225,113867,113869,101159,113871],{"id":113868},"observation_space-和-action_space",[251,113870,113741],{},[251,113872,113751],{},[14,113874,113875],{},"这两个对象告诉算法：",[245,113877,113880],{"className":113878,"code":113879,"language":5328,"meta":174},[5326],"观测长什么样\n动作允许多大\n",[251,113881,113879],{"__ignoreMap":174},[14,113883,14774],{},[245,113885,113887],{"className":30519,"code":113886,"language":30521,"meta":174,"style":174},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[251,113888,113889],{"__ignoreMap":174},[254,113890,113891,113893,113896,113898,113901,113904,113907,113909,113911,113914,113916,113918,113920,113922,113924,113926,113928,113931,113933,113935],{"class":256,"line":257},[254,113892,30964],{"class":313},[254,113894,113895],{"class":264},".action_space ",[254,113897,310],{"class":260},[254,113899,113900],{"class":264}," spaces.Box(",[254,113902,113903],{"class":5357},"low",[254,113905,113906],{"class":260},"=-",[254,113908,102544],{"class":313},[254,113910,12576],{"class":264},[254,113912,113913],{"class":5357},"high",[254,113915,310],{"class":260},[254,113917,102544],{"class":313},[254,113919,12576],{"class":264},[254,113921,96104],{"class":5357},[254,113923,310],{"class":260},[254,113925,265],{"class":264},[254,113927,342],{"class":313},[254,113929,113930],{"class":264},",), ",[254,113932,93641],{"class":5357},[254,113934,310],{"class":260},[254,113936,113937],{"class":264},"np.float32)\n",[14,113939,113940,113941,113944],{},"表示动作是 2 维数组，每个值都在 ",[251,113942,113943],{},"[-1, 1]"," 范围内。",[245,113946,113948],{"className":30519,"code":113947,"language":30521,"meta":174,"style":174},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[251,113949,113950],{"__ignoreMap":174},[254,113951,113952,113954,113957,113959,113961,113963,113965,113968,113970,113972,113974,113976,113978,113980,113982,113984,113986,113988],{"class":256,"line":257},[254,113953,30964],{"class":313},[254,113955,113956],{"class":264},".observation_space ",[254,113958,310],{"class":260},[254,113960,113900],{"class":264},[254,113962,113903],{"class":5357},[254,113964,113906],{"class":260},[254,113966,113967],{"class":264},"np.inf, ",[254,113969,113913],{"class":5357},[254,113971,310],{"class":260},[254,113973,113967],{"class":264},[254,113975,96104],{"class":5357},[254,113977,310],{"class":260},[254,113979,265],{"class":264},[254,113981,710],{"class":313},[254,113983,113930],{"class":264},[254,113985,93641],{"class":5357},[254,113987,310],{"class":260},[254,113989,113937],{"class":264},[14,113991,113992],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[225,113994,113996],{"id":113995},"frame_skip-是什么","frame_skip 是什么",[245,113998,114000],{"className":30519,"code":113999,"language":30521,"meta":174,"style":174},"self.frame_skip = 5\n",[251,114001,114002],{"__ignoreMap":174},[254,114003,114004,114006,114009,114011],{"class":256,"line":257},[254,114005,30964],{"class":313},[254,114007,114008],{"class":264},".frame_skip ",[254,114010,310],{"class":260},[254,114012,54568],{"class":313},[14,114014,114015,114016,114019,114020,114022],{},"表示外部调用一次 ",[251,114017,114018],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[251,114021,101356],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[34,114024,101394],{"id":101393},[245,114026,114028],{"className":30519,"code":114027,"language":30521,"meta":174,"style":174},"import gymnasium as gym\nimport mujoco\nimport numpy as np\nfrom gymnasium import spaces\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"gym_reacher\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n\n  \u003Cworldbody>\n    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n\n    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n\n      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n      \u003C\u002Fbody>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\n  \u003Cactuator>\n    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n  \u003C\u002Factuator>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\nclass ReacherEnv(gym.Env):\n    metadata = {\"render_modes\": []}\n\n    def __init__(self) -> None:\n        super().__init__()\n        self.model = mujoco.MjModel.from_xml_string(XML)\n        self.data = mujoco.MjData(self.model)\n\n        self.tip_site_id = mujoco.mj_name2id(self.model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\n        self.target_site_id = mujoco.mj_name2id(self.model, mujoco.mjtObj.mjOBJ_SITE, \"target\")\n        if self.tip_site_id \u003C 0 or self.target_site_id \u003C 0:\n            raise RuntimeError(\"required sites not found\")\n\n        self.frame_skip = 5\n        self.max_steps = 200\n        self.steps = 0\n\n        self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n        self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n\n    def _get_obs(self) -> np.ndarray:\n        tip = self.data.site_xpos[self.tip_site_id].copy()\n        target = self.data.site_xpos[self.target_site_id].copy()\n        obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\n        return obs.astype(np.float32)\n\n    def _get_reward(self) -> float:\n        tip = self.data.site_xpos[self.tip_site_id]\n        target = self.data.site_xpos[self.target_site_id]\n        dist = np.linalg.norm(tip - target)\n        control_cost = 0.01 * np.sum(np.square(self.data.ctrl))\n        return float(-dist - control_cost)\n\n    def reset(self, *, seed: int | None = None, options: dict | None = None):\n        super().reset(seed=seed)\n        mujoco.mj_resetData(self.model, self.data)\n\n        self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n        self.data.qvel[:] = 0.0\n        mujoco.mj_forward(self.model, self.data)\n\n        self.steps = 0\n        return self._get_obs(), {}\n\n    def step(self, action):\n        action = np.asarray(action, dtype=np.float32)\n        action = np.clip(action, self.action_space.low, self.action_space.high)\n\n        self.data.ctrl[:] = action\n        for _ in range(self.frame_skip):\n            mujoco.mj_step(self.model, self.data)\n\n        self.steps += 1\n\n        obs = self._get_obs()\n        reward = self._get_reward()\n\n        tip = self.data.site_xpos[self.tip_site_id]\n        target = self.data.site_xpos[self.target_site_id]\n        dist = float(np.linalg.norm(tip - target))\n\n        terminated = dist \u003C 0.05\n        truncated = self.steps >= self.max_steps\n        info = {\"distance\": dist}\n        return obs, reward, terminated, truncated, info\n\n\ndef main() -> None:\n    env = ReacherEnv()\n    obs, info = env.reset(seed=0)\n    print(\"initial obs shape:\", obs.shape)\n    print(\"initial info:\", info)\n\n    total_reward = 0.0\n    for step in range(20):\n        action = env.action_space.sample()\n        obs, reward, terminated, truncated, info = env.step(action)\n        total_reward += reward\n        print(\"step:\", step, \"reward:\", round(reward, 3), \"distance:\", round(info[\"distance\"], 3))\n        if terminated or truncated:\n            break\n\n    print(\"total_reward:\", round(total_reward, 3))\n\n\nif __name__ == \"__main__\":\n    main()\n",[251,114029,114030,114042,114048,114058,114069,114073,114077,114085,114090,114094,114098,114102,114106,114110,114114,114118,114123,114127,114131,114135,114140,114144,114148,114152,114156,114160,114164,114168,114172,114176,114180,114184,114188,114192,114210,114225,114229,114242,114252,114267,114284,114288,114309,114328,114353,114367,114371,114381,114393,114403,114407,114449,114487,114491,114501,114517,114532,114551,114558,114562,114575,114590,114605,114618,114637,114653,114657,114698,114713,114728,114732,114771,114782,114795,114799,114809,114818,114822,114832,114847,114865,114869,114880,114897,114910,114914,114924,114928,114939,114950,114954,114968,114982,114998,115002,115015,115032,115047,115054,115058,115062,115074,115084,115102,115114,115126,115130,115138,115154,115163,115172,115180,115222,115235,115240,115244,115262,115266,115270,115282],{"__ignoreMap":174},[254,114031,114032,114034,114037,114039],{"class":256,"line":257},[254,114033,30533],{"class":260},[254,114035,114036],{"class":264}," gymnasium ",[254,114038,31524],{"class":260},[254,114040,114041],{"class":264}," gym\n",[254,114043,114044,114046],{"class":256,"line":175},[254,114045,30533],{"class":260},[254,114047,101442],{"class":264},[254,114049,114050,114052,114054,114056],{"class":256,"line":1319},[254,114051,30533],{"class":260},[254,114053,31521],{"class":264},[254,114055,31524],{"class":260},[254,114057,31527],{"class":264},[254,114059,114060,114062,114064,114066],{"class":256,"line":1334},[254,114061,30878],{"class":260},[254,114063,114036],{"class":264},[254,114065,30533],{"class":260},[254,114067,114068],{"class":264}," spaces\n",[254,114070,114071],{"class":256,"line":1340},[254,114072,2540],{"emptyLinePlaceholder":184},[254,114074,114075],{"class":256,"line":1354},[254,114076,2540],{"emptyLinePlaceholder":184},[254,114078,114079,114081,114083],{"class":256,"line":1360},[254,114080,101455],{"class":313},[254,114082,13705],{"class":260},[254,114084,101460],{"class":369},[254,114086,114087],{"class":256,"line":1451},[254,114088,114089],{"class":369},"\u003Cmujoco model=\"gym_reacher\">\n",[254,114091,114092],{"class":256,"line":1457},[254,114093,111879],{"class":369},[254,114095,114096],{"class":256,"line":1469},[254,114097,2540],{"emptyLinePlaceholder":184},[254,114099,114100],{"class":256,"line":1752},[254,114101,101479],{"class":369},[254,114103,114104],{"class":256,"line":1757},[254,114105,111897],{"class":369},[254,114107,114108],{"class":256,"line":1763},[254,114109,2540],{"emptyLinePlaceholder":184},[254,114111,114112],{"class":256,"line":1768},[254,114113,111906],{"class":369},[254,114115,114116],{"class":256,"line":1782},[254,114117,111911],{"class":369},[254,114119,114120],{"class":256,"line":1787},[254,114121,114122],{"class":369},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[254,114124,114125],{"class":256,"line":1793},[254,114126,2540],{"emptyLinePlaceholder":184},[254,114128,114129],{"class":256,"line":1814},[254,114130,111925],{"class":369},[254,114132,114133],{"class":256,"line":1819},[254,114134,111930],{"class":369},[254,114136,114137],{"class":256,"line":1833},[254,114138,114139],{"class":369},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[254,114141,114142],{"class":256,"line":1838},[254,114143,111940],{"class":369},[254,114145,114146],{"class":256,"line":1867},[254,114147,106579],{"class":369},[254,114149,114150],{"class":256,"line":1872},[254,114151,101508],{"class":369},[254,114153,114154],{"class":256,"line":1889},[254,114155,101513],{"class":369},[254,114157,114158],{"class":256,"line":1894},[254,114159,2540],{"emptyLinePlaceholder":184},[254,114161,114162],{"class":256,"line":1899},[254,114163,106596],{"class":369},[254,114165,114166],{"class":256,"line":1904},[254,114167,111965],{"class":369},[254,114169,114170],{"class":256,"line":1918},[254,114171,111970],{"class":369},[254,114173,114174],{"class":256,"line":1923},[254,114175,106606],{"class":369},[254,114177,114178],{"class":256,"line":2717},[254,114179,101518],{"class":369},[254,114181,114182],{"class":256,"line":2731},[254,114183,95839],{"class":369},[254,114185,114186],{"class":256,"line":2739},[254,114187,2540],{"emptyLinePlaceholder":184},[254,114189,114190],{"class":256,"line":2744},[254,114191,2540],{"emptyLinePlaceholder":184},[254,114193,114194,114196,114199,114201,114203,114205,114208],{"class":256,"line":2750},[254,114195,14835],{"class":260},[254,114197,114198],{"class":2103}," ReacherEnv",[254,114200,265],{"class":264},[254,114202,113681],{"class":2103},[254,114204,822],{"class":264},[254,114206,114207],{"class":2103},"Env",[254,114209,30927],{"class":264},[254,114211,114212,114215,114217,114219,114222],{"class":256,"line":2756},[254,114213,114214],{"class":264},"    metadata ",[254,114216,310],{"class":260},[254,114218,4588],{"class":264},[254,114220,114221],{"class":369},"\"render_modes\"",[254,114223,114224],{"class":264},": []}\n",[254,114226,114227],{"class":256,"line":2761},[254,114228,2540],{"emptyLinePlaceholder":184},[254,114230,114231,114233,114235,114238,114240],{"class":256,"line":8089},[254,114232,30942],{"class":260},[254,114234,30945],{"class":313},[254,114236,114237],{"class":264},"(self) -> ",[254,114239,95827],{"class":313},[254,114241,3879],{"class":264},[254,114243,114244,114246,114248,114250],{"class":256,"line":8113},[254,114245,30958],{"class":313},[254,114247,17402],{"class":264},[254,114249,30970],{"class":313},[254,114251,2116],{"class":264},[254,114253,114254,114256,114259,114261,114263,114265],{"class":256,"line":8118},[254,114255,30986],{"class":313},[254,114257,114258],{"class":264},".model ",[254,114260,310],{"class":260},[254,114262,101553],{"class":264},[254,114264,101455],{"class":313},[254,114266,271],{"class":264},[254,114268,114269,114271,114274,114276,114279,114281],{"class":256,"line":8124},[254,114270,30986],{"class":313},[254,114272,114273],{"class":264},".data ",[254,114275,310],{"class":260},[254,114277,114278],{"class":264}," mujoco.MjData(",[254,114280,30964],{"class":313},[254,114282,114283],{"class":264},".model)\n",[254,114285,114286],{"class":256,"line":8151},[254,114287,2540],{"emptyLinePlaceholder":184},[254,114289,114290,114292,114295,114297,114300,114302,114305,114307],{"class":256,"line":8156},[254,114291,30986],{"class":313},[254,114293,114294],{"class":264},".tip_site_id ",[254,114296,310],{"class":260},[254,114298,114299],{"class":264}," mujoco.mj_name2id(",[254,114301,30964],{"class":313},[254,114303,114304],{"class":264},".model, mujoco.mjtObj.mjOBJ_SITE, ",[254,114306,111677],{"class":369},[254,114308,271],{"class":264},[254,114310,114311,114313,114316,114318,114320,114322,114324,114326],{"class":256,"line":8162},[254,114312,30986],{"class":313},[254,114314,114315],{"class":264},".target_site_id ",[254,114317,310],{"class":260},[254,114319,114299],{"class":264},[254,114321,30964],{"class":313},[254,114323,114304],{"class":264},[254,114325,112100],{"class":369},[254,114327,271],{"class":264},[254,114329,114330,114332,114334,114336,114338,114340,114343,114345,114347,114349,114351],{"class":256,"line":8174},[254,114331,2637],{"class":260},[254,114333,39014],{"class":313},[254,114335,114294],{"class":264},[254,114337,1174],{"class":260},[254,114339,4233],{"class":313},[254,114341,114342],{"class":260}," or",[254,114344,39014],{"class":313},[254,114346,114315],{"class":264},[254,114348,1174],{"class":260},[254,114350,4233],{"class":313},[254,114352,3879],{"class":264},[254,114354,114355,114358,114360,114362,114365],{"class":256,"line":8186},[254,114356,114357],{"class":260},"            raise",[254,114359,103576],{"class":313},[254,114361,265],{"class":264},[254,114363,114364],{"class":369},"\"required sites not found\"",[254,114366,271],{"class":264},[254,114368,114369],{"class":256,"line":8198},[254,114370,2540],{"emptyLinePlaceholder":184},[254,114372,114373,114375,114377,114379],{"class":256,"line":9857},[254,114374,30986],{"class":313},[254,114376,114008],{"class":264},[254,114378,310],{"class":260},[254,114380,54568],{"class":313},[254,114382,114383,114385,114388,114390],{"class":256,"line":9882},[254,114384,30986],{"class":313},[254,114386,114387],{"class":264},".max_steps ",[254,114389,310],{"class":260},[254,114391,114392],{"class":313}," 200\n",[254,114394,114395,114397,114399,114401],{"class":256,"line":9905},[254,114396,30986],{"class":313},[254,114398,113847],{"class":264},[254,114400,310],{"class":260},[254,114402,47474],{"class":313},[254,114404,114405],{"class":256,"line":9929},[254,114406,2540],{"emptyLinePlaceholder":184},[254,114408,114409,114411,114413,114415,114417,114419,114421,114423,114425,114427,114429,114431,114433,114435,114437,114439,114441,114443,114445,114447],{"class":256,"line":9934},[254,114410,30986],{"class":313},[254,114412,113895],{"class":264},[254,114414,310],{"class":260},[254,114416,113900],{"class":264},[254,114418,113903],{"class":5357},[254,114420,113906],{"class":260},[254,114422,102544],{"class":313},[254,114424,12576],{"class":264},[254,114426,113913],{"class":5357},[254,114428,310],{"class":260},[254,114430,102544],{"class":313},[254,114432,12576],{"class":264},[254,114434,96104],{"class":5357},[254,114436,310],{"class":260},[254,114438,265],{"class":264},[254,114440,342],{"class":313},[254,114442,113930],{"class":264},[254,114444,93641],{"class":5357},[254,114446,310],{"class":260},[254,114448,113937],{"class":264},[254,114450,114451,114453,114455,114457,114459,114461,114463,114465,114467,114469,114471,114473,114475,114477,114479,114481,114483,114485],{"class":256,"line":9939},[254,114452,30986],{"class":313},[254,114454,113956],{"class":264},[254,114456,310],{"class":260},[254,114458,113900],{"class":264},[254,114460,113903],{"class":5357},[254,114462,113906],{"class":260},[254,114464,113967],{"class":264},[254,114466,113913],{"class":5357},[254,114468,310],{"class":260},[254,114470,113967],{"class":264},[254,114472,96104],{"class":5357},[254,114474,310],{"class":260},[254,114476,265],{"class":264},[254,114478,710],{"class":313},[254,114480,113930],{"class":264},[254,114482,93641],{"class":5357},[254,114484,310],{"class":260},[254,114486,113937],{"class":264},[254,114488,114489],{"class":256,"line":9944},[254,114490,2540],{"emptyLinePlaceholder":184},[254,114492,114493,114495,114498],{"class":256,"line":9953},[254,114494,30942],{"class":260},[254,114496,114497],{"class":2103}," _get_obs",[254,114499,114500],{"class":264},"(self) -> np.ndarray:\n",[254,114502,114503,114505,114507,114509,114512,114514],{"class":256,"line":9958},[254,114504,112278],{"class":264},[254,114506,310],{"class":260},[254,114508,39014],{"class":313},[254,114510,114511],{"class":264},".data.site_xpos[",[254,114513,30964],{"class":313},[254,114515,114516],{"class":264},".tip_site_id].copy()\n",[254,114518,114519,114521,114523,114525,114527,114529],{"class":256,"line":9964},[254,114520,112291],{"class":264},[254,114522,310],{"class":260},[254,114524,39014],{"class":313},[254,114526,114511],{"class":264},[254,114528,30964],{"class":313},[254,114530,114531],{"class":264},".target_site_id].copy()\n",[254,114533,114534,114536,114538,114541,114543,114546,114548],{"class":256,"line":9985},[254,114535,110323],{"class":264},[254,114537,310],{"class":260},[254,114539,114540],{"class":264}," np.concatenate([",[254,114542,30964],{"class":313},[254,114544,114545],{"class":264},".data.qpos.copy(), ",[254,114547,30964],{"class":313},[254,114549,114550],{"class":264},".data.qvel.copy(), tip, target])\n",[254,114552,114553,114555],{"class":256,"line":9991},[254,114554,14893],{"class":260},[254,114556,114557],{"class":264}," obs.astype(np.float32)\n",[254,114559,114560],{"class":256,"line":10005},[254,114561,2540],{"emptyLinePlaceholder":184},[254,114563,114564,114566,114569,114571,114573],{"class":256,"line":10011},[254,114565,30942],{"class":260},[254,114567,114568],{"class":2103}," _get_reward",[254,114570,114237],{"class":264},[254,114572,304],{"class":313},[254,114574,3879],{"class":264},[254,114576,114577,114579,114581,114583,114585,114587],{"class":256,"line":10038},[254,114578,112278],{"class":264},[254,114580,310],{"class":260},[254,114582,39014],{"class":313},[254,114584,114511],{"class":264},[254,114586,30964],{"class":313},[254,114588,114589],{"class":264},".tip_site_id]\n",[254,114591,114592,114594,114596,114598,114600,114602],{"class":256,"line":10047},[254,114593,112291],{"class":264},[254,114595,310],{"class":260},[254,114597,39014],{"class":313},[254,114599,114511],{"class":264},[254,114601,30964],{"class":313},[254,114603,114604],{"class":264},".target_site_id]\n",[254,114606,114607,114610,114612,114614,114616],{"class":256,"line":10053},[254,114608,114609],{"class":264},"        dist ",[254,114611,310],{"class":260},[254,114613,111742],{"class":264},[254,114615,796],{"class":260},[254,114617,111747],{"class":264},[254,114619,114620,114623,114625,114627,114629,114632,114634],{"class":256,"line":10061},[254,114621,114622],{"class":264},"        control_cost ",[254,114624,310],{"class":260},[254,114626,112178],{"class":313},[254,114628,6659],{"class":260},[254,114630,114631],{"class":264}," np.sum(np.square(",[254,114633,30964],{"class":313},[254,114635,114636],{"class":264},".data.ctrl))\n",[254,114638,114639,114641,114643,114645,114647,114649,114651],{"class":256,"line":10066},[254,114640,14893],{"class":260},[254,114642,109938],{"class":313},[254,114644,265],{"class":264},[254,114646,796],{"class":260},[254,114648,111737],{"class":264},[254,114650,796],{"class":260},[254,114652,112200],{"class":264},[254,114654,114655],{"class":256,"line":16745},[254,114656,2540],{"emptyLinePlaceholder":184},[254,114658,114659,114661,114664,114667,114669,114672,114674,114676,114678,114680,114682,114685,114688,114690,114692,114694,114696],{"class":256,"line":16751},[254,114660,30942],{"class":260},[254,114662,114663],{"class":2103}," reset",[254,114665,114666],{"class":264},"(self, ",[254,114668,719],{"class":260},[254,114670,114671],{"class":264},", seed: ",[254,114673,268],{"class":313},[254,114675,25250],{"class":260},[254,114677,39074],{"class":313},[254,114679,13705],{"class":260},[254,114681,39074],{"class":313},[254,114683,114684],{"class":264},", options: ",[254,114686,114687],{"class":313},"dict",[254,114689,25250],{"class":260},[254,114691,39074],{"class":313},[254,114693,13705],{"class":260},[254,114695,39074],{"class":313},[254,114697,30927],{"class":264},[254,114699,114700,114702,114705,114708,114710],{"class":256,"line":16774},[254,114701,30958],{"class":313},[254,114703,114704],{"class":264},"().reset(",[254,114706,114707],{"class":5357},"seed",[254,114709,310],{"class":260},[254,114711,114712],{"class":264},"seed)\n",[254,114714,114715,114718,114720,114723,114725],{"class":256,"line":16780},[254,114716,114717],{"class":264},"        mujoco.mj_resetData(",[254,114719,30964],{"class":313},[254,114721,114722],{"class":264},".model, ",[254,114724,30964],{"class":313},[254,114726,114727],{"class":264},".data)\n",[254,114729,114730],{"class":256,"line":16803},[254,114731,2540],{"emptyLinePlaceholder":184},[254,114733,114734,114736,114739,114741,114743,114746,114748,114750,114752,114754,114756,114758,114760,114762,114764,114766,114768],{"class":256,"line":16817},[254,114735,30986],{"class":313},[254,114737,114738],{"class":264},".data.qpos[:] ",[254,114740,310],{"class":260},[254,114742,39014],{"class":313},[254,114744,114745],{"class":264},".np_random.uniform(",[254,114747,113903],{"class":5357},[254,114749,113906],{"class":260},[254,114751,86351],{"class":313},[254,114753,12576],{"class":264},[254,114755,113913],{"class":5357},[254,114757,310],{"class":260},[254,114759,86351],{"class":313},[254,114761,12576],{"class":264},[254,114763,31637],{"class":5357},[254,114765,310],{"class":260},[254,114767,30964],{"class":313},[254,114769,114770],{"class":264},".model.nq)\n",[254,114772,114773,114775,114778,114780],{"class":256,"line":16837},[254,114774,30986],{"class":313},[254,114776,114777],{"class":264},".data.qvel[:] ",[254,114779,310],{"class":260},[254,114781,104902],{"class":313},[254,114783,114784,114787,114789,114791,114793],{"class":256,"line":16843},[254,114785,114786],{"class":264},"        mujoco.mj_forward(",[254,114788,30964],{"class":313},[254,114790,114722],{"class":264},[254,114792,30964],{"class":313},[254,114794,114727],{"class":264},[254,114796,114797],{"class":256,"line":16854},[254,114798,2540],{"emptyLinePlaceholder":184},[254,114800,114801,114803,114805,114807],{"class":256,"line":16877},[254,114802,30986],{"class":313},[254,114804,113847],{"class":264},[254,114806,310],{"class":260},[254,114808,47474],{"class":313},[254,114810,114811,114813,114815],{"class":256,"line":16899},[254,114812,14893],{"class":260},[254,114814,39014],{"class":313},[254,114816,114817],{"class":264},"._get_obs(), {}\n",[254,114819,114820],{"class":256,"line":16904},[254,114821,2540],{"emptyLinePlaceholder":184},[254,114823,114824,114826,114829],{"class":256,"line":16910},[254,114825,30942],{"class":260},[254,114827,114828],{"class":2103}," step",[254,114830,114831],{"class":264},"(self, action):\n",[254,114833,114834,114836,114838,114841,114843,114845],{"class":256,"line":16924},[254,114835,110363],{"class":264},[254,114837,310],{"class":260},[254,114839,114840],{"class":264}," np.asarray(action, ",[254,114842,93641],{"class":5357},[254,114844,310],{"class":260},[254,114846,113937],{"class":264},[254,114848,114849,114851,114853,114855,114857,114860,114862],{"class":256,"line":16937},[254,114850,110363],{"class":264},[254,114852,310],{"class":260},[254,114854,107588],{"class":264},[254,114856,30964],{"class":313},[254,114858,114859],{"class":264},".action_space.low, ",[254,114861,30964],{"class":313},[254,114863,114864],{"class":264},".action_space.high)\n",[254,114866,114867],{"class":256,"line":16942},[254,114868,2540],{"emptyLinePlaceholder":184},[254,114870,114871,114873,114876,114878],{"class":256,"line":16956},[254,114872,30986],{"class":313},[254,114874,114875],{"class":264},".data.ctrl[:] ",[254,114877,310],{"class":260},[254,114879,107611],{"class":264},[254,114881,114882,114884,114886,114888,114890,114892,114894],{"class":256,"line":16961},[254,114883,3543],{"class":260},[254,114885,101642],{"class":264},[254,114887,26184],{"class":260},[254,114889,32584],{"class":313},[254,114891,265],{"class":264},[254,114893,30964],{"class":313},[254,114895,114896],{"class":264},".frame_skip):\n",[254,114898,114899,114902,114904,114906,114908],{"class":256,"line":16967},[254,114900,114901],{"class":264},"            mujoco.mj_step(",[254,114903,30964],{"class":313},[254,114905,114722],{"class":264},[254,114907,30964],{"class":313},[254,114909,114727],{"class":264},[254,114911,114912],{"class":256,"line":16972},[254,114913,2540],{"emptyLinePlaceholder":184},[254,114915,114916,114918,114920,114922],{"class":256,"line":16986},[254,114917,30986],{"class":313},[254,114919,113847],{"class":264},[254,114921,9618],{"class":260},[254,114923,55840],{"class":313},[254,114925,114926],{"class":256,"line":16991},[254,114927,2540],{"emptyLinePlaceholder":184},[254,114929,114930,114932,114934,114936],{"class":256,"line":16996},[254,114931,110323],{"class":264},[254,114933,310],{"class":260},[254,114935,39014],{"class":313},[254,114937,114938],{"class":264},"._get_obs()\n",[254,114940,114941,114943,114945,114947],{"class":256,"line":17010},[254,114942,110428],{"class":264},[254,114944,310],{"class":260},[254,114946,39014],{"class":313},[254,114948,114949],{"class":264},"._get_reward()\n",[254,114951,114952],{"class":256,"line":17022},[254,114953,2540],{"emptyLinePlaceholder":184},[254,114955,114956,114958,114960,114962,114964,114966],{"class":256,"line":17027},[254,114957,112278],{"class":264},[254,114959,310],{"class":260},[254,114961,39014],{"class":313},[254,114963,114511],{"class":264},[254,114965,30964],{"class":313},[254,114967,114589],{"class":264},[254,114969,114970,114972,114974,114976,114978,114980],{"class":256,"line":17040},[254,114971,112291],{"class":264},[254,114973,310],{"class":260},[254,114975,39014],{"class":313},[254,114977,114511],{"class":264},[254,114979,30964],{"class":313},[254,114981,114604],{"class":264},[254,114983,114984,114986,114988,114990,114993,114995],{"class":256,"line":17045},[254,114985,114609],{"class":264},[254,114987,310],{"class":260},[254,114989,109938],{"class":313},[254,114991,114992],{"class":264},"(np.linalg.norm(tip ",[254,114994,796],{"class":260},[254,114996,114997],{"class":264}," target))\n",[254,114999,115000],{"class":256,"line":17050},[254,115001,2540],{"emptyLinePlaceholder":184},[254,115003,115004,115007,115009,115011,115013],{"class":256,"line":17055},[254,115005,115006],{"class":264},"        terminated ",[254,115008,310],{"class":260},[254,115010,113830],{"class":264},[254,115012,1174],{"class":260},[254,115014,113835],{"class":313},[254,115016,115017,115020,115022,115024,115026,115028,115030],{"class":256,"line":17068},[254,115018,115019],{"class":264},"        truncated ",[254,115021,310],{"class":260},[254,115023,39014],{"class":313},[254,115025,113847],{"class":264},[254,115027,1850],{"class":260},[254,115029,39014],{"class":313},[254,115031,113854],{"class":264},[254,115033,115034,115037,115039,115041,115044],{"class":256,"line":17073},[254,115035,115036],{"class":264},"        info ",[254,115038,310],{"class":260},[254,115040,4588],{"class":264},[254,115042,115043],{"class":369},"\"distance\"",[254,115045,115046],{"class":264},": dist}\n",[254,115048,115049,115051],{"class":256,"line":32774},[254,115050,14893],{"class":260},[254,115052,115053],{"class":264}," obs, reward, terminated, truncated, info\n",[254,115055,115056],{"class":256,"line":32780},[254,115057,2540],{"emptyLinePlaceholder":184},[254,115059,115060],{"class":256,"line":32786},[254,115061,2540],{"emptyLinePlaceholder":184},[254,115063,115064,115066,115068,115070,115072],{"class":256,"line":32792},[254,115065,32088],{"class":260},[254,115067,2113],{"class":2103},[254,115069,101539],{"class":264},[254,115071,95827],{"class":313},[254,115073,3879],{"class":264},[254,115075,115076,115079,115081],{"class":256,"line":32798},[254,115077,115078],{"class":264},"    env ",[254,115080,310],{"class":260},[254,115082,115083],{"class":264}," ReacherEnv()\n",[254,115085,115086,115089,115091,115094,115096,115098,115100],{"class":256,"line":32809},[254,115087,115088],{"class":264},"    obs, info ",[254,115090,310],{"class":260},[254,115092,115093],{"class":264}," env.reset(",[254,115095,114707],{"class":5357},[254,115097,310],{"class":260},[254,115099,456],{"class":313},[254,115101,271],{"class":264},[254,115103,115104,115106,115108,115111],{"class":256,"line":32815},[254,115105,31440],{"class":313},[254,115107,265],{"class":264},[254,115109,115110],{"class":369},"\"initial obs shape:\"",[254,115112,115113],{"class":264},", obs.shape)\n",[254,115115,115116,115118,115120,115123],{"class":256,"line":32835},[254,115117,31440],{"class":313},[254,115119,265],{"class":264},[254,115121,115122],{"class":369},"\"initial info:\"",[254,115124,115125],{"class":264},", info)\n",[254,115127,115128],{"class":256,"line":32841},[254,115129,2540],{"emptyLinePlaceholder":184},[254,115131,115132,115134,115136],{"class":256,"line":32852},[254,115133,110294],{"class":264},[254,115135,310],{"class":260},[254,115137,104902],{"class":313},[254,115139,115140,115142,115144,115146,115148,115150,115152],{"class":256,"line":32858},[254,115141,3341],{"class":260},[254,115143,31757],{"class":264},[254,115145,26184],{"class":260},[254,115147,32584],{"class":313},[254,115149,265],{"class":264},[254,115151,964],{"class":313},[254,115153,30927],{"class":264},[254,115155,115156,115158,115160],{"class":256,"line":32864},[254,115157,110363],{"class":264},[254,115159,310],{"class":260},[254,115161,115162],{"class":264}," env.action_space.sample()\n",[254,115164,115165,115168,115170],{"class":256,"line":32870},[254,115166,115167],{"class":264},"        obs, reward, terminated, truncated, info ",[254,115169,310],{"class":260},[254,115171,113556],{"class":264},[254,115173,115174,115176,115178],{"class":256,"line":32876},[254,115175,110438],{"class":264},[254,115177,9618],{"class":260},[254,115179,110443],{"class":264},[254,115181,115182,115184,115186,115188,115190,115193,115195,115197,115200,115202,115204,115207,115209,115211,115214,115216,115218,115220],{"class":256,"line":32882},[254,115183,32592],{"class":313},[254,115185,265],{"class":264},[254,115187,110472],{"class":369},[254,115189,110475],{"class":264},[254,115191,115192],{"class":369},"\"reward:\"",[254,115194,12576],{"class":264},[254,115196,32159],{"class":313},[254,115198,115199],{"class":264},"(reward, ",[254,115201,336],{"class":313},[254,115203,110486],{"class":264},[254,115205,115206],{"class":369},"\"distance:\"",[254,115208,12576],{"class":264},[254,115210,32159],{"class":313},[254,115212,115213],{"class":264},"(info[",[254,115215,115043],{"class":369},[254,115217,112343],{"class":264},[254,115219,336],{"class":313},[254,115221,30638],{"class":264},[254,115223,115224,115226,115229,115232],{"class":256,"line":32888},[254,115225,2637],{"class":260},[254,115227,115228],{"class":264}," terminated ",[254,115230,115231],{"class":260},"or",[254,115233,115234],{"class":264}," truncated:\n",[254,115236,115237],{"class":256,"line":32894},[254,115238,115239],{"class":260},"            break\n",[254,115241,115242],{"class":256,"line":32914},[254,115243,2540],{"emptyLinePlaceholder":184},[254,115245,115246,115248,115250,115252,115254,115256,115258,115260],{"class":256,"line":32920},[254,115247,31440],{"class":313},[254,115249,265],{"class":264},[254,115251,110517],{"class":369},[254,115253,12576],{"class":264},[254,115255,32159],{"class":313},[254,115257,110524],{"class":264},[254,115259,336],{"class":313},[254,115261,30638],{"class":264},[254,115263,115264],{"class":256,"line":32936},[254,115265,2540],{"emptyLinePlaceholder":184},[254,115267,115268],{"class":256,"line":32942},[254,115269,2540],{"emptyLinePlaceholder":184},[254,115271,115272,115274,115276,115278,115280],{"class":256,"line":32956},[254,115273,1671],{"class":260},[254,115275,31361],{"class":313},[254,115277,101700],{"class":260},[254,115279,101703],{"class":369},[254,115281,3879],{"class":264},[254,115283,115284],{"class":256,"line":32962},[254,115285,101710],{"class":264},[14,115287,103711],{},[245,115289,115291],{"className":23963,"code":115290,"language":23965,"meta":174,"style":174},"touch ch8_gym_env.py\n",[251,115292,115293],{"__ignoreMap":174},[254,115294,115295,115297],{"class":256,"line":257},[254,115296,101424],{"class":2103},[254,115298,115299],{"class":369}," ch8_gym_env.py\n",[14,115301,110585],{},[245,115303,115305],{"className":23963,"code":115304,"language":23965,"meta":174,"style":174},"python ch8_gym_env.py\n",[251,115306,115307],{"__ignoreMap":174},[254,115308,115309,115311],{"class":256,"line":257},[254,115310,30521],{"class":2103},[254,115312,115299],{"class":369},[225,115314,101713],{"id":101713},[14,115316,115317],{},"继承 Gymnasium 环境：",[245,115319,115321],{"className":30519,"code":115320,"language":30521,"meta":174,"style":174},"class ReacherEnv(gym.Env):\n",[251,115322,115323],{"__ignoreMap":174},[254,115324,115325,115327,115329,115331,115333,115335,115337],{"class":256,"line":257},[254,115326,14835],{"class":260},[254,115328,114198],{"class":2103},[254,115330,265],{"class":264},[254,115332,113681],{"class":2103},[254,115334,822],{"class":264},[254,115336,114207],{"class":2103},[254,115338,30927],{"class":264},[14,115340,115341],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[14,115343,115344],{},"初始化模型：",[245,115346,115348],{"className":30519,"code":115347,"language":30521,"meta":174,"style":174},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[251,115349,115350,115364],{"__ignoreMap":174},[254,115351,115352,115354,115356,115358,115360,115362],{"class":256,"line":257},[254,115353,30964],{"class":313},[254,115355,114258],{"class":264},[254,115357,310],{"class":260},[254,115359,101553],{"class":264},[254,115361,101455],{"class":313},[254,115363,271],{"class":264},[254,115365,115366,115368,115370,115372,115374,115376],{"class":256,"line":175},[254,115367,30964],{"class":313},[254,115369,114273],{"class":264},[254,115371,310],{"class":260},[254,115373,114278],{"class":264},[254,115375,30964],{"class":313},[254,115377,114283],{"class":264},[14,115379,115380,115381,115383],{},"这和前面章节一样，只是现在放到了类的 ",[251,115382,30970],{}," 里。",[14,115385,115386],{},"缓存 site ID：",[245,115388,115390],{"className":30519,"code":115389,"language":30521,"meta":174,"style":174},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[251,115391,115392,115406],{"__ignoreMap":174},[254,115393,115394,115396,115398,115400,115402,115404],{"class":256,"line":257},[254,115395,30964],{"class":313},[254,115397,114294],{"class":264},[254,115399,310],{"class":260},[254,115401,114299],{"class":264},[254,115403,89695],{"class":313},[254,115405,271],{"class":264},[254,115407,115408,115410,115412,115414,115416,115418],{"class":256,"line":175},[254,115409,30964],{"class":313},[254,115411,114315],{"class":264},[254,115413,310],{"class":260},[254,115415,114299],{"class":264},[254,115417,89695],{"class":313},[254,115419,271],{"class":264},[14,115421,115422],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[14,115424,115425],{},"reset：",[245,115427,115429],{"className":30519,"code":115428,"language":30521,"meta":174,"style":174},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[251,115430,115431],{"__ignoreMap":174},[254,115432,115433,115435,115437,115439,115441,115443,115445,115447,115449,115451,115453,115455,115457,115459,115461,115463,115465],{"class":256,"line":257},[254,115434,32088],{"class":260},[254,115436,114663],{"class":2103},[254,115438,114666],{"class":264},[254,115440,719],{"class":260},[254,115442,114671],{"class":264},[254,115444,268],{"class":313},[254,115446,25250],{"class":260},[254,115448,39074],{"class":313},[254,115450,13705],{"class":260},[254,115452,39074],{"class":313},[254,115454,114684],{"class":264},[254,115456,114687],{"class":313},[254,115458,25250],{"class":260},[254,115460,39074],{"class":313},[254,115462,13705],{"class":260},[254,115464,39074],{"class":313},[254,115466,30927],{"class":264},[14,115468,115469,115471],{},[251,115470,70197],{}," 做四件事：",[21,115473,115474,115477,115480,115483],{},[24,115475,115476],{},"设置随机种子。",[24,115478,115479],{},"重置 MuJoCo data。",[24,115481,115482],{},"随机初始化关节角。",[24,115484,115485],{},"返回初始观测和 info。",[14,115487,115488],{},"step：",[245,115490,115492],{"className":30519,"code":115491,"language":30521,"meta":174,"style":174},"def step(self, action):\n",[251,115493,115494],{"__ignoreMap":174},[254,115495,115496,115498,115500],{"class":256,"line":257},[254,115497,32088],{"class":260},[254,115499,114828],{"class":2103},[254,115501,114831],{"class":264},[14,115503,115504,115506],{},[251,115505,107275],{}," 做六件事：",[21,115508,115509,115512,115518,115521,115524,115527],{},[24,115510,115511],{},"检查并裁剪 action。",[24,115513,115514,115515,28526],{},"写入 ",[251,115516,115517],{},"self.data.ctrl",[24,115519,115520],{},"连续推进若干个 MuJoCo 物理步。",[24,115522,115523],{},"计算新观测。",[24,115525,115526],{},"计算奖励和结束条件。",[24,115528,115529],{},"返回 Gymnasium 标准五元组。",[225,115531,101849],{"id":101849},[245,115533,115535],{"className":30519,"code":115534,"language":30521,"meta":174,"style":174},"import gymnasium as gym\n",[251,115536,115537],{"__ignoreMap":174},[254,115538,115539,115541,115543,115545],{"class":256,"line":257},[254,115540,30533],{"class":260},[254,115542,114036],{"class":264},[254,115544,31524],{"class":260},[254,115546,114041],{"class":264},[14,115548,115549,115550,115552,115553,115556],{},"导入 Gymnasium，并起别名 ",[251,115551,113681],{},"。后面写 ",[251,115554,115555],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[245,115558,115560],{"className":30519,"code":115559,"language":30521,"meta":174,"style":174},"from gymnasium import spaces\n",[251,115561,115562],{"__ignoreMap":174},[254,115563,115564,115566,115568,115570],{"class":256,"line":257},[254,115565,30878],{"class":260},[254,115567,114036],{"class":264},[254,115569,30533],{"class":260},[254,115571,114068],{"class":264},[14,115573,115574,115575,115578],{},"导入空间定义工具。",[251,115576,115577],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[245,115580,115581],{"className":30519,"code":115320,"language":30521,"meta":174,"style":174},[251,115582,115583],{"__ignoreMap":174},[254,115584,115585,115587,115589,115591,115593,115595,115597],{"class":256,"line":257},[254,115586,14835],{"class":260},[254,115588,114198],{"class":2103},[254,115590,265],{"class":264},[254,115592,113681],{"class":2103},[254,115594,822],{"class":264},[254,115596,114207],{"class":2103},[254,115598,30927],{"class":264},[14,115600,115601,115602,115605,115606,115608,115609,101159,115611,115613],{},"定义一个类，名字叫 ",[251,115603,115604],{},"ReacherEnv","。括号里的 ",[251,115607,115555],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[251,115610,70197],{},[251,115612,107275],{}," 这两个核心方法。",[245,115615,115617],{"className":30519,"code":115616,"language":30521,"meta":174,"style":174},"metadata = {\"render_modes\": []}\n",[251,115618,115619],{"__ignoreMap":174},[254,115620,115621,115624,115626,115628,115630],{"class":256,"line":257},[254,115622,115623],{"class":264},"metadata ",[254,115625,310],{"class":260},[254,115627,4588],{"class":264},[254,115629,114221],{"class":369},[254,115631,114224],{"class":264},[14,115633,115634],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[245,115636,115638],{"className":30519,"code":115637,"language":30521,"meta":174,"style":174},"def __init__(self) -> None:\n",[251,115639,115640],{"__ignoreMap":174},[254,115641,115642,115644,115646,115648,115650],{"class":256,"line":257},[254,115643,32088],{"class":260},[254,115645,30945],{"class":313},[254,115647,114237],{"class":264},[254,115649,95827],{"class":313},[254,115651,3879],{"class":264},[14,115653,115654,115656,115657,28526],{},[251,115655,30970],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[251,115658,115659],{},"env = ReacherEnv()",[245,115661,115663],{"className":30519,"code":115662,"language":30521,"meta":174,"style":174},"super().__init__()\n",[251,115664,115665],{"__ignoreMap":174},[254,115666,115667,115670,115672,115674],{"class":256,"line":257},[254,115668,115669],{"class":313},"super",[254,115671,17402],{"class":264},[254,115673,30970],{"class":313},[254,115675,2116],{"class":264},[14,115677,115678,115679,115681],{},"调用父类 ",[251,115680,115555],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[245,115683,115684],{"className":30519,"code":115347,"language":30521,"meta":174,"style":174},[251,115685,115686,115700],{"__ignoreMap":174},[254,115687,115688,115690,115692,115694,115696,115698],{"class":256,"line":257},[254,115689,30964],{"class":313},[254,115691,114258],{"class":264},[254,115693,310],{"class":260},[254,115695,101553],{"class":264},[254,115697,101455],{"class":313},[254,115699,271],{"class":264},[254,115701,115702,115704,115706,115708,115710,115712],{"class":256,"line":175},[254,115703,30964],{"class":313},[254,115705,114273],{"class":264},[254,115707,310],{"class":260},[254,115709,114278],{"class":264},[254,115711,30964],{"class":313},[254,115713,114283],{"class":264},[14,115715,115716,115717,115719,115720,101159,115723,115726],{},"把 MuJoCo 模型和状态保存到 ",[251,115718,30964],{}," 上。",[251,115721,115722],{},"self.model",[251,115724,115725],{},"self.data"," 表示这个环境对象自己的模型和状态。",[245,115728,115729],{"className":30519,"code":115389,"language":30521,"meta":174,"style":174},[251,115730,115731,115745],{"__ignoreMap":174},[254,115732,115733,115735,115737,115739,115741,115743],{"class":256,"line":257},[254,115734,30964],{"class":313},[254,115736,114294],{"class":264},[254,115738,310],{"class":260},[254,115740,114299],{"class":264},[254,115742,89695],{"class":313},[254,115744,271],{"class":264},[254,115746,115747,115749,115751,115753,115755,115757],{"class":256,"line":175},[254,115748,30964],{"class":313},[254,115750,114315],{"class":264},[254,115752,310],{"class":260},[254,115754,114299],{"class":264},[254,115756,89695],{"class":313},[254,115758,271],{"class":264},[14,115760,115761,115762,101159,115765,115768],{},"提前查好 tip 和 target 的 site ID。这样 ",[251,115763,115764],{},"_get_obs",[251,115766,115767],{},"_get_reward"," 里就不用每次按名字查找。",[245,115770,115772],{"className":30519,"code":115771,"language":30521,"meta":174,"style":174},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[251,115773,115774,115784,115794],{"__ignoreMap":174},[254,115775,115776,115778,115780,115782],{"class":256,"line":257},[254,115777,30964],{"class":313},[254,115779,114008],{"class":264},[254,115781,310],{"class":260},[254,115783,54568],{"class":313},[254,115785,115786,115788,115790,115792],{"class":256,"line":175},[254,115787,30964],{"class":313},[254,115789,114387],{"class":264},[254,115791,310],{"class":260},[254,115793,114392],{"class":313},[254,115795,115796,115798,115800,115802],{"class":256,"line":1319},[254,115797,30964],{"class":313},[254,115799,113847],{"class":264},[254,115801,310],{"class":260},[254,115803,47474],{"class":313},[14,115805,115806,115809,115810,115813,115814,115817],{},[251,115807,115808],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[251,115811,115812],{},"max_steps"," 是一个 episode 最多运行多少步。",[251,115815,115816],{},"steps"," 记录当前 episode 已经走了多少步。",[245,115819,115820],{"className":30519,"code":113886,"language":30521,"meta":174,"style":174},[251,115821,115822],{"__ignoreMap":174},[254,115823,115824,115826,115828,115830,115832,115834,115836,115838,115840,115842,115844,115846,115848,115850,115852,115854,115856,115858,115860,115862],{"class":256,"line":257},[254,115825,30964],{"class":313},[254,115827,113895],{"class":264},[254,115829,310],{"class":260},[254,115831,113900],{"class":264},[254,115833,113903],{"class":5357},[254,115835,113906],{"class":260},[254,115837,102544],{"class":313},[254,115839,12576],{"class":264},[254,115841,113913],{"class":5357},[254,115843,310],{"class":260},[254,115845,102544],{"class":313},[254,115847,12576],{"class":264},[254,115849,96104],{"class":5357},[254,115851,310],{"class":260},[254,115853,265],{"class":264},[254,115855,342],{"class":313},[254,115857,113930],{"class":264},[254,115859,93641],{"class":5357},[254,115861,310],{"class":260},[254,115863,113937],{"class":264},[14,115865,115866,115867,115870,115871,101159,115874,115877],{},"定义动作空间。",[251,115868,115869],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[251,115872,115873],{},"low=-1.0",[251,115875,115876],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[245,115879,115880],{"className":30519,"code":113947,"language":30521,"meta":174,"style":174},[251,115881,115882],{"__ignoreMap":174},[254,115883,115884,115886,115888,115890,115892,115894,115896,115898,115900,115902,115904,115906,115908,115910,115912,115914,115916,115918],{"class":256,"line":257},[254,115885,30964],{"class":313},[254,115887,113956],{"class":264},[254,115889,310],{"class":260},[254,115891,113900],{"class":264},[254,115893,113903],{"class":5357},[254,115895,113906],{"class":260},[254,115897,113967],{"class":264},[254,115899,113913],{"class":5357},[254,115901,310],{"class":260},[254,115903,113967],{"class":264},[254,115905,96104],{"class":5357},[254,115907,310],{"class":260},[254,115909,265],{"class":264},[254,115911,710],{"class":313},[254,115913,113930],{"class":264},[254,115915,93641],{"class":5357},[254,115917,310],{"class":260},[254,115919,113937],{"class":264},[14,115921,115922,115923,115926,115927,115930],{},"定义观测空间。",[251,115924,115925],{},"shape=(10,)"," 表示观测是 10 个数。",[251,115928,115929],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[245,115932,115934],{"className":30519,"code":115933,"language":30521,"meta":174,"style":174},"def _get_obs(self) -> np.ndarray:\n",[251,115935,115936],{"__ignoreMap":174},[254,115937,115938,115940,115942],{"class":256,"line":257},[254,115939,32088],{"class":260},[254,115941,114497],{"class":2103},[254,115943,114500],{"class":264},[14,115945,115946,115947,115949],{},"定义内部函数，用来生成观测。函数名前面的 ",[251,115948,1256],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[245,115951,115953],{"className":30519,"code":115952,"language":30521,"meta":174,"style":174},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[251,115954,115955,115969],{"__ignoreMap":174},[254,115956,115957,115959,115961,115963,115965,115967],{"class":256,"line":257},[254,115958,111709],{"class":264},[254,115960,310],{"class":260},[254,115962,39014],{"class":313},[254,115964,114511],{"class":264},[254,115966,30964],{"class":313},[254,115968,114516],{"class":264},[254,115970,115971,115973,115975,115977,115979,115981],{"class":256,"line":175},[254,115972,111719],{"class":264},[254,115974,310],{"class":260},[254,115976,39014],{"class":313},[254,115978,114511],{"class":264},[254,115980,30964],{"class":313},[254,115982,114531],{"class":264},[14,115984,115985],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[245,115987,115989],{"className":30519,"code":115988,"language":30521,"meta":174,"style":174},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[251,115990,115991,116007],{"__ignoreMap":174},[254,115992,115993,115995,115997,115999,116001,116003,116005],{"class":256,"line":257},[254,115994,110995],{"class":264},[254,115996,310],{"class":260},[254,115998,114540],{"class":264},[254,116000,30964],{"class":313},[254,116002,114545],{"class":264},[254,116004,30964],{"class":313},[254,116006,114550],{"class":264},[254,116008,116009,116011],{"class":256,"line":175},[254,116010,17187],{"class":260},[254,116012,114557],{"class":264},[14,116014,116015,116016,116019,116020,116022],{},"拼接观测，并转换成 ",[251,116017,116018],{},"float32","。很多强化学习库默认使用 ",[251,116021,116018],{},"，所以这里主动转换。",[245,116024,116025],{"className":30519,"code":115428,"language":30521,"meta":174,"style":174},[251,116026,116027],{"__ignoreMap":174},[254,116028,116029,116031,116033,116035,116037,116039,116041,116043,116045,116047,116049,116051,116053,116055,116057,116059,116061],{"class":256,"line":257},[254,116030,32088],{"class":260},[254,116032,114663],{"class":2103},[254,116034,114666],{"class":264},[254,116036,719],{"class":260},[254,116038,114671],{"class":264},[254,116040,268],{"class":313},[254,116042,25250],{"class":260},[254,116044,39074],{"class":313},[254,116046,13705],{"class":260},[254,116048,39074],{"class":313},[254,116050,114684],{"class":264},[254,116052,114687],{"class":313},[254,116054,25250],{"class":260},[254,116056,39074],{"class":313},[254,116058,13705],{"class":260},[254,116060,39074],{"class":313},[254,116062,30927],{"class":264},[14,116064,116065,116066,116068,116069,116072],{},"定义 reset。",[251,116067,114707],{}," 用来控制随机数，保证实验可以复现。",[251,116070,116071],{},"options"," 用来接收额外配置，本章暂时不用。",[245,116074,116076],{"className":30519,"code":116075,"language":30521,"meta":174,"style":174},"super().reset(seed=seed)\n",[251,116077,116078],{"__ignoreMap":174},[254,116079,116080,116082,116084,116086,116088],{"class":256,"line":257},[254,116081,115669],{"class":313},[254,116083,114704],{"class":264},[254,116085,114707],{"class":5357},[254,116087,310],{"class":260},[254,116089,114712],{"class":264},[14,116091,116092,116093,116096],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[251,116094,116095],{},"self.np_random"," 生成可复现的随机数。",[245,116098,116100],{"className":30519,"code":116099,"language":30521,"meta":174,"style":174},"mujoco.mj_resetData(self.model, self.data)\n",[251,116101,116102],{"__ignoreMap":174},[254,116103,116104,116107,116109,116111,116113],{"class":256,"line":257},[254,116105,116106],{"class":264},"mujoco.mj_resetData(",[254,116108,30964],{"class":313},[254,116110,114722],{"class":264},[254,116112,30964],{"class":313},[254,116114,114727],{"class":264},[14,116116,116117],{},"把 MuJoCo 状态重置到默认状态。",[245,116119,116121],{"className":30519,"code":116120,"language":30521,"meta":174,"style":174},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[251,116122,116123],{"__ignoreMap":174},[254,116124,116125,116127,116129,116131,116133,116135,116137,116139,116141,116143,116145,116147,116149,116151,116153,116155,116157],{"class":256,"line":257},[254,116126,30964],{"class":313},[254,116128,114738],{"class":264},[254,116130,310],{"class":260},[254,116132,39014],{"class":313},[254,116134,114745],{"class":264},[254,116136,113903],{"class":5357},[254,116138,113906],{"class":260},[254,116140,86351],{"class":313},[254,116142,12576],{"class":264},[254,116144,113913],{"class":5357},[254,116146,310],{"class":260},[254,116148,86351],{"class":313},[254,116150,12576],{"class":264},[254,116152,31637],{"class":5357},[254,116154,310],{"class":260},[254,116156,30964],{"class":313},[254,116158,114770],{"class":264},[14,116160,115482,116161,116164,116165,116168,116169,116171],{},[251,116162,116163],{},"[:]"," 表示修改整个数组。",[251,116166,116167],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[251,116170,102291],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[245,116173,116175],{"className":30519,"code":116174,"language":30521,"meta":174,"style":174},"self.data.qvel[:] = 0.0\n",[251,116176,116177],{"__ignoreMap":174},[254,116178,116179,116181,116183,116185],{"class":256,"line":257},[254,116180,30964],{"class":313},[254,116182,114777],{"class":264},[254,116184,310],{"class":260},[254,116186,104902],{"class":313},[14,116188,116189],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[245,116191,116193],{"className":30519,"code":116192,"language":30521,"meta":174,"style":174},"self.steps = 0\nreturn self._get_obs(), {}\n",[251,116194,116195,116205],{"__ignoreMap":174},[254,116196,116197,116199,116201,116203],{"class":256,"line":257},[254,116198,30964],{"class":313},[254,116200,113847],{"class":264},[254,116202,310],{"class":260},[254,116204,47474],{"class":313},[254,116206,116207,116209,116211],{"class":256,"line":175},[254,116208,17187],{"class":260},[254,116210,39014],{"class":313},[254,116212,114817],{"class":264},[14,116214,116215],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[245,116217,116218],{"className":30519,"code":115491,"language":30521,"meta":174,"style":174},[251,116219,116220],{"__ignoreMap":174},[254,116221,116222,116224,116226],{"class":256,"line":257},[254,116223,32088],{"class":260},[254,116225,114828],{"class":2103},[254,116227,114831],{"class":264},[14,116229,116230],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[245,116232,116234],{"className":30519,"code":116233,"language":30521,"meta":174,"style":174},"action = np.asarray(action, dtype=np.float32)\n",[251,116235,116236],{"__ignoreMap":174},[254,116237,116238,116240,116242,116244,116246,116248],{"class":256,"line":257},[254,116239,107583],{"class":264},[254,116241,310],{"class":260},[254,116243,114840],{"class":264},[254,116245,93641],{"class":5357},[254,116247,310],{"class":260},[254,116249,113937],{"class":264},[14,116251,116252,116253,28526],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[251,116254,116018],{},[245,116256,116258],{"className":30519,"code":116257,"language":30521,"meta":174,"style":174},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[251,116259,116260],{"__ignoreMap":174},[254,116261,116262,116264,116266,116268,116270,116272,116274],{"class":256,"line":257},[254,116263,107583],{"class":264},[254,116265,310],{"class":260},[254,116267,107588],{"class":264},[254,116269,30964],{"class":313},[254,116271,114859],{"class":264},[254,116273,30964],{"class":313},[254,116275,114864],{"class":264},[14,116277,116278],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[245,116280,116282],{"className":30519,"code":116281,"language":30521,"meta":174,"style":174},"self.data.ctrl[:] = action\n",[251,116283,116284],{"__ignoreMap":174},[254,116285,116286,116288,116290,116292],{"class":256,"line":257},[254,116287,30964],{"class":313},[254,116289,114875],{"class":264},[254,116291,310],{"class":260},[254,116293,107611],{"class":264},[14,116295,116296],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[245,116298,116300],{"className":30519,"code":116299,"language":30521,"meta":174,"style":174},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[251,116301,116302,116318],{"__ignoreMap":174},[254,116303,116304,116306,116308,116310,116312,116314,116316],{"class":256,"line":257},[254,116305,3165],{"class":260},[254,116307,101642],{"class":264},[254,116309,26184],{"class":260},[254,116311,32584],{"class":313},[254,116313,265],{"class":264},[254,116315,30964],{"class":313},[254,116317,114896],{"class":264},[254,116319,116320,116323,116325,116327,116329],{"class":256,"line":175},[254,116321,116322],{"class":264},"    mujoco.mj_step(",[254,116324,30964],{"class":313},[254,116326,114722],{"class":264},[254,116328,30964],{"class":313},[254,116330,114727],{"class":264},[14,116332,116333,116334,116337,116338,116340,116341,28526],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[251,116335,116336],{},"frame_skip=5","，所以外部调用一次 ",[251,116339,114018],{},"，内部实际执行 5 次 ",[251,116342,101356],{},[245,116344,116346],{"className":30519,"code":116345,"language":30521,"meta":174,"style":174},"self.steps += 1\n",[251,116347,116348],{"__ignoreMap":174},[254,116349,116350,116352,116354,116356],{"class":256,"line":257},[254,116351,30964],{"class":313},[254,116353,113847],{"class":264},[254,116355,9618],{"class":260},[254,116357,55840],{"class":313},[14,116359,116360],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[245,116362,116364],{"className":30519,"code":116363,"language":30521,"meta":174,"style":174},"obs = self._get_obs()\nreward = self._get_reward()\n",[251,116365,116366,116376],{"__ignoreMap":174},[254,116367,116368,116370,116372,116374],{"class":256,"line":257},[254,116369,110995],{"class":264},[254,116371,310],{"class":260},[254,116373,39014],{"class":313},[254,116375,114938],{"class":264},[254,116377,116378,116380,116382,116384],{"class":256,"line":175},[254,116379,111146],{"class":264},[254,116381,310],{"class":260},[254,116383,39014],{"class":313},[254,116385,114949],{"class":264},[14,116387,116388],{},"计算新的观测和奖励。",[245,116390,116392],{"className":30519,"code":116391,"language":30521,"meta":174,"style":174},"dist = float(np.linalg.norm(tip - target))\n",[251,116393,116394],{"__ignoreMap":174},[254,116395,116396,116398,116400,116402,116404,116406],{"class":256,"line":257},[254,116397,111737],{"class":264},[254,116399,310],{"class":260},[254,116401,109938],{"class":313},[254,116403,114992],{"class":264},[254,116405,796],{"class":260},[254,116407,114997],{"class":264},[14,116409,116410],{},"计算末端到目标的距离，并转换成 Python float。",[245,116412,116413],{"className":30519,"code":113818,"language":30521,"meta":174,"style":174},[251,116414,116415,116427],{"__ignoreMap":174},[254,116416,116417,116419,116421,116423,116425],{"class":256,"line":257},[254,116418,113825],{"class":264},[254,116420,310],{"class":260},[254,116422,113830],{"class":264},[254,116424,1174],{"class":260},[254,116426,113835],{"class":313},[254,116428,116429,116431,116433,116435,116437,116439,116441],{"class":256,"line":175},[254,116430,113840],{"class":264},[254,116432,310],{"class":260},[254,116434,39014],{"class":313},[254,116436,113847],{"class":264},[254,116438,1850],{"class":260},[254,116440,39014],{"class":313},[254,116442,113854],{"class":264},[14,116444,116445],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[245,116447,116449],{"className":30519,"code":116448,"language":30521,"meta":174,"style":174},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[251,116450,116451,116464],{"__ignoreMap":174},[254,116452,116453,116456,116458,116460,116462],{"class":256,"line":257},[254,116454,116455],{"class":264},"info ",[254,116457,310],{"class":260},[254,116459,4588],{"class":264},[254,116461,115043],{"class":369},[254,116463,115046],{"class":264},[254,116465,116466,116468],{"class":256,"line":175},[254,116467,17187],{"class":260},[254,116469,115053],{"class":264},[14,116471,116472,116475],{},[251,116473,116474],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[245,116477,116479],{"className":30519,"code":116478,"language":30521,"meta":174,"style":174},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[251,116480,116481,116490],{"__ignoreMap":174},[254,116482,116483,116486,116488],{"class":256,"line":257},[254,116484,116485],{"class":264},"env ",[254,116487,310],{"class":260},[254,116489,115083],{"class":264},[254,116491,116492,116494,116496,116498,116500,116502,116504],{"class":256,"line":175},[254,116493,113541],{"class":264},[254,116495,310],{"class":260},[254,116497,115093],{"class":264},[254,116499,114707],{"class":5357},[254,116501,310],{"class":260},[254,116503,456],{"class":313},[254,116505,271],{"class":264},[14,116507,116508,116509,116512],{},"创建环境并重置。",[251,116510,116511],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[245,116514,116516],{"className":30519,"code":116515,"language":30521,"meta":174,"style":174},"action = env.action_space.sample()\n",[251,116517,116518],{"__ignoreMap":174},[254,116519,116520,116522,116524],{"class":256,"line":257},[254,116521,107583],{"class":264},[254,116523,310],{"class":260},[254,116525,115162],{"class":264},[14,116527,116528],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[34,116530,102457],{"id":102456},[14,116532,105625],{},[245,116534,116537],{"className":116535,"code":116536,"language":5328,"meta":174},[5326],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[251,116538,116536],{"__ignoreMap":174},[14,116540,116541],{},"这个环境已经具备强化学习环境的基本结构。",[14,116543,116544],{},"主函数里使用随机动作：",[245,116546,116547],{"className":30519,"code":116515,"language":30521,"meta":174,"style":174},[251,116548,116549],{"__ignoreMap":174},[254,116550,116551,116553,116555],{"class":256,"line":257},[254,116552,107583],{"class":264},[254,116554,310],{"class":260},[254,116556,115162],{"class":264},[14,116558,116559],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[34,116561,102489],{"id":102488},[21,116563,116564,116567,116573,116582,116591,116600,116606],{},[24,116565,116566],{},"运行程序。",[24,116568,116569,116570,28526],{},"确认 ",[251,116571,116572],{},"obs.shape == (10,)",[24,116574,111322,116575,116578,116579,28526],{},[251,116576,116577],{},"env.action_space","，应类似 ",[251,116580,116581],{},"Box(-1.0, 1.0, (2,), float32)",[24,116583,105726,116584,116587,116588,28526],{},[251,116585,116586],{},"self.max_steps = 10","，确认环境会更快 ",[251,116589,116590],{},"truncated=True",[24,116592,102552,116593,102555,116596,116599],{},[251,116594,116595],{},"terminated = dist \u003C 0.05",[251,116597,116598],{},"dist \u003C 0.2","，观察是否更容易结束。",[24,116601,102552,116602,116605],{},[251,116603,116604],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[24,116607,116608,116609,116611,116612,116615],{},"在 ",[251,116610,116474],{}," 里加入 ",[251,116613,116614],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[34,116617,102594],{"id":102593},[225,116619,116621],{"id":116620},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[14,116623,116624,116625,116627],{},"Gymnasium 的 ",[251,116626,107275],{}," 返回 5 个值:",[245,116629,116631],{"className":30519,"code":116630,"language":30521,"meta":174,"style":174},"obs, reward, terminated, truncated, info\n",[251,116632,116633],{"__ignoreMap":174},[254,116634,116635],{"class":256,"line":257},[254,116636,116630],{"class":264},[14,116638,116639],{},"不是旧 Gym 的 4 个值。",[225,116641,116643,116646],{"id":116642},"datactrl-action-维度错误",[251,116644,116645],{},"data.ctrl[:] = action"," 维度错误",[14,116648,102664],{},[245,116650,116652],{"className":30519,"code":116651,"language":30521,"meta":174,"style":174},"print(self.model.nu)\nprint(action.shape)\n",[251,116653,116654,116665],{"__ignoreMap":174},[254,116655,116656,116658,116660,116662],{"class":256,"line":257},[254,116657,30556],{"class":313},[254,116659,265],{"class":264},[254,116661,30964],{"class":313},[254,116663,116664],{"class":264},".model.nu)\n",[254,116666,116667,116669],{"class":256,"line":175},[254,116668,30556],{"class":313},[254,116670,116671],{"class":264},"(action.shape)\n",[14,116673,116674],{},"两者必须匹配。",[225,116676,116678],{"id":116677},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[14,116680,102603],{},[245,116682,116684],{"className":30519,"code":116683,"language":30521,"meta":174,"style":174},"mujoco.mj_forward(self.model, self.data)\n",[251,116685,116686],{"__ignoreMap":174},[254,116687,116688,116691,116693,116695,116697],{"class":256,"line":257},[254,116689,116690],{"class":264},"mujoco.mj_forward(",[254,116692,30964],{"class":313},[254,116694,114722],{"class":264},[254,116696,30964],{"class":313},[254,116698,114727],{"class":264},[225,116700,116702,116704],{"id":116701},"observation_space-维度和-obs-不一致",[251,116703,113741],{}," 维度和 obs 不一致",[14,116706,102716],{},[245,116708,116710],{"className":30519,"code":116709,"language":30521,"meta":174,"style":174},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[251,116711,116712,116722,116729],{"__ignoreMap":174},[254,116713,116714,116716,116718,116720],{"class":256,"line":257},[254,116715,110995],{"class":264},[254,116717,310],{"class":260},[254,116719,39014],{"class":313},[254,116721,114938],{"class":264},[254,116723,116724,116726],{"class":256,"line":175},[254,116725,30556],{"class":313},[254,116727,116728],{"class":264},"(obs.shape)\n",[254,116730,116731,116733,116735,116737],{"class":256,"line":1319},[254,116732,30556],{"class":313},[254,116734,265],{"class":264},[254,116736,30964],{"class":313},[254,116738,116739],{"class":264},".observation_space.shape)\n",[14,116741,116742],{},"两者必须一致。本章观测是：",[245,116744,116747],{"className":116745,"code":116746,"language":5328,"meta":174},[5326],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[251,116748,116746],{"__ignoreMap":174},[225,116750,116752],{"id":116751},"action-超过范围","action 超过范围",[14,116754,116755],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[245,116757,116758],{"className":30519,"code":116257,"language":30521,"meta":174,"style":174},[251,116759,116760],{"__ignoreMap":174},[254,116761,116762,116764,116766,116768,116770,116772,116774],{"class":256,"line":257},[254,116763,107583],{"class":264},[254,116765,310],{"class":260},[254,116767,107588],{"class":264},[254,116769,30964],{"class":313},[254,116771,114859],{"class":264},[254,116773,30964],{"class":313},[254,116775,114864],{"class":264},[14,116777,116778,116779,28526],{},"这能避免无效动作直接写入 ",[251,116780,101217],{},[225,116782,116784],{"id":116783},"忘记返回-info","忘记返回 info",[14,116786,116624,116787,101159,116789,116791],{},[251,116788,70197],{},[251,116790,107275],{}," 都会返回 info：",[245,116793,116794],{"className":30519,"code":113534,"language":30521,"meta":174,"style":174},[251,116795,116796,116804],{"__ignoreMap":174},[254,116797,116798,116800,116802],{"class":256,"line":257},[254,116799,113541],{"class":264},[254,116801,310],{"class":260},[254,116803,113546],{"class":264},[254,116805,116806,116808,116810],{"class":256,"line":175},[254,116807,113551],{"class":264},[254,116809,310],{"class":260},[254,116811,113556],{"class":264},[14,116813,116814,116815,28526],{},"即使暂时没有额外信息，也返回 ",[251,116816,32600],{},[34,116818,116820],{"id":116819},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[14,116822,116823],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[21,116825,116826,116829,116832,116835,116838,116841],{},[24,116827,116828],{},"更稳定的 reward。",[24,116830,116831],{},"合理的 episode 长度。",[24,116833,116834],{},"可重复的随机目标采样。",[24,116836,116837],{},"render 接口。",[24,116839,116840],{},"环境注册代码。",[24,116842,116843],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[14,116845,116846],{},"如果只是自己写训练循环，最小形式是：",[245,116848,116850],{"className":30519,"code":116849,"language":30521,"meta":174,"style":174},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n\nfor _ in range(1000):\n    action = env.action_space.sample()\n    obs, reward, terminated, truncated, info = env.step(action)\n    if terminated or truncated:\n        obs, info = env.reset()\n",[251,116851,116852,116860,116876,116880,116896,116905,116914,116924],{"__ignoreMap":174},[254,116853,116854,116856,116858],{"class":256,"line":257},[254,116855,116485],{"class":264},[254,116857,310],{"class":260},[254,116859,115083],{"class":264},[254,116861,116862,116864,116866,116868,116870,116872,116874],{"class":256,"line":175},[254,116863,113541],{"class":264},[254,116865,310],{"class":260},[254,116867,115093],{"class":264},[254,116869,114707],{"class":5357},[254,116871,310],{"class":260},[254,116873,456],{"class":313},[254,116875,271],{"class":264},[254,116877,116878],{"class":256,"line":1319},[254,116879,2540],{"emptyLinePlaceholder":184},[254,116881,116882,116884,116886,116888,116890,116892,116894],{"class":256,"line":1334},[254,116883,3165],{"class":260},[254,116885,101642],{"class":264},[254,116887,26184],{"class":260},[254,116889,32584],{"class":313},[254,116891,265],{"class":264},[254,116893,6551],{"class":313},[254,116895,30927],{"class":264},[254,116897,116898,116901,116903],{"class":256,"line":1340},[254,116899,116900],{"class":264},"    action ",[254,116902,310],{"class":260},[254,116904,115162],{"class":264},[254,116906,116907,116910,116912],{"class":256,"line":1354},[254,116908,116909],{"class":264},"    obs, reward, terminated, truncated, info ",[254,116911,310],{"class":260},[254,116913,113556],{"class":264},[254,116915,116916,116918,116920,116922],{"class":256,"line":1360},[254,116917,3241],{"class":260},[254,116919,115228],{"class":264},[254,116921,115231],{"class":260},[254,116923,115234],{"class":264},[254,116925,116926,116929,116931],{"class":256,"line":1451},[254,116927,116928],{"class":264},"        obs, info ",[254,116930,310],{"class":260},[254,116932,113546],{"class":264},[34,116934,116936],{"id":116935},"_9本章小结","9.本章小结",[14,116938,116939],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[245,116941,116944],{"className":116942,"code":116943,"language":5328,"meta":174},[5326],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[251,116945,116943],{"__ignoreMap":174},[14,116947,116948],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[5267,116950,116951],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":174,"searchDepth":175,"depth":175,"links":116953},[116954,116955,116956,116963,116967,116968,116969,116979,116980],{"id":100787,"depth":175,"text":100788},{"id":100910,"depth":175,"text":100911},{"id":101185,"depth":175,"text":101186,"children":116957},[116958,116960,116962],{"id":113765,"depth":1319,"text":116959},"terminated 和 truncated 的区别",{"id":113868,"depth":1319,"text":116961},"observation_space 和 action_space",{"id":113995,"depth":1319,"text":113996},{"id":101393,"depth":175,"text":101394,"children":116964},[116965,116966],{"id":101713,"depth":1319,"text":101713},{"id":101849,"depth":1319,"text":101849},{"id":102456,"depth":175,"text":102457},{"id":102488,"depth":175,"text":102489},{"id":102593,"depth":175,"text":102594,"children":116970},[116971,116972,116974,116975,116977,116978],{"id":116620,"depth":1319,"text":116621},{"id":116642,"depth":1319,"text":116973},"data.ctrl[:] = action 维度错误",{"id":116677,"depth":1319,"text":116678},{"id":116701,"depth":1319,"text":116976},"observation_space 维度和 obs 不一致",{"id":116751,"depth":1319,"text":116752},{"id":116783,"depth":1319,"text":116784},{"id":116819,"depth":175,"text":116820},{"id":116935,"depth":175,"text":116936},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":113518,"description":174},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":116987,"title":116988,"body":116989,"description":117411,"extension":181,"meta":117412,"navigation":184,"path":117413,"seo":117414,"stem":117415,"__hash__":117416},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":116990,"toc":117401},[116991,116995,116998,117001,117021,117027,117033,117043,117046,117049,117069,117072,117076,117079,117085,117088,117102,117105,117108,117182,117185,117191,117194,117217,117219,117269,117272,117278,117281,117284,117287,117306,117309,117315,117318,117321,117324,117344,117347,117350,117353,117398],[10,116992,116994],{"id":116993},"mujoco-学习","MuJoCo 学习",[14,116996,116997],{},"初版",[14,116999,117000],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[21,117002,117003,117006,117009,117018],{},[24,117004,117005],{},"MuJoCo 模型文件在描述什么。",[24,117007,117008],{},"Python 代码怎样读取和推进仿真。",[24,117010,117011,477,117013,477,117015,117017],{},[251,117012,104171],{},[251,117014,104501],{},[251,117016,104504],{}," 这些数组为什么重要。",[24,117019,117020],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[14,117022,117023,117024,117026],{},"默认环境为 Fedora 44、Python >= 3.10、",[251,117025,101168],{}," 官方 Python bindings。",[14,117028,117029,117030,117032],{},"注意：本文禁止使用 ",[251,117031,101153],{},"。所有示例均使用：",[245,117034,117035],{"className":30519,"code":101719,"language":30521,"meta":174,"style":174},[251,117036,117037],{"__ignoreMap":174},[254,117038,117039,117041],{"class":256,"line":257},[254,117040,30533],{"class":260},[254,117042,101442],{"class":264},[34,117044,117045],{"id":117045},"适合谁阅读",[14,117047,117048],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[21,117050,117051,117054,117057,117060],{},[24,117052,117053],{},"没学过 MuJoCo，只会一点 Python。",[24,117055,117056],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[24,117058,117059],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[24,117061,117062,117063,117065,117066,117068],{},"以前接触过 ",[251,117064,101153],{},"，现在想迁移到官方 ",[251,117067,101162],{}," Python bindings。",[14,117070,117071],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[34,117073,117075],{"id":117074},"mujoco-到底是什么","MuJoCo 到底是什么",[14,117077,117078],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[245,117080,117083],{"className":117081,"code":117082,"language":5328,"meta":174},[5326],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[251,117084,117082],{"__ignoreMap":174},[14,117086,117087],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[21,117089,117090,117093,117096,117099],{},[24,117091,117092],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[24,117094,117095],{},"快速测试控制算法，不必一开始就上真实机器人。",[24,117097,117098],{},"生成强化学习环境。",[24,117100,117101],{},"采集状态、动作、图像、奖励等训练数据。",[34,117103,117104],{"id":117104},"学习前的心智模型",[14,117106,117107],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[402,117109,117110,117122],{},[405,117111,117112],{},[408,117113,117114,117117,117120],{},[411,117115,117116],{"align":23877},"部分",[411,117118,117119],{"align":23877},"负责什么",[411,117121,21328],{"align":23877},[449,117123,117124,117135,117147,117159,117171],{},[408,117125,117126,117129,117132],{},[454,117127,117128],{"align":23877},"MJCF XML",[454,117130,117131],{"align":23877},"定义世界和机器人结构",[454,117133,117134],{"align":23877},"地面、盒子、关节、电机、摄像头",[408,117136,117137,117141,117144],{},[454,117138,117139],{"align":23877},[251,117140,100850],{},[454,117142,117143],{"align":23877},"编译后的静态模型",[454,117145,117146],{"align":23877},"有几个关节、有几个电机、时间步长是多少",[408,117148,117149,117153,117156],{},[454,117150,117151],{"align":23877},[251,117152,100860],{},[454,117154,117155],{"align":23877},"运行中的动态状态",[454,117157,117158],{"align":23877},"当前时间、位置、速度、电机输入",[408,117160,117161,117165,117168],{},[454,117162,117163],{"align":23877},[251,117164,101356],{},[454,117166,117167],{"align":23877},"推进一步物理仿真",[454,117169,117170],{"align":23877},"根据重力、力、碰撞更新状态",[408,117172,117173,117176,117179],{},[454,117174,117175],{"align":23877},"Viewer \u002F Renderer",[454,117177,117178],{"align":23877},"把仿真显示出来",[454,117180,117181],{"align":23877},"打开窗口或保存图片",[14,117183,117184],{},"一句话总结：",[245,117186,117189],{"className":117187,"code":117188,"language":5328,"meta":174},[5326],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[251,117190,117188],{"__ignoreMap":174},[14,117192,117193],{},"参考来源：",[1271,117195,117196,117203,117210],{},[24,117197,117198,117199],{},"MuJoCo Python 官方文档：",[42,117200,117201],{"href":117201,"rel":117202},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[151],[24,117204,117205,117206],{},"MuJoCo XML Reference：",[42,117207,117208],{"href":117208,"rel":117209},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[151],[24,117211,117212,117213],{},"MuJoCo Overview：",[42,117214,117215],{"href":117215,"rel":117216},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[151],[34,117218,36],{"id":36},[21,117220,117221,117227,117233,117239,117245,117251,117257,117263],{},[24,117222,117223],{},[42,117224,117226],{"href":117225},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[24,117228,117229],{},[42,117230,117232],{"href":117231},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[24,117234,117235],{},[42,117236,117238],{"href":117237},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[24,117240,117241],{},[42,117242,117244],{"href":117243},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[24,117246,117247],{},[42,117248,117250],{"href":117249},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[24,117252,117253],{},[42,117254,117256],{"href":117255},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[24,117258,117259],{},[42,117260,117262],{"href":117261},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[24,117264,117265],{},[42,117266,117268],{"href":117267},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[34,117270,117271],{"id":117271},"推荐学习路线",[245,117273,117276],{"className":117274,"code":117275,"language":5328,"meta":174},[5326],"环境安装\n→ XML \u002F MJCF 建模\n→ MjModel \u002F MjData\n→ mj_step 控制循环\n→ joint \u002F actuator\n→ viewer \u002F renderer\n→ cartpole \u002F reacher\n→ Gymnasium 环境接口\n→ imitation learning \u002F VLA 数据采集\n",[251,117277,117275],{"__ignoreMap":174},[14,117279,117280],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[34,117282,117283],{"id":117283},"建议的目录结构",[14,117285,117286],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[245,117288,117290],{"className":23963,"code":117289,"language":23965,"meta":174,"style":174},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[251,117291,117292,117300],{"__ignoreMap":174},[254,117293,117294,117296,117298],{"class":256,"line":257},[254,117295,101407],{"class":2103},[254,117297,29357],{"class":313},[254,117299,101412],{"class":369},[254,117301,117302,117304],{"class":256,"line":175},[254,117303,101417],{"class":313},[254,117305,101412],{"class":369},[14,117307,117308],{},"每一章的代码都单独保存：",[245,117310,117313],{"className":117311,"code":117312,"language":5328,"meta":174},[5326],"mujoco_tutorial\u002F\n├── ch1_first_sim.py\n├── ch2_xml_basic.py\n├── ch3_python_state.py\n├── ch4_joint_motor.py\n├── ch5_viewer.py\n├── ch5_renderer.py\n├── ch6_cartpole.py\n├── ch7_reacher.py\n└── ch8_gym_env.py\n",[251,117314,117312],{"__ignoreMap":174},[14,117316,117317],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[34,117319,117320],{"id":117320},"学习方法",[14,117322,117323],{},"每章建议按这个顺序操作：",[21,117325,117326,117329,117332,117335,117338,117341],{},[24,117327,117328],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[24,117330,117331],{},"复制最小可运行代码，保存成指定文件。",[24,117333,117334],{},"运行代码，确认没有报错。",[24,117336,117337],{},"对照“运行结果说明”理解输出。",[24,117339,117340],{},"做“验证步骤”，主动改一两个参数。",[24,117342,117343],{},"遇到报错先看“常见错误与解决方案”。",[14,117345,117346],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[34,117348,117349],{"id":117349},"全局排错顺序",[14,117351,117352],{},"遇到问题时，按下面顺序查：",[21,117354,117355,117361,117367,117372,117375,117378,117385,117395],{},[24,117356,117357,117358],{},"Python 环境是否激活：",[251,117359,117360],{},"which python",[24,117362,117363,117364],{},"MuJoCo 是否能导入：",[251,117365,117366],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[24,117368,117369,117370],{},"是否误装了 ",[251,117371,101153],{},[24,117373,117374],{},"XML 标签是否闭合、属性是否拼写正确",[24,117376,117377],{},"actuator 引用的 joint 名字是否存在",[24,117379,117380,117382,117383],{},[251,117381,101217],{}," 的长度是否等于 ",[251,117384,102299],{},[24,117386,105726,117387,82680,117389,117391,117392],{},[251,117388,104171],{},[251,117390,104501],{}," 后是否调用了 ",[251,117393,117394],{},"mujoco.mj_forward",[24,117396,117397],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[5267,117399,117400],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":174,"searchDepth":175,"depth":175,"links":117402},[117403,117404,117405,117406,117407,117408,117409,117410],{"id":117045,"depth":175,"text":117045},{"id":117074,"depth":175,"text":117075},{"id":117104,"depth":175,"text":117104},{"id":36,"depth":175,"text":36},{"id":117271,"depth":175,"text":117271},{"id":117283,"depth":175,"text":117283},{"id":117320,"depth":175,"text":117320},{"id":117349,"depth":175,"text":117349},"仿真搭建。",{"category":183},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":116988,"description":117411},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117418,"title":117419,"body":117420,"description":23518,"extension":181,"meta":117875,"navigation":184,"path":117876,"seo":117877,"stem":117878,"__hash__":117879},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117421,"toc":117873},[117422,117425,117428,117434,117870],[10,117423,117419],{"id":117424},"_1-最常用的基本操作更新",[14,117426,117427],{},"装linux系统教程：",[14,117429,117430],{},[42,117431,117432],{"href":117432,"rel":117433},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[151],[245,117435,117439],{"className":117436,"code":117437,"language":117438,"meta":174,"style":174},"language-Bash shiki shiki-themes github-light github-dark","#更新相关的知识\n# 更新软件包列表（从服务器获取最新软件信息）\nsudo apt update\n# 升级所有可更新的软件包（不删除旧包）\nsudo apt upgrade\n#更新和升级软件包\nsudo apt update && sudo apt upgrade -y\n#列出可更新的软件包及版本信息\napt list --upgradable\n#彻底升级（处理依赖关系，可能删除旧包）\nsudo apt full-upgrade\n#设置指定版本\nsudo apt install \u003Cpackage_name>=\u003Cversion_number>\n#只安装软件包不升级\nsudo apt install \u003Cpackage_name> --no-upgrade\n#只升级，不存在就不安装\nsudo apt install \u003Cpackage_name> --only-upgrade\n\n#安装指定的软件命令\nsudo apt install \u003Cpackage_name>\n\n#安装多个软件包\nsudo apt install \u003Cpackage_1> \u003Cpackage_2> \u003Cpackage_3>\n\n#更新指定的软件命令\nsudo apt update \u003Cpackage_name>\n\n#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\napt show \u003Cpackage_name>\n\n#删除软件包命令\nsudo apt remove \u003Cpackage_name>\n\n# 清理旧版本和缓存（释放磁盘空间）\nsudo apt autoremove  # 删除不再需要的依赖和库文件\nsudo apt clean       # 清理下载的缓存包\n\n#移除软件包及配置文件\nsudo apt purge \u003Cpackage_name>\n\n#查找软件包命令\nsudo apt search \u003Ckeyword>\n\n#列出所有已安装的包\napt list --installed\n\n#列出所有已安装的包的版本信息\napt list --all-versions\n","Bash",[251,117440,117441,117446,117451,117460,117465,117474,117479,117499,117504,117515,117520,117529,117534,117562,117567,117586,117591,117610,117614,117619,117635,117639,117644,117674,117678,117683,117699,117703,117708,117723,117727,117732,117748,117752,117757,117769,117781,117785,117790,117807,117811,117816,117834,117838,117843,117852,117856,117861],{"__ignoreMap":174},[254,117442,117443],{"class":256,"line":257},[254,117444,117445],{"class":323},"#更新相关的知识\n",[254,117447,117448],{"class":256,"line":175},[254,117449,117450],{"class":323},"# 更新软件包列表（从服务器获取最新软件信息）\n",[254,117452,117453,117455,117458],{"class":256,"line":1319},[254,117454,24717],{"class":2103},[254,117456,117457],{"class":369}," apt",[254,117459,26383],{"class":369},[254,117461,117462],{"class":256,"line":1334},[254,117463,117464],{"class":323},"# 升级所有可更新的软件包（不删除旧包）\n",[254,117466,117467,117469,117471],{"class":256,"line":1340},[254,117468,24717],{"class":2103},[254,117470,117457],{"class":369},[254,117472,117473],{"class":369}," upgrade\n",[254,117475,117476],{"class":256,"line":1354},[254,117477,117478],{"class":323},"#更新和升级软件包\n",[254,117480,117481,117483,117485,117488,117490,117492,117494,117497],{"class":256,"line":1360},[254,117482,24717],{"class":2103},[254,117484,117457],{"class":369},[254,117486,117487],{"class":369}," update",[254,117489,26331],{"class":264},[254,117491,24717],{"class":2103},[254,117493,117457],{"class":369},[254,117495,117496],{"class":369}," upgrade",[254,117498,101122],{"class":313},[254,117500,117501],{"class":256,"line":1451},[254,117502,117503],{"class":323},"#列出可更新的软件包及版本信息\n",[254,117505,117506,117509,117512],{"class":256,"line":1457},[254,117507,117508],{"class":2103},"apt",[254,117510,117511],{"class":369}," list",[254,117513,117514],{"class":313}," --upgradable\n",[254,117516,117517],{"class":256,"line":1469},[254,117518,117519],{"class":323},"#彻底升级（处理依赖关系，可能删除旧包）\n",[254,117521,117522,117524,117526],{"class":256,"line":1752},[254,117523,24717],{"class":2103},[254,117525,117457],{"class":369},[254,117527,117528],{"class":369}," full-upgrade\n",[254,117530,117531],{"class":256,"line":1757},[254,117532,117533],{"class":323},"#设置指定版本\n",[254,117535,117536,117538,117540,117542,117544,117547,117549,117551,117553,117555,117558,117560],{"class":256,"line":1763},[254,117537,24717],{"class":2103},[254,117539,117457],{"class":369},[254,117541,23975],{"class":369},[254,117543,29043],{"class":260},[254,117545,117546],{"class":369},"package_nam",[254,117548,339],{"class":264},[254,117550,1224],{"class":260},[254,117552,310],{"class":369},[254,117554,1174],{"class":260},[254,117556,117557],{"class":369},"version_numbe",[254,117559,934],{"class":264},[254,117561,51448],{"class":260},[254,117563,117564],{"class":256,"line":1768},[254,117565,117566],{"class":323},"#只安装软件包不升级\n",[254,117568,117569,117571,117573,117575,117577,117579,117581,117583],{"class":256,"line":1782},[254,117570,24717],{"class":2103},[254,117572,117457],{"class":369},[254,117574,23975],{"class":369},[254,117576,29043],{"class":260},[254,117578,117546],{"class":369},[254,117580,339],{"class":264},[254,117582,1224],{"class":260},[254,117584,117585],{"class":313}," --no-upgrade\n",[254,117587,117588],{"class":256,"line":1787},[254,117589,117590],{"class":323},"#只升级，不存在就不安装\n",[254,117592,117593,117595,117597,117599,117601,117603,117605,117607],{"class":256,"line":1793},[254,117594,24717],{"class":2103},[254,117596,117457],{"class":369},[254,117598,23975],{"class":369},[254,117600,29043],{"class":260},[254,117602,117546],{"class":369},[254,117604,339],{"class":264},[254,117606,1224],{"class":260},[254,117608,117609],{"class":313}," --only-upgrade\n",[254,117611,117612],{"class":256,"line":1814},[254,117613,2540],{"emptyLinePlaceholder":184},[254,117615,117616],{"class":256,"line":1819},[254,117617,117618],{"class":323},"#安装指定的软件命令\n",[254,117620,117621,117623,117625,117627,117629,117631,117633],{"class":256,"line":1833},[254,117622,24717],{"class":2103},[254,117624,117457],{"class":369},[254,117626,23975],{"class":369},[254,117628,29043],{"class":260},[254,117630,117546],{"class":369},[254,117632,339],{"class":264},[254,117634,51448],{"class":260},[254,117636,117637],{"class":256,"line":1838},[254,117638,2540],{"emptyLinePlaceholder":184},[254,117640,117641],{"class":256,"line":1867},[254,117642,117643],{"class":323},"#安装多个软件包\n",[254,117645,117646,117648,117650,117652,117654,117657,117660,117662,117664,117667,117669,117671],{"class":256,"line":1872},[254,117647,24717],{"class":2103},[254,117649,117457],{"class":369},[254,117651,23975],{"class":369},[254,117653,29043],{"class":260},[254,117655,117656],{"class":369},"package_",[254,117658,117659],{"class":260},"1>",[254,117661,29043],{"class":260},[254,117663,117656],{"class":369},[254,117665,117666],{"class":260},"2>",[254,117668,29043],{"class":260},[254,117670,117656],{"class":369},[254,117672,117673],{"class":260},"3>\n",[254,117675,117676],{"class":256,"line":1889},[254,117677,2540],{"emptyLinePlaceholder":184},[254,117679,117680],{"class":256,"line":1894},[254,117681,117682],{"class":323},"#更新指定的软件命令\n",[254,117684,117685,117687,117689,117691,117693,117695,117697],{"class":256,"line":1899},[254,117686,24717],{"class":2103},[254,117688,117457],{"class":369},[254,117690,117487],{"class":369},[254,117692,29043],{"class":260},[254,117694,117546],{"class":369},[254,117696,339],{"class":264},[254,117698,51448],{"class":260},[254,117700,117701],{"class":256,"line":1904},[254,117702,2540],{"emptyLinePlaceholder":184},[254,117704,117705],{"class":256,"line":1918},[254,117706,117707],{"class":323},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[254,117709,117710,117712,117715,117717,117719,117721],{"class":256,"line":1923},[254,117711,117508],{"class":2103},[254,117713,117714],{"class":369}," show",[254,117716,29043],{"class":260},[254,117718,117546],{"class":369},[254,117720,339],{"class":264},[254,117722,51448],{"class":260},[254,117724,117725],{"class":256,"line":2717},[254,117726,2540],{"emptyLinePlaceholder":184},[254,117728,117729],{"class":256,"line":2731},[254,117730,117731],{"class":323},"#删除软件包命令\n",[254,117733,117734,117736,117738,117740,117742,117744,117746],{"class":256,"line":2739},[254,117735,24717],{"class":2103},[254,117737,117457],{"class":369},[254,117739,26220],{"class":369},[254,117741,29043],{"class":260},[254,117743,117546],{"class":369},[254,117745,339],{"class":264},[254,117747,51448],{"class":260},[254,117749,117750],{"class":256,"line":2744},[254,117751,2540],{"emptyLinePlaceholder":184},[254,117753,117754],{"class":256,"line":2750},[254,117755,117756],{"class":323},"# 清理旧版本和缓存（释放磁盘空间）\n",[254,117758,117759,117761,117763,117766],{"class":256,"line":2756},[254,117760,24717],{"class":2103},[254,117762,117457],{"class":369},[254,117764,117765],{"class":369}," autoremove",[254,117767,117768],{"class":323},"  # 删除不再需要的依赖和库文件\n",[254,117770,117771,117773,117775,117778],{"class":256,"line":2761},[254,117772,24717],{"class":2103},[254,117774,117457],{"class":369},[254,117776,117777],{"class":369}," clean",[254,117779,117780],{"class":323},"       # 清理下载的缓存包\n",[254,117782,117783],{"class":256,"line":8089},[254,117784,2540],{"emptyLinePlaceholder":184},[254,117786,117787],{"class":256,"line":8113},[254,117788,117789],{"class":323},"#移除软件包及配置文件\n",[254,117791,117792,117794,117796,117799,117801,117803,117805],{"class":256,"line":8118},[254,117793,24717],{"class":2103},[254,117795,117457],{"class":369},[254,117797,117798],{"class":369}," purge",[254,117800,29043],{"class":260},[254,117802,117546],{"class":369},[254,117804,339],{"class":264},[254,117806,51448],{"class":260},[254,117808,117809],{"class":256,"line":8124},[254,117810,2540],{"emptyLinePlaceholder":184},[254,117812,117813],{"class":256,"line":8151},[254,117814,117815],{"class":323},"#查找软件包命令\n",[254,117817,117818,117820,117822,117825,117827,117830,117832],{"class":256,"line":8156},[254,117819,24717],{"class":2103},[254,117821,117457],{"class":369},[254,117823,117824],{"class":369}," search",[254,117826,29043],{"class":260},[254,117828,117829],{"class":369},"keywor",[254,117831,578],{"class":264},[254,117833,51448],{"class":260},[254,117835,117836],{"class":256,"line":8162},[254,117837,2540],{"emptyLinePlaceholder":184},[254,117839,117840],{"class":256,"line":8174},[254,117841,117842],{"class":323},"#列出所有已安装的包\n",[254,117844,117845,117847,117849],{"class":256,"line":8186},[254,117846,117508],{"class":2103},[254,117848,117511],{"class":369},[254,117850,117851],{"class":313}," --installed\n",[254,117853,117854],{"class":256,"line":8198},[254,117855,2540],{"emptyLinePlaceholder":184},[254,117857,117858],{"class":256,"line":9857},[254,117859,117860],{"class":323},"#列出所有已安装的包的版本信息\n",[254,117862,117863,117865,117867],{"class":256,"line":9882},[254,117864,117508],{"class":2103},[254,117866,117511],{"class":369},[254,117868,117869],{"class":313}," --all-versions\n",[5267,117871,117872],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":174,"searchDepth":175,"depth":175,"links":117874},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117419,"description":23518},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":117881,"title":117882,"body":117883,"description":23518,"extension":181,"meta":118624,"navigation":184,"path":118625,"seo":118626,"stem":118627,"__hash__":118628},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":117884,"toc":118611},[117885,117888,117892,117895,117901,117905,117909,117915,117920,117925,117930,117935,117940,117943,117946,117949,117952,117956,117959,117964,117967,117972,117975,117980,117987,117990,117993,117996,117999,118002,118013,118017,118021,118026,118031,118035,118040,118044,118049,118053,118057,118062,118065,118110,118115,118119,118123,118128,118134,118139,118149,118154,118164,118169,118174,118201,118205,118208,118213,118216,118241,118245,118250,118253,118258,118263,118283,118288,118291,118306,118310,118363,118366,118371,118375,118378,118393,118396,118399,118404,118408,118412,118415,118419,118423,118426,118431,118436,118440,118447,118455,118458,118465,118470,118475,118478,118483,118490,118495,118502,118506,118508,118513,118517,118520,118523,118528,118531,118536,118539,118544,118549,118554,118558,118563,118567,118608],[10,117886,117882],{"id":117887},"_2-linux装机教程",[34,117889,117891],{"id":117890},"_21-实体机","2.1 实体机",[14,117893,117894],{},"使用清华源：（Ubuntu24.04）",[14,117896,117897],{},[42,117898,117899],{"href":117899,"rel":117900},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[151],[34,117902,117904],{"id":117903},"_22-普通虚拟机","2.2 普通虚拟机",[225,117906,117908],{"id":117907},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[14,117910,117911],{},[42,117912,117913],{"href":117913,"rel":117914},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[151],[14,117916,117917],{},[1602,117918],{"alt":174,"src":117919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[14,117921,117922],{},[1602,117923],{"alt":174,"src":117924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[14,117926,117927],{},[1602,117928],{"alt":174,"src":117929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[14,117931,117932],{},[1602,117933],{"alt":174,"src":117934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[14,117936,117937],{},[1602,117938],{"alt":174,"src":117939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[14,117941,117942],{},"内存4G（4096MB）；",[14,117944,117945],{},"CPU给4个核；",[14,117947,117948],{},"硬盘动态分配60G；",[14,117950,117951],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[225,117953,117955],{"id":117954},"_222-安装ubuntu","2.2.2 安装Ubuntu",[14,117957,117958],{},"按照1.1的步骤下载Ubuntu",[14,117960,117961],{},[1602,117962],{"alt":174,"src":117963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[14,117965,117966],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[14,117968,117969],{},[1602,117970],{"alt":174,"src":117971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[14,117973,117974],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[14,117976,117977],{},[1602,117978],{"alt":174,"src":117979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[14,117981,117982,117983,117986],{},"选择“正常安装”(找不到都用Alt+F7)， ",[414,117984,117985],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[14,117988,117989],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[14,117991,117992],{},"将改动写入磁盘吗 继续",[14,117994,117995],{},"选择东八区（shanghai，大致在地图上点一下），继续",[14,117997,117998],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[14,118000,118001],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[14,118003,118004,118005,118008,118009,118012],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[414,118006,118007],{},"除了"," 选不发送系统信息与不升级之外， ",[414,118010,118011],{},"其它"," 都跳过或前进）",[225,118014,118016],{"id":118015},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[22139,118018,118020],{"id":118019},"_2231-全屏","2.2.3.1 全屏",[14,118022,118023],{},[1602,118024],{"alt":174,"src":118025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[14,118027,118028],{},[1602,118029],{"alt":174,"src":118030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[22139,118032,118034],{"id":118033},"_2232-文件交换","2.2.3.2 文件交换",[14,118036,118037],{},[1602,118038],{"alt":174,"src":118039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[22139,118041,118043],{"id":118042},"_2233-新建文本文档","2.2.3.3 新建文本文档",[14,118045,118046],{},[1602,118047],{"alt":174,"src":118048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[34,118050,118052],{"id":118051},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[225,118054,118056],{"id":118055},"_231-简介与优缺点","2.3.1 简介与优缺点",[21,118058,118059],{},[24,118060,118061],{},"什么情况下推荐？",[14,118063,118064],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[21,118066,118067],{"start":175},[24,118068,118069,118070],{},"优缺点：",[21,118071,118072,118102],{},[24,118073,118074,118075],{},"优点：",[21,118076,118077,118080,118087,118090,118093,118096,118099],{},[24,118078,118079],{},"WSL2是最好的Linux发行版;(bushi)",[24,118081,118082,118083,118086],{},"性能损耗极低。且比在Windows上跑深度性能 ",[414,118084,118085],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[24,118088,118089],{},"非常方便调用USB设备，可以USB直通;",[24,118091,118092],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[24,118094,118095],{},"非常方便Win与WSL2互相传文件等协同操作;",[24,118097,118098],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[24,118100,118101],{},"非常方便使用Windows的VScode远程开发;",[24,118103,118104,118105],{},"缺点：",[21,118106,118107],{},[24,118108,118109],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[14,118111,118112],{},[1602,118113],{"alt":174,"src":118114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[225,118116,118118],{"id":118117},"_232-安装教程","2.3.2 安装教程",[22139,118120,118122],{"id":118121},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[21,118124,118125],{},[24,118126,118127],{},"方法一(图形界面)",[14,118129,118130,118131,24759],{},"用Win+R输入",[251,118132,118133],{},"appwiz.cpl",[14,118135,118136],{},[1602,118137],{"alt":174,"src":118138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[14,118140,118141,118142,118145,118146,26614],{},"点击OK进入 ",[414,118143,118144],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[414,118147,118148],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[14,118150,118151],{},[1602,118152],{"alt":174,"src":118153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[14,118155,118156,118157,101159,118160,118163],{},"选择 ",[414,118158,118159],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[414,118161,118162],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[14,118165,118166],{},[1602,118167],{"alt":174,"src":118168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[21,118170,118171],{"start":175},[24,118172,118173],{},"方法二(命令行)",[245,118175,118179],{"className":118176,"code":118177,"language":118178,"meta":174,"style":174},"language-PowerShell shiki shiki-themes github-light github-dark","# 开启 Linux 子系统\ndism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n# 开启虚拟机平台\ndism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n","PowerShell",[251,118180,118181,118186,118191,118196],{"__ignoreMap":174},[254,118182,118183],{"class":256,"line":257},[254,118184,118185],{},"# 开启 Linux 子系统\n",[254,118187,118188],{"class":256,"line":175},[254,118189,118190],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[254,118192,118193],{"class":256,"line":1319},[254,118194,118195],{},"# 开启虚拟机平台\n",[254,118197,118198],{"class":256,"line":1334},[254,118199,118200],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[22139,118202,118204],{"id":118203},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[14,118206,118207],{},"用管理员权限打开powershell",[14,118209,118210],{},[1602,118211],{"alt":174,"src":118212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[14,118214,118215],{},"升级WSL并设置默认版本为WSL2",[245,118217,118219],{"className":118176,"code":118218,"language":118178,"meta":174,"style":174},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[251,118220,118221,118226,118231,118236],{"__ignoreMap":174},[254,118222,118223],{"class":256,"line":257},[254,118224,118225],{},"# 更新 wsl\n",[254,118227,118228],{"class":256,"line":175},[254,118229,118230],{},"wsl --update\n",[254,118232,118233],{"class":256,"line":1319},[254,118234,118235],{},"# 将 wsl 版本设置为 wsl2\n",[254,118237,118238],{"class":256,"line":1334},[254,118239,118240],{},"wsl --set-default-version 2\n",[22139,118242,118244],{"id":118243},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[21,118246,118247],{},[24,118248,118249],{},"方式一(商店下载)",[14,118251,118252],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[14,118254,118255],{},[1602,118256],{"alt":174,"src":118257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[21,118259,118260],{"start":175},[24,118261,118262],{},"方式二(命令行安装)",[245,118264,118266],{"className":118176,"code":118265,"language":118178,"meta":174,"style":174},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[251,118267,118268,118273,118278],{"__ignoreMap":174},[254,118269,118270],{"class":256,"line":257},[254,118271,118272],{},"# 列出可安装的 Linux 版本\n",[254,118274,118275],{"class":256,"line":175},[254,118276,118277],{},"#（需要科学手段）\n",[254,118279,118280],{"class":256,"line":1319},[254,118281,118282],{},"wsl --list --online\n",[14,118284,118285],{},[1602,118286],{"alt":174,"src":118287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[14,118289,118290],{},"选择对应发行版并安装",[245,118292,118294],{"className":118176,"code":118293,"language":118178,"meta":174,"style":174},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[251,118295,118296,118301],{"__ignoreMap":174},[254,118297,118298],{"class":256,"line":257},[254,118299,118300],{},"# Ubuntu安装完毕后需要重启系统\n",[254,118302,118303],{"class":256,"line":175},[254,118304,118305],{},"wsl --install -d Ubuntu-24.04\n",[22139,118307,118309],{"id":118308},"_2324-查看系统状态","2.3.2.4 查看系统状态",[245,118311,118313],{"className":118176,"code":118312,"language":118178,"meta":174,"style":174},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[251,118314,118315,118320,118325,118330,118335,118339,118343,118348,118353,118358],{"__ignoreMap":174},[254,118316,118317],{"class":256,"line":257},[254,118318,118319],{},"# 查看 wsl\n",[254,118321,118322],{"class":256,"line":175},[254,118323,118324],{},"wsl -l\n",[254,118326,118327],{"class":256,"line":1319},[254,118328,118329],{},"# 查看 wsl 运行版本或模式\n",[254,118331,118332],{"class":256,"line":1334},[254,118333,118334],{},"wsl -l -v\n",[254,118336,118337],{"class":256,"line":1340},[254,118338,2540],{"emptyLinePlaceholder":184},[254,118340,118341],{"class":256,"line":1354},[254,118342,2540],{"emptyLinePlaceholder":184},[254,118344,118345],{"class":256,"line":1360},[254,118346,118347],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[254,118349,118350],{"class":256,"line":1451},[254,118351,118352],{},"wsl --set-version \u003Cdistro> 2\n",[254,118354,118355],{"class":256,"line":1457},[254,118356,118357],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[254,118359,118360],{"class":256,"line":1469},[254,118361,118362],{},"wsl --unregister \u003Cdistro>\n",[14,118364,118365],{},"输出Version为2即正常",[14,118367,118368],{},[1602,118369],{"alt":174,"src":118370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[22139,118372,118374],{"id":118373},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[14,118376,118377],{},"直接在Powershell里输入wsl命令进入子系统",[245,118379,118381],{"className":118176,"code":118380,"language":118178,"meta":174,"style":174},"# 进入子系统\nwsl\n",[251,118382,118383,118388],{"__ignoreMap":174},[254,118384,118385],{"class":256,"line":257},[254,118386,118387],{},"# 进入子系统\n",[254,118389,118390],{"class":256,"line":175},[254,118391,118392],{},"wsl\n",[14,118394,118395],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[14,118397,118398],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[14,118400,118401],{},[1602,118402],{"alt":174,"src":118403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[225,118405,118407],{"id":118406},"_233-配置各种环境","2.3.3 配置各种环境",[22139,118409,118411],{"id":118410},"_2331-换源","2.3.3.1 换源",[14,118413,118414],{},"(同实体机LINUX，往下找教程)",[22139,118416,118418],{"id":118417},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[23051,118420,118422],{"id":118421},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[14,118424,118425],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[14,118427,118428],{},[1602,118429],{"alt":174,"src":118430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[14,118432,118433],{},[1602,118434],{"alt":174,"src":118435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[23051,118437,118439],{"id":118438},"_23322-cuda","2.3.3.2.2 CUDA",[14,118441,118442,118443],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[42,118444,118445],{"href":118445,"rel":118446},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[151],[14,118448,118449,118452],{},[1602,118450],{"alt":174,"src":118451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[1602,118453],{"alt":174,"src":118454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[14,118456,118457],{},"在下方的网站，选择合适的版本。",[14,118459,118460,118461],{},"WSL2 专属 CUDA 指南：",[42,118462,118463],{"href":118463,"rel":118464},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[151],[14,118466,118467],{},[414,118468,118469],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[14,118471,118472],{},[1602,118473],{"alt":174,"src":118474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[14,118476,118477],{},"挨行敲一遍",[14,118479,118480],{},[1602,118481],{"alt":174,"src":118482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[14,118484,118485,118486,118489],{},"敲完后，输入",[251,118487,118488],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[14,118491,118492],{},[1602,118493],{"alt":174,"src":118494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[14,118496,118497,118498,118501],{},"（请详看下方教程的",[414,118499,118500],{},"安装CUDA的配置环境来看","如何配置环境）",[23051,118503,118505],{"id":118504},"_23323-cudnn","2.3.3.2.3 cuDNN",[14,118507,118414],{},[14,118509,118510],{},[1602,118511],{"alt":174,"src":118512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[22139,118514,118516],{"id":118515},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[14,118518,118519],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[14,118521,118522],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[14,118524,118525],{},[1602,118526],{"alt":174,"src":118527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[14,118529,118530],{},"连接WSL2",[14,118532,118533],{},[1602,118534],{"alt":174,"src":118535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[14,118537,118538],{},"远程开发成功。",[14,118540,118541],{},[1602,118542],{"alt":174,"src":118543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[14,118545,118546],{},[1602,118547],{"alt":174,"src":118548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[14,118550,118551],{},[1602,118552],{"alt":174,"src":118553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[22139,118555,118557],{"id":118556},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[14,118559,118560],{},[1602,118561],{"alt":174,"src":118562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[22139,118564,118566],{"id":118565},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[245,118568,118570],{"className":117436,"code":118569,"language":117438,"meta":174,"style":174},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[251,118571,118572,118580,118588,118599,118603],{"__ignoreMap":174},[254,118573,118574,118576,118578],{"class":256,"line":257},[254,118575,24717],{"class":2103},[254,118577,117457],{"class":369},[254,118579,26383],{"class":369},[254,118581,118582,118584,118586],{"class":256,"line":175},[254,118583,24717],{"class":2103},[254,118585,117457],{"class":369},[254,118587,117473],{"class":369},[254,118589,118590,118592,118594,118596],{"class":256,"line":1319},[254,118591,24717],{"class":2103},[254,118593,117457],{"class":369},[254,118595,23975],{"class":369},[254,118597,118598],{"class":369}," mesa-utils\n",[254,118600,118601],{"class":256,"line":1334},[254,118602,2540],{"emptyLinePlaceholder":184},[254,118604,118605],{"class":256,"line":1340},[254,118606,118607],{"class":323},"#然后重启wsl2即可\n",[5267,118609,118610],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":174,"searchDepth":175,"depth":175,"links":118612},[118613,118614,118619],{"id":117890,"depth":175,"text":117891},{"id":117903,"depth":175,"text":117904,"children":118615},[118616,118617,118618],{"id":117907,"depth":1319,"text":117908},{"id":117954,"depth":1319,"text":117955},{"id":118015,"depth":1319,"text":118016},{"id":118051,"depth":175,"text":118052,"children":118620},[118621,118622,118623],{"id":118055,"depth":1319,"text":118056},{"id":118117,"depth":1319,"text":118118},{"id":118406,"depth":1319,"text":118407},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":117882,"description":23518},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":118630,"title":118631,"body":118632,"description":23518,"extension":181,"meta":121568,"navigation":184,"path":121569,"seo":121570,"stem":121571,"__hash__":121572},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":118633,"toc":121540},[118634,118637,118641,118647,118651,118657,118661,118849,118852,118857,118861,118865,118868,118871,118877,118882,118885,118888,118893,118926,118931,118935,119012,119015,119020,119024,119027,119066,119069,119078,119096,119101,119108,119225,119230,119233,119260,119265,119269,119278,119328,119335,119339,119342,119356,119363,119397,119402,119406,119429,119432,119437,119441,119444,119447,119450,119492,119496,119499,119502,119543,119547,119551,119554,119559,119564,119567,119590,119593,119601,119606,119609,119614,119619,119622,119627,119631,119636,119659,119664,119726,119734,119739,119744,119747,119752,119755,119760,119765,119783,119788,119794,119799,119813,119817,119820,119823,119826,119869,119872,119877,119978,119981,119986,119990,119994,120031,120035,120039,120043,120089,120093,120138,120142,120149,120157,120212,120215,120292,120295,120318,120322,120325,120330,120335,120343,120346,120351,120356,120361,120364,120369,120378,120381,120386,120389,120460,120465,120468,120473,120476,120481,120484,120489,120492,120497,120502,120505,120580,120583,120596,120601,120604,120618,120621,120650,120655,120684,120687,120692,120696,120701,120710,120713,120718,120721,120726,120729,120732,120737,120740,120745,120750,120753,120758,120761,120886,120891,120921,120924,120929,120934,120951,120954,120997,121000,121027,121032,121045,121188,121192,121197,121211,121214,121265,121268,121298,121301,121317,121322,121336,121339,121406,121411,121420,121425,121428,121440,121445,121452,121476,121479,121484,121487,121506,121511,121518,121530,121537],[10,118635,118631],{"id":118636},"_3-安装必备配置",[34,118638,118640],{"id":118639},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[245,118642,118645],{"className":118643,"code":118644,"language":5328},[5326],"  打开下方网站（注意，该Ubuntu仓库版本是X86、amd64的仓库，ARM的仓库并非该网站（99.9%的人的电脑是X86的，很多工控机是ARM的，但工控机也有X86的，请看[Vinci机器人队单片机教程](https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fdocx\u002FPRAodvrWvoXTrVxP1EDcMKM7nXb)中讲的了解一下，或者自行百度。）\n\n  下方这俩学校二选一。\n\n1.  清华大学开源软件镜像站：https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\n\n2.  中国科学技术大学镜像站：https:\u002F\u002Fmirrors.ustc.edu.cn\n\n  可以测速，选择出速度最快的源。\n\n```Bash\ncurl https:\u002F\u002Fmirrors.cernet.edu.cn\u002Foh-my-mirrorz.py | python3\n```\n\n  在北方（山东）测速如下：\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-036.png)\n\n  在南方（广东）测速如下：\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-037.png)\n\n  在南北都比较快的是`北京外国语大学BFSU`和`南方科技大学SUSTech`，不想测速可以无脑选，也可以测速选择最好的源。\n\n  \n",[251,118646,118644],{"__ignoreMap":174},[225,118648,118650],{"id":118649},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[245,118652,118655],{"className":118653,"code":118654,"language":5328},[5326],"  输入以下命令\n\n```Bash\nsudo apt update\nsudo apt install vim\nsudo vim \u002Fetc\u002Fapt\u002Fsources.list\n```\n\n  在以下界面，用键盘按ggdG（注意区分大小写）\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-038.png)\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-039.png)\n\n  选择好Ubuntu版本后，\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-040.png)\n\n  粘贴进去\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-041.png)\n\n  按一下ESC，然后英文冒号，输入 `:wq!`然后回车\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-042.png)\n\n  输入以下命令\n\n```Bash\nsudo apt update\n```\n\n  下方出现对应学校源网站则成功\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-043.png)\n\n  至此换源结束\n",[251,118656,118654],{"__ignoreMap":174},[225,118658,118660],{"id":118659},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[245,118662,118666],{"className":118663,"code":118664,"language":118665,"meta":174,"style":174},"language-Shell shiki shiki-themes github-light github-dark","sudo apt update\nsudo apt install vim\nsudo rm -rf \u002Fetc\u002Fapt\u002Fsources.list\nsudo rm -rf \u002Fetc\u002Fapt\u002Fsources.list.d\u002F**\n\nsudo vim \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n```\n\n\n选择好Ubuntu版本后，复制下方的内容。\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png)\n\n粘贴进去\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png)\n\n按一下ESC，然后英文冒号，输入 `:wq!`然后回车\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png)\n\n输入以下命令\n\n```Bash\nsudo apt update\n","Shell",[251,118667,118668,118676,118687,118699,118713,118717,118727,118732,118736,118740,118745,118749,118761,118765,118770,118774,118785,118789,118805,118809,118820,118824,118829,118833,118841],{"__ignoreMap":174},[254,118669,118670,118672,118674],{"class":256,"line":257},[254,118671,24717],{"class":2103},[254,118673,117457],{"class":369},[254,118675,26383],{"class":369},[254,118677,118678,118680,118682,118684],{"class":256,"line":175},[254,118679,24717],{"class":2103},[254,118681,117457],{"class":369},[254,118683,23975],{"class":369},[254,118685,118686],{"class":369}," vim\n",[254,118688,118689,118691,118694,118696],{"class":256,"line":1319},[254,118690,24717],{"class":2103},[254,118692,118693],{"class":369}," rm",[254,118695,25466],{"class":313},[254,118697,118698],{"class":369}," \u002Fetc\u002Fapt\u002Fsources.list\n",[254,118700,118701,118703,118705,118707,118710],{"class":256,"line":1334},[254,118702,24717],{"class":2103},[254,118704,118693],{"class":369},[254,118706,25466],{"class":313},[254,118708,118709],{"class":369}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[254,118711,118712],{"class":313},"**\n",[254,118714,118715],{"class":256,"line":1340},[254,118716,2540],{"emptyLinePlaceholder":184},[254,118718,118719,118721,118724],{"class":256,"line":1354},[254,118720,24717],{"class":2103},[254,118722,118723],{"class":369}," vim",[254,118725,118726],{"class":369}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[254,118728,118729],{"class":256,"line":1360},[254,118730,118731],{"class":369},"```\n",[254,118733,118734],{"class":256,"line":1451},[254,118735,2540],{"emptyLinePlaceholder":184},[254,118737,118738],{"class":256,"line":1457},[254,118739,2540],{"emptyLinePlaceholder":184},[254,118741,118742],{"class":256,"line":1469},[254,118743,118744],{"class":2103},"选择好Ubuntu版本后，复制下方的内容。\n",[254,118746,118747],{"class":256,"line":1752},[254,118748,2540],{"emptyLinePlaceholder":184},[254,118750,118751,118753,118756,118759],{"class":256,"line":1757},[254,118752,491],{"class":260},[254,118754,118755],{"class":369},"[](",[254,118757,118758],{"class":2103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[254,118760,271],{"class":369},[254,118762,118763],{"class":256,"line":1763},[254,118764,2540],{"emptyLinePlaceholder":184},[254,118766,118767],{"class":256,"line":1768},[254,118768,118769],{"class":2103},"粘贴进去\n",[254,118771,118772],{"class":256,"line":1782},[254,118773,2540],{"emptyLinePlaceholder":184},[254,118775,118776,118778,118780,118783],{"class":256,"line":1787},[254,118777,491],{"class":260},[254,118779,118755],{"class":369},[254,118781,118782],{"class":2103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[254,118784,271],{"class":369},[254,118786,118787],{"class":256,"line":1793},[254,118788,2540],{"emptyLinePlaceholder":184},[254,118790,118791,118794,118797,118800,118802],{"class":256,"line":1814},[254,118792,118793],{"class":2103},"按一下ESC，然后英文冒号，输入",[254,118795,118796],{"class":369}," `",[254,118798,118799],{"class":2103},":wq!",[254,118801,1236],{"class":369},[254,118803,118804],{"class":2103},"然后回车\n",[254,118806,118807],{"class":256,"line":1819},[254,118808,2540],{"emptyLinePlaceholder":184},[254,118810,118811,118813,118815,118818],{"class":256,"line":1833},[254,118812,491],{"class":260},[254,118814,118755],{"class":369},[254,118816,118817],{"class":2103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[254,118819,271],{"class":369},[254,118821,118822],{"class":256,"line":1838},[254,118823,2540],{"emptyLinePlaceholder":184},[254,118825,118826],{"class":256,"line":1867},[254,118827,118828],{"class":2103},"输入以下命令\n",[254,118830,118831],{"class":256,"line":1872},[254,118832,2540],{"emptyLinePlaceholder":184},[254,118834,118835,118838],{"class":256,"line":1889},[254,118836,118837],{"class":369},"```",[254,118839,118840],{"class":2103},"Bash\n",[254,118842,118843,118845,118847],{"class":256,"line":1894},[254,118844,24717],{"class":2103},[254,118846,117457],{"class":369},[254,118848,26383],{"class":369},[14,118850,118851],{},"这里被替换成对应学校则成功",[14,118853,118854],{},[1602,118855],{"alt":174,"src":118856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[34,118858,118860],{"id":118859},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[225,118862,118864],{"id":118863},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[14,118866,118867],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[14,118869,118870],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[14,118872,118873],{},[42,118874,118875],{"href":118875,"rel":118876},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[151],[14,118878,118879],{},[1602,118880],{"alt":174,"src":118881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[14,118883,118884],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[14,118886,118887],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[14,118889,118890],{},[1602,118891],{"alt":174,"src":118892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[245,118894,118896],{"className":117436,"code":118895,"language":117438,"meta":174,"style":174},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[251,118897,118898,118903,118910,118915],{"__ignoreMap":174},[254,118899,118900],{"class":256,"line":257},[254,118901,118902],{"class":323},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[254,118904,118905,118907],{"class":256,"line":175},[254,118906,101417],{"class":313},[254,118908,118909],{"class":369}," ~\u002FDownloads\n",[254,118911,118912],{"class":256,"line":1319},[254,118913,118914],{"class":323},"#下方chrome安装包名不一定是这个，根据名字来看\n",[254,118916,118917,118919,118921,118923],{"class":256,"line":1334},[254,118918,24717],{"class":2103},[254,118920,117457],{"class":369},[254,118922,23975],{"class":369},[254,118924,118925],{"class":369}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[14,118927,118928],{},[1602,118929],{"alt":174,"src":118930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[225,118932,118934],{"id":118933},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[245,118936,118938],{"className":117436,"code":118937,"language":117438,"meta":174,"style":174},"# 老版\nsudo apt update\nsudo apt install neofetch\nneofetch\n\n# 新版\nsudo add-apt-repository ppa:zhangsongcui3371\u002Ffastfetch\nsudo apt update\nsudo apt install fastfetch\nfastfetch\n",[251,118939,118940,118945,118953,118964,118969,118973,118978,118988,118996,119007],{"__ignoreMap":174},[254,118941,118942],{"class":256,"line":257},[254,118943,118944],{"class":323},"# 老版\n",[254,118946,118947,118949,118951],{"class":256,"line":175},[254,118948,24717],{"class":2103},[254,118950,117457],{"class":369},[254,118952,26383],{"class":369},[254,118954,118955,118957,118959,118961],{"class":256,"line":1319},[254,118956,24717],{"class":2103},[254,118958,117457],{"class":369},[254,118960,23975],{"class":369},[254,118962,118963],{"class":369}," neofetch\n",[254,118965,118966],{"class":256,"line":1334},[254,118967,118968],{"class":2103},"neofetch\n",[254,118970,118971],{"class":256,"line":1340},[254,118972,2540],{"emptyLinePlaceholder":184},[254,118974,118975],{"class":256,"line":1354},[254,118976,118977],{"class":323},"# 新版\n",[254,118979,118980,118982,118985],{"class":256,"line":1360},[254,118981,24717],{"class":2103},[254,118983,118984],{"class":369}," add-apt-repository",[254,118986,118987],{"class":369}," ppa:zhangsongcui3371\u002Ffastfetch\n",[254,118989,118990,118992,118994],{"class":256,"line":1451},[254,118991,24717],{"class":2103},[254,118993,117457],{"class":369},[254,118995,26383],{"class":369},[254,118997,118998,119000,119002,119004],{"class":256,"line":1457},[254,118999,24717],{"class":2103},[254,119001,117457],{"class":369},[254,119003,23975],{"class":369},[254,119005,119006],{"class":369}," fastfetch\n",[254,119008,119009],{"class":256,"line":1469},[254,119010,119011],{"class":2103},"fastfetch\n",[14,119013,119014],{},"这里显示，一共有3162个debian的程序，7个snap程序",[14,119016,119017],{},[1602,119018],{"alt":174,"src":119019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[225,119021,119023],{"id":119022},"_323-移除snap应用","3.2.3 移除snap应用",[14,119025,119026],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[245,119028,119030],{"className":117436,"code":119029,"language":117438,"meta":174,"style":174},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[251,119031,119032,119044,119055],{"__ignoreMap":174},[254,119033,119034,119036,119038,119041],{"class":256,"line":257},[254,119035,24717],{"class":2103},[254,119037,26654],{"class":369},[254,119039,119040],{"class":369}," disable",[254,119042,119043],{"class":369}," snapd.service\n",[254,119045,119046,119048,119050,119052],{"class":256,"line":175},[254,119047,24717],{"class":2103},[254,119049,26654],{"class":369},[254,119051,119040],{"class":369},[254,119053,119054],{"class":369}," snapd.socket\n",[254,119056,119057,119059,119061,119063],{"class":256,"line":1319},[254,119058,24717],{"class":2103},[254,119060,26654],{"class":369},[254,119062,119040],{"class":369},[254,119064,119065],{"class":369}," snapd.seeded.service\n",[14,119067,119068],{},"然后查看snap应用列表",[14,119070,119071,119072,119077],{},"根据你安装的选择不同（最小安装或普通安装），有",[42,119073,119076],{"href":119074,"rel":119075},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[151],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[245,119079,119081],{"className":117436,"code":119080,"language":117438,"meta":174,"style":174},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[251,119082,119083,119088],{"__ignoreMap":174},[254,119084,119085],{"class":256,"line":257},[254,119086,119087],{"class":323},"# 查询当前系统上snap安装了哪些app\n",[254,119089,119090,119093],{"class":256,"line":175},[254,119091,119092],{"class":2103},"snap",[254,119094,119095],{"class":369}," list\n",[14,119097,119098],{},[1602,119099],{"alt":174,"src":119100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[14,119102,119103,119104,119107],{},"卸载掉图中所有应用，按照 ",[414,119105,119106],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[245,119109,119111],{"className":117436,"code":119110,"language":117438,"meta":174,"style":174},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\nsudo snap remove snap-store\n#移除firefox浏览器\nsudo snap remove firefox\n#移除gnome-42-2204\nsudo snap remove gnome-42-2204\n#移除gtk-common-themes\nsudo snap remove gtk-common-themes\n#移除其它...\n \n#移除core22,bare以及snapd\nsudo snap remove core22\nsudo snap remove bare\nsudo snap remove snapd\n",[251,119112,119113,119118,119130,119135,119146,119151,119162,119167,119178,119183,119187,119192,119203,119214],{"__ignoreMap":174},[254,119114,119115],{"class":256,"line":257},[254,119116,119117],{"class":323},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[254,119119,119120,119122,119125,119127],{"class":256,"line":175},[254,119121,24717],{"class":2103},[254,119123,119124],{"class":369}," snap",[254,119126,26220],{"class":369},[254,119128,119129],{"class":369}," snap-store\n",[254,119131,119132],{"class":256,"line":1319},[254,119133,119134],{"class":323},"#移除firefox浏览器\n",[254,119136,119137,119139,119141,119143],{"class":256,"line":1334},[254,119138,24717],{"class":2103},[254,119140,119124],{"class":369},[254,119142,26220],{"class":369},[254,119144,119145],{"class":369}," firefox\n",[254,119147,119148],{"class":256,"line":1340},[254,119149,119150],{"class":323},"#移除gnome-42-2204\n",[254,119152,119153,119155,119157,119159],{"class":256,"line":1354},[254,119154,24717],{"class":2103},[254,119156,119124],{"class":369},[254,119158,26220],{"class":369},[254,119160,119161],{"class":369}," gnome-42-2204\n",[254,119163,119164],{"class":256,"line":1360},[254,119165,119166],{"class":323},"#移除gtk-common-themes\n",[254,119168,119169,119171,119173,119175],{"class":256,"line":1451},[254,119170,24717],{"class":2103},[254,119172,119124],{"class":369},[254,119174,26220],{"class":369},[254,119176,119177],{"class":369}," gtk-common-themes\n",[254,119179,119180],{"class":256,"line":1457},[254,119181,119182],{"class":323},"#移除其它...\n",[254,119184,119185],{"class":256,"line":1469},[254,119186,2814],{"class":264},[254,119188,119189],{"class":256,"line":1752},[254,119190,119191],{"class":323},"#移除core22,bare以及snapd\n",[254,119193,119194,119196,119198,119200],{"class":256,"line":1757},[254,119195,24717],{"class":2103},[254,119197,119124],{"class":369},[254,119199,26220],{"class":369},[254,119201,119202],{"class":369}," core22\n",[254,119204,119205,119207,119209,119211],{"class":256,"line":1763},[254,119206,24717],{"class":2103},[254,119208,119124],{"class":369},[254,119210,26220],{"class":369},[254,119212,119213],{"class":369}," bare\n",[254,119215,119216,119218,119220,119222],{"class":256,"line":1768},[254,119217,24717],{"class":2103},[254,119219,119124],{"class":369},[254,119221,26220],{"class":369},[254,119223,119224],{"class":369}," snapd\n",[14,119226,119227],{},[1602,119228],{"alt":174,"src":119229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[14,119231,119232],{},"输入以下命令查看是否还有snap包",[245,119234,119236],{"className":117436,"code":119235,"language":117438,"meta":174,"style":174},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[251,119237,119238,119244,119248,119252,119256],{"__ignoreMap":174},[254,119239,119240,119242],{"class":256,"line":257},[254,119241,119092],{"class":2103},[254,119243,119095],{"class":369},[254,119245,119246],{"class":256,"line":175},[254,119247,118944],{"class":323},[254,119249,119250],{"class":256,"line":1319},[254,119251,118968],{"class":2103},[254,119253,119254],{"class":256,"line":1334},[254,119255,118977],{"class":323},[254,119257,119258],{"class":256,"line":1340},[254,119259,119011],{"class":2103},[14,119261,119262],{},[1602,119263],{"alt":174,"src":119264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[225,119266,119268],{"id":119267},"_324-移除snap","3.2.4 移除snap",[14,119270,119271,119272,119277],{},"在删除掉",[42,119273,119276],{"href":119274,"rel":119275},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[151],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[245,119279,119281],{"className":117436,"code":119280,"language":117438,"meta":174,"style":174}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[251,119282,119283,119288,119301,119306,119317],{"__ignoreMap":174},[254,119284,119285],{"class":256,"line":257},[254,119286,119287],{"class":323}," #使用apt移除掉snap\n",[254,119289,119290,119292,119294,119296,119299],{"class":256,"line":175},[254,119291,24717],{"class":2103},[254,119293,117457],{"class":369},[254,119295,117765],{"class":369},[254,119297,119298],{"class":313}," --purge",[254,119300,119224],{"class":369},[254,119302,119303],{"class":256,"line":1319},[254,119304,119305],{"class":323},"#移除snapd的一些目录\n",[254,119307,119308,119310,119312,119314],{"class":256,"line":1334},[254,119309,24717],{"class":2103},[254,119311,118693],{"class":369},[254,119313,25466],{"class":313},[254,119315,119316],{"class":369}," \u002Fvar\u002Fcache\u002Fsnapd\n",[254,119318,119319,119321,119323,119325],{"class":256,"line":1340},[254,119320,24717],{"class":2103},[254,119322,118693],{"class":369},[254,119324,25466],{"class":313},[254,119326,119327],{"class":369}," ~\u002Fsnap\n",[14,119329,119330,119331,119334],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[251,119332,119333],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[225,119336,119338],{"id":119337},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[14,119340,119341],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[245,119343,119345],{"className":117436,"code":119344,"language":117438,"meta":174,"style":174},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[251,119346,119347],{"__ignoreMap":174},[254,119348,119349,119351,119353],{"class":256,"line":257},[254,119350,24717],{"class":2103},[254,119352,118723],{"class":369},[254,119354,119355],{"class":369}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[14,119357,119358,119359,119362],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[251,119360,119361],{},":wq"," 回车",[245,119364,119366],{"className":117436,"code":119365,"language":117438,"meta":174,"style":174},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[251,119367,119368,119375,119389],{"__ignoreMap":174},[254,119369,119370,119373],{"class":256,"line":257},[254,119371,119372],{"class":2103},"Package:",[254,119374,119224],{"class":369},[254,119376,119377,119380,119383,119386],{"class":256,"line":175},[254,119378,119379],{"class":2103},"Pin:",[254,119381,119382],{"class":369}," release",[254,119384,119385],{"class":369}," a=",[254,119387,119388],{"class":313},"*\n",[254,119390,119391,119394],{"class":256,"line":1319},[254,119392,119393],{"class":2103},"Pin-Priority:",[254,119395,119396],{"class":313}," -10\n",[14,119398,119399],{},[1602,119400],{"alt":174,"src":119401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[225,119403,119405],{"id":119404},"_326-测试是否成功","3.2.6 测试是否成功",[245,119407,119409],{"className":117436,"code":119408,"language":117438,"meta":174,"style":174},"sudo apt update\nsudo apt install firefox\n",[251,119410,119411,119419],{"__ignoreMap":174},[254,119412,119413,119415,119417],{"class":256,"line":257},[254,119414,24717],{"class":2103},[254,119416,117457],{"class":369},[254,119418,26383],{"class":369},[254,119420,119421,119423,119425,119427],{"class":256,"line":175},[254,119422,24717],{"class":2103},[254,119424,117457],{"class":369},[254,119426,23975],{"class":369},[254,119428,119145],{"class":369},[14,119430,119431],{},"这里提示snapd无法被安装，就证明成功了",[14,119433,119434],{},[1602,119435],{"alt":174,"src":119436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[225,119438,119440],{"id":119439},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[14,119442,119443],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[14,119445,119446],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[14,119448,119449],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[245,119451,119453],{"className":117436,"code":119452,"language":117438,"meta":174,"style":174},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[251,119454,119455,119460,119469,119474,119482],{"__ignoreMap":174},[254,119456,119457],{"class":256,"line":257},[254,119458,119459],{"class":323},"# 添加Mozilla提供的源\n",[254,119461,119462,119464,119466],{"class":256,"line":175},[254,119463,24717],{"class":2103},[254,119465,118984],{"class":369},[254,119467,119468],{"class":369}," ppa:mozillateam\u002Fppa\n",[254,119470,119471],{"class":256,"line":1319},[254,119472,119473],{"class":323},"# 安装Firefox\n",[254,119475,119476,119478,119480],{"class":256,"line":1334},[254,119477,24717],{"class":2103},[254,119479,117457],{"class":369},[254,119481,26383],{"class":369},[254,119483,119484,119486,119488,119490],{"class":256,"line":1340},[254,119485,24717],{"class":2103},[254,119487,117457],{"class":369},[254,119489,23975],{"class":369},[254,119491,119145],{"class":369},[225,119493,119495],{"id":119494},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[14,119497,119498],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[14,119500,119501],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[245,119503,119505],{"className":117436,"code":119504,"language":117438,"meta":174,"style":174},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[251,119506,119507,119512,119522,119530,119534],{"__ignoreMap":174},[254,119508,119509],{"class":256,"line":257},[254,119510,119511],{"class":323},"#删掉禁止安装snap的配置文件\n",[254,119513,119514,119516,119518,119520],{"class":256,"line":175},[254,119515,24717],{"class":2103},[254,119517,118693],{"class":369},[254,119519,25466],{"class":313},[254,119521,119355],{"class":369},[254,119523,119524,119526,119528],{"class":256,"line":1319},[254,119525,24717],{"class":2103},[254,119527,117457],{"class":369},[254,119529,26383],{"class":369},[254,119531,119532],{"class":256,"line":1334},[254,119533,2540],{"emptyLinePlaceholder":184},[254,119535,119536,119538,119540],{"class":256,"line":1340},[254,119537,24717],{"class":2103},[254,119539,117457],{"class":369},[254,119541,119542],{"class":369}," dist-update\n",[34,119544,119546],{"id":119545},"_33-中文输入法","3.3 中文输入法",[225,119548,119550],{"id":119549},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[14,119552,119553],{},"官网下载搜狗输入法",[14,119555,119556],{},[1602,119557],{"alt":174,"src":119558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[14,119560,119561],{},[1602,119562],{"alt":174,"src":119563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[14,119565,119566],{},"打开终端输入如下",[245,119568,119570],{"className":117436,"code":119569,"language":117438,"meta":174,"style":174},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[251,119571,119572,119579],{"__ignoreMap":174},[254,119573,119574,119576],{"class":256,"line":257},[254,119575,101417],{"class":313},[254,119577,119578],{"class":369}," ~\u002FDownloads\u002F\n",[254,119580,119581,119583,119585,119587],{"class":256,"line":175},[254,119582,24717],{"class":2103},[254,119584,117457],{"class":369},[254,119586,23975],{"class":369},[254,119588,119589],{"class":369}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[14,119591,119592],{},"打开Fcitx",[14,119594,119595,119598],{},[1602,119596],{"alt":174,"src":119597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[1602,119599],{"alt":174,"src":119600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[14,119602,119603],{},[1602,119604],{"alt":174,"src":119605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[14,119607,119608],{},"添加搜狗输入法",[14,119610,119611],{},[1602,119612],{"alt":174,"src":119613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[14,119615,119616],{},[1602,119617],{"alt":174,"src":119618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[14,119620,119621],{},"将搜狗输入法设置为唯一输入法",[14,119623,119624],{},[1602,119625],{"alt":174,"src":119626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[225,119628,119630],{"id":119629},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[21,119632,119633],{},[24,119634,119635],{},"卸载旧输入法",[245,119637,119639],{"className":118663,"code":119638,"language":118665,"meta":174,"style":174},"sudo apt purge fcitx* ibus*\n",[251,119640,119641],{"__ignoreMap":174},[254,119642,119643,119645,119647,119649,119652,119654,119657],{"class":256,"line":257},[254,119644,24717],{"class":2103},[254,119646,117457],{"class":369},[254,119648,117798],{"class":369},[254,119650,119651],{"class":369}," fcitx",[254,119653,719],{"class":313},[254,119655,119656],{"class":369}," ibus",[254,119658,119388],{"class":313},[21,119660,119661],{"start":175},[24,119662,119663],{},"安装Fcitx5",[245,119665,119667],{"className":117436,"code":119666,"language":117438,"meta":174,"style":174},"# Ubuntu22.04及以上、Debian12及以上\nsudo apt install fcitx5 fcitx5-chinese-addons\n\n# Ubuntu20.04\nsudo add-apt-repository ppa:zhsj\u002Ffcitx5\nsudo apt update\nsudo apt install fcitx5 fcitx5-chinese-addons\n",[251,119668,119669,119674,119688,119692,119697,119706,119714],{"__ignoreMap":174},[254,119670,119671],{"class":256,"line":257},[254,119672,119673],{"class":323},"# Ubuntu22.04及以上、Debian12及以上\n",[254,119675,119676,119678,119680,119682,119685],{"class":256,"line":175},[254,119677,24717],{"class":2103},[254,119679,117457],{"class":369},[254,119681,23975],{"class":369},[254,119683,119684],{"class":369}," fcitx5",[254,119686,119687],{"class":369}," fcitx5-chinese-addons\n",[254,119689,119690],{"class":256,"line":1319},[254,119691,2540],{"emptyLinePlaceholder":184},[254,119693,119694],{"class":256,"line":1334},[254,119695,119696],{"class":323},"# Ubuntu20.04\n",[254,119698,119699,119701,119703],{"class":256,"line":1340},[254,119700,24717],{"class":2103},[254,119702,118984],{"class":369},[254,119704,119705],{"class":369}," ppa:zhsj\u002Ffcitx5\n",[254,119707,119708,119710,119712],{"class":256,"line":1354},[254,119709,24717],{"class":2103},[254,119711,117457],{"class":369},[254,119713,26383],{"class":369},[254,119715,119716,119718,119720,119722,119724],{"class":256,"line":1360},[254,119717,24717],{"class":2103},[254,119719,117457],{"class":369},[254,119721,23975],{"class":369},[254,119723,119684],{"class":369},[254,119725,119687],{"class":369},[21,119727,119728,119731],{"start":1319},[24,119729,119730],{},"Reboot System",[24,119732,119733],{},"启动Fcitx5",[14,119735,119736],{},[1602,119737],{"alt":174,"src":119738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[21,119740,119741],{"start":1340},[24,119742,119743],{},"修改一些设置",[14,119745,119746],{},"将Pinyin和Keyboard - English US加入到左边。",[14,119748,119749],{},[1602,119750],{"alt":174,"src":119751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[14,119753,119754],{},"添加快捷键以便于更好切换中英文",[14,119756,119757],{},[1602,119758],{"alt":174,"src":119759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[21,119761,119762],{"start":1354},[24,119763,119764],{},"重启",[245,119766,119768],{"className":118663,"code":119767,"language":118665,"meta":174,"style":174},"sudo shutdown -r now\n",[251,119769,119770],{"__ignoreMap":174},[254,119771,119772,119774,119777,119780],{"class":256,"line":257},[254,119773,24717],{"class":2103},[254,119775,119776],{"class":369}," shutdown",[254,119778,119779],{"class":313}," -r",[254,119781,119782],{"class":369}," now\n",[21,119784,119785],{"start":1360},[24,119786,119787],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[14,119789,119790],{},[42,119791,119792],{"href":119792,"rel":119793},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[151],[21,119795,119796],{"start":1451},[24,119797,119798],{},"再重启",[245,119800,119801],{"className":118663,"code":119767,"language":118665,"meta":174,"style":174},[251,119802,119803],{"__ignoreMap":174},[254,119804,119805,119807,119809,119811],{"class":256,"line":257},[254,119806,24717],{"class":2103},[254,119808,119776],{"class":369},[254,119810,119779],{"class":313},[254,119812,119782],{"class":369},[34,119814,119816],{"id":119815},"_34-pip3源替换","3.4 pip3源替换",[14,119818,119819],{},"非Debian系发行版需要做。",[14,119821,119822],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[14,119824,119825],{},"使用dnf的系统也可能不用做。",[245,119827,119829],{"className":117436,"code":119828,"language":117438,"meta":174,"style":174},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[251,119830,119831,119836,119843,119848,119853],{"__ignoreMap":174},[254,119832,119833],{"class":256,"line":257},[254,119834,119835],{"class":323},"# 检查是否已安装 pip\n",[254,119837,119838,119841],{"class":256,"line":175},[254,119839,119840],{"class":2103},"pip3",[254,119842,26434],{"class":313},[254,119844,119845],{"class":256,"line":1319},[254,119846,119847],{"class":323},"# 如果未安装，先安装 pip3（见下方）\n",[254,119849,119850],{"class":256,"line":1334},[254,119851,119852],{"class":323},"# 配置 pip 使用清华源\n",[254,119854,119855,119857,119860,119863,119866],{"class":256,"line":1340},[254,119856,119840],{"class":2103},[254,119858,119859],{"class":369}," config",[254,119861,119862],{"class":369}," set",[254,119864,119865],{"class":369}," global.index-url",[254,119867,119868],{"class":369}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[14,119870,119871],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[14,119873,119874],{},[1602,119875],{"alt":174,"src":119876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[245,119878,119880],{"className":117436,"code":119879,"language":117438,"meta":174,"style":174},"#安装pip3\nsudo apt update\nsudo apt-get install python3-pip\n\n#更新pip3\npython3 -m pip install -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple --upgrade pip\n\n#设置pip源为清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n\n#测试\npython3 -m pip install --upgrade pip\n",[251,119881,119882,119887,119895,119906,119910,119915,119934,119938,119943,119955,119959,119964],{"__ignoreMap":174},[254,119883,119884],{"class":256,"line":257},[254,119885,119886],{"class":323},"#安装pip3\n",[254,119888,119889,119891,119893],{"class":256,"line":175},[254,119890,24717],{"class":2103},[254,119892,117457],{"class":369},[254,119894,26383],{"class":369},[254,119896,119897,119899,119901,119903],{"class":256,"line":1319},[254,119898,24717],{"class":2103},[254,119900,26217],{"class":369},[254,119902,23975],{"class":369},[254,119904,119905],{"class":369}," python3-pip\n",[254,119907,119908],{"class":256,"line":1334},[254,119909,2540],{"emptyLinePlaceholder":184},[254,119911,119912],{"class":256,"line":1340},[254,119913,119914],{"class":323},"#更新pip3\n",[254,119916,119917,119919,119921,119923,119925,119927,119930,119932],{"class":256,"line":1354},[254,119918,101020],{"class":2103},[254,119920,101023],{"class":313},[254,119922,101046],{"class":369},[254,119924,23975],{"class":369},[254,119926,26571],{"class":313},[254,119928,119929],{"class":369}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[254,119931,101051],{"class":313},[254,119933,101054],{"class":369},[254,119935,119936],{"class":256,"line":1360},[254,119937,2540],{"emptyLinePlaceholder":184},[254,119939,119940],{"class":256,"line":1451},[254,119941,119942],{"class":323},"#设置pip源为清华源\n",[254,119944,119945,119947,119949,119951,119953],{"class":256,"line":1457},[254,119946,119840],{"class":2103},[254,119948,119859],{"class":369},[254,119950,119862],{"class":369},[254,119952,119865],{"class":369},[254,119954,119868],{"class":369},[254,119956,119957],{"class":256,"line":1469},[254,119958,2540],{"emptyLinePlaceholder":184},[254,119960,119961],{"class":256,"line":1752},[254,119962,119963],{"class":323},"#测试\n",[254,119965,119966,119968,119970,119972,119974,119976],{"class":256,"line":1757},[254,119967,101020],{"class":2103},[254,119969,101023],{"class":313},[254,119971,101046],{"class":369},[254,119973,23975],{"class":369},[254,119975,101051],{"class":313},[254,119977,101054],{"class":369},[14,119979,119980],{},"成功的话，会看到Looking后面是tsinghua字样。",[14,119982,119983],{},[1602,119984],{"alt":174,"src":119985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[34,119987,119989],{"id":119988},"_35-显卡驱动安装","3.5 显卡驱动安装",[225,119991,119993],{"id":119992},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[245,119995,119997],{"className":118663,"code":119996,"language":118665,"meta":174,"style":174},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[251,119998,119999,120004,120019,120024],{"__ignoreMap":174},[254,120000,120001],{"class":256,"line":257},[254,120002,120003],{"class":323},"# 如果是使用apt安装的驱动\n",[254,120005,120006,120008,120010,120012,120014,120017],{"class":256,"line":175},[254,120007,24717],{"class":2103},[254,120009,26217],{"class":369},[254,120011,26220],{"class":369},[254,120013,119298],{"class":313},[254,120015,120016],{"class":369}," nvidia",[254,120018,119388],{"class":313},[254,120020,120021],{"class":256,"line":1319},[254,120022,120023],{"class":323},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[254,120025,120026,120028],{"class":256,"line":1334},[254,120027,24717],{"class":2103},[254,120029,120030],{"class":369}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[225,120032,120034],{"id":120033},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[22139,120036,120038],{"id":120037},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[23051,120040,120042],{"id":120041},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[245,120044,120046],{"className":118663,"code":120045,"language":118665,"meta":174,"style":174},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[251,120047,120048,120053,120064,120069,120079,120084],{"__ignoreMap":174},[254,120049,120050],{"class":256,"line":257},[254,120051,120052],{"class":323},"# 安装英伟达驱动\n",[254,120054,120055,120057,120059,120061],{"class":256,"line":175},[254,120056,24717],{"class":2103},[254,120058,117457],{"class":369},[254,120060,23975],{"class":369},[254,120062,120063],{"class":369}," nvidia-driver-版本号\n",[254,120065,120066],{"class":256,"line":1319},[254,120067,120068],{"class":323},"# 重启 \n",[254,120070,120071,120073,120075,120077],{"class":256,"line":1334},[254,120072,24717],{"class":2103},[254,120074,119776],{"class":369},[254,120076,119779],{"class":313},[254,120078,119782],{"class":369},[254,120080,120081],{"class":256,"line":1340},[254,120082,120083],{"class":323},"# 检查驱动是否安装成功\n",[254,120085,120086],{"class":256,"line":1354},[254,120087,120088],{"class":2103},"nvidia-smi\n",[23051,120090,120092],{"id":120091},"_35212-debian","3.5.2.1.2 Debian",[245,120094,120096],{"className":118663,"code":120095,"language":118665,"meta":174,"style":174},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[251,120097,120098,120102,120116,120120,120130,120134],{"__ignoreMap":174},[254,120099,120100],{"class":256,"line":257},[254,120101,120052],{"class":323},[254,120103,120104,120106,120108,120110,120113],{"class":256,"line":175},[254,120105,24717],{"class":2103},[254,120107,117457],{"class":369},[254,120109,23975],{"class":369},[254,120111,120112],{"class":369}," nvidia-driver",[254,120114,120115],{"class":369}," nvidia-settings\n",[254,120117,120118],{"class":256,"line":1319},[254,120119,120068],{"class":323},[254,120121,120122,120124,120126,120128],{"class":256,"line":1334},[254,120123,24717],{"class":2103},[254,120125,119776],{"class":369},[254,120127,119779],{"class":313},[254,120129,119782],{"class":369},[254,120131,120132],{"class":256,"line":1340},[254,120133,120083],{"class":323},[254,120135,120136],{"class":256,"line":1354},[254,120137,120088],{"class":2103},[22139,120139,120141],{"id":120140},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[14,120143,120144,120145,120148],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[414,120146,120147],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[14,120150,120151,120152],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[23694,120153,120154],{},[414,120155,120156],{},"（也可以不禁用桌面环境，直接进行下一步。）",[245,120158,120160],{"className":118663,"code":120159,"language":118665,"meta":174,"style":174},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[251,120161,120162,120167,120177,120182,120195,120200],{"__ignoreMap":174},[254,120163,120164],{"class":256,"line":257},[254,120165,120166],{"class":323},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[254,120168,120169,120171,120174],{"class":256,"line":175},[254,120170,24717],{"class":2103},[254,120172,120173],{"class":369}," telinit",[254,120175,120176],{"class":313}," 3\n",[254,120178,120179],{"class":256,"line":1319},[254,120180,120181],{"class":323},"# ubuntu 使用下方命令\n",[254,120183,120184,120186,120189,120192],{"class":256,"line":1334},[254,120185,24717],{"class":2103},[254,120187,120188],{"class":369}," service",[254,120190,120191],{"class":369}," lightdm",[254,120193,120194],{"class":369}," stop\n",[254,120196,120197],{"class":256,"line":1340},[254,120198,120199],{"class":323},"# Fedora 使用下方命令\n",[254,120201,120202,120204,120206,120209],{"class":256,"line":1354},[254,120203,24717],{"class":2103},[254,120205,26654],{"class":369},[254,120207,120208],{"class":369}," isolate",[254,120210,120211],{"class":369}," multi-user.target\n",[14,120213,120214],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[245,120216,120218],{"className":118663,"code":120217,"language":118665,"meta":174,"style":174},"# 编译环境+准备工作\nsudo apt install build-essential\n# 进入到.run目录中\ncd \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n# 给驱动文件增加可执行权限：\nsudo chmod a+x NVIDIA-Linux-x86_64-550.107.02.run\n# 然后执行安装：\nsudo .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\nsudo .\u002FNVIDIA-Linux-x86_64-550.107.02.run  --no-opengl-files\n",[251,120219,120220,120225,120236,120241,120248,120253,120265,120270,120277,120282],{"__ignoreMap":174},[254,120221,120222],{"class":256,"line":257},[254,120223,120224],{"class":323},"# 编译环境+准备工作\n",[254,120226,120227,120229,120231,120233],{"class":256,"line":175},[254,120228,24717],{"class":2103},[254,120230,117457],{"class":369},[254,120232,23975],{"class":369},[254,120234,120235],{"class":369}," build-essential\n",[254,120237,120238],{"class":256,"line":1319},[254,120239,120240],{"class":323},"# 进入到.run目录中\n",[254,120242,120243,120245],{"class":256,"line":1334},[254,120244,101417],{"class":313},[254,120246,120247],{"class":369}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[254,120249,120250],{"class":256,"line":1340},[254,120251,120252],{"class":323},"# 给驱动文件增加可执行权限：\n",[254,120254,120255,120257,120259,120262],{"class":256,"line":1354},[254,120256,24717],{"class":2103},[254,120258,24720],{"class":369},[254,120260,120261],{"class":369}," a+x",[254,120263,120264],{"class":369}," NVIDIA-Linux-x86_64-550.107.02.run\n",[254,120266,120267],{"class":256,"line":1360},[254,120268,120269],{"class":323},"# 然后执行安装：\n",[254,120271,120272,120274],{"class":256,"line":1451},[254,120273,24717],{"class":2103},[254,120275,120276],{"class":369}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[254,120278,120279],{"class":256,"line":1457},[254,120280,120281],{"class":323},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[254,120283,120284,120286,120289],{"class":256,"line":1469},[254,120285,24717],{"class":2103},[254,120287,120288],{"class":369}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[254,120290,120291],{"class":313},"  --no-opengl-files\n",[14,120293,120294],{},"安装完毕重启即可",[245,120296,120298],{"className":118663,"code":120297,"language":118665,"meta":174,"style":174},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[251,120299,120300,120304,120310,120314],{"__ignoreMap":174},[254,120301,120302],{"class":256,"line":257},[254,120303,120068],{"class":323},[254,120305,120306,120308],{"class":256,"line":175},[254,120307,24717],{"class":2103},[254,120309,26788],{"class":369},[254,120311,120312],{"class":256,"line":1319},[254,120313,120083],{"class":323},[254,120315,120316],{"class":256,"line":1334},[254,120317,120088],{"class":2103},[225,120319,120321],{"id":120320},"_353-安装cuda","3.5.3 安装CUDA",[14,120323,120324],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[14,120326,120327],{},[1602,120328],{"alt":174,"src":120329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[21,120331,120332],{},[24,120333,120334],{},"先查看显卡驱动所支持的最高CUDA版本",[245,120336,120337],{"className":118663,"code":120088,"language":118665,"meta":174,"style":174},[251,120338,120339],{"__ignoreMap":174},[254,120340,120341],{"class":256,"line":257},[254,120342,120088],{"class":2103},[14,120344,120345],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[14,120347,120348],{},[1602,120349],{"alt":174,"src":120350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[21,120352,120353],{"start":175},[24,120354,120355],{},"下载CUDA并安装CUDA",[14,120357,118442,120358],{},[42,120359,118445],{"href":118445,"rel":120360},[151],[14,120362,120363],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[14,120365,120366],{},[1602,120367],{"alt":174,"src":120368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[14,120370,120371,120372,120377],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[42,120373,120376],{"href":120374,"rel":120375},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[151],"Vinci机器人队单片机教程","）",[14,120379,120380],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[14,120382,120383],{},[1602,120384],{"alt":174,"src":120385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[14,120387,120388],{},"将最下方框框里的命令敲入终端",[245,120390,120392],{"className":118663,"code":120391,"language":118665,"meta":174,"style":174},"# 在当前文件夹下创建一个ttt的子文件夹\nmkdir -p .\u002Fttt\n# 进入ttt文件夹\ncd ttt\n# 输入复制的第一条命令（用来下载cuda的runfile文件）\nwget https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n# 给予权限\nsudo chmod a+x .\u002Fcuda_12.4.0_550.54.14_linux.run\n# 运行脚本\nsudo .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[251,120393,120394,120399,120408,120413,120420,120425,120433,120438,120449,120454],{"__ignoreMap":174},[254,120395,120396],{"class":256,"line":257},[254,120397,120398],{"class":323},"# 在当前文件夹下创建一个ttt的子文件夹\n",[254,120400,120401,120403,120405],{"class":256,"line":175},[254,120402,101407],{"class":2103},[254,120404,29357],{"class":313},[254,120406,120407],{"class":369}," .\u002Fttt\n",[254,120409,120410],{"class":256,"line":1319},[254,120411,120412],{"class":323},"# 进入ttt文件夹\n",[254,120414,120415,120417],{"class":256,"line":1334},[254,120416,101417],{"class":313},[254,120418,120419],{"class":369}," ttt\n",[254,120421,120422],{"class":256,"line":1340},[254,120423,120424],{"class":323},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[254,120426,120427,120430],{"class":256,"line":1354},[254,120428,120429],{"class":2103},"wget",[254,120431,120432],{"class":369}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[254,120434,120435],{"class":256,"line":1360},[254,120436,120437],{"class":323},"# 给予权限\n",[254,120439,120440,120442,120444,120446],{"class":256,"line":1451},[254,120441,24717],{"class":2103},[254,120443,24720],{"class":369},[254,120445,120261],{"class":369},[254,120447,120448],{"class":369}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[254,120450,120451],{"class":256,"line":1457},[254,120452,120453],{"class":323},"# 运行脚本\n",[254,120455,120456,120458],{"class":256,"line":1469},[254,120457,24717],{"class":2103},[254,120459,120448],{"class":369},[14,120461,120462],{},[1602,120463],{"alt":174,"src":120464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[14,120466,120467],{},"正在安装中：",[14,120469,120470],{},[1602,120471],{"alt":174,"src":120472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[14,120474,120475],{},"输入accept接受即可",[14,120477,120478],{},[1602,120479],{"alt":174,"src":120480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[14,120482,120483],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[14,120485,120486],{},[1602,120487],{"alt":174,"src":120488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[14,120490,120491],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[14,120493,120494],{},[1602,120495],{"alt":174,"src":120496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[21,120498,120499],{"start":1319},[24,120500,120501],{},"配置环境",[14,120503,120504],{},"根据上方确认一下路径，比如我上面红色框起来的为",[245,120506,120508],{"className":118663,"code":120507,"language":118665,"meta":174,"style":174},"Please make sure that \n -   PATH includes \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin \n -   LD_LIBRARY_PATH includes \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64, or, add \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64 to \u002Fetc\u002Fld.so.conf and run ldconfig as root\n",[251,120509,120510,120526,120541],{"__ignoreMap":174},[254,120511,120512,120515,120518,120521,120524],{"class":256,"line":257},[254,120513,120514],{"class":2103},"Please",[254,120516,120517],{"class":369}," make",[254,120519,120520],{"class":369}," sure",[254,120522,120523],{"class":369}," that",[254,120525,2814],{"class":264},[254,120527,120528,120530,120533,120536,120539],{"class":256,"line":175},[254,120529,52412],{"class":2103},[254,120531,120532],{"class":369},"   PATH",[254,120534,120535],{"class":369}," includes",[254,120537,120538],{"class":369}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[254,120540,2814],{"class":264},[254,120542,120543,120545,120548,120550,120553,120556,120558,120561,120564,120567,120570,120572,120575,120577],{"class":256,"line":1319},[254,120544,52412],{"class":2103},[254,120546,120547],{"class":369},"   LD_LIBRARY_PATH",[254,120549,120535],{"class":369},[254,120551,120552],{"class":369}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[254,120554,120555],{"class":369}," or,",[254,120557,5350],{"class":369},[254,120559,120560],{"class":369}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[254,120562,120563],{"class":369}," to",[254,120565,120566],{"class":369}," \u002Fetc\u002Fld.so.conf",[254,120568,120569],{"class":369}," and",[254,120571,27371],{"class":369},[254,120573,120574],{"class":369}," ldconfig",[254,120576,64745],{"class":369},[254,120578,120579],{"class":369}," root\n",[14,120581,120582],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[245,120584,120586],{"className":118663,"code":120585,"language":118665,"meta":174,"style":174},"which nvcc\n",[251,120587,120588],{"__ignoreMap":174},[254,120589,120590,120593],{"class":256,"line":257},[254,120591,120592],{"class":313},"which",[254,120594,120595],{"class":369}," nvcc\n",[14,120597,120598],{},[1602,120599],{"alt":174,"src":120600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[14,120602,120603],{},"所以我进行以下操作：",[245,120605,120607],{"className":118663,"code":120606,"language":118665,"meta":174,"style":174},"sudo vim ~\u002F.bashrc\n",[251,120608,120609],{"__ignoreMap":174},[254,120610,120611,120613,120615],{"class":256,"line":257},[254,120612,24717],{"class":2103},[254,120614,118723],{"class":369},[254,120616,120617],{"class":369}," ~\u002F.bashrc\n",[14,120619,120620],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[245,120622,120624],{"className":118663,"code":120623,"language":118665,"meta":174,"style":174},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[251,120625,120626,120638],{"__ignoreMap":174},[254,120627,120628,120630,120633,120635],{"class":256,"line":257},[254,120629,25183],{"class":260},[254,120631,120632],{"class":264}," PATH",[254,120634,310],{"class":260},[254,120636,120637],{"class":264},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[254,120639,120640,120642,120645,120647],{"class":256,"line":175},[254,120641,25183],{"class":260},[254,120643,120644],{"class":264}," LD_LIBRARY_PATH",[254,120646,310],{"class":260},[254,120648,120649],{"class":264},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[14,120651,120652],{},[1602,120653],{"alt":174,"src":120654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[245,120656,120658],{"className":118663,"code":120657,"language":118665,"meta":174,"style":174},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[251,120659,120660,120665,120671,120676],{"__ignoreMap":174},[254,120661,120662],{"class":256,"line":257},[254,120663,120664],{"class":323},"# 刷新当前终端的环境变量\n",[254,120666,120667,120669],{"class":256,"line":175},[254,120668,101034],{"class":313},[254,120670,120617],{"class":369},[254,120672,120673],{"class":256,"line":1319},[254,120674,120675],{"class":323},"# 验证CUDA是否安装成功\n",[254,120677,120678,120681],{"class":256,"line":1334},[254,120679,120680],{"class":2103},"nvcc",[254,120682,120683],{"class":313}," -V\n",[14,120685,120686],{},"出现下图这种则安装成功。",[14,120688,120689],{},[1602,120690],{"alt":174,"src":120691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[225,120693,120695],{"id":120694},"_354-安装cudnn","3.5.4 安装cuDNN",[21,120697,120698],{},[24,120699,120700],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[14,120702,120703,120704,120709],{},"前往 NVIDIA cuDNN 下载页面：",[42,120705,120708],{"href":120706,"rel":120707},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[151],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[14,120711,120712],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[14,120714,120715],{},[1602,120716],{"alt":174,"src":120717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[14,120719,120720],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[14,120722,120723],{},[1602,120724],{"alt":174,"src":120725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[14,120727,120728],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[14,120730,120731],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[14,120733,120734],{},[414,120735,120736],{},"我这里选择所有Linux X86_64最通用的办法：",[14,120738,120739],{},"下载好的：",[14,120741,120742],{},[1602,120743],{"alt":174,"src":120744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[21,120746,120747],{"start":175},[24,120748,120749],{},"安装cuDNN",[14,120751,120752],{},"找到该文件所在目录，并打开终端，cd到该目录。",[14,120754,120755],{},[1602,120756],{"alt":174,"src":120757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[14,120759,120760],{},"解压文件，并复制到对应位置完成安装",[245,120762,120764],{"className":118663,"code":120763,"language":118665,"meta":174,"style":174},"# 解压cuDNN文件\ntar -xvf .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n# cd进文件夹\ncd .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n# 复制cuDNN文件到CUDA目录\nsudo cp include\u002Fcudnn*    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude \nsudo cp lib\u002Flibcudnn*    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n# 对比一下有没有缺文件\nls \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn* \nls \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn*\n# 给予权限\nsudo chmod a+r \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn*   \nsudo chmod a+r \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn*\n",[251,120765,120766,120771,120782,120787,120794,120799,120815,120829,120834,120845,120854,120858,120874],{"__ignoreMap":174},[254,120767,120768],{"class":256,"line":257},[254,120769,120770],{"class":323},"# 解压cuDNN文件\n",[254,120772,120773,120776,120779],{"class":256,"line":175},[254,120774,120775],{"class":2103},"tar",[254,120777,120778],{"class":313}," -xvf",[254,120780,120781],{"class":369}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[254,120783,120784],{"class":256,"line":1319},[254,120785,120786],{"class":323},"# cd进文件夹\n",[254,120788,120789,120791],{"class":256,"line":1334},[254,120790,101417],{"class":313},[254,120792,120793],{"class":369}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[254,120795,120796],{"class":256,"line":1340},[254,120797,120798],{"class":323},"# 复制cuDNN文件到CUDA目录\n",[254,120800,120801,120803,120805,120808,120810,120813],{"class":256,"line":1354},[254,120802,24717],{"class":2103},[254,120804,28002],{"class":369},[254,120806,120807],{"class":369}," include\u002Fcudnn",[254,120809,719],{"class":313},[254,120811,120812],{"class":369},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[254,120814,2814],{"class":264},[254,120816,120817,120819,120821,120824,120826],{"class":256,"line":1360},[254,120818,24717],{"class":2103},[254,120820,28002],{"class":369},[254,120822,120823],{"class":369}," lib\u002Flibcudnn",[254,120825,719],{"class":313},[254,120827,120828],{"class":369},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[254,120830,120831],{"class":256,"line":1451},[254,120832,120833],{"class":323},"# 对比一下有没有缺文件\n",[254,120835,120836,120838,120841,120843],{"class":256,"line":1457},[254,120837,26902],{"class":2103},[254,120839,120840],{"class":369}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[254,120842,719],{"class":313},[254,120844,2814],{"class":264},[254,120846,120847,120849,120852],{"class":256,"line":1469},[254,120848,26902],{"class":2103},[254,120850,120851],{"class":369}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[254,120853,119388],{"class":313},[254,120855,120856],{"class":256,"line":1752},[254,120857,120437],{"class":323},[254,120859,120860,120862,120864,120867,120869,120871],{"class":256,"line":1757},[254,120861,24717],{"class":2103},[254,120863,24720],{"class":369},[254,120865,120866],{"class":369}," a+r",[254,120868,120840],{"class":369},[254,120870,719],{"class":313},[254,120872,120873],{"class":264},"   \n",[254,120875,120876,120878,120880,120882,120884],{"class":256,"line":1763},[254,120877,24717],{"class":2103},[254,120879,24720],{"class":369},[254,120881,120866],{"class":369},[254,120883,120851],{"class":369},[254,120885,119388],{"class":313},[21,120887,120888],{"start":1319},[24,120889,120890],{},"检查是否安装成功",[245,120892,120894],{"className":118663,"code":120893,"language":118665,"meta":174,"style":174},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[251,120895,120896,120901],{"__ignoreMap":174},[254,120897,120898],{"class":256,"line":257},[254,120899,120900],{"class":323},"# 检查cuDNN版本命令\n",[254,120902,120903,120906,120909,120911,120913,120916,120919],{"class":256,"line":175},[254,120904,120905],{"class":2103},"cat",[254,120907,120908],{"class":369}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[254,120910,25250],{"class":260},[254,120912,30377],{"class":2103},[254,120914,120915],{"class":369}," CUDNN_MAJOR",[254,120917,120918],{"class":313}," -A",[254,120920,47864],{"class":313},[14,120922,120923],{},"出现下图这样的就是安装成功了",[14,120925,120926],{},[1602,120927],{"alt":174,"src":120928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[21,120930,120931],{"start":1334},[24,120932,120933],{},"软链接(一般不需要)",[245,120935,120937],{"className":118663,"code":120936,"language":118665,"meta":174,"style":174},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[251,120938,120939,120944],{"__ignoreMap":174},[254,120940,120941],{"class":256,"line":257},[254,120942,120943],{"class":323},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[254,120945,120946,120948],{"class":256,"line":175},[254,120947,24717],{"class":2103},[254,120949,120950],{"class":369}," ldconfig\n",[14,120952,120953],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[245,120955,120960],{"className":120956,"code":120957,"language":120958,"meta":120959,"style":174},"language-Plain shiki shiki-themes github-light github-dark","ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \nldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \nldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \nldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \nldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \nldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \nldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n","Plain","Text",[251,120961,120962,120967,120972,120977,120982,120987,120992],{"__ignoreMap":174},[254,120963,120964],{"class":256,"line":257},[254,120965,120966],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[254,120968,120969],{"class":256,"line":175},[254,120970,120971],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[254,120973,120974],{"class":256,"line":1319},[254,120975,120976],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[254,120978,120979],{"class":256,"line":1334},[254,120980,120981],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[254,120983,120984],{"class":256,"line":1340},[254,120985,120986],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[254,120988,120989],{"class":256,"line":1354},[254,120990,120991],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[254,120993,120994],{"class":256,"line":1360},[254,120995,120996],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[14,120998,120999],{},"运行下方的命令",[245,121001,121003],{"className":118663,"code":121002,"language":118665,"meta":174,"style":174},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[251,121004,121005,121010,121017,121022],{"__ignoreMap":174},[254,121006,121007],{"class":256,"line":257},[254,121008,121009],{"class":323},"# cd进入CUDA路径\n",[254,121011,121012,121014],{"class":256,"line":175},[254,121013,101417],{"class":313},[254,121015,121016],{"class":369}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[254,121018,121019],{"class":256,"line":1319},[254,121020,121021],{"class":323}," # 查看本路径下的需要软链接的文件名\n",[254,121023,121024],{"class":256,"line":1334},[254,121025,121026],{"class":2103}," ls\n",[14,121028,121029],{},[1602,121030],{"alt":174,"src":121031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[14,121033,121034,121035,18551,121038,18551,121041,121044],{},"如上图，我需要将",[251,121036,121037],{},"libcudnn_xxx_xxxxx.so.8.9.7",[251,121039,121040],{},"libcudnn_xxx_xxxxx.so.8",[251,121042,121043],{},"libcudnn_xxx_xxxxx.so","软链接",[245,121046,121048],{"className":118663,"code":121047,"language":118665,"meta":174,"style":174},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\nsudo ln -sf libcudnn_cnn_train.so.8.9.7 libcudnn_cnn_train.so.8\nsudo ln -sf libcudnn_adv_infer.so.8.9.7 libcudnn_adv_infer.so.8\nsudo ln -sf libcudnn_adv_train.so.8.9.7 libcudnn_adv_train.so.8\nsudo ln -sf libcudnn_cnn_infer.so.8.9.7 libcudnn_cnn_infer.so.8\nsudo ln -sf libcudnn.so.8.9.7 libcudnn.so.8\nsudo ln -sf libcudnn_ops_infer.so.8.9.7 libcudnn_ops_infer.so.8\nsudo ln -sf libcudnn_ops_train.so.8.9.7 libcudnn_ops_train.so.8\n# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\nsudo ldconfig\n# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\nls -l \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_*.so*\n",[251,121049,121050,121055,121071,121085,121099,121113,121127,121141,121155,121160,121166,121171],{"__ignoreMap":174},[254,121051,121052],{"class":256,"line":257},[254,121053,121054],{"class":323},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[254,121056,121057,121059,121062,121065,121068],{"class":256,"line":175},[254,121058,24717],{"class":2103},[254,121060,121061],{"class":369}," ln",[254,121063,121064],{"class":313}," -sf",[254,121066,121067],{"class":369}," libcudnn_cnn_train.so.8.9.7",[254,121069,121070],{"class":369}," libcudnn_cnn_train.so.8\n",[254,121072,121073,121075,121077,121079,121082],{"class":256,"line":1319},[254,121074,24717],{"class":2103},[254,121076,121061],{"class":369},[254,121078,121064],{"class":313},[254,121080,121081],{"class":369}," libcudnn_adv_infer.so.8.9.7",[254,121083,121084],{"class":369}," libcudnn_adv_infer.so.8\n",[254,121086,121087,121089,121091,121093,121096],{"class":256,"line":1334},[254,121088,24717],{"class":2103},[254,121090,121061],{"class":369},[254,121092,121064],{"class":313},[254,121094,121095],{"class":369}," libcudnn_adv_train.so.8.9.7",[254,121097,121098],{"class":369}," libcudnn_adv_train.so.8\n",[254,121100,121101,121103,121105,121107,121110],{"class":256,"line":1340},[254,121102,24717],{"class":2103},[254,121104,121061],{"class":369},[254,121106,121064],{"class":313},[254,121108,121109],{"class":369}," libcudnn_cnn_infer.so.8.9.7",[254,121111,121112],{"class":369}," libcudnn_cnn_infer.so.8\n",[254,121114,121115,121117,121119,121121,121124],{"class":256,"line":1354},[254,121116,24717],{"class":2103},[254,121118,121061],{"class":369},[254,121120,121064],{"class":313},[254,121122,121123],{"class":369}," libcudnn.so.8.9.7",[254,121125,121126],{"class":369}," libcudnn.so.8\n",[254,121128,121129,121131,121133,121135,121138],{"class":256,"line":1360},[254,121130,24717],{"class":2103},[254,121132,121061],{"class":369},[254,121134,121064],{"class":313},[254,121136,121137],{"class":369}," libcudnn_ops_infer.so.8.9.7",[254,121139,121140],{"class":369}," libcudnn_ops_infer.so.8\n",[254,121142,121143,121145,121147,121149,121152],{"class":256,"line":1451},[254,121144,24717],{"class":2103},[254,121146,121061],{"class":369},[254,121148,121064],{"class":313},[254,121150,121151],{"class":369}," libcudnn_ops_train.so.8.9.7",[254,121153,121154],{"class":369}," libcudnn_ops_train.so.8\n",[254,121156,121157],{"class":256,"line":1457},[254,121158,121159],{"class":323},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[254,121161,121162,121164],{"class":256,"line":1469},[254,121163,24717],{"class":2103},[254,121165,120950],{"class":369},[254,121167,121168],{"class":256,"line":1752},[254,121169,121170],{"class":323},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[254,121172,121173,121175,121178,121181,121183,121186],{"class":256,"line":1757},[254,121174,26902],{"class":2103},[254,121176,121177],{"class":313}," -l",[254,121179,121180],{"class":369}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[254,121182,719],{"class":313},[254,121184,121185],{"class":369},".so",[254,121187,119388],{"class":313},[225,121189,121191],{"id":121190},"_355-常见问题","3.5.5 常见问题",[21,121193,121194],{},[24,121195,121196],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[245,121198,121200],{"className":118663,"code":121199,"language":118665,"meta":174,"style":174},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[251,121201,121202],{"__ignoreMap":174},[254,121203,121204,121206,121208],{"class":256,"line":257},[254,121205,24717],{"class":2103},[254,121207,118723],{"class":369},[254,121209,121210],{"class":369}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[14,121212,121213],{},"blacklist-nouveau.conf文件内容如下：",[245,121215,121217],{"className":118663,"code":121216,"language":118665,"meta":174,"style":174},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[251,121218,121219,121227,121234,121246,121256],{"__ignoreMap":174},[254,121220,121221,121224],{"class":256,"line":257},[254,121222,121223],{"class":2103},"blacklist",[254,121225,121226],{"class":369}," nouveau\n",[254,121228,121229,121231],{"class":256,"line":175},[254,121230,121223],{"class":2103},[254,121232,121233],{"class":369}," lbm-nouveau\n",[254,121235,121236,121238,121241,121244],{"class":256,"line":1319},[254,121237,116071],{"class":2103},[254,121239,121240],{"class":369}," nouveau",[254,121242,121243],{"class":369}," modeset=",[254,121245,3225],{"class":313},[254,121247,121248,121251,121253],{"class":256,"line":1334},[254,121249,121250],{"class":313},"alias",[254,121252,121240],{"class":369},[254,121254,121255],{"class":369}," off\n",[254,121257,121258,121260,121263],{"class":256,"line":1340},[254,121259,121250],{"class":313},[254,121261,121262],{"class":369}," lbm-nouveau",[254,121264,121255],{"class":369},[14,121266,121267],{},"接着运行下方命令",[245,121269,121271],{"className":118663,"code":121270,"language":118665,"meta":174,"style":174},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[251,121272,121273,121283,121288],{"__ignoreMap":174},[254,121274,121275,121277,121280],{"class":256,"line":257},[254,121276,24717],{"class":2103},[254,121278,121279],{"class":369}," update-initramfs",[254,121281,121282],{"class":313}," -u\n",[254,121284,121285],{"class":256,"line":175},[254,121286,121287],{"class":2103},"或者\n",[254,121289,121290,121292,121295],{"class":256,"line":1319},[254,121291,24717],{"class":2103},[254,121293,121294],{"class":369}," dracut",[254,121296,121297],{"class":313}," --force\n",[14,121299,121300],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[245,121302,121304],{"className":118663,"code":121303,"language":118665,"meta":174,"style":174},"lsmod | grep nouveau\n",[251,121305,121306],{"__ignoreMap":174},[254,121307,121308,121311,121313,121315],{"class":256,"line":257},[254,121309,121310],{"class":2103},"lsmod",[254,121312,25250],{"class":260},[254,121314,30377],{"class":2103},[254,121316,121226],{"class":369},[21,121318,121319],{"start":175},[24,121320,121321],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[245,121323,121325],{"className":118663,"code":121324,"language":118665,"meta":174,"style":174},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[251,121326,121327],{"__ignoreMap":174},[254,121328,121329,121331,121333],{"class":256,"line":257},[254,121330,24717],{"class":2103},[254,121332,118723],{"class":369},[254,121334,121335],{"class":369}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[14,121337,121338],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[245,121340,121342],{"className":118663,"code":121341,"language":118665,"meta":174,"style":174},"Section \"OutputClass\"\n   Identifier \"nvidia\"\n   MatchDriver \"nvidia-drm\"\n   Driver \"nvidia\"\n   Option \"AllowEmptyInitialConfiguration\"\n   Option \"PrimaryGPU\" \"yes\"\n   ModulePath \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\nEndSection\n",[251,121343,121344,121352,121360,121368,121375,121383,121393,121401],{"__ignoreMap":174},[254,121345,121346,121349],{"class":256,"line":257},[254,121347,121348],{"class":2103},"Section",[254,121350,121351],{"class":369}," \"OutputClass\"\n",[254,121353,121354,121357],{"class":256,"line":175},[254,121355,121356],{"class":2103},"   Identifier",[254,121358,121359],{"class":369}," \"nvidia\"\n",[254,121361,121362,121365],{"class":256,"line":1319},[254,121363,121364],{"class":2103},"   MatchDriver",[254,121366,121367],{"class":369}," \"nvidia-drm\"\n",[254,121369,121370,121373],{"class":256,"line":1334},[254,121371,121372],{"class":2103},"   Driver",[254,121374,121359],{"class":369},[254,121376,121377,121380],{"class":256,"line":1340},[254,121378,121379],{"class":2103},"   Option",[254,121381,121382],{"class":369}," \"AllowEmptyInitialConfiguration\"\n",[254,121384,121385,121387,121390],{"class":256,"line":1354},[254,121386,121379],{"class":2103},[254,121388,121389],{"class":369}," \"PrimaryGPU\"",[254,121391,121392],{"class":369}," \"yes\"\n",[254,121394,121395,121398],{"class":256,"line":1360},[254,121396,121397],{"class":2103},"   ModulePath",[254,121399,121400],{"class":369}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[254,121402,121403],{"class":256,"line":1451},[254,121404,121405],{"class":2103},"EndSection\n",[21,121407,121408],{"start":1319},[24,121409,121410],{},"安装N卡驱动提示错误",[245,121412,121414],{"className":120956,"code":121413,"language":120958,"meta":120959,"style":174},"Unable to find the kernel source tree for the currently running kernel.  Please make sure you have installed the kernel source files for your kernel and that they are properly configured; on Red Hat Linux systems, for example, be sure you have the 'kernel-source' or 'kernel-devel' RPM installed.If you know the correct kernel source files are installed, you may specify the kernel source path with the '--kernel-source-path' command line option.\n",[251,121415,121416],{"__ignoreMap":174},[254,121417,121418],{"class":256,"line":257},[254,121419,121413],{},[21,121421,121422],{},[24,121423,121424],{},"检查当前运行的内核版本：",[14,121426,121427],{},"运行以下命令以查看你当前正在使用的内核版本：",[245,121429,121431],{"className":117436,"code":121430,"language":117438,"meta":174,"style":174},"uname -r\n",[251,121432,121433],{"__ignoreMap":174},[254,121434,121435,121437],{"class":256,"line":257},[254,121436,70345],{"class":2103},[254,121438,121439],{"class":313}," -r\n",[21,121441,121442],{"start":175},[24,121443,121444],{},"安装内核开发文件：",[14,121446,121447,121448,121451],{},"确保你已经安装了与当前内核版本相匹配的 ",[251,121449,121450],{},"kernel-devel"," 包。运行以下命令来安装：",[245,121453,121455],{"className":117436,"code":121454,"language":117438,"meta":174,"style":174},"sudo dnf install kernel-devel-$(uname -r)\n",[251,121456,121457],{"__ignoreMap":174},[254,121458,121459,121461,121463,121465,121468,121470,121472,121474],{"class":256,"line":257},[254,121460,24717],{"class":2103},[254,121462,26456],{"class":369},[254,121464,23975],{"class":369},[254,121466,121467],{"class":369}," kernel-devel-",[254,121469,25240],{"class":264},[254,121471,70345],{"class":2103},[254,121473,119779],{"class":313},[254,121475,271],{"class":264},[14,121477,121478],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[21,121480,121481],{"start":1319},[24,121482,121483],{},"安装内核源代码（如果需要）：",[14,121485,121486],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[245,121488,121490],{"className":117436,"code":121489,"language":117438,"meta":174,"style":174},"sudo dnf install kernel-headers kernel-source\n",[251,121491,121492],{"__ignoreMap":174},[254,121493,121494,121496,121498,121500,121503],{"class":256,"line":257},[254,121495,24717],{"class":2103},[254,121497,26456],{"class":369},[254,121499,23975],{"class":369},[254,121501,121502],{"class":369}," kernel-headers",[254,121504,121505],{"class":369}," kernel-source\n",[21,121507,121508],{"start":1334},[24,121509,121510],{},"检查安装：",[14,121512,121513,121514,121517],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[251,121515,121516],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[245,121519,121521],{"className":117436,"code":121520,"language":117438,"meta":174,"style":174},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[251,121522,121523],{"__ignoreMap":174},[254,121524,121525,121527],{"class":256,"line":257},[254,121526,26902],{"class":2103},[254,121528,121529],{"class":369}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[14,121531,121532,121533,121536],{},"如果仍然遇到问题，可以通过 ",[251,121534,121535],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[5267,121538,121539],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":174,"searchDepth":175,"depth":175,"links":121541},[121542,121546,121556,121560,121561],{"id":118639,"depth":175,"text":118640,"children":121543},[121544,121545],{"id":118649,"depth":1319,"text":118650},{"id":118659,"depth":1319,"text":118660},{"id":118859,"depth":175,"text":118860,"children":121547},[121548,121549,121550,121551,121552,121553,121554,121555],{"id":118863,"depth":1319,"text":118864},{"id":118933,"depth":1319,"text":118934},{"id":119022,"depth":1319,"text":119023},{"id":119267,"depth":1319,"text":119268},{"id":119337,"depth":1319,"text":119338},{"id":119404,"depth":1319,"text":119405},{"id":119439,"depth":1319,"text":119440},{"id":119494,"depth":1319,"text":119495},{"id":119545,"depth":175,"text":119546,"children":121557},[121558,121559],{"id":119549,"depth":1319,"text":119550},{"id":119629,"depth":1319,"text":119630},{"id":119815,"depth":175,"text":119816},{"id":119988,"depth":175,"text":119989,"children":121562},[121563,121564,121565,121566,121567],{"id":119992,"depth":1319,"text":119993},{"id":120033,"depth":1319,"text":120034},{"id":120320,"depth":1319,"text":120321},{"id":120694,"depth":1319,"text":120695},{"id":121190,"depth":1319,"text":121191},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":118631,"description":23518},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":121574,"title":121575,"body":121576,"description":23518,"extension":181,"meta":121916,"navigation":184,"path":121917,"seo":121918,"stem":121919,"__hash__":121920},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":121577,"toc":121914},[121578,121581,121586,121589,121835,121840,121843,121879,121882,121911],[10,121579,121575],{"id":121580},"_4-命令教程长期积累",[21,121582,121583],{},[24,121584,121585],{},"大多数命令",[14,121587,121588],{},"常用 Linux 命令速查：",[245,121590,121592],{"className":117436,"code":121591,"language":117438,"meta":174,"style":174},"# 文件与目录\nls        # 列出目录内容\ncd        # 切换目录\npwd       # 显示当前路径\nmkdir     # 创建目录\nrm        # 删除文件或目录\ncp        # 复制文件或目录\nmv        # 移动\u002F重命名文件或目录\ntouch     # 创建空文件\ncat       # 查看文件内容\nhead\u002Ftail # 查看文件头部\u002F尾部\n\n# 权限管理\nchmod     # 修改文件权限\nchown     # 修改文件所有者\nsudo      # 以管理员身份执行\n\n# 系统信息\nuname     # 系统信息\ndf        # 磁盘使用情况\nfree      # 内存使用情况\ntop\u002Fhtop  # 进程监控\nps        # 查看进程\n\n# 网络\nping      # 测试网络连通性\ncurl      # 发送 HTTP 请求\nwget      # 下载文件\nssh       # 远程登录\nscp       # 远程文件传输\n\n# 包管理（Debian\u002FUbuntu）\napt update   # 更新软件源\napt install  # 安装软件包\napt remove   # 卸载软件包\n",[251,121593,121594,121599,121606,121613,121621,121628,121635,121643,121651,121658,121665,121673,121677,121682,121689,121697,121704,121708,121713,121720,121728,121736,121744,121752,121756,121761,121769,121776,121783,121791,121799,121803,121808,121817,121826],{"__ignoreMap":174},[254,121595,121596],{"class":256,"line":257},[254,121597,121598],{"class":323},"# 文件与目录\n",[254,121600,121601,121603],{"class":256,"line":175},[254,121602,26902],{"class":2103},[254,121604,121605],{"class":323},"        # 列出目录内容\n",[254,121607,121608,121610],{"class":256,"line":1319},[254,121609,101417],{"class":313},[254,121611,121612],{"class":323},"        # 切换目录\n",[254,121614,121615,121618],{"class":256,"line":1334},[254,121616,121617],{"class":313},"pwd",[254,121619,121620],{"class":323},"       # 显示当前路径\n",[254,121622,121623,121625],{"class":256,"line":1340},[254,121624,101407],{"class":2103},[254,121626,121627],{"class":323},"     # 创建目录\n",[254,121629,121630,121632],{"class":256,"line":1354},[254,121631,25463],{"class":2103},[254,121633,121634],{"class":323},"        # 删除文件或目录\n",[254,121636,121637,121640],{"class":256,"line":1360},[254,121638,121639],{"class":2103},"cp",[254,121641,121642],{"class":323},"        # 复制文件或目录\n",[254,121644,121645,121648],{"class":256,"line":1451},[254,121646,121647],{"class":2103},"mv",[254,121649,121650],{"class":323},"        # 移动\u002F重命名文件或目录\n",[254,121652,121653,121655],{"class":256,"line":1457},[254,121654,101424],{"class":2103},[254,121656,121657],{"class":323},"     # 创建空文件\n",[254,121659,121660,121662],{"class":256,"line":1469},[254,121661,120905],{"class":2103},[254,121663,121664],{"class":323},"       # 查看文件内容\n",[254,121666,121667,121670],{"class":256,"line":1752},[254,121668,121669],{"class":2103},"head\u002Ftail",[254,121671,121672],{"class":323}," # 查看文件头部\u002F尾部\n",[254,121674,121675],{"class":256,"line":1757},[254,121676,2540],{"emptyLinePlaceholder":184},[254,121678,121679],{"class":256,"line":1763},[254,121680,121681],{"class":323},"# 权限管理\n",[254,121683,121684,121686],{"class":256,"line":1768},[254,121685,24752],{"class":2103},[254,121687,121688],{"class":323},"     # 修改文件权限\n",[254,121690,121691,121694],{"class":256,"line":1782},[254,121692,121693],{"class":2103},"chown",[254,121695,121696],{"class":323},"     # 修改文件所有者\n",[254,121698,121699,121701],{"class":256,"line":1787},[254,121700,24717],{"class":2103},[254,121702,121703],{"class":323},"      # 以管理员身份执行\n",[254,121705,121706],{"class":256,"line":1793},[254,121707,2540],{"emptyLinePlaceholder":184},[254,121709,121710],{"class":256,"line":1814},[254,121711,121712],{"class":323},"# 系统信息\n",[254,121714,121715,121717],{"class":256,"line":1819},[254,121716,70345],{"class":2103},[254,121718,121719],{"class":323},"     # 系统信息\n",[254,121721,121722,121725],{"class":256,"line":1833},[254,121723,121724],{"class":2103},"df",[254,121726,121727],{"class":323},"        # 磁盘使用情况\n",[254,121729,121730,121733],{"class":256,"line":1838},[254,121731,121732],{"class":2103},"free",[254,121734,121735],{"class":323},"      # 内存使用情况\n",[254,121737,121738,121741],{"class":256,"line":1867},[254,121739,121740],{"class":2103},"top\u002Fhtop",[254,121742,121743],{"class":323},"  # 进程监控\n",[254,121745,121746,121749],{"class":256,"line":1872},[254,121747,121748],{"class":2103},"ps",[254,121750,121751],{"class":323},"        # 查看进程\n",[254,121753,121754],{"class":256,"line":1889},[254,121755,2540],{"emptyLinePlaceholder":184},[254,121757,121758],{"class":256,"line":1894},[254,121759,121760],{"class":323},"# 网络\n",[254,121762,121763,121766],{"class":256,"line":1899},[254,121764,121765],{"class":2103},"ping",[254,121767,121768],{"class":323},"      # 测试网络连通性\n",[254,121770,121771,121773],{"class":256,"line":1904},[254,121772,26990],{"class":2103},[254,121774,121775],{"class":323},"      # 发送 HTTP 请求\n",[254,121777,121778,121780],{"class":256,"line":1918},[254,121779,120429],{"class":2103},[254,121781,121782],{"class":323},"      # 下载文件\n",[254,121784,121785,121788],{"class":256,"line":1923},[254,121786,121787],{"class":2103},"ssh",[254,121789,121790],{"class":323},"       # 远程登录\n",[254,121792,121793,121796],{"class":256,"line":2717},[254,121794,121795],{"class":2103},"scp",[254,121797,121798],{"class":323},"       # 远程文件传输\n",[254,121800,121801],{"class":256,"line":2731},[254,121802,2540],{"emptyLinePlaceholder":184},[254,121804,121805],{"class":256,"line":2739},[254,121806,121807],{"class":323},"# 包管理（Debian\u002FUbuntu）\n",[254,121809,121810,121812,121814],{"class":256,"line":2744},[254,121811,117508],{"class":2103},[254,121813,117487],{"class":369},[254,121815,121816],{"class":323},"   # 更新软件源\n",[254,121818,121819,121821,121823],{"class":256,"line":2750},[254,121820,117508],{"class":2103},[254,121822,23975],{"class":369},[254,121824,121825],{"class":323},"  # 安装软件包\n",[254,121827,121828,121830,121832],{"class":256,"line":2756},[254,121829,117508],{"class":2103},[254,121831,26220],{"class":369},[254,121833,121834],{"class":323},"   # 卸载软件包\n",[21,121836,121837],{"start":175},[24,121838,121839],{},"KDE Dolphin 以root打开",[14,121841,121842],{},"kde5",[245,121844,121846],{"className":117436,"code":121845,"language":117438,"meta":174,"style":174},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[251,121847,121848],{"__ignoreMap":174},[254,121849,121850,121853,121856,121859,121861,121863,121866,121869,121871,121874,121876],{"class":256,"line":257},[254,121851,121852],{"class":2103},"pkexec",[254,121854,121855],{"class":369}," env",[254,121857,121858],{"class":369}," DISPLAY=",[254,121860,28284],{"class":264},[254,121862,28342],{"class":369},[254,121864,121865],{"class":264},"$XAUTHORITY ",[254,121867,121868],{"class":369},"KDE_SESSION_VERSION=",[254,121870,583],{"class":313},[254,121872,121873],{"class":369}," KDE_FULL_SESSION=",[254,121875,1502],{"class":313},[254,121877,121878],{"class":369}," dolphin\n",[14,121880,121881],{},"kde6",[245,121883,121885],{"className":117436,"code":121884,"language":117438,"meta":174,"style":174},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[251,121886,121887],{"__ignoreMap":174},[254,121888,121889,121891,121893,121895,121897,121899,121901,121903,121905,121907,121909],{"class":256,"line":257},[254,121890,121852],{"class":2103},[254,121892,121855],{"class":369},[254,121894,121858],{"class":369},[254,121896,28284],{"class":264},[254,121898,28342],{"class":369},[254,121900,121865],{"class":264},[254,121902,121868],{"class":369},[254,121904,608],{"class":313},[254,121906,121873],{"class":369},[254,121908,1502],{"class":313},[254,121910,121878],{"class":369},[5267,121912,121913],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":174,"searchDepth":175,"depth":175,"links":121915},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":121575,"description":23518},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":121922,"title":121923,"body":121924,"description":23518,"extension":181,"meta":121938,"navigation":184,"path":121939,"seo":121940,"stem":121941,"__hash__":121942},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":121925,"toc":121936},[121926,121929],[10,121927,121923],{"id":121928},"_5-各种环境配置",[14,121930,121931],{},[42,121932,121935],{"href":121933,"rel":121934},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[151],"电控组环境搭建大全",{"title":174,"searchDepth":175,"depth":175,"links":121937},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":121923,"description":23518},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":121944,"title":121945,"body":121946,"description":23518,"extension":181,"meta":122294,"navigation":184,"path":122295,"seo":122296,"stem":122297,"__hash__":122298},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":121947,"toc":122286},[121948,121951,121955,121959,121963,121968,121975,121979,122272,122276,122283],[10,121949,121945],{"id":121950},"_6-拓展功能",[34,121952,121954],{"id":121953},"_61-wine","6.1 Wine",[34,121956,121958],{"id":121957},"_62-android","6.2 Android",[225,121960,121962],{"id":121961},"_621-i卡a卡","6.2.1 I卡、A卡",[21,121964,121965],{},[24,121966,121967],{},"Wayland-Waydroid(体验超级好)",[14,121969,121970,121971],{},"Waydroid 官网与安装指南：",[42,121972,121973],{"href":121973,"rel":121974},"https:\u002F\u002Fwaydro.id\u002F",[151],[225,121976,121978],{"id":121977},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[21,121980,121981],{},[24,121982,121983,121984,121986,121987,121991,121993,121996,122001,122198],{},"QEMU-KVM虚拟机 + BlissOS-X86",[53857,121985],{},"BlissOS 官网下载：",[42,121988,121989],{"href":121989,"rel":121990},"https:\u002F\u002Fblissos.org\u002F",[151],[53857,121992],{},[1602,121994],{"alt":174,"src":121995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[21,121997,121998],{"start":1319},[24,121999,122000],{},"比较推荐的配置",[245,122002,122004],{"className":117436,"code":122003,"language":117438,"meta":174,"style":174},"qemu-system-x86_64 \\\n        -M q35,vmport=off \\\n        -accel kvm \\\n        -cpu qemu64,+sse3,+sse4.2 \\\n        -smp 8,cores=4 \\\n        -m 6G \\\n        -usb \\\n        -device virtio-tablet \\\n        -device virtio-keyboard \\\n        -device usb-tablet \\\n        -bios OVMF-pure-efi64.fd \\\n        -net user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022 \\\n        -net nic,model=virtio \\\n        -audio sdl,model=hda \\\n        -display sdl,gl=on,show-cursor=on \\\n        -device virtio-vga-gl,xres=1920,yres=1080 \\\n        -drive file=disk.qcow2,media=disk,if=virtio,cache=writeback \\\n        -drive file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom \\\n        -monitor stdio \\\n        -serial none\n",[251,122005,122006,122013,122023,122033,122043,122055,122065,122072,122082,122091,122100,122110,122120,122129,122139,122149,122161,122171,122180,122190],{"__ignoreMap":174},[254,122007,122008,122011],{"class":256,"line":257},[254,122009,122010],{"class":2103},"qemu-system-x86_64",[254,122012,24819],{"class":313},[254,122014,122015,122018,122021],{"class":256,"line":175},[254,122016,122017],{"class":313},"        -M",[254,122019,122020],{"class":369}," q35,vmport=off",[254,122022,24819],{"class":313},[254,122024,122025,122028,122031],{"class":256,"line":1319},[254,122026,122027],{"class":313},"        -accel",[254,122029,122030],{"class":369}," kvm",[254,122032,24819],{"class":313},[254,122034,122035,122038,122041],{"class":256,"line":1334},[254,122036,122037],{"class":313},"        -cpu",[254,122039,122040],{"class":369}," qemu64,+sse3,+sse4.2",[254,122042,24819],{"class":313},[254,122044,122045,122048,122051,122053],{"class":256,"line":1340},[254,122046,122047],{"class":313},"        -smp",[254,122049,122050],{"class":369}," 8,cores=",[254,122052,557],{"class":313},[254,122054,24819],{"class":313},[254,122056,122057,122060,122063],{"class":256,"line":1354},[254,122058,122059],{"class":313},"        -m",[254,122061,122062],{"class":369}," 6G",[254,122064,24819],{"class":313},[254,122066,122067,122070],{"class":256,"line":1360},[254,122068,122069],{"class":313},"        -usb",[254,122071,24819],{"class":313},[254,122073,122074,122077,122080],{"class":256,"line":1451},[254,122075,122076],{"class":313},"        -device",[254,122078,122079],{"class":369}," virtio-tablet",[254,122081,24819],{"class":313},[254,122083,122084,122086,122089],{"class":256,"line":1457},[254,122085,122076],{"class":313},[254,122087,122088],{"class":369}," virtio-keyboard",[254,122090,24819],{"class":313},[254,122092,122093,122095,122098],{"class":256,"line":1469},[254,122094,122076],{"class":313},[254,122096,122097],{"class":369}," usb-tablet",[254,122099,24819],{"class":313},[254,122101,122102,122105,122108],{"class":256,"line":1752},[254,122103,122104],{"class":313},"        -bios",[254,122106,122107],{"class":369}," OVMF-pure-efi64.fd",[254,122109,24819],{"class":313},[254,122111,122112,122115,122118],{"class":256,"line":1757},[254,122113,122114],{"class":313},"        -net",[254,122116,122117],{"class":369}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[254,122119,24819],{"class":313},[254,122121,122122,122124,122127],{"class":256,"line":1763},[254,122123,122114],{"class":313},[254,122125,122126],{"class":369}," nic,model=virtio",[254,122128,24819],{"class":313},[254,122130,122131,122134,122137],{"class":256,"line":1768},[254,122132,122133],{"class":313},"        -audio",[254,122135,122136],{"class":369}," sdl,model=hda",[254,122138,24819],{"class":313},[254,122140,122141,122144,122147],{"class":256,"line":1782},[254,122142,122143],{"class":313},"        -display",[254,122145,122146],{"class":369}," sdl,gl=on,show-cursor=on",[254,122148,24819],{"class":313},[254,122150,122151,122153,122156,122159],{"class":256,"line":1787},[254,122152,122076],{"class":313},[254,122154,122155],{"class":369}," virtio-vga-gl,xres=1920,yres=",[254,122157,122158],{"class":313},"1080",[254,122160,24819],{"class":313},[254,122162,122163,122166,122169],{"class":256,"line":1793},[254,122164,122165],{"class":313},"        -drive",[254,122167,122168],{"class":369}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[254,122170,24819],{"class":313},[254,122172,122173,122175,122178],{"class":256,"line":1814},[254,122174,122165],{"class":313},[254,122176,122177],{"class":369}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[254,122179,24819],{"class":313},[254,122181,122182,122185,122188],{"class":256,"line":1819},[254,122183,122184],{"class":313},"        -monitor",[254,122186,122187],{"class":369}," stdio",[254,122189,24819],{"class":313},[254,122191,122192,122195],{"class":256,"line":1833},[254,122193,122194],{"class":313},"        -serial",[254,122196,122197],{"class":369}," none\n",[21,122199,122200],{"start":1340},[24,122201,122202,122203],{},"常用操作：",[21,122204,122205,122208,122264],{},[24,122206,122207],{},"全屏：Ctrl+Alt+F",[24,122209,122210,122211,122216],{},"adb调试",[21,122212,122213],{},[24,122214,122215],{},"使Linux与Android用ADB连接。",[245,122217,122219],{"className":117436,"code":122218,"language":117438,"meta":174,"style":174},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[251,122220,122221,122226,122237,122242,122254,122259],{"__ignoreMap":174},[254,122222,122223],{"class":256,"line":257},[254,122224,122225],{"class":323},"# 连接安卓\n",[254,122227,122228,122231,122234],{"class":256,"line":175},[254,122229,122230],{"class":2103},"adb",[254,122232,122233],{"class":369}," connect",[254,122235,122236],{"class":313}," 127.0.0.1\n",[254,122238,122239],{"class":256,"line":1319},[254,122240,122241],{"class":323},"# 打开shell\n",[254,122243,122244,122246,122248,122251],{"class":256,"line":1334},[254,122245,122230],{"class":2103},[254,122247,27024],{"class":313},[254,122249,122250],{"class":369}," 127.0.0.1:5555",[254,122252,122253],{"class":369}," shell\n",[254,122255,122256],{"class":256,"line":1340},[254,122257,122258],{"class":323},"# 使用root权限\n",[254,122260,122261],{"class":256,"line":1354},[254,122262,122263],{"class":2103},"su\n",[24,122265,122266,122267],{},"中文输入法",[21,122268,122269],{},[24,122270,122271],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[34,122273,122275],{"id":122274},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[14,122277,122278,122279],{},"rEFInd 官网与文档：",[42,122280,122281],{"href":122281,"rel":122282},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[151],[5267,122284,122285],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":174,"searchDepth":175,"depth":175,"links":122287},[122288,122289,122293],{"id":121953,"depth":175,"text":121954},{"id":121957,"depth":175,"text":121958,"children":122290},[122291,122292],{"id":121961,"depth":1319,"text":121962},{"id":121977,"depth":1319,"text":121978},{"id":122274,"depth":175,"text":122275},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":121945,"description":23518},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122300,"title":122301,"body":122302,"description":23518,"extension":181,"meta":125601,"navigation":184,"path":125602,"seo":125603,"stem":125604,"__hash__":125605},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122303,"toc":125575},[122304,122307,122311,122314,122321,122571,122574,122646,122649,122653,122657,122662,122665,122668,122671,122676,122679,122682,122685,122690,122693,122698,122701,122704,122709,122712,122717,122720,122724,122728,122731,122736,122739,122753,122756,122759,122768,122771,122780,122783,122786,122795,122798,122807,122810,122813,122822,122825,122828,122843,122846,122849,122858,122863,122866,122869,122878,122881,122890,122893,122902,122905,122914,122919,122922,122930,122935,122938,122947,122950,122958,122963,122966,122975,122978,122981,122985,122988,122993,122996,123001,123015,123020,123025,123036,123041,123047,123052,123067,123072,123075,123080,123085,123090,123098,123103,123110,123115,123126,123131,123134,123138,123141,123144,123149,123152,123171,123176,123179,123188,123193,123196,123218,123221,123251,123254,123259,123262,123276,123281,123300,123303,123306,123311,123323,123328,123333,123336,123341,123344,123359,123362,123367,123372,123376,123381,123421,123424,123428,123434,123440,123445,123448,123455,123460,123467,123470,123473,123480,123494,123497,123557,123560,123574,123586,123589,123592,123595,123659,123662,123665,123668,123688,123691,123696,123703,123707,123710,123714,123719,123724,123728,123731,123734,123776,123781,123784,123806,123821,123823,123828,123840,123900,123902,123904,123958,123960,123962,123968,123973,123976,123981,123985,123988,124050,124055,124058,124060,124064,124076,124158,124160,124162,124216,124222,124224,124228,124233,124235,124240,124244,124264,124299,124303,124306,124309,124312,124319,124322,124334,124337,124352,124355,124374,124422,124425,124442,124445,124459,124464,124467,124476,124491,124503,124541,124546,124555,124560,124565,124591,124600,124604,124608,124613,124616,124620,124624,124629,124632,124637,124640,124645,124648,124653,124656,124660,124665,124668,124673,124676,124680,124685,124688,124693,124696,124701,124704,124708,124713,124716,124721,124724,124729,124732,124736,124741,124744,124749,124752,124757,124760,124765,124768,124773,124776,124781,124784,124788,124793,124796,124801,124808,124812,124817,124820,124825,124828,124832,124837,124840,124843,124846,124849,124852,124856,124859,124869,124874,124879,124901,124906,124911,124918,124922,124927,124930,124933,124938,124941,124944,124947,124950,124953,124956,124959,124962,124965,124968,124971,124974,124979,124984,124989,124994,124999,125004,125009,125012,125016,125019,125023,125028,125033,125038,125043,125047,125053,125061,125066,125069,125074,125089,125092,125097,125131,125146,125149,125204,125230,125242,125245,125254,125257,125272,125277,125280,125286,125291,125294,125299,125302,125307,125312,125319,125322,125337,125340,125375,125380,125388,125426,125429,125432,125437,125440,125445,125456,125490,125495,125498,125507,125512,125518,125521,125526,125535,125540,125543,125546,125551,125559,125562,125567,125572],[10,122305,122301],{"id":122306},"_7-其他操作",[34,122308,122310],{"id":122309},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[14,122312,122313],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[14,122315,122316,122317,122320],{},"进入工控机的硬盘目录，进入",[251,122318,122319],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[245,122322,122326],{"className":122323,"code":122324,"language":122325,"meta":174,"style":174},"language-YAML shiki shiki-themes github-light github-dark","network: \n  version: 2 \n  wifis: \n    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96: \n      renderer: NetworkManager \n      match: \n        name: \"wlan0\" \n      dhcp4: true \n      dhcp6: true \n      access-points: \n        \"EMIS_Vinci_Robocon_5G\": \n          auth: \n            key-management: \"psk\" \n            password: \"vinci666\" \n          networkmanager: \n            uuid: \"6f414fe0-2658-48ff-89ee-c7981b87bc96\" \n            name: \"EMIS_Vinci_Robocon_5G\" \n            passthrough: \n              wifi-security.auth-alg: \"open\" \n              ipv6.addr-gen-mode: \"default\" \n              ipv6.ip6-privacy: \"-1\" \n              proxy._: \"\" \n      networkmanager: \n        uuid: \"6f414fe0-2658-48ff-89ee-c7981b87bc96\" \n        name: \"EMIS_Vinci_Robocon_5G\"\n \n","YAML",[251,122327,122328,122336,122347,122354,122361,122373,122380,122392,122403,122414,122421,122428,122435,122447,122459,122466,122478,122490,122497,122509,122521,122533,122544,122551,122562],{"__ignoreMap":174},[254,122329,122330,122333],{"class":256,"line":257},[254,122331,122332],{"class":51441},"network",[254,122334,122335],{"class":264},": \n",[254,122337,122338,122341,122343,122345],{"class":256,"line":175},[254,122339,122340],{"class":51441},"  version",[254,122342,51578],{"class":264},[254,122344,342],{"class":313},[254,122346,2814],{"class":264},[254,122348,122349,122352],{"class":256,"line":1319},[254,122350,122351],{"class":51441},"  wifis",[254,122353,122335],{"class":264},[254,122355,122356,122359],{"class":256,"line":1334},[254,122357,122358],{"class":51441},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[254,122360,122335],{"class":264},[254,122362,122363,122366,122368,122371],{"class":256,"line":1340},[254,122364,122365],{"class":51441},"      renderer",[254,122367,51578],{"class":264},[254,122369,122370],{"class":369},"NetworkManager",[254,122372,2814],{"class":264},[254,122374,122375,122378],{"class":256,"line":1354},[254,122376,122377],{"class":51441},"      match",[254,122379,122335],{"class":264},[254,122381,122382,122385,122387,122390],{"class":256,"line":1360},[254,122383,122384],{"class":51441},"        name",[254,122386,51578],{"class":264},[254,122388,122389],{"class":369},"\"wlan0\"",[254,122391,2814],{"class":264},[254,122393,122394,122397,122399,122401],{"class":256,"line":1451},[254,122395,122396],{"class":51441},"      dhcp4",[254,122398,51578],{"class":264},[254,122400,1502],{"class":313},[254,122402,2814],{"class":264},[254,122404,122405,122408,122410,122412],{"class":256,"line":1457},[254,122406,122407],{"class":51441},"      dhcp6",[254,122409,51578],{"class":264},[254,122411,1502],{"class":313},[254,122413,2814],{"class":264},[254,122415,122416,122419],{"class":256,"line":1469},[254,122417,122418],{"class":51441},"      access-points",[254,122420,122335],{"class":264},[254,122422,122423,122426],{"class":256,"line":1752},[254,122424,122425],{"class":369},"        \"EMIS_Vinci_Robocon_5G\"",[254,122427,122335],{"class":264},[254,122429,122430,122433],{"class":256,"line":1757},[254,122431,122432],{"class":51441},"          auth",[254,122434,122335],{"class":264},[254,122436,122437,122440,122442,122445],{"class":256,"line":1763},[254,122438,122439],{"class":51441},"            key-management",[254,122441,51578],{"class":264},[254,122443,122444],{"class":369},"\"psk\"",[254,122446,2814],{"class":264},[254,122448,122449,122452,122454,122457],{"class":256,"line":1768},[254,122450,122451],{"class":51441},"            password",[254,122453,51578],{"class":264},[254,122455,122456],{"class":369},"\"vinci666\"",[254,122458,2814],{"class":264},[254,122460,122461,122464],{"class":256,"line":1782},[254,122462,122463],{"class":51441},"          networkmanager",[254,122465,122335],{"class":264},[254,122467,122468,122471,122473,122476],{"class":256,"line":1787},[254,122469,122470],{"class":51441},"            uuid",[254,122472,51578],{"class":264},[254,122474,122475],{"class":369},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[254,122477,2814],{"class":264},[254,122479,122480,122483,122485,122488],{"class":256,"line":1793},[254,122481,122482],{"class":51441},"            name",[254,122484,51578],{"class":264},[254,122486,122487],{"class":369},"\"EMIS_Vinci_Robocon_5G\"",[254,122489,2814],{"class":264},[254,122491,122492,122495],{"class":256,"line":1814},[254,122493,122494],{"class":51441},"            passthrough",[254,122496,122335],{"class":264},[254,122498,122499,122502,122504,122507],{"class":256,"line":1819},[254,122500,122501],{"class":51441},"              wifi-security.auth-alg",[254,122503,51578],{"class":264},[254,122505,122506],{"class":369},"\"open\"",[254,122508,2814],{"class":264},[254,122510,122511,122514,122516,122519],{"class":256,"line":1833},[254,122512,122513],{"class":51441},"              ipv6.addr-gen-mode",[254,122515,51578],{"class":264},[254,122517,122518],{"class":369},"\"default\"",[254,122520,2814],{"class":264},[254,122522,122523,122526,122528,122531],{"class":256,"line":1838},[254,122524,122525],{"class":51441},"              ipv6.ip6-privacy",[254,122527,51578],{"class":264},[254,122529,122530],{"class":369},"\"-1\"",[254,122532,2814],{"class":264},[254,122534,122535,122538,122540,122542],{"class":256,"line":1867},[254,122536,122537],{"class":51441},"              proxy._",[254,122539,51578],{"class":264},[254,122541,7793],{"class":369},[254,122543,2814],{"class":264},[254,122545,122546,122549],{"class":256,"line":1872},[254,122547,122548],{"class":51441},"      networkmanager",[254,122550,122335],{"class":264},[254,122552,122553,122556,122558,122560],{"class":256,"line":1889},[254,122554,122555],{"class":51441},"        uuid",[254,122557,51578],{"class":264},[254,122559,122475],{"class":369},[254,122561,2814],{"class":264},[254,122563,122564,122566,122568],{"class":256,"line":1894},[254,122565,122384],{"class":51441},[254,122567,51578],{"class":264},[254,122569,122570],{"class":369},"\"EMIS_Vinci_Robocon_5G\"\n",[14,122572,122573],{},"将其改为新wifi的名和密码：",[245,122575,122577],{"className":122323,"code":122576,"language":122325,"meta":174,"style":174},"network:\n  version: 2\n  wifis:\n    wlan0:\n      dhcp4: true\n      dhcp6: true\n      access-points:\n        \"EMIS_Vinci_Robocon_5G\":\n          password: \"vinci666\"\n\n",[251,122578,122579,122585,122594,122600,122607,122616,122624,122630,122636],{"__ignoreMap":174},[254,122580,122581,122583],{"class":256,"line":257},[254,122582,122332],{"class":51441},[254,122584,3879],{"class":264},[254,122586,122587,122589,122591],{"class":256,"line":175},[254,122588,122340],{"class":51441},[254,122590,51578],{"class":264},[254,122592,122593],{"class":313},"2\n",[254,122595,122596,122598],{"class":256,"line":1319},[254,122597,122351],{"class":51441},[254,122599,3879],{"class":264},[254,122601,122602,122605],{"class":256,"line":1334},[254,122603,122604],{"class":51441},"    wlan0",[254,122606,3879],{"class":264},[254,122608,122609,122611,122613],{"class":256,"line":1340},[254,122610,122396],{"class":51441},[254,122612,51578],{"class":264},[254,122614,122615],{"class":313},"true\n",[254,122617,122618,122620,122622],{"class":256,"line":1354},[254,122619,122407],{"class":51441},[254,122621,51578],{"class":264},[254,122623,122615],{"class":313},[254,122625,122626,122628],{"class":256,"line":1360},[254,122627,122418],{"class":51441},[254,122629,3879],{"class":264},[254,122631,122632,122634],{"class":256,"line":1451},[254,122633,122425],{"class":369},[254,122635,3879],{"class":264},[254,122637,122638,122641,122643],{"class":256,"line":1457},[254,122639,122640],{"class":51441},"          password",[254,122642,51578],{"class":264},[254,122644,122645],{"class":369},"\"vinci666\"\n",[14,122647,122648],{},"工控机开机即可连上网。",[34,122650,122652],{"id":122651},"_72-ssh远程开发","7.2 SSH远程开发",[225,122654,122656],{"id":122655},"_721-环境准备","7.2.1 环境准备",[14,122658,122659],{},[414,122660,122661],{},"1.硬件准备",[14,122663,122664],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[14,122666,122667],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[14,122669,122670],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[14,122672,122673],{},[414,122674,122675],{},"2.设置固定IP",[14,122677,122678],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[14,122680,122681],{},"1.进入设置界面",[14,122683,122684],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[14,122686,122687],{},[1602,122688],{"alt":174,"src":122689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[14,122691,122692],{},"2.配置所连接的网络",[14,122694,122695],{},[1602,122696],{"alt":174,"src":122697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[14,122699,122700],{},"3.设置固定IP",[14,122702,122703],{},"查看当前IP地址。",[14,122705,122706],{},[1602,122707],{"alt":174,"src":122708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[14,122710,122711],{},"设置固定IP。",[14,122713,122714],{},[1602,122715],{"alt":174,"src":122716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[14,122718,122719],{},"至此，IP配置完毕。",[225,122721,122723],{"id":122722},"_722-环境搭建","7.2.2 环境搭建",[14,122725,122726],{},[414,122727,25894],{},[14,122729,122730],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[14,122732,122733],{},[414,122734,122735],{},"实现",[14,122737,122738],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[21,122740,122741,122744,122747,122750],{},[24,122742,122743],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[24,122745,122746],{},"远程主机启动SSH服务；",[24,122748,122749],{},"本地主机登陆远程主机；",[24,122751,122752],{},"实现数据传输。",[14,122754,122755],{},"1.安装SSH客户端与服务端",[14,122757,122758],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[245,122760,122762],{"className":120956,"code":122761,"language":120958,"meta":120959,"style":174}," sudo apt install openssh-server\n",[251,122763,122764],{"__ignoreMap":174},[254,122765,122766],{"class":256,"line":257},[254,122767,122761],{},[14,122769,122770],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[245,122772,122774],{"className":120956,"code":122773,"language":120958,"meta":120959,"style":174},"sudo apt install openssh-client\n",[251,122775,122776],{"__ignoreMap":174},[254,122777,122778],{"class":256,"line":257},[254,122779,122773],{},[14,122781,122782],{},"2.远程主机启动SSH服务",[14,122784,122785],{},"远程主机启动 ssh 服务命令如下：",[245,122787,122789],{"className":120956,"code":122788,"language":120958,"meta":120959,"style":174},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[251,122790,122791],{"__ignoreMap":174},[254,122792,122793],{"class":256,"line":257},[254,122794,122788],{},[14,122796,122797],{},"启动后可使用如下命令查看服务是否正常运行：",[245,122799,122801],{"className":120956,"code":122800,"language":120958,"meta":120959,"style":174},"ps -e | grep ssh\n",[251,122802,122803],{"__ignoreMap":174},[254,122804,122805],{"class":256,"line":257},[254,122806,122800],{},[14,122808,122809],{},"如果启动成功，会包含 sshd 程序。",[14,122811,122812],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[245,122814,122816],{"className":120956,"code":122815,"language":120958,"meta":120959,"style":174},"sudo systemctl enable ssh\n",[251,122817,122818],{"__ignoreMap":174},[254,122819,122820],{"class":256,"line":257},[254,122821,122815],{},[14,122823,122824],{},"3.本地远程登录",[14,122826,122827],{},"登录远程主机可以调用如下命令:",[245,122829,122831],{"className":117436,"code":122830,"language":117438,"meta":174,"style":174},"ssh -X 用户名@ip地址\n",[251,122832,122833],{"__ignoreMap":174},[254,122834,122835,122837,122840],{"class":256,"line":257},[254,122836,121787],{"class":2103},[254,122838,122839],{"class":313}," -X",[254,122841,122842],{"class":369}," 用户名@ip地址\n",[14,122844,122845],{},"然后根据提示，录入登陆密码，即可成功登录。",[14,122847,122848],{},"如果退出，可以调用exit命令：",[245,122850,122852],{"className":120956,"code":122851,"language":120958,"meta":120959,"style":174},"exit\n",[251,122853,122854],{"__ignoreMap":174},[254,122855,122856],{"class":256,"line":257},[254,122857,122851],{},[14,122859,122860],{},[414,122861,122862],{},"4.实现数据传输",[14,122864,122865],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[14,122867,122868],{},"上传文件指令格式如下：",[245,122870,122872],{"className":120956,"code":122871,"language":120958,"meta":120959,"style":174},"scp 本地文件路径 账号@ip:路径\n",[251,122873,122874],{"__ignoreMap":174},[254,122875,122876],{"class":256,"line":257},[254,122877,122871],{},[14,122879,122880],{},"上传文件夹指令格式如下：",[245,122882,122884],{"className":120956,"code":122883,"language":120958,"meta":120959,"style":174},"scp -r 本地文件夹路径 账号@ip:路径\n",[251,122885,122886],{"__ignoreMap":174},[254,122887,122888],{"class":256,"line":257},[254,122889,122883],{},[14,122891,122892],{},"下载文件指令格式如下：",[245,122894,122896],{"className":120956,"code":122895,"language":120958,"meta":120959,"style":174},"scp 账号@ip:路径 本地文件夹路径\n",[251,122897,122898],{"__ignoreMap":174},[254,122899,122900],{"class":256,"line":257},[254,122901,122895],{},[14,122903,122904],{},"下载文件夹指令格式如下：",[245,122906,122908],{"className":120956,"code":122907,"language":120958,"meta":120959,"style":174},"scp -r 账号@ip:路径 本地文件夹路径\n",[251,122909,122910],{"__ignoreMap":174},[254,122911,122912],{"class":256,"line":257},[254,122913,122907],{},[14,122915,122916],{},[414,122917,122918],{},"优化",[14,122920,122921],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[21,122923,122924,122927],{},[24,122925,122926],{},"本地生成密钥对；",[24,122928,122929],{},"将公钥上传至远程主机。",[14,122931,122932],{},[414,122933,122934],{},"1.生成密钥对",[14,122936,122937],{},"本地客户端生成公私钥：（一路回车默认即可）",[245,122939,122941],{"className":120956,"code":122940,"language":120958,"meta":120959,"style":174},"ssh-keygen\n",[251,122942,122943],{"__ignoreMap":174},[254,122944,122945],{"class":256,"line":257},[254,122946,122940],{},[14,122948,122949],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[21,122951,122952,122955],{},[24,122953,122954],{},"id_rsa （私钥）；",[24,122956,122957],{},"id_rsa.pub (公钥)。",[14,122959,122960],{},[414,122961,122962],{},"2.公钥上传",[14,122964,122965],{},"上传指令如下：",[245,122967,122969],{"className":120956,"code":122968,"language":120958,"meta":120959,"style":174},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[251,122970,122971],{"__ignoreMap":174},[254,122972,122973],{"class":256,"line":257},[254,122974,122968],{},[14,122976,122977],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[14,122979,122980],{},"以后再远程登录就无需录入密码了。",[225,122982,122984],{"id":122983},"_723-使用vscode优化","7.2.3 使用VScode优化",[14,122986,122987],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[14,122989,122990],{},[414,122991,122992],{},"1.准备工作",[14,122994,122995],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[14,122997,122998],{},[414,122999,123000],{},"2.为VScode安装远程开发插件",[14,123002,123003,123004,123007,123008,123011,123012,28526],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[251,123005,123006],{},"扩展：商店","的搜索栏输入",[251,123009,123010],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[251,123013,123014],{},"安装",[14,123016,123017],{},[1602,123018],{"alt":174,"src":123019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[14,123021,123022],{},[414,123023,123024],{},"3.配置远程连接",[14,123026,123027,123028,123031,123032,123035],{},"步骤1：使用快捷键",[251,123029,123030],{},"ctrl + shift + p","打开命令输入窗口，并输入",[251,123033,123034],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[14,123037,123038],{},[1602,123039],{"alt":174,"src":123040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[14,123042,123043,123044,28526],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[251,123045,123046],{},"Add New SSH Host",[14,123048,123049],{},[1602,123050],{"alt":174,"src":123051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[14,123053,123054,123055,123058,123059,123062,123063,123066],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[251,123056,123057],{},"ssh +X ubuntu@192.168.43.164","，其中，",[251,123060,123061],{},"ubuntu","需要替换为你的登录用户名，",[251,123064,123065],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[14,123068,123069],{},[1602,123070],{"alt":174,"src":123071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[14,123073,123074],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[14,123076,123077],{},[1602,123078],{"alt":174,"src":123079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[14,123081,123082],{},[1602,123083],{"alt":174,"src":123084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[14,123086,123087],{},[414,123088,123089],{},"4.使用",[14,123091,123092,123093,123031,123095,123097],{},"步骤1：继续使用快捷键",[251,123094,123030],{},[251,123096,123034],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[14,123099,123100],{},[1602,123101],{"alt":174,"src":123102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[14,123104,123105,123106,123109],{},"或者，也可以点击侧边栏的",[251,123107,123108],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[14,123111,123112],{},[1602,123113],{"alt":174,"src":123114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[14,123116,123117,123118,123121,123122,123125],{},"步骤2：选择菜单栏的",[251,123119,123120],{},"文件","下的",[251,123123,123124],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[14,123127,123128],{},[1602,123129],{"alt":174,"src":123130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[14,123132,123133],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[34,123135,123137],{"id":123136},"_73-远程桌面","7.3 远程桌面",[14,123139,123140],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[14,123142,123143],{},"我们选择使用VNC来看。",[21,123145,123146],{},[24,123147,123148],{},"安装VNC服务器：",[14,123150,123151],{},"这里以TigerVNC为例进行安装：",[245,123153,123155],{"className":117436,"code":123154,"language":117438,"meta":174,"style":174},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[251,123156,123157],{"__ignoreMap":174},[254,123158,123159,123161,123163,123165,123168],{"class":256,"line":257},[254,123160,24717],{"class":2103},[254,123162,117457],{"class":369},[254,123164,23975],{"class":369},[254,123166,123167],{"class":369}," tigervnc-standalone-server",[254,123169,123170],{"class":369}," tigervnc-common\n",[21,123172,123173],{"start":175},[24,123174,123175],{},"设置VNC密码：",[14,123177,123178],{},"为VNC用户设置密码，运行以下命令：",[245,123180,123182],{"className":117436,"code":123181,"language":117438,"meta":174,"style":174},"vncpasswd\n",[251,123183,123184],{"__ignoreMap":174},[254,123185,123186],{"class":256,"line":257},[254,123187,123181],{"class":2103},[21,123189,123190],{"start":1319},[24,123191,123192],{},"配置VNC启动脚本:",[14,123194,123195],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[245,123197,123199],{"className":117436,"code":123198,"language":117438,"meta":174,"style":174},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[251,123200,123201,123210],{"__ignoreMap":174},[254,123202,123203,123205,123207],{"class":256,"line":257},[254,123204,101407],{"class":2103},[254,123206,29357],{"class":313},[254,123208,123209],{"class":369}," ~\u002F.vnc\n",[254,123211,123212,123215],{"class":256,"line":175},[254,123213,123214],{"class":2103},"nano",[254,123216,123217],{"class":369}," ~\u002F.vnc\u002Fxstartup\n",[14,123219,123220],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[245,123222,123224],{"className":117436,"code":123223,"language":117438,"meta":174,"style":174},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[251,123225,123226,123231,123239,123246],{"__ignoreMap":174},[254,123227,123228],{"class":256,"line":257},[254,123229,123230],{"class":323},"#!\u002Fbin\u002Fsh\n",[254,123232,123233,123236],{"class":256,"line":175},[254,123234,123235],{"class":313},"unset",[254,123237,123238],{"class":369}," SESSION_MANAGER\n",[254,123240,123241,123243],{"class":256,"line":1319},[254,123242,123235],{"class":313},[254,123244,123245],{"class":369}," DBUS_SESSION_BUS_ADDRESS\n",[254,123247,123248],{"class":256,"line":1334},[254,123249,123250],{"class":2103},"gnome-session\n",[14,123252,123253],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[21,123255,123256],{"start":1334},[24,123257,123258],{},"给予执行权限：",[14,123260,123261],{},"为xstartup文件设置执行权限：",[245,123263,123265],{"className":117436,"code":123264,"language":117438,"meta":174,"style":174},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[251,123266,123267],{"__ignoreMap":174},[254,123268,123269,123271,123274],{"class":256,"line":257},[254,123270,24752],{"class":2103},[254,123272,123273],{"class":369}," +x",[254,123275,123217],{"class":369},[21,123277,123278],{"start":1340},[24,123279,123280],{},"启动VNC服务器：",[245,123282,123284],{"className":117436,"code":123283,"language":117438,"meta":174,"style":174},"vncserver -geometry 1920x1080 -localhost=0\n",[251,123285,123286],{"__ignoreMap":174},[254,123287,123288,123291,123294,123297],{"class":256,"line":257},[254,123289,123290],{"class":2103},"vncserver",[254,123292,123293],{"class":313}," -geometry",[254,123295,123296],{"class":369}," 1920x1080",[254,123298,123299],{"class":313}," -localhost=0\n",[14,123301,123302],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[14,123304,123305],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[21,123307,123308],{"start":1354},[24,123309,123310],{},"查看已开启的VNC服务器：",[245,123312,123314],{"className":117436,"code":123313,"language":117438,"meta":174,"style":174},"vncserver -list\n",[251,123315,123316],{"__ignoreMap":174},[254,123317,123318,123320],{"class":256,"line":257},[254,123319,123290],{"class":2103},[254,123321,123322],{"class":313}," -list\n",[14,123324,123325],{},[1602,123326],{"alt":174,"src":123327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[21,123329,123330],{"start":1360},[24,123331,123332],{},"连接到VNC服务器：",[14,123334,123335],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[21,123337,123338],{"start":1451},[24,123339,123340],{},"停止VNC服务器：",[14,123342,123343],{},"如果需要停止VNC服务器，可以使用以下命令：",[245,123345,123347],{"className":117436,"code":123346,"language":117438,"meta":174,"style":174},"vncserver -kill :1\n",[251,123348,123349],{"__ignoreMap":174},[254,123350,123351,123353,123356],{"class":256,"line":257},[254,123352,123290],{"class":2103},[254,123354,123355],{"class":313}," -kill",[254,123357,123358],{"class":369}," :1\n",[14,123360,123361],{},"将:1替换为你实际使用的显示编号。",[14,123363,123364],{},[1602,123365],{"alt":174,"src":123366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[14,123368,123369],{},[1602,123370],{"alt":174,"src":123371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[34,123373,123375],{"id":123374},"_74-usb端口设置","7.4 USB端口设置",[14,123377,123378],{},[414,123379,123380],{},"首先先配置好权限",[245,123382,123384],{"className":117436,"code":123383,"language":117438,"meta":174,"style":174},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[251,123385,123386,123391,123404,123411,123416],{"__ignoreMap":174},[254,123387,123388],{"class":256,"line":257},[254,123389,123390],{"class":323},"# 将用户权限提高\n",[254,123392,123393,123395,123397,123399,123402],{"class":256,"line":175},[254,123394,24717],{"class":2103},[254,123396,26715],{"class":369},[254,123398,26718],{"class":313},[254,123400,123401],{"class":369}," dialout",[254,123403,26723],{"class":264},[254,123405,123406,123408],{"class":256,"line":1319},[254,123407,26742],{"class":2103},[254,123409,123410],{"class":369}," dialout\n",[254,123412,123413],{"class":256,"line":1334},[254,123414,123415],{"class":323},"# 查看下面命令是否输出dialout（若输出才正常）\n",[254,123417,123418],{"class":256,"line":1340},[254,123419,123420],{"class":2103},"groups\n",[14,123422,123423],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[225,123425,123427],{"id":123426},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[14,123429,123430,123433],{},[414,123431,123432],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[14,123435,123436,123439],{},[414,123437,123438],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[14,123441,123442],{},[414,123443,123444],{},"流程如下：",[14,123446,123447],{},"（1）.查找设备idVendor和idProduct",[14,123449,123450,123451,123454],{},"接入两个USB设备，在终端调用指令",[251,123452,123453],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[14,123456,123457],{},[1602,123458],{"alt":174,"src":123459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[14,123461,123462,123463,123466],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[251,123464,123465],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[14,123468,123469],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[14,123471,123472],{},"（2）.编写映射规则",[14,123474,123475,123476,123479],{},"在",[251,123477,123478],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[245,123481,123483],{"className":117436,"code":123482,"language":117438,"meta":174,"style":174},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[251,123484,123485],{"__ignoreMap":174},[254,123486,123487,123489,123491],{"class":256,"line":257},[254,123488,24717],{"class":2103},[254,123490,118723],{"class":369},[254,123492,123493],{"class":369}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[14,123495,123496],{},"输入如下内容：",[245,123498,123500],{"className":117436,"code":123499,"language":117438,"meta":174,"style":174},"KERNEL==\"ttyUSB*\", ATTRS{idVendor}==\"10c4\", ATTRS{idProduct}==\"ea60\", MODE:=\"0777\", SYMLINK+=\"mylidar\"\nKERNEL==\"ttyUSB*\", ATTRS{idVendor}==\"1a86\", ATTRS{idProduct}==\"7523\", MODE:=\"0777\", SYMLINK+=\"mycar\"\n",[251,123501,123502,123532],{"__ignoreMap":174},[254,123503,123504,123507,123509,123512,123515,123518,123521,123523,123526,123529],{"class":256,"line":257},[254,123505,123506],{"class":264},"KERNEL",[254,123508,310],{"class":260},[254,123510,123511],{"class":369},"=\"ttyUSB*\",",[254,123513,123514],{"class":2103}," ATTRS",[254,123516,123517],{"class":369},"{idVendor}==",[254,123519,123520],{"class":2103},"\"10c4\"",[254,123522,642],{"class":2103},[254,123524,123525],{"class":369}," ATTRS{idProduct}==\"ea60\",",[254,123527,123528],{"class":369}," MODE:=\"0777\",",[254,123530,123531],{"class":369}," SYMLINK+=\"mylidar\"\n",[254,123533,123534,123536,123538,123540,123542,123544,123547,123549,123552,123554],{"class":256,"line":175},[254,123535,123506],{"class":264},[254,123537,310],{"class":260},[254,123539,123511],{"class":369},[254,123541,123514],{"class":2103},[254,123543,123517],{"class":369},[254,123545,123546],{"class":2103},"\"1a86\"",[254,123548,642],{"class":2103},[254,123550,123551],{"class":369}," ATTRS{idProduct}==\"7523\",",[254,123553,123528],{"class":369},[254,123555,123556],{"class":369}," SYMLINK+=\"mycar\"\n",[14,123558,123559],{},"代码解释：",[1271,123561,123562,123565,123568,123571],{},[24,123563,123564],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[24,123566,123567],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[24,123569,123570],{},"SYMLINK是符号连接，即绑定的别名；",[24,123572,123573],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[14,123575,123576,123577,123580,123583],{},"***小提示：***",[23694,123578,123579],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[251,123581,123582],{},"\u002Fetc\u002Fudev\u002Frule.d",[23694,123584,123585],{},"目录即可。",[14,123587,123588],{},"表格 还在加载中，请等待加载完成后再尝试复制",[14,123590,123591],{},"（3）.使规则生效",[14,123593,123594],{},"在终端下输入如下指令：",[245,123596,123598],{"className":117436,"code":123597,"language":117438,"meta":174,"style":174},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[251,123599,123600,123605,123617,123628,123632,123637,123650],{"__ignoreMap":174},[254,123601,123602],{"class":256,"line":257},[254,123603,123604],{"class":323},"# Ubuntu用下方命令\n",[254,123606,123607,123609,123611,123614],{"class":256,"line":175},[254,123608,24717],{"class":2103},[254,123610,120188],{"class":369},[254,123612,123613],{"class":369}," udev",[254,123615,123616],{"class":369}," reload\n",[254,123618,123619,123621,123623,123625],{"class":256,"line":1319},[254,123620,24717],{"class":2103},[254,123622,120188],{"class":369},[254,123624,123613],{"class":369},[254,123626,123627],{"class":369}," restart\n",[254,123629,123630],{"class":256,"line":1334},[254,123631,2540],{"emptyLinePlaceholder":184},[254,123633,123634],{"class":256,"line":1340},[254,123635,123636],{"class":323},"#Fedora用下方命令\n",[254,123638,123639,123641,123644,123647],{"class":256,"line":1354},[254,123640,24717],{"class":2103},[254,123642,123643],{"class":369}," udevadm",[254,123645,123646],{"class":369}," control",[254,123648,123649],{"class":313}," --reload\n",[254,123651,123652,123654,123656],{"class":256,"line":1360},[254,123653,24717],{"class":2103},[254,123655,123643],{"class":369},[254,123657,123658],{"class":369}," trigger\n",[14,123660,123661],{},"再重新插拔设备即可。",[14,123663,123664],{},"（4）.测试",[14,123666,123667],{},"终端下输入如下指令",[245,123669,123671],{"className":117436,"code":123670,"language":117438,"meta":174,"style":174},"ll \u002Fdev | grep ttyUSB\n",[251,123672,123673],{"__ignoreMap":174},[254,123674,123675,123678,123681,123683,123685],{"class":256,"line":257},[254,123676,123677],{"class":2103},"ll",[254,123679,123680],{"class":369}," \u002Fdev",[254,123682,25250],{"class":260},[254,123684,30377],{"class":2103},[254,123686,123687],{"class":369}," ttyUSB\n",[14,123689,123690],{},"运行结果如下：",[14,123692,123693],{},[1602,123694],{"alt":174,"src":123695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[14,123697,123698,123699,123702],{},"也可以多次插拔USB设备，会发现设备端口",[251,123700,123701],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[14,123704,123705],{},[414,123706,118104],{},[14,123708,123709],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[225,123711,123713],{"id":123712},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[14,123715,123716,123718],{},[414,123717,123432],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[14,123720,123721,123723],{},[414,123722,123438],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[14,123725,123726],{},[414,123727,123444],{},[14,123729,123730],{},"（1）.查看所连接的主机USB接口的KERNELS",[14,123732,123733],{},"调用如下指令查看第一台雷达的USB信息：",[245,123735,123737],{"className":117436,"code":123736,"language":117438,"meta":174,"style":174},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[251,123738,123739,123759],{"__ignoreMap":174},[254,123740,123741,123744,123746,123749,123752,123754,123756],{"class":256,"line":257},[254,123742,123743],{"class":2103},"udevadm",[254,123745,69962],{"class":369},[254,123747,123748],{"class":313}," --attribute-walk",[254,123750,123751],{"class":313}," --name=\u002Fdev\u002FttyUSB0",[254,123753,25250],{"class":260},[254,123755,30377],{"class":2103},[254,123757,123758],{"class":369}," KERNELS\n",[254,123760,123761,123763,123765,123767,123770,123772,123774],{"class":256,"line":175},[254,123762,123743],{"class":2103},[254,123764,69962],{"class":369},[254,123766,123748],{"class":313},[254,123768,123769],{"class":313}," --name=\u002Fdev\u002FttyACM0",[254,123771,25250],{"class":260},[254,123773,30377],{"class":2103},[254,123775,123758],{"class":369},[14,123777,123778],{},[1602,123779],{"alt":174,"src":123780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[14,123782,123783],{},"调用如下指令查看第二台雷达的USB信息：",[245,123785,123787],{"className":117436,"code":123786,"language":117438,"meta":174,"style":174},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[251,123788,123789],{"__ignoreMap":174},[254,123790,123791,123793,123795,123797,123800,123802,123804],{"class":256,"line":257},[254,123792,123743],{"class":2103},[254,123794,69962],{"class":369},[254,123796,123748],{"class":313},[254,123798,123799],{"class":313}," --name=\u002Fdev\u002FttyUSB1",[254,123801,25250],{"class":260},[254,123803,30377],{"class":2103},[254,123805,123758],{"class":369},[14,123807,123808,123809,123812,123813,123816,123817,123820],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[251,123810,123811],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[251,123814,123815],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[414,123818,123819],{},"唯一性标识","”。",[14,123822,123472],{},[14,123824,123475,123825,123827],{},[251,123826,123478],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[245,123829,123830],{"className":117436,"code":123482,"language":117438,"meta":174,"style":174},[251,123831,123832],{"__ignoreMap":174},[254,123833,123834,123836,123838],{"class":256,"line":257},[254,123835,24717],{"class":2103},[254,123837,118723],{"class":369},[254,123839,123493],{"class":369},[245,123841,123843],{"className":117436,"code":123842,"language":117438,"meta":174,"style":174},"KERNEL==\"ttyUSB*\", KERNELS==\"1-1.3:1.0\", MODE:=\"0777\", SYMLINK+=\"rplidar_front\"\nKERNEL==\"ttyUSB*\", KERNELS==\"1-1.4:1.0\", MODE:=\"0777\", SYMLINK+=\"rplidar_back\"\n",[251,123844,123845,123874],{"__ignoreMap":174},[254,123846,123847,123849,123851,123853,123856,123858,123861,123864,123866,123869,123871],{"class":256,"line":257},[254,123848,123506],{"class":264},[254,123850,310],{"class":260},[254,123852,123511],{"class":369},[254,123854,123855],{"class":264}," KERNELS",[254,123857,310],{"class":260},[254,123859,123860],{"class":369},"=\"1-1.3:1.0\",",[254,123862,123863],{"class":2103}," MODE:",[254,123865,310],{"class":369},[254,123867,123868],{"class":2103},"\"0777\"",[254,123870,642],{"class":2103},[254,123872,123873],{"class":369}," SYMLINK+=\"rplidar_front\"\n",[254,123875,123876,123878,123880,123882,123884,123886,123889,123891,123893,123895,123897],{"class":256,"line":175},[254,123877,123506],{"class":264},[254,123879,310],{"class":260},[254,123881,123511],{"class":369},[254,123883,123855],{"class":264},[254,123885,310],{"class":260},[254,123887,123888],{"class":369},"=\"1-1.4:1.0\",",[254,123890,123863],{"class":2103},[254,123892,310],{"class":369},[254,123894,123868],{"class":2103},[254,123896,642],{"class":2103},[254,123898,123899],{"class":369}," SYMLINK+=\"rplidar_back\"\n",[14,123901,123591],{},[14,123903,123594],{},[245,123905,123906],{"className":117436,"code":123597,"language":117438,"meta":174,"style":174},[251,123907,123908,123912,123922,123932,123936,123940,123950],{"__ignoreMap":174},[254,123909,123910],{"class":256,"line":257},[254,123911,123604],{"class":323},[254,123913,123914,123916,123918,123920],{"class":256,"line":175},[254,123915,24717],{"class":2103},[254,123917,120188],{"class":369},[254,123919,123613],{"class":369},[254,123921,123616],{"class":369},[254,123923,123924,123926,123928,123930],{"class":256,"line":1319},[254,123925,24717],{"class":2103},[254,123927,120188],{"class":369},[254,123929,123613],{"class":369},[254,123931,123627],{"class":369},[254,123933,123934],{"class":256,"line":1334},[254,123935,2540],{"emptyLinePlaceholder":184},[254,123937,123938],{"class":256,"line":1340},[254,123939,123636],{"class":323},[254,123941,123942,123944,123946,123948],{"class":256,"line":1354},[254,123943,24717],{"class":2103},[254,123945,123643],{"class":369},[254,123947,123646],{"class":369},[254,123949,123649],{"class":313},[254,123951,123952,123954,123956],{"class":256,"line":1360},[254,123953,24717],{"class":2103},[254,123955,123643],{"class":369},[254,123957,123658],{"class":369},[14,123959,123661],{},[14,123961,123664],{},[14,123963,123667,123964,123967],{},[251,123965,123966],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[14,123969,123970],{},[1602,123971],{"alt":174,"src":123972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[14,123974,123975],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[14,123977,123978,123980],{},[414,123979,118104],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[225,123982,123984],{"id":123983},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[14,123986,123987],{},"（1）.查看所连接的主机USB接口的信息",[245,123989,123991],{"className":117436,"code":123990,"language":117438,"meta":174,"style":174},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[251,123992,123993,124023],{"__ignoreMap":174},[254,123994,123995,123997,123999,124002,124004,124006,124008,124010,124013,124016,124018,124021],{"class":256,"line":257},[254,123996,123743],{"class":2103},[254,123998,69962],{"class":369},[254,124000,124001],{"class":313}," -a",[254,124003,29357],{"class":313},[254,124005,28563],{"class":264},[254,124007,123743],{"class":2103},[254,124009,69962],{"class":369},[254,124011,124012],{"class":313}," -q",[254,124014,124015],{"class":369}," path",[254,124017,25256],{"class":313},[254,124019,124020],{"class":369}," \u002Fdev\u002FttyACM0",[254,124022,271],{"class":264},[254,124024,124025,124027,124029,124031,124033,124035,124037,124039,124041,124043,124045,124048],{"class":256,"line":175},[254,124026,123743],{"class":2103},[254,124028,69962],{"class":369},[254,124030,124001],{"class":313},[254,124032,29357],{"class":313},[254,124034,28563],{"class":264},[254,124036,123743],{"class":2103},[254,124038,69962],{"class":369},[254,124040,124012],{"class":313},[254,124042,124015],{"class":369},[254,124044,25256],{"class":313},[254,124046,124047],{"class":369}," \u002Fdev\u002FttyUSB0",[254,124049,271],{"class":264},[14,124051,124052],{},[1602,124053],{"alt":174,"src":124054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[14,124056,124057],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[14,124059,123472],{},[14,124061,123475,124062,123827],{},[251,124063,123478],{},[245,124065,124066],{"className":117436,"code":123482,"language":117438,"meta":174,"style":174},[251,124067,124068],{"__ignoreMap":174},[254,124069,124070,124072,124074],{"class":256,"line":257},[254,124071,24717],{"class":2103},[254,124073,118723],{"class":369},[254,124075,123493],{"class":369},[245,124077,124079],{"className":117436,"code":124078,"language":117438,"meta":174,"style":174},"KERNEL==\"ttyACM*\", ATTRS{idVendor}==\"1a86\", ATTRS{idProduct}==\"55d4\", ATTRS{serial}==\"0001\", MODE:=\"0777\", SYMLINK+=\"ttyACM_MCU\"\nKERNEL==\"ttyACM*\", ATTRS{idVendor}==\"1a86\", ATTRS{idProduct}==\"55d4\", ATTRS{serial}==\"0002\", MODE:=\"0777\", SYMLINK+=\"ttyACM_Lidar\"\nKERNEL==\"ttyUSB*\", ATTRS{idVendor}==\"1a86\", ATTRS{idProduct}==\"7523\", MODE:=\"0777\", SYMLINK+=\"ttyUSB_IMU\"\n",[251,124080,124081,124109,124135],{"__ignoreMap":174},[254,124082,124083,124085,124087,124090,124092,124094,124096,124098,124101,124104,124106],{"class":256,"line":257},[254,124084,123506],{"class":264},[254,124086,310],{"class":260},[254,124088,124089],{"class":369},"=\"ttyACM*\",",[254,124091,123514],{"class":2103},[254,124093,123517],{"class":369},[254,124095,123546],{"class":2103},[254,124097,642],{"class":2103},[254,124099,124100],{"class":369}," ATTRS{idProduct}==\"55d4\",",[254,124102,124103],{"class":369}," ATTRS{serial}==\"0001\",",[254,124105,123528],{"class":369},[254,124107,124108],{"class":369}," SYMLINK+=\"ttyACM_MCU\"\n",[254,124110,124111,124113,124115,124117,124119,124121,124123,124125,124127,124130,124132],{"class":256,"line":175},[254,124112,123506],{"class":264},[254,124114,310],{"class":260},[254,124116,124089],{"class":369},[254,124118,123514],{"class":2103},[254,124120,123517],{"class":369},[254,124122,123546],{"class":2103},[254,124124,642],{"class":2103},[254,124126,124100],{"class":369},[254,124128,124129],{"class":369}," ATTRS{serial}==\"0002\",",[254,124131,123528],{"class":369},[254,124133,124134],{"class":369}," SYMLINK+=\"ttyACM_Lidar\"\n",[254,124136,124137,124139,124141,124143,124145,124147,124149,124151,124153,124155],{"class":256,"line":1319},[254,124138,123506],{"class":264},[254,124140,310],{"class":260},[254,124142,123511],{"class":369},[254,124144,123514],{"class":2103},[254,124146,123517],{"class":369},[254,124148,123546],{"class":2103},[254,124150,642],{"class":2103},[254,124152,123551],{"class":369},[254,124154,123528],{"class":369},[254,124156,124157],{"class":369}," SYMLINK+=\"ttyUSB_IMU\"\n",[14,124159,123591],{},[14,124161,123594],{},[245,124163,124164],{"className":117436,"code":123597,"language":117438,"meta":174,"style":174},[251,124165,124166,124170,124180,124190,124194,124198,124208],{"__ignoreMap":174},[254,124167,124168],{"class":256,"line":257},[254,124169,123604],{"class":323},[254,124171,124172,124174,124176,124178],{"class":256,"line":175},[254,124173,24717],{"class":2103},[254,124175,120188],{"class":369},[254,124177,123613],{"class":369},[254,124179,123616],{"class":369},[254,124181,124182,124184,124186,124188],{"class":256,"line":1319},[254,124183,24717],{"class":2103},[254,124185,120188],{"class":369},[254,124187,123613],{"class":369},[254,124189,123627],{"class":369},[254,124191,124192],{"class":256,"line":1334},[254,124193,2540],{"emptyLinePlaceholder":184},[254,124195,124196],{"class":256,"line":1340},[254,124197,123636],{"class":323},[254,124199,124200,124202,124204,124206],{"class":256,"line":1354},[254,124201,24717],{"class":2103},[254,124203,123643],{"class":369},[254,124205,123646],{"class":369},[254,124207,123649],{"class":313},[254,124209,124210,124212,124214],{"class":256,"line":1360},[254,124211,24717],{"class":2103},[254,124213,123643],{"class":369},[254,124215,123658],{"class":369},[14,124217,124218,124219],{},"再重新插拔设备即可，或者 ",[414,124220,124221],{},"直接重启系统。",[14,124223,123664],{},[14,124225,123667,124226,123967],{},[251,124227,123966],{},[14,124229,124230],{},[1602,124231],{"alt":174,"src":124232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[14,124234,123975],{},[14,124236,124237,124239],{},[414,124238,118104],{}," 一些设备可能没有串口号等。",[225,124241,124243],{"id":124242},"_744-其他注意事项","7.4.4 其他注意事项",[14,124245,124246,124247,124249,124250,124253,124254,18551,124257,124260,124261,124263],{},"并非所有的USB设备端口号都是",[251,124248,123701],{},"的格式，比如Arduino的端口号可能是",[251,124251,124252],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[251,124255,124256],{},"videon",[251,124258,124259],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[251,124262,124256],{},"端口，绑定时需要关联的也是该接口。",[14,124265,124266,124267,124270,124271,124274,124275,124277,124278,124281,124282,124285,124286,124289,124290,124289,124293,124289,124296,28526],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[251,124268,124269],{},"KERNEL==\"ttyUSB*\"","修改为",[251,124272,124273],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[251,124276,124269],{},"修改为类似于",[251,124279,124280],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[251,124283,124284],{},"video[0,2,4,6]","表示可以绑定的端口为",[251,124287,124288],{},"video0","或",[251,124291,124292],{},"video2",[251,124294,124295],{},"video4",[251,124297,124298],{},"video6",[34,124300,124302],{"id":124301},"_75-挂载内网网页","7.5 挂载内网网页",[14,124304,124305],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[14,124307,124308],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[14,124310,124311],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[14,124313,124314,124315],{},"Termux 下载地址（F-Droid）：",[42,124316,124317],{"href":124317,"rel":124318},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[151],[14,124320,124321],{},"首先打开app后，先更新软件缓存：",[245,124323,124325],{"className":117436,"code":124324,"language":117438,"meta":174,"style":174},"pkg update\n",[251,124326,124327],{"__ignoreMap":174},[254,124328,124329,124332],{"class":256,"line":257},[254,124330,124331],{"class":2103},"pkg",[254,124333,26383],{"class":369},[14,124335,124336],{},"然后换源",[245,124338,124340],{"className":117436,"code":124339,"language":117438,"meta":174,"style":174},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[251,124341,124342],{"__ignoreMap":174},[254,124343,124344,124346,124349],{"class":256,"line":257},[254,124345,123214],{"class":2103},[254,124347,124348],{"class":264}," $PREFIX",[254,124350,124351],{"class":369},"\u002Fetc\u002Fapt\u002Fsources.list\n",[14,124353,124354],{},"将该文件内容替换为下面：",[245,124356,124358],{"className":117436,"code":124357,"language":117438,"meta":174,"style":174},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[251,124359,124360],{"__ignoreMap":174},[254,124361,124362,124365,124368,124371],{"class":256,"line":257},[254,124363,124364],{"class":2103},"deb",[254,124366,124367],{"class":369}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[254,124369,124370],{"class":369}," stable",[254,124372,124373],{"class":369}," main\n",[1271,124375,124376,124403],{},[24,124377,124378,124379,124381,124382],{},"如果你使用的是",[251,124380,123214],{},"编辑器：",[1271,124383,124384,124391,124397],{},[24,124385,124386,124387,124390],{},"按 ",[251,124388,124389],{},"Ctrl+O"," 保存文件。",[24,124392,124386,124393,124396],{},[251,124394,124395],{},"Enter"," 确认文件名。",[24,124398,124386,124399,124402],{},[251,124400,124401],{},"Ctrl+X"," 退出编辑器。",[24,124404,124378,124405,124381,124408],{},[251,124406,124407],{},"vim",[1271,124409,124410,124416],{},[24,124411,124386,124412,124415],{},[251,124413,124414],{},"Esc"," 退出编辑模式。",[24,124417,124418,124419,124421],{},"输入 ",[251,124420,119361],{}," 保存并退出。",[14,124423,124424],{},"接下来重新更新软件源：",[245,124426,124428],{"className":117436,"code":124427,"language":117438,"meta":174,"style":174},"pkg update && pkg upgrade\n",[251,124429,124430],{"__ignoreMap":174},[254,124431,124432,124434,124436,124438,124440],{"class":256,"line":257},[254,124433,124331],{"class":2103},[254,124435,117487],{"class":369},[254,124437,26331],{"class":264},[254,124439,124331],{"class":2103},[254,124441,117473],{"class":369},[14,124443,124444],{},"安装python：",[245,124446,124448],{"className":117436,"code":124447,"language":117438,"meta":174,"style":174},"pkg install python\n",[251,124449,124450],{"__ignoreMap":174},[254,124451,124452,124454,124456],{"class":256,"line":257},[254,124453,124331],{"class":2103},[254,124455,23975],{"class":369},[254,124457,124458],{"class":369}," python\n",[14,124460,124461,26614],{},[414,124462,124463],{},"通过Termux访问设备存储",[14,124465,124466],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[245,124468,124470],{"className":117436,"code":124469,"language":117438,"meta":174,"style":174},"termux-setup-storage\n",[251,124471,124472],{"__ignoreMap":174},[254,124473,124474],{"class":256,"line":257},[254,124475,124469],{"class":2103},[21,124477,124478],{},[24,124479,124480,26614,124483],{},[414,124481,124482],{},"进入HTML文件所在的目录",[21,124484,124485],{},[24,124486,124487,124488,124490],{},"使用",[251,124489,101417],{},"命令进入HTML文件所在的目录：",[245,124492,124494],{"className":117436,"code":124493,"language":117438,"meta":174,"style":174},"cd ~\u002Fyour_html_folder\n",[251,124495,124496],{"__ignoreMap":174},[254,124497,124498,124500],{"class":256,"line":257},[254,124499,101417],{"class":313},[254,124501,124502],{"class":369}," ~\u002Fyour_html_folder\n",[21,124504,124505],{"start":175},[24,124506,124507,26614,124510,124515,124532],{},[414,124508,124509],{},"启动Python HTTP服务器",[21,124511,124512],{},[24,124513,124514],{},"运行以下命令启动一个简单的HTTP服务器：",[245,124516,124518],{"className":117436,"code":124517,"language":117438,"meta":174,"style":174},"python -m http.server 8000\n",[251,124519,124520],{"__ignoreMap":174},[254,124521,124522,124524,124526,124529],{"class":256,"line":257},[254,124523,30521],{"class":2103},[254,124525,101023],{"class":313},[254,124527,124528],{"class":369}," http.server",[254,124530,124531],{"class":313}," 8000\n",[21,124533,124534],{"start":1319},[24,124535,124536,124537,124540],{},"这会在端口",[251,124538,124539],{},"8000","上启动一个Web服务器。",[1271,124542,124543],{},[24,124544,124545],{},"启动服务器后，Termux会显示日志信息，例如：",[245,124547,124549],{"className":120956,"code":124548,"language":120958,"meta":120959,"style":174},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[251,124550,124551],{"__ignoreMap":174},[254,124552,124553],{"class":256,"line":257},[254,124554,124548],{},[1271,124556,124557],{},[24,124558,124559],{},"这表示服务器已成功启动。",[14,124561,124562],{},[414,124563,124564],{},"在浏览器中访问HTML文件",[21,124566,124567],{},[24,124568,124569,26614,124572,124577],{},[414,124570,124571],{},"在同一设备上访问",[21,124573,124574],{},[24,124575,124576],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[245,124578,124581],{"className":124579,"code":124580,"language":71805,"meta":174,"style":174},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[251,124582,124583],{"__ignoreMap":174},[254,124584,124585,124588],{"class":256,"line":257},[254,124586,124587],{"class":264},"http:",[254,124589,124590],{"class":323},"\u002F\u002Flocalhost:8000\n",[1271,124592,124593],{},[24,124594,124595,124596,124599],{},"如果HTML文件中有",[251,124597,124598],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[34,124601,124603],{"id":124602},"_76-linux重点知识","7.6 Linux重点知识",[225,124605,124607],{"id":124606},"_761-关于点的说明","7.6.1 关于点的说明",[14,124609,124610],{},[1602,124611],{"alt":174,"src":124612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[14,124614,124615],{},"一点本目录，两点上目录",[225,124617,124619],{"id":124618},"_762-目录","7.6.2 目录",[22139,124621,124623],{"id":124622},"_7621-系统启动必须","7.6.2.1 系统启动必须",[14,124625,124626],{},[414,124627,124628],{},"\u002Fboot:",[14,124630,124631],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[14,124633,124634],{},[414,124635,124636],{},"\u002Fetc:",[14,124638,124639],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[14,124641,124642],{},[414,124643,124644],{},"\u002Flib：",[14,124646,124647],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[14,124649,124650],{},[414,124651,124652],{},"\u002Fsys:",[14,124654,124655],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[22139,124657,124659],{"id":124658},"_7622-指令集合","7.6.2.2 指令集合",[14,124661,124662],{},[414,124663,124664],{},"\u002Fbin:",[14,124666,124667],{},"为二进制文件的缩写，存放最经常使用的命令",[14,124669,124670],{},[414,124671,124672],{},"\u002Fsbin:",[14,124674,124675],{},"只有系统管理员才能使用的程序和指令",[22139,124677,124679],{"id":124678},"_7623-外部文件管理","7.6.2.3 外部文件管理",[14,124681,124682],{},[414,124683,124684],{},"\u002Fdev:",[14,124686,124687],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[14,124689,124690],{},[414,124691,124692],{},"\u002Fmedia:",[14,124694,124695],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[14,124697,124698],{},[414,124699,124700],{},"\u002Fmnt:",[14,124702,124703],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[22139,124705,124707],{"id":124706},"_7624-临时文件","7.6.2.4 临时文件",[14,124709,124710],{},[414,124711,124712],{},"\u002Frun:",[14,124714,124715],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[14,124717,124718],{},[414,124719,124720],{},"\u002Flost+found:",[14,124722,124723],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[14,124725,124726],{},[414,124727,124728],{},"\u002Ftmp:",[14,124730,124731],{},"这个目录是用来存放一些临时文件的",[22139,124733,124735],{"id":124734},"_7625-账户","7.6.2.5 账户",[14,124737,124738],{},[414,124739,124740],{},"\u002Froot：",[14,124742,124743],{},"系统管理员的用户主目录",[14,124745,124746,26614],{},[414,124747,124748],{},"\u002Fhome",[14,124750,124751],{},"用户的主目录，以用户的账号命名的",[14,124753,124754,26614],{},[414,124755,124756],{},"\u002Fusr",[14,124758,124759],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[14,124761,124762],{},[414,124763,124764],{},"\u002Fusr\u002Fbin：",[14,124766,124767],{},"系统用户使用的应用程序与指令",[14,124769,124770],{},[414,124771,124772],{},"\u002Fusr\u002Fsbin：",[14,124774,124775],{},"超级用户使用的比较高级的管理程序和系统守护程序",[14,124777,124778],{},[414,124779,124780],{},"\u002Fusr\u002Fsrc：",[14,124782,124783],{},"内核源代码默认的放置目录",[22139,124785,124787],{"id":124786},"_7626-运行过程要用","7.6.2.6 运行过程要用",[14,124789,124790],{},[414,124791,124792],{},"\u002Fvar：",[14,124794,124795],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[14,124797,124798],{},[414,124799,124800],{},"\u002Fproc:",[14,124802,124803,124804,124807],{},"管理 ",[414,124805,124806],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[22139,124809,124811],{"id":124810},"_7627-扩展用的","7.6.2.7 扩展用的",[14,124813,124814],{},[414,124815,124816],{},"\u002Fopt:",[14,124818,124819],{},"默认是空的，我们安装额外软件可以放在这个里面",[14,124821,124822],{},[414,124823,124824],{},"\u002Fsrv:",[14,124826,124827],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[225,124829,124831],{"id":124830},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[14,124833,124834],{},[1602,124835],{"alt":174,"src":124836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[14,124838,124839],{},"windows-->linux:",[14,124841,124842],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[14,124844,124845],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[14,124847,124848],{},"linux传输文件到windows",[14,124850,124851],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[225,124853,124855],{"id":124854},"_764-易忘知识","7.6.4 易忘知识",[14,124857,124858],{},"操作系统内核查看",[245,124860,124861],{"className":117436,"code":121430,"language":117438,"meta":174,"style":174},[251,124862,124863],{"__ignoreMap":174},[254,124864,124865,124867],{"class":256,"line":257},[254,124866,70345],{"class":2103},[254,124868,121439],{"class":313},[14,124870,124871],{},[1602,124872],{"alt":174,"src":124873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[14,124875,124876],{},[1602,124877],{"alt":174,"src":124878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[245,124880,124882],{"className":117436,"code":124881,"language":117438,"meta":174,"style":174},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[251,124883,124884,124896],{"__ignoreMap":174},[254,124885,124886,124888,124891,124894],{"class":256,"line":257},[254,124887,121647],{"class":2103},[254,124889,124890],{"class":369}," mvtest",[254,124892,124893],{"class":369}," mvtest2",[254,124895,2814],{"class":264},[254,124897,124898],{"class":256,"line":175},[254,124899,124900],{"class":2103},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[14,124902,124903],{},[1602,124904],{"alt":174,"src":124905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[14,124907,124908],{},[1602,124909],{"alt":174,"src":124910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[14,124912,124913,124914,124917],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[251,124915,124916],{},"du -a"," 可以快速查看磁盘使用细节。",[225,124919,124921],{"id":124920},"_765-vim","7.6.5 Vim",[14,124923,124924],{},[1602,124925],{"alt":174,"src":124926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[14,124928,124929],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[14,124931,124932],{},"一开始进去为命令模式，此时点击输入的字母为命令",[14,124934,124935],{},[414,124936,124937],{},"1.命令模式：",[14,124939,124940],{},"i 切换到输入模式，在光标当前位置开始输入文本",[14,124942,124943],{},"x 删除当前光标所在处的字符",[14,124945,124946],{},"：切换到底线命令模式，以在最底一行输入命令",[14,124948,124949],{},"a 进行插入模式，在光标下一个位置输入文本",[14,124951,124952],{},"o 在当前的下方插入一个新行，并进入插入模式",[14,124954,124955],{},"0 在当前行的上方插入一个新行，并进入插入模式",[14,124957,124958],{},"dd 剪切当前行",[14,124960,124961],{},"yy 复制当前行",[14,124963,124964],{},"p 粘贴剪贴板内容到光标下方",[14,124966,124967],{},"P 粘贴剪贴板内容到光标上方",[14,124969,124970],{},"u 撤销上一次操作",[14,124972,124973],{},"ctrl+r 重做上一次操作",[14,124975,124976,124978],{},[1059,124977],{}," 保存文件",[14,124980,124981,124983],{},[909,124982],{}," 退出Vim编辑器",[14,124985,124986,124988],{},[909,124987],{},"! 强制退出Vim编辑器，不保存修改",[14,124990,124991],{},[414,124992,124993],{},"2.输入模式：",[14,124995,124996],{},[1602,124997],{"alt":174,"src":124998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[14,125000,125001],{},[414,125002,125003],{},"3.底线命令模式：",[14,125005,125006],{},[1602,125007],{"alt":174,"src":125008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[14,125010,125011],{},"按下esc可以退出底线命令模式",[225,125013,125015],{"id":125014},"_766-apt","7.6.6 apt",[14,125017,125018],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[225,125020,125022],{"id":125021},"_767-home与root的区别","7.6.7 home与root的区别",[14,125024,125025],{},[1602,125026],{"alt":174,"src":125027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[14,125029,125030],{},[1602,125031],{"alt":174,"src":125032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[14,125034,125035],{},[1602,125036],{"alt":174,"src":125037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[14,125039,125040],{},[1602,125041],{"alt":174,"src":125042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[225,125044,125046],{"id":125045},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[14,125048,125049],{},[42,125050,125051],{"href":125051,"rel":125052},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[151],[21,125054,125055,125058],{},[24,125056,125057],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[24,125059,125060],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[14,125062,125063],{},[1602,125064],{"alt":174,"src":125065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[14,125067,125068],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[14,125070,125071],{},[1602,125072],{"alt":174,"src":125073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[245,125075,125077],{"className":120956,"code":125076,"language":120958,"meta":120959,"style":174},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[251,125078,125079,125084],{"__ignoreMap":174},[254,125080,125081],{"class":256,"line":257},[254,125082,125083],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[254,125085,125086],{"class":256,"line":175},[254,125087,125088],{},".\u002Fpycharm.sh\n",[14,125090,125091],{},"3️⃣创建.desktop文件",[14,125093,125094],{},[414,125095,125096],{},"原理：",[1271,125098,125099,125109],{},[24,125100,125101,125102,125108],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[414,125103,125104,125107],{},[251,125105,125106],{},".desktop"," 文件"," 来识别应用。",[24,125110,125111,125113,125114],{},[251,125112,125106],{}," 文件相当于一个“应用注册表”，告诉系统：",[1271,125115,125116,125119,125122,125125,125128],{},[24,125117,125118],{},"应用名字（Name）",[24,125120,125121],{},"图标（Icon）",[24,125123,125124],{},"执行命令（Exec）",[24,125126,125127],{},"分类（Categories）",[24,125129,125130],{},"是否需要终端（Terminal）",[245,125132,125134],{"className":120956,"code":125133,"language":120958,"meta":120959,"style":174},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[251,125135,125136,125141],{"__ignoreMap":174},[254,125137,125138],{"class":256,"line":257},[254,125139,125140],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[254,125142,125143],{"class":256,"line":175},[254,125144,125145],{},"nano pycharm.desktop\n",[14,125147,125148],{},"nano是一个命令行下的编辑器，也可以使用vim",[245,125150,125152],{"className":120956,"code":125151,"language":120958,"meta":120959,"style":174},"[Desktop Entry]\nVersion=1.0\nType=Application\nName=PyCharm\nIcon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\nExec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\nComment=JetBrains PyCharm IDE\nCategories=Development;IDE;\nTerminal=false\nStartupWMClass=jetbrains-pycharm\n",[251,125153,125154,125159,125164,125169,125174,125179,125184,125189,125194,125199],{"__ignoreMap":174},[254,125155,125156],{"class":256,"line":257},[254,125157,125158],{},"[Desktop Entry]\n",[254,125160,125161],{"class":256,"line":175},[254,125162,125163],{},"Version=1.0\n",[254,125165,125166],{"class":256,"line":1319},[254,125167,125168],{},"Type=Application\n",[254,125170,125171],{"class":256,"line":1334},[254,125172,125173],{},"Name=PyCharm\n",[254,125175,125176],{"class":256,"line":1340},[254,125177,125178],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[254,125180,125181],{"class":256,"line":1354},[254,125182,125183],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[254,125185,125186],{"class":256,"line":1360},[254,125187,125188],{},"Comment=JetBrains PyCharm IDE\n",[254,125190,125191],{"class":256,"line":1451},[254,125192,125193],{},"Categories=Development;IDE;\n",[254,125195,125196],{"class":256,"line":1457},[254,125197,125198],{},"Terminal=false\n",[254,125200,125201],{"class":256,"line":1469},[254,125202,125203],{},"StartupWMClass=jetbrains-pycharm\n",[1271,125205,125206,125212,125218,125224],{},[24,125207,125208,125211],{},[251,125209,125210],{},"Exec"," → 点击图标时执行的命令",[24,125213,125214,125217],{},[251,125215,125216],{},"Icon"," → 显示在菜单和桌面上的图标",[24,125219,125220,125223],{},[251,125221,125222],{},"Terminal=false"," → 不打开终端",[24,125225,125226,125229],{},[251,125227,125228],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125231,125232,125233],"blockquote",{},[14,125234,125235,125236,125238,125239],{},"可以理解成 ",[251,125237,125106],{}," 文件是 Linux 的 ",[414,125240,125241],{},"快捷方式配置文件",[14,125243,125244],{},"4️⃣设置可执行权限",[245,125246,125248],{"className":120956,"code":125247,"language":120958,"meta":120959,"style":174},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[251,125249,125250],{"__ignoreMap":174},[254,125251,125252],{"class":256,"line":257},[254,125253,125247],{},[14,125255,125256],{},"5️⃣桌面图标启动的话如下：",[245,125258,125260],{"className":120956,"code":125259,"language":120958,"meta":120959,"style":174},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[251,125261,125262,125267],{"__ignoreMap":174},[254,125263,125264],{"class":256,"line":257},[254,125265,125266],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[254,125268,125269],{"class":256,"line":175},[254,125270,125271],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[21,125273,125274],{"start":1319},[24,125275,125276],{},"下载Appimage文件实现软件的安装",[14,125278,125279],{},"1️⃣先下载appimage",[14,125281,125282],{},[42,125283,125284],{"href":125284,"rel":125285},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[151],[14,125287,125288],{},[1602,125289],{"alt":174,"src":125290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[14,125292,125293],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[14,125295,125296],{},[1602,125297],{"alt":174,"src":125298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[14,125300,125301],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[14,125303,125304],{},[1602,125305],{"alt":174,"src":125306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[14,125308,125309],{},[1602,125310],{"alt":174,"src":125311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[14,125313,125314,125315,125318],{},"3️⃣给他们放在",[251,125316,125317],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[14,125320,125321],{},"4️⃣给软件执行权限",[245,125323,125325],{"className":120956,"code":125324,"language":120958,"meta":120959,"style":174},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[251,125326,125327,125332],{"__ignoreMap":174},[254,125328,125329],{"class":256,"line":257},[254,125330,125331],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[254,125333,125334],{"class":256,"line":175},[254,125335,125336],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[14,125338,125339],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[245,125341,125343],{"className":117436,"code":125342,"language":117438,"meta":174,"style":174},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[251,125344,125345,125352,125359,125365],{"__ignoreMap":174},[254,125346,125347,125349],{"class":256,"line":257},[254,125348,101417],{"class":313},[254,125350,125351],{"class":369}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[254,125353,125354,125356],{"class":256,"line":175},[254,125355,101424],{"class":2103},[254,125357,125358],{"class":369}," .\u002Fqqmusic.desktop\n",[254,125360,125361,125363],{"class":256,"line":1319},[254,125362,124407],{"class":2103},[254,125364,125358],{"class":369},[254,125366,125367,125369,125371,125373],{"class":256,"line":1334},[254,125368,24717],{"class":2103},[254,125370,24720],{"class":369},[254,125372,123273],{"class":369},[254,125374,125358],{"class":369},[14,125376,125377,125379],{},[251,125378,101424],{},"：一个 Linux 命令，主要功能是：",[1271,125381,125382,125385],{},[24,125383,125384],{},"如果文件不存在，就创建一个新的空文件",[24,125386,125387],{},"如果文件已存在，就更新该文件的最后修改时间",[245,125389,125391],{"className":120956,"code":125390,"language":120958,"meta":120959,"style":174},"[Desktop Entry]\nName=QQ音乐\nExec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\nIcon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\nType=Application\nCategories=Audio;Music;Player;\nComment=QQ Music Client for Linux\n",[251,125392,125393,125397,125402,125407,125412,125416,125421],{"__ignoreMap":174},[254,125394,125395],{"class":256,"line":257},[254,125396,125158],{},[254,125398,125399],{"class":256,"line":175},[254,125400,125401],{},"Name=QQ音乐\n",[254,125403,125404],{"class":256,"line":1319},[254,125405,125406],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[254,125408,125409],{"class":256,"line":1334},[254,125410,125411],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[254,125413,125414],{"class":256,"line":1340},[254,125415,125168],{},[254,125417,125418],{"class":256,"line":1354},[254,125419,125420],{},"Categories=Audio;Music;Player;\n",[254,125422,125423],{"class":256,"line":1360},[254,125424,125425],{},"Comment=QQ Music Client for Linux\n",[14,125427,125428],{},"将文件复制进去",[14,125430,125431],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[14,125433,125434],{},[1602,125435],{"alt":174,"src":125436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[14,125438,125439],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[14,125441,125442],{},[1602,125443],{"alt":174,"src":125444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[14,125446,125447,125448,125451,125452,125455],{},"如果你用的不是KDE，那么也可以直接修改",[251,125449,125450],{},"qqmuic.desktop","：在exec的末尾加上",[251,125453,125454],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[245,125457,125459],{"className":120956,"code":125458,"language":120958,"meta":120959,"style":174},"[Desktop Entry]\nName=QQ音乐\nExec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\nIcon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\nType=Application\nCategories=Audio;Music;Player;\nComment=QQ Music Client for Linux\n",[251,125460,125461,125465,125469,125474,125478,125482,125486],{"__ignoreMap":174},[254,125462,125463],{"class":256,"line":257},[254,125464,125158],{},[254,125466,125467],{"class":256,"line":175},[254,125468,125401],{},[254,125470,125471],{"class":256,"line":1319},[254,125472,125473],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[254,125475,125476],{"class":256,"line":1334},[254,125477,125411],{},[254,125479,125480],{"class":256,"line":1340},[254,125481,125168],{},[254,125483,125484],{"class":256,"line":1354},[254,125485,125420],{},[254,125487,125488],{"class":256,"line":1360},[254,125489,125425],{},[14,125491,125492],{},[1602,125493],{"alt":174,"src":125494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[14,125496,125497],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[245,125499,125501],{"className":120956,"code":125500,"language":120958,"meta":120959,"style":174},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[251,125502,125503],{"__ignoreMap":174},[254,125504,125505],{"class":256,"line":257},[254,125506,125500],{},[21,125508,125509],{"start":1334},[24,125510,125511],{},"去Flathub上安装软件",[14,125513,125514],{},[42,125515,125516],{"href":125516,"rel":125517},"https:\u002F\u002Fflathub.org\u002F",[151],[14,125519,125520],{},"1️⃣去上面的官网搜索软件+下载软件",[14,125522,125523],{},[1602,125524],{"alt":174,"src":125525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[245,125527,125529],{"className":120956,"code":125528,"language":120958,"meta":120959,"style":174},"flatpak install flathub com.obsproject.Studio\n",[251,125530,125531],{"__ignoreMap":174},[254,125532,125533],{"class":256,"line":257},[254,125534,125528],{},[14,125536,125537],{},[1602,125538],{"alt":174,"src":125539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[14,125541,125542],{},"2️⃣运行软件",[14,125544,125545],{},"a.官方方式：",[14,125547,125548],{},[1602,125549],{"alt":174,"src":125550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[245,125552,125553],{"className":120956,"code":125528,"language":120958,"meta":120959,"style":174},[251,125554,125555],{"__ignoreMap":174},[254,125556,125557],{"class":256,"line":257},[254,125558,125528],{},[14,125560,125561],{},"b.当普通软件运行：",[14,125563,125564],{},[1602,125565],{"alt":174,"src":125566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[14,125568,125569],{},[1602,125570],{"alt":174,"src":125571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[5267,125573,125574],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":174,"searchDepth":175,"depth":175,"links":125576},[125577,125578,125583,125584,125590,125591],{"id":122309,"depth":175,"text":122310},{"id":122651,"depth":175,"text":122652,"children":125579},[125580,125581,125582],{"id":122655,"depth":1319,"text":122656},{"id":122722,"depth":1319,"text":122723},{"id":122983,"depth":1319,"text":122984},{"id":123136,"depth":175,"text":123137},{"id":123374,"depth":175,"text":123375,"children":125585},[125586,125587,125588,125589],{"id":123426,"depth":1319,"text":123427},{"id":123712,"depth":1319,"text":123713},{"id":123983,"depth":1319,"text":123984},{"id":124242,"depth":1319,"text":124243},{"id":124301,"depth":175,"text":124302},{"id":124602,"depth":175,"text":124603,"children":125592},[125593,125594,125595,125596,125597,125598,125599,125600],{"id":124606,"depth":1319,"text":124607},{"id":124618,"depth":1319,"text":124619},{"id":124830,"depth":1319,"text":124831},{"id":124854,"depth":1319,"text":124855},{"id":124920,"depth":1319,"text":124921},{"id":125014,"depth":1319,"text":125015},{"id":125021,"depth":1319,"text":125022},{"id":125045,"depth":1319,"text":125046},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122301,"description":23518},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":125607,"title":125608,"body":125609,"description":23518,"extension":181,"meta":125613,"navigation":184,"path":125614,"seo":125615,"stem":125616,"__hash__":125617},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":125610,"toc":125611},[],{"title":174,"searchDepth":175,"depth":175,"links":125612},[],{"category":30404},"\u002Fwiki\u002F2025-01-27-linux",{"title":125608,"description":23518},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":125619,"title":125620,"body":125621,"description":125625,"extension":181,"meta":126016,"navigation":184,"path":126017,"seo":126018,"stem":126019,"__hash__":126020},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":125622,"toc":126014},[125623,125626,125630,125647,125650,125703,125707,125709,125749,125758,125762,125765,126006,126011],[14,125624,125625],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,125627,125629],{"id":125628},"_1ubuntu环境配置","1.Ubuntu环境配置",[21,125631,125632,125635,125638,125641,125644],{},[24,125633,125634],{},"ubuntu环境换源",[24,125636,125637],{},"安装cuda",[24,125639,125640],{},"安装miniconda",[24,125642,125643],{},"安装pytorch",[24,125645,125646],{},"安装genesis",[14,125648,125649],{},"参考链接：",[245,125651,125653],{"className":23963,"code":125652,"language":23965,"meta":174,"style":174},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[251,125654,125655],{"__ignoreMap":174},[254,125656,125657,125660,125663,125666,125668,125671,125674,125676,125679,125682,125684,125687,125690,125692,125695,125698,125700],{"class":256,"line":257},[254,125658,125659],{"class":2103},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[254,125661,125662],{"class":369},"=blogdetail",[254,125664,125665],{"class":264},"&sharetype",[254,125667,310],{"class":260},[254,125669,125670],{"class":369},"blogdetail",[254,125672,125673],{"class":264},"&sharerId",[254,125675,310],{"class":260},[254,125677,125678],{"class":369},"144728092",[254,125680,125681],{"class":264},"&sharerefer",[254,125683,310],{"class":260},[254,125685,125686],{"class":369},"PC",[254,125688,125689],{"class":264},"&sharesource",[254,125691,310],{"class":260},[254,125693,125694],{"class":369},"qq_69379513",[254,125696,125697],{"class":264},"&sharefrom",[254,125699,310],{"class":260},[254,125701,125702],{"class":369},"from_link\n",[10,125704,125706],{"id":125705},"_2genesis-报错issue","2.Genesis 报错issue",[14,125708,125649],{},[245,125710,125711],{"className":23963,"code":125652,"language":23965,"meta":174,"style":174},[251,125712,125713],{"__ignoreMap":174},[254,125714,125715,125717,125719,125721,125723,125725,125727,125729,125731,125733,125735,125737,125739,125741,125743,125745,125747],{"class":256,"line":257},[254,125716,125659],{"class":2103},[254,125718,125662],{"class":369},[254,125720,125665],{"class":264},[254,125722,310],{"class":260},[254,125724,125670],{"class":369},[254,125726,125673],{"class":264},[254,125728,310],{"class":260},[254,125730,125678],{"class":369},[254,125732,125681],{"class":264},[254,125734,310],{"class":260},[254,125736,125686],{"class":369},[254,125738,125689],{"class":264},[254,125740,310],{"class":260},[254,125742,125694],{"class":369},[254,125744,125697],{"class":264},[254,125746,310],{"class":260},[254,125748,125702],{"class":369},[245,125750,125752],{"className":23963,"code":125751,"language":23965,"meta":174,"style":174},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[251,125753,125754],{"__ignoreMap":174},[254,125755,125756],{"class":256,"line":257},[254,125757,125751],{"class":2103},[10,125759,125761],{"id":125760},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[14,125763,125764],{},"hello_robot.py",[245,125766,125768],{"className":30519,"code":125767,"language":30521,"meta":174,"style":174},"import os\nos.environ['PYOPENGL_PLATFORM'] = 'glx'\n\nimport genesis as gs\nfrom pynput import keyboard\n\ngs.init(backend=gs.gpu)\n\nscene = gs.Scene(show_viewer=True)\nplane = scene.add_entity(gs.morphs.Plane())\nfranka = scene.add_entity(\n    gs.morphs.MJCF(file='xml\u002Ffranka_emika_panda\u002Fpanda.xml'),\n)\n\nscene.build()\n\ndef on_press(key):\n    try:\n        if key.char == 'q':\n            return False\n    except AttributeError:\n        pass\n\nlistener = keyboard.Listener(on_press=on_press)\nlistener.start()\n\nwhile listener.running:\n    scene.step()\n",[251,125769,125770,125776,125791,125795,125807,125819,125823,125836,125840,125859,125869,125879,125893,125897,125901,125906,125910,125920,125927,125941,125948,125958,125963,125967,125985,125990,125994,126001],{"__ignoreMap":174},[254,125771,125772,125774],{"class":256,"line":257},[254,125773,30533],{"class":260},[254,125775,45446],{"class":264},[254,125777,125778,125781,125784,125786,125788],{"class":256,"line":175},[254,125779,125780],{"class":264},"os.environ[",[254,125782,125783],{"class":369},"'PYOPENGL_PLATFORM'",[254,125785,4583],{"class":264},[254,125787,310],{"class":260},[254,125789,125790],{"class":369}," 'glx'\n",[254,125792,125793],{"class":256,"line":1319},[254,125794,2540],{"emptyLinePlaceholder":184},[254,125796,125797,125799,125802,125804],{"class":256,"line":1334},[254,125798,30533],{"class":260},[254,125800,125801],{"class":264}," genesis ",[254,125803,31524],{"class":260},[254,125805,125806],{"class":264}," gs\n",[254,125808,125809,125811,125814,125816],{"class":256,"line":1340},[254,125810,30878],{"class":260},[254,125812,125813],{"class":264}," pynput ",[254,125815,30533],{"class":260},[254,125817,125818],{"class":264}," keyboard\n",[254,125820,125821],{"class":256,"line":1354},[254,125822,2540],{"emptyLinePlaceholder":184},[254,125824,125825,125828,125831,125833],{"class":256,"line":1360},[254,125826,125827],{"class":264},"gs.init(",[254,125829,125830],{"class":5357},"backend",[254,125832,310],{"class":260},[254,125834,125835],{"class":264},"gs.gpu)\n",[254,125837,125838],{"class":256,"line":1451},[254,125839,2540],{"emptyLinePlaceholder":184},[254,125841,125842,125845,125847,125850,125853,125855,125857],{"class":256,"line":1457},[254,125843,125844],{"class":264},"scene ",[254,125846,310],{"class":260},[254,125848,125849],{"class":264}," gs.Scene(",[254,125851,125852],{"class":5357},"show_viewer",[254,125854,310],{"class":260},[254,125856,31617],{"class":313},[254,125858,271],{"class":264},[254,125860,125861,125864,125866],{"class":256,"line":1469},[254,125862,125863],{"class":264},"plane ",[254,125865,310],{"class":260},[254,125867,125868],{"class":264}," scene.add_entity(gs.morphs.Plane())\n",[254,125870,125871,125874,125876],{"class":256,"line":1752},[254,125872,125873],{"class":264},"franka ",[254,125875,310],{"class":260},[254,125877,125878],{"class":264}," scene.add_entity(\n",[254,125880,125881,125884,125886,125888,125891],{"class":256,"line":1757},[254,125882,125883],{"class":264},"    gs.morphs.MJCF(",[254,125885,45495],{"class":5357},[254,125887,310],{"class":260},[254,125889,125890],{"class":369},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[254,125892,38188],{"class":264},[254,125894,125895],{"class":256,"line":1763},[254,125896,271],{"class":264},[254,125898,125899],{"class":256,"line":1768},[254,125900,2540],{"emptyLinePlaceholder":184},[254,125902,125903],{"class":256,"line":1782},[254,125904,125905],{"class":264},"scene.build()\n",[254,125907,125908],{"class":256,"line":1787},[254,125909,2540],{"emptyLinePlaceholder":184},[254,125911,125912,125914,125917],{"class":256,"line":1793},[254,125913,32088],{"class":260},[254,125915,125916],{"class":2103}," on_press",[254,125918,125919],{"class":264},"(key):\n",[254,125921,125922,125925],{"class":256,"line":1814},[254,125923,125924],{"class":260},"    try",[254,125926,3879],{"class":264},[254,125928,125929,125931,125934,125936,125939],{"class":256,"line":1819},[254,125930,2637],{"class":260},[254,125932,125933],{"class":264}," key.char ",[254,125935,3089],{"class":260},[254,125937,125938],{"class":369}," 'q'",[254,125940,3879],{"class":264},[254,125942,125943,125945],{"class":256,"line":1833},[254,125944,15873],{"class":260},[254,125946,125947],{"class":313}," False\n",[254,125949,125950,125953,125956],{"class":256,"line":1838},[254,125951,125952],{"class":260},"    except",[254,125954,125955],{"class":313}," AttributeError",[254,125957,3879],{"class":264},[254,125959,125960],{"class":256,"line":1867},[254,125961,125962],{"class":260},"        pass\n",[254,125964,125965],{"class":256,"line":1872},[254,125966,2540],{"emptyLinePlaceholder":184},[254,125968,125969,125972,125974,125977,125980,125982],{"class":256,"line":1889},[254,125970,125971],{"class":264},"listener ",[254,125973,310],{"class":260},[254,125975,125976],{"class":264}," keyboard.Listener(",[254,125978,125979],{"class":5357},"on_press",[254,125981,310],{"class":260},[254,125983,125984],{"class":264},"on_press)\n",[254,125986,125987],{"class":256,"line":1894},[254,125988,125989],{"class":264},"listener.start()\n",[254,125991,125992],{"class":256,"line":1899},[254,125993,2540],{"emptyLinePlaceholder":184},[254,125995,125996,125998],{"class":256,"line":1904},[254,125997,108804],{"class":260},[254,125999,126000],{"class":264}," listener.running:\n",[254,126002,126003],{"class":256,"line":1918},[254,126004,126005],{"class":264},"    scene.step()\n",[14,126007,126008],{},[1602,126009],{"alt":174,"src":126010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[5267,126012,126013],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":174,"searchDepth":175,"depth":175,"links":126015},[],{"category":183},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":125620,"description":125625},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":126022,"title":126023,"body":126024,"description":23518,"extension":181,"meta":126039,"navigation":184,"path":126040,"seo":126041,"stem":126042,"__hash__":126043},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":126025,"toc":126036},[126026,126029,126033],[10,126027,126023],{"id":126028},"_1-基础知识",[34,126030,126032],{"id":126031},"_11-js的组成","1.1 js的组成",[14,126034,126035],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":174,"searchDepth":175,"depth":175,"links":126037},[126038],{"id":126031,"depth":175,"text":126032},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":126023,"description":23518},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":126045,"title":126046,"body":126047,"description":23518,"extension":181,"meta":126186,"navigation":184,"path":126187,"seo":126188,"stem":126189,"__hash__":126190},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":126048,"toc":126174},[126049,126052,126056,126059,126063,126073,126077,126080,126083,126086,126090,126097,126103,126107,126113,126124,126128,126131,126135,126138,126142,126145,126149,126152,126156,126159,126162,126165,126168,126171],[10,126050,126046],{"id":126051},"_2-vscode必备内容",[34,126053,126055],{"id":126054},"_21-标签分类","2.1 标签分类",[14,126057,126058],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[34,126060,126062],{"id":126061},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[14,126064,126065,126066,126068,126069,126072],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[251,126067,491],{}," 然后按 ",[251,126070,126071],{},"Tab","，快速自动生成基本结构。",[34,126074,126076],{"id":126075},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[14,126078,126079],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[14,126081,126082],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[14,126084,126085],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[34,126087,126089],{"id":126088},"_24-视图缩放","2.4 视图缩放",[14,126091,126092,126093,126096],{},"缩放视图 ",[251,126094,126095],{},"ctrl+"," 可实现代码增大。",[14,126098,126099,126102],{},[251,126100,126101],{},"ctrl-"," 可实现代码减小。",[34,126104,126106],{"id":126105},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[14,126108,126109,126110,28526],{},"VSCode 新建文件快捷键为 ",[251,126111,126112],{},"ctrl+N",[14,126114,126115,126116,126119,126120,126123],{},"保存快捷键为 ",[251,126117,126118],{},"ctrl+S","，将文本保存为 ",[251,126121,126122],{},".html"," 文件。",[34,126125,126127],{"id":126126},"_26-auto-rename-tag","2.6 Auto Rename Tag",[14,126129,126130],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[34,126132,126134],{"id":126133},"_27-vscode-icons","2.7 vscode-icons",[14,126136,126137],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[34,126139,126141],{"id":126140},"_28-easy-less","2.8 Easy LESS",[14,126143,126144],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[34,126146,126148],{"id":126147},"_29-会了吧插件","2.9 会了吧插件",[14,126150,126151],{},"会了吧插件可以展示代码中英语单词的意思。",[34,126153,126155],{"id":126154},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[14,126157,126158],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[14,126160,126161],{},"②选定多个相同的单词:ctrl+D",[14,126163,126164],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[14,126166,126167],{},"④全局替换某些单词:ctrl+h",[14,126169,126170],{},"⑤快速定位到某一行:ctrl+g",[14,126172,126173],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":174,"searchDepth":175,"depth":175,"links":126175},[126176,126177,126178,126179,126180,126181,126182,126183,126184,126185],{"id":126054,"depth":175,"text":126055},{"id":126061,"depth":175,"text":126062},{"id":126075,"depth":175,"text":126076},{"id":126088,"depth":175,"text":126089},{"id":126105,"depth":175,"text":126106},{"id":126126,"depth":175,"text":126127},{"id":126133,"depth":175,"text":126134},{"id":126140,"depth":175,"text":126141},{"id":126147,"depth":175,"text":126148},{"id":126154,"depth":175,"text":126155},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":126046,"description":23518},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126192,"title":126193,"body":126194,"description":23518,"extension":181,"meta":126353,"navigation":184,"path":126354,"seo":126355,"stem":126356,"__hash__":126357},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126195,"toc":126345},[126196,126199,126203,126213,126219,126225,126229,126238,126242,126247,126250,126253,126257,126260,126270,126279,126288,126297,126307,126314,126319,126324,126337],[10,126197,126193],{"id":126198},"_3-html文本与容器标签",[34,126200,126202],{"id":126201},"_31-标题标签","3.1 标题标签",[14,126204,126205,126208,126209,126212],{},[251,126206,126207],{},"\u003Ch1>","我是一级标签",[251,126210,126211],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[14,126214,126215,126208,126217],{},[251,126216,126207],{},[251,126218,126211],{},[14,126220,123475,126221,126224],{},[251,126222,126223],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[34,126226,126228],{"id":126227},"_32-段落标签","3.2 段落标签",[14,126230,126231,126234,126235],{},[251,126232,126233],{},"\u003Cp>","....",[251,126236,126237],{},"\u003C\u002Fp>",[34,126239,126241],{"id":126240},"_33-换行标签","3.3 换行标签",[14,126243,126244],{},[251,126245,126246],{},"\u003Cbr \u002F>",[14,126248,126249],{},"具有强制换行的作用",[14,126251,126252],{},"单标签",[34,126254,126256],{"id":126255},"_34-文本格式化标签","3.4 文本格式化标签",[14,126258,126259],{},"提供粗体、斜体和下划线等效果",[14,126261,126262,126263,82680,126266,126269],{},"加粗：",[251,126264,126265],{},"\u003Cstrong>...\u003C\u002Fstrong>",[251,126267,126268],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[14,126271,126272,126273,82680,126276,126269],{},"斜体：",[251,126274,126275],{},"\u003Cem>...\u003C\u002Fem>",[251,126277,126278],{},"\u003Ci>...\u003C\u002Fi>",[14,126280,126281,126282,82680,126285,126269],{},"删除线：",[251,126283,126284],{},"\u003Cdel>...\u003C\u002Fdel>",[251,126286,126287],{},"\u003Cs>...\u003C\u002Fs>",[14,126289,126290,126291,82680,126294,126269],{},"下划线：",[251,126292,126293],{},"\u003Cins>...\u003C\u002Fins>",[251,126295,126296],{},"\u003Cu>...\u003C\u002Fu>",[34,126298,126300,126301,18551,126304,102834],{"id":126299},"_35-div和span标签","3.5 ",[251,126302,126303],{},"\u003Cdiv>",[251,126305,126306],{},"\u003Cspan>",[14,126308,126309,101159,126311,126313],{},[251,126310,126303],{},[251,126312,126306],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[14,126315,126316],{},[251,126317,126318],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[14,126320,126321],{},[251,126322,126323],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[14,126325,126326,126327,126329,126330,126332,126333,126336],{},"两者特点：①",[251,126328,126303],{}," 标签用来布局，但一行通常只放一个 ",[251,126331,126303],{},"。可以理解为一个大盒子，独占一行，在 ",[251,126334,126335],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[14,126338,77390,126339,126341,126342,126344],{},[251,126340,126306],{}," 标签也可用于布局，一行可以放多个 ",[251,126343,126306],{},"，可理解为小盒子。",{"title":174,"searchDepth":175,"depth":175,"links":126346},[126347,126348,126349,126350,126351],{"id":126201,"depth":175,"text":126202},{"id":126227,"depth":175,"text":126228},{"id":126240,"depth":175,"text":126241},{"id":126255,"depth":175,"text":126256},{"id":126299,"depth":175,"text":126352},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126193,"description":23518},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126359,"title":126360,"body":126361,"description":23518,"extension":181,"meta":126558,"navigation":184,"path":126559,"seo":126560,"stem":126561,"__hash__":126562},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126362,"toc":126550},[126363,126366,126370,126373,126379,126386,126392,126398,126401,126404,126407,126410,126413,126416,126419,126423,126426,126429,126432,126438,126444,126450,126457,126461,126467,126473,126476,126479,126485,126491,126497,126500,126503,126507,126510,126520,126526,126530,126539,126543,126546],[10,126364,126360],{"id":126365},"_4-html图像与链接",[34,126367,126369],{"id":126368},"_41-图像标签","4.1 图像标签",[14,126371,126372],{},"（1）标签",[14,126374,126375,126378],{},[251,126376,126377],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[14,126380,126381,126382,126385],{},"src是",[251,126383,126384],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[14,126387,126388,126389],{},"alt:文本，替换文本。图像不能显示的文字 ",[251,126390,126391],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[14,126393,126394,126395],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[251,126396,126397],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[14,126399,126400],{},"width:像素，设置图像的宽度",[14,126402,126403],{},"height:像素，设置图像的高度",[14,126405,126406],{},"border：像素，设置图像的边框粗细",[14,126408,126409],{},"（2）图像标签属性的注意点：",[14,126411,126412],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[14,126414,126415],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[14,126417,126418],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[34,126420,126422],{"id":126421},"_42-路径注意要点","4.2 路径注意要点：",[14,126424,126425],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[14,126427,126428],{},"（2）根目录：就是打开文件夹的第一层根目录",[14,126430,126431],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[14,126433,126434,126435],{},"①同一级路径：图像文件位于HTML文件同一级，如",[251,126436,126437],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[14,126439,126440,126441],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[251,126442,126443],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[14,126445,126446,126447],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[251,126448,126449],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[14,126451,126452,126453,515],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[42,126454,126455],{"href":126455,"rel":126456},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[151],[34,126458,126460],{"id":126459},"_43-超链接标签","4.3 超链接标签",[14,126462,126463,126466],{},[251,126464,126465],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[14,126468,126469,126470],{},"①语法格式：",[251,126471,126472],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[14,126474,126475],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[14,126477,126478],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[14,126480,126481,126482],{},"③链接分类：外部链接：",[251,126483,126484],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[14,126486,126487,126488],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[251,126489,126490],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[14,126492,126493,126494],{},"空链接：如果当时没有确定链接目标时，",[251,126495,126496],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[14,126498,126499],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[14,126501,126502],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[34,126504,126506],{"id":126505},"_44-锚点链接","4.4 锚点链接",[14,126508,126509],{},"点我们点击链接，可以快速定位到页面中的某个位置",[14,126511,126512,126513,126516,126517],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[251,126514,126515],{},"\u003Ca href=\"#two\">","第二级",[251,126518,126519],{},"\u003C\u002Fa>",[14,126521,126522,126523],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[251,126524,126525],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[34,126527,126529],{"id":126528},"_45-注释标签","4.5 注释标签",[14,126531,126532,126535,126536],{},[251,126533,126534],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[251,126537,126538],{},"ctrl+\u002F",[34,126540,126542],{"id":126541},"_46-特殊字符","4.6 特殊字符",[14,126544,126545],{},"可以实现添加多个空格",[1602,126547],{"style":126548,"src":126549},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":174,"searchDepth":175,"depth":175,"links":126551},[126552,126553,126554,126555,126556,126557],{"id":126368,"depth":175,"text":126369},{"id":126421,"depth":175,"text":126422},{"id":126459,"depth":175,"text":126460},{"id":126505,"depth":175,"text":126506},{"id":126528,"depth":175,"text":126529},{"id":126541,"depth":175,"text":126542},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126360,"description":23518},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":126564,"title":126565,"body":126566,"description":23518,"extension":181,"meta":126859,"navigation":184,"path":126860,"seo":126861,"stem":126862,"__hash__":126863},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":126567,"toc":126850},[126568,126571,126575,126578,126581,126584,126587,126590,126593,126596,126599,126602,126622,126628,126632,126635,126638,126641,126644,126647,126650,126654,126657,126660,126663,126666,126679,126684,126687,126690,126705,126708,126711,126714,126717,126720,126724,126727,126734,126737,126740,126743,126746,126749,126755,126758,126761,126767,126770,126773,126776,126782,126785,126788,126802,126809,126812,126815,126822,126831,126834,126837,126840,126844,126847],[10,126569,126565],{"id":126570},"_5-html表格列表与表单",[34,126572,126574],{"id":126573},"_51-表格标签","5.1 表格标签",[14,126576,126577],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[14,126579,126580],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[14,126582,126583],{},"②表格基本语法：",[1602,126585],{"style":126548,"src":126586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[14,126588,126589],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[1602,126591],{"style":126548,"src":126592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[14,126594,126595],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[1602,126597],{"style":126548,"src":126598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[14,126600,126601],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[14,126603,126604,126607,126608,126610,126611,126614,126615,126617,126618,126621],{},[251,126605,126606],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[251,126609,126606],{},"内部必须拥有",[251,126612,126613],{},"\u003Ctr>","标签，一般位于第一行，",[251,126616,126606],{},"比",[251,126619,126620],{},"\u003Cth>","范围广",[14,126623,126624,126627],{},[251,126625,126626],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[34,126629,126631],{"id":126630},"_52-合并单元格","5.2 合并单元格",[14,126633,126634],{},"（1）合并单元格方式：",[14,126636,126637],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[14,126639,126640],{},"②跨列合并：colspan=\"合并单元格的个数\"",[14,126642,126643],{},"（2）目标单元格：",[14,126645,126646],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[14,126648,126649],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[34,126651,126653],{"id":126652},"_53-列表标签","5.3 列表标签",[14,126655,126656],{},"（1）分类：无序列表、有序列表、自定义列表",[14,126658,126659],{},"①无序列表：",[1602,126661],{"style":126548,"src":126662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[14,126664,126665],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[14,126667,126668,126671,126672,126675,126676,126678],{},[251,126669,126670],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[251,126673,126674],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[251,126677,126670],{},"中输入其他标签或文字是不对的",[14,126680,126681,126683],{},[251,126682,126674],{},"之间相当于一个容器，可以容纳所有元素",[14,126685,126686],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[14,126688,126689],{},"在css中去除前边的小圆点采用如下代码:",[245,126691,126695],{"className":126692,"code":126693,"language":126694,"meta":174,"style":174},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[251,126696,126697],{"__ignoreMap":174},[254,126698,126699,126702],{"class":256,"line":257},[254,126700,126701],{"class":51441},"list-style",[254,126703,126704],{"class":264},": none;\n",[14,126706,126707],{},"②有序列表：",[1602,126709],{"style":126548,"src":126710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[14,126712,126713],{},"③自定义列表：",[1602,126715],{"style":126548,"src":126716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[1602,126718],{"style":126548,"src":126719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[34,126721,126723],{"id":126722},"_54-表单标签","5.4 表单标签",[14,126725,126726],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[14,126728,126729,126730,126733],{},"（1）表单域：包含单元素的区域，",[251,126731,126732],{},"\u003Cform>","标签可以实现信息的收集和传递。",[1602,126735],{"style":126548,"src":126736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[14,126738,126739],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[14,126741,126742],{},"表单元素提交必须有name属性",[14,126744,126745],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[14,126747,126748],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[14,126750,77367,126751,126754],{},[251,126752,126753],{},"\u003Cinput>","输入表单元素",[1602,126756],{"style":126548,"src":126757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[1602,126759],{"style":126548,"src":126760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[14,126762,126763,126764],{},"单选按钮：",[251,126765,126766],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[1602,126768],{"style":126548,"src":126769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[14,126771,126772],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[1602,126774],{"style":126548,"src":126775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[14,126777,126778,126781],{},[414,126779,126780],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[14,126783,126784],{},"②select下拉表单元素：可以节约页面控件",[1602,126786],{"style":126548,"src":126787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[14,126789,126790,13936,126792,126795,126796,126798,126799,126801],{},[414,126791,294],{},[251,126793,126794],{},"\u003Cselect>","中至少包含一对",[251,126797,102855],{},"；在",[251,126800,102855],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[14,126803,126804,126805,126808],{},"③",[251,126806,126807],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[1602,126810],{"style":126548,"src":126811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[14,126813,126814],{},"3行20列",[34,126816,126818,126819,102834],{"id":126817},"_55-lable标签","5.5 ",[251,126820,126821],{},"\u003Clable>",[14,126823,126824,126825,126827,126828,126830],{},"它不是表单标签，但常常与表单标签搭配使用，",[251,126826,126821],{},"标签用于绑定一个表单标签，当点击",[251,126829,126821],{},"标签内的文本",[14,126832,126833],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[1602,126835],{"style":126548,"src":126836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[1602,126838],{"style":126548,"src":126839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[34,126841,126843],{"id":126842},"_56-实例","5.6 实例",[1602,126845],{"style":126548,"src":126846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[5267,126848,126849],{},"html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":174,"searchDepth":175,"depth":175,"links":126851},[126852,126853,126854,126855,126856,126858],{"id":126573,"depth":175,"text":126574},{"id":126630,"depth":175,"text":126631},{"id":126652,"depth":175,"text":126653},{"id":126722,"depth":175,"text":126723},{"id":126817,"depth":175,"text":126857},"5.5 \u003Clable>标签",{"id":126842,"depth":175,"text":126843},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":126565,"description":23518},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":126865,"title":126866,"body":126867,"description":23518,"extension":181,"meta":127416,"navigation":184,"path":127417,"seo":127418,"stem":127419,"__hash__":127420},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":126868,"toc":127391},[126869,126872,126876,126879,126882,126886,126889,126892,126895,126898,126901,126904,126907,126911,126914,126918,126921,126924,126927,126931,126934,126937,126940,126946,126949,126952,126955,126958,126961,126964,126967,127000,127004,127007,127010,127013,127017,127020,127023,127026,127029,127032,127036,127039,127042,127045,127049,127052,127056,127059,127063,127066,127071,127075,127078,127082,127085,127088,127091,127094,127121,127124,127128,127131,127134,127139,127142,127145,127149,127152,127157,127160,127163,127166,127170,127173,127176,127179,127183,127186,127189,127192,127196,127200,127203,127243,127246,127250,127257,127260,127264,127267,127313,127317,127320,127323,127326,127354,127358,127361,127388],[10,126870,126866],{"id":126871},"_6-css语法与文本样式",[34,126873,126875],{"id":126874},"_61-css语法规范","6.1 css语法规范",[14,126877,126878],{},"由两部分组成，选择器及一条或多条声明",[1602,126880],{"style":126548,"src":126881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[14,126883,126884],{},[414,126885,294],{},[14,126887,126888],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[14,126890,126891],{},"②属性与属性值以“键值对”的形式出现",[14,126893,126894],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[14,126896,126897],{},"④属性和属性值之间用英文“;”分开",[1602,126899],{"style":126548,"src":126900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[1602,126902],{"style":126548,"src":126903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[1602,126905],{"style":126548,"src":126906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[34,126908,126910],{"id":126909},"_62-css选择器","6.2 css选择器",[14,126912,126913],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[225,126915,126917],{"id":126916},"_621-标签选择器","6.2.1 标签选择器",[14,126919,126920],{},"①优点：能快速为页面中同类型的标签统一设置样式",[14,126922,126923],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[1602,126925],{"style":126548,"src":126926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[225,126928,126930],{"id":126929},"_622-类选择器","6.2.2 类选择器",[14,126932,126933],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[14,126935,126936],{},"②样例",[1602,126938],{"style":126548,"src":126939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[14,126941,126942,126943,126945],{},"③ ",[414,126944,126780],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[14,126947,126948],{},"可以理解为给这个标签起了个名字，来表示；",[14,126950,126951],{},"长名称或词组可以使用横线来为选择器命名；",[14,126953,126954],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[14,126956,126957],{},"命名要有意义；",[1602,126959],{"style":126548,"src":126960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[14,126962,126963],{},"类选择器也可以指定特殊的元素p.center{}",[14,126965,126966],{},"p.center和.center都对",[245,126968,126970],{"className":126692,"code":126969,"language":126694,"meta":174,"style":174},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[251,126971,126972,126977,126986,126996],{"__ignoreMap":174},[254,126973,126974],{"class":256,"line":257},[254,126975,126976],{"class":323},"\u002F* 类选择器指定特殊元素 *\u002F\n",[254,126978,126979,126981,126984],{"class":256,"line":175},[254,126980,14],{"class":51441},[254,126982,126983],{"class":2103},".center",[254,126985,15713],{"class":264},[254,126987,126988,126990,126992,126994],{"class":256,"line":1319},[254,126989,70667],{"class":313},[254,126991,51578],{"class":264},[254,126993,51733],{"class":313},[254,126995,1430],{"class":264},[254,126997,126998],{"class":256,"line":1334},[254,126999,1705],{"class":264},[225,127001,127003],{"id":127002},"_623-多类名使用","6.2.3 多类名使用",[14,127005,127006],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[1602,127008],{"style":126548,"src":127009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[14,127011,127012],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[225,127014,127016],{"id":127015},"_624-id选择器","6.2.4 id选择器",[14,127018,127019],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[14,127021,127022],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[1602,127024],{"style":126548,"src":127025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[14,127027,127028],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[14,127030,127031],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[225,127033,127035],{"id":127034},"_625-通配符选择器","6.2.5 通配符选择器",[14,127037,127038],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[14,127040,127041],{},"* {",[14,127043,127044],{},"color=\"red\"}",[225,127046,127048],{"id":127047},"_626-总结","6.2.6 总结",[1602,127050],{"style":126548,"src":127051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[34,127053,127055],{"id":127054},"_63-css字体属性","6.3 css字体属性",[14,127057,127058],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[225,127060,127062],{"id":127061},"_631-字体系列","6.3.1 字体系列",[14,127064,127065],{},"font-family: '宋体';",[14,127067,127068,127070],{},[414,127069,294],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[225,127072,127074],{"id":127073},"_632-字体大小","6.3.2 字体大小",[14,127076,127077],{},"font-size: 20px",[14,127079,127080,26614],{},[414,127081,126780],{},[14,127083,127084],{},"①px（像素）大小是网页的最常用单位",[14,127086,127087],{},"②谷歌浏览器默认为16px",[14,127089,127090],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[14,127092,127093],{},"④可以给body指定整个页面的大小：会自动引用",[245,127095,127097],{"className":126692,"code":127096,"language":126694,"meta":174,"style":174},"body {\n  font-size: 16px;\n}\n",[251,127098,127099,127105,127117],{"__ignoreMap":174},[254,127100,127101,127103],{"class":256,"line":257},[254,127102,51941],{"class":51441},[254,127104,15713],{"class":264},[254,127106,127107,127109,127111,127113,127115],{"class":256,"line":175},[254,127108,70767],{"class":313},[254,127110,51578],{"class":264},[254,127112,865],{"class":313},[254,127114,51633],{"class":260},[254,127116,1430],{"class":264},[254,127118,127119],{"class":256,"line":1319},[254,127120,1705],{"class":264},[14,127122,127123],{},"⑤标题标签比较特殊，需要单独指定大小",[225,127125,127127],{"id":127126},"_633-字体粗细","6.3.3 字体粗细",[14,127129,127130],{},"font-weight: bold;",[14,127132,127133],{},"font-weight: 100；",[14,127135,127136,127138],{},[414,127137,294],{}," ①粗体文字变细：尽量别用normal，多用数字",[14,127140,127141],{},"font-weight= 400;",[14,127143,127144],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[225,127146,127148],{"id":127147},"_634-文字样式","6.3.4 文字样式",[14,127150,127151],{},"font-style: normal；",[14,127153,127154,26614],{},[414,127155,127156],{},"属性值",[14,127158,127159],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[14,127161,127162],{},"②italic：浏览器会显示斜体的字体样式",[1602,127164],{"style":126548,"src":127165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[225,127167,127169],{"id":127168},"_635-字体符合属性","6.3.5 字体符合属性",[1602,127171],{"style":126548,"src":127172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[1602,127174],{"style":126548,"src":127175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[14,127177,127178],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[14,127180,127181,26614],{},[414,127182,126780],{},[14,127184,127185],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[14,127187,127188],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[14,127190,127191],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[34,127193,127195],{"id":127194},"_64-css-test文本属性","6.4 css test文本属性",[225,127197,127199],{"id":127198},"_641-文本颜色","6.4.1 文本颜色",[14,127201,127202],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[245,127204,127206],{"className":126692,"code":127205,"language":126694,"meta":174,"style":174},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[251,127207,127208,127213,127219,127229,127234,127239],{"__ignoreMap":174},[254,127209,127210],{"class":256,"line":257},[254,127211,127212],{"class":323},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[254,127214,127215,127217],{"class":256,"line":175},[254,127216,14],{"class":51441},[254,127218,15713],{"class":264},[254,127220,127221,127223,127225,127227],{"class":256,"line":1319},[254,127222,71046],{"class":313},[254,127224,51578],{"class":264},[254,127226,57562],{"class":313},[254,127228,1430],{"class":264},[254,127230,127231],{"class":256,"line":1334},[254,127232,127233],{"class":323},"  \u002F* color: #ff0000; *\u002F\n",[254,127235,127236],{"class":256,"line":1340},[254,127237,127238],{"class":323},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[254,127240,127241],{"class":256,"line":1354},[254,127242,1705],{"class":264},[1602,127244],{"style":126548,"src":127245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[225,127247,127249],{"id":127248},"_642-对齐文本","6.4.2 对齐文本",[14,127251,127252,127253,127256],{},"text-align属于用于设置元素内文本内容的 ",[414,127254,127255],{},"水平对齐"," 方式",[14,127258,127259],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[225,127261,127263],{"id":127262},"_643-装饰文本","6.4.3 装饰文本",[14,127265,127266],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[245,127268,127270],{"className":126692,"code":127269,"language":126694,"meta":174,"style":174},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[251,127271,127272,127278,127288,127292,127298,127309],{"__ignoreMap":174},[254,127273,127274,127276],{"class":256,"line":257},[254,127275,42],{"class":51441},[254,127277,15713],{"class":264},[254,127279,127280,127282,127284,127286],{"class":256,"line":175},[254,127281,70643],{"class":313},[254,127283,51578],{"class":264},[254,127285,54878],{"class":313},[254,127287,1430],{"class":264},[254,127289,127290],{"class":256,"line":1319},[254,127291,1705],{"class":264},[254,127293,127294,127296],{"class":256,"line":1334},[254,127295,14],{"class":51441},[254,127297,15713],{"class":264},[254,127299,127300,127302,127304,127307],{"class":256,"line":1340},[254,127301,70643],{"class":313},[254,127303,51578],{"class":264},[254,127305,127306],{"class":313},"underline",[254,127308,1430],{"class":264},[254,127310,127311],{"class":256,"line":1354},[254,127312,1705],{"class":264},[225,127314,127316],{"id":127315},"_644-文本缩进","6.4.4 文本缩进",[14,127318,127319],{},"实现文本的第一行首行缩进自己指定的距离",[14,127321,127322],{},"20px往右边走；-20px往左边走",[14,127324,127325],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[245,127327,127329],{"className":126692,"code":127328,"language":126694,"meta":174,"style":174},"p {\n  text-indent: 2em;\n}\n",[251,127330,127331,127337,127350],{"__ignoreMap":174},[254,127332,127333,127335],{"class":256,"line":257},[254,127334,14],{"class":51441},[254,127336,15713],{"class":264},[254,127338,127339,127342,127344,127346,127348],{"class":256,"line":175},[254,127340,127341],{"class":313},"  text-indent",[254,127343,51578],{"class":264},[254,127345,342],{"class":313},[254,127347,23694],{"class":260},[254,127349,1430],{"class":264},[254,127351,127352],{"class":256,"line":1319},[254,127353,1705],{"class":264},[225,127355,127357],{"id":127356},"_645-行间距","6.4.5 行间距",[14,127359,127360],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[245,127362,127364],{"className":126692,"code":127363,"language":126694,"meta":174,"style":174},"p {\n  line-height: 1.6;\n}\n",[251,127365,127366,127372,127384],{"__ignoreMap":174},[254,127367,127368,127370],{"class":256,"line":257},[254,127369,14],{"class":51441},[254,127371,15713],{"class":264},[254,127373,127374,127377,127379,127382],{"class":256,"line":175},[254,127375,127376],{"class":313},"  line-height",[254,127378,51578],{"class":264},[254,127380,127381],{"class":313},"1.6",[254,127383,1430],{"class":264},[254,127385,127386],{"class":256,"line":1319},[254,127387,1705],{"class":264},[5267,127389,127390],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":174,"searchDepth":175,"depth":175,"links":127392},[127393,127394,127402,127409],{"id":126874,"depth":175,"text":126875},{"id":126909,"depth":175,"text":126910,"children":127395},[127396,127397,127398,127399,127400,127401],{"id":126916,"depth":1319,"text":126917},{"id":126929,"depth":1319,"text":126930},{"id":127002,"depth":1319,"text":127003},{"id":127015,"depth":1319,"text":127016},{"id":127034,"depth":1319,"text":127035},{"id":127047,"depth":1319,"text":127048},{"id":127054,"depth":175,"text":127055,"children":127403},[127404,127405,127406,127407,127408],{"id":127061,"depth":1319,"text":127062},{"id":127073,"depth":1319,"text":127074},{"id":127126,"depth":1319,"text":127127},{"id":127147,"depth":1319,"text":127148},{"id":127168,"depth":1319,"text":127169},{"id":127194,"depth":175,"text":127195,"children":127410},[127411,127412,127413,127414,127415],{"id":127198,"depth":1319,"text":127199},{"id":127248,"depth":1319,"text":127249},{"id":127262,"depth":1319,"text":127263},{"id":127315,"depth":1319,"text":127316},{"id":127356,"depth":1319,"text":127357},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":126866,"description":23518},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127422,"title":127423,"body":127424,"description":23518,"extension":181,"meta":128073,"navigation":184,"path":128074,"seo":128075,"stem":128076,"__hash__":128077},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127425,"toc":128054},[127426,127429,127433,127437,127497,127501,127511,127514,127517,127521,127546,127550,127553,127556,127559,127562,127565,127569,127572,127575,127617,127620,127646,127652,127655,127659,127663,127669,127672,127675,127678,127681,127684,127687,127732,127736,127739,127742,127746,127750,127779,127782,127787,127790,127793,127796,127799,127803,127807,127810,127812,127815,127819,127822,127826,127829,127832,127835,127839,127843,127849,127859,127862,127865,127868,127871,127874,127997,128005,128013,128051],[10,127427,127423],{"id":127428},"_7-css引入方式与选择器进阶",[34,127430,127432],{"id":127431},"_71-css引入方式","7.1 css引入方式",[225,127434,127436],{"id":127435},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[245,127438,127442],{"className":127439,"code":127440,"language":127441,"meta":174,"style":174},"language-Html shiki shiki-themes github-light github-dark","\u003Cstyle>\n  h1 {\n    color: blue;\n    font-size: 24px;\n  }\n\u003C\u002Fstyle>\n","Html",[251,127443,127444,127452,127459,127471,127484,127489],{"__ignoreMap":174},[254,127445,127446,127448,127450],{"class":256,"line":257},[254,127447,1174],{"class":264},[254,127449,5267],{"class":51441},[254,127451,51448],{"class":264},[254,127453,127454,127457],{"class":256,"line":175},[254,127455,127456],{"class":51441},"  h1",[254,127458,15713],{"class":264},[254,127460,127461,127464,127466,127469],{"class":256,"line":1319},[254,127462,127463],{"class":313},"    color",[254,127465,51578],{"class":264},[254,127467,127468],{"class":313},"blue",[254,127470,1430],{"class":264},[254,127472,127473,127476,127478,127480,127482],{"class":256,"line":1334},[254,127474,127475],{"class":313},"    font-size",[254,127477,51578],{"class":264},[254,127479,1064],{"class":313},[254,127481,51633],{"class":260},[254,127483,1430],{"class":264},[254,127485,127486],{"class":256,"line":1340},[254,127487,127488],{"class":264},"  }\n",[254,127490,127491,127493,127495],{"class":256,"line":1354},[254,127492,51926],{"class":264},[254,127494,5267],{"class":51441},[254,127496,51448],{"class":264},[14,127498,127499,26614],{},[414,127500,126780],{},[14,127502,77367,127503,127506,127507,127510],{},[251,127504,127505],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[251,127508,127509],{},"\u003Chead>","标签中",[14,127512,127513],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[14,127515,127516],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[225,127518,127520],{"id":127519},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[245,127522,127524],{"className":127439,"code":127523,"language":127441,"meta":174,"style":174},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[251,127525,127526],{"__ignoreMap":174},[254,127527,127528,127530,127532,127534,127536,127539,127542,127544],{"class":256,"line":257},[254,127529,1174],{"class":264},[254,127531,14],{"class":51441},[254,127533,62767],{"class":2103},[254,127535,310],{"class":264},[254,127537,127538],{"class":369},"\"color: red; font-size: 16px;\"",[254,127540,127541],{"class":264},">这是一个段落\u003C\u002F",[254,127543,14],{"class":51441},[254,127545,51448],{"class":264},[14,127547,127548,26614],{},[414,127549,126780],{},[14,127551,127552],{},"①style其实就是标签的属性",[14,127554,127555],{},"②在双引号中间，写法要符合css规范",[14,127557,127558],{},"③可以控制当前的标签设置样式",[14,127560,127561],{},"④书写繁琐，简单时才用",[14,127563,127564],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[225,127566,127568],{"id":127567},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[14,127570,127571],{},"使用最多，单独建一个css文件，然后html引用",[14,127573,127574],{},"①css文件部分： style.css",[245,127576,127578],{"className":126692,"code":127577,"language":126694,"meta":174,"style":174},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[251,127579,127580,127585,127591,127601,127613],{"__ignoreMap":174},[254,127581,127582],{"class":256,"line":257},[254,127583,127584],{"class":323},"\u002F* style.css *\u002F\n",[254,127586,127587,127589],{"class":256,"line":175},[254,127588,10],{"class":51441},[254,127590,15713],{"class":264},[254,127592,127593,127595,127597,127599],{"class":256,"line":1319},[254,127594,71046],{"class":313},[254,127596,51578],{"class":264},[254,127598,127468],{"class":313},[254,127600,1430],{"class":264},[254,127602,127603,127605,127607,127609,127611],{"class":256,"line":1334},[254,127604,70767],{"class":313},[254,127606,51578],{"class":264},[254,127608,1064],{"class":313},[254,127610,51633],{"class":260},[254,127612,1430],{"class":264},[254,127614,127615],{"class":256,"line":1340},[254,127616,1705],{"class":264},[14,127618,127619],{},"②html部分",[245,127621,127623],{"className":127439,"code":127622,"language":127441,"meta":174,"style":174},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[251,127624,127625],{"__ignoreMap":174},[254,127626,127627,127629,127631,127633,127635,127637,127639,127641,127644],{"class":256,"line":257},[254,127628,1174],{"class":264},[254,127630,69146],{"class":51441},[254,127632,69149],{"class":2103},[254,127634,310],{"class":264},[254,127636,69154],{"class":369},[254,127638,61198],{"class":2103},[254,127640,310],{"class":264},[254,127642,127643],{"class":369},"\"style.css\"",[254,127645,51448],{"class":264},[14,127647,127648,127651],{},[251,127649,127650],{},"\u003Chr>","水平线标签（但是不常用！）",[14,127653,127654],{},"ctrl+0回到页面原来大小",[34,127656,127658],{"id":127657},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[225,127660,127662],{"id":127661},"_721-快速生成html","7.2.1 快速生成html",[14,127664,127665,127666],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[251,127667,127668],{},"\u003Cdiv>``\u003C\u002Fdiv>",[14,127670,127671],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[14,127673,127674],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[14,127676,127677],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[14,127679,127680],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[14,127682,127683],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[14,127685,127686],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[245,127688,127690],{"className":127439,"code":127689,"language":127441,"meta":174,"style":174},"\u003C!-- Emmet 语法示例 -->\n\u003C!-- div*3        → 生成3个div -->\n\u003C!-- ul>li*5      → ul下生成5个li -->\n\u003C!-- div+p        → 兄弟div和p -->\n\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[251,127691,127692,127697,127702,127707,127712,127717,127722,127727],{"__ignoreMap":174},[254,127693,127694],{"class":256,"line":257},[254,127695,127696],{"class":323},"\u003C!-- Emmet 语法示例 -->\n",[254,127698,127699],{"class":256,"line":175},[254,127700,127701],{"class":323},"\u003C!-- div*3        → 生成3个div -->\n",[254,127703,127704],{"class":256,"line":1319},[254,127705,127706],{"class":323},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[254,127708,127709],{"class":256,"line":1334},[254,127710,127711],{"class":323},"\u003C!-- div+p        → 兄弟div和p -->\n",[254,127713,127714],{"class":256,"line":1340},[254,127715,127716],{"class":323},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[254,127718,127719],{"class":256,"line":1354},[254,127720,127721],{"class":323},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[254,127723,127724],{"class":256,"line":1360},[254,127725,127726],{"class":323},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[254,127728,127729],{"class":256,"line":1451},[254,127730,127731],{"class":323},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[225,127733,127735],{"id":127734},"_722-快速生成css","7.2.2 快速生成css",[14,127737,127738],{},"简写开头",[14,127740,127741],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[34,127743,127745],{"id":127744},"_73-css复合选择器","7.3 css复合选择器",[225,127747,127749],{"id":127748},"_731-后代选择器","7.3.1 后代选择器",[245,127751,127753],{"className":126692,"code":127752,"language":126694,"meta":174,"style":174},".parent .child {\n  color: blue;\n}\n",[251,127754,127755,127765,127775],{"__ignoreMap":174},[254,127756,127757,127760,127763],{"class":256,"line":257},[254,127758,127759],{"class":2103},".parent",[254,127761,127762],{"class":2103}," .child",[254,127764,15713],{"class":264},[254,127766,127767,127769,127771,127773],{"class":256,"line":175},[254,127768,71046],{"class":313},[254,127770,51578],{"class":264},[254,127772,127468],{"class":313},[254,127774,1430],{"class":264},[254,127776,127777],{"class":256,"line":1319},[254,127778,1705],{"class":264},[14,127780,127781],{},"元素1 元素2 {样式声明}",[14,127783,127784],{},[414,127785,127786],{},"注意点:",[14,127788,127789],{},"①元素1和元素2中间用空格隔开",[14,127791,127792],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[14,127794,127795],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[14,127797,127798],{},"④元素1和元素2可以是任意基础选择器",[225,127800,127802],{"id":127801},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[14,127804,127805],{},[414,127806,127786],{},[14,127808,127809],{},"①元素1和元素2中间用大于号隔开",[14,127811,127792],{},[14,127813,127814],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[225,127816,127818],{"id":127817},"_733-并集选择器","7.3.3 并集选择器",[14,127820,127821],{},"元素1，元素2 {样式声明}",[14,127823,127824],{},[414,127825,127786],{},[14,127827,127828],{},"①元素1和元素2中间用逗号隔开",[14,127830,127831],{},"②逗号可以理解为和的意思",[14,127833,127834],{},"③并集选择器通常用于集体声明",[225,127836,127838],{"id":127837},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[14,127840,127841],{},[414,127842,127786],{},[14,127844,127845,127846,127848],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[69146,127847],{},"－:visited－:hover－:active。",[14,127850,127851,127852,127855,127856,25881],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[127853,127854],"hover",{}," 、 ",[127857,127858],"first-child",{},[14,127860,127861],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[14,127863,127864],{},"link对没访问的进行设置",[14,127866,127867],{},"vistied对已访问的进行改变",[14,127869,127870],{},"hover鼠标经过就会变",[14,127872,127873],{},"active常按(点)就会变",[245,127875,127877],{"className":126692,"code":127876,"language":126694,"meta":174,"style":174},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\na:link {\n  color: #333;\n  text-decoration: none;\n}\na:visited {\n  color: purple;\n}\na:hover {\n  color: skyblue;\n  text-decoration: underline;\n}\na:active {\n  color: green;\n}\n",[251,127878,127879,127884,127893,127903,127913,127917,127926,127937,127941,127949,127959,127969,127973,127982,127993],{"__ignoreMap":174},[254,127880,127881],{"class":256,"line":257},[254,127882,127883],{"class":323},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[254,127885,127886,127888,127891],{"class":256,"line":175},[254,127887,42],{"class":51441},[254,127889,127890],{"class":2103},":link",[254,127892,15713],{"class":264},[254,127894,127895,127897,127899,127901],{"class":256,"line":1319},[254,127896,71046],{"class":313},[254,127898,51578],{"class":264},[254,127900,62510],{"class":313},[254,127902,1430],{"class":264},[254,127904,127905,127907,127909,127911],{"class":256,"line":1334},[254,127906,70643],{"class":313},[254,127908,51578],{"class":264},[254,127910,54878],{"class":313},[254,127912,1430],{"class":264},[254,127914,127915],{"class":256,"line":1340},[254,127916,1705],{"class":264},[254,127918,127919,127921,127924],{"class":256,"line":1354},[254,127920,42],{"class":51441},[254,127922,127923],{"class":2103},":visited",[254,127925,15713],{"class":264},[254,127927,127928,127930,127932,127935],{"class":256,"line":1360},[254,127929,71046],{"class":313},[254,127931,51578],{"class":264},[254,127933,127934],{"class":313},"purple",[254,127936,1430],{"class":264},[254,127938,127939],{"class":256,"line":1451},[254,127940,1705],{"class":264},[254,127942,127943,127945,127947],{"class":256,"line":1457},[254,127944,42],{"class":51441},[254,127946,61081],{"class":2103},[254,127948,15713],{"class":264},[254,127950,127951,127953,127955,127957],{"class":256,"line":1469},[254,127952,71046],{"class":313},[254,127954,51578],{"class":264},[254,127956,55030],{"class":313},[254,127958,1430],{"class":264},[254,127960,127961,127963,127965,127967],{"class":256,"line":1752},[254,127962,70643],{"class":313},[254,127964,51578],{"class":264},[254,127966,127306],{"class":313},[254,127968,1430],{"class":264},[254,127970,127971],{"class":256,"line":1757},[254,127972,1705],{"class":264},[254,127974,127975,127977,127980],{"class":256,"line":1763},[254,127976,42],{"class":51441},[254,127978,127979],{"class":2103},":active",[254,127981,15713],{"class":264},[254,127983,127984,127986,127988,127991],{"class":256,"line":1768},[254,127985,71046],{"class":313},[254,127987,51578],{"class":264},[254,127989,127990],{"class":313},"green",[254,127992,1430],{"class":264},[254,127994,127995],{"class":256,"line":1782},[254,127996,1705],{"class":264},[225,127998,128000,128001,128004],{"id":127999},"_735-伪类选择器","7.3.5 ",[128002,128003],"focus",{},"伪类选择器",[14,128006,128007,128009,128010,128012],{},[128002,128008],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[251,128011,126753],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[245,128014,128016],{"className":126692,"code":128015,"language":126694,"meta":174,"style":174},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[251,128017,128018,128026,128037,128047],{"__ignoreMap":174},[254,128019,128020,128022,128024],{"class":256,"line":257},[254,128021,53962],{"class":51441},[254,128023,62041],{"class":2103},[254,128025,15713],{"class":264},[254,128027,128028,128031,128033,128035],{"class":256,"line":175},[254,128029,128030],{"class":313},"  border-color",[254,128032,51578],{"class":264},[254,128034,55030],{"class":313},[254,128036,1430],{"class":264},[254,128038,128039,128041,128043,128045],{"class":256,"line":1319},[254,128040,70939],{"class":313},[254,128042,51578],{"class":264},[254,128044,54878],{"class":313},[254,128046,1430],{"class":264},[254,128048,128049],{"class":256,"line":1334},[254,128050,1705],{"class":264},[5267,128052,128053],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":174,"searchDepth":175,"depth":175,"links":128055},[128056,128061,128065],{"id":127431,"depth":175,"text":127432,"children":128057},[128058,128059,128060],{"id":127435,"depth":1319,"text":127436},{"id":127519,"depth":1319,"text":127520},{"id":127567,"depth":1319,"text":127568},{"id":127657,"depth":175,"text":127658,"children":128062},[128063,128064],{"id":127661,"depth":1319,"text":127662},{"id":127734,"depth":1319,"text":127735},{"id":127744,"depth":175,"text":127745,"children":128066},[128067,128068,128069,128070,128071],{"id":127748,"depth":1319,"text":127749},{"id":127801,"depth":1319,"text":127802},{"id":127817,"depth":1319,"text":127818},{"id":127837,"depth":1319,"text":127838},{"id":127999,"depth":1319,"text":128072},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127423,"description":23518},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":128079,"title":128080,"body":128081,"description":23518,"extension":181,"meta":130004,"navigation":184,"path":130005,"seo":130006,"stem":130007,"__hash__":130008},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":128082,"toc":129978},[128083,128086,128090,128099,128103,128129,128134,128137,128140,128143,128146,128150,128153,128163,128171,128175,128210,128215,128218,128221,128224,128227,128231,128234,128243,128247,128260,128265,128268,128271,128274,128278,128281,128285,128288,128343,128346,128377,128380,128434,128438,128441,128607,128730,128733,128736,128739,128742,128746,128749,128753,128756,128759,128763,128766,128797,128824,128852,128855,128859,128885,128928,128932,129026,129029,129056,129059,129062,129065,129068,129071,129074,129077,129080,129083,129087,129144,129171,129175,129223,129227,129268,129270,129273,129276,129279,129282,129286,129378,129381,129384,129387,129391,129514,129715,129719,129723,129726,129729,129732,129736,129739,129742,129767,129770,129773,129776,129779,129782,129786,129794,129856,129859,129917,129920,129923,129926,129929,129932,129935,129938,129975],[10,128084,128080],{"id":128085},"_8-css显示模式与背景特性",[34,128087,128089],{"id":128088},"_81-css元素显示模式","8.1 css元素显示模式",[14,128091,128092,128093,128095,128096,128098],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[251,128094,126303],{},"自己占一行，比如一行可以放多个",[251,128097,126306],{},"，HTML 元素一般分为块元素和行内元素两种类型",[225,128100,128102],{"id":128101},"_811-块元素","8.1.1 块元素",[14,128104,128105,128106,128108,128109,477,128112,477,128114,477,128116,477,128119,477,128122,128125,128126,128128],{},"常见的块元素有",[251,128107,126207],{},"~",[251,128110,128111],{},"\u003Ch6>",[251,128113,126233],{},[251,128115,126303],{},[251,128117,128118],{},"\u003Cul>",[251,128120,128121],{},"\u003Col>",[251,128123,128124],{},"\u003Cli>","等，其中 ",[251,128127,126303],{}," 标签是最典型的块元素",[14,128130,128131],{},[414,128132,128133],{},"块级元素的特点：",[14,128135,128136],{},"① 比较霸道，自己独占一行。",[14,128138,128139],{},"② 高度，宽度、外边距以及内边距都可以控制。",[14,128141,128142],{},"③ 宽度默认是容器（父级宽度）的100%。",[14,128144,128145],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[14,128147,128148],{},[414,128149,294],{},[14,128151,128152],{},"①文字类的元素内不能使用块级元素",[14,128154,77390,128155,128157,128158,128160,128161],{},[251,128156,126233],{}," 标签主要用于存放文字，因此 ",[251,128159,126233],{}," 里面不能放块级元素，特别是不能放",[251,128162,126303],{},[14,128164,128165,128166,128108,128168,128170],{},"⑥同理， ",[251,128167,126207],{},[251,128169,128111],{},"等都是文字类块级标签，里面也不能放其他块级元素",[225,128172,128174],{"id":128173},"_812-行内元素","8.1.2 行内元素",[14,128176,128177,128178,477,128180,477,128183,477,128186,477,128189,477,128192,477,128195,477,128198,477,128201,477,128204,128206,128207,128209],{},"常见的行内元素有 ",[251,128179,126465],{},[251,128181,128182],{},"\u003Cstrong>",[251,128184,128185],{},"\u003Cb>",[251,128187,128188],{},"\u003Cem>",[251,128190,128191],{},"\u003Ci>",[251,128193,128194],{},"\u003Cdel>",[251,128196,128197],{},"\u003Cs>",[251,128199,128200],{},"\u003Cins>",[251,128202,128203],{},"\u003Cu>",[251,128205,126306],{}," 等，其中 ",[251,128208,126306],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[14,128211,128212],{},[414,128213,128214],{},"特点：",[14,128216,128217],{},"① 相邻行内元素在一行上，一行可以显示多个。",[14,128219,128220],{},"② 高、宽直接设置是无效的。",[14,128222,128223],{},"③ 默认宽度就是它本身内容的宽度。",[14,128225,128226],{},"④ 行内元素只能容纳文本或其他行内元素。",[14,128228,128229],{},[414,128230,294],{},[14,128232,128233],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[14,128235,128236,128237,128239,128240,128242],{},"②特殊情况链接 ",[251,128238,126465],{}," 里面可以放块级元素，但是给 ",[251,128241,126465],{}," 转换一下块级模式最安全",[225,128244,128246],{"id":128245},"_813-行内块元素","8.1.3 行内块元素",[14,128248,128249,128250,477,128253,477,128256,128259],{},"在行内元素中有几个特殊的标签 —— ",[251,128251,128252],{},"\u003Cimg \u002F>",[251,128254,128255],{},"\u003Cinput \u002F>",[251,128257,128258],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[14,128261,128262],{},[414,128263,128264],{},"行内块元素的特点：",[14,128266,128267],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[14,128269,128270],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[14,128272,128273],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[225,128275,128277],{"id":128276},"_814-总结","8.1.4 总结",[1602,128279],{"style":126548,"src":128280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[225,128282,128284],{"id":128283},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[14,128286,128287],{},"①转换为块元素：display:block;",[245,128289,128291],{"className":126692,"code":128290,"language":126694,"meta":174,"style":174},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[251,128292,128293,128298,128304,128315,128327,128339],{"__ignoreMap":174},[254,128294,128295],{"class":256,"line":257},[254,128296,128297],{"class":323},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[254,128299,128300,128302],{"class":256,"line":175},[254,128301,42],{"class":51441},[254,128303,15713],{"class":264},[254,128305,128306,128309,128311,128313],{"class":256,"line":1319},[254,128307,128308],{"class":313},"  display",[254,128310,51578],{"class":264},[254,128312,61010],{"class":313},[254,128314,1430],{"class":264},[254,128316,128317,128319,128321,128323,128325],{"class":256,"line":1334},[254,128318,70709],{"class":313},[254,128320,51578],{"class":264},[254,128322,575],{"class":313},[254,128324,51633],{"class":260},[254,128326,1430],{"class":264},[254,128328,128329,128331,128333,128335,128337],{"class":256,"line":1340},[254,128330,70929],{"class":313},[254,128332,51578],{"class":264},[254,128334,665],{"class":313},[254,128336,51633],{"class":260},[254,128338,1430],{"class":264},[254,128340,128341],{"class":256,"line":1354},[254,128342,1705],{"class":264},[14,128344,128345],{},"②转换为行内元素：display:inline;",[245,128347,128349],{"className":126692,"code":128348,"language":126694,"meta":174,"style":174},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[251,128350,128351,128356,128362,128373],{"__ignoreMap":174},[254,128352,128353],{"class":256,"line":257},[254,128354,128355],{"class":323},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[254,128357,128358,128360],{"class":256,"line":175},[254,128359,51752],{"class":51441},[254,128361,15713],{"class":264},[254,128363,128364,128366,128368,128371],{"class":256,"line":1319},[254,128365,128308],{"class":313},[254,128367,51578],{"class":264},[254,128369,128370],{"class":313},"inline",[254,128372,1430],{"class":264},[254,128374,128375],{"class":256,"line":1334},[254,128376,1705],{"class":264},[14,128378,128379],{},"③转换为行内块：display:inline-block;",[245,128381,128383],{"className":126692,"code":128382,"language":126694,"meta":174,"style":174},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[251,128384,128385,128390,128396,128406,128418,128430],{"__ignoreMap":174},[254,128386,128387],{"class":256,"line":257},[254,128388,128389],{"class":323},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[254,128391,128392,128394],{"class":256,"line":175},[254,128393,254],{"class":51441},[254,128395,15713],{"class":264},[254,128397,128398,128400,128402,128404],{"class":256,"line":1319},[254,128399,128308],{"class":313},[254,128401,51578],{"class":264},[254,128403,72524],{"class":313},[254,128405,1430],{"class":264},[254,128407,128408,128410,128412,128414,128416],{"class":256,"line":1334},[254,128409,70709],{"class":313},[254,128411,51578],{"class":264},[254,128413,876],{"class":313},[254,128415,51633],{"class":260},[254,128417,1430],{"class":264},[254,128419,128420,128422,128424,128426,128428],{"class":256,"line":1340},[254,128421,70929],{"class":313},[254,128423,51578],{"class":264},[254,128425,1215],{"class":313},[254,128427,51633],{"class":260},[254,128429,1430],{"class":264},[254,128431,128432],{"class":256,"line":1354},[254,128433,1705],{"class":264},[225,128435,128437],{"id":128436},"_816-小米侧边栏","8.1.6 小米侧边栏",[1602,128439],{"style":126548,"src":128440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[245,128442,128444],{"className":127439,"code":128443,"language":127441,"meta":174,"style":174},"\u003C!-- 小米侧边栏案例 -->\n\u003Cdiv class=\"sidebar\">\n  \u003Ca href=\"#\">手机 电话卡\u003C\u002Fa>\n  \u003Ca href=\"#\">电视 盒子\u003C\u002Fa>\n  \u003Ca href=\"#\">笔记本 平板\u003C\u002Fa>\n  \u003Ca href=\"#\">出行 穿戴\u003C\u002Fa>\n  \u003Ca href=\"#\">智能 路由器\u003C\u002Fa>\n  \u003Ca href=\"#\">健康 儿童\u003C\u002Fa>\n  \u003Ca href=\"#\">耳机 音响\u003C\u002Fa>\n\u003C\u002Fdiv>\n",[251,128445,128446,128451,128466,128485,128504,128523,128542,128561,128580,128599],{"__ignoreMap":174},[254,128447,128448],{"class":256,"line":257},[254,128449,128450],{"class":323},"\u003C!-- 小米侧边栏案例 -->\n",[254,128452,128453,128455,128457,128459,128461,128464],{"class":256,"line":175},[254,128454,1174],{"class":264},[254,128456,51752],{"class":51441},[254,128458,53627],{"class":2103},[254,128460,310],{"class":264},[254,128462,128463],{"class":369},"\"sidebar\"",[254,128465,51448],{"class":264},[254,128467,128468,128470,128472,128474,128476,128478,128481,128483],{"class":256,"line":1319},[254,128469,52285],{"class":264},[254,128471,42],{"class":51441},[254,128473,61198],{"class":2103},[254,128475,310],{"class":264},[254,128477,61203],{"class":369},[254,128479,128480],{"class":264},">手机 电话卡\u003C\u002F",[254,128482,42],{"class":51441},[254,128484,51448],{"class":264},[254,128486,128487,128489,128491,128493,128495,128497,128500,128502],{"class":256,"line":1334},[254,128488,52285],{"class":264},[254,128490,42],{"class":51441},[254,128492,61198],{"class":2103},[254,128494,310],{"class":264},[254,128496,61203],{"class":369},[254,128498,128499],{"class":264},">电视 盒子\u003C\u002F",[254,128501,42],{"class":51441},[254,128503,51448],{"class":264},[254,128505,128506,128508,128510,128512,128514,128516,128519,128521],{"class":256,"line":1340},[254,128507,52285],{"class":264},[254,128509,42],{"class":51441},[254,128511,61198],{"class":2103},[254,128513,310],{"class":264},[254,128515,61203],{"class":369},[254,128517,128518],{"class":264},">笔记本 平板\u003C\u002F",[254,128520,42],{"class":51441},[254,128522,51448],{"class":264},[254,128524,128525,128527,128529,128531,128533,128535,128538,128540],{"class":256,"line":1354},[254,128526,52285],{"class":264},[254,128528,42],{"class":51441},[254,128530,61198],{"class":2103},[254,128532,310],{"class":264},[254,128534,61203],{"class":369},[254,128536,128537],{"class":264},">出行 穿戴\u003C\u002F",[254,128539,42],{"class":51441},[254,128541,51448],{"class":264},[254,128543,128544,128546,128548,128550,128552,128554,128557,128559],{"class":256,"line":1360},[254,128545,52285],{"class":264},[254,128547,42],{"class":51441},[254,128549,61198],{"class":2103},[254,128551,310],{"class":264},[254,128553,61203],{"class":369},[254,128555,128556],{"class":264},">智能 路由器\u003C\u002F",[254,128558,42],{"class":51441},[254,128560,51448],{"class":264},[254,128562,128563,128565,128567,128569,128571,128573,128576,128578],{"class":256,"line":1451},[254,128564,52285],{"class":264},[254,128566,42],{"class":51441},[254,128568,61198],{"class":2103},[254,128570,310],{"class":264},[254,128572,61203],{"class":369},[254,128574,128575],{"class":264},">健康 儿童\u003C\u002F",[254,128577,42],{"class":51441},[254,128579,51448],{"class":264},[254,128581,128582,128584,128586,128588,128590,128592,128595,128597],{"class":256,"line":1457},[254,128583,52285],{"class":264},[254,128585,42],{"class":51441},[254,128587,61198],{"class":2103},[254,128589,310],{"class":264},[254,128591,61203],{"class":369},[254,128593,128594],{"class":264},">耳机 音响\u003C\u002F",[254,128596,42],{"class":51441},[254,128598,51448],{"class":264},[254,128600,128601,128603,128605],{"class":256,"line":1469},[254,128602,51926],{"class":264},[254,128604,51752],{"class":51441},[254,128606,51448],{"class":264},[245,128608,128610],{"className":126692,"code":128609,"language":126694,"meta":174,"style":174},".sidebar a {\n  display: block;\n  width: 234px;\n  height: 42px;\n  line-height: 42px;\n  padding-left: 30px;\n  color: #fff;\n  background-color: #55585a;\n}\n.sidebar a:hover {\n  background-color: #ff6700;\n}\n",[251,128611,128612,128621,128631,128644,128656,128668,128680,128690,128701,128705,128715,128726],{"__ignoreMap":174},[254,128613,128614,128617,128619],{"class":256,"line":257},[254,128615,128616],{"class":2103},".sidebar",[254,128618,1538],{"class":51441},[254,128620,15713],{"class":264},[254,128622,128623,128625,128627,128629],{"class":256,"line":175},[254,128624,128308],{"class":313},[254,128626,51578],{"class":264},[254,128628,61010],{"class":313},[254,128630,1430],{"class":264},[254,128632,128633,128635,128637,128640,128642],{"class":256,"line":1319},[254,128634,70709],{"class":313},[254,128636,51578],{"class":264},[254,128638,128639],{"class":313},"234",[254,128641,51633],{"class":260},[254,128643,1430],{"class":264},[254,128645,128646,128648,128650,128652,128654],{"class":256,"line":1334},[254,128647,70929],{"class":313},[254,128649,51578],{"class":264},[254,128651,716],{"class":313},[254,128653,51633],{"class":260},[254,128655,1430],{"class":264},[254,128657,128658,128660,128662,128664,128666],{"class":256,"line":1340},[254,128659,127376],{"class":313},[254,128661,51578],{"class":264},[254,128663,716],{"class":313},[254,128665,51633],{"class":260},[254,128667,1430],{"class":264},[254,128669,128670,128672,128674,128676,128678],{"class":256,"line":1354},[254,128671,70964],{"class":313},[254,128673,51578],{"class":264},[254,128675,1215],{"class":313},[254,128677,51633],{"class":260},[254,128679,1430],{"class":264},[254,128681,128682,128684,128686,128688],{"class":256,"line":1360},[254,128683,71046],{"class":313},[254,128685,51578],{"class":264},[254,128687,60983],{"class":313},[254,128689,1430],{"class":264},[254,128691,128692,128694,128696,128699],{"class":256,"line":1451},[254,128693,71019],{"class":313},[254,128695,51578],{"class":264},[254,128697,128698],{"class":313},"#55585a",[254,128700,1430],{"class":264},[254,128702,128703],{"class":256,"line":1457},[254,128704,1705],{"class":264},[254,128706,128707,128709,128711,128713],{"class":256,"line":1469},[254,128708,128616],{"class":2103},[254,128710,1538],{"class":51441},[254,128712,61081],{"class":2103},[254,128714,15713],{"class":264},[254,128716,128717,128719,128721,128724],{"class":256,"line":1752},[254,128718,71019],{"class":313},[254,128720,51578],{"class":264},[254,128722,128723],{"class":313},"#ff6700",[254,128725,1430],{"class":264},[254,128727,128728],{"class":256,"line":1757},[254,128729,1705],{"class":264},[1602,128731],{"style":126548,"src":128732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[14,128734,128735],{},"行高=盒子高度：实现文字的垂直居中",[14,128737,128738],{},"原理讲解：",[1602,128740],{"style":126548,"src":128741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[34,128743,128745],{"id":128744},"_82-css背景","8.2 css背景",[14,128747,128748],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[225,128750,128752],{"id":128751},"_821-背景颜色","8.2.1 背景颜色",[14,128754,128755],{},"background-color:颜色值;",[14,128757,128758],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[225,128760,128762],{"id":128761},"_822-背景图片","8.2.2 背景图片",[14,128764,128765],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[245,128767,128769],{"className":126692,"code":128768,"language":126694,"meta":174,"style":174},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[251,128770,128771,128777,128793],{"__ignoreMap":174},[254,128772,128773,128775],{"class":256,"line":257},[254,128774,51752],{"class":51441},[254,128776,15713],{"class":264},[254,128778,128779,128782,128784,128786,128788,128791],{"class":256,"line":175},[254,128780,128781],{"class":313},"  background-image",[254,128783,51578],{"class":264},[254,128785,61867],{"class":313},[254,128787,265],{"class":264},[254,128789,128790],{"class":5357},"images\u002Fbg.png",[254,128792,2859],{"class":264},[254,128794,128795],{"class":256,"line":1319},[254,128796,1705],{"class":264},[402,128798,128799,128808],{},[405,128800,128801],{},[408,128802,128803,128806],{},[411,128804,128805],{"align":23877},"参数值",[411,128807,102837],{"align":23877},[449,128809,128810,128817],{},[408,128811,128812,128814],{},[454,128813,54878],{"align":23877},[454,128815,128816],{"align":23877},"无背景图（默认的）",[408,128818,128819,128821],{},[454,128820,61867],{"align":23877},[454,128822,128823],{"align":23877},"使用绝对或相对地址指定背景图像",[245,128825,128826],{"className":126692,"code":128768,"language":126694,"meta":174,"style":174},[251,128827,128828,128834,128848],{"__ignoreMap":174},[254,128829,128830,128832],{"class":256,"line":257},[254,128831,51752],{"class":51441},[254,128833,15713],{"class":264},[254,128835,128836,128838,128840,128842,128844,128846],{"class":256,"line":175},[254,128837,128781],{"class":313},[254,128839,51578],{"class":264},[254,128841,61867],{"class":313},[254,128843,265],{"class":264},[254,128845,128790],{"class":5357},[254,128847,2859],{"class":264},[254,128849,128850],{"class":256,"line":1319},[254,128851,1705],{"class":264},[14,128853,128854],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[225,128856,128858],{"id":128857},"_823-背景平铺","8.2.3 背景平铺",[245,128860,128862],{"className":126692,"code":128861,"language":126694,"meta":174,"style":174},"div {\n  background-repeat: no-repeat;\n}\n",[251,128863,128864,128870,128881],{"__ignoreMap":174},[254,128865,128866,128868],{"class":256,"line":257},[254,128867,51752],{"class":51441},[254,128869,15713],{"class":264},[254,128871,128872,128875,128877,128879],{"class":256,"line":175},[254,128873,128874],{"class":313},"  background-repeat",[254,128876,51578],{"class":264},[254,128878,61877],{"class":313},[254,128880,1430],{"class":264},[254,128882,128883],{"class":256,"line":1319},[254,128884,1705],{"class":264},[402,128886,128887,128895],{},[405,128888,128889],{},[408,128890,128891,128893],{},[411,128892,128805],{"align":23877},[411,128894,102837],{"align":23877},[449,128896,128897,128905,128912,128920],{},[408,128898,128899,128902],{},[454,128900,128901],{"align":23877},"repeat",[454,128903,128904],{"align":23877},"背景图像在纵向和横向上平铺（默认的）",[408,128906,128907,128909],{},[454,128908,61877],{"align":23877},[454,128910,128911],{"align":23877},"背景图像不平铺",[408,128913,128914,128917],{},[454,128915,128916],{"align":23877},"repeat-x",[454,128918,128919],{"align":23877},"背景图像在横向上平铺",[408,128921,128922,128925],{},[454,128923,128924],{"align":23877},"repeat-y",[454,128926,128927],{"align":23877},"背景图像在纵向平铺",[225,128929,128931],{"id":128930},"_824-背景图片位置","8.2.4 背景图片位置",[245,128933,128935],{"className":126692,"code":128934,"language":126694,"meta":174,"style":174},"\u002F* 方位名词 *\u002F\ndiv {\n  background-position: center top;\n}\n\u002F* 精确单位 *\u002F\ndiv {\n  background-position: 20px 50px;\n}\n\u002F* 混合单位 *\u002F\ndiv {\n  background-position: 20px center;\n}\n",[251,128936,128937,128942,128948,128962,128966,128971,128977,128993,128997,129002,129008,129022],{"__ignoreMap":174},[254,128938,128939],{"class":256,"line":257},[254,128940,128941],{"class":323},"\u002F* 方位名词 *\u002F\n",[254,128943,128944,128946],{"class":256,"line":175},[254,128945,51752],{"class":51441},[254,128947,15713],{"class":264},[254,128949,128950,128953,128955,128957,128960],{"class":256,"line":1319},[254,128951,128952],{"class":313},"  background-position",[254,128954,51578],{"class":264},[254,128956,51733],{"class":313},[254,128958,128959],{"class":313}," top",[254,128961,1430],{"class":264},[254,128963,128964],{"class":256,"line":1334},[254,128965,1705],{"class":264},[254,128967,128968],{"class":256,"line":1340},[254,128969,128970],{"class":323},"\u002F* 精确单位 *\u002F\n",[254,128972,128973,128975],{"class":256,"line":1354},[254,128974,51752],{"class":51441},[254,128976,15713],{"class":264},[254,128978,128979,128981,128983,128985,128987,128989,128991],{"class":256,"line":1360},[254,128980,128952],{"class":313},[254,128982,51578],{"class":264},[254,128984,964],{"class":313},[254,128986,51633],{"class":260},[254,128988,57645],{"class":313},[254,128990,51633],{"class":260},[254,128992,1430],{"class":264},[254,128994,128995],{"class":256,"line":1451},[254,128996,1705],{"class":264},[254,128998,128999],{"class":256,"line":1457},[254,129000,129001],{"class":323},"\u002F* 混合单位 *\u002F\n",[254,129003,129004,129006],{"class":256,"line":1469},[254,129005,51752],{"class":51441},[254,129007,15713],{"class":264},[254,129009,129010,129012,129014,129016,129018,129020],{"class":256,"line":1752},[254,129011,128952],{"class":313},[254,129013,51578],{"class":264},[254,129015,964],{"class":313},[254,129017,51633],{"class":260},[254,129019,17285],{"class":313},[254,129021,1430],{"class":264},[254,129023,129024],{"class":256,"line":1757},[254,129025,1705],{"class":264},[14,129027,129028],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[402,129030,129031,129039],{},[405,129032,129033],{},[408,129034,129035,129037],{},[411,129036,128805],{"align":23877},[411,129038,26010],{"align":23877},[449,129040,129041,129048],{},[408,129042,129043,129045],{},[454,129044,52109],{"align":23877},[454,129046,129047],{"align":23877},"百分数|由浮点数和单位标识符组成的长度值",[408,129049,129050,129053],{},[454,129051,129052],{"align":23877},"position",[454,129054,129055],{"align":23877},"top|center|bottom|left|center|right 方位名词",[14,129057,129058],{},"其他说明：",[14,129060,129061],{},"①参数是方位名词",[14,129063,129064],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[14,129066,129067],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[14,129069,129070],{},"②参数是精确单位",[14,129072,129073],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[14,129075,129076],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[14,129078,129079],{},"③参数是混合单位",[14,129081,129082],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[225,129084,129086],{"id":129085},"_825-背景图片固定","8.2.5 背景图片固定",[245,129088,129090],{"className":126692,"code":129089,"language":126694,"meta":174,"style":174},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[251,129091,129092,129097,129103,129115,129119,129124,129130,129140],{"__ignoreMap":174},[254,129093,129094],{"class":256,"line":257},[254,129095,129096],{"class":323},"\u002F* 背景滚动（默认） *\u002F\n",[254,129098,129099,129101],{"class":256,"line":175},[254,129100,51752],{"class":51441},[254,129102,15713],{"class":264},[254,129104,129105,129108,129110,129113],{"class":256,"line":1319},[254,129106,129107],{"class":313},"  background-attachment",[254,129109,51578],{"class":264},[254,129111,129112],{"class":313},"scroll",[254,129114,1430],{"class":264},[254,129116,129117],{"class":256,"line":1334},[254,129118,1705],{"class":264},[254,129120,129121],{"class":256,"line":1340},[254,129122,129123],{"class":323},"\u002F* 背景固定 *\u002F\n",[254,129125,129126,129128],{"class":256,"line":1354},[254,129127,51752],{"class":51441},[254,129129,15713],{"class":264},[254,129131,129132,129134,129136,129138],{"class":256,"line":1360},[254,129133,129107],{"class":313},[254,129135,51578],{"class":264},[254,129137,86374],{"class":313},[254,129139,1430],{"class":264},[254,129141,129142],{"class":256,"line":1451},[254,129143,1705],{"class":264},[402,129145,129146,129155],{},[405,129147,129148],{},[408,129149,129150,129153],{},[411,129151,129152],{"align":23877},"参数",[411,129154,102837],{"align":23877},[449,129156,129157,129164],{},[408,129158,129159,129161],{},[454,129160,129112],{"align":23877},[454,129162,129163],{"align":23877},"背景图像是随对象内容滚动",[408,129165,129166,129168],{},[454,129167,86374],{"align":23877},[454,129169,129170],{"align":23877},"背景图像固定",[225,129172,129174],{"id":129173},"_826-背景样式合写","8.2.6 背景样式合写",[245,129176,129178],{"className":126692,"code":129177,"language":126694,"meta":174,"style":174},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[251,129179,129180,129185,129191,129219],{"__ignoreMap":174},[254,129181,129182],{"class":256,"line":257},[254,129183,129184],{"class":323},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[254,129186,129187,129189],{"class":256,"line":175},[254,129188,51752],{"class":51441},[254,129190,15713],{"class":264},[254,129192,129193,129195,129197,129199,129202,129204,129206,129208,129210,129213,129215,129217],{"class":256,"line":1319},[254,129194,70752],{"class":313},[254,129196,51578],{"class":264},[254,129198,60983],{"class":313},[254,129200,129201],{"class":313}," url",[254,129203,265],{"class":264},[254,129205,128790],{"class":5357},[254,129207,13855],{"class":264},[254,129209,61877],{"class":313},[254,129211,129212],{"class":313}," fixed",[254,129214,17285],{"class":313},[254,129216,128959],{"class":313},[254,129218,1430],{"class":264},[254,129220,129221],{"class":256,"line":1334},[254,129222,1705],{"class":264},[225,129224,129226],{"id":129225},"_827-背景色半透明","8.2.7 背景色半透明",[245,129228,129230],{"className":126692,"code":129229,"language":126694,"meta":174,"style":174},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[251,129231,129232,129238,129264],{"__ignoreMap":174},[254,129233,129234,129236],{"class":256,"line":257},[254,129235,51752],{"class":51441},[254,129237,15713],{"class":264},[254,129239,129240,129242,129244,129246,129248,129250,129252,129254,129256,129258,129260,129262],{"class":256,"line":175},[254,129241,70752],{"class":313},[254,129243,51578],{"class":264},[254,129245,55251],{"class":313},[254,129247,265],{"class":264},[254,129249,456],{"class":313},[254,129251,12576],{"class":264},[254,129253,456],{"class":313},[254,129255,12576],{"class":264},[254,129257,456],{"class":313},[254,129259,12576],{"class":264},[254,129261,100662],{"class":313},[254,129263,2859],{"class":264},[254,129265,129266],{"class":256,"line":1319},[254,129267,1705],{"class":264},[14,129269,99537],{},[14,129271,129272],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[14,129274,129275],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[14,129277,129278],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[14,129280,129281],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[225,129283,129285],{"id":129284},"_828-总结","8.2.8 总结",[402,129287,129288,129299],{},[405,129289,129290],{},[408,129291,129292,129295,129297],{},[411,129293,129294],{"align":23877},"属性",[411,129296,102837],{"align":23877},[411,129298,417],{"align":23877},[449,129300,129301,129312,129323,129334,129345,129356,129367],{},[408,129302,129303,129306,129309],{},[454,129304,129305],{"align":23877},"background-color",[454,129307,129308],{"align":23877},"背景颜色",[454,129310,129311],{"align":23877},"预定义的颜色值\u002F十六进制\u002FRGB代码",[408,129313,129314,129317,129320],{},[454,129315,129316],{"align":23877},"background-image",[454,129318,129319],{"align":23877},"背景图片",[454,129321,129322],{"align":23877},"url(图片路径)",[408,129324,129325,129328,129331],{},[454,129326,129327],{"align":23877},"background-repeat",[454,129329,129330],{"align":23877},"是否平铺",[454,129332,129333],{"align":23877},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[408,129335,129336,129339,129342],{},[454,129337,129338],{"align":23877},"background-position",[454,129340,129341],{"align":23877},"背景位置",[454,129343,129344],{"align":23877},"length\u002Fposition 分别是x和y坐标",[408,129346,129347,129350,129353],{},[454,129348,129349],{"align":23877},"background-attachment",[454,129351,129352],{"align":23877},"背景附着",[454,129354,129355],{"align":23877},"scroll(背景滚动) \u002Ffixed (背景固定)",[408,129357,129358,129361,129364],{},[454,129359,129360],{"align":23877},"背景简写",[454,129362,129363],{"align":23877},"书写更简单",[454,129365,129366],{"align":23877},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[408,129368,129369,129372,129375],{},[454,129370,129371],{"align":23877},"背景半透明",[454,129373,129374],{"align":23877},"背景颜色半透明",[454,129376,129377],{"align":23877},"background: rgba(0,0,0.3); 后面必须是4个值",[14,129379,129380],{},"颜色渐变：",[1602,129382],{"style":126548,"src":129383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[1602,129385],{"style":126548,"src":129386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[225,129388,129390],{"id":129389},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[245,129392,129394],{"className":127439,"code":129393,"language":127441,"meta":174,"style":174},"\u003Cdiv class=\"nav\">\n  \u003Ca href=\"#\">五彩导航1\u003C\u002Fa>\n  \u003Ca href=\"#\">五彩导航2\u003C\u002Fa>\n  \u003Ca href=\"#\">五彩导航3\u003C\u002Fa>\n  \u003Ca href=\"#\">五彩导航4\u003C\u002Fa>\n  \u003Ca href=\"#\">五彩导航5\u003C\u002Fa>\n\u003C\u002Fdiv>\n",[251,129395,129396,129411,129430,129449,129468,129487,129506],{"__ignoreMap":174},[254,129397,129398,129400,129402,129404,129406,129409],{"class":256,"line":257},[254,129399,1174],{"class":264},[254,129401,51752],{"class":51441},[254,129403,53627],{"class":2103},[254,129405,310],{"class":264},[254,129407,129408],{"class":369},"\"nav\"",[254,129410,51448],{"class":264},[254,129412,129413,129415,129417,129419,129421,129423,129426,129428],{"class":256,"line":175},[254,129414,52285],{"class":264},[254,129416,42],{"class":51441},[254,129418,61198],{"class":2103},[254,129420,310],{"class":264},[254,129422,61203],{"class":369},[254,129424,129425],{"class":264},">五彩导航1\u003C\u002F",[254,129427,42],{"class":51441},[254,129429,51448],{"class":264},[254,129431,129432,129434,129436,129438,129440,129442,129445,129447],{"class":256,"line":1319},[254,129433,52285],{"class":264},[254,129435,42],{"class":51441},[254,129437,61198],{"class":2103},[254,129439,310],{"class":264},[254,129441,61203],{"class":369},[254,129443,129444],{"class":264},">五彩导航2\u003C\u002F",[254,129446,42],{"class":51441},[254,129448,51448],{"class":264},[254,129450,129451,129453,129455,129457,129459,129461,129464,129466],{"class":256,"line":1334},[254,129452,52285],{"class":264},[254,129454,42],{"class":51441},[254,129456,61198],{"class":2103},[254,129458,310],{"class":264},[254,129460,61203],{"class":369},[254,129462,129463],{"class":264},">五彩导航3\u003C\u002F",[254,129465,42],{"class":51441},[254,129467,51448],{"class":264},[254,129469,129470,129472,129474,129476,129478,129480,129483,129485],{"class":256,"line":1340},[254,129471,52285],{"class":264},[254,129473,42],{"class":51441},[254,129475,61198],{"class":2103},[254,129477,310],{"class":264},[254,129479,61203],{"class":369},[254,129481,129482],{"class":264},">五彩导航4\u003C\u002F",[254,129484,42],{"class":51441},[254,129486,51448],{"class":264},[254,129488,129489,129491,129493,129495,129497,129499,129502,129504],{"class":256,"line":1354},[254,129490,52285],{"class":264},[254,129492,42],{"class":51441},[254,129494,61198],{"class":2103},[254,129496,310],{"class":264},[254,129498,61203],{"class":369},[254,129500,129501],{"class":264},">五彩导航5\u003C\u002F",[254,129503,42],{"class":51441},[254,129505,51448],{"class":264},[254,129507,129508,129510,129512],{"class":256,"line":1360},[254,129509,51926],{"class":264},[254,129511,51752],{"class":51441},[254,129513,51448],{"class":264},[245,129515,129517],{"className":126692,"code":129516,"language":126694,"meta":174,"style":174},".nav a {\n  display: inline-block;\n  width: 120px;\n  height: 58px;\n  text-align: center;\n  line-height: 58px;\n  color: #fff;\n}\n.nav a:nth-child(1) { background-color: #ff6700; }\n.nav a:nth-child(2) { background-color: #ff0000; }\n.nav a:nth-child(3) { background-color: #00a4ff; }\n.nav a:nth-child(4) { background-color: #ff00ff; }\n.nav a:nth-child(5) { background-color: #00ff00; }\n",[251,129518,129519,129528,129538,129550,129562,129572,129584,129594,129598,129623,129646,129669,129692],{"__ignoreMap":174},[254,129520,129521,129524,129526],{"class":256,"line":257},[254,129522,129523],{"class":2103},".nav",[254,129525,1538],{"class":51441},[254,129527,15713],{"class":264},[254,129529,129530,129532,129534,129536],{"class":256,"line":175},[254,129531,128308],{"class":313},[254,129533,51578],{"class":264},[254,129535,72524],{"class":313},[254,129537,1430],{"class":264},[254,129539,129540,129542,129544,129546,129548],{"class":256,"line":1319},[254,129541,70709],{"class":313},[254,129543,51578],{"class":264},[254,129545,1081],{"class":313},[254,129547,51633],{"class":260},[254,129549,1430],{"class":264},[254,129551,129552,129554,129556,129558,129560],{"class":256,"line":1334},[254,129553,70929],{"class":313},[254,129555,51578],{"class":264},[254,129557,1120],{"class":313},[254,129559,51633],{"class":260},[254,129561,1430],{"class":264},[254,129563,129564,129566,129568,129570],{"class":256,"line":1340},[254,129565,70667],{"class":313},[254,129567,51578],{"class":264},[254,129569,51733],{"class":313},[254,129571,1430],{"class":264},[254,129573,129574,129576,129578,129580,129582],{"class":256,"line":1354},[254,129575,127376],{"class":313},[254,129577,51578],{"class":264},[254,129579,1120],{"class":313},[254,129581,51633],{"class":260},[254,129583,1430],{"class":264},[254,129585,129586,129588,129590,129592],{"class":256,"line":1360},[254,129587,71046],{"class":313},[254,129589,51578],{"class":264},[254,129591,60983],{"class":313},[254,129593,1430],{"class":264},[254,129595,129596],{"class":256,"line":1451},[254,129597,1705],{"class":264},[254,129599,129600,129602,129604,129607,129609,129611,129614,129616,129618,129620],{"class":256,"line":1457},[254,129601,129523],{"class":2103},[254,129603,1538],{"class":51441},[254,129605,129606],{"class":2103},":nth-child",[254,129608,265],{"class":264},[254,129610,482],{"class":313},[254,129612,129613],{"class":264},") { ",[254,129615,129305],{"class":313},[254,129617,51578],{"class":264},[254,129619,128723],{"class":313},[254,129621,129622],{"class":264},"; }\n",[254,129624,129625,129627,129629,129631,129633,129635,129637,129639,129641,129644],{"class":256,"line":1469},[254,129626,129523],{"class":2103},[254,129628,1538],{"class":51441},[254,129630,129606],{"class":2103},[254,129632,265],{"class":264},[254,129634,342],{"class":313},[254,129636,129613],{"class":264},[254,129638,129305],{"class":313},[254,129640,51578],{"class":264},[254,129642,129643],{"class":313},"#ff0000",[254,129645,129622],{"class":264},[254,129647,129648,129650,129652,129654,129656,129658,129660,129662,129664,129667],{"class":256,"line":1752},[254,129649,129523],{"class":2103},[254,129651,1538],{"class":51441},[254,129653,129606],{"class":2103},[254,129655,265],{"class":264},[254,129657,336],{"class":313},[254,129659,129613],{"class":264},[254,129661,129305],{"class":313},[254,129663,51578],{"class":264},[254,129665,129666],{"class":313},"#00a4ff",[254,129668,129622],{"class":264},[254,129670,129671,129673,129675,129677,129679,129681,129683,129685,129687,129690],{"class":256,"line":1757},[254,129672,129523],{"class":2103},[254,129674,1538],{"class":51441},[254,129676,129606],{"class":2103},[254,129678,265],{"class":264},[254,129680,557],{"class":313},[254,129682,129613],{"class":264},[254,129684,129305],{"class":313},[254,129686,51578],{"class":264},[254,129688,129689],{"class":313},"#ff00ff",[254,129691,129622],{"class":264},[254,129693,129694,129696,129698,129700,129702,129704,129706,129708,129710,129713],{"class":256,"line":1763},[254,129695,129523],{"class":2103},[254,129697,1538],{"class":51441},[254,129699,129606],{"class":2103},[254,129701,265],{"class":264},[254,129703,583],{"class":313},[254,129705,129613],{"class":264},[254,129707,129305],{"class":313},[254,129709,51578],{"class":264},[254,129711,129712],{"class":313},"#00ff00",[254,129714,129622],{"class":264},[34,129716,129718],{"id":129717},"_83-css三大特性","8.3 css三大特性",[225,129720,129722],{"id":129721},"_831-层叠性","8.3.1 层叠性",[14,129724,129725],{},"为了解决样式冲突问题",[14,129727,129728],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[14,129730,129731],{},"   ②样式不冲突，不会层叠",[225,129733,129735],{"id":129734},"_832-继承性","8.3.2 继承性",[14,129737,129738],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[14,129740,129741],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[245,129743,129745],{"className":126692,"code":129744,"language":126694,"meta":174,"style":174},"p {\n  color: #333;\n}\n",[251,129746,129747,129753,129763],{"__ignoreMap":174},[254,129748,129749,129751],{"class":256,"line":257},[254,129750,14],{"class":51441},[254,129752,15713],{"class":264},[254,129754,129755,129757,129759,129761],{"class":256,"line":175},[254,129756,71046],{"class":313},[254,129758,51578],{"class":264},[254,129760,62510],{"class":313},[254,129762,1430],{"class":264},[254,129764,129765],{"class":256,"line":1319},[254,129766,1705],{"class":264},[1602,129768],{"style":126548,"src":129769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[14,129771,129772],{},"解释：①行高可以跟单位也可以不跟单位",[14,129774,129775],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[14,129777,129778],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[14,129780,129781],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[225,129783,129785],{"id":129784},"_833-优先级","8.3.3 优先级",[21,129787,129788,129791],{},[24,129789,129790],{},"选择器相同，则执行层叠性",[24,129792,129793],{},"选择器不同，则根据选择器权重执行",[402,129795,129796,129806],{},[405,129797,129798],{},[408,129799,129800,129803],{},[411,129801,129802],{"align":23877},"选择器",[411,129804,129805],{"align":23877},"选择器权重",[449,129807,129808,129816,129824,129832,129840,129848],{},[408,129809,129810,129813],{},[454,129811,129812],{"align":23877},"继承 或者*",[454,129814,129815],{"align":23877},"0，0，0，0",[408,129817,129818,129821],{},[454,129819,129820],{"align":23877},"标签选择器",[454,129822,129823],{"align":23877},"0，0，0，1",[408,129825,129826,129829],{},[454,129827,129828],{"align":23877},"类选择器，伪类选择器",[454,129830,129831],{"align":23877},"0，0，1，0",[408,129833,129834,129837],{},[454,129835,129836],{"align":23877},"ID选择器",[454,129838,129839],{"align":23877},"0，1，0，0",[408,129841,129842,129845],{},[454,129843,129844],{"align":23877},"行内样式",[454,129846,129847],{"align":23877},"1，0，0，0",[408,129849,129850,129853],{},[454,129851,129852],{"align":23877},"！important",[454,129854,129855],{"align":23877},"无穷大",[14,129857,129858],{},"! important用法：",[245,129860,129862],{"className":126692,"code":129861,"language":126694,"meta":174,"style":174},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[251,129863,129864,129869,129875,129888,129892,129897,129903,129913],{"__ignoreMap":174},[254,129865,129866],{"class":256,"line":257},[254,129867,129868],{"class":323},"\u002F* !important 拥有最高优先级 *\u002F\n",[254,129870,129871,129873],{"class":256,"line":175},[254,129872,51752],{"class":51441},[254,129874,15713],{"class":264},[254,129876,129877,129879,129881,129883,129886],{"class":256,"line":1319},[254,129878,71046],{"class":313},[254,129880,51578],{"class":264},[254,129882,51786],{"class":313},[254,129884,129885],{"class":260}," !important",[254,129887,1430],{"class":264},[254,129889,129890],{"class":256,"line":1334},[254,129891,1705],{"class":264},[254,129893,129894],{"class":256,"line":1340},[254,129895,129896],{"class":323},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[254,129898,129899,129901],{"class":256,"line":1354},[254,129900,51752],{"class":51441},[254,129902,15713],{"class":264},[254,129904,129905,129907,129909,129911],{"class":256,"line":1360},[254,129906,71046],{"class":313},[254,129908,51578],{"class":264},[254,129910,57562],{"class":313},[254,129912,1430],{"class":264},[254,129914,129915],{"class":256,"line":1451},[254,129916,1705],{"class":264},[14,129918,129919],{},"优先级注意点：",[14,129921,129922],{},"①权重是有4组数字组成,但是不会有进位",[14,129924,129925],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[14,129927,129928],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[14,129930,129931],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[14,129933,129934],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[14,129936,129937],{},"⑥复合选择器",[402,129939,129940,129950],{},[405,129941,129942],{},[408,129943,129944,129947],{},[411,129945,129946],{"align":23877},"div ul li",[411,129948,129949],{"align":23877},"0,0,0,3",[449,129951,129952,129960,129968],{},[408,129953,129954,129957],{},[454,129955,129956],{"align":23877},".nav ul li",[454,129958,129959],{"align":23877},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[408,129961,129962,129965],{},[454,129963,129964],{"align":23877},"a:hover",[454,129966,129967],{"align":23877},"0,0,1,1",[408,129969,129970,129973],{},[454,129971,129972],{"align":23877},".nav a",[454,129974,129967],{"align":23877},[5267,129976,129977],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":174,"searchDepth":175,"depth":175,"links":129979},[129980,129988,129999],{"id":128088,"depth":175,"text":128089,"children":129981},[129982,129983,129984,129985,129986,129987],{"id":128101,"depth":1319,"text":128102},{"id":128173,"depth":1319,"text":128174},{"id":128245,"depth":1319,"text":128246},{"id":128276,"depth":1319,"text":128277},{"id":128283,"depth":1319,"text":128284},{"id":128436,"depth":1319,"text":128437},{"id":128744,"depth":175,"text":128745,"children":129989},[129990,129991,129992,129993,129994,129995,129996,129997,129998],{"id":128751,"depth":1319,"text":128752},{"id":128761,"depth":1319,"text":128762},{"id":128857,"depth":1319,"text":128858},{"id":128930,"depth":1319,"text":128931},{"id":129085,"depth":1319,"text":129086},{"id":129173,"depth":1319,"text":129174},{"id":129225,"depth":1319,"text":129226},{"id":129284,"depth":1319,"text":129285},{"id":129389,"depth":1319,"text":129390},{"id":129717,"depth":175,"text":129718,"children":130000},[130001,130002,130003],{"id":129721,"depth":1319,"text":129722},{"id":129734,"depth":1319,"text":129735},{"id":129784,"depth":1319,"text":129785},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":128080,"description":23518},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":130010,"title":130011,"body":130012,"description":23518,"extension":181,"meta":131602,"navigation":184,"path":131603,"seo":131604,"stem":131605,"__hash__":131606},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":130013,"toc":131581},[130014,130017,130021,130024,130027,130030,130033,130036,130039,130042,130046,130054,130091,130127,130130,130144,130149,130183,130186,130279,130284,130287,130317,130320,130325,130333,130337,130344,130390,130434,130439,130442,130445,130448,130451,130454,130457,130459,130462,130466,130471,130515,130520,130523,130526,130563,130568,130571,130574,130577,130580,130612,130615,130618,130621,130653,130656,130659,130662,130666,130669,130701,130704,130708,130728,130731,130739,130742,130746,130751,130754,130786,130791,130794,130832,130836,130841,130844,130847,130878,130881,130898,130903,130955,131015,131020,131074,131112,131116,131120,131123,131127,131135,131138,131140,131151,131156,131204,131238,131241,131244,131247,131250,131294,131297,131300,131303,131306,131309,131312,131356,131359,131362,131365,131368,131371,131374,131380,131383,131427,131430,131433,131436,131439,131442,131486,131489,131491,131494,131498,131502,131540,131544,131547,131550,131554,131562,131566,131569,131572,131575,131578],[10,130015,130011],{"id":130016},"_9-css盒模型浮动与切图",[34,130018,130020],{"id":130019},"_91-盒子模型","9.1 盒子模型",[14,130022,130023],{},"利用盒子来设计网页",[14,130025,130026],{},"盒子包含：边框、外边距、内边距、实际内容",[14,130028,130029],{},"网页布局设置：",[14,130031,130032],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[14,130034,130035],{},"②利用css设置好盒子样式，然后摆放到相应位置",[14,130037,130038],{},"③往盒子里装内容",[1602,130040],{"style":126548,"src":130041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[225,130043,130045],{"id":130044},"_911-边框border","9.1.1 边框（border）",[21,130047,130048,130051],{},[24,130049,130050],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[24,130052,130053],{},"语法",[245,130055,130057],{"className":126692,"code":130056,"language":126694,"meta":174,"style":174},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[251,130058,130059,130064,130070,130087],{"__ignoreMap":174},[254,130060,130061],{"class":256,"line":257},[254,130062,130063],{"class":323},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[254,130065,130066,130068],{"class":256,"line":175},[254,130067,51752],{"class":51441},[254,130069,15713],{"class":264},[254,130071,130072,130074,130076,130078,130080,130082,130085],{"class":256,"line":1319},[254,130073,71037],{"class":313},[254,130075,51578],{"class":264},[254,130077,482],{"class":313},[254,130079,51633],{"class":260},[254,130081,51662],{"class":313},[254,130083,130084],{"class":313}," #ccc",[254,130086,1430],{"class":264},[254,130088,130089],{"class":256,"line":1334},[254,130090,1705],{"class":264},[402,130092,130093,130101],{},[405,130094,130095],{},[408,130096,130097,130099],{},[411,130098,129294],{"align":23877},[411,130100,102837],{"align":23877},[449,130102,130103,130111,130119],{},[408,130104,130105,130108],{},[454,130106,130107],{"align":23877},"border-width",[454,130109,130110],{"align":23877},"定义边框粗细，单位是px",[408,130112,130113,130116],{},[454,130114,130115],{"align":23877},"border-style",[454,130117,130118],{"align":23877},"边框的样式",[408,130120,130121,130124],{},[454,130122,130123],{"align":23877},"border-color",[454,130125,130126],{"align":23877},"边框的颜色",[14,130128,130129],{},"边框样式 border-style 可以设置如下值：",[1271,130131,130132,130135,130138,130141],{},[24,130133,130134],{},"none：没有边框即忽略所有边框的宽度（默认值）",[24,130136,130137],{},"solid：边框为单实线(最为常用的)",[24,130139,130140],{},"dashed：边框为虚线",[24,130142,130143],{},"dotted：边框为点线",[21,130145,130146],{"start":1319},[24,130147,130148],{},"边框的合写分写",[245,130150,130151],{"className":126692,"code":130056,"language":126694,"meta":174,"style":174},[251,130152,130153,130157,130163,130179],{"__ignoreMap":174},[254,130154,130155],{"class":256,"line":257},[254,130156,130063],{"class":323},[254,130158,130159,130161],{"class":256,"line":175},[254,130160,51752],{"class":51441},[254,130162,15713],{"class":264},[254,130164,130165,130167,130169,130171,130173,130175,130177],{"class":256,"line":1319},[254,130166,71037],{"class":313},[254,130168,51578],{"class":264},[254,130170,482],{"class":313},[254,130172,51633],{"class":260},[254,130174,51662],{"class":313},[254,130176,130084],{"class":313},[254,130178,1430],{"class":264},[254,130180,130181],{"class":256,"line":1334},[254,130182,1705],{"class":264},[14,130184,130185],{},"边框分开写法：",[245,130187,130189],{"className":126692,"code":130188,"language":126694,"meta":174,"style":174},"\u002F* 边框分开写法 *\u002F\ndiv {\n  border-top: 1px solid #000;\n  border-right: 2px dashed #333;\n  border-bottom: 3px dotted #666;\n  border-left: 1px solid #999;\n}\n",[251,130190,130191,130196,130202,130220,130238,130257,130275],{"__ignoreMap":174},[254,130192,130193],{"class":256,"line":257},[254,130194,130195],{"class":323},"\u002F* 边框分开写法 *\u002F\n",[254,130197,130198,130200],{"class":256,"line":175},[254,130199,51752],{"class":51441},[254,130201,15713],{"class":264},[254,130203,130204,130207,130209,130211,130213,130215,130218],{"class":256,"line":1319},[254,130205,130206],{"class":313},"  border-top",[254,130208,51578],{"class":264},[254,130210,482],{"class":313},[254,130212,51633],{"class":260},[254,130214,51662],{"class":313},[254,130216,130217],{"class":313}," #000",[254,130219,1430],{"class":264},[254,130221,130222,130225,130227,130229,130231,130233,130236],{"class":256,"line":1334},[254,130223,130224],{"class":313},"  border-right",[254,130226,51578],{"class":264},[254,130228,342],{"class":313},[254,130230,51633],{"class":260},[254,130232,62382],{"class":313},[254,130234,130235],{"class":313}," #333",[254,130237,1430],{"class":264},[254,130239,130240,130243,130245,130247,130249,130252,130255],{"class":256,"line":1340},[254,130241,130242],{"class":313},"  border-bottom",[254,130244,51578],{"class":264},[254,130246,336],{"class":313},[254,130248,51633],{"class":260},[254,130250,130251],{"class":313}," dotted",[254,130253,130254],{"class":313}," #666",[254,130256,1430],{"class":264},[254,130258,130259,130262,130264,130266,130268,130270,130273],{"class":256,"line":1354},[254,130260,130261],{"class":313},"  border-left",[254,130263,51578],{"class":264},[254,130265,482],{"class":313},[254,130267,51633],{"class":260},[254,130269,51662],{"class":313},[254,130271,130272],{"class":313}," #999",[254,130274,1430],{"class":264},[254,130276,130277],{"class":256,"line":1360},[254,130278,1705],{"class":264},[21,130280,130281],{"start":1334},[24,130282,130283],{},"表格的细线边框",[14,130285,130286],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[245,130288,130290],{"className":126692,"code":130289,"language":126694,"meta":174,"style":174},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[251,130291,130292,130297,130303,130313],{"__ignoreMap":174},[254,130293,130294],{"class":256,"line":257},[254,130295,130296],{"class":323},"\u002F* 表格细线边框合并 *\u002F\n",[254,130298,130299,130301],{"class":256,"line":175},[254,130300,402],{"class":51441},[254,130302,15713],{"class":264},[254,130304,130305,130307,130309,130311],{"class":256,"line":1319},[254,130306,70719],{"class":313},[254,130308,51578],{"class":264},[254,130310,65176],{"class":313},[254,130312,1430],{"class":264},[254,130314,130315],{"class":256,"line":1334},[254,130316,1705],{"class":264},[14,130318,130319],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[21,130321,130322],{"start":1340},[24,130323,130324],{},"解决边框额外增加盒子的实际大小的方法：",[1271,130326,130327,130330],{},[24,130328,130329],{},"测量盒子大小的时候,不量边框",[24,130331,130332],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[225,130334,130336],{"id":130335},"_912-内边距","9.1.2 内边距",[21,130338,130339,130342],{},[24,130340,130341],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[24,130343,130053],{},[402,130345,130346,130356],{},[405,130347,130348],{},[408,130349,130350,130353],{},[411,130351,130352],{"align":23877},"值的个数",[411,130354,130355],{"align":23877},"表达意思",[449,130357,130358,130366,130374,130382],{},[408,130359,130360,130363],{},[454,130361,130362],{"align":23877},"padding: 5px;",[454,130364,130365],{"align":23877},"1个值，代表上下左右都有5个元素",[408,130367,130368,130371],{},[454,130369,130370],{"align":23877},"padding: 5px 10px;",[454,130372,130373],{"align":23877},"2个值，代表上下内边距为5像素，左右内边距为10像素",[408,130375,130376,130379],{},[454,130377,130378],{"align":23877},"padding: 5px 10px 20px;",[454,130380,130381],{"align":23877},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[408,130383,130384,130387],{},[454,130385,130386],{"align":23877},"padding: 5px 10px 20px 30px;",[454,130388,130389],{"align":23877},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[402,130391,130392,130400],{},[405,130393,130394],{},[408,130395,130396,130398],{},[411,130397,129294],{"align":23877},[411,130399,102837],{"align":23877},[449,130401,130402,130410,130418,130426],{},[408,130403,130404,130407],{},[454,130405,130406],{"align":23877},"padding-left",[454,130408,130409],{"align":23877},"左内边距",[408,130411,130412,130415],{},[454,130413,130414],{"align":23877},"padding-right",[454,130416,130417],{"align":23877},"右内边距",[408,130419,130420,130423],{},[454,130421,130422],{"align":23877},"padding-top",[454,130424,130425],{"align":23877},"上内边距",[408,130427,130428,130431],{},[454,130429,130430],{"align":23877},"padding-bottom",[454,130432,130433],{"align":23877},"下内边距",[21,130435,130436],{"start":1319},[24,130437,130438],{},"内边距会影响盒子的实际大小",[14,130440,130441],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[14,130443,130444],{},"①内容和边框有了距离，添加了内边距",[14,130446,130447],{},"②padding影响了盒子实际大小",[14,130449,130450],{},"内边距对盒子大小的影响：",[14,130452,130453],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[14,130455,130456],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[14,130458,95361],{},[14,130460,130461],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[225,130463,130465],{"id":130464},"_913-外边距","9.1.3 外边距",[21,130467,130468],{},[24,130469,130470],{},"控制盒子与盒子之间的距离",[402,130472,130473,130481],{},[405,130474,130475],{},[408,130476,130477,130479],{},[411,130478,129294],{"align":23877},[411,130480,102837],{"align":23877},[449,130482,130483,130491,130499,130507],{},[408,130484,130485,130488],{},[454,130486,130487],{"align":23877},"margin-left",[454,130489,130490],{"align":23877},"左外边距",[408,130492,130493,130496],{},[454,130494,130495],{"align":23877},"margin-right",[454,130497,130498],{"align":23877},"右外边距",[408,130500,130501,130504],{},[454,130502,130503],{"align":23877},"margin-top",[454,130505,130506],{"align":23877},"上外边距",[408,130508,130509,130512],{},[454,130510,130511],{"align":23877},"margin-bottom",[454,130513,130514],{"align":23877},"下外边距",[21,130516,130517],{"start":175},[24,130518,130519],{},"外边距可以让块级盒子水平居中的两个条件：",[14,130521,130522],{},"①盒子必须指定了宽度（width）",[14,130524,130525],{},"②盒子左右的外边距都设置为 auto",[245,130527,130529],{"className":126692,"code":130528,"language":126694,"meta":174,"style":174},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[251,130530,130531,130536,130543,130559],{"__ignoreMap":174},[254,130532,130533],{"class":256,"line":257},[254,130534,130535],{"class":323},"\u002F* margin 复合写法（同上） *\u002F\n",[254,130537,130538,130541],{"class":256,"line":175},[254,130539,130540],{"class":2103},".box",[254,130542,15713],{"class":264},[254,130544,130545,130547,130549,130551,130553,130556],{"class":256,"line":1319},[254,130546,70611],{"class":313},[254,130548,51578],{"class":264},[254,130550,456],{"class":313},[254,130552,51697],{"class":313},[254,130554,130555],{"class":264},";  ",[254,130557,130558],{"class":323},"\u002F* 块级盒子水平居中 *\u002F\n",[254,130560,130561],{"class":256,"line":1334},[254,130562,1705],{"class":264},[21,130564,130565],{"start":1319},[24,130566,130567],{},"外边距塌陷问题",[14,130569,130570],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[1602,130572],{"style":126548,"src":130573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[14,130575,130576],{},"解决方案：",[14,130578,130579],{},"①可以为父亲元素定义上边距",[245,130581,130582],{"className":126692,"code":130528,"language":126694,"meta":174,"style":174},[251,130583,130584,130588,130594,130608],{"__ignoreMap":174},[254,130585,130586],{"class":256,"line":257},[254,130587,130535],{"class":323},[254,130589,130590,130592],{"class":256,"line":175},[254,130591,130540],{"class":2103},[254,130593,15713],{"class":264},[254,130595,130596,130598,130600,130602,130604,130606],{"class":256,"line":1319},[254,130597,70611],{"class":313},[254,130599,51578],{"class":264},[254,130601,456],{"class":313},[254,130603,51697],{"class":313},[254,130605,130555],{"class":264},[254,130607,130558],{"class":323},[254,130609,130610],{"class":256,"line":1334},[254,130611,1705],{"class":264},[14,130613,130614],{},"②可以为父亲元素定义上内边距",[14,130616,130617],{},"③可以为父亲元素添加overflow:hidden",[1602,130619],{"style":126548,"src":130620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[245,130622,130623],{"className":126692,"code":130528,"language":126694,"meta":174,"style":174},[251,130624,130625,130629,130635,130649],{"__ignoreMap":174},[254,130626,130627],{"class":256,"line":257},[254,130628,130535],{"class":323},[254,130630,130631,130633],{"class":256,"line":175},[254,130632,130540],{"class":2103},[254,130634,15713],{"class":264},[254,130636,130637,130639,130641,130643,130645,130647],{"class":256,"line":1319},[254,130638,70611],{"class":313},[254,130640,51578],{"class":264},[254,130642,456],{"class":313},[254,130644,51697],{"class":313},[254,130646,130555],{"class":264},[254,130648,130558],{"class":323},[254,130650,130651],{"class":256,"line":1334},[254,130652,1705],{"class":264},[1602,130654],{"style":126548,"src":130655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[14,130657,130658],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[14,130660,130661],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[225,130663,130665],{"id":130664},"_914-清除内外边距","9.1.4 清除内外边距",[14,130667,130668],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[245,130670,130671],{"className":126692,"code":130528,"language":126694,"meta":174,"style":174},[251,130672,130673,130677,130683,130697],{"__ignoreMap":174},[254,130674,130675],{"class":256,"line":257},[254,130676,130535],{"class":323},[254,130678,130679,130681],{"class":256,"line":175},[254,130680,130540],{"class":2103},[254,130682,15713],{"class":264},[254,130684,130685,130687,130689,130691,130693,130695],{"class":256,"line":1319},[254,130686,70611],{"class":313},[254,130688,51578],{"class":264},[254,130690,456],{"class":313},[254,130692,51697],{"class":313},[254,130694,130555],{"class":264},[254,130696,130558],{"class":323},[254,130698,130699],{"class":256,"line":1334},[254,130700,1705],{"class":264},[14,130702,130703],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[225,130705,130707],{"id":130706},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[1271,130709,130710,130713,130716,130719,130722,130725],{},[24,130711,130712],{},"文件→打开 ：可以打开我们要测量的图片",[24,130714,130715],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[24,130717,130718],{},"右击标尺，把里面的单位改为像素",[24,130720,130721],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[24,130723,130724],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[24,130726,130727],{},"用选区拖动 可以测量大小",[1602,130729],{"style":126548,"src":130730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[1271,130732,130733,130736],{},[24,130734,130735],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[24,130737,130738],{},"吸管取色工具",[1602,130740],{"style":126548,"src":130741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[225,130743,130745],{"id":130744},"_916-案例","9.1.6 案例",[21,130747,130748],{},[24,130749,130750],{},"小米商品",[1602,130752],{"style":126548,"src":130753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[245,130755,130756],{"className":126692,"code":130528,"language":126694,"meta":174,"style":174},[251,130757,130758,130762,130768,130782],{"__ignoreMap":174},[254,130759,130760],{"class":256,"line":257},[254,130761,130535],{"class":323},[254,130763,130764,130766],{"class":256,"line":175},[254,130765,130540],{"class":2103},[254,130767,15713],{"class":264},[254,130769,130770,130772,130774,130776,130778,130780],{"class":256,"line":1319},[254,130771,70611],{"class":313},[254,130773,51578],{"class":264},[254,130775,456],{"class":313},[254,130777,51697],{"class":313},[254,130779,130555],{"class":264},[254,130781,130558],{"class":323},[254,130783,130784],{"class":256,"line":1334},[254,130785,1705],{"class":264},[21,130787,130788],{"start":175},[24,130789,130790],{},"快报模块",[1602,130792],{"style":126548,"src":130793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[245,130795,130797],{"className":127439,"code":130796,"language":127441,"meta":174,"style":174},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[251,130798,130799,130804,130819,130824],{"__ignoreMap":174},[254,130800,130801],{"class":256,"line":257},[254,130802,130803],{"class":323},"\u003C!-- HTML 代码示例 -->\n",[254,130805,130806,130808,130810,130812,130814,130817],{"class":256,"line":175},[254,130807,1174],{"class":264},[254,130809,51752],{"class":51441},[254,130811,53627],{"class":2103},[254,130813,310],{"class":264},[254,130815,130816],{"class":369},"\"example\"",[254,130818,51448],{"class":264},[254,130820,130821],{"class":256,"line":1319},[254,130822,130823],{"class":264},"  示例内容\n",[254,130825,130826,130828,130830],{"class":256,"line":1334},[254,130827,51926],{"class":264},[254,130829,51752],{"class":51441},[254,130831,51448],{"class":264},[225,130833,130835],{"id":130834},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[21,130837,130838],{},[24,130839,130840],{},"圆角边框",[14,130842,130843],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[1602,130845],{"style":126548,"src":130846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[245,130848,130850],{"className":126692,"code":130849,"language":126694,"meta":174,"style":174},"div {\n  border: 1px solid #ccc;\n}\n",[251,130851,130852,130858,130874],{"__ignoreMap":174},[254,130853,130854,130856],{"class":256,"line":257},[254,130855,51752],{"class":51441},[254,130857,15713],{"class":264},[254,130859,130860,130862,130864,130866,130868,130870,130872],{"class":256,"line":175},[254,130861,71037],{"class":313},[254,130863,51578],{"class":264},[254,130865,482],{"class":313},[254,130867,51633],{"class":260},[254,130869,51662],{"class":313},[254,130871,130084],{"class":313},[254,130873,1430],{"class":264},[254,130875,130876],{"class":256,"line":1319},[254,130877,1705],{"class":264},[14,130879,130880],{},"解释:",[1271,130882,130883,130886,130889,130892,130895],{},[24,130884,130885],{},"参数值可以为数值或百分比的形式",[24,130887,130888],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[24,130890,130891],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[24,130893,130894],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[24,130896,130897],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[21,130899,130900],{"start":175},[24,130901,130902],{},"盒子阴影",[245,130904,130906],{"className":126692,"code":130905,"language":126694,"meta":174,"style":174},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[251,130907,130908,130914,130951],{"__ignoreMap":174},[254,130909,130910,130912],{"class":256,"line":257},[254,130911,51752],{"class":51441},[254,130913,15713],{"class":264},[254,130915,130916,130919,130921,130923,130925,130927,130929,130931,130933,130935,130937,130939,130941,130943,130945,130947,130949],{"class":256,"line":175},[254,130917,130918],{"class":313},"  box-shadow",[254,130920,51578],{"class":264},[254,130922,456],{"class":313},[254,130924,14896],{"class":313},[254,130926,51633],{"class":260},[254,130928,2178],{"class":313},[254,130930,51633],{"class":260},[254,130932,78908],{"class":313},[254,130934,265],{"class":264},[254,130936,456],{"class":313},[254,130938,12576],{"class":264},[254,130940,456],{"class":313},[254,130942,12576],{"class":264},[254,130944,456],{"class":313},[254,130946,12576],{"class":264},[254,130948,86351],{"class":313},[254,130950,2859],{"class":264},[254,130952,130953],{"class":256,"line":1319},[254,130954,1705],{"class":264},[402,130956,130957,130965],{},[405,130958,130959],{},[408,130960,130961,130963],{},[411,130962,417],{"align":23877},[411,130964,27630],{"align":23877},[449,130966,130967,130975,130983,130991,130999,131007],{},[408,130968,130969,130972],{},[454,130970,130971],{"align":23877},"h-shadow",[454,130973,130974],{"align":23877},"必需,水平阴影的位置,允许负值",[408,130976,130977,130980],{},[454,130978,130979],{"align":23877},"v-shadow",[454,130981,130982],{"align":23877},"必需,垂直阴影的位置,允许负值",[408,130984,130985,130988],{},[454,130986,130987],{"align":23877},"blur",[454,130989,130990],{"align":23877},"可选,模糊距离,就是影子的虚实",[408,130992,130993,130996],{},[454,130994,130995],{"align":23877},"spread",[454,130997,130998],{"align":23877},"可选,阴影尺寸",[408,131000,131001,131004],{},[454,131002,131003],{"align":23877},"color",[454,131005,131006],{"align":23877},"可选,阴影的颜色",[408,131008,131009,131012],{},[454,131010,131011],{"align":23877},"inset",[454,131013,131014],{"align":23877},"可选,将外部阴影(outset)改为内部阴影",[21,131016,131017],{"start":1319},[24,131018,131019],{},"文字阴影",[245,131021,131023],{"className":126692,"code":131022,"language":126694,"meta":174,"style":174},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[251,131024,131025,131031,131070],{"__ignoreMap":174},[254,131026,131027,131029],{"class":256,"line":257},[254,131028,14],{"class":51441},[254,131030,15713],{"class":264},[254,131032,131033,131036,131038,131040,131042,131044,131046,131048,131050,131052,131054,131056,131058,131060,131062,131064,131066,131068],{"class":256,"line":175},[254,131034,131035],{"class":313},"  text-shadow",[254,131037,51578],{"class":264},[254,131039,482],{"class":313},[254,131041,51633],{"class":260},[254,131043,25259],{"class":313},[254,131045,51633],{"class":260},[254,131047,14896],{"class":313},[254,131049,51633],{"class":260},[254,131051,78908],{"class":313},[254,131053,265],{"class":264},[254,131055,456],{"class":313},[254,131057,12576],{"class":264},[254,131059,456],{"class":313},[254,131061,12576],{"class":264},[254,131063,456],{"class":313},[254,131065,12576],{"class":264},[254,131067,100662],{"class":313},[254,131069,2859],{"class":264},[254,131071,131072],{"class":256,"line":1319},[254,131073,1705],{"class":264},[402,131075,131076,131084],{},[405,131077,131078],{},[408,131079,131080,131082],{},[411,131081,417],{"align":23877},[411,131083,27630],{"align":23877},[449,131085,131086,131092,131099,131106],{},[408,131087,131088,131090],{},[454,131089,130971],{"align":23877},[454,131091,130974],{"align":23877},[408,131093,131094,131096],{},[454,131095,130979],{"align":23877},[454,131097,131098],{"align":23877},"必需,垂直阴影位置,允许负值",[408,131100,131101,131103],{},[454,131102,130987],{"align":23877},[454,131104,131105],{"align":23877},"可选,模糊的距离",[408,131107,131108,131110],{},[454,131109,131003],{"align":23877},[454,131111,131006],{"align":23877},[34,131113,131115],{"id":131114},"_92-浮动","9.2 浮动",[225,131117,131119],{"id":131118},"_921-浮动介绍","9.2.1 浮动介绍",[14,131121,131122],{},"在16.2中详细介绍",[225,131124,131126],{"id":131125},"_922-清除浮动","9.2.2 清除浮动",[21,131128,131129,131132],{},[24,131130,131131],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[24,131133,131134],{},"清除浮动的本质",[14,131136,131137],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[14,131139,9166],{},[1271,131141,131142,131145,131148],{},[24,131143,131144],{},"如果父盒子本身有高度，则不需要清除浮动",[24,131146,131147],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[24,131149,131150],{},"父级有了高度，就不会影响下面的标准流了",[21,131152,131153],{"start":1319},[24,131154,131155],{},"清除浮动样式",[245,131157,131159],{"className":126692,"code":131158,"language":126694,"meta":174,"style":174},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[251,131160,131161,131168,131179,131183,131190,131200],{"__ignoreMap":174},[254,131162,131163,131166],{"class":256,"line":257},[254,131164,131165],{"class":2103},".left",[254,131167,15713],{"class":264},[254,131169,131170,131173,131175,131177],{"class":256,"line":175},[254,131171,131172],{"class":313},"  float",[254,131174,51578],{"class":264},[254,131176,23877],{"class":313},[254,131178,1430],{"class":264},[254,131180,131181],{"class":256,"line":1319},[254,131182,1705],{"class":264},[254,131184,131185,131188],{"class":256,"line":1334},[254,131186,131187],{"class":2103},".right",[254,131189,15713],{"class":264},[254,131191,131192,131194,131196,131198],{"class":256,"line":1340},[254,131193,131172],{"class":313},[254,131195,51578],{"class":264},[254,131197,72663],{"class":313},[254,131199,1430],{"class":264},[254,131201,131202],{"class":256,"line":1354},[254,131203,1705],{"class":264},[402,131205,131206,131214],{},[405,131207,131208],{},[408,131209,131210,131212],{},[411,131211,127156],{"align":23877},[411,131213,27630],{"align":23877},[449,131215,131216,131223,131230],{},[408,131217,131218,131220],{},[454,131219,23877],{"align":23877},[454,131221,131222],{"align":23877},"不允许左侧有浮动元素（清除左侧浮动的影响）",[408,131224,131225,131227],{},[454,131226,72663],{"align":23877},[454,131228,131229],{"align":23877},"不允许右侧有浮动元素（清除右侧浮动的影响）",[408,131231,131232,131235],{},[454,131233,131234],{"align":23877},"both",[454,131236,131237],{"align":23877},"同时清除左右侧浮动的影响",[14,131239,131240],{},"法一",[14,131242,131243],{},"额外标签法也称为隔墙法",[14,131245,131246],{},"使用方式：",[14,131248,131249],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[245,131251,131252],{"className":126692,"code":131158,"language":126694,"meta":174,"style":174},[251,131253,131254,131260,131270,131274,131280,131290],{"__ignoreMap":174},[254,131255,131256,131258],{"class":256,"line":257},[254,131257,131165],{"class":2103},[254,131259,15713],{"class":264},[254,131261,131262,131264,131266,131268],{"class":256,"line":175},[254,131263,131172],{"class":313},[254,131265,51578],{"class":264},[254,131267,23877],{"class":313},[254,131269,1430],{"class":264},[254,131271,131272],{"class":256,"line":1319},[254,131273,1705],{"class":264},[254,131275,131276,131278],{"class":256,"line":1334},[254,131277,131187],{"class":2103},[254,131279,15713],{"class":264},[254,131281,131282,131284,131286,131288],{"class":256,"line":1340},[254,131283,131172],{"class":313},[254,131285,51578],{"class":264},[254,131287,72663],{"class":313},[254,131289,1430],{"class":264},[254,131291,131292],{"class":256,"line":1354},[254,131293,1705],{"class":264},[14,131295,131296],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[14,131298,131299],{},"优点： 通俗易懂，书写方便",[14,131301,131302],{},"缺点： 添加许多无意义的标签，结构化较差",[14,131304,131305],{},"注意： 要求这个新的空标签必须是块级元素。",[14,131307,131308],{},"法二",[14,131310,131311],{},"父级添加overflow属性",[245,131313,131314],{"className":126692,"code":131158,"language":126694,"meta":174,"style":174},[251,131315,131316,131322,131332,131336,131342,131352],{"__ignoreMap":174},[254,131317,131318,131320],{"class":256,"line":257},[254,131319,131165],{"class":2103},[254,131321,15713],{"class":264},[254,131323,131324,131326,131328,131330],{"class":256,"line":175},[254,131325,131172],{"class":313},[254,131327,51578],{"class":264},[254,131329,23877],{"class":313},[254,131331,1430],{"class":264},[254,131333,131334],{"class":256,"line":1319},[254,131335,1705],{"class":264},[254,131337,131338,131340],{"class":256,"line":1334},[254,131339,131187],{"class":2103},[254,131341,15713],{"class":264},[254,131343,131344,131346,131348,131350],{"class":256,"line":1340},[254,131345,131172],{"class":313},[254,131347,51578],{"class":264},[254,131349,72663],{"class":313},[254,131351,1430],{"class":264},[254,131353,131354],{"class":256,"line":1354},[254,131355,1705],{"class":264},[14,131357,131358],{},"overflow: hidden;",[14,131360,131361],{},"优点：代码简洁",[14,131363,131364],{},"缺点：无法显示溢出的部分",[14,131366,131367],{},"注意：是给父元素添加代码",[14,131369,131370],{},"法三",[14,131372,131373],{},"父级添加after伪元素",[14,131375,131376,131379],{},[131377,131378],"after",{}," 方式是额外标签法的升级版",[14,131381,131382],{},"使用的时候复制就可以",[245,131384,131385],{"className":126692,"code":131158,"language":126694,"meta":174,"style":174},[251,131386,131387,131393,131403,131407,131413,131423],{"__ignoreMap":174},[254,131388,131389,131391],{"class":256,"line":257},[254,131390,131165],{"class":2103},[254,131392,15713],{"class":264},[254,131394,131395,131397,131399,131401],{"class":256,"line":175},[254,131396,131172],{"class":313},[254,131398,51578],{"class":264},[254,131400,23877],{"class":313},[254,131402,1430],{"class":264},[254,131404,131405],{"class":256,"line":1319},[254,131406,1705],{"class":264},[254,131408,131409,131411],{"class":256,"line":1334},[254,131410,131187],{"class":2103},[254,131412,15713],{"class":264},[254,131414,131415,131417,131419,131421],{"class":256,"line":1340},[254,131416,131172],{"class":313},[254,131418,51578],{"class":264},[254,131420,72663],{"class":313},[254,131422,1430],{"class":264},[254,131424,131425],{"class":256,"line":1354},[254,131426,1705],{"class":264},[14,131428,131429],{},"优点：没有增加标签，结构更简单",[14,131431,131432],{},"缺点：照顾低版本浏览器",[14,131434,131435],{},"代表网站： 百度、淘宝网、网易等",[14,131437,131438],{},"法四",[14,131440,131441],{},"父级添加双伪元素",[245,131443,131444],{"className":126692,"code":131158,"language":126694,"meta":174,"style":174},[251,131445,131446,131452,131462,131466,131472,131482],{"__ignoreMap":174},[254,131447,131448,131450],{"class":256,"line":257},[254,131449,131165],{"class":2103},[254,131451,15713],{"class":264},[254,131453,131454,131456,131458,131460],{"class":256,"line":175},[254,131455,131172],{"class":313},[254,131457,51578],{"class":264},[254,131459,23877],{"class":313},[254,131461,1430],{"class":264},[254,131463,131464],{"class":256,"line":1319},[254,131465,1705],{"class":264},[254,131467,131468,131470],{"class":256,"line":1334},[254,131469,131187],{"class":2103},[254,131471,15713],{"class":264},[254,131473,131474,131476,131478,131480],{"class":256,"line":1340},[254,131475,131172],{"class":313},[254,131477,51578],{"class":264},[254,131479,72663],{"class":313},[254,131481,1430],{"class":264},[254,131483,131484],{"class":256,"line":1354},[254,131485,1705],{"class":264},[14,131487,131488],{},"优点：代码更简洁",[14,131490,131432],{},[14,131492,131493],{},"代表网站：小米、腾讯等",[34,131495,131497],{"id":131496},"_93-ps切图","9.3 PS切图",[225,131499,131501],{"id":131500},"_931-常见图片格式","9.3.1 常见图片格式",[402,131503,131504,131514],{},[405,131505,131506],{},[408,131507,131508,131511],{},[411,131509,131510],{"align":23877},"jpg图像格式",[411,131512,131513],{"align":23877},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[449,131515,131516,131524,131532],{},[408,131517,131518,131521],{},[454,131519,131520],{"align":23877},"gif图像格式",[454,131522,131523],{"align":23877},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[408,131525,131526,131529],{},[454,131527,131528],{"align":23877},"png图像格式",[454,131530,131531],{"align":23877},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[408,131533,131534,131537],{},[454,131535,131536],{"align":23877},"PSD图像格式",[454,131538,131539],{"align":23877},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[225,131541,131543],{"id":131542},"_932-图层切图","9.3.2 图层切图",[14,131545,131546],{},"最简单的切图方式：右击图层 → 导出 → 切片",[14,131548,131549],{},"按住shift选中两个图层->图层菜单->合并图层",[225,131551,131553],{"id":131552},"_933-切片切图","9.3.3 切片切图",[1271,131555,131556,131559],{},[24,131557,131558],{},"利用切片工具手动划出",[24,131560,131561],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[225,131563,131565],{"id":131564},"_934-切图步骤","9.3.4 切图步骤",[14,131567,131568],{},"用切片工具选中：",[1602,131570],{"style":126548,"src":131571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[14,131573,131574],{},"文件 -> 导出",[1602,131576],{"style":126548,"src":131577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[5267,131579,131580],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":174,"searchDepth":175,"depth":175,"links":131582},[131583,131592,131596],{"id":130019,"depth":175,"text":130020,"children":131584},[131585,131586,131587,131588,131589,131590,131591],{"id":130044,"depth":1319,"text":130045},{"id":130335,"depth":1319,"text":130336},{"id":130464,"depth":1319,"text":130465},{"id":130664,"depth":1319,"text":130665},{"id":130706,"depth":1319,"text":130707},{"id":130744,"depth":1319,"text":130745},{"id":130834,"depth":1319,"text":130835},{"id":131114,"depth":175,"text":131115,"children":131593},[131594,131595],{"id":131118,"depth":1319,"text":131119},{"id":131125,"depth":1319,"text":131126},{"id":131496,"depth":175,"text":131497,"children":131597},[131598,131599,131600,131601],{"id":131500,"depth":1319,"text":131501},{"id":131542,"depth":1319,"text":131543},{"id":131552,"depth":1319,"text":131553},{"id":131564,"depth":1319,"text":131565},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":130011,"description":23518},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":131608,"title":131609,"body":131610,"description":23518,"extension":181,"meta":132251,"navigation":184,"path":132252,"seo":132253,"stem":132254,"__hash__":132255},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":131611,"toc":132239},[131612,131615,131619,131645,131679,131683,131687,131690,131732,131739,131749,131757,131759,131762,131765,131768,131775,131789,131793,131796,131825,131829,131832,131846,131850,131853,131881,131885,131888,131914,131918,131923,131956,131961,131989,131993,132010,132056,132061,132105,132122,132229,132237],[10,131613,131609],{"id":131614},"_10-css规范与学成在线案例",[34,131616,131618],{"id":131617},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[21,131620,131621,131627,131633,131639],{},[24,131622,131623,131626],{},[414,131624,131625],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[24,131628,131629,131632],{},[414,131630,131631],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[24,131634,131635,131638],{},[414,131636,131637],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[24,131640,131641,131644],{},[414,131642,131643],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[245,131646,131647],{"className":126692,"code":130056,"language":126694,"meta":174,"style":174},[251,131648,131649,131653,131659,131675],{"__ignoreMap":174},[254,131650,131651],{"class":256,"line":257},[254,131652,130063],{"class":323},[254,131654,131655,131657],{"class":256,"line":175},[254,131656,51752],{"class":51441},[254,131658,15713],{"class":264},[254,131660,131661,131663,131665,131667,131669,131671,131673],{"class":256,"line":1319},[254,131662,71037],{"class":313},[254,131664,51578],{"class":264},[254,131666,482],{"class":313},[254,131668,51633],{"class":260},[254,131670,51662],{"class":313},[254,131672,130084],{"class":313},[254,131674,1430],{"class":264},[254,131676,131677],{"class":256,"line":1334},[254,131678,1705],{"class":264},[34,131680,131682],{"id":131681},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[225,131684,131686],{"id":131685},"_1021-header头部制作","10.2.1 header头部制作",[1602,131688],{"style":126548,"src":131689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[1271,131691,131692,131699,131706,131712,131719,131726],{},[24,131693,131694,131695,131698],{},"1号是版心盒子 ",[414,131696,131697],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[24,131700,131701,131702,131705],{},"版心盒子 里面包含 2号盒子 ",[414,131703,131704],{},"logo"," 图标",[24,131707,131708,131709,131711],{},"版心盒子 里面包含 3号盒子 ",[414,131710,53854],{}," 导航栏",[24,131713,131714,131715,131718],{},"版心盒子 里面包含 4号盒子 ",[414,131716,131717],{},"search"," 搜索框",[24,131720,131721,131722,131725],{},"版心盒子 里面包含 5号盒子 ",[414,131723,131724],{},"user"," 个人信息",[24,131727,131728,131729],{},"注意，要求里面的 ",[414,131730,131731],{},"4个子盒子 必须都浮动",[21,131733,131734],{},[24,131735,131736],{},[414,131737,131738],{},"导航栏注意点:",[14,131740,131741,131742,131745,131746],{},"实际开发中， ",[414,131743,131744],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[414,131747,131748],{},"用 li 包含链接(li+a)的做法",[1271,131750,131751,131754],{},[24,131752,131753],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[24,131755,131756],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[14,131758,9166],{},[14,131760,131761],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[14,131763,131764],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[14,131766,131767],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[21,131769,131770],{"start":175},[24,131771,131772],{},[414,131773,131774],{},"4号盒子search的细节：",[1271,131776,131777,131780,131783],{},[24,131778,131779],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[24,131781,131782],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[24,131784,131785,131788],{},[251,131786,131787],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[225,131790,131792],{"id":131791},"_1022-banner制作","10.2.2 banner制作",[1602,131794],{"style":126548,"src":131795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[1271,131797,131798,131805,131811,131818],{},[24,131799,131800,131801,131804],{},"1号盒子是通栏的大盒子 ",[414,131802,131803],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[24,131806,131807,131808,131810],{},"2号盒子是版心 ",[414,131809,1059],{}," ， 要水平居中对齐",[24,131812,131813,131814,131817],{},"3号盒子版心内，左对齐 ",[414,131815,131816],{},"subnav"," 侧导航栏",[24,131819,131820,131821,131824],{},"4号盒子版心内，右对齐 ",[414,131822,131823],{},"course"," 课程",[225,131826,131828],{"id":131827},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[1602,131830],{"style":126548,"src":131831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[1271,131833,131834,131837,131840,131843],{},[24,131835,131836],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[24,131838,131839],{},"1号盒子是标题 H3 左侧浮动",[24,131841,131842],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[24,131844,131845],{},"3号盒子 右浮动 mod 修改",[225,131847,131849],{"id":131848},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[1602,131851],{"style":126548,"src":131852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[1271,131854,131855,131861,131868,131875,131878],{},[24,131856,131857,131858,131860],{},"1号盒子为最大的盒子 ",[414,131859,53855],{}," 版心水平居中对齐",[24,131862,131863,131864,131867],{},"2号盒子为上面部分 ",[414,131865,131866],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[24,131869,131870,131871,131874],{},"3号盒子为底下部分 ",[414,131872,131873],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[24,131876,131877],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[24,131879,131880],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[225,131882,131884],{"id":131883},"_1025-底部模块制作","10.2.5 底部模块制作",[1602,131886],{"style":126548,"src":131887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[1271,131889,131890,131897,131900,131907],{},[24,131891,131892,131893,131896],{},"1号盒子通栏大盒子 底部 ",[414,131894,131895],{},"footer"," 给高度 底色是白色",[24,131898,131899],{},"2号盒子版心水平居中",[24,131901,131902,131903,131906],{},"3号盒子版权 ",[414,131904,131905],{},"copyright"," 左对齐",[24,131908,131909,131910,131913],{},"4号盒子 链接组 ",[414,131911,131912],{},"links"," 右对齐",[225,131915,131917],{"id":131916},"_1026-代码模块","10.2.6 代码模块",[21,131919,131920],{},[24,131921,131922],{},"html部分",[245,131924,131926],{"className":127439,"code":131925,"language":127441,"meta":174,"style":174},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[251,131927,131928],{"__ignoreMap":174},[254,131929,131930,131932,131934,131936,131938,131941,131944,131946,131949,131952,131954],{"class":256,"line":257},[254,131931,1174],{"class":264},[254,131933,42],{"class":51441},[254,131935,61198],{"class":2103},[254,131937,310],{"class":264},[254,131939,131940],{"class":369},"\"https:\u002F\u002Fexample.com\"",[254,131942,131943],{"class":2103}," target",[254,131945,310],{"class":264},[254,131947,131948],{"class":369},"\"_blank\"",[254,131950,131951],{"class":264},">链接文字\u003C\u002F",[254,131953,42],{"class":51441},[254,131955,51448],{"class":264},[21,131957,131958],{"start":175},[24,131959,131960],{},"css部分",[245,131962,131963],{"className":127439,"code":131925,"language":127441,"meta":174,"style":174},[251,131964,131965],{"__ignoreMap":174},[254,131966,131967,131969,131971,131973,131975,131977,131979,131981,131983,131985,131987],{"class":256,"line":257},[254,131968,1174],{"class":264},[254,131970,42],{"class":51441},[254,131972,61198],{"class":2103},[254,131974,310],{"class":264},[254,131976,131940],{"class":369},[254,131978,131943],{"class":2103},[254,131980,310],{"class":264},[254,131982,131948],{"class":369},[254,131984,131951],{"class":264},[254,131986,42],{"class":51441},[254,131988,51448],{"class":264},[225,131990,131992],{"id":131991},"_1027-收获","10.2.7 收获",[21,131994,131995,131998,132001,132004,132007],{},[24,131996,131997],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[24,131999,132000],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[24,132002,132003],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[24,132005,132006],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[24,132008,132009],{},"遗忘代码",[245,132011,132013],{"className":126692,"code":132012,"language":126694,"meta":174,"style":174},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[251,132014,132015,132037,132042,132052],{"__ignoreMap":174},[254,132016,132017,132019,132021,132023,132025,132027,132029,132031,132033,132035],{"class":256,"line":257},[254,132018,51752],{"class":51441},[254,132020,12576],{"class":264},[254,132022,14],{"class":51441},[254,132024,12576],{"class":264},[254,132026,10],{"class":51441},[254,132028,12576],{"class":264},[254,132030,1271],{"class":51441},[254,132032,12576],{"class":264},[254,132034,24],{"class":51441},[254,132036,15713],{"class":264},[254,132038,132039],{"class":256,"line":175},[254,132040,132041],{"class":323},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[254,132043,132044,132046,132048,132050],{"class":256,"line":1319},[254,132045,128308],{"class":313},[254,132047,51578],{"class":264},[254,132049,61010],{"class":313},[254,132051,1430],{"class":264},[254,132053,132054],{"class":256,"line":1334},[254,132055,1705],{"class":264},[21,132057,132058],{"start":1354},[24,132059,132060],{},"html引css的程序",[245,132062,132063],{"className":126692,"code":132012,"language":126694,"meta":174,"style":174},[251,132064,132065,132087,132091,132101],{"__ignoreMap":174},[254,132066,132067,132069,132071,132073,132075,132077,132079,132081,132083,132085],{"class":256,"line":257},[254,132068,51752],{"class":51441},[254,132070,12576],{"class":264},[254,132072,14],{"class":51441},[254,132074,12576],{"class":264},[254,132076,10],{"class":51441},[254,132078,12576],{"class":264},[254,132080,1271],{"class":51441},[254,132082,12576],{"class":264},[254,132084,24],{"class":51441},[254,132086,15713],{"class":264},[254,132088,132089],{"class":256,"line":175},[254,132090,132041],{"class":323},[254,132092,132093,132095,132097,132099],{"class":256,"line":1319},[254,132094,128308],{"class":313},[254,132096,51578],{"class":264},[254,132098,61010],{"class":313},[254,132100,1430],{"class":264},[254,132102,132103],{"class":256,"line":1334},[254,132104,1705],{"class":264},[21,132106,132107,132110,132113,132116,132119],{"start":1360},[24,132108,132109],{},"浮动的盒子不会有外边距合并问题",[24,132111,132112],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[24,132114,132115],{},"ctrl+g快速定位行；shift+alt多个光标",[24,132117,132118],{},"学习上方各个模块的选择器起名方法，以后就这样用",[24,132120,132121],{},"在写选择器时尽量写全一些，例如",[245,132123,132125],{"className":126692,"code":132124,"language":126694,"meta":174,"style":174},"\u002F* 静态定位（默认） *\u002F\n.static { position: static; }\n\u002F* 相对定位 *\u002F\n.relative { position: relative; }\n\u002F* 绝对定位 *\u002F\n.absolute { position: absolute; }\n\u002F* 固定定位 *\u002F\n.fixed { position: fixed; }\n\u002F* 粘性定位 *\u002F\n.sticky { position: sticky; }\n",[251,132126,132127,132132,132148,132153,132168,132173,132188,132193,132208,132213],{"__ignoreMap":174},[254,132128,132129],{"class":256,"line":257},[254,132130,132131],{"class":323},"\u002F* 静态定位（默认） *\u002F\n",[254,132133,132134,132137,132139,132141,132143,132146],{"class":256,"line":175},[254,132135,132136],{"class":2103},".static",[254,132138,79948],{"class":264},[254,132140,129052],{"class":313},[254,132142,51578],{"class":264},[254,132144,132145],{"class":313},"static",[254,132147,129622],{"class":264},[254,132149,132150],{"class":256,"line":1319},[254,132151,132152],{"class":323},"\u002F* 相对定位 *\u002F\n",[254,132154,132155,132158,132160,132162,132164,132166],{"class":256,"line":1334},[254,132156,132157],{"class":2103},".relative",[254,132159,79948],{"class":264},[254,132161,129052],{"class":313},[254,132163,51578],{"class":264},[254,132165,54905],{"class":313},[254,132167,129622],{"class":264},[254,132169,132170],{"class":256,"line":1340},[254,132171,132172],{"class":323},"\u002F* 绝对定位 *\u002F\n",[254,132174,132175,132178,132180,132182,132184,132186],{"class":256,"line":1354},[254,132176,132177],{"class":2103},".absolute",[254,132179,79948],{"class":264},[254,132181,129052],{"class":313},[254,132183,51578],{"class":264},[254,132185,54972],{"class":313},[254,132187,129622],{"class":264},[254,132189,132190],{"class":256,"line":1360},[254,132191,132192],{"class":323},"\u002F* 固定定位 *\u002F\n",[254,132194,132195,132198,132200,132202,132204,132206],{"class":256,"line":1451},[254,132196,132197],{"class":2103},".fixed",[254,132199,79948],{"class":264},[254,132201,129052],{"class":313},[254,132203,51578],{"class":264},[254,132205,86374],{"class":313},[254,132207,129622],{"class":264},[254,132209,132210],{"class":256,"line":1457},[254,132211,132212],{"class":323},"\u002F* 粘性定位 *\u002F\n",[254,132214,132215,132218,132220,132222,132224,132227],{"class":256,"line":1469},[254,132216,132217],{"class":2103},".sticky",[254,132219,79948],{"class":264},[254,132221,129052],{"class":313},[254,132223,51578],{"class":264},[254,132225,132226],{"class":313},"sticky",[254,132228,129622],{"class":264},[21,132230,132231,132234],{"start":1757},[24,132232,132233],{},"一定要用好注释",[24,132235,132236],{},"浮动的盒子不会有外边距合并的问题",[5267,132238,131580],{},{"title":174,"searchDepth":175,"depth":175,"links":132240},[132241,132242],{"id":131617,"depth":175,"text":131618},{"id":131681,"depth":175,"text":131682,"children":132243},[132244,132245,132246,132247,132248,132249,132250],{"id":131685,"depth":1319,"text":131686},{"id":131791,"depth":1319,"text":131792},{"id":131827,"depth":1319,"text":131828},{"id":131848,"depth":1319,"text":131849},{"id":131883,"depth":1319,"text":131884},{"id":131916,"depth":1319,"text":131917},{"id":131991,"depth":1319,"text":131992},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":131609,"description":23518},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132257,"title":132258,"body":132259,"description":23518,"extension":181,"meta":133745,"navigation":184,"path":133746,"seo":133747,"stem":133748,"__hash__":133749},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132260,"toc":133737},[132261,132264,132268,132272,132283,132287,132304,132348,132381,132384,132401,132404,132407,132451,132455,132459,132462,132465,132469,132472,132483,132546,132587,132590,132605,132659,132667,132670,132681,132735,132761,132764,132777,132831,132863,132917,132940,132994,132997,133000,133007,133061,133082,133136,133139,133142,133227,133235,133292,133315,133319,133322,133340,133344,133363,133417,133455,133459,133462,133465,133487,133491,133499,133502,133507,133518,133521,133525,133539,133583,133586,133590,133593,133598,133624,133629,133706,133709,133713,133716,133719,133722,133725,133728,133731,133734],[10,132262,132258],{"id":132263},"_11-传统布局与定位体系",[34,132265,132267],{"id":132266},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[225,132269,132271],{"id":132270},"_1111-普通流标准流","11.1.1 普通流（标准流）",[1271,132273,132274,132277,132280],{},[24,132275,132276],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[24,132278,132279],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[24,132281,132282],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[225,132284,132286],{"id":132285},"_1112-浮动","11.1.2 浮动",[1271,132288,132289,132292,132295,132298,132301],{},[24,132290,132291],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[24,132293,132294],{},"浮动可以改变元素标签默认的排列方式",[24,132296,132297],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[24,132299,132300],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[24,132302,132303],{},"在使用行内块转换时盒子之间是有空隙的",[245,132305,132306],{"className":126692,"code":131158,"language":126694,"meta":174,"style":174},[251,132307,132308,132314,132324,132328,132334,132344],{"__ignoreMap":174},[254,132309,132310,132312],{"class":256,"line":257},[254,132311,131165],{"class":2103},[254,132313,15713],{"class":264},[254,132315,132316,132318,132320,132322],{"class":256,"line":175},[254,132317,131172],{"class":313},[254,132319,51578],{"class":264},[254,132321,23877],{"class":313},[254,132323,1430],{"class":264},[254,132325,132326],{"class":256,"line":1319},[254,132327,1705],{"class":264},[254,132329,132330,132332],{"class":256,"line":1334},[254,132331,131187],{"class":2103},[254,132333,15713],{"class":264},[254,132335,132336,132338,132340,132342],{"class":256,"line":1340},[254,132337,131172],{"class":313},[254,132339,51578],{"class":264},[254,132341,72663],{"class":313},[254,132343,1430],{"class":264},[254,132345,132346],{"class":256,"line":1354},[254,132347,1705],{"class":264},[402,132349,132350,132358],{},[405,132351,132352],{},[408,132353,132354,132356],{},[411,132355,127156],{"align":23877},[411,132357,27630],{"align":23877},[449,132359,132360,132367,132374],{},[408,132361,132362,132364],{},[454,132363,54878],{"align":23877},[454,132365,132366],{"align":23877},"元素不浮动（默认值）",[408,132368,132369,132371],{},[454,132370,23877],{"align":23877},[454,132372,132373],{"align":23877},"元素向左浮动",[408,132375,132376,132378],{},[454,132377,72663],{"align":23877},[454,132379,132380],{"align":23877},"元素向右浮动",[14,132382,132383],{},"浮动重点：",[1271,132385,132386,132389,132392,132395,132398],{},[24,132387,132388],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[24,132390,132391],{},"浮动的元素会一行内显示并且元素顶部对齐",[24,132393,132394],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[24,132396,132397],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[24,132399,132400],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[14,132402,132403],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[14,132405,132406],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[245,132408,132409],{"className":126692,"code":131158,"language":126694,"meta":174,"style":174},[251,132410,132411,132417,132427,132431,132437,132447],{"__ignoreMap":174},[254,132412,132413,132415],{"class":256,"line":257},[254,132414,131165],{"class":2103},[254,132416,15713],{"class":264},[254,132418,132419,132421,132423,132425],{"class":256,"line":175},[254,132420,131172],{"class":313},[254,132422,51578],{"class":264},[254,132424,23877],{"class":313},[254,132426,1430],{"class":264},[254,132428,132429],{"class":256,"line":1319},[254,132430,1705],{"class":264},[254,132432,132433,132435],{"class":256,"line":1334},[254,132434,131187],{"class":2103},[254,132436,15713],{"class":264},[254,132438,132439,132441,132443,132445],{"class":256,"line":1340},[254,132440,131172],{"class":313},[254,132442,51578],{"class":264},[254,132444,72663],{"class":313},[254,132446,1430],{"class":264},[254,132448,132449],{"class":256,"line":1354},[254,132450,1705],{"class":264},[225,132452,132454],{"id":132453},"_1113-定位","11.1.3 定位",[22139,132456,132458],{"id":132457},"_11131-使用场景","11.1.3.1 使用场景",[14,132460,132461],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[14,132463,132464],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[22139,132466,132468],{"id":132467},"_11132-定位组成","11.1.3.2 定位组成",[14,132470,132471],{},"定位 = 定位模式 + 边偏移",[21,132473,132474],{},[24,132475,132476,132479,132480],{},[414,132477,132478],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[414,132481,132482],{},"定位模式",[245,132484,132486],{"className":126692,"code":132485,"language":126694,"meta":174,"style":174},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[251,132487,132488,132494,132508,132525,132542],{"__ignoreMap":174},[254,132489,132490,132492],{"class":256,"line":257},[254,132491,130540],{"class":2103},[254,132493,15713],{"class":264},[254,132495,132496,132499,132501,132503,132505],{"class":256,"line":175},[254,132497,132498],{"class":313},"  position",[254,132500,51578],{"class":264},[254,132502,54905],{"class":313},[254,132504,130555],{"class":264},[254,132506,132507],{"class":323},"\u002F* 定位模式 *\u002F\n",[254,132509,132510,132513,132515,132517,132519,132522],{"class":256,"line":1319},[254,132511,132512],{"class":313},"  top",[254,132514,51578],{"class":264},[254,132516,710],{"class":313},[254,132518,51633],{"class":260},[254,132520,132521],{"class":264},";           ",[254,132523,132524],{"class":323},"\u002F* 边偏移：上 *\u002F\n",[254,132526,132527,132530,132532,132534,132536,132539],{"class":256,"line":1334},[254,132528,132529],{"class":313},"  left",[254,132531,51578],{"class":264},[254,132533,964],{"class":313},[254,132535,51633],{"class":260},[254,132537,132538],{"class":264},";          ",[254,132540,132541],{"class":323},"\u002F* 边偏移：左 *\u002F\n",[254,132543,132544],{"class":256,"line":1340},[254,132545,1705],{"class":264},[402,132547,132548,132557],{},[405,132549,132550],{},[408,132551,132552,132554],{},[411,132553,417],{"align":23877},[411,132555,132556],{"align":23877},"语义",[449,132558,132559,132566,132573,132580],{},[408,132560,132561,132563],{},[454,132562,132145],{"align":23877},[454,132564,132565],{"align":23877},"静态定位",[408,132567,132568,132570],{},[454,132569,54905],{"align":23877},[454,132571,132572],{"align":23877},"相对定位",[408,132574,132575,132577],{},[454,132576,54972],{"align":23877},[454,132578,132579],{"align":23877},"绝对定位",[408,132581,132582,132584],{},[454,132583,86374],{"align":23877},[454,132585,132586],{"align":23877},"固定定位",[14,132588,132589],{},"（1）静态定位：",[1271,132591,132592,132603],{},[24,132593,132594,132595,132598,132599,132602],{},"静态定位是元素的 ",[414,132596,132597],{},"默认定位方式"," ， ",[414,132600,132601],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[24,132604,5322],{},[245,132606,132607],{"className":126692,"code":132485,"language":126694,"meta":174,"style":174},[251,132608,132609,132615,132627,132641,132655],{"__ignoreMap":174},[254,132610,132611,132613],{"class":256,"line":257},[254,132612,130540],{"class":2103},[254,132614,15713],{"class":264},[254,132616,132617,132619,132621,132623,132625],{"class":256,"line":175},[254,132618,132498],{"class":313},[254,132620,51578],{"class":264},[254,132622,54905],{"class":313},[254,132624,130555],{"class":264},[254,132626,132507],{"class":323},[254,132628,132629,132631,132633,132635,132637,132639],{"class":256,"line":1319},[254,132630,132512],{"class":313},[254,132632,51578],{"class":264},[254,132634,710],{"class":313},[254,132636,51633],{"class":260},[254,132638,132521],{"class":264},[254,132640,132524],{"class":323},[254,132642,132643,132645,132647,132649,132651,132653],{"class":256,"line":1334},[254,132644,132529],{"class":313},[254,132646,51578],{"class":264},[254,132648,964],{"class":313},[254,132650,51633],{"class":260},[254,132652,132538],{"class":264},[254,132654,132541],{"class":323},[254,132656,132657],{"class":256,"line":1340},[254,132658,1705],{"class":264},[1271,132660,132661,132664],{},[24,132662,132663],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[24,132665,132666],{},"静态定位在布局时我们几乎不用的",[14,132668,132669],{},"（2）相对定位",[1271,132671,132672,132679],{},[24,132673,132674,132675,132678],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[414,132676,132677],{},"原来的位置"," 来说的（自恋型）",[24,132680,5322],{},[245,132682,132683],{"className":126692,"code":132485,"language":126694,"meta":174,"style":174},[251,132684,132685,132691,132703,132717,132731],{"__ignoreMap":174},[254,132686,132687,132689],{"class":256,"line":257},[254,132688,130540],{"class":2103},[254,132690,15713],{"class":264},[254,132692,132693,132695,132697,132699,132701],{"class":256,"line":175},[254,132694,132498],{"class":313},[254,132696,51578],{"class":264},[254,132698,54905],{"class":313},[254,132700,130555],{"class":264},[254,132702,132507],{"class":323},[254,132704,132705,132707,132709,132711,132713,132715],{"class":256,"line":1319},[254,132706,132512],{"class":313},[254,132708,51578],{"class":264},[254,132710,710],{"class":313},[254,132712,51633],{"class":260},[254,132714,132521],{"class":264},[254,132716,132524],{"class":323},[254,132718,132719,132721,132723,132725,132727,132729],{"class":256,"line":1334},[254,132720,132529],{"class":313},[254,132722,51578],{"class":264},[254,132724,964],{"class":313},[254,132726,51633],{"class":260},[254,132728,132538],{"class":264},[254,132730,132541],{"class":323},[254,132732,132733],{"class":256,"line":1340},[254,132734,1705],{"class":264},[1271,132736,132737],{},[24,132738,132739,132740,132742,132743,132745,132746,132749,132750,132753,132754,132756,132757,132760],{},"相对定位的特点：",[53857,132741],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[53857,132744],{},"  ② ",[414,132747,132748],{},"原来"," 在标准流的 ",[414,132751,132752],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[53857,132755],{},"  ③因此， ",[414,132758,132759],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[14,132762,132763],{},"（3）绝对定位",[1271,132765,132766,132775],{},[24,132767,132768,132770,132771,132774],{},[414,132769,132579],{}," 是元素在移动位置的时候，是相对于它 ",[414,132772,132773],{},"祖先元素"," 来说的（拼爹型）",[24,132776,5322],{},[245,132778,132779],{"className":126692,"code":132485,"language":126694,"meta":174,"style":174},[251,132780,132781,132787,132799,132813,132827],{"__ignoreMap":174},[254,132782,132783,132785],{"class":256,"line":257},[254,132784,130540],{"class":2103},[254,132786,15713],{"class":264},[254,132788,132789,132791,132793,132795,132797],{"class":256,"line":175},[254,132790,132498],{"class":313},[254,132792,51578],{"class":264},[254,132794,54905],{"class":313},[254,132796,130555],{"class":264},[254,132798,132507],{"class":323},[254,132800,132801,132803,132805,132807,132809,132811],{"class":256,"line":1319},[254,132802,132512],{"class":313},[254,132804,51578],{"class":264},[254,132806,710],{"class":313},[254,132808,51633],{"class":260},[254,132810,132521],{"class":264},[254,132812,132524],{"class":323},[254,132814,132815,132817,132819,132821,132823,132825],{"class":256,"line":1334},[254,132816,132529],{"class":313},[254,132818,51578],{"class":264},[254,132820,964],{"class":313},[254,132822,51633],{"class":260},[254,132824,132538],{"class":264},[254,132826,132541],{"class":323},[254,132828,132829],{"class":256,"line":1340},[254,132830,1705],{"class":264},[1271,132832,132833,132848,132857,132860],{},[24,132834,132835,132836,132838,132839,132841,132842,132844,132845,132847],{},"绝对定位的特点：",[53857,132837],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[53857,132840],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[53857,132843],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[53857,132846],{},"  (4)固定定位",[24,132849,132850,132852,132853,132856],{},[414,132851,132586],{}," 是元素 ",[414,132854,132855],{},"固定于浏览器可视区的位置"," 。（认死理型）",[24,132858,132859],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[24,132861,132862],{},"语法:",[245,132864,132865],{"className":126692,"code":132485,"language":126694,"meta":174,"style":174},[251,132866,132867,132873,132885,132899,132913],{"__ignoreMap":174},[254,132868,132869,132871],{"class":256,"line":257},[254,132870,130540],{"class":2103},[254,132872,15713],{"class":264},[254,132874,132875,132877,132879,132881,132883],{"class":256,"line":175},[254,132876,132498],{"class":313},[254,132878,51578],{"class":264},[254,132880,54905],{"class":313},[254,132882,130555],{"class":264},[254,132884,132507],{"class":323},[254,132886,132887,132889,132891,132893,132895,132897],{"class":256,"line":1319},[254,132888,132512],{"class":313},[254,132890,51578],{"class":264},[254,132892,710],{"class":313},[254,132894,51633],{"class":260},[254,132896,132521],{"class":264},[254,132898,132524],{"class":323},[254,132900,132901,132903,132905,132907,132909,132911],{"class":256,"line":1334},[254,132902,132529],{"class":313},[254,132904,51578],{"class":264},[254,132906,964],{"class":313},[254,132908,51633],{"class":260},[254,132910,132538],{"class":264},[254,132912,132541],{"class":323},[254,132914,132915],{"class":256,"line":1340},[254,132916,1705],{"class":264},[1271,132918,132919,132928],{},[24,132920,132921,132922,132924,132925,132927],{},"特点:",[53857,132923],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[53857,132926],{},"  ②固定定位不再占有原先的位置,完全脱标",[24,132929,132930,132931,132933,132934,132936,132937,132939],{},"固定在版心位置的方法:",[53857,132932],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[53857,132935],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[53857,132938],{},"  实例：",[245,132941,132942],{"className":126692,"code":132485,"language":126694,"meta":174,"style":174},[251,132943,132944,132950,132962,132976,132990],{"__ignoreMap":174},[254,132945,132946,132948],{"class":256,"line":257},[254,132947,130540],{"class":2103},[254,132949,15713],{"class":264},[254,132951,132952,132954,132956,132958,132960],{"class":256,"line":175},[254,132953,132498],{"class":313},[254,132955,51578],{"class":264},[254,132957,54905],{"class":313},[254,132959,130555],{"class":264},[254,132961,132507],{"class":323},[254,132963,132964,132966,132968,132970,132972,132974],{"class":256,"line":1319},[254,132965,132512],{"class":313},[254,132967,51578],{"class":264},[254,132969,710],{"class":313},[254,132971,51633],{"class":260},[254,132973,132521],{"class":264},[254,132975,132524],{"class":323},[254,132977,132978,132980,132982,132984,132986,132988],{"class":256,"line":1334},[254,132979,132529],{"class":313},[254,132981,51578],{"class":264},[254,132983,964],{"class":313},[254,132985,51633],{"class":260},[254,132987,132538],{"class":264},[254,132989,132541],{"class":323},[254,132991,132992],{"class":256,"line":1340},[254,132993,1705],{"class":264},[1602,132995],{"style":126548,"src":132996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[14,132998,132999],{},"(5)粘性定位",[1271,133001,133002,133005],{},[24,133003,133004],{},"粘性定位可以被认为是相对定位和固定定位的混合",[24,133006,5322],{},[245,133008,133009],{"className":126692,"code":132485,"language":126694,"meta":174,"style":174},[251,133010,133011,133017,133029,133043,133057],{"__ignoreMap":174},[254,133012,133013,133015],{"class":256,"line":257},[254,133014,130540],{"class":2103},[254,133016,15713],{"class":264},[254,133018,133019,133021,133023,133025,133027],{"class":256,"line":175},[254,133020,132498],{"class":313},[254,133022,51578],{"class":264},[254,133024,54905],{"class":313},[254,133026,130555],{"class":264},[254,133028,132507],{"class":323},[254,133030,133031,133033,133035,133037,133039,133041],{"class":256,"line":1319},[254,133032,132512],{"class":313},[254,133034,51578],{"class":264},[254,133036,710],{"class":313},[254,133038,51633],{"class":260},[254,133040,132521],{"class":264},[254,133042,132524],{"class":323},[254,133044,133045,133047,133049,133051,133053,133055],{"class":256,"line":1334},[254,133046,132529],{"class":313},[254,133048,51578],{"class":264},[254,133050,964],{"class":313},[254,133052,51633],{"class":260},[254,133054,132538],{"class":264},[254,133056,132541],{"class":323},[254,133058,133059],{"class":256,"line":1340},[254,133060,1705],{"class":264},[1271,133062,133063],{},[24,133064,133065,133066,133068,133069,133071,133072,133074,133075,133078,133079,133081],{},"粘性定位的特点：",[53857,133067],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[53857,133070],{},"  ②粘性定位占有原先的位置（相对定位特点）",[53857,133073],{},"  ③必须添加 top 、left、right、bottom ",[414,133076,133077],{},"其中一个"," 才有效",[53857,133080],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[245,133083,133084],{"className":126692,"code":132485,"language":126694,"meta":174,"style":174},[251,133085,133086,133092,133104,133118,133132],{"__ignoreMap":174},[254,133087,133088,133090],{"class":256,"line":257},[254,133089,130540],{"class":2103},[254,133091,15713],{"class":264},[254,133093,133094,133096,133098,133100,133102],{"class":256,"line":175},[254,133095,132498],{"class":313},[254,133097,51578],{"class":264},[254,133099,54905],{"class":313},[254,133101,130555],{"class":264},[254,133103,132507],{"class":323},[254,133105,133106,133108,133110,133112,133114,133116],{"class":256,"line":1319},[254,133107,132512],{"class":313},[254,133109,51578],{"class":264},[254,133111,710],{"class":313},[254,133113,51633],{"class":260},[254,133115,132521],{"class":264},[254,133117,132524],{"class":323},[254,133119,133120,133122,133124,133126,133128,133130],{"class":256,"line":1334},[254,133121,132529],{"class":313},[254,133123,51578],{"class":264},[254,133125,964],{"class":313},[254,133127,51633],{"class":260},[254,133129,132538],{"class":264},[254,133131,132541],{"class":323},[254,133133,133134],{"class":256,"line":1340},[254,133135,1705],{"class":264},[1602,133137],{"style":126548,"src":133138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[14,133140,133141],{},"(6)总结",[402,133143,133144,133159],{},[405,133145,133146],{},[408,133147,133148,133150,133153,133156],{},[411,133149,132482],{"align":23877},[411,133151,133152],{"align":23877},"是否脱标",[411,133154,133155],{"align":23877},"移动位置",[411,133157,133158],{"align":23877},"是否常用",[449,133160,133161,133174,133188,133202,133215],{},[408,133162,133163,133166,133168,133171],{},[454,133164,133165],{"align":23877},"Static 静态定位",[454,133167,104819],{"align":23877},[454,133169,133170],{"align":23877},"不能使用边偏移",[454,133172,133173],{"align":23877},"很少",[408,133175,133176,133179,133182,133185],{},[454,133177,133178],{"align":23877},"Relative 相对定位",[454,133180,133181],{"align":23877},"否(占有位置)",[454,133183,133184],{"align":23877},"相对于自身位置移动",[454,133186,133187],{"align":23877},"基本单独使用",[408,133189,133190,133193,133196,133199],{},[454,133191,133192],{"align":23877},"Absolute 绝对定位",[454,133194,133195],{"align":23877},"是(不占有位置)",[454,133197,133198],{"align":23877},"带有定位的父级",[454,133200,133201],{"align":23877},"要和定位父级元素搭配使用",[408,133203,133204,133207,133209,133212],{},[454,133205,133206],{"align":23877},"Fixed 固定定位",[454,133208,133195],{"align":23877},[454,133210,133211],{"align":23877},"浏览器可视区",[454,133213,133214],{"align":23877},"单独使用,不需要父级",[408,133216,133217,133220,133222,133224],{},[454,133218,133219],{"align":23877},"Sticky 粘性定位",[454,133221,133181],{"align":23877},[454,133223,133211],{"align":23877},[454,133225,133226],{"align":23877},"当前阶段少",[21,133228,133229],{"start":175},[24,133230,133231,133234],{},[414,133232,133233],{},"边偏移"," 则决定了该元素的最终位置",[402,133236,133237,133248],{},[405,133238,133239],{},[408,133240,133241,133244,133246],{},[411,133242,133243],{"align":23877},"边偏移属性",[411,133245,27633],{"align":23877},[411,133247,27630],{"align":23877},[449,133249,133250,133261,133272,133282],{},[408,133251,133252,133255,133258],{},[454,133253,133254],{"align":23877},"top",[454,133256,133257],{"align":23877},"top: 80px;",[454,133259,133260],{"align":23877},"顶端偏移量，定义元素相对于父元素上边线的距离",[408,133262,133263,133266,133269],{},[454,133264,133265],{"align":23877},"bottom",[454,133267,133268],{"align":23877},"bottom: 80px ;",[454,133270,133271],{"align":23877},"底部偏移量，定义元素相对于其父元素下边线的距离",[408,133273,133274,133276,133279],{},[454,133275,23877],{"align":23877},[454,133277,133278],{"align":23877},"left: 80px ;",[454,133280,133281],{"align":23877},"左侧偏移量，定义元素相对于其父元素左边线的距离",[408,133283,133284,133286,133289],{},[454,133285,72663],{"align":23877},[454,133287,133288],{"align":23877},"right: 80px ;",[454,133290,133291],{"align":23877},"右侧偏移量，定义元素相对于其父元素右边线的距离",[1271,133293,133294],{},[24,133295,9166,133296,133298,133299,133301,133302,133304,133305,133308,133309,133311,133312,133314],{},[53857,133297],{},"  ① ",[414,133300,133233],{}," 需要和 ",[414,133303,132482],{}," 联合使用， ",[414,133306,133307],{},"单独使用无效"," ；",[53857,133310],{},"  ②top和bottom不要同时使用",[53857,133313],{},"  ③left和right不要同时使用",[22139,133316,133318],{"id":133317},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[14,133320,133321],{},"子级是绝对定位的话，父级要用相对定位",[1271,133323,133324,133327,133330,133333],{},[24,133325,133326],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[24,133328,133329],{},"父盒子需要加定位限制子盒子在父盒子内显示",[24,133331,133332],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[24,133334,133335,133336,133339],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[414,133337,133338],{},"子绝父绝"," 也会遇到",[22139,133341,133343],{"id":133342},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[1271,133345,133346,133361],{},[24,133347,133348,133349,133352,133353,133356,133357,133360],{},"在使用 ",[414,133350,133351],{},"定位"," 布局时，可能会 ",[414,133354,133355],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[414,133358,133359],{},"z-index"," 来控制盒子的前后次序 (z轴)",[24,133362,5322],{},[245,133364,133365],{"className":126692,"code":132485,"language":126694,"meta":174,"style":174},[251,133366,133367,133373,133385,133399,133413],{"__ignoreMap":174},[254,133368,133369,133371],{"class":256,"line":257},[254,133370,130540],{"class":2103},[254,133372,15713],{"class":264},[254,133374,133375,133377,133379,133381,133383],{"class":256,"line":175},[254,133376,132498],{"class":313},[254,133378,51578],{"class":264},[254,133380,54905],{"class":313},[254,133382,130555],{"class":264},[254,133384,132507],{"class":323},[254,133386,133387,133389,133391,133393,133395,133397],{"class":256,"line":1319},[254,133388,132512],{"class":313},[254,133390,51578],{"class":264},[254,133392,710],{"class":313},[254,133394,51633],{"class":260},[254,133396,132521],{"class":264},[254,133398,132524],{"class":323},[254,133400,133401,133403,133405,133407,133409,133411],{"class":256,"line":1334},[254,133402,132529],{"class":313},[254,133404,51578],{"class":264},[254,133406,964],{"class":313},[254,133408,51633],{"class":260},[254,133410,132538],{"class":264},[254,133412,132541],{"class":323},[254,133414,133415],{"class":256,"line":1340},[254,133416,1705],{"class":264},[1271,133418,133419],{},[24,133420,133421,133422,133298,133424,133426,133427,127855,133430,82680,133433,133435,133436,133438,133439,133442,133443,133308,133446,133448,133449,133452,133454],{},"z-index的特性",[53857,133423],{},[414,133425,127156],{}," ： ",[414,133428,133429],{},"正整数",[414,133431,133432],{},"负整数",[414,133434,456],{}," ，默认值是 0，数值越大，盒子越靠上；",[53857,133437],{},"  ②如果 ",[414,133440,133441],{},"属性值相同"," ，则按照书写顺序， ",[414,133444,133445],{},"后来居上",[53857,133447],{},"  ③数字后面 ",[414,133450,133451],{},"不能加单位",[53857,133453],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[22139,133456,133458],{"id":133457},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[14,133460,133461],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[14,133463,133464],{},"方法:",[1271,133466,133467,133477],{},[24,133468,133469,133470,133473,133474],{},"left: 50%; 让 ",[414,133471,133472],{},"盒子的左侧"," 移动到 ",[414,133475,133476],{},"父级元素的水平中心位置",[24,133478,133479,133480,133483,133484],{},"margin-left: -100px; 让盒子 ",[414,133481,133482],{},"向左"," 移动 ",[414,133485,133486],{},"自身宽度的一半",[22139,133488,133490],{"id":133489},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[21,133492,133493,133496],{},[24,133494,133495],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[24,133497,133498],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[14,133500,133501],{},"也就是说绝对定位和固定定位和浮动类似",[21,133503,133504],{"start":1319},[24,133505,133506],{},"display 是显示模式， 可以改变显示模式有以下方式:",[1271,133508,133509,133512,133515],{},[24,133510,133511],{},"可以用inline-block 转换为行内块",[24,133513,133514],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[24,133516,133517],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[14,133519,133520],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[22139,133522,133524],{"id":133523},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[21,133526,133527,133530,133533,133536],{},[24,133528,133529],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[24,133531,133532],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[24,133534,133535],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[24,133537,133538],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[245,133540,133541],{"className":126692,"code":131158,"language":126694,"meta":174,"style":174},[251,133542,133543,133549,133559,133563,133569,133579],{"__ignoreMap":174},[254,133544,133545,133547],{"class":256,"line":257},[254,133546,131165],{"class":2103},[254,133548,15713],{"class":264},[254,133550,133551,133553,133555,133557],{"class":256,"line":175},[254,133552,131172],{"class":313},[254,133554,51578],{"class":264},[254,133556,23877],{"class":313},[254,133558,1430],{"class":264},[254,133560,133561],{"class":256,"line":1319},[254,133562,1705],{"class":264},[254,133564,133565,133567],{"class":256,"line":1334},[254,133566,131187],{"class":2103},[254,133568,15713],{"class":264},[254,133570,133571,133573,133575,133577],{"class":256,"line":1340},[254,133572,131172],{"class":313},[254,133574,51578],{"class":264},[254,133576,72663],{"class":313},[254,133578,1430],{"class":264},[254,133580,133581],{"class":256,"line":1354},[254,133582,1705],{"class":264},[1602,133584],{"style":126548,"src":133585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[22139,133587,133589],{"id":133588},"_11138-轮播图","11.1.3.8 轮播图",[1602,133591],{"style":126548,"src":133592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[21,133594,133595],{},[24,133596,133597],{},"制作顺序:",[1271,133599,133600,133603,133606,133615],{},[24,133601,133602],{},"大盒子我们类名为： tb-promo 淘宝广告",[24,133604,133605],{},"里面先放一张图片",[24,133607,133608,133609,133611,133612,133614],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[53857,133610],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[53857,133613],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[24,133616,133617,133618,133620,133621,133623],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[53857,133619],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[53857,133622],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[21,133625,133626],{"start":175},[24,133627,133628],{},"代码模块",[245,133630,133632],{"className":126692,"code":133631,"language":126694,"meta":174,"style":174},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n.son {\n  position: absolute;\n  top: 0;\n  left: 0;\n}\n\u002F* 父元素需要加 relative（子绝父相） *\u002F\n.father {\n  position: relative;\n}\n",[251,133633,133634,133639,133646,133656,133666,133676,133680,133685,133692,133702],{"__ignoreMap":174},[254,133635,133636],{"class":256,"line":257},[254,133637,133638],{"class":323},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[254,133640,133641,133644],{"class":256,"line":175},[254,133642,133643],{"class":2103},".son",[254,133645,15713],{"class":264},[254,133647,133648,133650,133652,133654],{"class":256,"line":1319},[254,133649,132498],{"class":313},[254,133651,51578],{"class":264},[254,133653,54972],{"class":313},[254,133655,1430],{"class":264},[254,133657,133658,133660,133662,133664],{"class":256,"line":1334},[254,133659,132512],{"class":313},[254,133661,51578],{"class":264},[254,133663,456],{"class":313},[254,133665,1430],{"class":264},[254,133667,133668,133670,133672,133674],{"class":256,"line":1340},[254,133669,132529],{"class":313},[254,133671,51578],{"class":264},[254,133673,456],{"class":313},[254,133675,1430],{"class":264},[254,133677,133678],{"class":256,"line":1354},[254,133679,1705],{"class":264},[254,133681,133682],{"class":256,"line":1360},[254,133683,133684],{"class":323},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[254,133686,133687,133690],{"class":256,"line":1451},[254,133688,133689],{"class":2103},".father",[254,133691,15713],{"class":264},[254,133693,133694,133696,133698,133700],{"class":256,"line":1457},[254,133695,132498],{"class":313},[254,133697,51578],{"class":264},[254,133699,54905],{"class":313},[254,133701,1430],{"class":264},[254,133703,133704],{"class":256,"line":1469},[254,133705,1705],{"class":264},[14,133707,133708],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[225,133710,133712],{"id":133711},"_1114-定位数值的移动","11.1.4 定位数值的移动",[1602,133714],{"style":126548,"src":133715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[14,133717,133718],{},"✨ 黄金口诀：",[14,133720,133721],{},"\"TOP正下负上，LEFT正右负左\"",[14,133723,133724],{},"\"RIGHT正左负右，BOTTOM正上负下",[14,133726,133727],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[14,133729,133730],{},"✨ 简单记：",[14,133732,133733],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[5267,133735,133736],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":174,"searchDepth":175,"depth":175,"links":133738},[133739],{"id":132266,"depth":175,"text":132267,"children":133740},[133741,133742,133743,133744],{"id":132270,"depth":1319,"text":132271},{"id":132285,"depth":1319,"text":132286},{"id":132453,"depth":1319,"text":132454},{"id":133711,"depth":1319,"text":133712},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132258,"description":23518},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":133751,"title":133752,"body":133753,"description":23518,"extension":181,"meta":135176,"navigation":184,"path":135177,"seo":135178,"stem":135179,"__hash__":135180},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":133754,"toc":135155},[133755,133758,133762,133770,133774,133779,133787,133799,133803,133808,133816,133827,133831,133836,133877,133885,133889,133892,133895,133898,133992,133995,134089,134092,134186,134189,134192,134227,134230,134233,134263,134266,134269,134272,134275,134278,134281,134284,134354,134357,134361,134365,134406,134410,134416,134419,134422,134426,134429,134432,134435,134516,134519,134522,134526,134530,134533,134536,134539,134542,134545,134551,134560,134564,134583,134587,134597,134600,134603,134606,134609,134612,134615,134618,134621,134630,134634,134643,134646,134651,134704,134709,134875,134878,134881,134886,134889,134892,134895,134898,134903,135051,135054,135057,135062,135065,135070,135104,135107,135110,135114,135117,135124,135127,135130,135133,135136,135139,135142,135145,135149,135152],[10,133756,133752],{"id":133757},"_12-显示隐藏与图形资源",[34,133759,133761],{"id":133760},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[1271,133763,133764,133767],{},[24,133765,133766],{},"目的:让一个元素在页面中消失或者显示出来",[24,133768,133769],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[225,133771,133773],{"id":133772},"_1211-display-显示","12.1.1 display 显示",[21,133775,133776],{},[24,133777,133778],{},"display 设置或检索对象是否及如何显示",[1271,133780,133781,133784],{},[24,133782,133783],{},"display: none;隐藏对象",[24,133785,133786],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[21,133788,133789,133796],{"start":175},[24,133790,133791,133792,133795],{},"特点： display 隐藏元素后， ",[414,133793,133794],{},"不再占"," 有原来的位置",[24,133797,133798],{},"在js中使用非常的广泛",[225,133800,133802],{"id":133801},"_1212-visibility可见性","12.1.2 visibility可见性",[21,133804,133805],{},[24,133806,133807],{},"visibility 属性用于指定一个元素应可见还是隐藏",[1271,133809,133810,133813],{},[24,133811,133812],{},"visibility： visible；元素可见",[24,133814,133815],{},"visibility：hidden；元素隐藏",[21,133817,133818,133821,133824],{"start":175},[24,133819,133820],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[24,133822,133823],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[24,133825,133826],{},"隐藏后继续占有原有位置",[225,133828,133830],{"id":133829},"_1213-overflow溢出","12.1.3 overflow溢出",[1271,133832,133833],{},[24,133834,133835],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[402,133837,133838,133846],{},[405,133839,133840],{},[408,133841,133842,133844],{},[411,133843,127156],{"align":23877},[411,133845,27630],{"align":23877},[449,133847,133848,133856,133863,133870],{},[408,133849,133850,133853],{},[454,133851,133852],{"align":23877},"visible",[454,133854,133855],{"align":23877},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[408,133857,133858,133860],{},[454,133859,61855],{"align":23877},[454,133861,133862],{"align":23877},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[408,133864,133865,133867],{},[454,133866,129112],{"align":23877},[454,133868,133869],{"align":23877},"不管超出内容否，总是显示滚动条",[408,133871,133872,133874],{},[454,133873,72804],{"align":23877},[454,133875,133876],{"align":23877},"超出自动显示滚动条，不超出不显示滚动条",[1271,133878,133879,133882],{},[24,133880,133881],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[24,133883,133884],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[225,133886,133888],{"id":133887},"_1214-案例收获","12.1.4 案例收获",[1602,133890],{"style":126548,"src":133891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[14,133893,133894],{},"问题：没做出来动态效果，使用hover没实现",[14,133896,133897],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[245,133899,133900],{"className":126692,"code":132124,"language":126694,"meta":174,"style":174},[251,133901,133902,133906,133920,133924,133938,133942,133956,133960,133974,133978],{"__ignoreMap":174},[254,133903,133904],{"class":256,"line":257},[254,133905,132131],{"class":323},[254,133907,133908,133910,133912,133914,133916,133918],{"class":256,"line":175},[254,133909,132136],{"class":2103},[254,133911,79948],{"class":264},[254,133913,129052],{"class":313},[254,133915,51578],{"class":264},[254,133917,132145],{"class":313},[254,133919,129622],{"class":264},[254,133921,133922],{"class":256,"line":1319},[254,133923,132152],{"class":323},[254,133925,133926,133928,133930,133932,133934,133936],{"class":256,"line":1334},[254,133927,132157],{"class":2103},[254,133929,79948],{"class":264},[254,133931,129052],{"class":313},[254,133933,51578],{"class":264},[254,133935,54905],{"class":313},[254,133937,129622],{"class":264},[254,133939,133940],{"class":256,"line":1340},[254,133941,132172],{"class":323},[254,133943,133944,133946,133948,133950,133952,133954],{"class":256,"line":1354},[254,133945,132177],{"class":2103},[254,133947,79948],{"class":264},[254,133949,129052],{"class":313},[254,133951,51578],{"class":264},[254,133953,54972],{"class":313},[254,133955,129622],{"class":264},[254,133957,133958],{"class":256,"line":1360},[254,133959,132192],{"class":323},[254,133961,133962,133964,133966,133968,133970,133972],{"class":256,"line":1451},[254,133963,132197],{"class":2103},[254,133965,79948],{"class":264},[254,133967,129052],{"class":313},[254,133969,51578],{"class":264},[254,133971,86374],{"class":313},[254,133973,129622],{"class":264},[254,133975,133976],{"class":256,"line":1457},[254,133977,132212],{"class":323},[254,133979,133980,133982,133984,133986,133988,133990],{"class":256,"line":1469},[254,133981,132217],{"class":2103},[254,133983,79948],{"class":264},[254,133985,129052],{"class":313},[254,133987,51578],{"class":264},[254,133989,132226],{"class":313},[254,133991,129622],{"class":264},[14,133993,133994],{},"完整代码：",[245,133996,133997],{"className":126692,"code":132124,"language":126694,"meta":174,"style":174},[251,133998,133999,134003,134017,134021,134035,134039,134053,134057,134071,134075],{"__ignoreMap":174},[254,134000,134001],{"class":256,"line":257},[254,134002,132131],{"class":323},[254,134004,134005,134007,134009,134011,134013,134015],{"class":256,"line":175},[254,134006,132136],{"class":2103},[254,134008,79948],{"class":264},[254,134010,129052],{"class":313},[254,134012,51578],{"class":264},[254,134014,132145],{"class":313},[254,134016,129622],{"class":264},[254,134018,134019],{"class":256,"line":1319},[254,134020,132152],{"class":323},[254,134022,134023,134025,134027,134029,134031,134033],{"class":256,"line":1334},[254,134024,132157],{"class":2103},[254,134026,79948],{"class":264},[254,134028,129052],{"class":313},[254,134030,51578],{"class":264},[254,134032,54905],{"class":313},[254,134034,129622],{"class":264},[254,134036,134037],{"class":256,"line":1340},[254,134038,132172],{"class":323},[254,134040,134041,134043,134045,134047,134049,134051],{"class":256,"line":1354},[254,134042,132177],{"class":2103},[254,134044,79948],{"class":264},[254,134046,129052],{"class":313},[254,134048,51578],{"class":264},[254,134050,54972],{"class":313},[254,134052,129622],{"class":264},[254,134054,134055],{"class":256,"line":1360},[254,134056,132192],{"class":323},[254,134058,134059,134061,134063,134065,134067,134069],{"class":256,"line":1451},[254,134060,132197],{"class":2103},[254,134062,79948],{"class":264},[254,134064,129052],{"class":313},[254,134066,51578],{"class":264},[254,134068,86374],{"class":313},[254,134070,129622],{"class":264},[254,134072,134073],{"class":256,"line":1457},[254,134074,132212],{"class":323},[254,134076,134077,134079,134081,134083,134085,134087],{"class":256,"line":1469},[254,134078,132217],{"class":2103},[254,134080,79948],{"class":264},[254,134082,129052],{"class":313},[254,134084,51578],{"class":264},[254,134086,132226],{"class":313},[254,134088,129622],{"class":264},[14,134090,134091],{},"分布思路重点详解：",[245,134093,134094],{"className":126692,"code":132124,"language":126694,"meta":174,"style":174},[251,134095,134096,134100,134114,134118,134132,134136,134150,134154,134168,134172],{"__ignoreMap":174},[254,134097,134098],{"class":256,"line":257},[254,134099,132131],{"class":323},[254,134101,134102,134104,134106,134108,134110,134112],{"class":256,"line":175},[254,134103,132136],{"class":2103},[254,134105,79948],{"class":264},[254,134107,129052],{"class":313},[254,134109,51578],{"class":264},[254,134111,132145],{"class":313},[254,134113,129622],{"class":264},[254,134115,134116],{"class":256,"line":1319},[254,134117,132152],{"class":323},[254,134119,134120,134122,134124,134126,134128,134130],{"class":256,"line":1334},[254,134121,132157],{"class":2103},[254,134123,79948],{"class":264},[254,134125,129052],{"class":313},[254,134127,51578],{"class":264},[254,134129,54905],{"class":313},[254,134131,129622],{"class":264},[254,134133,134134],{"class":256,"line":1340},[254,134135,132172],{"class":323},[254,134137,134138,134140,134142,134144,134146,134148],{"class":256,"line":1354},[254,134139,132177],{"class":2103},[254,134141,79948],{"class":264},[254,134143,129052],{"class":313},[254,134145,51578],{"class":264},[254,134147,54972],{"class":313},[254,134149,129622],{"class":264},[254,134151,134152],{"class":256,"line":1360},[254,134153,132192],{"class":323},[254,134155,134156,134158,134160,134162,134164,134166],{"class":256,"line":1451},[254,134157,132197],{"class":2103},[254,134159,79948],{"class":264},[254,134161,129052],{"class":313},[254,134163,51578],{"class":264},[254,134165,86374],{"class":313},[254,134167,129622],{"class":264},[254,134169,134170],{"class":256,"line":1457},[254,134171,132212],{"class":323},[254,134173,134174,134176,134178,134180,134182,134184],{"class":256,"line":1469},[254,134175,132217],{"class":2103},[254,134177,79948],{"class":264},[254,134179,129052],{"class":313},[254,134181,51578],{"class":264},[254,134183,132226],{"class":313},[254,134185,129622],{"class":264},[1602,134187],{"style":126548,"src":134188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[14,134190,134191],{},"图片太大，盒子太小，此时需要修改图片的大小",[245,134193,134195],{"className":127439,"code":134194,"language":127441,"meta":174,"style":174},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[251,134196,134197],{"__ignoreMap":174},[254,134198,134199,134201,134203,134205,134207,134210,134212,134214,134217,134220,134222,134225],{"class":256,"line":257},[254,134200,1174],{"class":264},[254,134202,1602],{"class":51441},[254,134204,55380],{"class":2103},[254,134206,310],{"class":264},[254,134208,134209],{"class":369},"\"images\u002Fpic.jpg\"",[254,134211,55388],{"class":2103},[254,134213,310],{"class":264},[254,134215,134216],{"class":369},"\"描述文字\"",[254,134218,134219],{"class":2103}," title",[254,134221,310],{"class":264},[254,134223,134224],{"class":369},"\"悬停提示\"",[254,134226,51448],{"class":264},[1602,134228],{"style":126548,"src":134229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[14,134231,134232],{},"制造遮罩层",[245,134234,134235],{"className":127439,"code":134194,"language":127441,"meta":174,"style":174},[251,134236,134237],{"__ignoreMap":174},[254,134238,134239,134241,134243,134245,134247,134249,134251,134253,134255,134257,134259,134261],{"class":256,"line":257},[254,134240,1174],{"class":264},[254,134242,1602],{"class":51441},[254,134244,55380],{"class":2103},[254,134246,310],{"class":264},[254,134248,134209],{"class":369},[254,134250,55388],{"class":2103},[254,134252,310],{"class":264},[254,134254,134216],{"class":369},[254,134256,134219],{"class":2103},[254,134258,310],{"class":264},[254,134260,134224],{"class":369},[254,134262,51448],{"class":264},[14,134264,134265],{},"此时是这样的为标准流",[1602,134267],{"style":126548,"src":134268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[14,134270,134271],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[14,134273,134274],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[14,134276,134277],{},"让他在中间，用center(background-position)",[14,134279,134280],{},"将需要变的尽可能放到一个盒子中",[14,134282,134283],{},"放大盒子上内部盒子发生变化",[245,134285,134287],{"className":126692,"code":134286,"language":126694,"meta":174,"style":174},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[251,134288,134289,134295,134305,134309,134316,134326,134338,134350],{"__ignoreMap":174},[254,134290,134291,134293],{"class":256,"line":257},[254,134292,127759],{"class":2103},[254,134294,15713],{"class":264},[254,134296,134297,134299,134301,134303],{"class":256,"line":175},[254,134298,132498],{"class":313},[254,134300,51578],{"class":264},[254,134302,54905],{"class":313},[254,134304,1430],{"class":264},[254,134306,134307],{"class":256,"line":1319},[254,134308,1705],{"class":264},[254,134310,134311,134314],{"class":256,"line":1334},[254,134312,134313],{"class":2103},".child",[254,134315,15713],{"class":264},[254,134317,134318,134320,134322,134324],{"class":256,"line":1340},[254,134319,132498],{"class":313},[254,134321,51578],{"class":264},[254,134323,54972],{"class":313},[254,134325,1430],{"class":264},[254,134327,134328,134330,134332,134334,134336],{"class":256,"line":1354},[254,134329,132512],{"class":313},[254,134331,51578],{"class":264},[254,134333,920],{"class":313},[254,134335,592],{"class":260},[254,134337,1430],{"class":264},[254,134339,134340,134342,134344,134346,134348],{"class":256,"line":1360},[254,134341,132529],{"class":313},[254,134343,51578],{"class":264},[254,134345,920],{"class":313},[254,134347,592],{"class":260},[254,134349,1430],{"class":264},[254,134351,134352],{"class":256,"line":1451},[254,134353,1705],{"class":264},[14,134355,134356],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[34,134358,134360],{"id":134359},"_122-精灵图","12.2 精灵图",[225,134362,134364],{"id":134363},"_1221-理解","12.2.1 理解",[21,134366,134367,134385],{},[24,134368,134369,134370,132598,134373,134376,134377,134380,134381,134384],{},"目的： ",[414,134371,134372],{},"为了有效地减少服务器接收和发送请求的次数",[414,134374,134375],{},"提高"," 页面的 ",[414,134378,134379],{},"加载速度"," ，出现了 ",[414,134382,134383],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[24,134386,134387,134388,134390,134391,134393,134394,134396,134397,134399,134400,134402,134403,134405],{},"使用精灵图核心：",[53857,134389],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[53857,134392],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[53857,134395],{},"  ③移动背景图片位置， 此时可以使用 background-position",[53857,134398],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[53857,134401],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[53857,134404],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[225,134407,134409],{"id":134408},"_1222-扒图","12.2.2 扒图",[245,134411,134414],{"className":134412,"code":134413,"language":5328},[5326],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[251,134415,134413],{"__ignoreMap":174},[1602,134417],{"style":126548,"src":134418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[1602,134420],{"style":126548,"src":134421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[225,134423,134425],{"id":134424},"_1223-精灵图的实现","12.2.3 精灵图的实现",[1602,134427],{"style":126548,"src":134428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[14,134430,134431],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[1602,134433],{"style":126548,"src":134434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[245,134436,134438],{"className":126692,"code":134437,"language":126694,"meta":174,"style":174},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n.icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat;\n  background-position: -10px -20px;\n}\n",[251,134439,134440,134445,134452,134464,134476,134495,134512],{"__ignoreMap":174},[254,134441,134442],{"class":256,"line":257},[254,134443,134444],{"class":323},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[254,134446,134447,134450],{"class":256,"line":175},[254,134448,134449],{"class":2103},".icon",[254,134451,15713],{"class":264},[254,134453,134454,134456,134458,134460,134462],{"class":256,"line":1319},[254,134455,70709],{"class":313},[254,134457,51578],{"class":264},[254,134459,964],{"class":313},[254,134461,51633],{"class":260},[254,134463,1430],{"class":264},[254,134465,134466,134468,134470,134472,134474],{"class":256,"line":1334},[254,134467,70929],{"class":313},[254,134469,51578],{"class":264},[254,134471,964],{"class":313},[254,134473,51633],{"class":260},[254,134475,1430],{"class":264},[254,134477,134478,134480,134482,134484,134486,134489,134491,134493],{"class":256,"line":1340},[254,134479,70752],{"class":313},[254,134481,51578],{"class":264},[254,134483,61867],{"class":313},[254,134485,265],{"class":264},[254,134487,134488],{"class":5357},"sprites.png",[254,134490,13855],{"class":264},[254,134492,61877],{"class":313},[254,134494,1430],{"class":264},[254,134496,134497,134499,134501,134503,134505,134508,134510],{"class":256,"line":1354},[254,134498,128952],{"class":313},[254,134500,51578],{"class":264},[254,134502,51904],{"class":313},[254,134504,51633],{"class":260},[254,134506,134507],{"class":313}," -20",[254,134509,51633],{"class":260},[254,134511,1430],{"class":264},[254,134513,134514],{"class":256,"line":1360},[254,134515,1705],{"class":264},[1602,134517],{"style":126548,"src":134518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[14,134520,134521],{},"在前端中坐标轴的正方向是右和下",[34,134523,134525],{"id":134524},"_123-字体图标","12.3 字体图标",[225,134527,134529],{"id":134528},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[14,134531,134532],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[14,134534,134535],{},"精灵图是有诸多优点的，但是缺点很明显。",[14,134537,134538],{},"1.图片文件还是比较大的。",[14,134540,134541],{},"2.图片本身放大和缩小会失真。",[14,134543,134544],{},"3.一旦图片制作完毕想要更换非常复杂。",[14,134546,134547,134548,25881],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[414,134549,134550],{},"字体图标 iconfont",[14,134552,134553,134556,134557,28526],{},[414,134554,134555],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[414,134558,134559],{},"展示的是图标，本质属于字体",[225,134561,134563],{"id":134562},"_1232-字体图标的优点","12.3.2 字体图标的优点",[1271,134565,134566,134571,134574,134577,134580],{},[24,134567,134568,134570],{},[414,134569,26017],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[24,134572,134573],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[24,134575,134576],{},"兼容性：几乎支持所有的浏览器，请放心使用",[24,134578,134579],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[24,134581,134582],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[225,134584,134586],{"id":134585},"_1233-字体库下载网站","12.3.3 字体库下载网站",[1271,134588,134589],{},[24,134590,134591,134592],{},"icomoon字体库：",[42,134593,134596],{"href":134594,"rel":134595},"http:\u002F\u002Ficomoon.io\u002F",[151],"http:\u002F\u002Ficomoon.io",[14,134598,134599],{},"进去之后点icomoon app",[1602,134601],{"style":126548,"src":134602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[14,134604,134605],{},"可以对其编辑：",[1602,134607],{"style":126548,"src":134608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[14,134610,134611],{},"生成字体：",[1602,134613],{"style":126548,"src":134614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[14,134616,134617],{},"下载：",[1602,134619],{"style":126548,"src":134620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[1271,134622,134623],{},[24,134624,134625,134626],{},"阿里iconfont字体库： ",[42,134627,134628],{"href":134628,"rel":134629},"http:\u002F\u002Fwww.iconfont.cn\u002F",[151],[225,134631,134633],{"id":134632},"_1234-字体图标的引入","12.3.4 字体图标的引入",[21,134635,134636],{},[24,134637,134638,134639,134642],{},"把下载包里面的 ",[414,134640,134641],{},"fonts"," 文件夹放入页面根目录下",[1602,134644],{"style":126548,"src":134645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[21,134647,134648],{"start":175},[24,134649,134650],{},"字体文件格式",[402,134652,134653,134662],{},[405,134654,134655],{},[408,134656,134657,134660],{},[411,134658,134659],{"align":23877},"格式",[411,134661,23881],{"align":23877},[449,134663,134664,134674,134684,134694],{},[408,134665,134666,134671],{},[454,134667,134668],{"align":23877},[414,134669,134670],{},".ttf",[454,134672,134673],{"align":23877},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[408,134675,134676,134681],{},[454,134677,134678],{"align":23877},[414,134679,134680],{},".woff",[454,134682,134683],{"align":23877},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[408,134685,134686,134691],{},[454,134687,134688],{"align":23877},[414,134689,134690],{},".eot",[454,134692,134693],{"align":23877},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[408,134695,134696,134701],{},[454,134697,134698],{"align":23877},[414,134699,134700],{},"svg",[454,134702,134703],{"align":23877},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[21,134705,134706],{"start":1319},[24,134707,134708],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[245,134710,134712],{"className":126692,"code":134711,"language":126694,"meta":174,"style":174},"\u002F* 引入字体图标 *\u002F\n@font-face {\n  font-family: 'icomoon';\n  src: url('fonts\u002Ficomoon.eot');\n  src: url('fonts\u002Ficomoon.eot?#iefix') format('embedded-opentype'),\n       url('fonts\u002Ficomoon.woff') format('woff'),\n       url('fonts\u002Ficomoon.ttf') format('truetype'),\n       url('fonts\u002Ficomoon.svg#icomoon') format('svg');\n}\n.icon {\n  font-family: 'icomoon';\n  font-style: normal;\n}\n",[251,134713,134714,134719,134726,134738,134754,134779,134800,134820,134840,134844,134850,134860,134871],{"__ignoreMap":174},[254,134715,134716],{"class":256,"line":257},[254,134717,134718],{"class":323},"\u002F* 引入字体图标 *\u002F\n",[254,134720,134721,134724],{"class":256,"line":175},[254,134722,134723],{"class":260},"@font-face",[254,134725,15713],{"class":264},[254,134727,134728,134731,134733,134736],{"class":256,"line":1319},[254,134729,134730],{"class":313},"  font-family",[254,134732,51578],{"class":264},[254,134734,134735],{"class":369},"'icomoon'",[254,134737,1430],{"class":264},[254,134739,134740,134743,134745,134747,134749,134752],{"class":256,"line":1334},[254,134741,134742],{"class":313},"  src",[254,134744,51578],{"class":264},[254,134746,61867],{"class":313},[254,134748,265],{"class":264},[254,134750,134751],{"class":369},"'fonts\u002Ficomoon.eot'",[254,134753,2859],{"class":264},[254,134755,134756,134758,134760,134762,134764,134767,134769,134772,134774,134777],{"class":256,"line":1340},[254,134757,134742],{"class":313},[254,134759,51578],{"class":264},[254,134761,61867],{"class":313},[254,134763,265],{"class":264},[254,134765,134766],{"class":369},"'fonts\u002Ficomoon.eot?#iefix'",[254,134768,13855],{"class":264},[254,134770,134771],{"class":313},"format",[254,134773,265],{"class":264},[254,134775,134776],{"class":369},"'embedded-opentype'",[254,134778,38188],{"class":264},[254,134780,134781,134784,134786,134789,134791,134793,134795,134798],{"class":256,"line":1354},[254,134782,134783],{"class":313},"       url",[254,134785,265],{"class":264},[254,134787,134788],{"class":369},"'fonts\u002Ficomoon.woff'",[254,134790,13855],{"class":264},[254,134792,134771],{"class":313},[254,134794,265],{"class":264},[254,134796,134797],{"class":369},"'woff'",[254,134799,38188],{"class":264},[254,134801,134802,134804,134806,134809,134811,134813,134815,134818],{"class":256,"line":1360},[254,134803,134783],{"class":313},[254,134805,265],{"class":264},[254,134807,134808],{"class":369},"'fonts\u002Ficomoon.ttf'",[254,134810,13855],{"class":264},[254,134812,134771],{"class":313},[254,134814,265],{"class":264},[254,134816,134817],{"class":369},"'truetype'",[254,134819,38188],{"class":264},[254,134821,134822,134824,134826,134829,134831,134833,134835,134838],{"class":256,"line":1451},[254,134823,134783],{"class":313},[254,134825,265],{"class":264},[254,134827,134828],{"class":369},"'fonts\u002Ficomoon.svg#icomoon'",[254,134830,13855],{"class":264},[254,134832,134771],{"class":313},[254,134834,265],{"class":264},[254,134836,134837],{"class":369},"'svg'",[254,134839,2859],{"class":264},[254,134841,134842],{"class":256,"line":1457},[254,134843,1705],{"class":264},[254,134845,134846,134848],{"class":256,"line":1469},[254,134847,134449],{"class":2103},[254,134849,15713],{"class":264},[254,134851,134852,134854,134856,134858],{"class":256,"line":1752},[254,134853,134730],{"class":313},[254,134855,51578],{"class":264},[254,134857,134735],{"class":369},[254,134859,1430],{"class":264},[254,134861,134862,134865,134867,134869],{"class":256,"line":1757},[254,134863,134864],{"class":313},"  font-style",[254,134866,51578],{"class":264},[254,134868,63982],{"class":313},[254,134870,1430],{"class":264},[254,134872,134873],{"class":256,"line":1763},[254,134874,1705],{"class":264},[14,134876,134877],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[1602,134879],{"style":126548,"src":134880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[21,134882,134883],{"start":1334},[24,134884,134885],{},"添加字体",[1602,134887],{"style":126548,"src":134888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[14,134890,134891],{},"复制：",[1602,134893],{"style":126548,"src":134894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[14,134896,134897],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[21,134899,134900],{"start":1340},[24,134901,134902],{},"代码展示：",[245,134904,134905],{"className":126692,"code":134711,"language":126694,"meta":174,"style":174},[251,134906,134907,134911,134917,134927,134941,134963,134981,134999,135017,135021,135027,135037,135047],{"__ignoreMap":174},[254,134908,134909],{"class":256,"line":257},[254,134910,134718],{"class":323},[254,134912,134913,134915],{"class":256,"line":175},[254,134914,134723],{"class":260},[254,134916,15713],{"class":264},[254,134918,134919,134921,134923,134925],{"class":256,"line":1319},[254,134920,134730],{"class":313},[254,134922,51578],{"class":264},[254,134924,134735],{"class":369},[254,134926,1430],{"class":264},[254,134928,134929,134931,134933,134935,134937,134939],{"class":256,"line":1334},[254,134930,134742],{"class":313},[254,134932,51578],{"class":264},[254,134934,61867],{"class":313},[254,134936,265],{"class":264},[254,134938,134751],{"class":369},[254,134940,2859],{"class":264},[254,134942,134943,134945,134947,134949,134951,134953,134955,134957,134959,134961],{"class":256,"line":1340},[254,134944,134742],{"class":313},[254,134946,51578],{"class":264},[254,134948,61867],{"class":313},[254,134950,265],{"class":264},[254,134952,134766],{"class":369},[254,134954,13855],{"class":264},[254,134956,134771],{"class":313},[254,134958,265],{"class":264},[254,134960,134776],{"class":369},[254,134962,38188],{"class":264},[254,134964,134965,134967,134969,134971,134973,134975,134977,134979],{"class":256,"line":1354},[254,134966,134783],{"class":313},[254,134968,265],{"class":264},[254,134970,134788],{"class":369},[254,134972,13855],{"class":264},[254,134974,134771],{"class":313},[254,134976,265],{"class":264},[254,134978,134797],{"class":369},[254,134980,38188],{"class":264},[254,134982,134983,134985,134987,134989,134991,134993,134995,134997],{"class":256,"line":1360},[254,134984,134783],{"class":313},[254,134986,265],{"class":264},[254,134988,134808],{"class":369},[254,134990,13855],{"class":264},[254,134992,134771],{"class":313},[254,134994,265],{"class":264},[254,134996,134817],{"class":369},[254,134998,38188],{"class":264},[254,135000,135001,135003,135005,135007,135009,135011,135013,135015],{"class":256,"line":1451},[254,135002,134783],{"class":313},[254,135004,265],{"class":264},[254,135006,134828],{"class":369},[254,135008,13855],{"class":264},[254,135010,134771],{"class":313},[254,135012,265],{"class":264},[254,135014,134837],{"class":369},[254,135016,2859],{"class":264},[254,135018,135019],{"class":256,"line":1457},[254,135020,1705],{"class":264},[254,135022,135023,135025],{"class":256,"line":1469},[254,135024,134449],{"class":2103},[254,135026,15713],{"class":264},[254,135028,135029,135031,135033,135035],{"class":256,"line":1752},[254,135030,134730],{"class":313},[254,135032,51578],{"class":264},[254,135034,134735],{"class":369},[254,135036,1430],{"class":264},[254,135038,135039,135041,135043,135045],{"class":256,"line":1757},[254,135040,134864],{"class":313},[254,135042,51578],{"class":264},[254,135044,63982],{"class":313},[254,135046,1430],{"class":264},[254,135048,135049],{"class":256,"line":1763},[254,135050,1705],{"class":264},[1602,135052],{"style":126548,"src":135053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[14,135055,135056],{},"更加细节展示：",[21,135058,135059],{},[24,135060,135061],{},"html 标签内添加小图标",[1602,135063],{"style":126548,"src":135064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[21,135066,135067],{"start":175},[24,135068,135069],{},"给标签定义字体",[245,135071,135072],{"className":127439,"code":130796,"language":127441,"meta":174,"style":174},[251,135073,135074,135078,135092,135096],{"__ignoreMap":174},[254,135075,135076],{"class":256,"line":257},[254,135077,130803],{"class":323},[254,135079,135080,135082,135084,135086,135088,135090],{"class":256,"line":175},[254,135081,1174],{"class":264},[254,135083,51752],{"class":51441},[254,135085,53627],{"class":2103},[254,135087,310],{"class":264},[254,135089,130816],{"class":369},[254,135091,51448],{"class":264},[254,135093,135094],{"class":256,"line":1319},[254,135095,130823],{"class":264},[254,135097,135098,135100,135102],{"class":256,"line":1334},[254,135099,51926],{"class":264},[254,135101,51752],{"class":51441},[254,135103,51448],{"class":264},[14,135105,135106],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[1602,135108],{"style":126548,"src":135109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[225,135111,135113],{"id":135112},"_1235-字体图标的追加","12.3.5 字体图标的追加",[14,135115,135116],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[14,135118,135119,135120,135123],{},"把压缩包里面的 ",[414,135121,135122],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[14,135125,135126],{},"打开网站，点下方：",[1602,135128],{"style":126548,"src":135129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[1602,135131],{"style":126548,"src":135132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[1602,135134],{"style":126548,"src":135135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[14,135137,135138],{},"点yes重新加载",[14,135140,135141],{},"然后重复之前的操作就可以实现了",[14,135143,135144],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[225,135146,135148],{"id":135147},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[1602,135150],{"style":126548,"src":135151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[5267,135153,135154],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":174,"searchDepth":175,"depth":175,"links":135156},[135157,135163,135168],{"id":133760,"depth":175,"text":133761,"children":135158},[135159,135160,135161,135162],{"id":133772,"depth":1319,"text":133773},{"id":133801,"depth":1319,"text":133802},{"id":133829,"depth":1319,"text":133830},{"id":133887,"depth":1319,"text":133888},{"id":134359,"depth":175,"text":134360,"children":135164},[135165,135166,135167],{"id":134363,"depth":1319,"text":134364},{"id":134408,"depth":1319,"text":134409},{"id":134424,"depth":1319,"text":134425},{"id":134524,"depth":175,"text":134525,"children":135169},[135170,135171,135172,135173,135174,135175],{"id":134528,"depth":1319,"text":134529},{"id":134562,"depth":1319,"text":134563},{"id":134585,"depth":1319,"text":134586},{"id":134632,"depth":1319,"text":134633},{"id":135112,"depth":1319,"text":135113},{"id":135147,"depth":1319,"text":135148},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":133752,"description":23518},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135182,"title":135183,"body":135184,"description":23518,"extension":181,"meta":136411,"navigation":184,"path":136412,"seo":136413,"stem":136414,"__hash__":136415},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135185,"toc":136392},[135186,135189,135193,135196,135210,135278,135308,135311,135315,135319,135421,135468,135472,135475,135478,135512,135515,135518,135521,135524,135527,135530,135533,135535,135538,135541,135544,135547,135550,135553,135556,135584,135587,135591,135594,135601,135604,135607,135633,135636,135640,135643,135646,135653,135657,135660,135662,135694,135697,135700,135712,135718,135721,135724,135727,135729,135733,135736,135739,135742,135787,135791,135793,135796,135803,135845,135848,135852,135857,135871,135875,135878,135881,135884,135887,135890,135924,135927,135930,135984,135987,135990,135993,135996,136048,136051,136054,136103,136107,136109,136112,136115,136118,136121,136124,136182,136185,136191,136194,136197,136229,136232,136236,136240,136243,136275,136279,136282,136326,136330,136333,136336,136339,136342,136345,136348,136351,136353,136356,136358,136361,136364,136367,136370,136375,136378,136380,136383,136386,136389],[10,135187,135183],{"id":135188},"_13-界面样式与布局技巧",[34,135190,135192],{"id":135191},"_131-css三角","13.1 css三角",[14,135194,135195],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[1271,135197,135198,135201,135204,135207],{},[24,135199,135200],{},"用css 边框可以模拟三角效果",[24,135202,135203],{},"宽度高度为0",[24,135205,135206],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[24,135208,135209],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[245,135211,135213],{"className":126692,"code":135212,"language":126694,"meta":174,"style":174},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[251,135214,135215,135220,135227,135237,135247,135263,135274],{"__ignoreMap":174},[254,135216,135217],{"class":256,"line":257},[254,135218,135219],{"class":323},"\u002F* CSS 实现三角形 *\u002F\n",[254,135221,135222,135225],{"class":256,"line":175},[254,135223,135224],{"class":2103},".triangle",[254,135226,15713],{"class":264},[254,135228,135229,135231,135233,135235],{"class":256,"line":1319},[254,135230,70709],{"class":313},[254,135232,51578],{"class":264},[254,135234,456],{"class":313},[254,135236,1430],{"class":264},[254,135238,135239,135241,135243,135245],{"class":256,"line":1334},[254,135240,70929],{"class":313},[254,135242,51578],{"class":264},[254,135244,456],{"class":313},[254,135246,1430],{"class":264},[254,135248,135249,135251,135253,135255,135257,135259,135261],{"class":256,"line":1340},[254,135250,71037],{"class":313},[254,135252,51578],{"class":264},[254,135254,710],{"class":313},[254,135256,51633],{"class":260},[254,135258,51662],{"class":313},[254,135260,64132],{"class":313},[254,135262,1430],{"class":264},[254,135264,135265,135268,135270,135272],{"class":256,"line":1354},[254,135266,135267],{"class":313},"  border-bottom-color",[254,135269,51578],{"class":264},[254,135271,62510],{"class":313},[254,135273,1430],{"class":264},[254,135275,135276],{"class":256,"line":1360},[254,135277,1705],{"class":264},[245,135279,135280],{"className":126692,"code":130849,"language":126694,"meta":174,"style":174},[251,135281,135282,135288,135304],{"__ignoreMap":174},[254,135283,135284,135286],{"class":256,"line":257},[254,135285,51752],{"class":51441},[254,135287,15713],{"class":264},[254,135289,135290,135292,135294,135296,135298,135300,135302],{"class":256,"line":175},[254,135291,71037],{"class":313},[254,135293,51578],{"class":264},[254,135295,482],{"class":313},[254,135297,51633],{"class":260},[254,135299,51662],{"class":313},[254,135301,130084],{"class":313},[254,135303,1430],{"class":264},[254,135305,135306],{"class":256,"line":1319},[254,135307,1705],{"class":264},[1602,135309],{"style":126548,"src":135310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[34,135312,135314],{"id":135313},"_132-css用户界面样式","13.2 css用户界面样式",[225,135316,135318],{"id":135317},"_1321-鼠标样式","13.2.1 鼠标样式",[245,135320,135322],{"className":126692,"code":135321,"language":126694,"meta":174,"style":174},"\u002F* 鼠标样式 *\u002F\ndiv { cursor: pointer; }   \u002F* 手型 *\u002F\ndiv { cursor: default; }   \u002F* 默认 *\u002F\ndiv { cursor: move; }      \u002F* 移动 *\u002F\ndiv { cursor: text; }      \u002F* 文本 *\u002F\ndiv { cursor: not-allowed; } \u002F* 禁止 *\u002F\n",[251,135323,135324,135329,135348,135366,135385,135402],{"__ignoreMap":174},[254,135325,135326],{"class":256,"line":257},[254,135327,135328],{"class":323},"\u002F* 鼠标样式 *\u002F\n",[254,135330,135331,135333,135335,135338,135340,135342,135345],{"class":256,"line":175},[254,135332,51752],{"class":51441},[254,135334,79948],{"class":264},[254,135336,135337],{"class":313},"cursor",[254,135339,51578],{"class":264},[254,135341,62171],{"class":313},[254,135343,135344],{"class":264},"; }   ",[254,135346,135347],{"class":323},"\u002F* 手型 *\u002F\n",[254,135349,135350,135352,135354,135356,135358,135361,135363],{"class":256,"line":1319},[254,135351,51752],{"class":51441},[254,135353,79948],{"class":264},[254,135355,135337],{"class":313},[254,135357,51578],{"class":264},[254,135359,135360],{"class":313},"default",[254,135362,135344],{"class":264},[254,135364,135365],{"class":323},"\u002F* 默认 *\u002F\n",[254,135367,135368,135370,135372,135374,135376,135379,135382],{"class":256,"line":1334},[254,135369,51752],{"class":51441},[254,135371,79948],{"class":264},[254,135373,135337],{"class":313},[254,135375,51578],{"class":264},[254,135377,135378],{"class":313},"move",[254,135380,135381],{"class":264},"; }      ",[254,135383,135384],{"class":323},"\u002F* 移动 *\u002F\n",[254,135386,135387,135389,135391,135393,135395,135397,135399],{"class":256,"line":1340},[254,135388,51752],{"class":51441},[254,135390,79948],{"class":264},[254,135392,135337],{"class":313},[254,135394,51578],{"class":264},[254,135396,5328],{"class":313},[254,135398,135381],{"class":264},[254,135400,135401],{"class":323},"\u002F* 文本 *\u002F\n",[254,135403,135404,135406,135408,135410,135412,135415,135418],{"class":256,"line":1354},[254,135405,51752],{"class":51441},[254,135407,79948],{"class":264},[254,135409,135337],{"class":313},[254,135411,51578],{"class":264},[254,135413,135414],{"class":313},"not-allowed",[254,135416,135417],{"class":264},"; } ",[254,135419,135420],{"class":323},"\u002F* 禁止 *\u002F\n",[402,135422,135423,135431],{},[405,135424,135425],{},[408,135426,135427,135429],{},[411,135428,127156],{"align":23877},[411,135430,27630],{"align":23877},[449,135432,135433,135440,135447,135454,135461],{},[408,135434,135435,135437],{},[454,135436,135360],{"align":23877},[454,135438,135439],{"align":23877},"小白 默认",[408,135441,135442,135444],{},[454,135443,62171],{"align":23877},[454,135445,135446],{"align":23877},"小手",[408,135448,135449,135451],{},[454,135450,135378],{"align":23877},[454,135452,135453],{"align":23877},"移动",[408,135455,135456,135458],{},[454,135457,5328],{"align":23877},[454,135459,135460],{"align":23877},"文本",[408,135462,135463,135465],{},[454,135464,135414],{"align":23877},[454,135466,135467],{"align":23877},"禁止",[225,135469,135471],{"id":135470},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[14,135473,135474],{},"去除表单轮廓线",[14,135476,135477],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[245,135479,135480],{"className":126692,"code":130056,"language":126694,"meta":174,"style":174},[251,135481,135482,135486,135492,135508],{"__ignoreMap":174},[254,135483,135484],{"class":256,"line":257},[254,135485,130063],{"class":323},[254,135487,135488,135490],{"class":256,"line":175},[254,135489,51752],{"class":51441},[254,135491,15713],{"class":264},[254,135493,135494,135496,135498,135500,135502,135504,135506],{"class":256,"line":1319},[254,135495,71037],{"class":313},[254,135497,51578],{"class":264},[254,135499,482],{"class":313},[254,135501,51633],{"class":260},[254,135503,51662],{"class":313},[254,135505,130084],{"class":313},[254,135507,1430],{"class":264},[254,135509,135510],{"class":256,"line":1334},[254,135511,1705],{"class":264},[14,135513,135514],{},"文本域：",[1602,135516],{"style":126548,"src":135517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[14,135519,135520],{},"此时会有一个空白区域",[1602,135522],{"style":126548,"src":135523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[14,135525,135526],{},"写在同一行就不会出现这个问题",[1602,135528],{"style":126548,"src":135529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[14,135531,135532],{},"文本域是行内块元素，一定记住！！！",[14,135534,98374],{},[1602,135536],{"style":126548,"src":135537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[14,135539,135540],{},"文本域尽量放在一行",[14,135542,135543],{},"知识回顾：cols是列，rols是行",[1602,135545],{"style":126548,"src":135546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[14,135548,135549],{},"它可以进行拖动，显然这是我们不愿意看到的",[1602,135551],{"style":126548,"src":135552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[14,135554,135555],{},"使用resize进行解决",[245,135557,135559],{"className":126692,"code":135558,"language":126694,"meta":174,"style":174},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[251,135560,135561,135567,135580],{"__ignoreMap":174},[254,135562,135563,135565],{"class":256,"line":257},[254,135564,53962],{"class":51441},[254,135566,15713],{"class":264},[254,135568,135569,135571,135573,135575,135577],{"class":256,"line":175},[254,135570,70939],{"class":313},[254,135572,51578],{"class":264},[254,135574,54878],{"class":313},[254,135576,130555],{"class":264},[254,135578,135579],{"class":323},"\u002F* 取消表单轮廓线 *\u002F\n",[254,135581,135582],{"class":256,"line":1319},[254,135583,1705],{"class":264},[14,135585,135586],{},"此时就无法通过右下方实现拖动了",[225,135588,135590],{"id":135589},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[14,135592,135593],{},"实现一个盒子中的文字和图片对齐",[14,135595,135596,135597,135600],{},"用于设置一个元素的 ",[414,135598,135599],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[14,135602,135603],{},"图片和文字默认是基线对齐",[1602,135605],{"style":126548,"src":135606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[245,135608,135609],{"className":126692,"code":135558,"language":126694,"meta":174,"style":174},[251,135610,135611,135617,135629],{"__ignoreMap":174},[254,135612,135613,135615],{"class":256,"line":257},[254,135614,53962],{"class":51441},[254,135616,15713],{"class":264},[254,135618,135619,135621,135623,135625,135627],{"class":256,"line":175},[254,135620,70939],{"class":313},[254,135622,51578],{"class":264},[254,135624,54878],{"class":313},[254,135626,130555],{"class":264},[254,135628,135579],{"class":323},[254,135630,135631],{"class":256,"line":1319},[254,135632,1705],{"class":264},[1602,135634],{"style":126548,"src":135635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[22139,135637,135639],{"id":135638},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[14,135641,135642],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[1602,135644],{"style":126548,"src":135645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[14,135647,135648,135649,135652],{},"此时可以给图片、表单这些行内块元素的 ",[414,135650,135651],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[22139,135654,135656],{"id":135655},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[14,135658,135659],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[14,135661,14774],{},[245,135663,135665],{"className":126692,"code":135664,"language":126694,"meta":174,"style":174},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[251,135666,135667,135672,135678,135690],{"__ignoreMap":174},[254,135668,135669],{"class":256,"line":257},[254,135670,135671],{"class":323},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[254,135673,135674,135676],{"class":256,"line":175},[254,135675,1602],{"class":51441},[254,135677,15713],{"class":264},[254,135679,135680,135683,135685,135688],{"class":256,"line":1319},[254,135681,135682],{"class":313},"  vertical-align",[254,135684,51578],{"class":264},[254,135686,135687],{"class":313},"middle",[254,135689,1430],{"class":264},[254,135691,135692],{"class":256,"line":1334},[254,135693,1705],{"class":264},[1602,135695],{"style":126548,"src":135696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[14,135698,135699],{},"主要解决方法有两种：",[21,135701,135702],{},[24,135703,135704,135707,135708,135711],{},[414,135705,135706],{},"给图片"," 添加 ",[414,135709,135710],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[14,135713,135714,135715],{},"2.把图片转换为块级元素 ",[414,135716,135717],{},"display: block",[14,135719,135720],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[14,135722,135723],{},"img {",[14,135725,135726],{},"vertical-align:middle;",[14,135728,1210],{},[225,135730,135732],{"id":135731},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[14,135734,135735],{},"效果：",[1602,135737],{"style":126548,"src":135738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[14,135740,135741],{},"单行文本溢出显示省略号--必须满足三个条件：",[245,135743,135745],{"className":126692,"code":135744,"language":126694,"meta":174,"style":174},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[251,135746,135747,135752,135758,135768,135773,135783],{"__ignoreMap":174},[254,135748,135749],{"class":256,"line":257},[254,135750,135751],{"class":323},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[254,135753,135754,135756],{"class":256,"line":175},[254,135755,1602],{"class":51441},[254,135757,15713],{"class":264},[254,135759,135760,135762,135764,135766],{"class":256,"line":1319},[254,135761,135682],{"class":313},[254,135763,51578],{"class":264},[254,135765,135687],{"class":313},[254,135767,1430],{"class":264},[254,135769,135770],{"class":256,"line":1334},[254,135771,135772],{"class":323},"  \u002F* 或 *\u002F\n",[254,135774,135775,135777,135779,135781],{"class":256,"line":1340},[254,135776,128308],{"class":313},[254,135778,51578],{"class":264},[254,135780,61010],{"class":313},[254,135782,1430],{"class":264},[254,135784,135785],{"class":256,"line":1354},[254,135786,1705],{"class":264},[225,135788,135790],{"id":135789},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[14,135792,135735],{},[1602,135794],{"style":126548,"src":135795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[14,135797,135798,135799,135802],{},"多行文本溢出显示省略号， ",[414,135800,135801],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[245,135804,135805],{"className":126692,"code":135744,"language":126694,"meta":174,"style":174},[251,135806,135807,135811,135817,135827,135831,135841],{"__ignoreMap":174},[254,135808,135809],{"class":256,"line":257},[254,135810,135751],{"class":323},[254,135812,135813,135815],{"class":256,"line":175},[254,135814,1602],{"class":51441},[254,135816,15713],{"class":264},[254,135818,135819,135821,135823,135825],{"class":256,"line":1319},[254,135820,135682],{"class":313},[254,135822,51578],{"class":264},[254,135824,135687],{"class":313},[254,135826,1430],{"class":264},[254,135828,135829],{"class":256,"line":1334},[254,135830,135772],{"class":323},[254,135832,135833,135835,135837,135839],{"class":256,"line":1340},[254,135834,128308],{"class":313},[254,135836,51578],{"class":264},[254,135838,61010],{"class":313},[254,135840,1430],{"class":264},[254,135842,135843],{"class":256,"line":1354},[254,135844,1705],{"class":264},[14,135846,135847],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[34,135849,135851],{"id":135850},"_133-常见布局技巧","13.3 常见布局技巧",[14,135853,135854],{},[414,135855,135856],{},"巧妙利用一个技术更快更好的布局：",[21,135858,135859,135862,135865,135868],{},[24,135860,135861],{},"margin负值的运用",[24,135863,135864],{},"文字围绕浮动元素",[24,135866,135867],{},"行内块的巧妙运用",[24,135869,135870],{},"CSS三角强化",[225,135872,135874],{"id":135873},"_1331-margin负值的运用","13.3.1 margin负值的运用",[14,135876,135877],{},"应用场景：",[1602,135879],{"style":126548,"src":135880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[1602,135882],{"style":126548,"src":135883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[14,135885,135886],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[14,135888,135889],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[245,135891,135892],{"className":126692,"code":130056,"language":126694,"meta":174,"style":174},[251,135893,135894,135898,135904,135920],{"__ignoreMap":174},[254,135895,135896],{"class":256,"line":257},[254,135897,130063],{"class":323},[254,135899,135900,135902],{"class":256,"line":175},[254,135901,51752],{"class":51441},[254,135903,15713],{"class":264},[254,135905,135906,135908,135910,135912,135914,135916,135918],{"class":256,"line":1319},[254,135907,71037],{"class":313},[254,135909,51578],{"class":264},[254,135911,482],{"class":313},[254,135913,51633],{"class":260},[254,135915,51662],{"class":313},[254,135917,130084],{"class":313},[254,135919,1430],{"class":264},[254,135921,135922],{"class":256,"line":1334},[254,135923,1705],{"class":264},[1602,135925],{"style":126548,"src":135926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[14,135928,135929],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[245,135931,135933],{"className":126692,"code":135932,"language":126694,"meta":174,"style":174},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[251,135934,135935,135940,135946,135956,135968,135980],{"__ignoreMap":174},[254,135936,135937],{"class":256,"line":257},[254,135938,135939],{"class":323},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[254,135941,135942,135944],{"class":256,"line":175},[254,135943,130540],{"class":2103},[254,135945,15713],{"class":264},[254,135947,135948,135950,135952,135954],{"class":256,"line":1319},[254,135949,132498],{"class":313},[254,135951,51578],{"class":264},[254,135953,54905],{"class":313},[254,135955,1430],{"class":264},[254,135957,135958,135960,135962,135964,135966],{"class":256,"line":1334},[254,135959,132512],{"class":313},[254,135961,51578],{"class":264},[254,135963,710],{"class":313},[254,135965,51633],{"class":260},[254,135967,1430],{"class":264},[254,135969,135970,135972,135974,135976,135978],{"class":256,"line":1340},[254,135971,132529],{"class":313},[254,135973,51578],{"class":264},[254,135975,964],{"class":313},[254,135977,51633],{"class":260},[254,135979,1430],{"class":264},[254,135981,135982],{"class":256,"line":1354},[254,135983,1705],{"class":264},[14,135985,135986],{},"加上上述代码会发现：",[1602,135988],{"style":126548,"src":135989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[14,135991,135992],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[14,135994,135995],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[245,135997,135998],{"className":126692,"code":135932,"language":126694,"meta":174,"style":174},[251,135999,136000,136004,136010,136020,136032,136044],{"__ignoreMap":174},[254,136001,136002],{"class":256,"line":257},[254,136003,135939],{"class":323},[254,136005,136006,136008],{"class":256,"line":175},[254,136007,130540],{"class":2103},[254,136009,15713],{"class":264},[254,136011,136012,136014,136016,136018],{"class":256,"line":1319},[254,136013,132498],{"class":313},[254,136015,51578],{"class":264},[254,136017,54905],{"class":313},[254,136019,1430],{"class":264},[254,136021,136022,136024,136026,136028,136030],{"class":256,"line":1334},[254,136023,132512],{"class":313},[254,136025,51578],{"class":264},[254,136027,710],{"class":313},[254,136029,51633],{"class":260},[254,136031,1430],{"class":264},[254,136033,136034,136036,136038,136040,136042],{"class":256,"line":1340},[254,136035,132529],{"class":313},[254,136037,51578],{"class":264},[254,136039,964],{"class":313},[254,136041,51633],{"class":260},[254,136043,1430],{"class":264},[254,136045,136046],{"class":256,"line":1354},[254,136047,1705],{"class":264},[14,136049,136050],{},"解决方式2：",[14,136052,136053],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[245,136055,136057],{"className":126692,"code":136056,"language":126694,"meta":174,"style":174},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[251,136058,136059,136065,136075,136087,136099],{"__ignoreMap":174},[254,136060,136061,136063],{"class":256,"line":257},[254,136062,51752],{"class":51441},[254,136064,15713],{"class":264},[254,136066,136067,136069,136071,136073],{"class":256,"line":175},[254,136068,132498],{"class":313},[254,136070,51578],{"class":264},[254,136072,54905],{"class":313},[254,136074,1430],{"class":264},[254,136076,136077,136079,136081,136083,136085],{"class":256,"line":1319},[254,136078,132512],{"class":313},[254,136080,51578],{"class":264},[254,136082,710],{"class":313},[254,136084,51633],{"class":260},[254,136086,1430],{"class":264},[254,136088,136089,136091,136093,136095,136097],{"class":256,"line":1334},[254,136090,132529],{"class":313},[254,136092,51578],{"class":264},[254,136094,964],{"class":313},[254,136096,51633],{"class":260},[254,136098,1430],{"class":264},[254,136100,136101],{"class":256,"line":1340},[254,136102,1705],{"class":264},[225,136104,136106],{"id":136105},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[14,136108,135877],{},[1602,136110],{"style":126548,"src":136111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[14,136113,136114],{},"实现结构图：",[1602,136116],{"style":126548,"src":136117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[14,136119,136120],{},"巧妙运用浮动元素不会压住文字的特性",[14,136122,136123],{},"代码显示：",[245,136125,136127],{"className":126692,"code":136126,"language":126694,"meta":174,"style":174},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[251,136128,136129,136135,136145,136149,136154,136158,136164,136178],{"__ignoreMap":174},[254,136130,136131,136133],{"class":256,"line":257},[254,136132,130540],{"class":2103},[254,136134,15713],{"class":264},[254,136136,136137,136139,136141,136143],{"class":256,"line":175},[254,136138,131172],{"class":313},[254,136140,51578],{"class":264},[254,136142,23877],{"class":313},[254,136144,1430],{"class":264},[254,136146,136147],{"class":256,"line":1319},[254,136148,1705],{"class":264},[254,136150,136151],{"class":256,"line":1334},[254,136152,136153],{"class":264},"```Css\n",[254,136155,136156],{"class":256,"line":1340},[254,136157,130535],{"class":323},[254,136159,136160,136162],{"class":256,"line":1354},[254,136161,130540],{"class":2103},[254,136163,15713],{"class":264},[254,136165,136166,136168,136170,136172,136174,136176],{"class":256,"line":1360},[254,136167,70611],{"class":313},[254,136169,51578],{"class":264},[254,136171,456],{"class":313},[254,136173,51697],{"class":313},[254,136175,130555],{"class":264},[254,136177,130558],{"class":323},[254,136179,136180],{"class":256,"line":1451},[254,136181,1705],{"class":264},[14,136183,136184],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[245,136186,136189],{"className":136187,"code":136188,"language":5328},[5326],"\n对行内元素转换为行内块元素之后，就可以设置宽和高了\n\n\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-107.png\">\n\n此时要实现整体居中可以使用text-align:center\n\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[251,136190,136188],{"__ignoreMap":174},[1602,136192],{"style":126548,"src":136193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[14,136195,136196],{},"最终展示结果：",[245,136198,136199],{"className":126692,"code":130528,"language":126694,"meta":174,"style":174},[251,136200,136201,136205,136211,136225],{"__ignoreMap":174},[254,136202,136203],{"class":256,"line":257},[254,136204,130535],{"class":323},[254,136206,136207,136209],{"class":256,"line":175},[254,136208,130540],{"class":2103},[254,136210,15713],{"class":264},[254,136212,136213,136215,136217,136219,136221,136223],{"class":256,"line":1319},[254,136214,70611],{"class":313},[254,136216,51578],{"class":264},[254,136218,456],{"class":313},[254,136220,51697],{"class":313},[254,136222,130555],{"class":264},[254,136224,130558],{"class":323},[254,136226,136227],{"class":256,"line":1334},[254,136228,1705],{"class":264},[1602,136230],{"style":126548,"src":136231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[34,136233,136235],{"id":136234},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[225,136237,136239],{"id":136238},"_1341-原理","13.4.1 原理",[1602,136241],{"style":126548,"src":136242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[245,136244,136245],{"className":126692,"code":130528,"language":126694,"meta":174,"style":174},[251,136246,136247,136251,136257,136271],{"__ignoreMap":174},[254,136248,136249],{"class":256,"line":257},[254,136250,130535],{"class":323},[254,136252,136253,136255],{"class":256,"line":175},[254,136254,130540],{"class":2103},[254,136256,15713],{"class":264},[254,136258,136259,136261,136263,136265,136267,136269],{"class":256,"line":1319},[254,136260,70611],{"class":313},[254,136262,51578],{"class":264},[254,136264,456],{"class":313},[254,136266,51697],{"class":313},[254,136268,130555],{"class":264},[254,136270,130558],{"class":323},[254,136272,136273],{"class":256,"line":1334},[254,136274,1705],{"class":264},[225,136276,136278],{"id":136277},"_1342-实例","13.4.2 实例",[1602,136280],{"style":126548,"src":136281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[245,136283,136284],{"className":126692,"code":131158,"language":126694,"meta":174,"style":174},[251,136285,136286,136292,136302,136306,136312,136322],{"__ignoreMap":174},[254,136287,136288,136290],{"class":256,"line":257},[254,136289,131165],{"class":2103},[254,136291,15713],{"class":264},[254,136293,136294,136296,136298,136300],{"class":256,"line":175},[254,136295,131172],{"class":313},[254,136297,51578],{"class":264},[254,136299,23877],{"class":313},[254,136301,1430],{"class":264},[254,136303,136304],{"class":256,"line":1319},[254,136305,1705],{"class":264},[254,136307,136308,136310],{"class":256,"line":1334},[254,136309,131187],{"class":2103},[254,136311,15713],{"class":264},[254,136313,136314,136316,136318,136320],{"class":256,"line":1340},[254,136315,131172],{"class":313},[254,136317,51578],{"class":264},[254,136319,72663],{"class":313},[254,136321,1430],{"class":264},[254,136323,136324],{"class":256,"line":1354},[254,136325,1705],{"class":264},[34,136327,136329],{"id":136328},"_135-css的初始化","13.5 css的初始化",[14,136331,136332],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[14,136334,136335],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[14,136337,136338],{},"每个网页都必须首先进行 CSS初始化。",[14,136340,136341],{},"这里我们以 京东CSS初始化代码为例。",[14,136343,136344],{},"在网页右键查看网页源代码",[14,136346,136347],{},"找到css的link引入语句",[14,136349,136350],{},"然后ctrl+f 输入body",[14,136352,77367],{},[1602,136354],{"style":126548,"src":136355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[14,136357,77390],{},[1602,136359],{"style":126548,"src":136360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[14,136362,136363],{},"③打开了网页上传压缩的代码",[1602,136365],{"style":126548,"src":136366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[14,136368,136369],{},"④从body前可以查看这个网页的初始化代码",[14,136371,136372],{},[414,136373,136374],{},"Unicode编码字体：",[14,136376,136377],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[14,136379,83348],{},[14,136381,136382],{},"黑体 \\9ED1\\4F53",[14,136384,136385],{},"宋体 \\5B8B\\4F53",[14,136387,136388],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[5267,136390,136391],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":174,"searchDepth":175,"depth":175,"links":136393},[136394,136395,136402,136406,136410],{"id":135191,"depth":175,"text":135192},{"id":135313,"depth":175,"text":135314,"children":136396},[136397,136398,136399,136400,136401],{"id":135317,"depth":1319,"text":135318},{"id":135470,"depth":1319,"text":135471},{"id":135589,"depth":1319,"text":135590},{"id":135731,"depth":1319,"text":135732},{"id":135789,"depth":1319,"text":135790},{"id":135850,"depth":175,"text":135851,"children":136403},[136404,136405],{"id":135873,"depth":1319,"text":135874},{"id":136105,"depth":1319,"text":136106},{"id":136234,"depth":175,"text":136235,"children":136407},[136408,136409],{"id":136238,"depth":1319,"text":136239},{"id":136277,"depth":1319,"text":136278},{"id":136328,"depth":175,"text":136329},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135183,"description":23518},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136417,"title":136418,"body":136419,"description":23518,"extension":181,"meta":138105,"navigation":184,"path":138106,"seo":138107,"stem":138108,"__hash__":138109},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136420,"toc":138094},[136421,136424,136428,136432,136435,136442,136445,136448,136486,136489,136491,136505,136509,136518,136522,136527,136530,136533,136536,136571,136576,136579,136609,136612,136617,136620,136623,136653,136656,136710,136713,136717,136722,136734,136737,136741,136771,136774,136779,136782,136812,136815,136819,136836,136840,136844,136847,136880,136883,136887,136890,136893,136896,136899,136902,137013,137016,137019,137022,137124,137127,137131,137135,137139,137142,137182,137185,137187,137203,137207,137210,137215,137296,137299,137302,137428,137433,137436,137444,137447,137452,137537,137540,137544,137547,137550,137554,137574,137579,137663,137666,137671,137674,137677,137755,137758,137761,137764,137767,137770,137775,137778,137781,137853,137856,137861,137864,137961,137964,137970,137973,137976,137979,137982,137985,137988,137991,137994,137998,138003,138006,138039,138044,138047,138088,138091],[10,136422,136418],{"id":136423},"_14-html5与css3新特性",[34,136425,136427],{"id":136426},"_141-html5的新特性","14.1 HTML5的新特性",[225,136429,136431],{"id":136430},"_1411-基本标签","14.1.1 基本标签",[14,136433,136434],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[14,136436,136437,136438,136441],{},"这些新特性都有兼容性问题，基本是 ",[414,136439,136440],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[14,136443,136444],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[14,136446,136447],{},"现在使用的是新特性：",[1271,136449,136450,136456,136462,136468,136474,136480],{},[24,136451,136452,136455],{},[251,136453,136454],{},"\u003Cheader>"," 头部标签",[24,136457,136458,136461],{},[251,136459,136460],{},"\u003Cnav>"," 导航标签",[24,136463,136464,136467],{},[251,136465,136466],{},"\u003Carticle>"," 内容标签",[24,136469,136470,136473],{},[251,136471,136472],{},"\u003Csection>"," 定义文档某个区域",[24,136475,136476,136479],{},[251,136477,136478],{},"\u003Caside>"," 侧边栏标签",[24,136481,136482,136485],{},[251,136483,136484],{},"\u003Cfooter>"," 尾部标签",[1602,136487],{"style":126548,"src":136488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[14,136490,294],{},[1271,136492,136493,136496,136499,136502],{},[24,136494,136495],{},"这种语义化标准主要是针对搜索引擎的",[24,136497,136498],{},"这些标签页面中可以经常使用",[24,136500,136501],{},"在IE9中，需要把这些元素转换为块级元素",[24,136503,136504],{},"移动端更喜欢使用这些标签",[225,136506,136508],{"id":136507},"_1412-多媒体标签","14.1.2 多媒体标签",[14,136510,136511,136512,136514,136515,136517],{},"音频 ",[414,136513,28315],{}," 和视频 ",[414,136516,28324],{}," 两个标签",[22139,136519,136521],{"id":136520},"_14121-视频标签-video","14.1.2.1 视频标签- video",[21,136523,136524],{},[24,136525,136526],{},"支持格式：",[1602,136528],{"style":126548,"src":136529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[14,136531,136532],{},"尽量使用MP4，兼容性好",[14,136534,136535],{},"用MP4就可以",[245,136537,136539],{"className":127439,"code":136538,"language":127441,"meta":174,"style":174},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[251,136540,136541],{"__ignoreMap":174},[254,136542,136543,136545,136547,136549,136551,136554,136556,136559,136562,136565,136567,136569],{"class":256,"line":257},[254,136544,1174],{"class":264},[254,136546,28324],{"class":51441},[254,136548,55380],{"class":2103},[254,136550,310],{"class":264},[254,136552,136553],{"class":369},"\"movie.mp4\"",[254,136555,92564],{"class":2103},[254,136557,136558],{"class":2103}," autoplay",[254,136560,136561],{"class":2103}," muted",[254,136563,136564],{"class":2103}," loop",[254,136566,55455],{"class":264},[254,136568,28324],{"class":51441},[254,136570,51448],{"class":264},[21,136572,136573],{"start":175},[24,136574,136575],{},"兼容写法",[14,136577,136578],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[245,136580,136581],{"className":127439,"code":136538,"language":127441,"meta":174,"style":174},[251,136582,136583],{"__ignoreMap":174},[254,136584,136585,136587,136589,136591,136593,136595,136597,136599,136601,136603,136605,136607],{"class":256,"line":257},[254,136586,1174],{"class":264},[254,136588,28324],{"class":51441},[254,136590,55380],{"class":2103},[254,136592,310],{"class":264},[254,136594,136553],{"class":369},[254,136596,92564],{"class":2103},[254,136598,136558],{"class":2103},[254,136600,136561],{"class":2103},[254,136602,136564],{"class":2103},[254,136604,55455],{"class":264},[254,136606,28324],{"class":51441},[254,136608,51448],{"class":264},[14,136610,136611],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[21,136613,136614],{"start":1319},[24,136615,136616],{},"video常用属性",[1602,136618],{"style":126548,"src":136619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[14,136621,136622],{},"poster属性后面是跟的等待加载图片的地址",[245,136624,136625],{"className":127439,"code":134194,"language":127441,"meta":174,"style":174},[251,136626,136627],{"__ignoreMap":174},[254,136628,136629,136631,136633,136635,136637,136639,136641,136643,136645,136647,136649,136651],{"class":256,"line":257},[254,136630,1174],{"class":264},[254,136632,1602],{"class":51441},[254,136634,55380],{"class":2103},[254,136636,310],{"class":264},[254,136638,134209],{"class":369},[254,136640,55388],{"class":2103},[254,136642,310],{"class":264},[254,136644,134216],{"class":369},[254,136646,134219],{"class":2103},[254,136648,310],{"class":264},[254,136650,134224],{"class":369},[254,136652,51448],{"class":264},[14,136654,136655],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[245,136657,136659],{"className":126692,"code":136658,"language":126694,"meta":174,"style":174},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[251,136660,136661,136666,136672,136696,136701,136706],{"__ignoreMap":174},[254,136662,136663],{"class":256,"line":257},[254,136664,136665],{"class":323},"\u002F* 2D 位移 *\u002F\n",[254,136667,136668,136670],{"class":256,"line":175},[254,136669,51752],{"class":51441},[254,136671,15713],{"class":264},[254,136673,136674,136677,136679,136682,136684,136686,136688,136690,136692,136694],{"class":256,"line":1319},[254,136675,136676],{"class":313},"  transform",[254,136678,51578],{"class":264},[254,136680,136681],{"class":313},"translate",[254,136683,265],{"class":264},[254,136685,575],{"class":313},[254,136687,51633],{"class":260},[254,136689,12576],{"class":264},[254,136691,920],{"class":313},[254,136693,51633],{"class":260},[254,136695,2859],{"class":264},[254,136697,136698],{"class":256,"line":1334},[254,136699,136700],{"class":323},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[254,136702,136703],{"class":256,"line":1340},[254,136704,136705],{"class":323},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[254,136707,136708],{"class":256,"line":1354},[254,136709,1705],{"class":264},[14,136711,136712],{},"muted:自动静音属性",[22139,136714,136716],{"id":136715},"_14122-音频标签audio","14.1.2.2 音频标签audio",[21,136718,136719],{},[24,136720,136721],{},"基本使用",[14,136723,136724,136725,136730,136731],{},"当前 ",[414,136726,136727],{},[251,136728,136729],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[414,136732,136733],{},"mp3格式",[1602,136735],{"style":126548,"src":136736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[21,136738,136739],{"start":175},[24,136740,136575],{},[245,136742,136743],{"className":127439,"code":136538,"language":127441,"meta":174,"style":174},[251,136744,136745],{"__ignoreMap":174},[254,136746,136747,136749,136751,136753,136755,136757,136759,136761,136763,136765,136767,136769],{"class":256,"line":257},[254,136748,1174],{"class":264},[254,136750,28324],{"class":51441},[254,136752,55380],{"class":2103},[254,136754,310],{"class":264},[254,136756,136553],{"class":369},[254,136758,92564],{"class":2103},[254,136760,136558],{"class":2103},[254,136762,136561],{"class":2103},[254,136764,136564],{"class":2103},[254,136766,55455],{"class":264},[254,136768,28324],{"class":51441},[254,136770,51448],{"class":264},[14,136772,136773],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[21,136775,136776],{"start":1319},[24,136777,136778],{},"常用属性",[1602,136780],{"style":126548,"src":136781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[245,136783,136784],{"className":127439,"code":136538,"language":127441,"meta":174,"style":174},[251,136785,136786],{"__ignoreMap":174},[254,136787,136788,136790,136792,136794,136796,136798,136800,136802,136804,136806,136808,136810],{"class":256,"line":257},[254,136789,1174],{"class":264},[254,136791,28324],{"class":51441},[254,136793,55380],{"class":2103},[254,136795,310],{"class":264},[254,136797,136553],{"class":369},[254,136799,92564],{"class":2103},[254,136801,136558],{"class":2103},[254,136803,136561],{"class":2103},[254,136805,136564],{"class":2103},[254,136807,55455],{"class":264},[254,136809,28324],{"class":51441},[254,136811,51448],{"class":264},[14,136813,136814],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[22139,136816,136818],{"id":136817},"_14123-总结","14.1.2.3 总结",[1271,136820,136821,136824,136827,136830,136833],{},[24,136822,136823],{},"音频标签和视频标签使用方式基本一致",[24,136825,136826],{},"浏览器支持情况不同",[24,136828,136829],{},"谷歌浏览器把音频和视频自动播放禁止了",[24,136831,136832],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[24,136834,136835],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[225,136837,136839],{"id":136838},"_1413-表单元素","14.1.3 表单元素",[22139,136841,136843],{"id":136842},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[1602,136845],{"style":126548,"src":136846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[245,136848,136850],{"className":127439,"code":136849,"language":127441,"meta":174,"style":174},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[251,136851,136852],{"__ignoreMap":174},[254,136853,136854,136856,136858,136860,136862,136864,136866,136868,136871,136873,136875,136878],{"class":256,"line":257},[254,136855,1174],{"class":264},[254,136857,53962],{"class":51441},[254,136859,53965],{"class":2103},[254,136861,310],{"class":264},[254,136863,62840],{"class":369},[254,136865,15061],{"class":2103},[254,136867,310],{"class":264},[254,136869,136870],{"class":369},"\"username\"",[254,136872,61161],{"class":2103},[254,136874,310],{"class":264},[254,136876,136877],{"class":369},"\"请输入用户名\"",[254,136879,51448],{"class":264},[1602,136881],{"style":126548,"src":136882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[22139,136884,136886],{"id":136885},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[1602,136888],{"style":126548,"src":136889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[14,136891,136892],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[14,136894,136895],{},"快捷操作：",[1602,136897],{"style":126548,"src":136898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[14,136900,136901],{},"例子1：",[245,136903,136905],{"className":127439,"code":136904,"language":127441,"meta":174,"style":174},"\u003Cform action=\"\u002Fsubmit\" method=\"post\">\n  \u003Cinput type=\"text\" name=\"username\" placeholder=\"用户名\">\n  \u003Cinput type=\"password\" name=\"pwd\" placeholder=\"密码\">\n  \u003Cbutton type=\"submit\">提交\u003C\u002Fbutton>\n\u003C\u002Fform>\n",[251,136906,136907,136930,136957,136986,137005],{"__ignoreMap":174},[254,136908,136909,136911,136913,136915,136917,136920,136923,136925,136928],{"class":256,"line":257},[254,136910,1174],{"class":264},[254,136912,66766],{"class":51441},[254,136914,66769],{"class":2103},[254,136916,310],{"class":264},[254,136918,136919],{"class":369},"\"\u002Fsubmit\"",[254,136921,136922],{"class":2103}," method",[254,136924,310],{"class":264},[254,136926,136927],{"class":369},"\"post\"",[254,136929,51448],{"class":264},[254,136931,136932,136934,136936,136938,136940,136942,136944,136946,136948,136950,136952,136955],{"class":256,"line":175},[254,136933,52285],{"class":264},[254,136935,53962],{"class":51441},[254,136937,53965],{"class":2103},[254,136939,310],{"class":264},[254,136941,62840],{"class":369},[254,136943,15061],{"class":2103},[254,136945,310],{"class":264},[254,136947,136870],{"class":369},[254,136949,61161],{"class":2103},[254,136951,310],{"class":264},[254,136953,136954],{"class":369},"\"用户名\"",[254,136956,51448],{"class":264},[254,136958,136959,136961,136963,136965,136967,136970,136972,136974,136977,136979,136981,136984],{"class":256,"line":1319},[254,136960,52285],{"class":264},[254,136962,53962],{"class":51441},[254,136964,53965],{"class":2103},[254,136966,310],{"class":264},[254,136968,136969],{"class":369},"\"password\"",[254,136971,15061],{"class":2103},[254,136973,310],{"class":264},[254,136975,136976],{"class":369},"\"pwd\"",[254,136978,61161],{"class":2103},[254,136980,310],{"class":264},[254,136982,136983],{"class":369},"\"密码\"",[254,136985,51448],{"class":264},[254,136987,136988,136990,136992,136994,136996,136998,137001,137003],{"class":256,"line":1334},[254,136989,52285],{"class":264},[254,136991,54028],{"class":51441},[254,136993,53965],{"class":2103},[254,136995,310],{"class":264},[254,136997,66789],{"class":369},[254,136999,137000],{"class":264},">提交\u003C\u002F",[254,137002,54028],{"class":51441},[254,137004,51448],{"class":264},[254,137006,137007,137009,137011],{"class":256,"line":1340},[254,137008,51926],{"class":264},[254,137010,66766],{"class":51441},[254,137012,51448],{"class":264},[1602,137014],{"style":126548,"src":137015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[14,137017,137018],{},"value是表单域的内容",[14,137020,137021],{},"例子2：",[245,137023,137024],{"className":127439,"code":136904,"language":127441,"meta":174,"style":174},[251,137025,137026,137046,137072,137098,137116],{"__ignoreMap":174},[254,137027,137028,137030,137032,137034,137036,137038,137040,137042,137044],{"class":256,"line":257},[254,137029,1174],{"class":264},[254,137031,66766],{"class":51441},[254,137033,66769],{"class":2103},[254,137035,310],{"class":264},[254,137037,136919],{"class":369},[254,137039,136922],{"class":2103},[254,137041,310],{"class":264},[254,137043,136927],{"class":369},[254,137045,51448],{"class":264},[254,137047,137048,137050,137052,137054,137056,137058,137060,137062,137064,137066,137068,137070],{"class":256,"line":175},[254,137049,52285],{"class":264},[254,137051,53962],{"class":51441},[254,137053,53965],{"class":2103},[254,137055,310],{"class":264},[254,137057,62840],{"class":369},[254,137059,15061],{"class":2103},[254,137061,310],{"class":264},[254,137063,136870],{"class":369},[254,137065,61161],{"class":2103},[254,137067,310],{"class":264},[254,137069,136954],{"class":369},[254,137071,51448],{"class":264},[254,137073,137074,137076,137078,137080,137082,137084,137086,137088,137090,137092,137094,137096],{"class":256,"line":1319},[254,137075,52285],{"class":264},[254,137077,53962],{"class":51441},[254,137079,53965],{"class":2103},[254,137081,310],{"class":264},[254,137083,136969],{"class":369},[254,137085,15061],{"class":2103},[254,137087,310],{"class":264},[254,137089,136976],{"class":369},[254,137091,61161],{"class":2103},[254,137093,310],{"class":264},[254,137095,136983],{"class":369},[254,137097,51448],{"class":264},[254,137099,137100,137102,137104,137106,137108,137110,137112,137114],{"class":256,"line":1334},[254,137101,52285],{"class":264},[254,137103,54028],{"class":51441},[254,137105,53965],{"class":2103},[254,137107,310],{"class":264},[254,137109,66789],{"class":369},[254,137111,137000],{"class":264},[254,137113,54028],{"class":51441},[254,137115,51448],{"class":264},[254,137117,137118,137120,137122],{"class":256,"line":1340},[254,137119,51926],{"class":264},[254,137121,66766],{"class":51441},[254,137123,51448],{"class":264},[1602,137125],{"style":126548,"src":137126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[34,137128,137130],{"id":137129},"_142-css新特性","14.2 CSS新特性",[225,137132,137134],{"id":137133},"_1421-新增选择器","14.2.1 新增选择器",[22139,137136,137138],{"id":137137},"_14211-属性选择器","14.2.1.1 属性选择器",[1602,137140],{"style":126548,"src":137141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[245,137143,137145],{"className":126692,"code":137144,"language":126694,"meta":174,"style":174},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[251,137146,137147,137162,137178],{"__ignoreMap":174},[254,137148,137149,137151,137153,137155,137157,137159],{"class":256,"line":257},[254,137150,53962],{"class":51441},[254,137152,1154],{"class":264},[254,137154,103248],{"class":2103},[254,137156,310],{"class":260},[254,137158,62840],{"class":369},[254,137160,137161],{"class":264},"] {\n",[254,137163,137164,137166,137168,137170,137172,137174,137176],{"class":256,"line":175},[254,137165,71037],{"class":313},[254,137167,51578],{"class":264},[254,137169,482],{"class":313},[254,137171,51633],{"class":260},[254,137173,51662],{"class":313},[254,137175,130272],{"class":313},[254,137177,1430],{"class":264},[254,137179,137180],{"class":256,"line":1319},[254,137181,1705],{"class":264},[1602,137183],{"style":126548,"src":137184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[14,137186,294],{},[1271,137188,137189,137192,137195,137198],{},[24,137190,137191],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[24,137193,137194],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[24,137196,137197],{},"属性选择器也可以选择出来自定义的属性",[24,137199,137200,137202],{},[414,137201,9166],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[22139,137204,137206],{"id":137205},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[1602,137208],{"style":126548,"src":137209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[21,137211,137212],{},[24,137213,137214],{},"fist-child",[245,137216,137218],{"className":126692,"code":137217,"language":126694,"meta":174,"style":174},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[251,137219,137220,137225,137240,137260,137278],{"__ignoreMap":174},[254,137221,137222],{"class":256,"line":257},[254,137223,137224],{"class":323},"\u002F* 属性选择器 *\u002F\n",[254,137226,137227,137229,137231,137233,137235,137237],{"class":256,"line":175},[254,137228,53962],{"class":51441},[254,137230,1154],{"class":264},[254,137232,103248],{"class":2103},[254,137234,310],{"class":260},[254,137236,62840],{"class":369},[254,137238,137239],{"class":264},"] { }\n",[254,137241,137242,137244,137246,137248,137251,137254,137257],{"class":256,"line":1319},[254,137243,53962],{"class":51441},[254,137245,1154],{"class":264},[254,137247,14835],{"class":2103},[254,137249,137250],{"class":260},"^=",[254,137252,137253],{"class":369},"\"icon\"",[254,137255,137256],{"class":264},"] { }  ",[254,137258,137259],{"class":323},"\u002F* 以 icon 开头 *\u002F\n",[254,137261,137262,137264,137266,137268,137271,137273,137275],{"class":256,"line":1334},[254,137263,53962],{"class":51441},[254,137265,1154],{"class":264},[254,137267,14835],{"class":2103},[254,137269,137270],{"class":260},"$=",[254,137272,137253],{"class":369},[254,137274,137256],{"class":264},[254,137276,137277],{"class":323},"\u002F* 以 icon 结尾 *\u002F\n",[254,137279,137280,137282,137284,137286,137289,137291,137293],{"class":256,"line":1340},[254,137281,53962],{"class":51441},[254,137283,1154],{"class":264},[254,137285,14835],{"class":2103},[254,137287,137288],{"class":260},"*=",[254,137290,137253],{"class":369},[254,137292,137256],{"class":264},[254,137294,137295],{"class":323},"\u002F* 包含 icon *\u002F\n",[14,137297,137298],{},"ul的第一个儿子文本为红色",[14,137300,137301],{},"一定要在冒号前加空格，不然就是选中所有的了",[245,137303,137305],{"className":126692,"code":137304,"language":126694,"meta":174,"style":174},".center {\n  color: red;\n}\n```Css\n\u002F* 结构伪类选择器 *\u002F\nli:first-child { }           \u002F* 第一个 *\u002F\nli:last-child { }            \u002F* 最后一个 *\u002F\nli:nth-child(2) { }          \u002F* 第2个 *\u002F\nli:nth-child(2n) { }         \u002F* 偶数 *\u002F\nli:nth-child(2n+1) { }       \u002F* 奇数 *\u002F\nli:nth-child(-n+3) { }       \u002F* 前3个 *\u002F\n",[251,137306,137307,137313,137323,137327,137331,137336,137349,137362,137378,137395,137412],{"__ignoreMap":174},[254,137308,137309,137311],{"class":256,"line":257},[254,137310,126983],{"class":2103},[254,137312,15713],{"class":264},[254,137314,137315,137317,137319,137321],{"class":256,"line":175},[254,137316,71046],{"class":313},[254,137318,51578],{"class":264},[254,137320,57562],{"class":313},[254,137322,1430],{"class":264},[254,137324,137325],{"class":256,"line":1319},[254,137326,1705],{"class":264},[254,137328,137329],{"class":256,"line":1334},[254,137330,136153],{"class":264},[254,137332,137333],{"class":256,"line":1340},[254,137334,137335],{"class":323},"\u002F* 结构伪类选择器 *\u002F\n",[254,137337,137338,137340,137343,137346],{"class":256,"line":1354},[254,137339,24],{"class":51441},[254,137341,137342],{"class":2103},":first-child",[254,137344,137345],{"class":264}," { }           ",[254,137347,137348],{"class":323},"\u002F* 第一个 *\u002F\n",[254,137350,137351,137353,137356,137359],{"class":256,"line":1360},[254,137352,24],{"class":51441},[254,137354,137355],{"class":2103},":last-child",[254,137357,137358],{"class":264}," { }            ",[254,137360,137361],{"class":323},"\u002F* 最后一个 *\u002F\n",[254,137363,137364,137366,137368,137370,137372,137375],{"class":256,"line":1451},[254,137365,24],{"class":51441},[254,137367,129606],{"class":2103},[254,137369,265],{"class":264},[254,137371,342],{"class":313},[254,137373,137374],{"class":264},") { }          ",[254,137376,137377],{"class":323},"\u002F* 第2个 *\u002F\n",[254,137379,137380,137382,137384,137386,137389,137392],{"class":256,"line":1457},[254,137381,24],{"class":51441},[254,137383,129606],{"class":2103},[254,137385,265],{"class":264},[254,137387,137388],{"class":313},"2n",[254,137390,137391],{"class":264},") { }         ",[254,137393,137394],{"class":323},"\u002F* 偶数 *\u002F\n",[254,137396,137397,137399,137401,137403,137406,137409],{"class":256,"line":1469},[254,137398,24],{"class":51441},[254,137400,129606],{"class":2103},[254,137402,265],{"class":264},[254,137404,137405],{"class":313},"2n+1",[254,137407,137408],{"class":264},") { }       ",[254,137410,137411],{"class":323},"\u002F* 奇数 *\u002F\n",[254,137413,137414,137416,137418,137420,137423,137425],{"class":256,"line":1752},[254,137415,24],{"class":51441},[254,137417,129606],{"class":2103},[254,137419,265],{"class":264},[254,137421,137422],{"class":313},"-n+3",[254,137424,137408],{"class":264},[254,137426,137427],{"class":323},"\u002F* 前3个 *\u002F\n",[51752,137429,137432],{"className":137430},[137431],"example","\n  示例内容\n",[14,137434,137435],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[1271,137437,137438],{},[24,137439,137440,137443],{},[251,137441,137442],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[14,137445,137446],{},"也就是说它选择的是熊大",[21,137448,137449],{"start":1354},[24,137450,137451],{},"权重",[245,137453,137455],{"className":126692,"code":137454,"language":126694,"meta":174,"style":174},"\u002F* 结构伪类选择器 *\u002F\nli:first-child { }           \u002F* 第一个 *\u002F\nli:last-child { }            \u002F* 最后一个 *\u002F\nli:nth-child(2) { }          \u002F* 第2个 *\u002F\nli:nth-child(2n) { }         \u002F* 偶数 *\u002F\nli:nth-child(2n+1) { }       \u002F* 奇数 *\u002F\nli:nth-child(-n+3) { }       \u002F* 前3个 *\u002F\n",[251,137456,137457,137461,137471,137481,137495,137509,137523],{"__ignoreMap":174},[254,137458,137459],{"class":256,"line":257},[254,137460,137335],{"class":323},[254,137462,137463,137465,137467,137469],{"class":256,"line":175},[254,137464,24],{"class":51441},[254,137466,137342],{"class":2103},[254,137468,137345],{"class":264},[254,137470,137348],{"class":323},[254,137472,137473,137475,137477,137479],{"class":256,"line":1319},[254,137474,24],{"class":51441},[254,137476,137355],{"class":2103},[254,137478,137358],{"class":264},[254,137480,137361],{"class":323},[254,137482,137483,137485,137487,137489,137491,137493],{"class":256,"line":1334},[254,137484,24],{"class":51441},[254,137486,129606],{"class":2103},[254,137488,265],{"class":264},[254,137490,342],{"class":313},[254,137492,137374],{"class":264},[254,137494,137377],{"class":323},[254,137496,137497,137499,137501,137503,137505,137507],{"class":256,"line":1340},[254,137498,24],{"class":51441},[254,137500,129606],{"class":2103},[254,137502,265],{"class":264},[254,137504,137388],{"class":313},[254,137506,137391],{"class":264},[254,137508,137394],{"class":323},[254,137510,137511,137513,137515,137517,137519,137521],{"class":256,"line":1354},[254,137512,24],{"class":51441},[254,137514,129606],{"class":2103},[254,137516,265],{"class":264},[254,137518,137405],{"class":313},[254,137520,137408],{"class":264},[254,137522,137411],{"class":323},[254,137524,137525,137527,137529,137531,137533,137535],{"class":256,"line":1360},[254,137526,24],{"class":51441},[254,137528,129606],{"class":2103},[254,137530,265],{"class":264},[254,137532,137422],{"class":313},[254,137534,137408],{"class":264},[254,137536,137427],{"class":323},[14,137538,137539],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[22139,137541,137543],{"id":137542},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[14,137545,137546],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[1602,137548],{"style":126548,"src":137549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[21,137551,137552],{},[24,137553,294],{},[1271,137555,137556,137559,137562,137565,137568,137571],{},[24,137557,137558],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[24,137560,137561],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[24,137563,137564],{},"语法： element::before {}",[24,137566,137567],{},"before 和 after 必须有 content 属性",[24,137569,137570],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[24,137572,137573],{},"伪元素选择器和标签选择器一样，权重为 1",[21,137575,137576],{"start":175},[24,137577,137578],{},"实例",[245,137580,137581],{"className":126692,"code":137454,"language":126694,"meta":174,"style":174},[251,137582,137583,137587,137597,137607,137621,137635,137649],{"__ignoreMap":174},[254,137584,137585],{"class":256,"line":257},[254,137586,137335],{"class":323},[254,137588,137589,137591,137593,137595],{"class":256,"line":175},[254,137590,24],{"class":51441},[254,137592,137342],{"class":2103},[254,137594,137345],{"class":264},[254,137596,137348],{"class":323},[254,137598,137599,137601,137603,137605],{"class":256,"line":1319},[254,137600,24],{"class":51441},[254,137602,137355],{"class":2103},[254,137604,137358],{"class":264},[254,137606,137361],{"class":323},[254,137608,137609,137611,137613,137615,137617,137619],{"class":256,"line":1334},[254,137610,24],{"class":51441},[254,137612,129606],{"class":2103},[254,137614,265],{"class":264},[254,137616,342],{"class":313},[254,137618,137374],{"class":264},[254,137620,137377],{"class":323},[254,137622,137623,137625,137627,137629,137631,137633],{"class":256,"line":1340},[254,137624,24],{"class":51441},[254,137626,129606],{"class":2103},[254,137628,265],{"class":264},[254,137630,137388],{"class":313},[254,137632,137391],{"class":264},[254,137634,137394],{"class":323},[254,137636,137637,137639,137641,137643,137645,137647],{"class":256,"line":1354},[254,137638,24],{"class":51441},[254,137640,129606],{"class":2103},[254,137642,265],{"class":264},[254,137644,137405],{"class":313},[254,137646,137408],{"class":264},[254,137648,137411],{"class":323},[254,137650,137651,137653,137655,137657,137659,137661],{"class":256,"line":1360},[254,137652,24],{"class":51441},[254,137654,129606],{"class":2103},[254,137656,265],{"class":264},[254,137658,137422],{"class":313},[254,137660,137408],{"class":264},[254,137662,137427],{"class":323},[1602,137664],{"style":126548,"src":137665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[21,137667,137668],{"start":1319},[24,137669,137670],{},"使用场景1",[1602,137672],{"style":126548,"src":137673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[14,137675,137676],{},"不需要再加盒子来整红色那部分了",[245,137678,137680],{"className":126692,"code":137679,"language":126694,"meta":174,"style":174},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[251,137681,137682,137687,137696,137707,137717,137721,137730,137741,137751],{"__ignoreMap":174},[254,137683,137684],{"class":256,"line":257},[254,137685,137686],{"class":323},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[254,137688,137689,137691,137694],{"class":256,"line":175},[254,137690,51752],{"class":51441},[254,137692,137693],{"class":2103},"::before",[254,137695,15713],{"class":264},[254,137697,137698,137701,137703,137705],{"class":256,"line":1319},[254,137699,137700],{"class":313},"  content",[254,137702,51578],{"class":264},[254,137704,7793],{"class":369},[254,137706,1430],{"class":264},[254,137708,137709,137711,137713,137715],{"class":256,"line":1334},[254,137710,128308],{"class":313},[254,137712,51578],{"class":264},[254,137714,61010],{"class":313},[254,137716,1430],{"class":264},[254,137718,137719],{"class":256,"line":1340},[254,137720,1705],{"class":264},[254,137722,137723,137725,137728],{"class":256,"line":1354},[254,137724,51752],{"class":51441},[254,137726,137727],{"class":2103},"::after",[254,137729,15713],{"class":264},[254,137731,137732,137734,137736,137739],{"class":256,"line":1360},[254,137733,137700],{"class":313},[254,137735,51578],{"class":264},[254,137737,137738],{"class":369},"\"→\"",[254,137740,1430],{"class":264},[254,137742,137743,137745,137747,137749],{"class":256,"line":1451},[254,137744,71046],{"class":313},[254,137746,51578],{"class":264},[254,137748,62211],{"class":313},[254,137750,1430],{"class":264},[254,137752,137753],{"class":256,"line":1457},[254,137754,1705],{"class":264},[1602,137756],{"style":126548,"src":137757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[14,137759,137760],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[1602,137762],{"style":126548,"src":137763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[14,137765,137766],{},"但是在引用时需要先转义一下",[14,137768,137769],{},"content='\\e930'",[21,137771,137772],{"start":1334},[24,137773,137774],{},"使用场景2",[14,137776,137777],{},"仿土豆效果",[14,137779,137780],{},"通过使用伪元素选择器可以减少body中盒子的数量",[245,137782,137783],{"className":126692,"code":137679,"language":126694,"meta":174,"style":174},[251,137784,137785,137789,137797,137807,137817,137821,137829,137839,137849],{"__ignoreMap":174},[254,137786,137787],{"class":256,"line":257},[254,137788,137686],{"class":323},[254,137790,137791,137793,137795],{"class":256,"line":175},[254,137792,51752],{"class":51441},[254,137794,137693],{"class":2103},[254,137796,15713],{"class":264},[254,137798,137799,137801,137803,137805],{"class":256,"line":1319},[254,137800,137700],{"class":313},[254,137802,51578],{"class":264},[254,137804,7793],{"class":369},[254,137806,1430],{"class":264},[254,137808,137809,137811,137813,137815],{"class":256,"line":1334},[254,137810,128308],{"class":313},[254,137812,51578],{"class":264},[254,137814,61010],{"class":313},[254,137816,1430],{"class":264},[254,137818,137819],{"class":256,"line":1340},[254,137820,1705],{"class":264},[254,137822,137823,137825,137827],{"class":256,"line":1354},[254,137824,51752],{"class":51441},[254,137826,137727],{"class":2103},[254,137828,15713],{"class":264},[254,137830,137831,137833,137835,137837],{"class":256,"line":1360},[254,137832,137700],{"class":313},[254,137834,51578],{"class":264},[254,137836,137738],{"class":369},[254,137838,1430],{"class":264},[254,137840,137841,137843,137845,137847],{"class":256,"line":1451},[254,137842,71046],{"class":313},[254,137844,51578],{"class":264},[254,137846,62211],{"class":313},[254,137848,1430],{"class":264},[254,137850,137851],{"class":256,"line":1457},[254,137852,1705],{"class":264},[1602,137854],{"style":126548,"src":137855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[21,137857,137858],{"start":1340},[24,137859,137860],{},"使用场景3",[14,137862,137863],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[245,137865,137867],{"className":126692,"code":137866,"language":126694,"meta":174,"style":174},".box {\n  float: left;\n}\n```Css\n\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[251,137868,137869,137875,137885,137889,137893,137897,137905,137915,137925,137929,137937,137947,137957],{"__ignoreMap":174},[254,137870,137871,137873],{"class":256,"line":257},[254,137872,130540],{"class":2103},[254,137874,15713],{"class":264},[254,137876,137877,137879,137881,137883],{"class":256,"line":175},[254,137878,131172],{"class":313},[254,137880,51578],{"class":264},[254,137882,23877],{"class":313},[254,137884,1430],{"class":264},[254,137886,137887],{"class":256,"line":1319},[254,137888,1705],{"class":264},[254,137890,137891],{"class":256,"line":1334},[254,137892,136153],{"class":264},[254,137894,137895],{"class":256,"line":1340},[254,137896,137686],{"class":323},[254,137898,137899,137901,137903],{"class":256,"line":1354},[254,137900,51752],{"class":51441},[254,137902,137693],{"class":2103},[254,137904,15713],{"class":264},[254,137906,137907,137909,137911,137913],{"class":256,"line":1360},[254,137908,137700],{"class":313},[254,137910,51578],{"class":264},[254,137912,7793],{"class":369},[254,137914,1430],{"class":264},[254,137916,137917,137919,137921,137923],{"class":256,"line":1451},[254,137918,128308],{"class":313},[254,137920,51578],{"class":264},[254,137922,61010],{"class":313},[254,137924,1430],{"class":264},[254,137926,137927],{"class":256,"line":1457},[254,137928,1705],{"class":264},[254,137930,137931,137933,137935],{"class":256,"line":1469},[254,137932,51752],{"class":51441},[254,137934,137727],{"class":2103},[254,137936,15713],{"class":264},[254,137938,137939,137941,137943,137945],{"class":256,"line":1752},[254,137940,137700],{"class":313},[254,137942,51578],{"class":264},[254,137944,137738],{"class":369},[254,137946,1430],{"class":264},[254,137948,137949,137951,137953,137955],{"class":256,"line":1757},[254,137950,71046],{"class":313},[254,137952,51578],{"class":264},[254,137954,62211],{"class":313},[254,137956,1430],{"class":264},[254,137958,137959],{"class":256,"line":1763},[254,137960,1705],{"class":264},[14,137962,137963],{},"div {\nmargin: 0 auto;\n}",[245,137965,137968],{"className":137966,"code":137967,"language":5328},[5326],"\n### 14.2.3 CSS3图片变模糊\n\nfilter CSS属性将模糊或颜色偏移等图形效果应用于元素\n\n`filter: 函数();`，例如：`filter: blur(5px);`，`blur` 表示模糊处理，数值越大越模糊。\n\n### 14.2.4 计算盒子宽度\n\ncalc() 此CSS函数让你在声明CSS属性值时执行一些计算\n\nwidth: calc(100% - 80px);\n\n括号里面可以使用 + - \\* \u002F 来进行计算\n\n运算符前后要加空格，不然显示不出来\n\n要求子盒子宽度永远比父盒子小30像素\n\n### 14.2.5 CSS3 过渡\n\n过渡（transition)是CSS3中具有颠覆性的特征之一，我们可以在不使用 Flash 动画或 JavaScript 的情况下，当元素从一种样式变换为另一种样式时为元素添加效果\n\n**过渡动画：** 是从一个状态 渐渐的过渡到另外一个状态\n\n可以让我们页面更好看，更动感十足，虽然 低版本浏览器不支持（ie9以下版本） 但是不会影响页面布局。\n\n我们现在经常和 :hover 一起 搭配使用\n\n语法：\n\ntransition: 要过渡的属性 花费时间 运动曲线 何时开始;\n\n*   属性 ： 想要变化的 css 属性， 宽度高度 背景颜色 内外边距都可以 。如果想要所有的属性都变化过渡， 写一个all 就可以\n    \n*   花费时间： 单位是 秒（必须写单位） 比如 0.5s\n    \n*   运动曲线： 默认是 ease （可以省略）\n    \n*   何时开始：单位是 秒（必须写单位）可以设置延迟触发时间 默认是 0s （可以省略）\n    \n*   **后面两个属性可以省略**\n    \n*   **记住过渡的使用口诀： 谁做过渡给谁加**\n    \n\n\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-140.png\">\n\n代码案例\n\n```Css\ndiv {\n  transition: all 0.3s ease;\n}\n",[251,137969,137967],{"__ignoreMap":174},[14,137971,137972],{},"如果想让多个元素都发生变化",[14,137974,137975],{},"不能如下操作：",[14,137977,137978],{},"transition: width 2s ease 0.5s;",[14,137980,137981],{},"transition: height 2s ease 0.5s;不对！！！",[14,137983,137984],{},"上方会样式冲突，导致不显示任何过渡效果",[14,137986,137987],{},"使用如下：加逗号隔开",[14,137989,137990],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[14,137992,137993],{},"transition all 2s ease;",[225,137995,137997],{"id":137996},"_1426-过渡练习","14.2.6 过渡练习",[21,137999,138000],{},[24,138001,138002],{},"进度条",[1602,138004],{"style":126548,"src":138005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[245,138007,138009],{"className":126692,"code":138008,"language":126694,"meta":174,"style":174},"div {\n  transition: all 0.3s ease;\n}\n",[251,138010,138011,138017,138035],{"__ignoreMap":174},[254,138012,138013,138015],{"class":256,"line":257},[254,138014,51752],{"class":51441},[254,138016,15713],{"class":264},[254,138018,138019,138022,138024,138026,138029,138031,138033],{"class":256,"line":175},[254,138020,138021],{"class":313},"  transition",[254,138023,51578],{"class":264},[254,138025,28262],{"class":313},[254,138027,138028],{"class":313}," 0.3",[254,138030,959],{"class":260},[254,138032,78821],{"class":313},[254,138034,1430],{"class":264},[254,138036,138037],{"class":256,"line":1319},[254,138038,1705],{"class":264},[21,138040,138041],{"start":175},[24,138042,138043],{},"小米logo",[14,138045,138046],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[245,138048,138050],{"className":126692,"code":138049,"language":126694,"meta":174,"style":174},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[251,138051,138052,138057,138063,138079,138084],{"__ignoreMap":174},[254,138053,138054],{"class":256,"line":257},[254,138055,138056],{"class":323},"\u002F* CSS3 过渡 *\u002F\n",[254,138058,138059,138061],{"class":256,"line":175},[254,138060,51752],{"class":51441},[254,138062,15713],{"class":264},[254,138064,138065,138067,138069,138071,138073,138075,138077],{"class":256,"line":1319},[254,138066,138021],{"class":313},[254,138068,51578],{"class":264},[254,138070,28262],{"class":313},[254,138072,138028],{"class":313},[254,138074,959],{"class":260},[254,138076,78821],{"class":313},[254,138078,1430],{"class":264},[254,138080,138081],{"class":256,"line":1334},[254,138082,138083],{"class":323},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[254,138085,138086],{"class":256,"line":1340},[254,138087,1705],{"class":264},[14,138089,138090],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[5267,138092,138093],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":174,"searchDepth":175,"depth":175,"links":138095},[138096,138101],{"id":136426,"depth":175,"text":136427,"children":138097},[138098,138099,138100],{"id":136430,"depth":1319,"text":136431},{"id":136507,"depth":1319,"text":136508},{"id":136838,"depth":1319,"text":136839},{"id":137129,"depth":175,"text":137130,"children":138102},[138103,138104],{"id":137133,"depth":1319,"text":137134},{"id":137996,"depth":1319,"text":137997},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136418,"description":23518},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":138111,"title":138112,"body":138113,"description":23518,"extension":181,"meta":139857,"navigation":184,"path":139858,"seo":139859,"stem":139860,"__hash__":139861},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":138114,"toc":139838},[138115,138118,138122,138125,138131,138137,138141,138143,138146,138149,138152,138155,138158,138161,138164,138168,138172,138175,138178,138181,138185,138188,138191,138196,138199,138202,138205,138209,138212,138221,138224,138227,138231,138234,138237,138242,138249,138263,138271,138278,138283,138286,138289,138292,138299,138303,138309,138315,138318,138321,138326,138332,138334,138342,138347,138350,138356,138358,138363,138368,138371,138373,138378,138381,138386,138391,138425,138429,138433,138436,138440,138443,138529,138532,138569,138572,138608,138612,138617,138630,138684,138686,138714,138716,138744,138750,138764,138766,138810,138812,138856,138859,138866,138877,138879,138906,138908,138934,138941,138957,138959,139053,139055,139149,139156,139159,139164,139170,139244,139247,139249,139285,139287,139323,139326,139333,139352,139355,139358,139360,139385,139387,139411,139414,139417,139447,139451,139454,139517,139519,139585,139587,139651,139654,139686,139688,139714,139716,139742,139745,139776,139778,139804,139806,139832,139835],[10,138116,138112],{"id":138117},"_15-品优购项目上篇-搭建与公共模块",[34,138119,138121],{"id":138120},"_151-项目规划","15.1 项目规划",[1602,138123],{"style":126548,"src":138124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[14,138126,138127,138130],{},[414,138128,138129],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[14,138132,138133,138136],{},[414,138134,138135],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[34,138138,138140],{"id":138139},"_152-项目介绍","15.2 项目介绍",[14,138142,138129],{},[1602,138144],{"style":126548,"src":138145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[14,138147,138148],{},"主页：",[1602,138150],{"style":126548,"src":138151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[14,138153,138154],{},"列表页：",[1602,138156],{"style":126548,"src":138157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[14,138159,138160],{},"注册页：",[1602,138162],{"style":126548,"src":138163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[34,138165,138167],{"id":138166},"_153-项目搭建工作","15.3 项目搭建工作",[225,138169,138171],{"id":138170},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[1602,138173],{"style":126548,"src":138174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[14,138176,138177],{},"经常更换的图片要放到upload文件夹中",[14,138179,138180],{},"不经常换的放到images文件夹中",[225,138182,138184],{"id":138183},"_1532-创建文件如下","15.3.2 创建文件如下",[1602,138186],{"style":126548,"src":138187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[1602,138189],{"style":126548,"src":138190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[14,138192,138193],{},[414,138194,138195],{},"初始化样式：",[14,138197,138198],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[14,138200,138201],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[14,138203,138204],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[225,138206,138208],{"id":138207},"_1533-项目模块化开发","15.3.3 项目模块化开发",[14,138210,138211],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[14,138213,138214,138215,138220],{},"这里最典型的应用就是 ",[414,138216,138217],{},[251,138218,138219],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[1602,138222],{"style":126548,"src":138223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[14,138225,138226],{},"通过link方法来引入",[225,138228,138230],{"id":138229},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[1602,138232],{"style":126548,"src":138233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[14,138235,138236],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[21,138238,138239],{},[24,138240,138241],{},"制作favicon图标",[14,138243,138244,138245,138248],{},"①把品优购图标切成 ",[251,138246,138247],{},"png"," 图片",[14,138250,138251,138252,138254,138255,138258,138259],{},"②把 ",[251,138253,138247],{}," 图片转换为 ",[251,138256,138257],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[42,138260,138261],{"href":138261,"rel":138262},"http:\u002F\u002Fwww.bitbug.net\u002F",[151],[21,138264,138265,138268],{"start":175},[24,138266,138267],{},"favicon图标放到网站根目录下",[24,138269,138270],{},"HTML页面引入favicon",[14,138272,138273,138274,138277],{},"在html 页面里面的 ",[251,138275,138276],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[14,138279,138280],{},[251,138281,138282],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[14,138284,138285],{},"复制这行代码或者在生成这个的网站进行复制",[1602,138287],{"style":126548,"src":138288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[14,138290,138291],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[14,138293,138294,138295],{},"例如:",[42,138296,138297],{"href":138297,"rel":138298},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[151],[225,138300,138302],{"id":138301},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[14,138304,138305,138308],{},[414,138306,138307],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[14,138310,138311,138314],{},[414,138312,138313],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[14,138316,138317],{},"页面必须有三个标签用来符合 SEO 优化",[1602,138319],{"style":126548,"src":138320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[21,138322,138323],{},[24,138324,138325],{},"title网站标题",[14,138327,138328,138331],{},[414,138329,138330],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[14,138333,68931],{},[1271,138335,138336,138339],{},[24,138337,138338],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[24,138340,138341],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[21,138343,138344],{"start":175},[24,138345,138346],{},"description网站描述",[14,138348,138349],{},"简要说明我们网站主要是做什么的",[14,138351,138352,138355],{},[414,138353,138354],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[14,138357,68931],{},[14,138359,138360],{},[251,138361,138362],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[21,138364,138365],{"start":1319},[24,138366,138367],{},"keywords关键词",[14,138369,138370],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[14,138372,68931],{},[14,138374,138375],{},[251,138376,138377],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[14,138379,138380],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[14,138382,138383],{},[414,138384,138385],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[21,138387,138388],{"start":1334},[24,138389,138390],{},"代码总结",[245,138392,138393],{"className":127439,"code":130796,"language":127441,"meta":174,"style":174},[251,138394,138395,138399,138413,138417],{"__ignoreMap":174},[254,138396,138397],{"class":256,"line":257},[254,138398,130803],{"class":323},[254,138400,138401,138403,138405,138407,138409,138411],{"class":256,"line":175},[254,138402,1174],{"class":264},[254,138404,51752],{"class":51441},[254,138406,53627],{"class":2103},[254,138408,310],{"class":264},[254,138410,130816],{"class":369},[254,138412,51448],{"class":264},[254,138414,138415],{"class":256,"line":1319},[254,138416,130823],{"class":264},[254,138418,138419,138421,138423],{"class":256,"line":1334},[254,138420,51926],{"class":264},[254,138422,51752],{"class":51441},[254,138424,51448],{"class":264},[34,138426,138428],{"id":138427},"_154-项目公共部分制作","15.4 项目公共部分制作",[225,138430,138432],{"id":138431},"_1541-常用模块类命名","15.4.1 常用模块类命名",[1602,138434],{"style":126548,"src":138435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[225,138437,138439],{"id":138438},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[14,138441,138442],{},"布局思路：",[1271,138444,138445,138448,138451,138473,138506],{},[24,138446,138447],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[24,138449,138450],{},"里面包含版心的盒子",[24,138452,138453,138454],{},"版心盒子里面包含 1 号左侧盒子左浮动",[1271,138455,138456,138464,138470],{},[24,138457,138458,138459,21641,138461,138463],{},"1 号盒子 里面包含一个",[251,138460,1271],{},[251,138462,1271],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[24,138465,138466,138467,138469],{},"里面的内容是水平排列，所以需要给",[251,138468,24],{},"设置浮动",[24,138471,138472],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[24,138474,138475,138476],{},"版心盒子里面包含 2 号右侧盒子右浮动",[1271,138477,138478,138492,138497],{},[24,138479,138480,138481,21641,138483,138485,138486,138488,138489,138491],{},"2 号盒子 里面包含一个",[251,138482,1271],{},[251,138484,1271],{},"包裹",[251,138487,24],{},"，中间的",[251,138490,1185],{},"可以用样式去设置，也可以用字符 |",[24,138493,138494,138495,138469],{},"里面内容水平排列，给",[251,138496,24],{},[24,138498,138499,138500,138502,138503,138505],{},"找到里面所有偶数的 ",[251,138501,24],{}," 设置样式（偶数的 ",[251,138504,24],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[24,138507,138508,138509],{},"需要用到字体图标",[1271,138510,138511,138517,138520,138523,138526],{},[24,138512,138513,138514],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[251,138515,138516],{},"arrow-icon",[24,138518,138519],{},"先要引入字体图片的资源",[24,138521,138522],{},"在样式里面利用 font-face 来进行声明",[24,138524,138525],{},"在伪元素的 content属性设置 图标的编码",[24,138527,138528],{},"给伪元素设置font-family属性",[14,138530,138531],{},"结构实例代码：",[245,138533,138535],{"className":126692,"code":138534,"language":126694,"meta":174,"style":174},"div::before {\n  content: \"\";\n  display: block;\n}\n",[251,138536,138537,138545,138555,138565],{"__ignoreMap":174},[254,138538,138539,138541,138543],{"class":256,"line":257},[254,138540,51752],{"class":51441},[254,138542,137693],{"class":2103},[254,138544,15713],{"class":264},[254,138546,138547,138549,138551,138553],{"class":256,"line":175},[254,138548,137700],{"class":313},[254,138550,51578],{"class":264},[254,138552,7793],{"class":369},[254,138554,1430],{"class":264},[254,138556,138557,138559,138561,138563],{"class":256,"line":1319},[254,138558,128308],{"class":313},[254,138560,51578],{"class":264},[254,138562,61010],{"class":313},[254,138564,1430],{"class":264},[254,138566,138567],{"class":256,"line":1334},[254,138568,1705],{"class":264},[14,138570,138571],{},"样式实例代码：",[245,138573,138574],{"className":126692,"code":138534,"language":126694,"meta":174,"style":174},[251,138575,138576,138584,138594,138604],{"__ignoreMap":174},[254,138577,138578,138580,138582],{"class":256,"line":257},[254,138579,51752],{"class":51441},[254,138581,137693],{"class":2103},[254,138583,15713],{"class":264},[254,138585,138586,138588,138590,138592],{"class":256,"line":175},[254,138587,137700],{"class":313},[254,138589,51578],{"class":264},[254,138591,7793],{"class":369},[254,138593,1430],{"class":264},[254,138595,138596,138598,138600,138602],{"class":256,"line":1319},[254,138597,128308],{"class":313},[254,138599,51578],{"class":264},[254,138601,61010],{"class":313},[254,138603,1430],{"class":264},[254,138605,138606],{"class":256,"line":1334},[254,138607,1705],{"class":264},[225,138609,138611],{"id":138610},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[1271,138613,138614],{},[24,138615,138616],{},"header 盒子必须要有高度",[14,138618,138619,138620,138622,138623],{},"1 号盒子是 ",[251,138621,131704],{}," 标志定位，在正常开发过程中， ",[414,138624,138625,138626,138629],{},"logo的布局其实是有讲究的，需要进行 ",[251,138627,138628],{},"logoSEO","的优化 （★★★）",[1271,138631,138632,138640,138648,138675],{},[24,138633,138634,138636,138637,138639],{},[251,138635,131704],{}," 里面首先放一个 ",[251,138638,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[24,138641,138642,138644,138645,138647],{},[251,138643,10],{}," 里面再放一个链接，可以返回首页的，把 ",[251,138646,131704],{}," 的背景图片给链接即可",[24,138649,138650,138651],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[1271,138652,138653,138668],{},[24,138654,138655,138656,138659,138660,138663,138664,138667],{},"方法1：",[251,138657,138658],{},"text-indent"," 移到盒子外面（",[251,138661,138662],{},"text-indent: -9999px",") ，然后 ",[251,138665,138666],{},"overflow:hidden"," ，淘宝的做法",[24,138669,138670,138671,138674],{},"方法2：直接给 ",[251,138672,138673],{},"font-size: 0;"," 就看不到文字了，京东的做法",[24,138676,138677,138678,138680,138681,138683],{},"最后给链接一个 ",[251,138679,51548],{}," 属性，这样鼠标放到 ",[251,138682,131704],{}," 上就可以看到提示文字了",[14,138685,138531],{},[245,138687,138688],{"className":127439,"code":131925,"language":127441,"meta":174,"style":174},[251,138689,138690],{"__ignoreMap":174},[254,138691,138692,138694,138696,138698,138700,138702,138704,138706,138708,138710,138712],{"class":256,"line":257},[254,138693,1174],{"class":264},[254,138695,42],{"class":51441},[254,138697,61198],{"class":2103},[254,138699,310],{"class":264},[254,138701,131940],{"class":369},[254,138703,131943],{"class":2103},[254,138705,310],{"class":264},[254,138707,131948],{"class":369},[254,138709,131951],{"class":264},[254,138711,42],{"class":51441},[254,138713,51448],{"class":264},[14,138715,138571],{},[245,138717,138718],{"className":127439,"code":131925,"language":127441,"meta":174,"style":174},[251,138719,138720],{"__ignoreMap":174},[254,138721,138722,138724,138726,138728,138730,138732,138734,138736,138738,138740,138742],{"class":256,"line":257},[254,138723,1174],{"class":264},[254,138725,42],{"class":51441},[254,138727,61198],{"class":2103},[254,138729,310],{"class":264},[254,138731,131940],{"class":369},[254,138733,131943],{"class":2103},[254,138735,310],{"class":264},[254,138737,131948],{"class":369},[254,138739,131951],{"class":264},[254,138741,42],{"class":51441},[254,138743,51448],{"class":264},[14,138745,138746,138747,138749],{},"2 号盒子是 ",[251,138748,131717],{}," 搜索模块定位",[1271,138751,138752,138755,138758,138761],{},[24,138753,138754],{},"search盒子利用定位的方式放在对应的位置",[24,138756,138757],{},"search盒子设置绝对定位，header盒子设置相对定位",[24,138759,138760],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[24,138762,138763],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[14,138765,138531],{},[245,138767,138768],{"className":126692,"code":132012,"language":126694,"meta":174,"style":174},[251,138769,138770,138792,138796,138806],{"__ignoreMap":174},[254,138771,138772,138774,138776,138778,138780,138782,138784,138786,138788,138790],{"class":256,"line":257},[254,138773,51752],{"class":51441},[254,138775,12576],{"class":264},[254,138777,14],{"class":51441},[254,138779,12576],{"class":264},[254,138781,10],{"class":51441},[254,138783,12576],{"class":264},[254,138785,1271],{"class":51441},[254,138787,12576],{"class":264},[254,138789,24],{"class":51441},[254,138791,15713],{"class":264},[254,138793,138794],{"class":256,"line":175},[254,138795,132041],{"class":323},[254,138797,138798,138800,138802,138804],{"class":256,"line":1319},[254,138799,128308],{"class":313},[254,138801,51578],{"class":264},[254,138803,61010],{"class":313},[254,138805,1430],{"class":264},[254,138807,138808],{"class":256,"line":1334},[254,138809,1705],{"class":264},[14,138811,138571],{},[245,138813,138814],{"className":126692,"code":132012,"language":126694,"meta":174,"style":174},[251,138815,138816,138838,138842,138852],{"__ignoreMap":174},[254,138817,138818,138820,138822,138824,138826,138828,138830,138832,138834,138836],{"class":256,"line":257},[254,138819,51752],{"class":51441},[254,138821,12576],{"class":264},[254,138823,14],{"class":51441},[254,138825,12576],{"class":264},[254,138827,10],{"class":51441},[254,138829,12576],{"class":264},[254,138831,1271],{"class":51441},[254,138833,12576],{"class":264},[254,138835,24],{"class":51441},[254,138837,15713],{"class":264},[254,138839,138840],{"class":256,"line":175},[254,138841,132041],{"class":323},[254,138843,138844,138846,138848,138850],{"class":256,"line":1319},[254,138845,128308],{"class":313},[254,138847,51578],{"class":264},[254,138849,61010],{"class":313},[254,138851,1430],{"class":264},[254,138853,138854],{"class":256,"line":1334},[254,138855,1705],{"class":264},[14,138857,138858],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[14,138860,138861,138862,138865],{},"3 号盒子是 ",[251,138863,138864],{},"hotwords"," 热词模块定位",[1271,138867,138868,138871,138874],{},[24,138869,138870],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[24,138872,138873],{},"给里面所有的a标签设置 左右10px的外边距",[24,138875,138876],{},"给第一个a标签设置文字变红色（#c81623）",[14,138878,138531],{},[245,138880,138882],{"className":126692,"code":138881,"language":126694,"meta":174,"style":174},"div {\n  margin: 0 auto;\n}\n",[251,138883,138884,138890,138902],{"__ignoreMap":174},[254,138885,138886,138888],{"class":256,"line":257},[254,138887,51752],{"class":51441},[254,138889,15713],{"class":264},[254,138891,138892,138894,138896,138898,138900],{"class":256,"line":175},[254,138893,70611],{"class":313},[254,138895,51578],{"class":264},[254,138897,456],{"class":313},[254,138899,51697],{"class":313},[254,138901,1430],{"class":264},[254,138903,138904],{"class":256,"line":1319},[254,138905,1705],{"class":264},[14,138907,138571],{},[245,138909,138910],{"className":126692,"code":138881,"language":126694,"meta":174,"style":174},[251,138911,138912,138918,138930],{"__ignoreMap":174},[254,138913,138914,138916],{"class":256,"line":257},[254,138915,51752],{"class":51441},[254,138917,15713],{"class":264},[254,138919,138920,138922,138924,138926,138928],{"class":256,"line":175},[254,138921,70611],{"class":313},[254,138923,51578],{"class":264},[254,138925,456],{"class":313},[254,138927,51697],{"class":313},[254,138929,1430],{"class":264},[254,138931,138932],{"class":256,"line":1319},[254,138933,1705],{"class":264},[14,138935,138936,138937,138940],{},"4 号盒子是 ",[251,138938,138939],{},"shopcar"," 购物车模块",[1271,138942,138943,138948,138951,138954],{},[24,138944,123475,138945,138947],{},[251,138946,138939],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[24,138949,138950],{},"count 统计部分用绝对定位做",[24,138952,138953],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[24,138955,138956],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[14,138958,138531],{},[245,138960,138961],{"className":126692,"code":132124,"language":126694,"meta":174,"style":174},[251,138962,138963,138967,138981,138985,138999,139003,139017,139021,139035,139039],{"__ignoreMap":174},[254,138964,138965],{"class":256,"line":257},[254,138966,132131],{"class":323},[254,138968,138969,138971,138973,138975,138977,138979],{"class":256,"line":175},[254,138970,132136],{"class":2103},[254,138972,79948],{"class":264},[254,138974,129052],{"class":313},[254,138976,51578],{"class":264},[254,138978,132145],{"class":313},[254,138980,129622],{"class":264},[254,138982,138983],{"class":256,"line":1319},[254,138984,132152],{"class":323},[254,138986,138987,138989,138991,138993,138995,138997],{"class":256,"line":1334},[254,138988,132157],{"class":2103},[254,138990,79948],{"class":264},[254,138992,129052],{"class":313},[254,138994,51578],{"class":264},[254,138996,54905],{"class":313},[254,138998,129622],{"class":264},[254,139000,139001],{"class":256,"line":1340},[254,139002,132172],{"class":323},[254,139004,139005,139007,139009,139011,139013,139015],{"class":256,"line":1354},[254,139006,132177],{"class":2103},[254,139008,79948],{"class":264},[254,139010,129052],{"class":313},[254,139012,51578],{"class":264},[254,139014,54972],{"class":313},[254,139016,129622],{"class":264},[254,139018,139019],{"class":256,"line":1360},[254,139020,132192],{"class":323},[254,139022,139023,139025,139027,139029,139031,139033],{"class":256,"line":1451},[254,139024,132197],{"class":2103},[254,139026,79948],{"class":264},[254,139028,129052],{"class":313},[254,139030,51578],{"class":264},[254,139032,86374],{"class":313},[254,139034,129622],{"class":264},[254,139036,139037],{"class":256,"line":1457},[254,139038,132212],{"class":323},[254,139040,139041,139043,139045,139047,139049,139051],{"class":256,"line":1469},[254,139042,132217],{"class":2103},[254,139044,79948],{"class":264},[254,139046,129052],{"class":313},[254,139048,51578],{"class":264},[254,139050,132226],{"class":313},[254,139052,129622],{"class":264},[14,139054,138571],{},[245,139056,139057],{"className":126692,"code":132124,"language":126694,"meta":174,"style":174},[251,139058,139059,139063,139077,139081,139095,139099,139113,139117,139131,139135],{"__ignoreMap":174},[254,139060,139061],{"class":256,"line":257},[254,139062,132131],{"class":323},[254,139064,139065,139067,139069,139071,139073,139075],{"class":256,"line":175},[254,139066,132136],{"class":2103},[254,139068,79948],{"class":264},[254,139070,129052],{"class":313},[254,139072,51578],{"class":264},[254,139074,132145],{"class":313},[254,139076,129622],{"class":264},[254,139078,139079],{"class":256,"line":1319},[254,139080,132152],{"class":323},[254,139082,139083,139085,139087,139089,139091,139093],{"class":256,"line":1334},[254,139084,132157],{"class":2103},[254,139086,79948],{"class":264},[254,139088,129052],{"class":313},[254,139090,51578],{"class":264},[254,139092,54905],{"class":313},[254,139094,129622],{"class":264},[254,139096,139097],{"class":256,"line":1340},[254,139098,132172],{"class":323},[254,139100,139101,139103,139105,139107,139109,139111],{"class":256,"line":1354},[254,139102,132177],{"class":2103},[254,139104,79948],{"class":264},[254,139106,129052],{"class":313},[254,139108,51578],{"class":264},[254,139110,54972],{"class":313},[254,139112,129622],{"class":264},[254,139114,139115],{"class":256,"line":1360},[254,139116,132192],{"class":323},[254,139118,139119,139121,139123,139125,139127,139129],{"class":256,"line":1451},[254,139120,132197],{"class":2103},[254,139122,79948],{"class":264},[254,139124,129052],{"class":313},[254,139126,51578],{"class":264},[254,139128,86374],{"class":313},[254,139130,129622],{"class":264},[254,139132,139133],{"class":256,"line":1457},[254,139134,132212],{"class":323},[254,139136,139137,139139,139141,139143,139145,139147],{"class":256,"line":1469},[254,139138,132217],{"class":2103},[254,139140,79948],{"class":264},[254,139142,129052],{"class":313},[254,139144,51578],{"class":264},[254,139146,132226],{"class":313},[254,139148,129622],{"class":264},[225,139150,139152,139153,139155],{"id":139151},"_1544-nav导航模块制作","15.4.4 ",[251,139154,53854],{},"导航模块制作",[1602,139157],{"style":126548,"src":139158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[14,139160,139161,139163],{},[251,139162,53854],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[14,139165,139166,139167],{},"1 号盒子左侧浮动，",[251,139168,139169],{},"dropdown",[1271,139171,139172,139182,139190,139196,139204,139214,139222,139233],{},[24,139173,139174,139175,101159,139178,139181],{},"1号盒子有讲究，根据相关性 里面包含 ",[251,139176,139177],{},".dt",[251,139179,139180],{},".dd"," 两个盒子",[24,139183,139184,139186,139187,139189],{},[251,139185,139177],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[251,139188,139180],{}," 挤到下面去了",[24,139191,139192,139193,139195],{},"给 ",[251,139194,139180],{}," 盒子设置宽度 和 高度，以及背景颜色",[24,139197,139192,139198,139200,139201,120377],{},[251,139199,139180],{}," 盒子里面定义 无序列表 （",[251,139202,139203],{},"ul > li > a",[24,139205,139206,139207,139209,139210,139213],{},"每个 ",[251,139208,24],{}," 都有一个高度（",[251,139211,139212],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[24,139215,139192,139216,139218,139219,120377],{},[251,139217,24],{}," 里面的a设置文字大小（",[251,139220,139221],{},"14px",[24,139223,139192,139224,139226,139227,139229,139230,139232],{},[251,139225,24],{}," 设置 ",[251,139228,127853],{},"，当鼠标移入的时候，让",[251,139231,24],{},"的背景变成白色，让里面的文字变成红色",[24,139234,139235,139237,139238,139240,139241,139243],{},[251,139236,24],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[251,139239,24],{},"的右侧，那么给",[251,139242,24],{},"设置相对定位",[14,139245,139246],{},"一定要注意相关性",[14,139248,138531],{},[245,139250,139251],{"className":126692,"code":138534,"language":126694,"meta":174,"style":174},[251,139252,139253,139261,139271,139281],{"__ignoreMap":174},[254,139254,139255,139257,139259],{"class":256,"line":257},[254,139256,51752],{"class":51441},[254,139258,137693],{"class":2103},[254,139260,15713],{"class":264},[254,139262,139263,139265,139267,139269],{"class":256,"line":175},[254,139264,137700],{"class":313},[254,139266,51578],{"class":264},[254,139268,7793],{"class":369},[254,139270,1430],{"class":264},[254,139272,139273,139275,139277,139279],{"class":256,"line":1319},[254,139274,128308],{"class":313},[254,139276,51578],{"class":264},[254,139278,61010],{"class":313},[254,139280,1430],{"class":264},[254,139282,139283],{"class":256,"line":1334},[254,139284,1705],{"class":264},[14,139286,138571],{},[245,139288,139289],{"className":126692,"code":138534,"language":126694,"meta":174,"style":174},[251,139290,139291,139299,139309,139319],{"__ignoreMap":174},[254,139292,139293,139295,139297],{"class":256,"line":257},[254,139294,51752],{"class":51441},[254,139296,137693],{"class":2103},[254,139298,15713],{"class":264},[254,139300,139301,139303,139305,139307],{"class":256,"line":175},[254,139302,137700],{"class":313},[254,139304,51578],{"class":264},[254,139306,7793],{"class":369},[254,139308,1430],{"class":264},[254,139310,139311,139313,139315,139317],{"class":256,"line":1319},[254,139312,128308],{"class":313},[254,139314,51578],{"class":264},[254,139316,61010],{"class":313},[254,139318,1430],{"class":264},[254,139320,139321],{"class":256,"line":1334},[254,139322,1705],{"class":264},[14,139324,139325],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[14,139327,139328,139329,139332],{},"2 号盒子左侧浮动，",[251,139330,139331],{},"navitems"," 导航栏组",[1271,139334,139335,139340,139349],{},[24,139336,139337,139338],{},"里面结构是 ",[251,139339,139203],{},[24,139341,139342,139343,139345,139346,139348],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[251,139344,42],{},"左右的",[251,139347,31024],{},"把两侧撑开",[24,139350,139351],{},"让文字垂直居中（行高等于高度）",[1602,139353],{"style":126548,"src":139354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[14,139356,139357],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[14,139359,138531],{},[245,139361,139363],{"className":126692,"code":139362,"language":126694,"meta":174,"style":174},".box {\n  float: left;\n}\n",[251,139364,139365,139371,139381],{"__ignoreMap":174},[254,139366,139367,139369],{"class":256,"line":257},[254,139368,130540],{"class":2103},[254,139370,15713],{"class":264},[254,139372,139373,139375,139377,139379],{"class":256,"line":175},[254,139374,131172],{"class":313},[254,139376,51578],{"class":264},[254,139378,23877],{"class":313},[254,139380,1430],{"class":264},[254,139382,139383],{"class":256,"line":1319},[254,139384,1705],{"class":264},[14,139386,138571],{},[245,139388,139389],{"className":126692,"code":139362,"language":126694,"meta":174,"style":174},[251,139390,139391,139397,139407],{"__ignoreMap":174},[254,139392,139393,139395],{"class":256,"line":257},[254,139394,130540],{"class":2103},[254,139396,15713],{"class":264},[254,139398,139399,139401,139403,139405],{"class":256,"line":175},[254,139400,131172],{"class":313},[254,139402,51578],{"class":264},[254,139404,23877],{"class":313},[254,139406,1430],{"class":264},[254,139408,139409],{"class":256,"line":1319},[254,139410,1705],{"class":264},[14,139412,139413],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[1602,139415],{"style":126548,"src":139416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[245,139418,139419],{"className":126692,"code":130849,"language":126694,"meta":174,"style":174},[251,139420,139421,139427,139443],{"__ignoreMap":174},[254,139422,139423,139425],{"class":256,"line":257},[254,139424,51752],{"class":51441},[254,139426,15713],{"class":264},[254,139428,139429,139431,139433,139435,139437,139439,139441],{"class":256,"line":175},[254,139430,71037],{"class":313},[254,139432,51578],{"class":264},[254,139434,482],{"class":313},[254,139436,51633],{"class":260},[254,139438,51662],{"class":313},[254,139440,130084],{"class":313},[254,139442,1430],{"class":264},[254,139444,139445],{"class":256,"line":1319},[254,139446,1705],{"class":264},[225,139448,139450],{"id":139449},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[1602,139452],{"style":126548,"src":139453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[1271,139455,139456,139461,139466],{},[24,139457,139458,139460],{},[251,139459,131895],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[24,139462,139463,139465],{},[251,139464,131895],{}," 里面有一个大的版心",[24,139467,139468,139469,139472,139473],{},"版心里面包含 1 号盒子，",[251,139470,139471],{},"mod_service"," 是服务模块，mod 是模块的意思",[1271,139474,139475,139480,139493,139509,139514],{},[24,139476,139192,139477,139479],{},[251,139478,139471],{}," 设置高度（80px）和下边框",[24,139481,139482,139483,139486,139487,139489,139490,139492],{},"在里面定义 ",[251,139484,139485],{},"ul > li"," ,每个",[251,139488,24],{}," 宽度是300px 高度是 50px，给每个",[251,139491,24],{},"设置35px的左内边距",[24,139494,139495,139496,139498,139499,139501,139502,139504,139505,18551,139507,120377],{},"在每个",[251,139497,24],{},"里面，放一个 ",[251,139500,23051],{},"（里面放图标），一个",[251,139503,51752],{},"（里面放",[251,139506,51752],{},[251,139508,14],{},[24,139510,139192,139511,139513],{},[251,139512,23051],{},"设置浮动，让h5与这个div左右排列",[24,139515,139516],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[14,139518,138531],{},[245,139520,139522],{"className":126692,"code":139521,"language":126694,"meta":174,"style":174},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[251,139523,139524,139530,139542,139554,139581],{"__ignoreMap":174},[254,139525,139526,139528],{"class":256,"line":257},[254,139527,134449],{"class":2103},[254,139529,15713],{"class":264},[254,139531,139532,139534,139536,139538,139540],{"class":256,"line":175},[254,139533,70709],{"class":313},[254,139535,51578],{"class":264},[254,139537,964],{"class":313},[254,139539,51633],{"class":260},[254,139541,1430],{"class":264},[254,139543,139544,139546,139548,139550,139552],{"class":256,"line":1319},[254,139545,70929],{"class":313},[254,139547,51578],{"class":264},[254,139549,964],{"class":313},[254,139551,51633],{"class":260},[254,139553,1430],{"class":264},[254,139555,139556,139558,139560,139562,139564,139566,139568,139570,139573,139575,139577,139579],{"class":256,"line":1334},[254,139557,70752],{"class":313},[254,139559,51578],{"class":264},[254,139561,61867],{"class":313},[254,139563,265],{"class":264},[254,139565,134488],{"class":5357},[254,139567,13855],{"class":264},[254,139569,61877],{"class":313},[254,139571,139572],{"class":313}," -10",[254,139574,51633],{"class":260},[254,139576,134507],{"class":313},[254,139578,51633],{"class":260},[254,139580,1430],{"class":264},[254,139582,139583],{"class":256,"line":1340},[254,139584,1705],{"class":264},[14,139586,138571],{},[245,139588,139589],{"className":126692,"code":139521,"language":126694,"meta":174,"style":174},[251,139590,139591,139597,139609,139621,139647],{"__ignoreMap":174},[254,139592,139593,139595],{"class":256,"line":257},[254,139594,134449],{"class":2103},[254,139596,15713],{"class":264},[254,139598,139599,139601,139603,139605,139607],{"class":256,"line":175},[254,139600,70709],{"class":313},[254,139602,51578],{"class":264},[254,139604,964],{"class":313},[254,139606,51633],{"class":260},[254,139608,1430],{"class":264},[254,139610,139611,139613,139615,139617,139619],{"class":256,"line":1319},[254,139612,70929],{"class":313},[254,139614,51578],{"class":264},[254,139616,964],{"class":313},[254,139618,51633],{"class":260},[254,139620,1430],{"class":264},[254,139622,139623,139625,139627,139629,139631,139633,139635,139637,139639,139641,139643,139645],{"class":256,"line":1334},[254,139624,70752],{"class":313},[254,139626,51578],{"class":264},[254,139628,61867],{"class":313},[254,139630,265],{"class":264},[254,139632,134488],{"class":5357},[254,139634,13855],{"class":264},[254,139636,61877],{"class":313},[254,139638,139572],{"class":313},[254,139640,51633],{"class":260},[254,139642,134507],{"class":313},[254,139644,51633],{"class":260},[254,139646,1430],{"class":264},[254,139648,139649],{"class":256,"line":1340},[254,139650,1705],{"class":264},[14,139652,139653],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[1271,139655,139656,139659,139665,139671,139683],{},[24,139657,139658],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[24,139660,139661,139662,120377],{},"里面的布局利用 自定义列表来实现（",[251,139663,139664],{},"dl > dt + dd",[24,139666,139192,139667,139670],{},[251,139668,139669],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[24,139672,139192,139673,139676,139677,18551,139679,139682],{},[251,139674,139675],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[251,139678,139675],{},[251,139680,139681],{},"dd","之间有些距离",[24,139684,139685],{},"最后一个 dl 结构和样式不一样，需要单独设置",[14,139687,138531],{},[245,139689,139690],{"className":126692,"code":138881,"language":126694,"meta":174,"style":174},[251,139691,139692,139698,139710],{"__ignoreMap":174},[254,139693,139694,139696],{"class":256,"line":257},[254,139695,51752],{"class":51441},[254,139697,15713],{"class":264},[254,139699,139700,139702,139704,139706,139708],{"class":256,"line":175},[254,139701,70611],{"class":313},[254,139703,51578],{"class":264},[254,139705,456],{"class":313},[254,139707,51697],{"class":313},[254,139709,1430],{"class":264},[254,139711,139712],{"class":256,"line":1319},[254,139713,1705],{"class":264},[14,139715,138571],{},[245,139717,139718],{"className":126692,"code":138881,"language":126694,"meta":174,"style":174},[251,139719,139720,139726,139738],{"__ignoreMap":174},[254,139721,139722,139724],{"class":256,"line":257},[254,139723,51752],{"class":51441},[254,139725,15713],{"class":264},[254,139727,139728,139730,139732,139734,139736],{"class":256,"line":175},[254,139729,70611],{"class":313},[254,139731,51578],{"class":264},[254,139733,456],{"class":313},[254,139735,51697],{"class":313},[254,139737,1430],{"class":264},[254,139739,139740],{"class":256,"line":1319},[254,139741,1705],{"class":264},[14,139743,139744],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[1271,139746,139747,139756,139759,139770],{},[24,139748,139749,139750,139752,139753,139755],{},"分为上下两块，上面是 ",[251,139751,131912],{}," 友情链接，下面是 ",[251,139754,131905],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[24,139757,139758],{},"把内容分别复制到相应模块中",[24,139760,139192,139761,139763,139764,139766,139767,139769],{},[251,139762,131912],{}," 设置 15px 的下外边距，给",[251,139765,131912],{}," 里面 的 ",[251,139768,42],{}," 标签设置 左右 3px 的外边距",[24,139771,139772,139773,139775],{},"给",[251,139774,131905],{}," 设置 20px 的行高",[14,139777,138531],{},[245,139779,139780],{"className":126692,"code":138881,"language":126694,"meta":174,"style":174},[251,139781,139782,139788,139800],{"__ignoreMap":174},[254,139783,139784,139786],{"class":256,"line":257},[254,139785,51752],{"class":51441},[254,139787,15713],{"class":264},[254,139789,139790,139792,139794,139796,139798],{"class":256,"line":175},[254,139791,70611],{"class":313},[254,139793,51578],{"class":264},[254,139795,456],{"class":313},[254,139797,51697],{"class":313},[254,139799,1430],{"class":264},[254,139801,139802],{"class":256,"line":1319},[254,139803,1705],{"class":264},[14,139805,138571],{},[245,139807,139808],{"className":126692,"code":138881,"language":126694,"meta":174,"style":174},[251,139809,139810,139816,139828],{"__ignoreMap":174},[254,139811,139812,139814],{"class":256,"line":257},[254,139813,51752],{"class":51441},[254,139815,15713],{"class":264},[254,139817,139818,139820,139822,139824,139826],{"class":256,"line":175},[254,139819,70611],{"class":313},[254,139821,51578],{"class":264},[254,139823,456],{"class":313},[254,139825,51697],{"class":313},[254,139827,1430],{"class":264},[254,139829,139830],{"class":256,"line":1319},[254,139831,1705],{"class":264},[14,139833,139834],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[5267,139836,139837],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":174,"searchDepth":175,"depth":175,"links":139839},[139840,139841,139842,139849],{"id":138120,"depth":175,"text":138121},{"id":138139,"depth":175,"text":138140},{"id":138166,"depth":175,"text":138167,"children":139843},[139844,139845,139846,139847,139848],{"id":138170,"depth":1319,"text":138171},{"id":138183,"depth":1319,"text":138184},{"id":138207,"depth":1319,"text":138208},{"id":138229,"depth":1319,"text":138230},{"id":138301,"depth":1319,"text":138302},{"id":138427,"depth":175,"text":138428,"children":139850},[139851,139852,139853,139854,139856],{"id":138431,"depth":1319,"text":138432},{"id":138438,"depth":1319,"text":138439},{"id":138610,"depth":1319,"text":138611},{"id":139151,"depth":1319,"text":139855},"15.4.4 nav导航模块制作",{"id":139449,"depth":1319,"text":139450},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":138112,"description":23518},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":139863,"title":139864,"body":139865,"description":23518,"extension":181,"meta":142267,"navigation":184,"path":142268,"seo":142269,"stem":142270,"__hash__":142271},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":139866,"toc":142244},[139867,139870,139874,139878,139890,139893,139896,139899,139910,139912,139936,139938,139962,139967,139970,139972,140008,140010,140046,140049,140054,140057,140060,140063,140093,140100,140103,140113,140115,140149,140152,140186,140192,140209,140211,140247,140249,140285,140290,140315,140317,140343,140345,140369,140376,140379,140443,140445,140487,140489,140529,140536,140541,140543,140573,140575,140605,140609,140612,140619,140631,140633,140659,140661,140685,140688,140690,140714,140720,140730,140732,140762,140764,140794,140801,140842,140844,140880,140882,140918,140922,140925,140928,140931,140937,140942,140945,140968,140971,140995,140998,141022,141027,141030,141033,141036,141039,141042,141116,141118,141148,141150,141180,141183,141186,141218,141222,141226,141240,141249,141252,141257,141259,141353,141355,141449,141472,141474,141498,141500,141524,141531,141534,141544,141546,141570,141575,141583,141585,141615,141620,141660,141662,141688,141690,141716,141720,141723,141728,141731,141735,141743,141750,141758,141760,141790,141792,141822,141830,141833,141836,141838,141868,141870,141900,141903,141908,141910,141934,141936,141960,141963,142048,142050,142074,142076,142100,142104,142106,142130,142132,142166,142170,142184,142187,142192,142195,142200,142203,142233,142241],[10,139868,139864],{"id":139869},"_16-品优购项目下篇-主体与页面开发",[34,139871,139873],{"id":139872},"_161-项目主体模块制作","16.1 项目主体模块制作",[225,139875,139877],{"id":139876},"_1611-首页制作","16.1.1 首页制作",[14,139879,139880,139882,139883,139885,139886,139889],{},[414,139881,102199],{}," 主体模块是 ",[414,139884,74199],{}," 里面专有的，注意需要新的样式文件 ",[414,139887,139888],{},"index.css，"," 就不要写在common.css中了",[1602,139891],{"style":126548,"src":139892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[1602,139894],{"style":126548,"src":139895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[14,139897,139898],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[1271,139900,139901,139904,139907],{},[24,139902,139903],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[24,139905,139906],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[24,139908,139909],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[14,139911,138531],{},[245,139913,139914],{"className":126692,"code":139362,"language":126694,"meta":174,"style":174},[251,139915,139916,139922,139932],{"__ignoreMap":174},[254,139917,139918,139920],{"class":256,"line":257},[254,139919,130540],{"class":2103},[254,139921,15713],{"class":264},[254,139923,139924,139926,139928,139930],{"class":256,"line":175},[254,139925,131172],{"class":313},[254,139927,51578],{"class":264},[254,139929,23877],{"class":313},[254,139931,1430],{"class":264},[254,139933,139934],{"class":256,"line":1319},[254,139935,1705],{"class":264},[14,139937,138571],{},[245,139939,139940],{"className":126692,"code":139362,"language":126694,"meta":174,"style":174},[251,139941,139942,139948,139958],{"__ignoreMap":174},[254,139943,139944,139946],{"class":256,"line":257},[254,139945,130540],{"class":2103},[254,139947,15713],{"class":264},[254,139949,139950,139952,139954,139956],{"class":256,"line":175},[254,139951,131172],{"class":313},[254,139953,51578],{"class":264},[254,139955,23877],{"class":313},[254,139957,1430],{"class":264},[254,139959,139960],{"class":256,"line":1319},[254,139961,1705],{"class":264},[21,139963,139964],{},[24,139965,139966],{},"左侧focus模块制作",[1602,139968],{"style":126548,"src":139969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[14,139971,138531],{},[245,139973,139974],{"className":126692,"code":128015,"language":126694,"meta":174,"style":174},[251,139975,139976,139984,139994,140004],{"__ignoreMap":174},[254,139977,139978,139980,139982],{"class":256,"line":257},[254,139979,53962],{"class":51441},[254,139981,62041],{"class":2103},[254,139983,15713],{"class":264},[254,139985,139986,139988,139990,139992],{"class":256,"line":175},[254,139987,128030],{"class":313},[254,139989,51578],{"class":264},[254,139991,55030],{"class":313},[254,139993,1430],{"class":264},[254,139995,139996,139998,140000,140002],{"class":256,"line":1319},[254,139997,70939],{"class":313},[254,139999,51578],{"class":264},[254,140001,54878],{"class":313},[254,140003,1430],{"class":264},[254,140005,140006],{"class":256,"line":1334},[254,140007,1705],{"class":264},[14,140009,138571],{},[245,140011,140012],{"className":126692,"code":128015,"language":126694,"meta":174,"style":174},[251,140013,140014,140022,140032,140042],{"__ignoreMap":174},[254,140015,140016,140018,140020],{"class":256,"line":257},[254,140017,53962],{"class":51441},[254,140019,62041],{"class":2103},[254,140021,15713],{"class":264},[254,140023,140024,140026,140028,140030],{"class":256,"line":175},[254,140025,128030],{"class":313},[254,140027,51578],{"class":264},[254,140029,55030],{"class":313},[254,140031,1430],{"class":264},[254,140033,140034,140036,140038,140040],{"class":256,"line":1319},[254,140035,70939],{"class":313},[254,140037,51578],{"class":264},[254,140039,54878],{"class":313},[254,140041,1430],{"class":264},[254,140043,140044],{"class":256,"line":1334},[254,140045,1705],{"class":264},[14,140047,140048],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[21,140050,140051],{"start":175},[24,140052,140053],{},"右侧newsflash模块制作",[1602,140055],{"style":126548,"src":140056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[14,140058,140059],{},"右侧的模块 分为上中下三个盒子",[14,140061,140062],{},"结构代码：",[245,140064,140065],{"className":127439,"code":134194,"language":127441,"meta":174,"style":174},[251,140066,140067],{"__ignoreMap":174},[254,140068,140069,140071,140073,140075,140077,140079,140081,140083,140085,140087,140089,140091],{"class":256,"line":257},[254,140070,1174],{"class":264},[254,140072,1602],{"class":51441},[254,140074,55380],{"class":2103},[254,140076,310],{"class":264},[254,140078,134209],{"class":369},[254,140080,55388],{"class":2103},[254,140082,310],{"class":264},[254,140084,134216],{"class":369},[254,140086,134219],{"class":2103},[254,140088,310],{"class":264},[254,140090,134224],{"class":369},[254,140092,51448],{"class":264},[14,140094,140095,140096,140099],{},"1 号盒子为 ",[251,140097,140098],{},"news"," 新闻模块 高度为 165px",[1602,140101],{"style":126548,"src":140102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[14,140104,140105,140106,140109,140110],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[251,140107,140108],{},"news-hd","，下面是 ",[251,140111,140112],{},"news-bd",[14,140114,140062],{},[245,140116,140117],{"className":127439,"code":130796,"language":127441,"meta":174,"style":174},[251,140118,140119,140123,140137,140141],{"__ignoreMap":174},[254,140120,140121],{"class":256,"line":257},[254,140122,130803],{"class":323},[254,140124,140125,140127,140129,140131,140133,140135],{"class":256,"line":175},[254,140126,1174],{"class":264},[254,140128,51752],{"class":51441},[254,140130,53627],{"class":2103},[254,140132,310],{"class":264},[254,140134,130816],{"class":369},[254,140136,51448],{"class":264},[254,140138,140139],{"class":256,"line":1319},[254,140140,130823],{"class":264},[254,140142,140143,140145,140147],{"class":256,"line":1334},[254,140144,51926],{"class":264},[254,140146,51752],{"class":51441},[254,140148,51448],{"class":264},[14,140150,140151],{},"样式代码：",[245,140153,140154],{"className":127439,"code":130796,"language":127441,"meta":174,"style":174},[251,140155,140156,140160,140174,140178],{"__ignoreMap":174},[254,140157,140158],{"class":256,"line":257},[254,140159,130803],{"class":323},[254,140161,140162,140164,140166,140168,140170,140172],{"class":256,"line":175},[254,140163,1174],{"class":264},[254,140165,51752],{"class":51441},[254,140167,53627],{"class":2103},[254,140169,310],{"class":264},[254,140171,130816],{"class":369},[254,140173,51448],{"class":264},[254,140175,140176],{"class":256,"line":1319},[254,140177,130823],{"class":264},[254,140179,140180,140182,140184],{"class":256,"line":1334},[254,140181,51926],{"class":264},[254,140183,51752],{"class":51441},[254,140185,51448],{"class":264},[14,140187,140188,140189,140191],{},"上面是",[251,140190,140108],{},"，设置高度是 33px，设置下边框",[1271,140193,140194,140200],{},[24,140195,140196,140197,140199],{},"里面放一个",[251,140198,23051],{}," 标题",[24,140201,140202,140203,140205,140206,140208],{},"放一个a",[251,140204,102834],{},"，内容是 更多，然后让 ",[251,140207,42],{}," 进行右浮动，三角用伪元素设置字体图标就好",[14,140210,140062],{},[245,140212,140213],{"className":126692,"code":138534,"language":126694,"meta":174,"style":174},[251,140214,140215,140223,140233,140243],{"__ignoreMap":174},[254,140216,140217,140219,140221],{"class":256,"line":257},[254,140218,51752],{"class":51441},[254,140220,137693],{"class":2103},[254,140222,15713],{"class":264},[254,140224,140225,140227,140229,140231],{"class":256,"line":175},[254,140226,137700],{"class":313},[254,140228,51578],{"class":264},[254,140230,7793],{"class":369},[254,140232,1430],{"class":264},[254,140234,140235,140237,140239,140241],{"class":256,"line":1319},[254,140236,128308],{"class":313},[254,140238,51578],{"class":264},[254,140240,61010],{"class":313},[254,140242,1430],{"class":264},[254,140244,140245],{"class":256,"line":1334},[254,140246,1705],{"class":264},[14,140248,140151],{},[245,140250,140251],{"className":126692,"code":138534,"language":126694,"meta":174,"style":174},[251,140252,140253,140261,140271,140281],{"__ignoreMap":174},[254,140254,140255,140257,140259],{"class":256,"line":257},[254,140256,51752],{"class":51441},[254,140258,137693],{"class":2103},[254,140260,15713],{"class":264},[254,140262,140263,140265,140267,140269],{"class":256,"line":175},[254,140264,137700],{"class":313},[254,140266,51578],{"class":264},[254,140268,7793],{"class":369},[254,140270,1430],{"class":264},[254,140272,140273,140275,140277,140279],{"class":256,"line":1319},[254,140274,128308],{"class":313},[254,140276,51578],{"class":264},[254,140278,61010],{"class":313},[254,140280,1430],{"class":264},[254,140282,140283],{"class":256,"line":1334},[254,140284,1705],{"class":264},[14,140286,140287,140288],{},"下面是",[251,140289,140112],{},[1271,140291,140292,140300],{},[24,140293,140294,140295,101159,140297,140299],{},"里面包含 ",[251,140296,1271],{},[251,140298,24],{}," 还有链接",[24,140301,139772,140302,140304,140305,140307,140308,140311,140312],{},[251,140303,24],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[251,140306,131358],{}," 2.设置 ",[251,140309,140310],{},"white-space: nowrap;"," 3. 设置 ",[251,140313,140314],{},"text-overflow: ellipsis;",[14,140316,140062],{},[245,140318,140320],{"className":126692,"code":140319,"language":126694,"meta":174,"style":174},"div {\n  overflow: hidden;\n}\n",[251,140321,140322,140328,140339],{"__ignoreMap":174},[254,140323,140324,140326],{"class":256,"line":257},[254,140325,51752],{"class":51441},[254,140327,15713],{"class":264},[254,140329,140330,140333,140335,140337],{"class":256,"line":175},[254,140331,140332],{"class":313},"  overflow",[254,140334,51578],{"class":264},[254,140336,61855],{"class":313},[254,140338,1430],{"class":264},[254,140340,140341],{"class":256,"line":1319},[254,140342,1705],{"class":264},[14,140344,140151],{},[245,140346,140347],{"className":126692,"code":140319,"language":126694,"meta":174,"style":174},[251,140348,140349,140355,140365],{"__ignoreMap":174},[254,140350,140351,140353],{"class":256,"line":257},[254,140352,51752],{"class":51441},[254,140354,15713],{"class":264},[254,140356,140357,140359,140361,140363],{"class":256,"line":175},[254,140358,140332],{"class":313},[254,140360,51578],{"class":264},[254,140362,61855],{"class":313},[254,140364,1430],{"class":264},[254,140366,140367],{"class":256,"line":1319},[254,140368,1705],{"class":264},[14,140370,140371,140372,140375],{},"2 号盒子为 ",[251,140373,140374],{},"lifeservice"," 生活服务模块 高度为 209px",[1602,140377],{"style":126548,"src":140378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[1271,140380,140381,140384,140394,140418,140429],{},[24,140382,140383],{},"设置边框（左右下边框）",[24,140385,140386,140387,140390,140391,140393],{},"里面的内容 是 ",[251,140388,140389],{},"ul > 12*li","，给",[251,140392,24],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[24,140395,140396,140397],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[1271,140398,140399,140404,140413],{},[24,140400,140401,140403],{},[251,140402,140374],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[24,140405,140406,140407,140409,140410,140412],{},"可以让 ",[251,140408,140374],{}," 里面的 ",[251,140411,1271],{}," 宽度为 252，就可以装的下 4 个 小 li",[24,140414,140415,140417],{},[251,140416,140374],{}," 盒子 overflow 隐藏多余的部分就可以了",[24,140419,116608,140420,140422,140423,140425,140426,140428],{},[251,140421,24],{}," 里面放一个 ",[251,140424,705],{},"（里面放图标），下面的文本用 ",[251,140427,14],{}," 标签包裹",[24,140430,139192,140431,140433,140434,140436,140437,139226,140439,140442],{},[251,140432,705],{}," 设置 24px宽和28px的高（注意 ",[251,140435,705],{}," 是行内元素， 转成行内块），给 ",[251,140438,24],{},[251,140440,140441],{},"text-align:center"," 让里面内容居中显示",[14,140444,140062],{},[245,140446,140448],{"className":126692,"code":140447,"language":126694,"meta":174,"style":174},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[251,140449,140450,140468,140473,140483],{"__ignoreMap":174},[254,140451,140452,140454,140456,140458,140460,140462,140464,140466],{"class":256,"line":257},[254,140453,254],{"class":51441},[254,140455,12576],{"class":264},[254,140457,42],{"class":51441},[254,140459,12576],{"class":264},[254,140461,23694],{"class":51441},[254,140463,12576],{"class":264},[254,140465,414],{"class":51441},[254,140467,15713],{"class":264},[254,140469,140470],{"class":256,"line":175},[254,140471,140472],{"class":323},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[254,140474,140475,140477,140479,140481],{"class":256,"line":1319},[254,140476,128308],{"class":313},[254,140478,51578],{"class":264},[254,140480,128370],{"class":313},[254,140482,1430],{"class":264},[254,140484,140485],{"class":256,"line":1334},[254,140486,1705],{"class":264},[14,140488,140151],{},[245,140490,140491],{"className":126692,"code":140447,"language":126694,"meta":174,"style":174},[251,140492,140493,140511,140515,140525],{"__ignoreMap":174},[254,140494,140495,140497,140499,140501,140503,140505,140507,140509],{"class":256,"line":257},[254,140496,254],{"class":51441},[254,140498,12576],{"class":264},[254,140500,42],{"class":51441},[254,140502,12576],{"class":264},[254,140504,23694],{"class":51441},[254,140506,12576],{"class":264},[254,140508,414],{"class":51441},[254,140510,15713],{"class":264},[254,140512,140513],{"class":256,"line":175},[254,140514,140472],{"class":323},[254,140516,140517,140519,140521,140523],{"class":256,"line":1319},[254,140518,128308],{"class":313},[254,140520,51578],{"class":264},[254,140522,128370],{"class":313},[254,140524,1430],{"class":264},[254,140526,140527],{"class":256,"line":1334},[254,140528,1705],{"class":264},[14,140530,140531,140532,140535],{},"3 号盒子为 ",[251,140533,140534],{},"bargain"," 特价商品",[1271,140537,140538],{},[24,140539,140540],{},"这个比较简单，直接插入一张图片即可",[14,140542,140062],{},[245,140544,140545],{"className":127439,"code":134194,"language":127441,"meta":174,"style":174},[251,140546,140547],{"__ignoreMap":174},[254,140548,140549,140551,140553,140555,140557,140559,140561,140563,140565,140567,140569,140571],{"class":256,"line":257},[254,140550,1174],{"class":264},[254,140552,1602],{"class":51441},[254,140554,55380],{"class":2103},[254,140556,310],{"class":264},[254,140558,134209],{"class":369},[254,140560,55388],{"class":2103},[254,140562,310],{"class":264},[254,140564,134216],{"class":369},[254,140566,134219],{"class":2103},[254,140568,310],{"class":264},[254,140570,134224],{"class":369},[254,140572,51448],{"class":264},[14,140574,140151],{},[245,140576,140577],{"className":127439,"code":134194,"language":127441,"meta":174,"style":174},[251,140578,140579],{"__ignoreMap":174},[254,140580,140581,140583,140585,140587,140589,140591,140593,140595,140597,140599,140601,140603],{"class":256,"line":257},[254,140582,1174],{"class":264},[254,140584,1602],{"class":51441},[254,140586,55380],{"class":2103},[254,140588,310],{"class":264},[254,140590,134209],{"class":369},[254,140592,55388],{"class":2103},[254,140594,310],{"class":264},[254,140596,134216],{"class":369},[254,140598,134219],{"class":2103},[254,140600,310],{"class":264},[254,140602,134224],{"class":369},[254,140604,51448],{"class":264},[225,140606,140608],{"id":140607},"_1612-推荐模块制作","16.1.2 推荐模块制作",[1602,140610],{"style":126548,"src":140611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[14,140613,140614,140615,140618],{},"大盒子 ",[251,140616,140617],{},"recom"," 推荐模块 recommend",[1271,140620,140621],{},[24,140622,140623,140624,140626,140627,140630],{},"给这个 ",[251,140625,140617],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[251,140628,140629],{},"#ebebeb","），设置距离上边 12px",[14,140632,140062],{},[245,140634,140636],{"className":126692,"code":140635,"language":126694,"meta":174,"style":174},"div {\n  background-color: #f0f0f0;\n}\n",[251,140637,140638,140644,140655],{"__ignoreMap":174},[254,140639,140640,140642],{"class":256,"line":257},[254,140641,51752],{"class":51441},[254,140643,15713],{"class":264},[254,140645,140646,140648,140650,140653],{"class":256,"line":175},[254,140647,71019],{"class":313},[254,140649,51578],{"class":264},[254,140651,140652],{"class":313},"#f0f0f0",[254,140654,1430],{"class":264},[254,140656,140657],{"class":256,"line":1319},[254,140658,1705],{"class":264},[14,140660,140151],{},[245,140662,140663],{"className":126692,"code":140635,"language":126694,"meta":174,"style":174},[251,140664,140665,140671,140681],{"__ignoreMap":174},[254,140666,140667,140669],{"class":256,"line":257},[254,140668,51752],{"class":51441},[254,140670,15713],{"class":264},[254,140672,140673,140675,140677,140679],{"class":256,"line":175},[254,140674,71019],{"class":313},[254,140676,51578],{"class":264},[254,140678,140652],{"class":313},[254,140680,1430],{"class":264},[254,140682,140683],{"class":256,"line":1319},[254,140684,1705],{"class":264},[14,140686,140687],{},"里面包含 2 个盒子， 浮动即可",[14,140689,140062],{},[245,140691,140692],{"className":126692,"code":139362,"language":126694,"meta":174,"style":174},[251,140693,140694,140700,140710],{"__ignoreMap":174},[254,140695,140696,140698],{"class":256,"line":257},[254,140697,130540],{"class":2103},[254,140699,15713],{"class":264},[254,140701,140702,140704,140706,140708],{"class":256,"line":175},[254,140703,131172],{"class":313},[254,140705,51578],{"class":264},[254,140707,23877],{"class":313},[254,140709,1430],{"class":264},[254,140711,140712],{"class":256,"line":1319},[254,140713,1705],{"class":264},[14,140715,140716,140717],{},"1 号盒子 ",[251,140718,140719],{},"recom_hd",[1271,140721,140722,140725],{},[24,140723,140724],{},"设置宽度205px，高度163px",[24,140726,140196,140727,140729],{},[251,140728,1602],{},"标签，插入图片即可",[14,140731,140062],{},[245,140733,140734],{"className":127439,"code":134194,"language":127441,"meta":174,"style":174},[251,140735,140736],{"__ignoreMap":174},[254,140737,140738,140740,140742,140744,140746,140748,140750,140752,140754,140756,140758,140760],{"class":256,"line":257},[254,140739,1174],{"class":264},[254,140741,1602],{"class":51441},[254,140743,55380],{"class":2103},[254,140745,310],{"class":264},[254,140747,134209],{"class":369},[254,140749,55388],{"class":2103},[254,140751,310],{"class":264},[254,140753,134216],{"class":369},[254,140755,134219],{"class":2103},[254,140757,310],{"class":264},[254,140759,134224],{"class":369},[254,140761,51448],{"class":264},[14,140763,140151],{},[245,140765,140766],{"className":127439,"code":134194,"language":127441,"meta":174,"style":174},[251,140767,140768],{"__ignoreMap":174},[254,140769,140770,140772,140774,140776,140778,140780,140782,140784,140786,140788,140790,140792],{"class":256,"line":257},[254,140771,1174],{"class":264},[254,140773,1602],{"class":51441},[254,140775,55380],{"class":2103},[254,140777,310],{"class":264},[254,140779,134209],{"class":369},[254,140781,55388],{"class":2103},[254,140783,310],{"class":264},[254,140785,134216],{"class":369},[254,140787,134219],{"class":2103},[254,140789,310],{"class":264},[254,140791,134224],{"class":369},[254,140793,51448],{"class":264},[14,140795,140796,140797,140800],{},"2 号盒子 ",[251,140798,140799],{},"recom_bd"," ，注意里面的小竖线",[1271,140802,140803,140814,140817,140822,140827],{},[24,140804,140805,140806,140808,140809,140811,140812],{},"右侧结构里面放 ",[251,140807,1271],{}," 包含 4个 ",[251,140810,24],{},"，每个li里面包含一个",[251,140813,1602],{},[24,140815,140816],{},"直接利用切片工具把里面的内容当成一张图片",[24,140818,139192,140819,140821],{},[251,140820,24],{}," 设置浮动",[24,140823,139192,140824,140826],{},[251,140825,1602],{}," 设置宽高，宽度 248px，高度 163px",[24,140828,140829,140830,140390,140833,140835,140836,140838,140839],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[251,140831,140832],{},"top 10px",[251,140834,24],{},"设置相对定位（注意，最后一个",[251,140837,24],{},"不用设置伪元素），可以利用 ",[251,140840,140841],{},"nth-child(-n+3){...}",[14,140843,140062],{},[245,140845,140846],{"className":126692,"code":138534,"language":126694,"meta":174,"style":174},[251,140847,140848,140856,140866,140876],{"__ignoreMap":174},[254,140849,140850,140852,140854],{"class":256,"line":257},[254,140851,51752],{"class":51441},[254,140853,137693],{"class":2103},[254,140855,15713],{"class":264},[254,140857,140858,140860,140862,140864],{"class":256,"line":175},[254,140859,137700],{"class":313},[254,140861,51578],{"class":264},[254,140863,7793],{"class":369},[254,140865,1430],{"class":264},[254,140867,140868,140870,140872,140874],{"class":256,"line":1319},[254,140869,128308],{"class":313},[254,140871,51578],{"class":264},[254,140873,61010],{"class":313},[254,140875,1430],{"class":264},[254,140877,140878],{"class":256,"line":1334},[254,140879,1705],{"class":264},[14,140881,140151],{},[245,140883,140884],{"className":126692,"code":138534,"language":126694,"meta":174,"style":174},[251,140885,140886,140894,140904,140914],{"__ignoreMap":174},[254,140887,140888,140890,140892],{"class":256,"line":257},[254,140889,51752],{"class":51441},[254,140891,137693],{"class":2103},[254,140893,15713],{"class":264},[254,140895,140896,140898,140900,140902],{"class":256,"line":175},[254,140897,137700],{"class":313},[254,140899,51578],{"class":264},[254,140901,7793],{"class":369},[254,140903,1430],{"class":264},[254,140905,140906,140908,140910,140912],{"class":256,"line":1319},[254,140907,128308],{"class":313},[254,140909,51578],{"class":264},[254,140911,61010],{"class":313},[254,140913,1430],{"class":264},[254,140915,140916],{"class":256,"line":1334},[254,140917,1705],{"class":264},[225,140919,140921],{"id":140920},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[1602,140923],{"style":126548,"src":140924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[14,140926,140927],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[14,140929,140930],{},"第一楼是家用电器模块： 里面包含两个盒子",[14,140932,140933,140936],{},[251,140934,140935],{},"box_hd"," 制作",[14,140938,140716,140939,140941],{},[251,140940,140935],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[1602,140943],{"style":126548,"src":140944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[1271,140946,140947,140952,140957,140960],{},[24,140948,140949,140951],{},[251,140950,140935],{}," 给 30px 的高度，2个像素的下边框",[24,140953,140954,140955],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[251,140956,139203],{},[24,140958,140959],{},"左侧盒左浮动，右侧盒子右浮动",[24,140961,140962,140964,140965,140967],{},[251,140963,42],{},"标签之间的距离用左右的",[251,140966,31024],{},"撑开即可",[14,140969,140970],{},"结构代码",[245,140972,140973],{"className":126692,"code":139362,"language":126694,"meta":174,"style":174},[251,140974,140975,140981,140991],{"__ignoreMap":174},[254,140976,140977,140979],{"class":256,"line":257},[254,140978,130540],{"class":2103},[254,140980,15713],{"class":264},[254,140982,140983,140985,140987,140989],{"class":256,"line":175},[254,140984,131172],{"class":313},[254,140986,51578],{"class":264},[254,140988,23877],{"class":313},[254,140990,1430],{"class":264},[254,140992,140993],{"class":256,"line":1319},[254,140994,1705],{"class":264},[14,140996,140997],{},"样式代码",[245,140999,141000],{"className":126692,"code":139362,"language":126694,"meta":174,"style":174},[251,141001,141002,141008,141018],{"__ignoreMap":174},[254,141003,141004,141006],{"class":256,"line":257},[254,141005,130540],{"class":2103},[254,141007,15713],{"class":264},[254,141009,141010,141012,141014,141016],{"class":256,"line":175},[254,141011,131172],{"class":313},[254,141013,51578],{"class":264},[254,141015,23877],{"class":313},[254,141017,1430],{"class":264},[254,141019,141020],{"class":256,"line":1319},[254,141021,1705],{"class":264},[14,141023,141024,140936],{},[251,141025,141026],{},"box_bd",[14,141028,141029],{},"2 号盒子 box_bd，不要给高度",[1602,141031],{"style":126548,"src":141032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[14,141034,141035],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[14,141037,141038],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[14,141040,141041],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[1271,141043,141044,141056,141072],{},[24,141045,141046,141048,141049,141052,141053,141055],{},[251,141047,141026],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[251,141050,141051],{},"tab_content","，在",[251,141054,141051],{}," 里面包裹tab选项卡对应的内容",[24,141057,141058,141059,141062,141063,141065,141066,141068,141069,141071],{},"内容被一个大盒子包裹（",[251,141060,141061],{},"tab_list_item","），里面是 ",[251,141064,1271],{}," 包裹 5个 ",[251,141067,24],{},"，每个",[251,141070,24],{},"设置对应的宽度，然后设置浮动",[24,141073,141074,141075,141077,141078,141080,141081],{},"而这5个",[251,141076,24],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[251,141079,24],{},"设置",[1271,141082,141083,141101,141104],{},[24,141084,141085,141086,141088,141089,141091,141092,141094,141095,141097,141098,141100],{},"第一个小 ",[251,141087,24],{}," 分为上下结构，上面是 ",[251,141090,1271],{}," 包裹 ",[251,141093,24],{}," ，",[251,141096,24],{},"里面包裹 ",[251,141099,42],{},"，下面插入一张图片",[24,141102,141103],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[24,141105,141106,141107,141109,141110,141112,141113,141115],{},"后面的小 ",[251,141108,24],{}," 里面先放一个",[251,141111,42],{},"标签，然后在",[251,141114,42],{},"标签里面插入图片即可",[14,141117,140970],{},[245,141119,141120],{"className":127439,"code":134194,"language":127441,"meta":174,"style":174},[251,141121,141122],{"__ignoreMap":174},[254,141123,141124,141126,141128,141130,141132,141134,141136,141138,141140,141142,141144,141146],{"class":256,"line":257},[254,141125,1174],{"class":264},[254,141127,1602],{"class":51441},[254,141129,55380],{"class":2103},[254,141131,310],{"class":264},[254,141133,134209],{"class":369},[254,141135,55388],{"class":2103},[254,141137,310],{"class":264},[254,141139,134216],{"class":369},[254,141141,134219],{"class":2103},[254,141143,310],{"class":264},[254,141145,134224],{"class":369},[254,141147,51448],{"class":264},[14,141149,140997],{},[245,141151,141152],{"className":127439,"code":134194,"language":127441,"meta":174,"style":174},[251,141153,141154],{"__ignoreMap":174},[254,141155,141156,141158,141160,141162,141164,141166,141168,141170,141172,141174,141176,141178],{"class":256,"line":257},[254,141157,1174],{"class":264},[254,141159,1602],{"class":51441},[254,141161,55380],{"class":2103},[254,141163,310],{"class":264},[254,141165,134209],{"class":369},[254,141167,55388],{"class":2103},[254,141169,310],{"class":264},[254,141171,134216],{"class":369},[254,141173,134219],{"class":2103},[254,141175,310],{"class":264},[254,141177,134224],{"class":369},[254,141179,51448],{"class":264},[14,141181,141182],{},"tab栏切换需求！！！！！！介绍：",[1602,141184],{"style":126548,"src":141185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[1271,141187,141188,141196,141202,141205],{},[24,141189,141190,141193,141194],{},[251,141191,141192],{},"tab","栏的布局是 ",[251,141195,139203],{},[24,141197,141198,141199,141201],{},"有多少个",[251,141200,141192],{},"选项卡，那么对应就有多少个内容",[24,141203,141204],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[24,141206,141207,141208,141211,141212,141214,141215,141217],{},"等后面我们学习了",[251,141209,141210],{},"js","之后，我们就会配合",[251,141213,141210],{},"来实现，",[251,141216,141192],{},"栏的切换",[34,141219,141221],{"id":141220},"_162-列表制作","16.2 列表制作",[225,141223,141225],{"id":141224},"_1621-准备工作","16.2.1 准备工作",[1271,141227,141228,141231,141234,141237],{},[24,141229,141230],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[24,141232,141233],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[24,141235,141236],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[24,141238,141239],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[225,141241,141243,141244,101159,141246,141248],{"id":141242},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[251,141245,131697],{},[251,141247,53854],{}," 修改",[1602,141250],{"style":126548,"src":141251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[1271,141253,141254],{},[24,141255,141256],{},"秒杀盒子 sk（ second kill ） 定位即可",[14,141258,140062],{},[245,141260,141261],{"className":126692,"code":132124,"language":126694,"meta":174,"style":174},[251,141262,141263,141267,141281,141285,141299,141303,141317,141321,141335,141339],{"__ignoreMap":174},[254,141264,141265],{"class":256,"line":257},[254,141266,132131],{"class":323},[254,141268,141269,141271,141273,141275,141277,141279],{"class":256,"line":175},[254,141270,132136],{"class":2103},[254,141272,79948],{"class":264},[254,141274,129052],{"class":313},[254,141276,51578],{"class":264},[254,141278,132145],{"class":313},[254,141280,129622],{"class":264},[254,141282,141283],{"class":256,"line":1319},[254,141284,132152],{"class":323},[254,141286,141287,141289,141291,141293,141295,141297],{"class":256,"line":1334},[254,141288,132157],{"class":2103},[254,141290,79948],{"class":264},[254,141292,129052],{"class":313},[254,141294,51578],{"class":264},[254,141296,54905],{"class":313},[254,141298,129622],{"class":264},[254,141300,141301],{"class":256,"line":1340},[254,141302,132172],{"class":323},[254,141304,141305,141307,141309,141311,141313,141315],{"class":256,"line":1354},[254,141306,132177],{"class":2103},[254,141308,79948],{"class":264},[254,141310,129052],{"class":313},[254,141312,51578],{"class":264},[254,141314,54972],{"class":313},[254,141316,129622],{"class":264},[254,141318,141319],{"class":256,"line":1360},[254,141320,132192],{"class":323},[254,141322,141323,141325,141327,141329,141331,141333],{"class":256,"line":1451},[254,141324,132197],{"class":2103},[254,141326,79948],{"class":264},[254,141328,129052],{"class":313},[254,141330,51578],{"class":264},[254,141332,86374],{"class":313},[254,141334,129622],{"class":264},[254,141336,141337],{"class":256,"line":1457},[254,141338,132212],{"class":323},[254,141340,141341,141343,141345,141347,141349,141351],{"class":256,"line":1469},[254,141342,132217],{"class":2103},[254,141344,79948],{"class":264},[254,141346,129052],{"class":313},[254,141348,51578],{"class":264},[254,141350,132226],{"class":313},[254,141352,129622],{"class":264},[14,141354,140151],{},[245,141356,141357],{"className":126692,"code":132124,"language":126694,"meta":174,"style":174},[251,141358,141359,141363,141377,141381,141395,141399,141413,141417,141431,141435],{"__ignoreMap":174},[254,141360,141361],{"class":256,"line":257},[254,141362,132131],{"class":323},[254,141364,141365,141367,141369,141371,141373,141375],{"class":256,"line":175},[254,141366,132136],{"class":2103},[254,141368,79948],{"class":264},[254,141370,129052],{"class":313},[254,141372,51578],{"class":264},[254,141374,132145],{"class":313},[254,141376,129622],{"class":264},[254,141378,141379],{"class":256,"line":1319},[254,141380,132152],{"class":323},[254,141382,141383,141385,141387,141389,141391,141393],{"class":256,"line":1334},[254,141384,132157],{"class":2103},[254,141386,79948],{"class":264},[254,141388,129052],{"class":313},[254,141390,51578],{"class":264},[254,141392,54905],{"class":313},[254,141394,129622],{"class":264},[254,141396,141397],{"class":256,"line":1340},[254,141398,132172],{"class":323},[254,141400,141401,141403,141405,141407,141409,141411],{"class":256,"line":1354},[254,141402,132177],{"class":2103},[254,141404,79948],{"class":264},[254,141406,129052],{"class":313},[254,141408,51578],{"class":264},[254,141410,54972],{"class":313},[254,141412,129622],{"class":264},[254,141414,141415],{"class":256,"line":1360},[254,141416,132192],{"class":323},[254,141418,141419,141421,141423,141425,141427,141429],{"class":256,"line":1451},[254,141420,132197],{"class":2103},[254,141422,79948],{"class":264},[254,141424,129052],{"class":313},[254,141426,51578],{"class":264},[254,141428,86374],{"class":313},[254,141430,129622],{"class":264},[254,141432,141433],{"class":256,"line":1457},[254,141434,132212],{"class":323},[254,141436,141437,141439,141441,141443,141445,141447],{"class":256,"line":1469},[254,141438,132217],{"class":2103},[254,141440,79948],{"class":264},[254,141442,129052],{"class":313},[254,141444,51578],{"class":264},[254,141446,132226],{"class":313},[254,141448,129622],{"class":264},[1271,141450,141451,141462],{},[24,141452,141453,141454,141457,141458,101159,141460],{},"1 号盒子左侧浮动 ",[251,141455,141456],{},"sk_list"," 里面包含 ",[251,141459,1271],{},[251,141461,24],{},[24,141463,141464,141465,141457,141468,101159,141470],{},"2 号盒子左侧浮动 ",[251,141466,141467],{},"sk_con",[251,141469,1271],{},[251,141471,24],{},[14,141473,140062],{},[245,141475,141476],{"className":126692,"code":139362,"language":126694,"meta":174,"style":174},[251,141477,141478,141484,141494],{"__ignoreMap":174},[254,141479,141480,141482],{"class":256,"line":257},[254,141481,130540],{"class":2103},[254,141483,15713],{"class":264},[254,141485,141486,141488,141490,141492],{"class":256,"line":175},[254,141487,131172],{"class":313},[254,141489,51578],{"class":264},[254,141491,23877],{"class":313},[254,141493,1430],{"class":264},[254,141495,141496],{"class":256,"line":1319},[254,141497,1705],{"class":264},[14,141499,140151],{},[245,141501,141502],{"className":126692,"code":139362,"language":126694,"meta":174,"style":174},[251,141503,141504,141510,141520],{"__ignoreMap":174},[254,141505,141506,141508],{"class":256,"line":257},[254,141507,130540],{"class":2103},[254,141509,15713],{"class":264},[254,141511,141512,141514,141516,141518],{"class":256,"line":175},[254,141513,131172],{"class":313},[254,141515,51578],{"class":264},[254,141517,23877],{"class":313},[254,141519,1430],{"class":264},[254,141521,141522],{"class":256,"line":1319},[254,141523,1705],{"class":264},[225,141525,141527,141528],{"id":141526},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[251,141529,141530],{},"sk_container",[1602,141532],{"style":126548,"src":141533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[1271,141535,141536,141541],{},[24,141537,140716,141538,141540],{},[251,141539,141530],{}," 给宽度 1200，不要给高度",[24,141542,141543],{},"一定不要忘记清除浮动",[14,141545,140062],{},[245,141547,141548],{"className":126692,"code":139362,"language":126694,"meta":174,"style":174},[251,141549,141550,141556,141566],{"__ignoreMap":174},[254,141551,141552,141554],{"class":256,"line":257},[254,141553,130540],{"class":2103},[254,141555,15713],{"class":264},[254,141557,141558,141560,141562,141564],{"class":256,"line":175},[254,141559,131172],{"class":313},[254,141561,51578],{"class":264},[254,141563,23877],{"class":313},[254,141565,1430],{"class":264},[254,141567,141568],{"class":256,"line":1319},[254,141569,1705],{"class":264},[21,141571,141572],{},[24,141573,141574],{},"sk_hd制作",[1271,141576,141577],{},[24,141578,140796,141579,141582],{},[251,141580,141581],{},"sk_hd"," ，插入图片即可",[14,141584,140062],{},[245,141586,141587],{"className":127439,"code":134194,"language":127441,"meta":174,"style":174},[251,141588,141589],{"__ignoreMap":174},[254,141590,141591,141593,141595,141597,141599,141601,141603,141605,141607,141609,141611,141613],{"class":256,"line":257},[254,141592,1174],{"class":264},[254,141594,1602],{"class":51441},[254,141596,55380],{"class":2103},[254,141598,310],{"class":264},[254,141600,134209],{"class":369},[254,141602,55388],{"class":2103},[254,141604,310],{"class":264},[254,141606,134216],{"class":369},[254,141608,134219],{"class":2103},[254,141610,310],{"class":264},[254,141612,134224],{"class":369},[254,141614,51448],{"class":264},[21,141616,141617],{"start":175},[24,141618,141619],{},"sk_bd制作",[1271,141621,141622],{},[24,141623,141624,141625,141628,141629,101159,141631,141633],{},"3 号盒子 ",[251,141626,141627],{},"sk_bd"," ，里面包含很多的 ",[251,141630,1271],{},[251,141632,24],{},[1271,141634,141635,141644],{},[24,141636,141637,141638,141640,141641,141643],{},"当鼠标移入到 ",[251,141639,24],{}," 上面的时候显示红色的边框，在这里先给 ",[251,141642,24],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[24,141645,141646,141647,141649,141650,141652,141653,141656,141657,141659],{},"由于给每个 ",[251,141648,24],{}," 都设置了外边距，导致一行的最后一个 ",[251,141651,24],{}," 掉了下来，在这里我们利用 ",[251,141654,141655],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[251,141658,24],{},"，去掉外边距就好了",[14,141661,140062],{},[245,141663,141664],{"className":126692,"code":138881,"language":126694,"meta":174,"style":174},[251,141665,141666,141672,141684],{"__ignoreMap":174},[254,141667,141668,141670],{"class":256,"line":257},[254,141669,51752],{"class":51441},[254,141671,15713],{"class":264},[254,141673,141674,141676,141678,141680,141682],{"class":256,"line":175},[254,141675,70611],{"class":313},[254,141677,51578],{"class":264},[254,141679,456],{"class":313},[254,141681,51697],{"class":313},[254,141683,1430],{"class":264},[254,141685,141686],{"class":256,"line":1319},[254,141687,1705],{"class":264},[14,141689,140151],{},[245,141691,141692],{"className":126692,"code":138881,"language":126694,"meta":174,"style":174},[251,141693,141694,141700,141712],{"__ignoreMap":174},[254,141695,141696,141698],{"class":256,"line":257},[254,141697,51752],{"class":51441},[254,141699,15713],{"class":264},[254,141701,141702,141704,141706,141708,141710],{"class":256,"line":175},[254,141703,70611],{"class":313},[254,141705,51578],{"class":264},[254,141707,456],{"class":313},[254,141709,51697],{"class":313},[254,141711,1430],{"class":264},[254,141713,141714],{"class":256,"line":1319},[254,141715,1705],{"class":264},[34,141717,141719],{"id":141718},"_163-注册页面制作","16.3 注册页面制作",[1602,141721],{"style":126548,"src":141722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[14,141724,141725,141727],{},[414,141726,9166],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[1602,141729],{"style":126548,"src":141730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[225,141732,141734],{"id":141733},"_1631-准备工作","16.3.1 准备工作",[1271,141736,141737,141740],{},[24,141738,141739],{},"创建register.html，引入 base.css，引入favicon图标",[24,141741,141742],{},"创建register.css ，在html页面进行引入",[225,141744,141746,141747,141749],{"id":141745},"_1632-header-头部实现","16.3.2 ",[251,141748,131697],{}," 头部实现",[1271,141751,141752,141755],{},[24,141753,141754],{},"整个内容用 版心 进行包裹",[24,141756,141757],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[14,141759,140062],{},[245,141761,141762],{"className":127439,"code":134194,"language":127441,"meta":174,"style":174},[251,141763,141764],{"__ignoreMap":174},[254,141765,141766,141768,141770,141772,141774,141776,141778,141780,141782,141784,141786,141788],{"class":256,"line":257},[254,141767,1174],{"class":264},[254,141769,1602],{"class":51441},[254,141771,55380],{"class":2103},[254,141773,310],{"class":264},[254,141775,134209],{"class":369},[254,141777,55388],{"class":2103},[254,141779,310],{"class":264},[254,141781,134216],{"class":369},[254,141783,134219],{"class":2103},[254,141785,310],{"class":264},[254,141787,134224],{"class":369},[254,141789,51448],{"class":264},[14,141791,140151],{},[245,141793,141794],{"className":127439,"code":134194,"language":127441,"meta":174,"style":174},[251,141795,141796],{"__ignoreMap":174},[254,141797,141798,141800,141802,141804,141806,141808,141810,141812,141814,141816,141818,141820],{"class":256,"line":257},[254,141799,1174],{"class":264},[254,141801,1602],{"class":51441},[254,141803,55380],{"class":2103},[254,141805,310],{"class":264},[254,141807,134209],{"class":369},[254,141809,55388],{"class":2103},[254,141811,310],{"class":264},[254,141813,134216],{"class":369},[254,141815,134219],{"class":2103},[254,141817,310],{"class":264},[254,141819,134224],{"class":369},[254,141821,51448],{"class":264},[225,141823,141825,141826,141829],{"id":141824},"_1633-registerarea-主体模块实现","16.3.3 ",[251,141827,141828],{},"registerarea"," 主体模块实现",[1602,141831],{"style":126548,"src":141832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[14,141834,141835],{},"整个大盒子 高度为 522px，设置4个边框",[14,141837,140062],{},[245,141839,141840],{"className":126692,"code":130849,"language":126694,"meta":174,"style":174},[251,141841,141842,141848,141864],{"__ignoreMap":174},[254,141843,141844,141846],{"class":256,"line":257},[254,141845,51752],{"class":51441},[254,141847,15713],{"class":264},[254,141849,141850,141852,141854,141856,141858,141860,141862],{"class":256,"line":175},[254,141851,71037],{"class":313},[254,141853,51578],{"class":264},[254,141855,482],{"class":313},[254,141857,51633],{"class":260},[254,141859,51662],{"class":313},[254,141861,130084],{"class":313},[254,141863,1430],{"class":264},[254,141865,141866],{"class":256,"line":1319},[254,141867,1705],{"class":264},[14,141869,140151],{},[245,141871,141872],{"className":126692,"code":130849,"language":126694,"meta":174,"style":174},[251,141873,141874,141880,141896],{"__ignoreMap":174},[254,141875,141876,141878],{"class":256,"line":257},[254,141877,51752],{"class":51441},[254,141879,15713],{"class":264},[254,141881,141882,141884,141886,141888,141890,141892,141894],{"class":256,"line":175},[254,141883,71037],{"class":313},[254,141885,51578],{"class":264},[254,141887,482],{"class":313},[254,141889,51633],{"class":260},[254,141891,51662],{"class":313},[254,141893,130084],{"class":313},[254,141895,1430],{"class":264},[254,141897,141898],{"class":256,"line":1319},[254,141899,1705],{"class":264},[14,141901,141902],{},"1号盒子 是一个 h3 标签，放标题",[1271,141904,141905],{},[24,141906,141907],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[14,141909,140062],{},[245,141911,141912],{"className":126692,"code":139362,"language":126694,"meta":174,"style":174},[251,141913,141914,141920,141930],{"__ignoreMap":174},[254,141915,141916,141918],{"class":256,"line":257},[254,141917,130540],{"class":2103},[254,141919,15713],{"class":264},[254,141921,141922,141924,141926,141928],{"class":256,"line":175},[254,141923,131172],{"class":313},[254,141925,51578],{"class":264},[254,141927,23877],{"class":313},[254,141929,1430],{"class":264},[254,141931,141932],{"class":256,"line":1319},[254,141933,1705],{"class":264},[14,141935,140151],{},[245,141937,141938],{"className":126692,"code":139362,"language":126694,"meta":174,"style":174},[251,141939,141940,141946,141956],{"__ignoreMap":174},[254,141941,141942,141944],{"class":256,"line":257},[254,141943,130540],{"class":2103},[254,141945,15713],{"class":264},[254,141947,141948,141950,141952,141954],{"class":256,"line":175},[254,141949,131172],{"class":313},[254,141951,51578],{"class":264},[254,141953,23877],{"class":313},[254,141955,1430],{"class":264},[254,141957,141958],{"class":256,"line":1319},[254,141959,1705],{"class":264},[14,141961,141962],{},"2号盒子 里面放注册的内容",[1271,141964,141965,141968,141977,141991,142004,142007,142010,142028,142042],{},[24,141966,141967],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[24,141969,141970,141971,141973,141974,141976],{},"里面的内容利用 ",[251,141972,1271],{}," 包含 ",[251,141975,24],{}," 来实现的（不需要用表格）",[24,141978,139206,141979,141981,141982,141984,141985,141987,141988,141990],{},[251,141980,24],{}," 里面，左侧放 ",[251,141983,33749],{}," 标签， 中间放",[251,141986,53962],{}," 标签， 右侧放 ",[251,141989,254],{}," 提示信息",[24,141992,141993,141994,141996,141997,141999,142000,142003],{},"左侧 ",[251,141995,33749],{},"里面的文字都是右对齐，我们可以给",[251,141998,33749],{},"设置一个宽度（88px），然后利用",[251,142001,142002],{},"text-align"," 来设置右对齐",[24,142005,142006],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[24,142008,142009],{},"右侧 span修饰一下文字颜色",[24,142011,142012,142013],{},"提示信息的样式优化",[1271,142014,142015,142018,142021],{},[24,142016,142017],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[24,142019,142020],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[24,142022,142023,142024,142027],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[251,142025,142026],{},"vertical-algin"," 来设置 图片与文字对齐方式",[24,142029,142030,142031],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[1271,142032,142033,142039],{},[24,142034,142035,142036,142038],{},"设置 ",[251,142037,23694],{}," 的 左右 12px 的内边距，设置一下文字颜色",[24,142040,142041],{},"分别设置 背景颜色",[24,142043,142044,142045,142047],{},"同意协议 和 完成注册 都是用 ",[251,142046,24],{}," 进行包裹",[14,142049,140062],{},[245,142051,142052],{"className":126692,"code":140635,"language":126694,"meta":174,"style":174},[251,142053,142054,142060,142070],{"__ignoreMap":174},[254,142055,142056,142058],{"class":256,"line":257},[254,142057,51752],{"class":51441},[254,142059,15713],{"class":264},[254,142061,142062,142064,142066,142068],{"class":256,"line":175},[254,142063,71019],{"class":313},[254,142065,51578],{"class":264},[254,142067,140652],{"class":313},[254,142069,1430],{"class":264},[254,142071,142072],{"class":256,"line":1319},[254,142073,1705],{"class":264},[14,142075,140151],{},[245,142077,142078],{"className":126692,"code":140635,"language":126694,"meta":174,"style":174},[251,142079,142080,142086,142096],{"__ignoreMap":174},[254,142081,142082,142084],{"class":256,"line":257},[254,142083,51752],{"class":51441},[254,142085,15713],{"class":264},[254,142087,142088,142090,142092,142094],{"class":256,"line":175},[254,142089,71019],{"class":313},[254,142091,51578],{"class":264},[254,142093,140652],{"class":313},[254,142095,1430],{"class":264},[254,142097,142098],{"class":256,"line":1319},[254,142099,1705],{"class":264},[225,142101,142103],{"id":142102},"_1634-底部实现","16.3.4 底部实现",[14,142105,140062],{},[245,142107,142108],{"className":126692,"code":140635,"language":126694,"meta":174,"style":174},[251,142109,142110,142116,142126],{"__ignoreMap":174},[254,142111,142112,142114],{"class":256,"line":257},[254,142113,51752],{"class":51441},[254,142115,15713],{"class":264},[254,142117,142118,142120,142122,142124],{"class":256,"line":175},[254,142119,71019],{"class":313},[254,142121,51578],{"class":264},[254,142123,140652],{"class":313},[254,142125,1430],{"class":264},[254,142127,142128],{"class":256,"line":1319},[254,142129,1705],{"class":264},[14,142131,140151],{},[245,142133,142134],{"className":127439,"code":130796,"language":127441,"meta":174,"style":174},[251,142135,142136,142140,142154,142158],{"__ignoreMap":174},[254,142137,142138],{"class":256,"line":257},[254,142139,130803],{"class":323},[254,142141,142142,142144,142146,142148,142150,142152],{"class":256,"line":175},[254,142143,1174],{"class":264},[254,142145,51752],{"class":51441},[254,142147,53627],{"class":2103},[254,142149,310],{"class":264},[254,142151,130816],{"class":369},[254,142153,51448],{"class":264},[254,142155,142156],{"class":256,"line":1319},[254,142157,130823],{"class":264},[254,142159,142160,142162,142164],{"class":256,"line":1334},[254,142161,51926],{"class":264},[254,142163,51752],{"class":51441},[254,142165,51448],{"class":264},[34,142167,142169],{"id":142168},"_164-项目总结","16.4 项目总结",[21,142171,142172,142175,142178,142181],{},[24,142173,142174],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[24,142176,142177],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[24,142179,142180],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[24,142182,142183],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[1602,142185],{"style":126548,"src":142186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[21,142188,142189],{"start":1340},[24,142190,142191],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[1602,142193],{"style":126548,"src":142194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[21,142196,142197],{"start":1354},[24,142198,142199],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[1602,142201],{"style":126548,"src":142202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[245,142204,142205],{"className":127439,"code":136849,"language":127441,"meta":174,"style":174},[251,142206,142207],{"__ignoreMap":174},[254,142208,142209,142211,142213,142215,142217,142219,142221,142223,142225,142227,142229,142231],{"class":256,"line":257},[254,142210,1174],{"class":264},[254,142212,53962],{"class":51441},[254,142214,53965],{"class":2103},[254,142216,310],{"class":264},[254,142218,62840],{"class":369},[254,142220,15061],{"class":2103},[254,142222,310],{"class":264},[254,142224,136870],{"class":369},[254,142226,61161],{"class":2103},[254,142228,310],{"class":264},[254,142230,136877],{"class":369},[254,142232,51448],{"class":264},[21,142234,142235,142238],{"start":1360},[24,142236,142237],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[24,142239,142240],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[5267,142242,142243],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":174,"searchDepth":175,"depth":175,"links":142245},[142246,142251,142258,142266],{"id":139872,"depth":175,"text":139873,"children":142247},[142248,142249,142250],{"id":139876,"depth":1319,"text":139877},{"id":140607,"depth":1319,"text":140608},{"id":140920,"depth":1319,"text":140921},{"id":141220,"depth":175,"text":141221,"children":142252},[142253,142254,142256],{"id":141224,"depth":1319,"text":141225},{"id":141242,"depth":1319,"text":142255},"16.2.2 列表页 header 和 nav 修改",{"id":141526,"depth":1319,"text":142257},"16.2.3 列表页主体 sk_container",{"id":141718,"depth":175,"text":141719,"children":142259},[142260,142261,142263,142265],{"id":141733,"depth":1319,"text":141734},{"id":141745,"depth":1319,"text":142262},"16.3.2 header 头部实现",{"id":141824,"depth":1319,"text":142264},"16.3.3 registerarea 主体模块实现",{"id":142102,"depth":1319,"text":142103},{"id":142168,"depth":175,"text":142169},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":139864,"description":23518},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142273,"title":142274,"body":142275,"description":23518,"extension":181,"meta":142383,"navigation":184,"path":142384,"seo":142385,"stem":142386,"__hash__":142387},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142276,"toc":142378},[142277,142280,142284,142287,142290,142299,142308,142312,142317,142324,142342,142345,142348,142351,142354,142357,142360,142363,142366,142369,142372,142375],[10,142278,142274],{"id":142279},"_17-web服务器与网站发布",[34,142281,142283],{"id":142282},"_171-web服务器","17.1 Web服务器",[14,142285,142286],{},"把自己网站上传到服务器上，可以让其他人访问",[1602,142288],{"style":126548,"src":142289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[14,142291,142292,142295,142296],{},[414,142293,142294],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[414,142297,142298],{},"Web 服务器等",[14,142300,142301,142302,101159,142305,25881],{},"根据服务器在网络中所在的位置不同，又可分为 ",[414,142303,142304],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[414,142306,142307],{},"远程服务器",[225,142309,142311],{"id":142310},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[14,142313,142314],{},[414,142315,142316],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[14,142318,142319,142320],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[42,142321,142322],{"href":142322,"rel":142323},"http:\u002F\u002Ffree.3v.do\u002F",[151],[1271,142325,142326,142329,142332,142339],{},[24,142327,142328],{},"去免费空间网站注册账号。",[24,142330,142331],{},"记录下主机名、用户名、密码、域名。",[24,142333,142334,142335,142338],{},"利用 ",[251,142336,142337],{},"utftp"," 软件 上传网站到远程服务器",[24,142340,142341],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[14,142343,142344],{},"使用软件上传，对上传软件文件进行解压",[1602,142346],{"style":126548,"src":142347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[1602,142349],{"style":126548,"src":142350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[14,142352,142353],{},"输入刚刚申请的服务器账号信息：",[1602,142355],{"style":126548,"src":142356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[1602,142358],{"style":126548,"src":142359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[1602,142361],{"style":126548,"src":142362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[1602,142364],{"style":126548,"src":142365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[14,142367,142368],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[1602,142370],{"style":126548,"src":142371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[14,142373,142374],{},"浏览器输入域名即可访问",[14,142376,142377],{},"首页一定必须是index",{"title":174,"searchDepth":175,"depth":175,"links":142379},[142380],{"id":142282,"depth":175,"text":142283,"children":142381},[142382],{"id":142310,"depth":1319,"text":142311},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142274,"description":23518},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142389,"title":142390,"body":142391,"description":23518,"extension":181,"meta":143318,"navigation":184,"path":143319,"seo":143320,"stem":143321,"__hash__":143322},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142392,"toc":143301},[142393,142396,142400,142403,142406,142417,142420,142424,142428,142433,142436,142439,142442,142445,142449,142475,142479,142483,142486,142489,142493,142526,142530,142533,142536,142600,142604,142608,142611,142614,142617,142621,142666,142670,142673,142703,142707,142711,142714,142717,142721,142724,142793,142796,142904,142906,142912,142916,142919,142922,143018,143021,143025,143049,143053,143056,143060,143063,143067,143070,143073,143076,143079,143083,143086,143089,143093,143097,143100,143103,143106,143109,143113,143116,143120,143123,143126,143171,143175,143179,143182,143185,143188,143220,143224,143227,143261,143265,143268,143298],[10,142394,142390],{"id":142395},"_18-2d动画与3d转换",[34,142397,142399],{"id":142398},"_181-css3-2d转换","18.1 CSS3 2D转换",[14,142401,142402],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[14,142404,142405],{},"转换（transform）你可以简单理解为变形",[1271,142407,142408,142411,142414],{},[24,142409,142410],{},"移动：translate",[24,142412,142413],{},"旋转：rotate",[24,142415,142416],{},"缩放：scale",[1602,142418],{"style":126548,"src":142419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[225,142421,142423],{"id":142422},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[22139,142425,142427],{"id":142426},"_18111-translate介绍","18.1.1.1 translate介绍",[14,142429,142430,142431],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[414,142432,133351],{},[1602,142434],{"style":126548,"src":142435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[14,142437,142438],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[14,142440,142441],{},"对于行内元素无效",[14,142443,142444],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[22139,142446,142448],{"id":142447},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[245,142450,142451],{"className":126692,"code":138881,"language":126694,"meta":174,"style":174},[251,142452,142453,142459,142471],{"__ignoreMap":174},[254,142454,142455,142457],{"class":256,"line":257},[254,142456,51752],{"class":51441},[254,142458,15713],{"class":264},[254,142460,142461,142463,142465,142467,142469],{"class":256,"line":175},[254,142462,70611],{"class":313},[254,142464,51578],{"class":264},[254,142466,456],{"class":313},[254,142468,51697],{"class":313},[254,142470,1430],{"class":264},[254,142472,142473],{"class":256,"line":1319},[254,142474,1705],{"class":264},[225,142476,142478],{"id":142477},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[22139,142480,142482],{"id":142481},"_18121-rotate介绍","18.1.2.1 rotate介绍",[14,142484,142485],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[1602,142487],{"style":126548,"src":142488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[22139,142490,142492],{"id":142491},"_18122-旋转效果","18.1.2.2 旋转效果",[245,142494,142496],{"className":126692,"code":142495,"language":126694,"meta":174,"style":174},"div {\n  transform: rotate(45deg);\n}\n",[251,142497,142498,142504,142522],{"__ignoreMap":174},[254,142499,142500,142502],{"class":256,"line":257},[254,142501,51752],{"class":51441},[254,142503,15713],{"class":264},[254,142505,142506,142508,142510,142513,142515,142517,142520],{"class":256,"line":175},[254,142507,136676],{"class":313},[254,142509,51578],{"class":264},[254,142511,142512],{"class":313},"rotate",[254,142514,265],{"class":264},[254,142516,793],{"class":313},[254,142518,142519],{"class":260},"deg",[254,142521,2859],{"class":264},[254,142523,142524],{"class":256,"line":1319},[254,142525,1705],{"class":264},[22139,142527,142529],{"id":142528},"_18123-三角做法","18.1.2.3 三角做法",[14,142531,142532],{},"该下标当经过最外层大盒子时会实现向上反转",[1602,142534],{"style":126548,"src":142535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[245,142537,142538],{"className":126692,"code":135212,"language":126694,"meta":174,"style":174},[251,142539,142540,142544,142550,142560,142570,142586,142596],{"__ignoreMap":174},[254,142541,142542],{"class":256,"line":257},[254,142543,135219],{"class":323},[254,142545,142546,142548],{"class":256,"line":175},[254,142547,135224],{"class":2103},[254,142549,15713],{"class":264},[254,142551,142552,142554,142556,142558],{"class":256,"line":1319},[254,142553,70709],{"class":313},[254,142555,51578],{"class":264},[254,142557,456],{"class":313},[254,142559,1430],{"class":264},[254,142561,142562,142564,142566,142568],{"class":256,"line":1334},[254,142563,70929],{"class":313},[254,142565,51578],{"class":264},[254,142567,456],{"class":313},[254,142569,1430],{"class":264},[254,142571,142572,142574,142576,142578,142580,142582,142584],{"class":256,"line":1340},[254,142573,71037],{"class":313},[254,142575,51578],{"class":264},[254,142577,710],{"class":313},[254,142579,51633],{"class":260},[254,142581,51662],{"class":313},[254,142583,64132],{"class":313},[254,142585,1430],{"class":264},[254,142587,142588,142590,142592,142594],{"class":256,"line":1354},[254,142589,135267],{"class":313},[254,142591,51578],{"class":264},[254,142593,62510],{"class":313},[254,142595,1430],{"class":264},[254,142597,142598],{"class":256,"line":1360},[254,142599,1705],{"class":264},[225,142601,142603],{"id":142602},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[22139,142605,142607],{"id":142606},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[14,142609,142610],{},"设置中心点",[1602,142612],{"style":126548,"src":142613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[14,142615,142616],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[22139,142618,142620],{"id":142619},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[245,142622,142624],{"className":126692,"code":142623,"language":126694,"meta":174,"style":174},"\u002F* 转换中心点 *\u002F\ndiv {\n  transform-origin: center center;  \u002F* 默认 *\u002F\n  \u002F* transform-origin: 50% 50%; *\u002F\n  \u002F* transform-origin: left top; *\u002F\n}\n",[251,142625,142626,142631,142637,142652,142657,142662],{"__ignoreMap":174},[254,142627,142628],{"class":256,"line":257},[254,142629,142630],{"class":323},"\u002F* 转换中心点 *\u002F\n",[254,142632,142633,142635],{"class":256,"line":175},[254,142634,51752],{"class":51441},[254,142636,15713],{"class":264},[254,142638,142639,142642,142644,142646,142648,142650],{"class":256,"line":1319},[254,142640,142641],{"class":313},"  transform-origin",[254,142643,51578],{"class":264},[254,142645,51733],{"class":313},[254,142647,17285],{"class":313},[254,142649,130555],{"class":264},[254,142651,135365],{"class":323},[254,142653,142654],{"class":256,"line":1334},[254,142655,142656],{"class":323},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[254,142658,142659],{"class":256,"line":1340},[254,142660,142661],{"class":323},"  \u002F* transform-origin: left top; *\u002F\n",[254,142663,142664],{"class":256,"line":1354},[254,142665,1705],{"class":264},[22139,142667,142669],{"id":142668},"_18133-旋转案例","18.1.3.3 旋转案例",[1602,142671],{"style":126548,"src":142672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[245,142674,142675],{"className":126692,"code":142495,"language":126694,"meta":174,"style":174},[251,142676,142677,142683,142699],{"__ignoreMap":174},[254,142678,142679,142681],{"class":256,"line":257},[254,142680,51752],{"class":51441},[254,142682,15713],{"class":264},[254,142684,142685,142687,142689,142691,142693,142695,142697],{"class":256,"line":175},[254,142686,136676],{"class":313},[254,142688,51578],{"class":264},[254,142690,142512],{"class":313},[254,142692,265],{"class":264},[254,142694,793],{"class":313},[254,142696,142519],{"class":260},[254,142698,2859],{"class":264},[254,142700,142701],{"class":256,"line":1319},[254,142702,1705],{"class":264},[225,142704,142706],{"id":142705},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[22139,142708,142710],{"id":142709},"_18141-scale介绍","18.1.4.1 scale介绍",[14,142712,142713],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[1602,142715],{"style":126548,"src":142716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[22139,142718,142720],{"id":142719},"_18142-分页按钮","18.1.4.2 分页按钮",[1602,142722],{"style":126548,"src":142723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[245,142725,142727],{"className":126692,"code":142726,"language":126694,"meta":174,"style":174},"div {\n  transform: scale(1.2);\n}\n```Css\n\u002F* 2D 缩放 *\u002F\ndiv {\n  transform: scale(1.2);\n  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n}\n",[251,142728,142729,142735,142751,142755,142759,142764,142770,142784,142789],{"__ignoreMap":174},[254,142730,142731,142733],{"class":256,"line":257},[254,142732,51752],{"class":51441},[254,142734,15713],{"class":264},[254,142736,142737,142739,142741,142744,142746,142749],{"class":256,"line":175},[254,142738,136676],{"class":313},[254,142740,51578],{"class":264},[254,142742,142743],{"class":313},"scale",[254,142745,265],{"class":264},[254,142747,142748],{"class":313},"1.2",[254,142750,2859],{"class":264},[254,142752,142753],{"class":256,"line":1319},[254,142754,1705],{"class":264},[254,142756,142757],{"class":256,"line":1334},[254,142758,136153],{"class":264},[254,142760,142761],{"class":256,"line":1340},[254,142762,142763],{"class":323},"\u002F* 2D 缩放 *\u002F\n",[254,142765,142766,142768],{"class":256,"line":1354},[254,142767,51752],{"class":51441},[254,142769,15713],{"class":264},[254,142771,142772,142774,142776,142778,142780,142782],{"class":256,"line":1360},[254,142773,136676],{"class":313},[254,142775,51578],{"class":264},[254,142777,142743],{"class":313},[254,142779,265],{"class":264},[254,142781,142748],{"class":313},[254,142783,2859],{"class":264},[254,142785,142786],{"class":256,"line":1451},[254,142787,142788],{"class":323},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[254,142790,142791],{"class":256,"line":1457},[254,142792,1705],{"class":264},[14,142794,142795],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[245,142797,142799],{"className":126692,"code":142798,"language":126694,"meta":174,"style":174},"\u002F* 定义动画 *\u002F\n@keyframes move {\n  0% { transform: translateX(0); }\n  100% { transform: translateX(100px); }\n}\n\u002F* 调用动画 *\u002F\ndiv {\n  animation: move 1s ease 0s infinite alternate;\n}\n",[251,142800,142801,142806,142816,142837,142858,142862,142867,142873,142900],{"__ignoreMap":174},[254,142802,142803],{"class":256,"line":257},[254,142804,142805],{"class":323},"\u002F* 定义动画 *\u002F\n",[254,142807,142808,142811,142814],{"class":256,"line":175},[254,142809,142810],{"class":260},"@keyframes",[254,142812,142813],{"class":5357}," move",[254,142815,15713],{"class":264},[254,142817,142818,142821,142823,142825,142827,142830,142832,142834],{"class":256,"line":1319},[254,142819,142820],{"class":2103},"  0%",[254,142822,79948],{"class":264},[254,142824,48275],{"class":313},[254,142826,51578],{"class":264},[254,142828,142829],{"class":313},"translateX",[254,142831,265],{"class":264},[254,142833,456],{"class":313},[254,142835,142836],{"class":264},"); }\n",[254,142838,142839,142842,142844,142846,142848,142850,142852,142854,142856],{"class":256,"line":1334},[254,142840,142841],{"class":2103},"  100%",[254,142843,79948],{"class":264},[254,142845,48275],{"class":313},[254,142847,51578],{"class":264},[254,142849,142829],{"class":313},[254,142851,265],{"class":264},[254,142853,575],{"class":313},[254,142855,51633],{"class":260},[254,142857,142836],{"class":264},[254,142859,142860],{"class":256,"line":1340},[254,142861,1705],{"class":264},[254,142863,142864],{"class":256,"line":1354},[254,142865,142866],{"class":323},"\u002F* 调用动画 *\u002F\n",[254,142868,142869,142871],{"class":256,"line":1360},[254,142870,51752],{"class":51441},[254,142872,15713],{"class":264},[254,142874,142875,142878,142880,142882,142884,142886,142888,142890,142892,142895,142898],{"class":256,"line":1451},[254,142876,142877],{"class":313},"  animation",[254,142879,51578],{"class":264},[254,142881,135378],{"class":313},[254,142883,25259],{"class":313},[254,142885,959],{"class":260},[254,142887,78821],{"class":313},[254,142889,4233],{"class":313},[254,142891,959],{"class":260},[254,142893,142894],{"class":313}," infinite",[254,142896,142897],{"class":313}," alternate",[254,142899,1430],{"class":264},[254,142901,142902],{"class":256,"line":1457},[254,142903,1705],{"class":264},[14,142905,142795],{},[245,142907,142910],{"className":142908,"code":142909,"language":5328},[5326],"\n\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-200.png\">\n\n#### 18.2.1.5 动画简写\n\n\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-201.png\">\n\nname,duration这两个属性必须写！\n\n### 18.2.2 案例\n\n#### 18.2.2.1 热点图\n\n\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-202.png\">\n\n```Css\n@keyframes slide {\n  from { transform: translateX(0); }\n  to { transform: translateX(100px); }\n}\ndiv {\n  animation: slide 1s ease infinite;\n}\n",[251,142911,142909],{"__ignoreMap":174},[22139,142913,142915],{"id":142914},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[14,142917,142918],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[1602,142920],{"style":126548,"src":142921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[245,142923,142924],{"className":126692,"code":142798,"language":126694,"meta":174,"style":174},[251,142925,142926,142930,142938,142956,142976,142980,142984,142990,143014],{"__ignoreMap":174},[254,142927,142928],{"class":256,"line":257},[254,142929,142805],{"class":323},[254,142931,142932,142934,142936],{"class":256,"line":175},[254,142933,142810],{"class":260},[254,142935,142813],{"class":5357},[254,142937,15713],{"class":264},[254,142939,142940,142942,142944,142946,142948,142950,142952,142954],{"class":256,"line":1319},[254,142941,142820],{"class":2103},[254,142943,79948],{"class":264},[254,142945,48275],{"class":313},[254,142947,51578],{"class":264},[254,142949,142829],{"class":313},[254,142951,265],{"class":264},[254,142953,456],{"class":313},[254,142955,142836],{"class":264},[254,142957,142958,142960,142962,142964,142966,142968,142970,142972,142974],{"class":256,"line":1334},[254,142959,142841],{"class":2103},[254,142961,79948],{"class":264},[254,142963,48275],{"class":313},[254,142965,51578],{"class":264},[254,142967,142829],{"class":313},[254,142969,265],{"class":264},[254,142971,575],{"class":313},[254,142973,51633],{"class":260},[254,142975,142836],{"class":264},[254,142977,142978],{"class":256,"line":1340},[254,142979,1705],{"class":264},[254,142981,142982],{"class":256,"line":1354},[254,142983,142866],{"class":323},[254,142985,142986,142988],{"class":256,"line":1360},[254,142987,51752],{"class":51441},[254,142989,15713],{"class":264},[254,142991,142992,142994,142996,142998,143000,143002,143004,143006,143008,143010,143012],{"class":256,"line":1451},[254,142993,142877],{"class":313},[254,142995,51578],{"class":264},[254,142997,135378],{"class":313},[254,142999,25259],{"class":313},[254,143001,959],{"class":260},[254,143003,78821],{"class":313},[254,143005,4233],{"class":313},[254,143007,959],{"class":260},[254,143009,142894],{"class":313},[254,143011,142897],{"class":313},[254,143013,1430],{"class":264},[254,143015,143016],{"class":256,"line":1457},[254,143017,1705],{"class":264},[14,143019,143020],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[225,143022,143024],{"id":143023},"_1823-知识点回顾","18.2.3 知识点回顾",[245,143026,143027],{"className":126692,"code":128861,"language":126694,"meta":174,"style":174},[251,143028,143029,143035,143045],{"__ignoreMap":174},[254,143030,143031,143033],{"class":256,"line":257},[254,143032,51752],{"class":51441},[254,143034,15713],{"class":264},[254,143036,143037,143039,143041,143043],{"class":256,"line":175},[254,143038,128874],{"class":313},[254,143040,51578],{"class":264},[254,143042,61877],{"class":313},[254,143044,1430],{"class":264},[254,143046,143047],{"class":256,"line":1319},[254,143048,1705],{"class":264},[34,143050,143052],{"id":143051},"_183-3d-转换","18.3 3D 转换",[14,143054,143055],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[225,143057,143059],{"id":143058},"_1831-坐标轴认识","18.3.1 坐标轴认识",[1602,143061],{"style":126548,"src":143062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[225,143064,143066],{"id":143065},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[1602,143068],{"style":126548,"src":143069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[14,143071,143072],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[14,143074,143075],{},"translate3d的效果需要搭配透视perspective来使用",[1602,143077],{"style":126548,"src":143078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[225,143080,143082],{"id":143081},"_1833-透视-perspective","18.3.3 透视 perspective",[1602,143084],{"style":126548,"src":143085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[14,143087,143088],{},"透视写在父盒子上，单位为像素",[225,143090,143092],{"id":143091},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[22139,143094,143096],{"id":143095},"_18341-分开解释","18.3.4.1 分开解释",[1602,143098],{"style":126548,"src":143099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[1602,143101],{"style":126548,"src":143102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[1602,143104],{"style":126548,"src":143105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[14,143107,143108],{},"总结来说就是左手原则",[22139,143110,143112],{"id":143111},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[1602,143114],{"style":126548,"src":143115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[225,143117,143119],{"id":143118},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[1602,143121],{"style":126548,"src":143122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[1602,143124],{"style":126548,"src":143125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[245,143127,143129],{"className":126692,"code":143128,"language":126694,"meta":174,"style":174},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[251,143130,143131,143137,143150,143167],{"__ignoreMap":174},[254,143132,143133,143135],{"class":256,"line":257},[254,143134,51752],{"class":51441},[254,143136,15713],{"class":264},[254,143138,143139,143142,143144,143146,143148],{"class":256,"line":175},[254,143140,143141],{"class":313},"  perspective",[254,143143,51578],{"class":264},[254,143145,65215],{"class":313},[254,143147,51633],{"class":260},[254,143149,1430],{"class":264},[254,143151,143152,143154,143156,143159,143161,143163,143165],{"class":256,"line":1319},[254,143153,136676],{"class":313},[254,143155,51578],{"class":264},[254,143157,143158],{"class":313},"rotateX",[254,143160,265],{"class":264},[254,143162,793],{"class":313},[254,143164,142519],{"class":260},[254,143166,2859],{"class":264},[254,143168,143169],{"class":256,"line":1334},[254,143170,1705],{"class":264},[225,143172,143174],{"id":143173},"_1836-案例","18.3.6 案例",[22139,143176,143178],{"id":143177},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[1602,143180],{"style":126548,"src":143181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[1602,143183],{"style":126548,"src":143184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[1602,143186],{"style":126548,"src":143187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[245,143189,143191],{"className":126692,"code":143190,"language":126694,"meta":174,"style":174},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[251,143192,143193,143198,143204,143216],{"__ignoreMap":174},[254,143194,143195],{"class":256,"line":257},[254,143196,143197],{"class":323},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[254,143199,143200,143202],{"class":256,"line":175},[254,143201,133689],{"class":2103},[254,143203,15713],{"class":264},[254,143205,143206,143208,143210,143212,143214],{"class":256,"line":1319},[254,143207,143141],{"class":313},[254,143209,51578],{"class":264},[254,143211,65215],{"class":313},[254,143213,51633],{"class":260},[254,143215,1430],{"class":264},[254,143217,143218],{"class":256,"line":1334},[254,143219,1705],{"class":264},[22139,143221,143223],{"id":143222},"_18362-3d导航栏","18.3.6.2 3D导航栏",[1602,143225],{"style":126548,"src":143226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[245,143228,143229],{"className":127439,"code":130796,"language":127441,"meta":174,"style":174},[251,143230,143231,143235,143249,143253],{"__ignoreMap":174},[254,143232,143233],{"class":256,"line":257},[254,143234,130803],{"class":323},[254,143236,143237,143239,143241,143243,143245,143247],{"class":256,"line":175},[254,143238,1174],{"class":264},[254,143240,51752],{"class":51441},[254,143242,53627],{"class":2103},[254,143244,310],{"class":264},[254,143246,130816],{"class":369},[254,143248,51448],{"class":264},[254,143250,143251],{"class":256,"line":1319},[254,143252,130823],{"class":264},[254,143254,143255,143257,143259],{"class":256,"line":1334},[254,143256,51926],{"class":264},[254,143258,51752],{"class":51441},[254,143260,51448],{"class":264},[22139,143262,143264],{"id":143263},"_18363-旋转木马","18.3.6.3 旋转木马",[1602,143266],{"style":126548,"src":143267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[245,143269,143270],{"className":126692,"code":142495,"language":126694,"meta":174,"style":174},[251,143271,143272,143278,143294],{"__ignoreMap":174},[254,143273,143274,143276],{"class":256,"line":257},[254,143275,51752],{"class":51441},[254,143277,15713],{"class":264},[254,143279,143280,143282,143284,143286,143288,143290,143292],{"class":256,"line":175},[254,143281,136676],{"class":313},[254,143283,51578],{"class":264},[254,143285,142512],{"class":313},[254,143287,265],{"class":264},[254,143289,793],{"class":313},[254,143291,142519],{"class":260},[254,143293,2859],{"class":264},[254,143295,143296],{"class":256,"line":1319},[254,143297,1705],{"class":264},[5267,143299,143300],{},"html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":174,"searchDepth":175,"depth":175,"links":143302},[143303,143310],{"id":142398,"depth":175,"text":142399,"children":143304},[143305,143306,143307,143308,143309],{"id":142422,"depth":1319,"text":142423},{"id":142477,"depth":1319,"text":142478},{"id":142602,"depth":1319,"text":142603},{"id":142705,"depth":1319,"text":142706},{"id":143023,"depth":1319,"text":143024},{"id":143051,"depth":175,"text":143052,"children":143311},[143312,143313,143314,143315,143316,143317],{"id":143058,"depth":1319,"text":143059},{"id":143065,"depth":1319,"text":143066},{"id":143081,"depth":1319,"text":143082},{"id":143091,"depth":1319,"text":143092},{"id":143118,"depth":1319,"text":143119},{"id":143173,"depth":1319,"text":143174},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142390,"description":23518},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143324,"title":143325,"body":143326,"description":23518,"extension":181,"meta":143529,"navigation":184,"path":143530,"seo":143531,"stem":143532,"__hash__":143533},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143327,"toc":143518},[143328,143331,143335,143338,143341,143345,143348,143351,143354,143358,143361,143365,143368,143372,143375,143379,143393,143397,143422,143425,143428,143445,143449,143453,143456,143459,143463,143466,143469,143487,143491,143494,143508,143512,143515],[10,143329,143325],{"id":143330},"_19-移动端基础-前缀现状与视口",[34,143332,143334],{"id":143333},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[1602,143336],{"style":126548,"src":143337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[14,143339,143340],{},"意思就是加个前缀，增加兼容性",[34,143342,143344],{"id":143343},"_192-移动端现状认识","19.2 移动端现状认识",[1602,143346],{"style":126548,"src":143347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[14,143349,143350],{},"调试方法：",[1602,143352],{"style":126548,"src":143353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[34,143355,143357],{"id":143356},"_193-视口","19.3 视口",[14,143359,143360],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[225,143362,143364],{"id":143363},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[1602,143366],{"style":126548,"src":143367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[225,143369,143371],{"id":143370},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[1602,143373],{"style":126548,"src":143374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[225,143376,143378],{"id":143377},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[1271,143380,143381,143384,143387,143390],{},[24,143382,143383],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[24,143385,143386],{},"理想视口，对设备来讲，是最理想的视口尺寸",[24,143388,143389],{},"需要手动添写meta视口标签通知浏览器操作",[24,143391,143392],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[225,143394,143396],{"id":143395},"_1934-meta视口标签","19.3.4 meta视口标签",[245,143398,143400],{"className":127439,"code":143399,"language":127441,"meta":174,"style":174},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[251,143401,143402],{"__ignoreMap":174},[254,143403,143404,143406,143408,143410,143412,143414,143416,143418,143420],{"class":256,"line":257},[254,143405,1174],{"class":264},[254,143407,51485],{"class":51441},[254,143409,15061],{"class":2103},[254,143411,310],{"class":264},[254,143413,51532],{"class":369},[254,143415,51512],{"class":2103},[254,143417,310],{"class":264},[254,143419,51539],{"class":369},[254,143421,51448],{"class":264},[1602,143423],{"style":126548,"src":143424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[14,143426,143427],{},"标准视口设置：",[21,143429,143430,143433,143436,143439,143442],{},[24,143431,143432],{},"视口宽度和设备保持一致",[24,143434,143435],{},"视口的默认缩放比例1.0",[24,143437,143438],{},"不允许用户自行缩放",[24,143440,143441],{},"最大允许的缩放比例1.0",[24,143443,143444],{},"最小允许的缩放比例1.0",[225,143446,143448],{"id":143447},"_1935-二倍图","19.3.5 二倍图",[22139,143450,143452],{"id":143451},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[1602,143454],{"style":126548,"src":143455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[1602,143457],{"style":126548,"src":143458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[22139,143460,143462],{"id":143461},"_19352-多倍图","19.3.5.2 多倍图",[1602,143464],{"style":126548,"src":143465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[14,143467,143468],{},"二倍图法，代码如下：",[245,143470,143472],{"className":126692,"code":143471,"language":126694,"meta":174,"style":174},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[251,143473,143474,143479],{"__ignoreMap":174},[254,143475,143476],{"class":256,"line":257},[254,143477,143478],{"class":323},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[254,143480,143481,143484],{"class":256,"line":175},[254,143482,143483],{"class":51441},"background-size",[254,143485,143486],{"class":264},": 50% 50%;\n",[22139,143488,143490],{"id":143489},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[1602,143492],{"style":126548,"src":143493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[21,143495,143496,143499,143502,143505],{},[24,143497,143498],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[24,143500,143501],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[24,143503,143504],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[24,143506,143507],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[22139,143509,143511],{"id":143510},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[1602,143513],{"style":126548,"src":143514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[5267,143516,143517],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":174,"searchDepth":175,"depth":175,"links":143519},[143520,143521,143522],{"id":143333,"depth":175,"text":143334},{"id":143343,"depth":175,"text":143344},{"id":143356,"depth":175,"text":143357,"children":143523},[143524,143525,143526,143527,143528],{"id":143363,"depth":1319,"text":143364},{"id":143370,"depth":1319,"text":143371},{"id":143377,"depth":1319,"text":143378},{"id":143395,"depth":1319,"text":143396},{"id":143447,"depth":1319,"text":143448},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143325,"description":23518},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143535,"title":143536,"body":143537,"description":23518,"extension":181,"meta":144414,"navigation":184,"path":144415,"seo":144416,"stem":144417,"__hash__":144418},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143538,"toc":144398},[143539,143542,143546,143553,143556,143563,143566,143571,143574,143578,143582,143589,143592,143595,143599,143602,143605,143608,143611,143614,143618,143621,143625,143627,143630,143633,143636,143639,143641,143644,143646,143676,143678,143708,143712,143715,143719,143722,143739,143742,143745,143821,143823,143826,143829,143832,143835,143837,143840,143843,143847,143869,143872,143875,143879,143882,143888,143891,143895,143898,143901,143905,143908,143911,143914,143918,143921,143924,143927,143930,143934,143937,143941,143948,143951,143954,143957,143960,143970,143973,143976,143983,143986,143990,143993,143996,144000,144003,144006,144009,144054,144057,144060,144063,144065,144194,144196,144234,144237,144240,144242,144360,144362,144396],[10,143540,143536],{"id":143541},"_20-移动端布局实战上篇",[34,143543,143545],{"id":143544},"_201-移动端主流方案","20.1 移动端主流方案",[21,143547,143548],{},[24,143549,143550],{},[414,143551,143552],{},"单独移动端页面（主流）",[1602,143554],{"style":126548,"src":143555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[21,143557,143558],{"start":175},[24,143559,143560],{},[414,143561,143562],{},"响应式兼容PC移动端",[1602,143564],{"style":126548,"src":143565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[21,143567,143568],{"start":1319},[24,143569,143570],{},"两种页面选型布局方式",[1602,143572],{"style":126548,"src":143573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[34,143575,143577],{"id":143576},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[225,143579,143581],{"id":143580},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[14,143583,143584,143585],{},"官网地址： ",[42,143586,143587],{"href":143587,"rel":143588},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[151],[1602,143590],{"style":126548,"src":143591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[1602,143593],{"style":126548,"src":143594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[225,143596,143598],{"id":143597},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[1602,143600],{"style":126548,"src":143601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[1602,143603],{"style":126548,"src":143604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[14,143606,143607],{},"去除高亮：",[14,143609,143610],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[14,143612,143613],{},"-webkit- tap-highlight-color: transparent;",[34,143615,143617],{"id":143616},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[1602,143619],{"style":126548,"src":143620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[34,143622,143624],{"id":143623},"_204-流式布局案例","20.4 流式布局案例",[14,143626,294],{},[14,143628,143629],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[14,143631,143632],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[14,143634,143635],{},"图片格式：",[1602,143637],{"style":126548,"src":143638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[14,143640,135735],{},[1602,143642],{"style":126548,"src":143643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[14,143645,140062],{},[245,143647,143648],{"className":127439,"code":134194,"language":127441,"meta":174,"style":174},[251,143649,143650],{"__ignoreMap":174},[254,143651,143652,143654,143656,143658,143660,143662,143664,143666,143668,143670,143672,143674],{"class":256,"line":257},[254,143653,1174],{"class":264},[254,143655,1602],{"class":51441},[254,143657,55380],{"class":2103},[254,143659,310],{"class":264},[254,143661,134209],{"class":369},[254,143663,55388],{"class":2103},[254,143665,310],{"class":264},[254,143667,134216],{"class":369},[254,143669,134219],{"class":2103},[254,143671,310],{"class":264},[254,143673,134224],{"class":369},[254,143675,51448],{"class":264},[14,143677,140151],{},[245,143679,143680],{"className":127439,"code":134194,"language":127441,"meta":174,"style":174},[251,143681,143682],{"__ignoreMap":174},[254,143683,143684,143686,143688,143690,143692,143694,143696,143698,143700,143702,143704,143706],{"class":256,"line":257},[254,143685,1174],{"class":264},[254,143687,1602],{"class":51441},[254,143689,55380],{"class":2103},[254,143691,310],{"class":264},[254,143693,134209],{"class":369},[254,143695,55388],{"class":2103},[254,143697,310],{"class":264},[254,143699,134216],{"class":369},[254,143701,134219],{"class":2103},[254,143703,310],{"class":264},[254,143705,134224],{"class":369},[254,143707,51448],{"class":264},[34,143709,143711],{"id":143710},"_205-flex布局","20.5 flex布局",[1602,143713],{"style":126548,"src":143714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[225,143716,143718],{"id":143717},"_2051-布局原理","20.5.1 布局原理",[14,143720,143721],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[1271,143723,143724,143727,143730,143733,143736],{},[24,143725,143726],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[24,143728,143729],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[24,143731,143732],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[24,143734,143735],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[24,143737,143738],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[14,143740,143741],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[14,143743,143744],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[245,143746,143748],{"className":126692,"code":143747,"language":126694,"meta":174,"style":174},"\u002F* Flex 弹性布局 *\u002F\n.container {\n  display: flex;\n  flex-direction: row;\n  justify-content: space-between;\n  align-items: center;\n  flex-wrap: wrap;\n}\n",[251,143749,143750,143755,143762,143772,143784,143795,143806,143817],{"__ignoreMap":174},[254,143751,143752],{"class":256,"line":257},[254,143753,143754],{"class":323},"\u002F* Flex 弹性布局 *\u002F\n",[254,143756,143757,143760],{"class":256,"line":175},[254,143758,143759],{"class":2103},".container",[254,143761,15713],{"class":264},[254,143763,143764,143766,143768,143770],{"class":256,"line":1319},[254,143765,128308],{"class":313},[254,143767,51578],{"class":264},[254,143769,51618],{"class":313},[254,143771,1430],{"class":264},[254,143773,143774,143777,143779,143782],{"class":256,"line":1334},[254,143775,143776],{"class":313},"  flex-direction",[254,143778,51578],{"class":264},[254,143780,143781],{"class":313},"row",[254,143783,1430],{"class":264},[254,143785,143786,143789,143791,143793],{"class":256,"line":1340},[254,143787,143788],{"class":313},"  justify-content",[254,143790,51578],{"class":264},[254,143792,51809],{"class":313},[254,143794,1430],{"class":264},[254,143796,143797,143800,143802,143804],{"class":256,"line":1354},[254,143798,143799],{"class":313},"  align-items",[254,143801,51578],{"class":264},[254,143803,51733],{"class":313},[254,143805,1430],{"class":264},[254,143807,143808,143811,143813,143815],{"class":256,"line":1360},[254,143809,143810],{"class":313},"  flex-wrap",[254,143812,51578],{"class":264},[254,143814,78751],{"class":313},[254,143816,1430],{"class":264},[254,143818,143819],{"class":256,"line":1451},[254,143820,1705],{"class":264},[14,143822,70594],{},[14,143824,143825],{},".form-item .male-label {",[14,143827,143828],{},"   margin-right: 20px;",[14,143830,143831],{},"   display: inline-flex;",[14,143833,143834],{},"   align-items: center;",[14,143836,1210],{},[1602,143838],{"style":126548,"src":143839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[1602,143841],{"style":126548,"src":143842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[225,143844,143846],{"id":143845},"_2052-常见父项属性","20.5.2 常见父项属性",[21,143848,143849,143852,143855,143858,143861,143864,143867],{},[24,143850,143851],{},"flex-direction：设置主轴的方向",[24,143853,143854],{},"justify-content：设置主轴上的子元素排列方式",[24,143856,143857],{},"flex-wrap：设置子元素是否换行",[24,143859,143860],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[24,143862,143863],{},"align-items：设置侧轴上的子元素排列方式（单行）",[24,143865,143866],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[24,143868,143851],{},[1602,143870],{"style":126548,"src":143871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[1602,143873],{"style":126548,"src":143874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[21,143876,143877],{"start":175},[24,143878,143854],{},[1602,143880],{"style":126548,"src":143881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[14,143883,143884,143887],{},[251,143885,143886],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[14,143889,143890],{},"跟着主轴走",[21,143892,143893],{"start":1319},[24,143894,143857],{},[1602,143896],{"style":126548,"src":143897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[14,143899,143900],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[21,143902,143903],{"start":1334},[24,143904,143860],{},[1602,143906],{"style":126548,"src":143907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[14,143909,143910],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[14,143912,143913],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[21,143915,143916],{"start":1340},[24,143917,143863],{},[1602,143919],{"style":126548,"src":143920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[14,143922,143923],{},"align-items与align-content之间的区别：",[14,143925,143926],{},"单找items，多找content",[1602,143928],{"style":126548,"src":143929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[21,143931,143932],{"start":1354},[24,143933,143866],{},[1602,143935],{"style":126548,"src":143936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[225,143938,143940],{"id":143939},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[21,143942,143943],{},[24,143944,143945],{},[414,143946,143947],{},"flex 属性",[14,143949,143950],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[1602,143952],{"style":126548,"src":143953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[14,143955,143956],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[14,143958,143959],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[21,143961,143962],{"start":175},[24,143963,143964,13936,143967],{},[414,143965,143966],{},"align-self",[414,143968,143969],{},"控制子项自己在侧轴上的排列方式",[1602,143971],{"style":126548,"src":143972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[14,143974,143975],{},"单个子盒子在父盒子侧轴上的排列方式",[21,143977,143978],{"start":1319},[24,143979,143980,143982],{},[414,143981,95438],{}," 属性定义项目的排列顺序",[1602,143984],{"style":126548,"src":143985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[225,143987,143989],{"id":143988},"_2054-背景线性渐变","20.5.4 背景线性渐变",[1602,143991],{"style":126548,"src":143992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[14,143994,143995],{},"必须要添加浏览器的私有前缀",[225,143997,143999],{"id":143998},"_2055-携程网首页案例","20.5.5 携程网首页案例",[14,144001,144002],{},"学到最重要的知识：",[14,144004,144005],{},"flex处理这样的布局思路",[1602,144007],{"style":126548,"src":144008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[245,144010,144012],{"className":126692,"code":144011,"language":126694,"meta":174,"style":174},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[251,144013,144014,144020,144030,144040,144050],{"__ignoreMap":174},[254,144015,144016,144018],{"class":256,"line":257},[254,144017,143759],{"class":2103},[254,144019,15713],{"class":264},[254,144021,144022,144024,144026,144028],{"class":256,"line":175},[254,144023,128308],{"class":313},[254,144025,51578],{"class":264},[254,144027,51618],{"class":313},[254,144029,1430],{"class":264},[254,144031,144032,144034,144036,144038],{"class":256,"line":1319},[254,144033,143788],{"class":313},[254,144035,51578],{"class":264},[254,144037,51733],{"class":313},[254,144039,1430],{"class":264},[254,144041,144042,144044,144046,144048],{"class":256,"line":1334},[254,144043,143799],{"class":313},[254,144045,51578],{"class":264},[254,144047,51733],{"class":313},[254,144049,1430],{"class":264},[254,144051,144052],{"class":256,"line":1340},[254,144053,1705],{"class":264},[14,144055,144056],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[14,144058,144059],{},"使用属性选择器",[1602,144061],{"style":126548,"src":144062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[14,144064,69030],{},[245,144066,144068],{"className":127439,"code":144067,"language":127441,"meta":174,"style":174},"\u003C!-- 携程网移动端案例结构 -->\n\u003Cdiv class=\"container\">\n  \u003C!-- 搜索栏 -->\n  \u003Cdiv class=\"search-index\">...\u003C\u002Fdiv>\n  \u003C!-- 焦点图 -->\n  \u003Cdiv class=\"focus\">...\u003C\u002Fdiv>\n  \u003C!-- 主导航 -->\n  \u003Cdiv class=\"local-nav\">...\u003C\u002Fdiv>\n  \u003C!-- 子导航 -->\n  \u003Cdiv class=\"nav-common\">...\u003C\u002Fdiv>\n\u003C\u002Fdiv>\n",[251,144069,144070,144075,144089,144094,144114,144119,144138,144143,144162,144167,144186],{"__ignoreMap":174},[254,144071,144072],{"class":256,"line":257},[254,144073,144074],{"class":323},"\u003C!-- 携程网移动端案例结构 -->\n",[254,144076,144077,144079,144081,144083,144085,144087],{"class":256,"line":175},[254,144078,1174],{"class":264},[254,144080,51752],{"class":51441},[254,144082,53627],{"class":2103},[254,144084,310],{"class":264},[254,144086,92464],{"class":369},[254,144088,51448],{"class":264},[254,144090,144091],{"class":256,"line":1319},[254,144092,144093],{"class":323},"  \u003C!-- 搜索栏 -->\n",[254,144095,144096,144098,144100,144102,144104,144107,144110,144112],{"class":256,"line":1334},[254,144097,52285],{"class":264},[254,144099,51752],{"class":51441},[254,144101,53627],{"class":2103},[254,144103,310],{"class":264},[254,144105,144106],{"class":369},"\"search-index\"",[254,144108,144109],{"class":264},">...\u003C\u002F",[254,144111,51752],{"class":51441},[254,144113,51448],{"class":264},[254,144115,144116],{"class":256,"line":1340},[254,144117,144118],{"class":323},"  \u003C!-- 焦点图 -->\n",[254,144120,144121,144123,144125,144127,144129,144132,144134,144136],{"class":256,"line":1354},[254,144122,52285],{"class":264},[254,144124,51752],{"class":51441},[254,144126,53627],{"class":2103},[254,144128,310],{"class":264},[254,144130,144131],{"class":369},"\"focus\"",[254,144133,144109],{"class":264},[254,144135,51752],{"class":51441},[254,144137,51448],{"class":264},[254,144139,144140],{"class":256,"line":1360},[254,144141,144142],{"class":323},"  \u003C!-- 主导航 -->\n",[254,144144,144145,144147,144149,144151,144153,144156,144158,144160],{"class":256,"line":1451},[254,144146,52285],{"class":264},[254,144148,51752],{"class":51441},[254,144150,53627],{"class":2103},[254,144152,310],{"class":264},[254,144154,144155],{"class":369},"\"local-nav\"",[254,144157,144109],{"class":264},[254,144159,51752],{"class":51441},[254,144161,51448],{"class":264},[254,144163,144164],{"class":256,"line":1457},[254,144165,144166],{"class":323},"  \u003C!-- 子导航 -->\n",[254,144168,144169,144171,144173,144175,144177,144180,144182,144184],{"class":256,"line":1469},[254,144170,52285],{"class":264},[254,144172,51752],{"class":51441},[254,144174,53627],{"class":2103},[254,144176,310],{"class":264},[254,144178,144179],{"class":369},"\"nav-common\"",[254,144181,144109],{"class":264},[254,144183,51752],{"class":51441},[254,144185,51448],{"class":264},[254,144187,144188,144190,144192],{"class":256,"line":1752},[254,144189,51926],{"class":264},[254,144191,51752],{"class":51441},[254,144193,51448],{"class":264},[14,144195,70594],{},[245,144197,144198],{"className":126692,"code":137144,"language":126694,"meta":174,"style":174},[251,144199,144200,144214,144230],{"__ignoreMap":174},[254,144201,144202,144204,144206,144208,144210,144212],{"class":256,"line":257},[254,144203,53962],{"class":51441},[254,144205,1154],{"class":264},[254,144207,103248],{"class":2103},[254,144209,310],{"class":260},[254,144211,62840],{"class":369},[254,144213,137161],{"class":264},[254,144215,144216,144218,144220,144222,144224,144226,144228],{"class":256,"line":175},[254,144217,71037],{"class":313},[254,144219,51578],{"class":264},[254,144221,482],{"class":313},[254,144223,51633],{"class":260},[254,144225,51662],{"class":313},[254,144227,130272],{"class":313},[254,144229,1430],{"class":264},[254,144231,144232],{"class":256,"line":1319},[254,144233,1705],{"class":264},[14,144235,144236],{},"总代码和效果展示：",[1602,144238],{"style":126548,"src":144239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[14,144241,69030],{},[245,144243,144244],{"className":127439,"code":144067,"language":127441,"meta":174,"style":174},[251,144245,144246,144250,144264,144268,144286,144290,144308,144312,144330,144334,144352],{"__ignoreMap":174},[254,144247,144248],{"class":256,"line":257},[254,144249,144074],{"class":323},[254,144251,144252,144254,144256,144258,144260,144262],{"class":256,"line":175},[254,144253,1174],{"class":264},[254,144255,51752],{"class":51441},[254,144257,53627],{"class":2103},[254,144259,310],{"class":264},[254,144261,92464],{"class":369},[254,144263,51448],{"class":264},[254,144265,144266],{"class":256,"line":1319},[254,144267,144093],{"class":323},[254,144269,144270,144272,144274,144276,144278,144280,144282,144284],{"class":256,"line":1334},[254,144271,52285],{"class":264},[254,144273,51752],{"class":51441},[254,144275,53627],{"class":2103},[254,144277,310],{"class":264},[254,144279,144106],{"class":369},[254,144281,144109],{"class":264},[254,144283,51752],{"class":51441},[254,144285,51448],{"class":264},[254,144287,144288],{"class":256,"line":1340},[254,144289,144118],{"class":323},[254,144291,144292,144294,144296,144298,144300,144302,144304,144306],{"class":256,"line":1354},[254,144293,52285],{"class":264},[254,144295,51752],{"class":51441},[254,144297,53627],{"class":2103},[254,144299,310],{"class":264},[254,144301,144131],{"class":369},[254,144303,144109],{"class":264},[254,144305,51752],{"class":51441},[254,144307,51448],{"class":264},[254,144309,144310],{"class":256,"line":1360},[254,144311,144142],{"class":323},[254,144313,144314,144316,144318,144320,144322,144324,144326,144328],{"class":256,"line":1451},[254,144315,52285],{"class":264},[254,144317,51752],{"class":51441},[254,144319,53627],{"class":2103},[254,144321,310],{"class":264},[254,144323,144155],{"class":369},[254,144325,144109],{"class":264},[254,144327,51752],{"class":51441},[254,144329,51448],{"class":264},[254,144331,144332],{"class":256,"line":1457},[254,144333,144166],{"class":323},[254,144335,144336,144338,144340,144342,144344,144346,144348,144350],{"class":256,"line":1469},[254,144337,52285],{"class":264},[254,144339,51752],{"class":51441},[254,144341,53627],{"class":2103},[254,144343,310],{"class":264},[254,144345,144179],{"class":369},[254,144347,144109],{"class":264},[254,144349,51752],{"class":51441},[254,144351,51448],{"class":264},[254,144353,144354,144356,144358],{"class":256,"line":1752},[254,144355,51926],{"class":264},[254,144357,51752],{"class":51441},[254,144359,51448],{"class":264},[14,144361,70594],{},[245,144363,144364],{"className":127439,"code":130796,"language":127441,"meta":174,"style":174},[251,144365,144366,144370,144384,144388],{"__ignoreMap":174},[254,144367,144368],{"class":256,"line":257},[254,144369,130803],{"class":323},[254,144371,144372,144374,144376,144378,144380,144382],{"class":256,"line":175},[254,144373,1174],{"class":264},[254,144375,51752],{"class":51441},[254,144377,53627],{"class":2103},[254,144379,310],{"class":264},[254,144381,130816],{"class":369},[254,144383,51448],{"class":264},[254,144385,144386],{"class":256,"line":1319},[254,144387,130823],{"class":264},[254,144389,144390,144392,144394],{"class":256,"line":1334},[254,144391,51926],{"class":264},[254,144393,51752],{"class":51441},[254,144395,51448],{"class":264},[5267,144397,138093],{},{"title":174,"searchDepth":175,"depth":175,"links":144399},[144400,144401,144405,144406,144407],{"id":143544,"depth":175,"text":143545},{"id":143576,"depth":175,"text":143577,"children":144402},[144403,144404],{"id":143580,"depth":1319,"text":143581},{"id":143597,"depth":1319,"text":143598},{"id":143616,"depth":175,"text":143617},{"id":143623,"depth":175,"text":143624},{"id":143710,"depth":175,"text":143711,"children":144408},[144409,144410,144411,144412,144413],{"id":143717,"depth":1319,"text":143718},{"id":143845,"depth":1319,"text":143846},{"id":143939,"depth":1319,"text":143940},{"id":143988,"depth":1319,"text":143989},{"id":143998,"depth":1319,"text":143999},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143536,"description":23518},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144420,"title":144421,"body":144422,"description":23518,"extension":181,"meta":145649,"navigation":184,"path":145650,"seo":145651,"stem":145652,"__hash__":145653},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144423,"toc":145627},[144424,144427,144431,144435,144438,144441,144445,144450,144453,144456,144459,144462,144465,144522,144525,144530,144533,144536,144540,144551,144555,144558,144561,144568,144573,144577,144580,144586,144589,144593,144596,144603,144606,144609,144616,144619,144626,144629,144632,144639,144642,144645,144647,144664,144668,144671,144674,144677,144681,144684,144687,144690,144693,144696,144699,144701,144704,144707,144769,144772,144882,144889,144895,144898,144901,144905,144908,144912,144917,144920,144927,144930,144936,144941,144944,144947,144950,144953,144956,144959,144962,144965,145021,145023,145049,145053,145056,145059,145062,145070,145073,145076,145080,145136,145139,145143,145149,145160,145163,145168,145171,145174,145180,145183,145186,145189,145192,145195,145198,145201,145204,145229,145235,145238,145241,145244,145247,145250,145253,145258,145261,145264,145267,145275,145278,145285,145288,145291,145293,145317,145319,145322,145325,145328,145331,145334,145337,145340,145374,145377,145380,145414,145421,145424,145427,145430,145433,145436,145439,145446,145449,145452,145455,145458,145465,145468,145471,145478,145481,145484,145488,145491,145494,145497,145500,145503,145506,145509,145512,145514,145538,145540,145564,145568,145579,145582,145585,145588,145591,145594,145597,145600,145603,145606,145609,145612,145615,145618,145621,145624],[10,144425,144421],{"id":144426},"_21-移动端布局实战下篇",[34,144428,144430],{"id":144429},"_211-rem适配布局","21.1 rem适配布局",[225,144432,144434],{"id":144433},"_2111-rem单位","21.1.1 rem单位",[1602,144436],{"style":126548,"src":144437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[14,144439,144440],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[225,144442,144444],{"id":144443},"_2112-媒体查询","21.1.2 媒体查询",[21,144446,144447],{},[24,144448,144449],{},"参数介绍",[1602,144451],{"style":126548,"src":144452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[1602,144454],{"style":126548,"src":144455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[1602,144457],{"style":126548,"src":144458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[1602,144460],{"style":126548,"src":144461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[1602,144463],{"style":126548,"src":144464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[245,144466,144468],{"className":126692,"code":144467,"language":126694,"meta":174,"style":174},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[251,144469,144470,144475,144494,144501,144514,144518],{"__ignoreMap":174},[254,144471,144472],{"class":256,"line":257},[254,144473,144474],{"class":323},"\u002F* 媒体查询 *\u002F\n",[254,144476,144477,144480,144482,144485,144487,144490,144492],{"class":256,"line":175},[254,144478,144479],{"class":260},"@media",[254,144481,1798],{"class":264},[254,144483,144484],{"class":313},"max-width",[254,144486,51578],{"class":264},[254,144488,144489],{"class":313},"768",[254,144491,51633],{"class":260},[254,144493,12583],{"class":264},[254,144495,144496,144499],{"class":256,"line":1319},[254,144497,144498],{"class":2103},"  .container",[254,144500,15713],{"class":264},[254,144502,144503,144506,144508,144510,144512],{"class":256,"line":1334},[254,144504,144505],{"class":313},"    width",[254,144507,51578],{"class":264},[254,144509,575],{"class":313},[254,144511,592],{"class":260},[254,144513,1430],{"class":264},[254,144515,144516],{"class":256,"line":1340},[254,144517,127488],{"class":264},[254,144519,144520],{"class":256,"line":1354},[254,144521,1705],{"class":264},[14,144523,144524],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[21,144526,144527],{"start":175},[24,144528,144529],{},"引入资源",[1602,144531],{"style":126548,"src":144532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[14,144534,144535],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[225,144537,144539],{"id":144538},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[1271,144541,144542,144545,144548],{},[24,144543,144544],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[24,144546,144547],{},"媒体查询可以根据不同设备宽度来修改样式",[24,144549,144550],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[34,144552,144554],{"id":144553},"_212-less基础","21.2 Less基础",[14,144556,144557],{},"css冗余度较高，不利于复用，没有很好的计算能力",[14,144559,144560],{},"Less可以解决该问题，它是css的扩展语言",[14,144562,144563,144564],{},"Less中文网址： ",[42,144565,144566],{"href":144566,"rel":144567},"http:\u002F\u002Flesscss.cn\u002F",[151],[14,144569,144570],{},[414,144571,144572],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[225,144574,144576],{"id":144575},"_2121-less安装","21.2.1 less安装",[14,144578,144579],{},"如果使用vscode，则无需进行下方安装步骤",[14,144581,144582],{},[42,144583,144584],{"href":144584,"rel":144585},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[151],[1602,144587],{"style":126548,"src":144588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[225,144590,144592],{"id":144591},"_2122-less使用","21.2.2 less使用",[14,144594,144595],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[21,144597,144598],{},[24,144599,144600],{},[414,144601,144602],{},"Less 变量",[1602,144604],{"style":126548,"src":144605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[1602,144607],{"style":126548,"src":144608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[21,144610,144611],{"start":175},[24,144612,144613],{},[414,144614,144615],{},"Less 编译",[1602,144617],{"style":126548,"src":144618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[21,144620,144621],{"start":1319},[24,144622,144623],{},[414,144624,144625],{},"Less 嵌套",[1602,144627],{"style":126548,"src":144628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[1602,144630],{"style":126548,"src":144631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[21,144633,144634],{"start":1334},[24,144635,144636],{},[414,144637,144638],{},"Less 运算",[1602,144640],{"style":126548,"src":144641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[14,144643,144644],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[14,144646,294],{},[1271,144648,144649,144652,144655,144658,144661],{},[24,144650,144651],{},"乘号（*）和除号（\u002F）的写法",[24,144653,144654],{},"运算符中间左右有个空格隔开 1px + 5",[24,144656,144657],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[24,144659,144660],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[24,144662,144663],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[34,144665,144667],{"id":144666},"_213-rem-适配方案","21.3 rem 适配方案",[14,144669,144670],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[14,144672,144673],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[1602,144675],{"style":126548,"src":144676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[225,144678,144680],{"id":144679},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[14,144682,144683],{},"rem + 媒体查询 + less 技术",[1602,144685],{"style":126548,"src":144686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[14,144688,144689],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[14,144691,144692],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[1602,144694],{"style":126548,"src":144695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[14,144697,144698],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[14,144700,14774],{},[1602,144702],{"style":126548,"src":144703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[14,144705,144706],{},"index.html:",[245,144708,144710],{"className":126692,"code":144709,"language":126694,"meta":174,"style":174},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[251,144711,144712,144717,144723,144739,144743,144749,144765],{"__ignoreMap":174},[254,144713,144714],{"class":256,"line":257},[254,144715,144716],{"class":323},"\u002F* rem 适配方案 *\u002F\n",[254,144718,144719,144721],{"class":256,"line":175},[254,144720,50776],{"class":51441},[254,144722,15713],{"class":264},[254,144724,144725,144727,144729,144732,144734,144736],{"class":256,"line":1319},[254,144726,70767],{"class":313},[254,144728,51578],{"class":264},[254,144730,144731],{"class":313},"62.5",[254,144733,592],{"class":260},[254,144735,130555],{"class":264},[254,144737,144738],{"class":323},"\u002F* 1rem = 10px *\u002F\n",[254,144740,144741],{"class":256,"line":1334},[254,144742,1705],{"class":264},[254,144744,144745,144747],{"class":256,"line":1340},[254,144746,130540],{"class":2103},[254,144748,15713],{"class":264},[254,144750,144751,144753,144755,144757,144760,144762],{"class":256,"line":1354},[254,144752,70709],{"class":313},[254,144754,51578],{"class":264},[254,144756,710],{"class":313},[254,144758,144759],{"class":260},"rem",[254,144761,130555],{"class":264},[254,144763,144764],{"class":323},"\u002F* 100px *\u002F\n",[254,144766,144767],{"class":256,"line":1360},[254,144768,1705],{"class":264},[14,144770,144771],{},"common.less",[245,144773,144775],{"className":126692,"code":144774,"language":126694,"meta":174,"style":174},"html {\n  font-size: 62.5%; \u002F* 10px *\u002F\n}\ndiv {\n  width: 10rem; \u002F* 100px *\u002F\n}\n```Css\n\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[251,144776,144777,144783,144798,144802,144808,144822,144826,144830,144834,144840,144854,144858,144864,144878],{"__ignoreMap":174},[254,144778,144779,144781],{"class":256,"line":257},[254,144780,50776],{"class":51441},[254,144782,15713],{"class":264},[254,144784,144785,144787,144789,144791,144793,144795],{"class":256,"line":175},[254,144786,70767],{"class":313},[254,144788,51578],{"class":264},[254,144790,144731],{"class":313},[254,144792,592],{"class":260},[254,144794,26208],{"class":264},[254,144796,144797],{"class":323},"\u002F* 10px *\u002F\n",[254,144799,144800],{"class":256,"line":1319},[254,144801,1705],{"class":264},[254,144803,144804,144806],{"class":256,"line":1334},[254,144805,51752],{"class":51441},[254,144807,15713],{"class":264},[254,144809,144810,144812,144814,144816,144818,144820],{"class":256,"line":1340},[254,144811,70709],{"class":313},[254,144813,51578],{"class":264},[254,144815,710],{"class":313},[254,144817,144759],{"class":260},[254,144819,26208],{"class":264},[254,144821,144764],{"class":323},[254,144823,144824],{"class":256,"line":1354},[254,144825,1705],{"class":264},[254,144827,144828],{"class":256,"line":1360},[254,144829,136153],{"class":264},[254,144831,144832],{"class":256,"line":1451},[254,144833,144716],{"class":323},[254,144835,144836,144838],{"class":256,"line":1457},[254,144837,50776],{"class":51441},[254,144839,15713],{"class":264},[254,144841,144842,144844,144846,144848,144850,144852],{"class":256,"line":1469},[254,144843,70767],{"class":313},[254,144845,51578],{"class":264},[254,144847,144731],{"class":313},[254,144849,592],{"class":260},[254,144851,130555],{"class":264},[254,144853,144738],{"class":323},[254,144855,144856],{"class":256,"line":1752},[254,144857,1705],{"class":264},[254,144859,144860,144862],{"class":256,"line":1757},[254,144861,130540],{"class":2103},[254,144863,15713],{"class":264},[254,144865,144866,144868,144870,144872,144874,144876],{"class":256,"line":1763},[254,144867,70709],{"class":313},[254,144869,51578],{"class":264},[254,144871,710],{"class":313},[254,144873,144759],{"class":260},[254,144875,130555],{"class":264},[254,144877,144764],{"class":323},[254,144879,144880],{"class":256,"line":1768},[254,144881,1705],{"class":264},[14,144883,144884,144885,144888],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[23694,144886,144887],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[245,144890,144893],{"className":144891,"code":144892,"language":5328},[5326],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[251,144894,144892],{"__ignoreMap":174},[14,144896,144897],{},"less保存时会自动变成.css文件",[14,144899,144900],{},"好好搞懂上述代码写法",[225,144902,144904],{"id":144903},"_2132-样式导入样式","21.3.2 样式导入样式",[1602,144906],{"style":126548,"src":144907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[225,144909,144911],{"id":144910},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[21,144913,144914],{},[24,144915,144916],{},"准备工作",[1602,144918],{"style":126548,"src":144919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[14,144921,144922,144923],{},"github地址：",[42,144924,144925],{"href":144925,"rel":144926},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[151],[14,144928,144929],{},"下载之后，将index.js文件拖到项目中就可以了",[14,144931,144932,144933],{},"js文件引入到index.html中使用的是",[251,144934,144935],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[21,144937,144938],{"start":175},[24,144939,144940],{},"vscode插件",[1602,144942],{"style":126548,"src":144943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[14,144945,144946],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[14,144948,144949],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[1602,144951],{"style":126548,"src":144952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[14,144954,144955],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[1602,144957],{"style":126548,"src":144958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[14,144960,144961],{},"修改成75就可以，alt+z为快捷键",[14,144963,144964],{},"index.css：",[245,144966,144967],{"className":126692,"code":144709,"language":126694,"meta":174,"style":174},[251,144968,144969,144973,144979,144993,144997,145003,145017],{"__ignoreMap":174},[254,144970,144971],{"class":256,"line":257},[254,144972,144716],{"class":323},[254,144974,144975,144977],{"class":256,"line":175},[254,144976,50776],{"class":51441},[254,144978,15713],{"class":264},[254,144980,144981,144983,144985,144987,144989,144991],{"class":256,"line":1319},[254,144982,70767],{"class":313},[254,144984,51578],{"class":264},[254,144986,144731],{"class":313},[254,144988,592],{"class":260},[254,144990,130555],{"class":264},[254,144992,144738],{"class":323},[254,144994,144995],{"class":256,"line":1334},[254,144996,1705],{"class":264},[254,144998,144999,145001],{"class":256,"line":1340},[254,145000,130540],{"class":2103},[254,145002,15713],{"class":264},[254,145004,145005,145007,145009,145011,145013,145015],{"class":256,"line":1354},[254,145006,70709],{"class":313},[254,145008,51578],{"class":264},[254,145010,710],{"class":313},[254,145012,144759],{"class":260},[254,145014,130555],{"class":264},[254,145016,144764],{"class":323},[254,145018,145019],{"class":256,"line":1360},[254,145020,1705],{"class":264},[14,145022,144706],{},[245,145024,145025],{"className":126692,"code":127096,"language":126694,"meta":174,"style":174},[251,145026,145027,145033,145045],{"__ignoreMap":174},[254,145028,145029,145031],{"class":256,"line":257},[254,145030,51941],{"class":51441},[254,145032,15713],{"class":264},[254,145034,145035,145037,145039,145041,145043],{"class":256,"line":175},[254,145036,70767],{"class":313},[254,145038,51578],{"class":264},[254,145040,865],{"class":313},[254,145042,51633],{"class":260},[254,145044,1430],{"class":264},[254,145046,145047],{"class":256,"line":1319},[254,145048,1705],{"class":264},[34,145050,145052],{"id":145051},"_214-响应式开发","21.4 响应式开发",[14,145054,145055],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[1602,145057],{"style":126548,"src":145058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[14,145060,145061],{},"做法：",[1271,145063,145064,145067],{},[24,145065,145066],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[24,145068,145069],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[1602,145071],{"style":126548,"src":145072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[14,145074,145075],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[225,145077,145079],{"id":145078},"_2141-简单代码示范","21.4.1 简单代码示范",[245,145081,145082],{"className":126692,"code":144709,"language":126694,"meta":174,"style":174},[251,145083,145084,145088,145094,145108,145112,145118,145132],{"__ignoreMap":174},[254,145085,145086],{"class":256,"line":257},[254,145087,144716],{"class":323},[254,145089,145090,145092],{"class":256,"line":175},[254,145091,50776],{"class":51441},[254,145093,15713],{"class":264},[254,145095,145096,145098,145100,145102,145104,145106],{"class":256,"line":1319},[254,145097,70767],{"class":313},[254,145099,51578],{"class":264},[254,145101,144731],{"class":313},[254,145103,592],{"class":260},[254,145105,130555],{"class":264},[254,145107,144738],{"class":323},[254,145109,145110],{"class":256,"line":1334},[254,145111,1705],{"class":264},[254,145113,145114,145116],{"class":256,"line":1340},[254,145115,130540],{"class":2103},[254,145117,15713],{"class":264},[254,145119,145120,145122,145124,145126,145128,145130],{"class":256,"line":1354},[254,145121,70709],{"class":313},[254,145123,51578],{"class":264},[254,145125,710],{"class":313},[254,145127,144759],{"class":260},[254,145129,130555],{"class":264},[254,145131,144764],{"class":323},[254,145133,145134],{"class":256,"line":1360},[254,145135,1705],{"class":264},[14,145137,145138],{},"父盒子一般命名为container",[225,145140,145142],{"id":145141},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[14,145144,145145,145146],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[414,145147,145148],{},"使得 Web 开发更加快捷",[1271,145150,145151],{},[24,145152,145153,145154],{},"官网：",[414,145155,145156],{},[42,145157,145158],{"href":145158,"rel":145159},"http:\u002F\u002Fgetbootstrap.com\u002F",[151],[14,145161,145162],{},"可以直接去官网拿现成的东西",[21,145164,145165],{},[24,145166,145167],{},"Bootstrap的使用",[14,145169,145170],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[14,145172,145173],{},"Bootstrap 使用四步曲：",[14,145175,145176,145179],{},[414,145177,145178],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[1602,145181],{"style":126548,"src":145182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[14,145184,145185],{},"打开Bootstrap官网，然后下载",[1602,145187],{"style":126548,"src":145188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[1602,145190],{"style":126548,"src":145191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[14,145193,145194],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[14,145196,145197],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[14,145199,145200],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[1602,145202],{"style":126548,"src":145203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[245,145205,145207],{"className":126692,"code":145206,"language":126694,"meta":174,"style":174},".center {\n  color: red;\n}\n",[251,145208,145209,145215,145225],{"__ignoreMap":174},[254,145210,145211,145213],{"class":256,"line":257},[254,145212,126983],{"class":2103},[254,145214,15713],{"class":264},[254,145216,145217,145219,145221,145223],{"class":256,"line":175},[254,145218,71046],{"class":313},[254,145220,51578],{"class":264},[254,145222,57562],{"class":313},[254,145224,1430],{"class":264},[254,145226,145227],{"class":256,"line":1319},[254,145228,1705],{"class":264},[14,145230,145231,145234],{},[251,145232,145233],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[1602,145236],{"style":126548,"src":145237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[1602,145239],{"style":126548,"src":145240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[1602,145242],{"style":126548,"src":145243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[14,145245,145246],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[1602,145248],{"style":126548,"src":145249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[14,145251,145252],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[21,145254,145255],{"start":175},[24,145256,145257],{},"布局容器",[1602,145259],{"style":126548,"src":145260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[14,145262,145263],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[14,145265,145266],{},"container-fluid用于移动式布局比较方便",[21,145268,145269],{"start":1319},[24,145270,145271,145272],{},"bootstrap ",[414,145273,145274],{},"栅格系统原理",[1602,145276],{"style":126548,"src":145277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[21,145279,145280],{"start":1334},[24,145281,145282],{},[414,145283,145284],{},"栅格选项参数",[1602,145286],{"style":126548,"src":145287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[14,145289,145290],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[14,145292,14774],{},[245,145294,145295],{"className":126692,"code":145206,"language":126694,"meta":174,"style":174},[251,145296,145297,145303,145313],{"__ignoreMap":174},[254,145298,145299,145301],{"class":256,"line":257},[254,145300,126983],{"class":2103},[254,145302,15713],{"class":264},[254,145304,145305,145307,145309,145311],{"class":256,"line":175},[254,145306,71046],{"class":313},[254,145308,51578],{"class":264},[254,145310,57562],{"class":313},[254,145312,1430],{"class":264},[254,145314,145315],{"class":256,"line":1319},[254,145316,1705],{"class":264},[14,145318,135735],{},[1602,145320],{"style":126548,"src":145321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[14,145323,145324],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[14,145326,145327],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[14,145329,145330],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[14,145332,145333],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[14,145335,145336],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[14,145338,145339],{},"汇总展示说明：",[245,145341,145342],{"className":127439,"code":130796,"language":127441,"meta":174,"style":174},[251,145343,145344,145348,145362,145366],{"__ignoreMap":174},[254,145345,145346],{"class":256,"line":257},[254,145347,130803],{"class":323},[254,145349,145350,145352,145354,145356,145358,145360],{"class":256,"line":175},[254,145351,1174],{"class":264},[254,145353,51752],{"class":51441},[254,145355,53627],{"class":2103},[254,145357,310],{"class":264},[254,145359,130816],{"class":369},[254,145361,51448],{"class":264},[254,145363,145364],{"class":256,"line":1319},[254,145365,130823],{"class":264},[254,145367,145368,145370,145372],{"class":256,"line":1334},[254,145369,51926],{"class":264},[254,145371,51752],{"class":51441},[254,145373,51448],{"class":264},[1602,145375],{"style":126548,"src":145376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[14,145378,145379],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[245,145381,145382],{"className":127439,"code":130796,"language":127441,"meta":174,"style":174},[251,145383,145384,145388,145402,145406],{"__ignoreMap":174},[254,145385,145386],{"class":256,"line":257},[254,145387,130803],{"class":323},[254,145389,145390,145392,145394,145396,145398,145400],{"class":256,"line":175},[254,145391,1174],{"class":264},[254,145393,51752],{"class":51441},[254,145395,53627],{"class":2103},[254,145397,310],{"class":264},[254,145399,130816],{"class":369},[254,145401,51448],{"class":264},[254,145403,145404],{"class":256,"line":1319},[254,145405,130823],{"class":264},[254,145407,145408,145410,145412],{"class":256,"line":1334},[254,145409,51926],{"class":264},[254,145411,51752],{"class":51441},[254,145413,51448],{"class":264},[21,145415,145416],{"start":1340},[24,145417,145418],{},[414,145419,145420],{},"列嵌套",[1602,145422],{"style":126548,"src":145423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[14,145425,145426],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[14,145428,145429],{},"没加row内部这样：",[1602,145431],{"style":126548,"src":145432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[14,145434,145435],{},"加上row之后内部为：",[1602,145437],{"style":126548,"src":145438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[21,145440,145441],{"start":1354},[24,145442,145443],{},[414,145444,145445],{},"列偏移",[1602,145447],{"style":126548,"src":145448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[14,145450,145451],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[14,145453,145454],{},"要加偏移量，即偏移份数",[14,145456,145457],{},"偏移的份数=12-两个盒子的份数",[21,145459,145460],{"start":1360},[24,145461,145462],{},[414,145463,145464],{},"列排序",[1602,145466],{"style":126548,"src":145467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[14,145469,145470],{},"pull拉左；push推右",[21,145472,145473],{"start":1451},[24,145474,145475],{},[414,145476,145477],{},"响应式工具",[1602,145479],{"style":126548,"src":145480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[14,145482,145483],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[225,145485,145487],{"id":145486},"_2143-响应式小项目","21.4.3 响应式小项目",[14,145489,145490],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[14,145492,145493],{},"ul {",[14,145495,145496],{},"list-style: none;",[14,145498,145499],{},"margin:0;",[14,145501,145502],{},"padding:0; }",[1602,145504],{"style":126548,"src":145505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[1602,145507],{"style":126548,"src":145508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[14,145510,145511],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[14,145513,69030],{},[245,145515,145516],{"className":126692,"code":139362,"language":126694,"meta":174,"style":174},[251,145517,145518,145524,145534],{"__ignoreMap":174},[254,145519,145520,145522],{"class":256,"line":257},[254,145521,130540],{"class":2103},[254,145523,15713],{"class":264},[254,145525,145526,145528,145530,145532],{"class":256,"line":175},[254,145527,131172],{"class":313},[254,145529,51578],{"class":264},[254,145531,23877],{"class":313},[254,145533,1430],{"class":264},[254,145535,145536],{"class":256,"line":1319},[254,145537,1705],{"class":264},[14,145539,70594],{},[245,145541,145542],{"className":126692,"code":139362,"language":126694,"meta":174,"style":174},[251,145543,145544,145550,145560],{"__ignoreMap":174},[254,145545,145546,145548],{"class":256,"line":257},[254,145547,130540],{"class":2103},[254,145549,15713],{"class":264},[254,145551,145552,145554,145556,145558],{"class":256,"line":175},[254,145553,131172],{"class":313},[254,145555,51578],{"class":264},[254,145557,23877],{"class":313},[254,145559,1430],{"class":264},[254,145561,145562],{"class":256,"line":1319},[254,145563,1705],{"class":264},[34,145565,145567],{"id":145566},"_215-swiper-插件使用","21.5 swiper 插件使用",[1271,145569,145570,145573,145576],{},[24,145571,145572],{},"下载需要的css和js文件html页面中 引入相关文件",[24,145574,145575],{},"官网找到类似案例，复制html结构，css样式 js 语法",[24,145577,145578],{},"根据需求定制修改模块",[1602,145580],{"style":126548,"src":145581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[14,145583,145584],{},"解压后将这两部分放到项目中",[1602,145586],{"style":126548,"src":145587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[14,145589,145590],{},"这个插件可以帮助我们实现轮播图效果",[14,145592,145593],{},"用法：",[1602,145595],{"style":126548,"src":145596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[14,145598,145599],{},"找到自己喜欢的",[1602,145601],{"style":126548,"src":145602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[14,145604,145605],{},"右键，查看网页源代码",[1602,145607],{"style":126548,"src":145608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[14,145610,145611],{},"复制人家的结构内容",[14,145613,145614],{},"然后去看API文档：",[1602,145616],{"style":126548,"src":145617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[14,145619,145620],{},"可以看看如何修改样式",[14,145622,145623],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[5267,145625,145626],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":174,"searchDepth":175,"depth":175,"links":145628},[145629,145634,145638,145643,145648],{"id":144429,"depth":175,"text":144430,"children":145630},[145631,145632,145633],{"id":144433,"depth":1319,"text":144434},{"id":144443,"depth":1319,"text":144444},{"id":144538,"depth":1319,"text":144539},{"id":144553,"depth":175,"text":144554,"children":145635},[145636,145637],{"id":144575,"depth":1319,"text":144576},{"id":144591,"depth":1319,"text":144592},{"id":144666,"depth":175,"text":144667,"children":145639},[145640,145641,145642],{"id":144679,"depth":1319,"text":144680},{"id":144903,"depth":1319,"text":144904},{"id":144910,"depth":1319,"text":144911},{"id":145051,"depth":175,"text":145052,"children":145644},[145645,145646,145647],{"id":145078,"depth":1319,"text":145079},{"id":145141,"depth":1319,"text":145142},{"id":145486,"depth":1319,"text":145487},{"id":145566,"depth":175,"text":145567},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144421,"description":23518},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":145655,"title":145656,"body":145657,"description":23518,"extension":181,"meta":145877,"navigation":184,"path":145878,"seo":145879,"stem":145880,"__hash__":145881},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":145658,"toc":145873},[145659,145662,145666,145669,145684,145689,145692,145697,145732,145737,145749,145754,145767,145772,145789,145794,145814,145819,145837,145840,145843,145846,145849,145853,145856,145859,145862,145865,145868,145871],[10,145660,145656],{"id":145661},"_22-代码提交与新型相对单位",[34,145663,145665],{"id":145664},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[14,145667,145668],{},"法1：",[21,145670,145671,145678,145681],{},[24,145672,145673,145674],{},"登录网站注册：",[42,145675,145676],{"href":145676,"rel":145677},"https:\u002F\u002Fgitee.com\u002F",[151],[24,145679,145680],{},"码云创建新的仓库",[24,145682,145683],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[1271,145685,145686],{},[24,145687,145688],{},"在网站根目录右键-- Git Bash Here",[1602,145690],{"style":126548,"src":145691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[1271,145693,145694],{},[24,145695,145696],{},"如果是第一次利用git提交，请配置好全局选项",[245,145698,145700],{"className":117436,"code":145699,"language":117438,"meta":174,"style":174},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[251,145701,145702,145718],{"__ignoreMap":174},[254,145703,145704,145707,145709,145712,145715],{"class":256,"line":257},[254,145705,145706],{"class":2103},"git",[254,145708,119859],{"class":369},[254,145710,145711],{"class":313}," --global",[254,145713,145714],{"class":369}," user.name",[254,145716,145717],{"class":369}," \"你的名字\"\n",[254,145719,145720,145722,145724,145726,145729],{"class":256,"line":175},[254,145721,145706],{"class":2103},[254,145723,119859],{"class":369},[254,145725,145711],{"class":313},[254,145727,145728],{"class":369}," user.email",[254,145730,145731],{"class":369}," \"你的邮箱\"\n",[1271,145733,145734],{},[24,145735,145736],{},"初始化仓库",[245,145738,145740],{"className":117436,"code":145739,"language":117438,"meta":174,"style":174},"git init\n",[251,145741,145742],{"__ignoreMap":174},[254,145743,145744,145746],{"class":256,"line":257},[254,145745,145706],{"class":2103},[254,145747,145748],{"class":369}," init\n",[1271,145750,145751],{},[24,145752,145753],{},"把本地文件放到暂存区",[245,145755,145757],{"className":117436,"code":145756,"language":117438,"meta":174,"style":174},"git add .\n",[251,145758,145759],{"__ignoreMap":174},[254,145760,145761,145763,145765],{"class":256,"line":257},[254,145762,145706],{"class":2103},[254,145764,5350],{"class":369},[254,145766,28882],{"class":369},[1271,145768,145769],{},[24,145770,145771],{},"把本地文件放到本地仓库里面",[245,145773,145775],{"className":117436,"code":145774,"language":117438,"meta":174,"style":174},"git commit -m \"first commit\"\n",[251,145776,145777],{"__ignoreMap":174},[254,145778,145779,145781,145784,145786],{"class":256,"line":257},[254,145780,145706],{"class":2103},[254,145782,145783],{"class":369}," commit",[254,145785,101023],{"class":313},[254,145787,145788],{"class":369}," \"first commit\"\n",[1271,145790,145791],{},[24,145792,145793],{},"链接远程仓库",[245,145795,145797],{"className":117436,"code":145796,"language":117438,"meta":174,"style":174},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[251,145798,145799],{"__ignoreMap":174},[254,145800,145801,145803,145806,145808,145811],{"class":256,"line":257},[254,145802,145706],{"class":2103},[254,145804,145805],{"class":369}," remote",[254,145807,5350],{"class":369},[254,145809,145810],{"class":369}," origin",[254,145812,145813],{"class":369}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[1271,145815,145816],{},[24,145817,145818],{},"把本地仓库的文件推送到远程仓库 push",[245,145820,145822],{"className":117436,"code":145821,"language":117438,"meta":174,"style":174},"git push -u origin master\n",[251,145823,145824],{"__ignoreMap":174},[254,145825,145826,145828,145830,145832,145834],{"class":256,"line":257},[254,145827,145706],{"class":2103},[254,145829,29157],{"class":369},[254,145831,28431],{"class":313},[254,145833,145810],{"class":369},[254,145835,145836],{"class":369}," master\n",[1602,145838],{"style":126548,"src":145839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[14,145841,145842],{},"上方方法暂未实现，后边学完git后在整",[14,145844,145845],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[1602,145847],{"style":126548,"src":145848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[34,145850,145852],{"id":145851},"_222-新型相对单位","22.2 新型相对单位",[1602,145854],{"style":126548,"src":145855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[1602,145857],{"style":126548,"src":145858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[14,145860,145861],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[14,145863,145864],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[1602,145866],{"style":126548,"src":145867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[14,145869,145870],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[5267,145872,24098],{},{"title":174,"searchDepth":175,"depth":175,"links":145874},[145875,145876],{"id":145664,"depth":175,"text":145665},{"id":145851,"depth":175,"text":145852},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":145656,"description":23518},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":145883,"title":145884,"body":145885,"description":145889,"extension":181,"meta":145890,"navigation":184,"path":145891,"seo":145892,"stem":145893,"__hash__":145894},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":145886,"toc":145887},[],{"title":174,"searchDepth":175,"depth":175,"links":145888},[],"自己正经开始学编程的第一门语言！",{"category":92980},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":145884,"description":145889},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":145896,"title":145897,"body":145898,"description":23518,"extension":181,"meta":147045,"navigation":184,"path":147046,"seo":147047,"stem":147048,"__hash__":147049},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":145899,"toc":147021},[145900,145903,145907,145910,145913,145938,145941,145947,145951,145954,145981,145984,146024,146027,146039,146042,146048,146052,146056,146083,146100,146107,146111,146114,146140,146143,146147,146150,146190,146193,146210,146216,146220,146225,146269,146272,146290,146293,146361,146365,146372,146375,146390,146393,146402,146405,146416,146419,146428,146431,146448,146451,146466,146470,146474,146477,146479,146499,146503,146506,146509,146520,146523,146529,146533,146539,146566,146569,146581,146584,146595,146598,146604,146608,146614,146664,146667,146709,146712,146745,146748,146782,146786,146789,146809,146812,146848,146851,146864,146868,146872,146878,146881,146894,146898,146901,146907,146910,146914,146917,146920,146969,146973,146989,146995,147002,147008,147018],[10,145901,145897],{"id":145902},"_1-python环境与第一个程序",[34,145904,145906],{"id":145905},"_11-什么是python","1.1 什么是Python",[14,145908,145909],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[14,145911,145912],{},"理解 Python 时抓住三个关键词：",[21,145914,145915,145918,145921],{},[24,145916,145917],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[24,145919,145920],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[24,145922,145923,145924,477,145927,477,145930,477,145933,477,145935,28526],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[251,145925,145926],{},"os",[251,145928,145929],{},"sys",[251,145931,145932],{},"json",[251,145934,58001],{},[251,145936,145937],{},"datetime",[14,145939,145940],{},"Python 程序的运行链路：",[245,145942,145945],{"className":145943,"code":145944,"language":5328,"meta":174},[5326],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[251,145946,145944],{"__ignoreMap":174},[34,145948,145950],{"id":145949},"_12-python解释器","1.2 Python解释器",[14,145952,145953],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[245,145955,145957],{"className":23963,"code":145956,"language":23965,"meta":174,"style":174},"python --version\npython3 --version\npython\npython3\n",[251,145958,145959,145965,145971,145976],{"__ignoreMap":174},[254,145960,145961,145963],{"class":256,"line":257},[254,145962,30521],{"class":2103},[254,145964,26434],{"class":313},[254,145966,145967,145969],{"class":256,"line":175},[254,145968,101020],{"class":2103},[254,145970,26434],{"class":313},[254,145972,145973],{"class":256,"line":1319},[254,145974,145975],{"class":2103},"python\n",[254,145977,145978],{"class":256,"line":1334},[254,145979,145980],{"class":2103},"python3\n",[14,145982,145983],{},"进入交互模式后，可以直接输入表达式：",[245,145985,145987],{"className":30519,"code":145986,"language":30521,"meta":174,"style":174},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[251,145988,145989,146000,146005,146019],{"__ignoreMap":174},[254,145990,145991,145994,145996,145998],{"class":256,"line":257},[254,145992,145993],{"class":260},">>>",[254,145995,25259],{"class":313},[254,145997,45707],{"class":260},[254,145999,47864],{"class":313},[254,146001,146002],{"class":256,"line":175},[254,146003,146004],{"class":313},"3\n",[254,146006,146007,146009,146012,146014,146017],{"class":256,"line":1319},[254,146008,145993],{"class":260},[254,146010,146011],{"class":313}," print",[254,146013,265],{"class":264},[254,146015,146016],{"class":369},"\"hello python\"",[254,146018,271],{"class":264},[254,146020,146021],{"class":256,"line":1334},[254,146022,146023],{"class":264},"hello python\n",[14,146025,146026],{},"退出交互模式：",[245,146028,146030],{"className":30519,"code":146029,"language":30521,"meta":174,"style":174},"exit()\n",[251,146031,146032],{"__ignoreMap":174},[254,146033,146034,146037],{"class":256,"line":257},[254,146035,146036],{"class":313},"exit",[254,146038,2116],{"class":264},[14,146040,146041],{},"或使用快捷键：",[245,146043,146046],{"className":146044,"code":146045,"language":5328,"meta":174},[5326],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[251,146047,146045],{"__ignoreMap":174},[34,146049,146051],{"id":146050},"_13-安装python","1.3 安装Python",[225,146053,146055],{"id":146054},"_131-windows安装","1.3.1 Windows安装",[21,146057,146058,146065,146068,146074,146080],{},[24,146059,146060,146061],{},"打开 Python 官网：",[42,146062,146063],{"href":146063,"rel":146064},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[151],[24,146066,146067],{},"下载 Windows Installer。",[24,146069,146070,146071,28526],{},"安装时勾选 ",[251,146072,146073],{},"Add Python to PATH",[24,146075,146076,146077,28526],{},"点击 ",[251,146078,146079],{},"Install Now",[24,146081,146082],{},"安装完成后打开命令提示符验证：",[245,146084,146086],{"className":23963,"code":146085,"language":23965,"meta":174,"style":174},"python --version\npip --version\n",[251,146087,146088,146094],{"__ignoreMap":174},[254,146089,146090,146092],{"class":256,"line":257},[254,146091,30521],{"class":2103},[254,146093,26434],{"class":313},[254,146095,146096,146098],{"class":256,"line":175},[254,146097,23972],{"class":2103},[254,146099,26434],{"class":313},[14,146101,146102,146103,146106],{},"如果提示 ",[251,146104,146105],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[225,146108,146110],{"id":146109},"_132-macos安装","1.3.2 macOS安装",[14,146112,146113],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[245,146115,146117],{"className":23963,"code":146116,"language":23965,"meta":174,"style":174},"brew install python\npython3 --version\npip3 --version\n",[251,146118,146119,146128,146134],{"__ignoreMap":174},[254,146120,146121,146124,146126],{"class":256,"line":257},[254,146122,146123],{"class":2103},"brew",[254,146125,23975],{"class":369},[254,146127,124458],{"class":369},[254,146129,146130,146132],{"class":256,"line":175},[254,146131,101020],{"class":2103},[254,146133,26434],{"class":313},[254,146135,146136,146138],{"class":256,"line":1319},[254,146137,119840],{"class":2103},[254,146139,26434],{"class":313},[14,146141,146142],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[225,146144,146146],{"id":146145},"_133-linux安装","1.3.3 Linux安装",[14,146148,146149],{},"Ubuntu\u002FDebian：",[245,146151,146153],{"className":23963,"code":146152,"language":23965,"meta":174,"style":174},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[251,146154,146155,146163,146178,146184],{"__ignoreMap":174},[254,146156,146157,146159,146161],{"class":256,"line":257},[254,146158,24717],{"class":2103},[254,146160,117457],{"class":369},[254,146162,26383],{"class":369},[254,146164,146165,146167,146169,146171,146173,146175],{"class":256,"line":175},[254,146166,24717],{"class":2103},[254,146168,117457],{"class":369},[254,146170,23975],{"class":369},[254,146172,104544],{"class":369},[254,146174,100939],{"class":369},[254,146176,146177],{"class":369}," python3-venv\n",[254,146179,146180,146182],{"class":256,"line":1319},[254,146181,101020],{"class":2103},[254,146183,26434],{"class":313},[254,146185,146186,146188],{"class":256,"line":1334},[254,146187,119840],{"class":2103},[254,146189,26434],{"class":313},[14,146191,146192],{},"Fedora：",[245,146194,146196],{"className":23963,"code":146195,"language":23965,"meta":174,"style":174},"sudo dnf install python3 python3-pip\n",[251,146197,146198],{"__ignoreMap":174},[254,146199,146200,146202,146204,146206,146208],{"class":256,"line":257},[254,146201,24717],{"class":2103},[254,146203,26456],{"class":369},[254,146205,23975],{"class":369},[254,146207,104544],{"class":369},[254,146209,119905],{"class":369},[14,146211,146212,146213,146215],{},"Linux 上通常使用 ",[251,146214,101020],{}," 命令，避免和系统旧版本 Python 冲突。",[34,146217,146219],{"id":146218},"_14-pip包管理器","1.4 pip包管理器",[14,146221,146222,146224],{},[251,146223,23972],{}," 用来安装第三方库。",[245,146226,146228],{"className":23963,"code":146227,"language":23965,"meta":174,"style":174},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[251,146229,146230,146239,146248,146256,146262],{"__ignoreMap":174},[254,146231,146232,146234,146236],{"class":256,"line":257},[254,146233,23972],{"class":2103},[254,146235,23975],{"class":369},[254,146237,146238],{"class":369}," requests\n",[254,146240,146241,146243,146246],{"class":256,"line":175},[254,146242,23972],{"class":2103},[254,146244,146245],{"class":369}," uninstall",[254,146247,146238],{"class":369},[254,146249,146250,146252,146254],{"class":256,"line":1319},[254,146251,23972],{"class":2103},[254,146253,117714],{"class":369},[254,146255,146238],{"class":369},[254,146257,146258,146260],{"class":256,"line":1334},[254,146259,23972],{"class":2103},[254,146261,119095],{"class":369},[254,146263,146264,146266],{"class":256,"line":1340},[254,146265,23972],{"class":2103},[254,146267,146268],{"class":369}," freeze\n",[14,146270,146271],{},"国内网络较慢时可以临时使用镜像：",[245,146273,146275],{"className":23963,"code":146274,"language":23965,"meta":174,"style":174},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[251,146276,146277],{"__ignoreMap":174},[254,146278,146279,146281,146283,146286,146288],{"class":256,"line":257},[254,146280,23972],{"class":2103},[254,146282,23975],{"class":369},[254,146284,146285],{"class":369}," requests",[254,146287,26571],{"class":313},[254,146289,119868],{"class":369},[14,146291,146292],{},"常见第三方库：",[402,146294,146295,146304],{},[405,146296,146297],{},[408,146298,146299,146302],{},[411,146300,146301],{},"库",[411,146303,102837],{},[449,146305,146306,146314,146321,146329,146337,146345,146353],{},[408,146307,146308,146311],{},[454,146309,146310],{},"requests",[454,146312,146313],{},"网络请求",[408,146315,146316,146318],{},[454,146317,100767],{},[454,146319,146320],{},"数值计算",[408,146322,146323,146326],{},[454,146324,146325],{},"pandas",[454,146327,146328],{},"表格数据处理",[408,146330,146331,146334],{},[454,146332,146333],{},"matplotlib",[454,146335,146336],{},"绘图",[408,146338,146339,146342],{},[454,146340,146341],{},"pyecharts",[454,146343,146344],{},"ECharts 图表",[408,146346,146347,146350],{},[454,146348,146349],{},"flask",[454,146351,146352],{},"Web 后端",[408,146354,146355,146358],{},[454,146356,146357],{},"pytest",[454,146359,146360],{},"自动化测试",[34,146362,146364],{"id":146363},"_15-虚拟环境","1.5 虚拟环境",[14,146366,146367,146368,146371],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[251,146369,146370],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[14,146373,146374],{},"创建虚拟环境：",[245,146376,146378],{"className":23963,"code":146377,"language":23965,"meta":174,"style":174},"python -m venv .venv\n",[251,146379,146380],{"__ignoreMap":174},[254,146381,146382,146384,146386,146388],{"class":256,"line":257},[254,146383,30521],{"class":2103},[254,146385,101023],{"class":313},[254,146387,101026],{"class":369},[254,146389,101029],{"class":369},[14,146391,146392],{},"Windows 激活：",[245,146394,146396],{"className":23963,"code":146395,"language":23965,"meta":174,"style":174},".venv\\Scripts\\activate\n",[251,146397,146398],{"__ignoreMap":174},[254,146399,146400],{"class":256,"line":257},[254,146401,146395],{"class":2103},[14,146403,146404],{},"macOS\u002FLinux 激活：",[245,146406,146408],{"className":23963,"code":146407,"language":23965,"meta":174,"style":174},"source .venv\u002Fbin\u002Factivate\n",[251,146409,146410],{"__ignoreMap":174},[254,146411,146412,146414],{"class":256,"line":257},[254,146413,101034],{"class":313},[254,146415,101037],{"class":369},[14,146417,146418],{},"退出虚拟环境：",[245,146420,146422],{"className":23963,"code":146421,"language":23965,"meta":174,"style":174},"deactivate\n",[251,146423,146424],{"__ignoreMap":174},[254,146425,146426],{"class":256,"line":257},[254,146427,146421],{"class":2103},[14,146429,146430],{},"保存依赖：",[245,146432,146434],{"className":23963,"code":146433,"language":23965,"meta":174,"style":174},"pip freeze > requirements.txt\n",[251,146435,146436],{"__ignoreMap":174},[254,146437,146438,146440,146443,146445],{"class":256,"line":257},[254,146439,23972],{"class":2103},[254,146441,146442],{"class":369}," freeze",[254,146444,26363],{"class":260},[254,146446,146447],{"class":369}," requirements.txt\n",[14,146449,146450],{},"安装依赖：",[245,146452,146454],{"className":23963,"code":146453,"language":23965,"meta":174,"style":174},"pip install -r requirements.txt\n",[251,146455,146456],{"__ignoreMap":174},[254,146457,146458,146460,146462,146464],{"class":256,"line":257},[254,146459,23972],{"class":2103},[254,146461,23975],{"class":369},[254,146463,119779],{"class":313},[254,146465,146447],{"class":369},[34,146467,146469],{"id":146468},"_16-开发工具","1.6 开发工具",[225,146471,146473],{"id":146472},"_161-pycharm","1.6.1 PyCharm",[14,146475,146476],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[14,146478,122202],{},[21,146480,146481,146484,146487,146493,146496],{},[24,146482,146483],{},"New Project：创建项目。",[24,146485,146486],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[24,146488,146489,146490,126123],{},"New Python File：创建 ",[251,146491,146492],{},".py",[24,146494,146495],{},"Run：运行当前文件。",[24,146497,146498],{},"Debug：断点调试。",[225,146500,146502],{"id":146501},"_162-vs-code","1.6.2 VS Code",[14,146504,146505],{},"VS Code 轻量，适合后续多语言开发。",[14,146507,146508],{},"建议安装插件：",[21,146510,146511,146514,146517],{},[24,146512,146513],{},"Python。",[24,146515,146516],{},"Pylance。",[24,146518,146519],{},"Jupyter。",[14,146521,146522],{},"选择解释器：",[245,146524,146527],{"className":146525,"code":146526,"language":5328,"meta":174},[5326],"Ctrl + Shift + P -> Python: Select Interpreter\n",[251,146528,146526],{"__ignoreMap":174},[34,146530,146532],{"id":146531},"_17-第一个python程序","1.7 第一个Python程序",[14,146534,146535,146536,24759],{},"创建文件 ",[251,146537,146538],{},"hello.py",[245,146540,146542],{"className":30519,"code":146541,"language":30521,"meta":174,"style":174},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[251,146543,146544,146555],{"__ignoreMap":174},[254,146545,146546,146548,146550,146553],{"class":256,"line":257},[254,146547,30556],{"class":313},[254,146549,265],{"class":264},[254,146551,146552],{"class":369},"\"Hello World\"",[254,146554,271],{"class":264},[254,146556,146557,146559,146561,146564],{"class":256,"line":175},[254,146558,30556],{"class":313},[254,146560,265],{"class":264},[254,146562,146563],{"class":369},"\"你好，Python\"",[254,146565,271],{"class":264},[14,146567,146568],{},"在终端运行：",[245,146570,146572],{"className":23963,"code":146571,"language":23965,"meta":174,"style":174},"python hello.py\n",[251,146573,146574],{"__ignoreMap":174},[254,146575,146576,146578],{"class":256,"line":257},[254,146577,30521],{"class":2103},[254,146579,146580],{"class":369}," hello.py\n",[14,146582,146583],{},"或：",[245,146585,146587],{"className":23963,"code":146586,"language":23965,"meta":174,"style":174},"python3 hello.py\n",[251,146588,146589],{"__ignoreMap":174},[254,146590,146591,146593],{"class":256,"line":257},[254,146592,101020],{"class":2103},[254,146594,146580],{"class":369},[14,146596,146597],{},"输出：",[245,146599,146602],{"className":146600,"code":146601,"language":5328,"meta":174},[5326],"Hello World\n你好，Python\n",[251,146603,146601],{"__ignoreMap":174},[34,146605,146607],{"id":146606},"_18-print函数","1.8 print函数",[14,146609,146610,146613],{},[251,146611,146612],{},"print()"," 用来输出内容。",[245,146615,146617],{"className":30519,"code":146616,"language":30521,"meta":174,"style":174},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[251,146618,146619,146629,146639,146649],{"__ignoreMap":174},[254,146620,146621,146623,146625,146627],{"class":256,"line":257},[254,146622,30556],{"class":313},[254,146624,265],{"class":264},[254,146626,5985],{"class":369},[254,146628,271],{"class":264},[254,146630,146631,146633,146635,146637],{"class":256,"line":175},[254,146632,30556],{"class":313},[254,146634,265],{"class":264},[254,146636,575],{"class":313},[254,146638,271],{"class":264},[254,146640,146641,146643,146645,146647],{"class":256,"line":1319},[254,146642,30556],{"class":313},[254,146644,265],{"class":264},[254,146646,314],{"class":313},[254,146648,271],{"class":264},[254,146650,146651,146653,146655,146658,146660,146662],{"class":256,"line":1334},[254,146652,30556],{"class":313},[254,146654,265],{"class":264},[254,146656,146657],{"class":369},"\"年龄:\"",[254,146659,12576],{"class":264},[254,146661,914],{"class":313},[254,146663,271],{"class":264},[14,146665,146666],{},"多个内容用逗号隔开，默认中间加空格：",[245,146668,146670],{"className":30519,"code":146669,"language":30521,"meta":174,"style":174},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[251,146671,146672,146682,146692],{"__ignoreMap":174},[254,146673,146674,146677,146679],{"class":256,"line":257},[254,146675,146676],{"class":264},"name ",[254,146678,310],{"class":260},[254,146680,146681],{"class":369}," \"张三\"\n",[254,146683,146684,146687,146689],{"class":256,"line":175},[254,146685,146686],{"class":264},"age ",[254,146688,310],{"class":260},[254,146690,146691],{"class":313}," 18\n",[254,146693,146694,146696,146698,146701,146704,146706],{"class":256,"line":1319},[254,146695,30556],{"class":313},[254,146697,265],{"class":264},[254,146699,146700],{"class":369},"\"姓名:\"",[254,146702,146703],{"class":264},", name, ",[254,146705,146657],{"class":369},[254,146707,146708],{"class":264},", age)\n",[14,146710,146711],{},"修改分隔符：",[245,146713,146715],{"className":30519,"code":146714,"language":30521,"meta":174,"style":174},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[251,146716,146717],{"__ignoreMap":174},[254,146718,146719,146721,146723,146726,146728,146730,146732,146734,146736,146739,146741,146743],{"class":256,"line":257},[254,146720,30556],{"class":313},[254,146722,265],{"class":264},[254,146724,146725],{"class":369},"\"2024\"",[254,146727,12576],{"class":264},[254,146729,54457],{"class":369},[254,146731,12576],{"class":264},[254,146733,54457],{"class":369},[254,146735,12576],{"class":264},[254,146737,146738],{"class":5357},"sep",[254,146740,310],{"class":260},[254,146742,32624],{"class":369},[254,146744,271],{"class":264},[14,146746,146747],{},"修改结尾符：",[245,146749,146751],{"className":30519,"code":146750,"language":30521,"meta":174,"style":174},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[251,146752,146753,146771],{"__ignoreMap":174},[254,146754,146755,146757,146759,146761,146763,146765,146767,146769],{"class":256,"line":257},[254,146756,30556],{"class":313},[254,146758,265],{"class":264},[254,146760,5985],{"class":369},[254,146762,12576],{"class":264},[254,146764,45942],{"class":5357},[254,146766,310],{"class":260},[254,146768,4499],{"class":369},[254,146770,271],{"class":264},[254,146772,146773,146775,146777,146780],{"class":256,"line":175},[254,146774,30556],{"class":313},[254,146776,265],{"class":264},[254,146778,146779],{"class":369},"\"python\"",[254,146781,271],{"class":264},[34,146783,146785],{"id":146784},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[14,146787,146788],{},"交互运行适合临时验证：",[245,146790,146792],{"className":30519,"code":146791,"language":30521,"meta":174,"style":174},">>> 10 * 3\n30\n",[251,146793,146794,146804],{"__ignoreMap":174},[254,146795,146796,146798,146800,146802],{"class":256,"line":257},[254,146797,145993],{"class":260},[254,146799,2178],{"class":313},[254,146801,6659],{"class":260},[254,146803,120176],{"class":313},[254,146805,146806],{"class":256,"line":175},[254,146807,146808],{"class":313},"30\n",[14,146810,146811],{},"脚本运行适合保存程序：",[245,146813,146815],{"className":30519,"code":146814,"language":30521,"meta":174,"style":174},"price = 8\ncount = 5\nprint(price * count)\n",[251,146816,146817,146827,146836],{"__ignoreMap":174},[254,146818,146819,146822,146824],{"class":256,"line":257},[254,146820,146821],{"class":264},"price ",[254,146823,310],{"class":260},[254,146825,146826],{"class":313}," 8\n",[254,146828,146829,146832,146834],{"class":256,"line":175},[254,146830,146831],{"class":264},"count ",[254,146833,310],{"class":260},[254,146835,54568],{"class":313},[254,146837,146838,146840,146843,146845],{"class":256,"line":1319},[254,146839,30556],{"class":313},[254,146841,146842],{"class":264},"(price ",[254,146844,719],{"class":260},[254,146846,146847],{"class":264}," count)\n",[14,146849,146850],{},"实际学习中推荐：",[21,146852,146853,146856,146861],{},[24,146854,146855],{},"临时试一个语法，用交互模式。",[24,146857,146858,146859,126123],{},"写完整练习，用 ",[251,146860,146492],{},[24,146862,146863],{},"写项目，用独立目录和虚拟环境。",[34,146865,146867],{"id":146866},"_110-常见错误","1.10 常见错误",[225,146869,146871],{"id":146870},"_1101-命令找不到","1.10.1 命令找不到",[245,146873,146876],{"className":146874,"code":146875,"language":5328,"meta":174},[5326],"python: command not found\n",[251,146877,146875],{"__ignoreMap":174},[14,146879,146880],{},"原因：",[21,146882,146883,146886,146889],{},[24,146884,146885],{},"没安装 Python。",[24,146887,146888],{},"PATH 没配置。",[24,146890,146891,146892,28526],{},"Linux\u002FmacOS 应该使用 ",[251,146893,101020],{},[225,146895,146897],{"id":146896},"_1102-文件名冲突","1.10.2 文件名冲突",[14,146899,146900],{},"不要把文件命名为：",[245,146902,146905],{"className":146903,"code":146904,"language":5328,"meta":174},[5326],"random.py\njson.py\ntime.py\nrequests.py\n",[251,146906,146904],{"__ignoreMap":174},[14,146908,146909],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[225,146911,146913],{"id":146912},"_1103-中文乱码","1.10.3 中文乱码",[14,146915,146916],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[14,146918,146919],{},"如果读写文件出现乱码，要明确指定编码：",[245,146921,146923],{"className":30519,"code":146922,"language":30521,"meta":174,"style":174},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[251,146924,146925,146959],{"__ignoreMap":174},[254,146926,146927,146929,146932,146934,146937,146939,146942,146944,146947,146949,146952,146954,146956],{"class":256,"line":257},[254,146928,107974],{"class":260},[254,146930,146931],{"class":313}," open",[254,146933,265],{"class":264},[254,146935,146936],{"class":369},"\"data.txt\"",[254,146938,12576],{"class":264},[254,146940,146941],{"class":369},"\"r\"",[254,146943,12576],{"class":264},[254,146945,146946],{"class":5357},"encoding",[254,146948,310],{"class":260},[254,146950,146951],{"class":369},"\"utf-8\"",[254,146953,13855],{"class":264},[254,146955,31524],{"class":260},[254,146957,146958],{"class":264}," f:\n",[254,146960,146961,146964,146966],{"class":256,"line":175},[254,146962,146963],{"class":264},"    content ",[254,146965,310],{"class":260},[254,146967,146968],{"class":264}," f.read()\n",[34,146970,146972],{"id":146971},"_111-本章练习","1.11 本章练习",[21,146974,146975,146978,146984],{},[24,146976,146977],{},"安装 Python，并在终端输出版本号。",[24,146979,146980,146981,146983],{},"新建 ",[251,146982,146538],{},"，输出自己的姓名、年龄、学习目标。",[24,146985,104507,146986,146988],{},[251,146987,146612],{}," 输出下面格式：",[245,146990,146993],{"className":146991,"code":146992,"language":5328,"meta":174},[5326],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[251,146994,146992],{"__ignoreMap":174},[21,146996,146997],{"start":1334},[24,146998,104507,146999,147001],{},[251,147000,146738],{}," 输出日期：",[245,147003,147006],{"className":147004,"code":147005,"language":5328,"meta":174},[5326],"2024-10-10\n",[251,147007,147005],{"__ignoreMap":174},[21,147009,147010],{"start":1340},[24,147011,104507,147012,147014,147015,147017],{},[251,147013,45942],{}," 让两次 ",[251,147016,146612],{}," 输出在同一行。",[5267,147019,147020],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":174,"searchDepth":175,"depth":175,"links":147022},[147023,147024,147025,147030,147031,147032,147036,147037,147038,147039,147044],{"id":145905,"depth":175,"text":145906},{"id":145949,"depth":175,"text":145950},{"id":146050,"depth":175,"text":146051,"children":147026},[147027,147028,147029],{"id":146054,"depth":1319,"text":146055},{"id":146109,"depth":1319,"text":146110},{"id":146145,"depth":1319,"text":146146},{"id":146218,"depth":175,"text":146219},{"id":146363,"depth":175,"text":146364},{"id":146468,"depth":175,"text":146469,"children":147033},[147034,147035],{"id":146472,"depth":1319,"text":146473},{"id":146501,"depth":1319,"text":146502},{"id":146531,"depth":175,"text":146532},{"id":146606,"depth":175,"text":146607},{"id":146784,"depth":175,"text":146785},{"id":146866,"depth":175,"text":146867,"children":147040},[147041,147042,147043],{"id":146870,"depth":1319,"text":146871},{"id":146896,"depth":1319,"text":146897},{"id":146912,"depth":1319,"text":146913},{"id":146971,"depth":175,"text":146972},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":145897,"description":23518},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":147051,"title":147052,"body":147053,"description":23518,"extension":181,"meta":149457,"navigation":184,"path":149458,"seo":149459,"stem":149460,"__hash__":149461},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":147054,"toc":149442},[147055,147058,147062,147065,147068,147085,147088,147130,147133,147137,147140,147143,147180,147183,147217,147220,147312,147316,147330,147333,147360,147363,147367,147470,147477,147480,147497,147501,147508,147697,147700,147773,147777,147780,147864,147867,147899,147903,148107,148110,148114,148120,148222,148225,148481,148485,148488,148491,148505,148507,148693,148697,149059,149065,149069,149072,149196,149199,149378,149381,149385,149418,149422,149439],[10,147056,147052],{"id":147057},"_10-json与pyecharts折线图",[34,147059,147061],{"id":147060},"_101-数据可视化","10.1 数据可视化",[14,147063,147064],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[14,147066,147067],{},"常见图表：",[21,147069,147070,147073,147076,147079,147082],{},[24,147071,147072],{},"折线图：看趋势。",[24,147074,147075],{},"柱状图：看分类对比。",[24,147077,147078],{},"饼图：看占比。",[24,147080,147081],{},"地图：看地域分布。",[24,147083,147084],{},"散点图：看两个变量之间的关系。",[14,147086,147087],{},"Python 可视化常用库：",[402,147089,147090,147098],{},[405,147091,147092],{},[408,147093,147094,147096],{},[411,147095,146301],{},[411,147097,23881],{},[449,147099,147100,147107,147115,147122],{},[408,147101,147102,147104],{},[454,147103,146333],{},[454,147105,147106],{},"基础、经典、可定制",[408,147108,147109,147112],{},[454,147110,147111],{},"seaborn",[454,147113,147114],{},"统计图表更美观",[408,147116,147117,147119],{},[454,147118,146341],{},[454,147120,147121],{},"生成交互式网页图表",[408,147123,147124,147127],{},[454,147125,147126],{},"plotly",[454,147128,147129],{},"交互图表能力强",[14,147131,147132],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[34,147134,147136],{"id":147135},"_102-json回顾","10.2 JSON回顾",[14,147138,147139],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[14,147141,147142],{},"Python 字典：",[245,147144,147146],{"className":30519,"code":147145,"language":30521,"meta":174,"style":174},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[251,147147,147148,147156,147167,147176],{"__ignoreMap":174},[254,147149,147150,147152,147154],{"class":256,"line":257},[254,147151,101799],{"class":264},[254,147153,310],{"class":260},[254,147155,15713],{"class":264},[254,147157,147158,147161,147163,147165],{"class":256,"line":175},[254,147159,147160],{"class":369},"    \"name\"",[254,147162,51578],{"class":264},[254,147164,69410],{"class":369},[254,147166,31607],{"class":264},[254,147168,147169,147172,147174],{"class":256,"line":1319},[254,147170,147171],{"class":369},"    \"value\"",[254,147173,51578],{"class":264},[254,147175,97599],{"class":313},[254,147177,147178],{"class":256,"line":1334},[254,147179,1705],{"class":264},[14,147181,147182],{},"JSON 字符串：",[245,147184,147187],{"className":147185,"code":147186,"language":145932,"meta":174,"style":174},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[251,147188,147189,147193,147204,147213],{"__ignoreMap":174},[254,147190,147191],{"class":256,"line":257},[254,147192,1686],{"class":264},[254,147194,147195,147198,147200,147202],{"class":256,"line":175},[254,147196,147197],{"class":313},"  \"name\"",[254,147199,51578],{"class":264},[254,147201,69410],{"class":369},[254,147203,31607],{"class":264},[254,147205,147206,147209,147211],{"class":256,"line":1319},[254,147207,147208],{"class":313},"  \"value\"",[254,147210,51578],{"class":264},[254,147212,97599],{"class":313},[254,147214,147215],{"class":256,"line":1334},[254,147216,1705],{"class":264},[14,147218,147219],{},"Python 与 JSON 的转换：",[245,147221,147223],{"className":30519,"code":147222,"language":30521,"meta":174,"style":174},"import json\n\ndata = {\"name\": \"北京\", \"value\": 100}\n\njson_text = json.dumps(data, ensure_ascii=False)\nprint(json_text)\n\nnew_data = json.loads(json_text)\nprint(new_data)\n",[251,147224,147225,147232,147236,147261,147265,147284,147291,147295,147305],{"__ignoreMap":174},[254,147226,147227,147229],{"class":256,"line":257},[254,147228,30533],{"class":260},[254,147230,147231],{"class":264}," json\n",[254,147233,147234],{"class":256,"line":175},[254,147235,2540],{"emptyLinePlaceholder":184},[254,147237,147238,147240,147242,147244,147246,147248,147250,147252,147255,147257,147259],{"class":256,"line":1319},[254,147239,101799],{"class":264},[254,147241,310],{"class":260},[254,147243,4588],{"class":264},[254,147245,62820],{"class":369},[254,147247,51578],{"class":264},[254,147249,69410],{"class":369},[254,147251,12576],{"class":264},[254,147253,147254],{"class":369},"\"value\"",[254,147256,51578],{"class":264},[254,147258,575],{"class":313},[254,147260,1705],{"class":264},[254,147262,147263],{"class":256,"line":1334},[254,147264,2540],{"emptyLinePlaceholder":184},[254,147266,147267,147270,147272,147275,147278,147280,147282],{"class":256,"line":1340},[254,147268,147269],{"class":264},"json_text ",[254,147271,310],{"class":260},[254,147273,147274],{"class":264}," json.dumps(data, ",[254,147276,147277],{"class":5357},"ensure_ascii",[254,147279,310],{"class":260},[254,147281,34128],{"class":313},[254,147283,271],{"class":264},[254,147285,147286,147288],{"class":256,"line":1354},[254,147287,30556],{"class":313},[254,147289,147290],{"class":264},"(json_text)\n",[254,147292,147293],{"class":256,"line":1360},[254,147294,2540],{"emptyLinePlaceholder":184},[254,147296,147297,147300,147302],{"class":256,"line":1451},[254,147298,147299],{"class":264},"new_data ",[254,147301,310],{"class":260},[254,147303,147304],{"class":264}," json.loads(json_text)\n",[254,147306,147307,147309],{"class":256,"line":1457},[254,147308,30556],{"class":313},[254,147310,147311],{"class":264},"(new_data)\n",[34,147313,147315],{"id":147314},"_103-安装pyecharts","10.3 安装pyecharts",[245,147317,147319],{"className":23963,"code":147318,"language":23965,"meta":174,"style":174},"pip install pyecharts\n",[251,147320,147321],{"__ignoreMap":174},[254,147322,147323,147325,147327],{"class":256,"line":257},[254,147324,23972],{"class":2103},[254,147326,23975],{"class":369},[254,147328,147329],{"class":369}," pyecharts\n",[14,147331,147332],{},"验证：",[245,147334,147336],{"className":30519,"code":147335,"language":30521,"meta":174,"style":174},"import pyecharts\n\nprint(pyecharts.__version__)\n",[251,147337,147338,147344,147348],{"__ignoreMap":174},[254,147339,147340,147342],{"class":256,"line":257},[254,147341,30533],{"class":260},[254,147343,147329],{"class":264},[254,147345,147346],{"class":256,"line":175},[254,147347,2540],{"emptyLinePlaceholder":184},[254,147349,147350,147352,147355,147358],{"class":256,"line":1319},[254,147351,30556],{"class":313},[254,147353,147354],{"class":264},"(pyecharts.",[254,147356,147357],{"class":313},"__version__",[254,147359,271],{"class":264},[14,147361,147362],{},"如果使用虚拟环境，要先激活环境再安装。",[34,147364,147366],{"id":147365},"_104-第一个折线图","10.4 第一个折线图",[245,147368,147370],{"className":30519,"code":147369,"language":30521,"meta":174,"style":174},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[251,147371,147372,147384,147388,147398,147428,147460],{"__ignoreMap":174},[254,147373,147374,147376,147379,147381],{"class":256,"line":257},[254,147375,30878],{"class":260},[254,147377,147378],{"class":264}," pyecharts.charts ",[254,147380,30533],{"class":260},[254,147382,147383],{"class":264}," Line\n",[254,147385,147386],{"class":256,"line":175},[254,147387,2540],{"emptyLinePlaceholder":184},[254,147389,147390,147393,147395],{"class":256,"line":1319},[254,147391,147392],{"class":264},"line ",[254,147394,310],{"class":260},[254,147396,147397],{"class":264}," Line()\n",[254,147399,147400,147403,147406,147408,147411,147413,147416,147418,147421,147423,147426],{"class":256,"line":1334},[254,147401,147402],{"class":264},"line.add_xaxis([",[254,147404,147405],{"class":369},"\"周一\"",[254,147407,12576],{"class":264},[254,147409,147410],{"class":369},"\"周二\"",[254,147412,12576],{"class":264},[254,147414,147415],{"class":369},"\"周三\"",[254,147417,12576],{"class":264},[254,147419,147420],{"class":369},"\"周四\"",[254,147422,12576],{"class":264},[254,147424,147425],{"class":369},"\"周五\"",[254,147427,4797],{"class":264},[254,147429,147430,147433,147436,147438,147440,147442,147444,147446,147448,147450,147453,147455,147458],{"class":256,"line":1340},[254,147431,147432],{"class":264},"line.add_yaxis(",[254,147434,147435],{"class":369},"\"销售额\"",[254,147437,77659],{"class":264},[254,147439,575],{"class":313},[254,147441,12576],{"class":264},[254,147443,1081],{"class":313},[254,147445,12576],{"class":264},[254,147447,1126],{"class":313},[254,147449,12576],{"class":264},[254,147451,147452],{"class":313},"150",[254,147454,12576],{"class":264},[254,147456,147457],{"class":313},"180",[254,147459,4797],{"class":264},[254,147461,147462,147465,147468],{"class":256,"line":1354},[254,147463,147464],{"class":264},"line.render(",[254,147466,147467],{"class":369},"\"line.html\"",[254,147469,271],{"class":264},[14,147471,147472,147473,147476],{},"运行后会生成 ",[251,147474,147475],{},"line.html","，用浏览器打开即可看到图表。",[14,147478,147479],{},"核心步骤：",[21,147481,147482,147485,147488,147491,147494],{},[24,147483,147484],{},"导入图表类。",[24,147486,147487],{},"创建图表对象。",[24,147489,147490],{},"添加 x 轴数据。",[24,147492,147493],{},"添加 y 轴数据。",[24,147495,147496],{},"渲染为 HTML。",[34,147498,147500],{"id":147499},"_105-全局配置","10.5 全局配置",[14,147502,147503,147504,147507],{},"常用配置在 ",[251,147505,147506],{},"pyecharts.options"," 中。",[245,147509,147511],{"className":30519,"code":147510,"language":30521,"meta":174,"style":174},"from pyecharts import options as opts\nfrom pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.set_global_opts(\n    title_opts=opts.TitleOpts(title=\"一周销售额\"),\n    xaxis_opts=opts.AxisOpts(name=\"日期\"),\n    yaxis_opts=opts.AxisOpts(name=\"金额\"),\n    tooltip_opts=opts.TooltipOpts(trigger=\"axis\"),\n)\nline.render(\"line.html\")\n",[251,147512,147513,147530,147540,147544,147552,147576,147604,147609,147628,147647,147665,147685,147689],{"__ignoreMap":174},[254,147514,147515,147517,147520,147522,147525,147527],{"class":256,"line":257},[254,147516,30878],{"class":260},[254,147518,147519],{"class":264}," pyecharts ",[254,147521,30533],{"class":260},[254,147523,147524],{"class":264}," options ",[254,147526,31524],{"class":260},[254,147528,147529],{"class":264}," opts\n",[254,147531,147532,147534,147536,147538],{"class":256,"line":175},[254,147533,30878],{"class":260},[254,147535,147378],{"class":264},[254,147537,30533],{"class":260},[254,147539,147383],{"class":264},[254,147541,147542],{"class":256,"line":1319},[254,147543,2540],{"emptyLinePlaceholder":184},[254,147545,147546,147548,147550],{"class":256,"line":1334},[254,147547,147392],{"class":264},[254,147549,310],{"class":260},[254,147551,147397],{"class":264},[254,147553,147554,147556,147558,147560,147562,147564,147566,147568,147570,147572,147574],{"class":256,"line":1340},[254,147555,147402],{"class":264},[254,147557,147405],{"class":369},[254,147559,12576],{"class":264},[254,147561,147410],{"class":369},[254,147563,12576],{"class":264},[254,147565,147415],{"class":369},[254,147567,12576],{"class":264},[254,147569,147420],{"class":369},[254,147571,12576],{"class":264},[254,147573,147425],{"class":369},[254,147575,4797],{"class":264},[254,147577,147578,147580,147582,147584,147586,147588,147590,147592,147594,147596,147598,147600,147602],{"class":256,"line":1354},[254,147579,147432],{"class":264},[254,147581,147435],{"class":369},[254,147583,77659],{"class":264},[254,147585,575],{"class":313},[254,147587,12576],{"class":264},[254,147589,1081],{"class":313},[254,147591,12576],{"class":264},[254,147593,1126],{"class":313},[254,147595,12576],{"class":264},[254,147597,147452],{"class":313},[254,147599,12576],{"class":264},[254,147601,147457],{"class":313},[254,147603,4797],{"class":264},[254,147605,147606],{"class":256,"line":1360},[254,147607,147608],{"class":264},"line.set_global_opts(\n",[254,147610,147611,147614,147616,147619,147621,147623,147626],{"class":256,"line":1451},[254,147612,147613],{"class":5357},"    title_opts",[254,147615,310],{"class":260},[254,147617,147618],{"class":264},"opts.TitleOpts(",[254,147620,51548],{"class":5357},[254,147622,310],{"class":260},[254,147624,147625],{"class":369},"\"一周销售额\"",[254,147627,38188],{"class":264},[254,147629,147630,147633,147635,147638,147640,147642,147645],{"class":256,"line":1457},[254,147631,147632],{"class":5357},"    xaxis_opts",[254,147634,310],{"class":260},[254,147636,147637],{"class":264},"opts.AxisOpts(",[254,147639,79951],{"class":5357},[254,147641,310],{"class":260},[254,147643,147644],{"class":369},"\"日期\"",[254,147646,38188],{"class":264},[254,147648,147649,147652,147654,147656,147658,147660,147663],{"class":256,"line":1469},[254,147650,147651],{"class":5357},"    yaxis_opts",[254,147653,310],{"class":260},[254,147655,147637],{"class":264},[254,147657,79951],{"class":5357},[254,147659,310],{"class":260},[254,147661,147662],{"class":369},"\"金额\"",[254,147664,38188],{"class":264},[254,147666,147667,147670,147672,147675,147678,147680,147683],{"class":256,"line":1752},[254,147668,147669],{"class":5357},"    tooltip_opts",[254,147671,310],{"class":260},[254,147673,147674],{"class":264},"opts.TooltipOpts(",[254,147676,147677],{"class":5357},"trigger",[254,147679,310],{"class":260},[254,147681,147682],{"class":369},"\"axis\"",[254,147684,38188],{"class":264},[254,147686,147687],{"class":256,"line":1757},[254,147688,271],{"class":264},[254,147690,147691,147693,147695],{"class":256,"line":1763},[254,147692,147464],{"class":264},[254,147694,147467],{"class":369},[254,147696,271],{"class":264},[14,147698,147699],{},"常见全局配置：",[402,147701,147702,147711],{},[405,147703,147704],{},[408,147705,147706,147709],{},[411,147707,147708],{},"配置",[411,147710,102837],{},[449,147712,147713,147723,147733,147743,147753,147763],{},[408,147714,147715,147720],{},[454,147716,147717],{},[251,147718,147719],{},"TitleOpts",[454,147721,147722],{},"标题",[408,147724,147725,147730],{},[454,147726,147727],{},[251,147728,147729],{},"LegendOpts",[454,147731,147732],{},"图例",[408,147734,147735,147740],{},[454,147736,147737],{},[251,147738,147739],{},"TooltipOpts",[454,147741,147742],{},"提示框",[408,147744,147745,147750],{},[454,147746,147747],{},[251,147748,147749],{},"AxisOpts",[454,147751,147752],{},"坐标轴",[408,147754,147755,147760],{},[454,147756,147757],{},[251,147758,147759],{},"VisualMapOpts",[454,147761,147762],{},"视觉映射",[408,147764,147765,147770],{},[454,147766,147767],{},[251,147768,147769],{},"DataZoomOpts",[454,147771,147772],{},"区域缩放",[34,147774,147776],{"id":147775},"_106-系列配置","10.6 系列配置",[14,147778,147779],{},"系列配置作用于某一组数据。",[245,147781,147783],{"className":30519,"code":147782,"language":30521,"meta":174,"style":174},"line.add_yaxis(\n    series_name=\"销售额\",\n    y_axis=[100, 120, 90, 150, 180],\n    is_smooth=True,\n    label_opts=opts.LabelOpts(is_show=True),\n)\n",[251,147784,147785,147790,147801,147830,147841,147860],{"__ignoreMap":174},[254,147786,147787],{"class":256,"line":257},[254,147788,147789],{"class":264},"line.add_yaxis(\n",[254,147791,147792,147795,147797,147799],{"class":256,"line":175},[254,147793,147794],{"class":5357},"    series_name",[254,147796,310],{"class":260},[254,147798,147435],{"class":369},[254,147800,31607],{"class":264},[254,147802,147803,147806,147808,147810,147812,147814,147816,147818,147820,147822,147824,147826,147828],{"class":256,"line":1319},[254,147804,147805],{"class":5357},"    y_axis",[254,147807,310],{"class":260},[254,147809,1154],{"class":264},[254,147811,575],{"class":313},[254,147813,12576],{"class":264},[254,147815,1081],{"class":313},[254,147817,12576],{"class":264},[254,147819,1126],{"class":313},[254,147821,12576],{"class":264},[254,147823,147452],{"class":313},[254,147825,12576],{"class":264},[254,147827,147457],{"class":313},[254,147829,87977],{"class":264},[254,147831,147832,147835,147837,147839],{"class":256,"line":1334},[254,147833,147834],{"class":5357},"    is_smooth",[254,147836,310],{"class":260},[254,147838,31617],{"class":313},[254,147840,31607],{"class":264},[254,147842,147843,147846,147848,147851,147854,147856,147858],{"class":256,"line":1340},[254,147844,147845],{"class":5357},"    label_opts",[254,147847,310],{"class":260},[254,147849,147850],{"class":264},"opts.LabelOpts(",[254,147852,147853],{"class":5357},"is_show",[254,147855,310],{"class":260},[254,147857,31617],{"class":313},[254,147859,38188],{"class":264},[254,147861,147862],{"class":256,"line":1354},[254,147863,271],{"class":264},[14,147865,147866],{},"常用参数：",[21,147868,147869,147875,147881,147887,147893],{},[24,147870,147871,147874],{},[251,147872,147873],{},"series_name","：系列名称。",[24,147876,147877,147880],{},[251,147878,147879],{},"y_axis","：y 轴数据。",[24,147882,147883,147886],{},[251,147884,147885],{},"is_smooth","：是否平滑曲线。",[24,147888,147889,147892],{},[251,147890,147891],{},"label_opts","：标签配置。",[24,147894,147895,147898],{},[251,147896,147897],{},"symbol_size","：标记点大小。",[34,147900,147902],{"id":147901},"_107-多条折线","10.7 多条折线",[245,147904,147906],{"className":30519,"code":147905,"language":30521,"meta":174,"style":174},"from pyecharts import options as opts\nfrom pyecharts.charts import Line\n\ndates = [\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"]\n\nline = Line()\nline.add_xaxis(dates)\nline.add_yaxis(\"线上销售\", [100, 130, 120, 160, 200], is_smooth=True)\nline.add_yaxis(\"线下销售\", [80, 90, 100, 120, 150], is_smooth=True)\nline.set_global_opts(\n    title_opts=opts.TitleOpts(title=\"线上线下销售趋势\"),\n    tooltip_opts=opts.TooltipOpts(trigger=\"axis\"),\n)\nline.render(\"sales.html\")\n",[251,147907,147908,147922,147932,147936,147965,147969,147977,147982,148020,148057,148061,148078,148094,148098],{"__ignoreMap":174},[254,147909,147910,147912,147914,147916,147918,147920],{"class":256,"line":257},[254,147911,30878],{"class":260},[254,147913,147519],{"class":264},[254,147915,30533],{"class":260},[254,147917,147524],{"class":264},[254,147919,31524],{"class":260},[254,147921,147529],{"class":264},[254,147923,147924,147926,147928,147930],{"class":256,"line":175},[254,147925,30878],{"class":260},[254,147927,147378],{"class":264},[254,147929,30533],{"class":260},[254,147931,147383],{"class":264},[254,147933,147934],{"class":256,"line":1319},[254,147935,2540],{"emptyLinePlaceholder":184},[254,147937,147938,147941,147943,147945,147947,147949,147951,147953,147955,147957,147959,147961,147963],{"class":256,"line":1334},[254,147939,147940],{"class":264},"dates ",[254,147942,310],{"class":260},[254,147944,52367],{"class":264},[254,147946,147405],{"class":369},[254,147948,12576],{"class":264},[254,147950,147410],{"class":369},[254,147952,12576],{"class":264},[254,147954,147415],{"class":369},[254,147956,12576],{"class":264},[254,147958,147420],{"class":369},[254,147960,12576],{"class":264},[254,147962,147425],{"class":369},[254,147964,33387],{"class":264},[254,147966,147967],{"class":256,"line":1340},[254,147968,2540],{"emptyLinePlaceholder":184},[254,147970,147971,147973,147975],{"class":256,"line":1354},[254,147972,147392],{"class":264},[254,147974,310],{"class":260},[254,147976,147397],{"class":264},[254,147978,147979],{"class":256,"line":1360},[254,147980,147981],{"class":264},"line.add_xaxis(dates)\n",[254,147983,147984,147986,147989,147991,147993,147995,147998,148000,148002,148004,148006,148008,148010,148012,148014,148016,148018],{"class":256,"line":1451},[254,147985,147432],{"class":264},[254,147987,147988],{"class":369},"\"线上销售\"",[254,147990,77659],{"class":264},[254,147992,575],{"class":313},[254,147994,12576],{"class":264},[254,147996,147997],{"class":313},"130",[254,147999,12576],{"class":264},[254,148001,1081],{"class":313},[254,148003,12576],{"class":264},[254,148005,21189],{"class":313},[254,148007,12576],{"class":264},[254,148009,1862],{"class":313},[254,148011,112343],{"class":264},[254,148013,147885],{"class":5357},[254,148015,310],{"class":260},[254,148017,31617],{"class":313},[254,148019,271],{"class":264},[254,148021,148022,148024,148027,148029,148031,148033,148035,148037,148039,148041,148043,148045,148047,148049,148051,148053,148055],{"class":256,"line":1457},[254,148023,147432],{"class":264},[254,148025,148026],{"class":369},"\"线下销售\"",[254,148028,77659],{"class":264},[254,148030,876],{"class":313},[254,148032,12576],{"class":264},[254,148034,1126],{"class":313},[254,148036,12576],{"class":264},[254,148038,575],{"class":313},[254,148040,12576],{"class":264},[254,148042,1081],{"class":313},[254,148044,12576],{"class":264},[254,148046,147452],{"class":313},[254,148048,112343],{"class":264},[254,148050,147885],{"class":5357},[254,148052,310],{"class":260},[254,148054,31617],{"class":313},[254,148056,271],{"class":264},[254,148058,148059],{"class":256,"line":1469},[254,148060,147608],{"class":264},[254,148062,148063,148065,148067,148069,148071,148073,148076],{"class":256,"line":1752},[254,148064,147613],{"class":5357},[254,148066,310],{"class":260},[254,148068,147618],{"class":264},[254,148070,51548],{"class":5357},[254,148072,310],{"class":260},[254,148074,148075],{"class":369},"\"线上线下销售趋势\"",[254,148077,38188],{"class":264},[254,148079,148080,148082,148084,148086,148088,148090,148092],{"class":256,"line":1757},[254,148081,147669],{"class":5357},[254,148083,310],{"class":260},[254,148085,147674],{"class":264},[254,148087,147677],{"class":5357},[254,148089,310],{"class":260},[254,148091,147682],{"class":369},[254,148093,38188],{"class":264},[254,148095,148096],{"class":256,"line":1763},[254,148097,271],{"class":264},[254,148099,148100,148102,148105],{"class":256,"line":1768},[254,148101,147464],{"class":264},[254,148103,148104],{"class":369},"\"sales.html\"",[254,148106,271],{"class":264},[14,148108,148109],{},"多条折线适合比较不同指标或不同地区。",[34,148111,148113],{"id":148112},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[14,148115,148116,148117,24759],{},"假设 ",[251,148118,148119],{},"sales.json",[245,148121,148123],{"className":147185,"code":148122,"language":145932,"meta":174,"style":174},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[251,148124,148125,148130,148162,148190,148218],{"__ignoreMap":174},[254,148126,148127],{"class":256,"line":257},[254,148128,148129],{"class":264},"[\n",[254,148131,148132,148135,148138,148140,148142,148144,148147,148149,148151,148153,148156,148158,148160],{"class":256,"line":175},[254,148133,148134],{"class":264},"  {",[254,148136,148137],{"class":313},"\"date\"",[254,148139,51578],{"class":264},[254,148141,147405],{"class":369},[254,148143,12576],{"class":264},[254,148145,148146],{"class":313},"\"online\"",[254,148148,51578],{"class":264},[254,148150,575],{"class":313},[254,148152,12576],{"class":264},[254,148154,148155],{"class":313},"\"offline\"",[254,148157,51578],{"class":264},[254,148159,876],{"class":313},[254,148161,5070],{"class":264},[254,148163,148164,148166,148168,148170,148172,148174,148176,148178,148180,148182,148184,148186,148188],{"class":256,"line":1319},[254,148165,148134],{"class":264},[254,148167,148137],{"class":313},[254,148169,51578],{"class":264},[254,148171,147410],{"class":369},[254,148173,12576],{"class":264},[254,148175,148146],{"class":313},[254,148177,51578],{"class":264},[254,148179,147997],{"class":313},[254,148181,12576],{"class":264},[254,148183,148155],{"class":313},[254,148185,51578],{"class":264},[254,148187,1126],{"class":313},[254,148189,5070],{"class":264},[254,148191,148192,148194,148196,148198,148200,148202,148204,148206,148208,148210,148212,148214,148216],{"class":256,"line":1334},[254,148193,148134],{"class":264},[254,148195,148137],{"class":313},[254,148197,51578],{"class":264},[254,148199,147415],{"class":369},[254,148201,12576],{"class":264},[254,148203,148146],{"class":313},[254,148205,51578],{"class":264},[254,148207,1081],{"class":313},[254,148209,12576],{"class":264},[254,148211,148155],{"class":313},[254,148213,51578],{"class":264},[254,148215,575],{"class":313},[254,148217,1705],{"class":264},[254,148219,148220],{"class":256,"line":1340},[254,148221,33387],{"class":264},[14,148223,148224],{},"读取并绘图：",[245,148226,148228],{"className":30519,"code":148227,"language":30521,"meta":174,"style":174},"import json\nfrom pyecharts import options as opts\nfrom pyecharts.charts import Line\n\nwith open(\"sales.json\", \"r\", encoding=\"utf-8\") as file:\n    data = json.load(file)\n\ndates = []\nonline_sales = []\noffline_sales = []\n\nfor item in data:\n    dates.append(item[\"date\"])\n    online_sales.append(item[\"online\"])\n    offline_sales.append(item[\"offline\"])\n\nline = Line()\nline.add_xaxis(dates)\nline.add_yaxis(\"线上销售\", online_sales, is_smooth=True)\nline.add_yaxis(\"线下销售\", offline_sales, is_smooth=True)\nline.set_global_opts(\n    title_opts=opts.TitleOpts(title=\"销售趋势\"),\n    tooltip_opts=opts.TooltipOpts(trigger=\"axis\"),\n)\nline.render(\"sales.html\")\n",[251,148229,148230,148236,148250,148260,148264,148296,148309,148313,148321,148330,148339,148343,148355,148364,148373,148382,148386,148394,148398,148415,148432,148436,148453,148469,148473],{"__ignoreMap":174},[254,148231,148232,148234],{"class":256,"line":257},[254,148233,30533],{"class":260},[254,148235,147231],{"class":264},[254,148237,148238,148240,148242,148244,148246,148248],{"class":256,"line":175},[254,148239,30878],{"class":260},[254,148241,147519],{"class":264},[254,148243,30533],{"class":260},[254,148245,147524],{"class":264},[254,148247,31524],{"class":260},[254,148249,147529],{"class":264},[254,148251,148252,148254,148256,148258],{"class":256,"line":1319},[254,148253,30878],{"class":260},[254,148255,147378],{"class":264},[254,148257,30533],{"class":260},[254,148259,147383],{"class":264},[254,148261,148262],{"class":256,"line":1334},[254,148263,2540],{"emptyLinePlaceholder":184},[254,148265,148266,148268,148270,148272,148275,148277,148279,148281,148283,148285,148287,148289,148291,148294],{"class":256,"line":1340},[254,148267,107974],{"class":260},[254,148269,146931],{"class":313},[254,148271,265],{"class":264},[254,148273,148274],{"class":369},"\"sales.json\"",[254,148276,12576],{"class":264},[254,148278,146941],{"class":369},[254,148280,12576],{"class":264},[254,148282,146946],{"class":5357},[254,148284,310],{"class":260},[254,148286,146951],{"class":369},[254,148288,13855],{"class":264},[254,148290,31524],{"class":260},[254,148292,148293],{"class":5357}," file",[254,148295,3879],{"class":264},[254,148297,148298,148300,148302,148305,148307],{"class":256,"line":1354},[254,148299,101562],{"class":264},[254,148301,310],{"class":260},[254,148303,148304],{"class":264}," json.load(",[254,148306,45495],{"class":5357},[254,148308,271],{"class":264},[254,148310,148311],{"class":256,"line":1360},[254,148312,2540],{"emptyLinePlaceholder":184},[254,148314,148315,148317,148319],{"class":256,"line":1451},[254,148316,147940],{"class":264},[254,148318,310],{"class":260},[254,148320,51979],{"class":264},[254,148322,148323,148326,148328],{"class":256,"line":1457},[254,148324,148325],{"class":264},"online_sales ",[254,148327,310],{"class":260},[254,148329,51979],{"class":264},[254,148331,148332,148335,148337],{"class":256,"line":1469},[254,148333,148334],{"class":264},"offline_sales ",[254,148336,310],{"class":260},[254,148338,51979],{"class":264},[254,148340,148341],{"class":256,"line":1752},[254,148342,2540],{"emptyLinePlaceholder":184},[254,148344,148345,148347,148350,148352],{"class":256,"line":1757},[254,148346,3165],{"class":260},[254,148348,148349],{"class":264}," item ",[254,148351,26184],{"class":260},[254,148353,148354],{"class":264}," data:\n",[254,148356,148357,148360,148362],{"class":256,"line":1763},[254,148358,148359],{"class":264},"    dates.append(item[",[254,148361,148137],{"class":369},[254,148363,4797],{"class":264},[254,148365,148366,148369,148371],{"class":256,"line":1768},[254,148367,148368],{"class":264},"    online_sales.append(item[",[254,148370,148146],{"class":369},[254,148372,4797],{"class":264},[254,148374,148375,148378,148380],{"class":256,"line":1782},[254,148376,148377],{"class":264},"    offline_sales.append(item[",[254,148379,148155],{"class":369},[254,148381,4797],{"class":264},[254,148383,148384],{"class":256,"line":1787},[254,148385,2540],{"emptyLinePlaceholder":184},[254,148387,148388,148390,148392],{"class":256,"line":1793},[254,148389,147392],{"class":264},[254,148391,310],{"class":260},[254,148393,147397],{"class":264},[254,148395,148396],{"class":256,"line":1814},[254,148397,147981],{"class":264},[254,148399,148400,148402,148404,148407,148409,148411,148413],{"class":256,"line":1819},[254,148401,147432],{"class":264},[254,148403,147988],{"class":369},[254,148405,148406],{"class":264},", online_sales, ",[254,148408,147885],{"class":5357},[254,148410,310],{"class":260},[254,148412,31617],{"class":313},[254,148414,271],{"class":264},[254,148416,148417,148419,148421,148424,148426,148428,148430],{"class":256,"line":1833},[254,148418,147432],{"class":264},[254,148420,148026],{"class":369},[254,148422,148423],{"class":264},", offline_sales, ",[254,148425,147885],{"class":5357},[254,148427,310],{"class":260},[254,148429,31617],{"class":313},[254,148431,271],{"class":264},[254,148433,148434],{"class":256,"line":1838},[254,148435,147608],{"class":264},[254,148437,148438,148440,148442,148444,148446,148448,148451],{"class":256,"line":1867},[254,148439,147613],{"class":5357},[254,148441,310],{"class":260},[254,148443,147618],{"class":264},[254,148445,51548],{"class":5357},[254,148447,310],{"class":260},[254,148449,148450],{"class":369},"\"销售趋势\"",[254,148452,38188],{"class":264},[254,148454,148455,148457,148459,148461,148463,148465,148467],{"class":256,"line":1872},[254,148456,147669],{"class":5357},[254,148458,310],{"class":260},[254,148460,147674],{"class":264},[254,148462,147677],{"class":5357},[254,148464,310],{"class":260},[254,148466,147682],{"class":369},[254,148468,38188],{"class":264},[254,148470,148471],{"class":256,"line":1889},[254,148472,271],{"class":264},[254,148474,148475,148477,148479],{"class":256,"line":1894},[254,148476,147464],{"class":264},[254,148478,148104],{"class":369},[254,148480,271],{"class":264},[34,148482,148484],{"id":148483},"_109-数据清洗","10.9 数据清洗",[14,148486,148487],{},"真实数据经常不整齐，需要清洗。",[14,148489,148490],{},"常见问题：",[21,148492,148493,148496,148499,148502],{},[24,148494,148495],{},"数字是字符串。",[24,148497,148498],{},"字段缺失。",[24,148500,148501],{},"空值。",[24,148503,148504],{},"日期格式不统一。",[14,148506,15276],{},[245,148508,148510],{"className":30519,"code":148509,"language":30521,"meta":174,"style":174},"raw_data = [\n    {\"date\": \"周一\", \"sales\": \"100\"},\n    {\"date\": \"周二\", \"sales\": \"\"},\n    {\"date\": \"周三\", \"sales\": \"120\"},\n]\n\ndates = []\nsales = []\n\nfor item in raw_data:\n    value = item.get(\"sales\")\n    if not value:\n        continue\n\n    dates.append(item[\"date\"])\n    sales.append(int(value))\n\nprint(dates)\nprint(sales)\n",[251,148511,148512,148521,148544,148564,148585,148589,148593,148601,148610,148614,148625,148639,148648,148653,148657,148665,148675,148679,148686],{"__ignoreMap":174},[254,148513,148514,148517,148519],{"class":256,"line":257},[254,148515,148516],{"class":264},"raw_data ",[254,148518,310],{"class":260},[254,148520,55588],{"class":264},[254,148522,148523,148526,148528,148530,148532,148534,148537,148539,148542],{"class":256,"line":175},[254,148524,148525],{"class":264},"    {",[254,148527,148137],{"class":369},[254,148529,51578],{"class":264},[254,148531,147405],{"class":369},[254,148533,12576],{"class":264},[254,148535,148536],{"class":369},"\"sales\"",[254,148538,51578],{"class":264},[254,148540,148541],{"class":369},"\"100\"",[254,148543,5070],{"class":264},[254,148545,148546,148548,148550,148552,148554,148556,148558,148560,148562],{"class":256,"line":1319},[254,148547,148525],{"class":264},[254,148549,148137],{"class":369},[254,148551,51578],{"class":264},[254,148553,147410],{"class":369},[254,148555,12576],{"class":264},[254,148557,148536],{"class":369},[254,148559,51578],{"class":264},[254,148561,7793],{"class":369},[254,148563,5070],{"class":264},[254,148565,148566,148568,148570,148572,148574,148576,148578,148580,148583],{"class":256,"line":1334},[254,148567,148525],{"class":264},[254,148569,148137],{"class":369},[254,148571,51578],{"class":264},[254,148573,147415],{"class":369},[254,148575,12576],{"class":264},[254,148577,148536],{"class":369},[254,148579,51578],{"class":264},[254,148581,148582],{"class":369},"\"120\"",[254,148584,5070],{"class":264},[254,148586,148587],{"class":256,"line":1340},[254,148588,33387],{"class":264},[254,148590,148591],{"class":256,"line":1354},[254,148592,2540],{"emptyLinePlaceholder":184},[254,148594,148595,148597,148599],{"class":256,"line":1360},[254,148596,147940],{"class":264},[254,148598,310],{"class":260},[254,148600,51979],{"class":264},[254,148602,148603,148606,148608],{"class":256,"line":1451},[254,148604,148605],{"class":264},"sales ",[254,148607,310],{"class":260},[254,148609,51979],{"class":264},[254,148611,148612],{"class":256,"line":1457},[254,148613,2540],{"emptyLinePlaceholder":184},[254,148615,148616,148618,148620,148622],{"class":256,"line":1469},[254,148617,3165],{"class":260},[254,148619,148349],{"class":264},[254,148621,26184],{"class":260},[254,148623,148624],{"class":264}," raw_data:\n",[254,148626,148627,148630,148632,148635,148637],{"class":256,"line":1752},[254,148628,148629],{"class":264},"    value ",[254,148631,310],{"class":260},[254,148633,148634],{"class":264}," item.get(",[254,148636,148536],{"class":369},[254,148638,271],{"class":264},[254,148640,148641,148643,148645],{"class":256,"line":1757},[254,148642,3241],{"class":260},[254,148644,39071],{"class":260},[254,148646,148647],{"class":264}," value:\n",[254,148649,148650],{"class":256,"line":1763},[254,148651,148652],{"class":260},"        continue\n",[254,148654,148655],{"class":256,"line":1768},[254,148656,2540],{"emptyLinePlaceholder":184},[254,148658,148659,148661,148663],{"class":256,"line":1782},[254,148660,148359],{"class":264},[254,148662,148137],{"class":369},[254,148664,4797],{"class":264},[254,148666,148667,148670,148672],{"class":256,"line":1787},[254,148668,148669],{"class":264},"    sales.append(",[254,148671,268],{"class":313},[254,148673,148674],{"class":264},"(value))\n",[254,148676,148677],{"class":256,"line":1793},[254,148678,2540],{"emptyLinePlaceholder":184},[254,148680,148681,148683],{"class":256,"line":1814},[254,148682,30556],{"class":313},[254,148684,148685],{"class":264},"(dates)\n",[254,148687,148688,148690],{"class":256,"line":1819},[254,148689,30556],{"class":313},[254,148691,148692],{"class":264},"(sales)\n",[34,148694,148696],{"id":148695},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[245,148698,148700],{"className":30519,"code":148699,"language":30521,"meta":174,"style":174},"from pyecharts import options as opts\nfrom pyecharts.charts import Line\n\nsales = [\n    {\"date\": \"2024-10-01\", \"amount\": 1200},\n    {\"date\": \"2024-10-02\", \"amount\": 1800},\n    {\"date\": \"2024-10-03\", \"amount\": 1500},\n    {\"date\": \"2024-10-04\", \"amount\": 2100},\n    {\"date\": \"2024-10-05\", \"amount\": 2600},\n]\n\ndates = [item[\"date\"] for item in sales]\namounts = [item[\"amount\"] for item in sales]\n\nline = Line()\nline.add_xaxis(dates)\nline.add_yaxis(\n    series_name=\"销售额\",\n    y_axis=amounts,\n    is_smooth=True,\n    label_opts=opts.LabelOpts(is_show=True),\n)\nline.set_global_opts(\n    title_opts=opts.TitleOpts(title=\"每日销售额\"),\n    xaxis_opts=opts.AxisOpts(name=\"日期\"),\n    yaxis_opts=opts.AxisOpts(name=\"金额\"),\n    tooltip_opts=opts.TooltipOpts(trigger=\"axis\"),\n    datazoom_opts=[opts.DataZoomOpts()],\n)\nline.render(\"daily_sales.html\")\n",[251,148701,148702,148716,148726,148730,148738,148759,148781,148803,148825,148847,148851,148855,148877,148898,148902,148910,148914,148918,148928,148937,148947,148963,148967,148971,148988,149004,149020,149036,149046,149050],{"__ignoreMap":174},[254,148703,148704,148706,148708,148710,148712,148714],{"class":256,"line":257},[254,148705,30878],{"class":260},[254,148707,147519],{"class":264},[254,148709,30533],{"class":260},[254,148711,147524],{"class":264},[254,148713,31524],{"class":260},[254,148715,147529],{"class":264},[254,148717,148718,148720,148722,148724],{"class":256,"line":175},[254,148719,30878],{"class":260},[254,148721,147378],{"class":264},[254,148723,30533],{"class":260},[254,148725,147383],{"class":264},[254,148727,148728],{"class":256,"line":1319},[254,148729,2540],{"emptyLinePlaceholder":184},[254,148731,148732,148734,148736],{"class":256,"line":1334},[254,148733,148605],{"class":264},[254,148735,310],{"class":260},[254,148737,55588],{"class":264},[254,148739,148740,148742,148744,148746,148749,148751,148753,148755,148757],{"class":256,"line":1340},[254,148741,148525],{"class":264},[254,148743,148137],{"class":369},[254,148745,51578],{"class":264},[254,148747,148748],{"class":369},"\"2024-10-01\"",[254,148750,12576],{"class":264},[254,148752,84225],{"class":369},[254,148754,51578],{"class":264},[254,148756,92164],{"class":313},[254,148758,5070],{"class":264},[254,148760,148761,148763,148765,148767,148770,148772,148774,148776,148779],{"class":256,"line":1354},[254,148762,148525],{"class":264},[254,148764,148137],{"class":369},[254,148766,51578],{"class":264},[254,148768,148769],{"class":369},"\"2024-10-02\"",[254,148771,12576],{"class":264},[254,148773,84225],{"class":369},[254,148775,51578],{"class":264},[254,148777,148778],{"class":313},"1800",[254,148780,5070],{"class":264},[254,148782,148783,148785,148787,148789,148792,148794,148796,148798,148801],{"class":256,"line":1360},[254,148784,148525],{"class":264},[254,148786,148137],{"class":369},[254,148788,51578],{"class":264},[254,148790,148791],{"class":369},"\"2024-10-03\"",[254,148793,12576],{"class":264},[254,148795,84225],{"class":369},[254,148797,51578],{"class":264},[254,148799,148800],{"class":313},"1500",[254,148802,5070],{"class":264},[254,148804,148805,148807,148809,148811,148814,148816,148818,148820,148823],{"class":256,"line":1451},[254,148806,148525],{"class":264},[254,148808,148137],{"class":369},[254,148810,51578],{"class":264},[254,148812,148813],{"class":369},"\"2024-10-04\"",[254,148815,12576],{"class":264},[254,148817,84225],{"class":369},[254,148819,51578],{"class":264},[254,148821,148822],{"class":313},"2100",[254,148824,5070],{"class":264},[254,148826,148827,148829,148831,148833,148836,148838,148840,148842,148845],{"class":256,"line":1457},[254,148828,148525],{"class":264},[254,148830,148137],{"class":369},[254,148832,51578],{"class":264},[254,148834,148835],{"class":369},"\"2024-10-05\"",[254,148837,12576],{"class":264},[254,148839,84225],{"class":369},[254,148841,51578],{"class":264},[254,148843,148844],{"class":313},"2600",[254,148846,5070],{"class":264},[254,148848,148849],{"class":256,"line":1469},[254,148850,33387],{"class":264},[254,148852,148853],{"class":256,"line":1752},[254,148854,2540],{"emptyLinePlaceholder":184},[254,148856,148857,148859,148861,148864,148866,148868,148870,148872,148874],{"class":256,"line":1757},[254,148858,147940],{"class":264},[254,148860,310],{"class":260},[254,148862,148863],{"class":264}," [item[",[254,148865,148137],{"class":369},[254,148867,4583],{"class":264},[254,148869,3165],{"class":260},[254,148871,148349],{"class":264},[254,148873,26184],{"class":260},[254,148875,148876],{"class":264}," sales]\n",[254,148878,148879,148882,148884,148886,148888,148890,148892,148894,148896],{"class":256,"line":1763},[254,148880,148881],{"class":264},"amounts ",[254,148883,310],{"class":260},[254,148885,148863],{"class":264},[254,148887,84225],{"class":369},[254,148889,4583],{"class":264},[254,148891,3165],{"class":260},[254,148893,148349],{"class":264},[254,148895,26184],{"class":260},[254,148897,148876],{"class":264},[254,148899,148900],{"class":256,"line":1768},[254,148901,2540],{"emptyLinePlaceholder":184},[254,148903,148904,148906,148908],{"class":256,"line":1782},[254,148905,147392],{"class":264},[254,148907,310],{"class":260},[254,148909,147397],{"class":264},[254,148911,148912],{"class":256,"line":1787},[254,148913,147981],{"class":264},[254,148915,148916],{"class":256,"line":1793},[254,148917,147789],{"class":264},[254,148919,148920,148922,148924,148926],{"class":256,"line":1814},[254,148921,147794],{"class":5357},[254,148923,310],{"class":260},[254,148925,147435],{"class":369},[254,148927,31607],{"class":264},[254,148929,148930,148932,148934],{"class":256,"line":1819},[254,148931,147805],{"class":5357},[254,148933,310],{"class":260},[254,148935,148936],{"class":264},"amounts,\n",[254,148938,148939,148941,148943,148945],{"class":256,"line":1833},[254,148940,147834],{"class":5357},[254,148942,310],{"class":260},[254,148944,31617],{"class":313},[254,148946,31607],{"class":264},[254,148948,148949,148951,148953,148955,148957,148959,148961],{"class":256,"line":1838},[254,148950,147845],{"class":5357},[254,148952,310],{"class":260},[254,148954,147850],{"class":264},[254,148956,147853],{"class":5357},[254,148958,310],{"class":260},[254,148960,31617],{"class":313},[254,148962,38188],{"class":264},[254,148964,148965],{"class":256,"line":1867},[254,148966,271],{"class":264},[254,148968,148969],{"class":256,"line":1872},[254,148970,147608],{"class":264},[254,148972,148973,148975,148977,148979,148981,148983,148986],{"class":256,"line":1889},[254,148974,147613],{"class":5357},[254,148976,310],{"class":260},[254,148978,147618],{"class":264},[254,148980,51548],{"class":5357},[254,148982,310],{"class":260},[254,148984,148985],{"class":369},"\"每日销售额\"",[254,148987,38188],{"class":264},[254,148989,148990,148992,148994,148996,148998,149000,149002],{"class":256,"line":1894},[254,148991,147632],{"class":5357},[254,148993,310],{"class":260},[254,148995,147637],{"class":264},[254,148997,79951],{"class":5357},[254,148999,310],{"class":260},[254,149001,147644],{"class":369},[254,149003,38188],{"class":264},[254,149005,149006,149008,149010,149012,149014,149016,149018],{"class":256,"line":1899},[254,149007,147651],{"class":5357},[254,149009,310],{"class":260},[254,149011,147637],{"class":264},[254,149013,79951],{"class":5357},[254,149015,310],{"class":260},[254,149017,147662],{"class":369},[254,149019,38188],{"class":264},[254,149021,149022,149024,149026,149028,149030,149032,149034],{"class":256,"line":1904},[254,149023,147669],{"class":5357},[254,149025,310],{"class":260},[254,149027,147674],{"class":264},[254,149029,147677],{"class":5357},[254,149031,310],{"class":260},[254,149033,147682],{"class":369},[254,149035,38188],{"class":264},[254,149037,149038,149041,149043],{"class":256,"line":1918},[254,149039,149040],{"class":5357},"    datazoom_opts",[254,149042,310],{"class":260},[254,149044,149045],{"class":264},"[opts.DataZoomOpts()],\n",[254,149047,149048],{"class":256,"line":1923},[254,149049,271],{"class":264},[254,149051,149052,149054,149057],{"class":256,"line":2717},[254,149053,147464],{"class":264},[254,149055,149056],{"class":369},"\"daily_sales.html\"",[254,149058,271],{"class":264},[14,149060,149061,149064],{},[251,149062,149063],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[34,149066,149068],{"id":149067},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[14,149070,149071],{},"如果数据结构如下：",[245,149073,149075],{"className":30519,"code":149074,"language":30521,"meta":174,"style":174},"data = {\n    \"北京\": [\n        {\"date\": \"2024-01-01\", \"confirm\": 10},\n        {\"date\": \"2024-01-02\", \"confirm\": 12},\n    ],\n    \"上海\": [\n        {\"date\": \"2024-01-01\", \"confirm\": 8},\n        {\"date\": \"2024-01-02\", \"confirm\": 13},\n    ],\n}\n",[251,149076,149077,149085,149093,149115,149136,149141,149148,149168,149188,149192],{"__ignoreMap":174},[254,149078,149079,149081,149083],{"class":256,"line":257},[254,149080,101799],{"class":264},[254,149082,310],{"class":260},[254,149084,15713],{"class":264},[254,149086,149087,149090],{"class":256,"line":175},[254,149088,149089],{"class":369},"    \"北京\"",[254,149091,149092],{"class":264},": [\n",[254,149094,149095,149097,149099,149101,149104,149106,149109,149111,149113],{"class":256,"line":1319},[254,149096,5057],{"class":264},[254,149098,148137],{"class":369},[254,149100,51578],{"class":264},[254,149102,149103],{"class":369},"\"2024-01-01\"",[254,149105,12576],{"class":264},[254,149107,149108],{"class":369},"\"confirm\"",[254,149110,51578],{"class":264},[254,149112,710],{"class":313},[254,149114,5070],{"class":264},[254,149116,149117,149119,149121,149123,149126,149128,149130,149132,149134],{"class":256,"line":1334},[254,149118,5057],{"class":264},[254,149120,148137],{"class":369},[254,149122,51578],{"class":264},[254,149124,149125],{"class":369},"\"2024-01-02\"",[254,149127,12576],{"class":264},[254,149129,149108],{"class":369},[254,149131,51578],{"class":264},[254,149133,762],{"class":313},[254,149135,5070],{"class":264},[254,149137,149138],{"class":256,"line":1340},[254,149139,149140],{"class":264},"    ],\n",[254,149142,149143,149146],{"class":256,"line":1354},[254,149144,149145],{"class":369},"    \"上海\"",[254,149147,149092],{"class":264},[254,149149,149150,149152,149154,149156,149158,149160,149162,149164,149166],{"class":256,"line":1360},[254,149151,5057],{"class":264},[254,149153,148137],{"class":369},[254,149155,51578],{"class":264},[254,149157,149103],{"class":369},[254,149159,12576],{"class":264},[254,149161,149108],{"class":369},[254,149163,51578],{"class":264},[254,149165,659],{"class":313},[254,149167,5070],{"class":264},[254,149169,149170,149172,149174,149176,149178,149180,149182,149184,149186],{"class":256,"line":1451},[254,149171,5057],{"class":264},[254,149173,148137],{"class":369},[254,149175,51578],{"class":264},[254,149177,149125],{"class":369},[254,149179,12576],{"class":264},[254,149181,149108],{"class":369},[254,149183,51578],{"class":264},[254,149185,787],{"class":313},[254,149187,5070],{"class":264},[254,149189,149190],{"class":256,"line":1457},[254,149191,149140],{"class":264},[254,149193,149194],{"class":256,"line":1469},[254,149195,1705],{"class":264},[14,149197,149198],{},"绘制多地区趋势：",[245,149200,149202],{"className":30519,"code":149201,"language":30521,"meta":174,"style":174},"from pyecharts import options as opts\nfrom pyecharts.charts import Line\n\ndates = [item[\"date\"] for item in data[\"北京\"]]\n\nline = Line()\nline.add_xaxis(dates)\n\nfor city, records in data.items():\n    values = [item[\"confirm\"] for item in records]\n    line.add_yaxis(city, values, is_smooth=True)\n\nline.set_global_opts(\n    title_opts=opts.TitleOpts(title=\"多地区趋势图\"),\n    tooltip_opts=opts.TooltipOpts(trigger=\"axis\"),\n)\nline.render(\"trend.html\")\n",[251,149203,149204,149218,149228,149232,149257,149261,149269,149273,149277,149289,149311,149324,149328,149332,149349,149365,149369],{"__ignoreMap":174},[254,149205,149206,149208,149210,149212,149214,149216],{"class":256,"line":257},[254,149207,30878],{"class":260},[254,149209,147519],{"class":264},[254,149211,30533],{"class":260},[254,149213,147524],{"class":264},[254,149215,31524],{"class":260},[254,149217,147529],{"class":264},[254,149219,149220,149222,149224,149226],{"class":256,"line":175},[254,149221,30878],{"class":260},[254,149223,147378],{"class":264},[254,149225,30533],{"class":260},[254,149227,147383],{"class":264},[254,149229,149230],{"class":256,"line":1319},[254,149231,2540],{"emptyLinePlaceholder":184},[254,149233,149234,149236,149238,149240,149242,149244,149246,149248,149250,149253,149255],{"class":256,"line":1334},[254,149235,147940],{"class":264},[254,149237,310],{"class":260},[254,149239,148863],{"class":264},[254,149241,148137],{"class":369},[254,149243,4583],{"class":264},[254,149245,3165],{"class":260},[254,149247,148349],{"class":264},[254,149249,26184],{"class":260},[254,149251,149252],{"class":264}," data[",[254,149254,69410],{"class":369},[254,149256,77668],{"class":264},[254,149258,149259],{"class":256,"line":1340},[254,149260,2540],{"emptyLinePlaceholder":184},[254,149262,149263,149265,149267],{"class":256,"line":1354},[254,149264,147392],{"class":264},[254,149266,310],{"class":260},[254,149268,147397],{"class":264},[254,149270,149271],{"class":256,"line":1360},[254,149272,147981],{"class":264},[254,149274,149275],{"class":256,"line":1451},[254,149276,2540],{"emptyLinePlaceholder":184},[254,149278,149279,149281,149284,149286],{"class":256,"line":1457},[254,149280,3165],{"class":260},[254,149282,149283],{"class":264}," city, records ",[254,149285,26184],{"class":260},[254,149287,149288],{"class":264}," data.items():\n",[254,149290,149291,149294,149296,149298,149300,149302,149304,149306,149308],{"class":256,"line":1469},[254,149292,149293],{"class":264},"    values ",[254,149295,310],{"class":260},[254,149297,148863],{"class":264},[254,149299,149108],{"class":369},[254,149301,4583],{"class":264},[254,149303,3165],{"class":260},[254,149305,148349],{"class":264},[254,149307,26184],{"class":260},[254,149309,149310],{"class":264}," records]\n",[254,149312,149313,149316,149318,149320,149322],{"class":256,"line":1752},[254,149314,149315],{"class":264},"    line.add_yaxis(city, values, ",[254,149317,147885],{"class":5357},[254,149319,310],{"class":260},[254,149321,31617],{"class":313},[254,149323,271],{"class":264},[254,149325,149326],{"class":256,"line":1757},[254,149327,2540],{"emptyLinePlaceholder":184},[254,149329,149330],{"class":256,"line":1763},[254,149331,147608],{"class":264},[254,149333,149334,149336,149338,149340,149342,149344,149347],{"class":256,"line":1768},[254,149335,147613],{"class":5357},[254,149337,310],{"class":260},[254,149339,147618],{"class":264},[254,149341,51548],{"class":5357},[254,149343,310],{"class":260},[254,149345,149346],{"class":369},"\"多地区趋势图\"",[254,149348,38188],{"class":264},[254,149350,149351,149353,149355,149357,149359,149361,149363],{"class":256,"line":1782},[254,149352,147669],{"class":5357},[254,149354,310],{"class":260},[254,149356,147674],{"class":264},[254,149358,147677],{"class":5357},[254,149360,310],{"class":260},[254,149362,147682],{"class":369},[254,149364,38188],{"class":264},[254,149366,149367],{"class":256,"line":1787},[254,149368,271],{"class":264},[254,149370,149371,149373,149376],{"class":256,"line":1793},[254,149372,147464],{"class":264},[254,149374,149375],{"class":369},"\"trend.html\"",[254,149377,271],{"class":264},[14,149379,149380],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[34,149382,149384],{"id":149383},"_1012-易错点","10.12 易错点",[21,149386,149387,149393,149399,149409,149415],{},[24,149388,149389,149392],{},[251,149390,149391],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[24,149394,149395,149398],{},[251,149396,149397],{},"render()"," 生成的是 HTML，不是图片。",[24,149400,149401,149402,149405,149406,28526],{},"JSON 字符串用 ",[251,149403,149404],{},"json.loads()","，JSON 文件用 ",[251,149407,149408],{},"json.load()",[24,149410,149411,149412,28526],{},"中文 JSON 保存时加 ",[251,149413,149414],{},"ensure_ascii=False",[24,149416,149417],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[34,149419,149421],{"id":149420},"_1013-本章练习","10.13 本章练习",[21,149423,149424,149427,149430,149433,149436],{},[24,149425,149426],{},"安装 pyecharts 并生成第一个折线图。",[24,149428,149429],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[24,149431,149432],{},"绘制两条折线，对比线上和线下销售额。",[24,149434,149435],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[24,149437,149438],{},"对含有空值的销售数据进行清洗后再绘图。",[5267,149440,149441],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}",{"title":174,"searchDepth":175,"depth":175,"links":149443},[149444,149445,149446,149447,149448,149449,149450,149451,149452,149453,149454,149455,149456],{"id":147060,"depth":175,"text":147061},{"id":147135,"depth":175,"text":147136},{"id":147314,"depth":175,"text":147315},{"id":147365,"depth":175,"text":147366},{"id":147499,"depth":175,"text":147500},{"id":147775,"depth":175,"text":147776},{"id":147901,"depth":175,"text":147902},{"id":148112,"depth":175,"text":148113},{"id":148483,"depth":175,"text":148484},{"id":148695,"depth":175,"text":148696},{"id":149067,"depth":175,"text":149068},{"id":149383,"depth":175,"text":149384},{"id":149420,"depth":175,"text":149421},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":147052,"description":23518},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149463,"title":149464,"body":149465,"description":23518,"extension":181,"meta":151825,"navigation":184,"path":151826,"seo":151827,"stem":151828,"__hash__":151829},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149466,"toc":151802},[149467,149470,149474,149477,149480,149556,149559,149650,149653,149657,149660,149704,149717,149721,149724,149791,149794,149798,149801,149885,149893,149897,149902,150043,150046,150057,150063,150069,150183,150187,150190,150193,150446,150449,150453,150456,150560,150563,150567,150718,150722,150729,150842,150846,150849,150955,150958,150962,150965,150996,150999,151104,151107,151111,151115,151125,151193,151197,151204,151268,151271,151275,151281,151377,151386,151390,151714,151723,151727,151755,151759,151799],[10,149468,149464],{"id":149469},"_11-面向对象基础",[34,149471,149473],{"id":149472},"_111-什么是面向对象","11.1 什么是面向对象",[14,149475,149476],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[14,149478,149479],{},"面向过程：",[245,149481,149483],{"className":30519,"code":149482,"language":30521,"meta":174,"style":174},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[251,149484,149485,149494,149502,149506,149516,149547,149551],{"__ignoreMap":174},[254,149486,149487,149489,149491],{"class":256,"line":257},[254,149488,146676],{"class":264},[254,149490,310],{"class":260},[254,149492,149493],{"class":369}," \"小明\"\n",[254,149495,149496,149498,149500],{"class":256,"line":175},[254,149497,146686],{"class":264},[254,149499,310],{"class":260},[254,149501,146691],{"class":313},[254,149503,149504],{"class":256,"line":1319},[254,149505,2540],{"emptyLinePlaceholder":184},[254,149507,149508,149510,149513],{"class":256,"line":1334},[254,149509,32088],{"class":260},[254,149511,149512],{"class":2103}," introduce",[254,149514,149515],{"class":264},"(name, age):\n",[254,149517,149518,149520,149522,149524,149527,149529,149531,149533,149536,149538,149540,149542,149545],{"class":256,"line":1340},[254,149519,31440],{"class":313},[254,149521,265],{"class":264},[254,149523,317],{"class":260},[254,149525,149526],{"class":369},"\"我叫",[254,149528,1160],{"class":313},[254,149530,79951],{"class":264},[254,149532,1210],{"class":313},[254,149534,149535],{"class":369},"，今年",[254,149537,1160],{"class":313},[254,149539,70362],{"class":264},[254,149541,1210],{"class":313},[254,149543,149544],{"class":369},"岁\"",[254,149546,271],{"class":264},[254,149548,149549],{"class":256,"line":1354},[254,149550,2540],{"emptyLinePlaceholder":184},[254,149552,149553],{"class":256,"line":1360},[254,149554,149555],{"class":264},"introduce(name, age)\n",[14,149557,149558],{},"面向对象：",[245,149560,149562],{"className":30519,"code":149561,"language":30521,"meta":174,"style":174},"class Student:\n    def introduce(self):\n        print(f\"我叫{self.name}，今年{self.age}岁\")\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\nstudent.introduce()\n",[251,149563,149564,149572,149580,149609,149613,149617,149627,149636,149645],{"__ignoreMap":174},[254,149565,149566,149568,149570],{"class":256,"line":257},[254,149567,14835],{"class":260},[254,149569,8039],{"class":2103},[254,149571,3879],{"class":264},[254,149573,149574,149576,149578],{"class":256,"line":175},[254,149575,30942],{"class":260},[254,149577,149512],{"class":2103},[254,149579,30948],{"class":264},[254,149581,149582,149584,149586,149588,149590,149593,149595,149597,149599,149601,149603,149605,149607],{"class":256,"line":1319},[254,149583,32592],{"class":313},[254,149585,265],{"class":264},[254,149587,317],{"class":260},[254,149589,149526],{"class":369},[254,149591,149592],{"class":313},"{self",[254,149594,80442],{"class":264},[254,149596,1210],{"class":313},[254,149598,149535],{"class":369},[254,149600,149592],{"class":313},[254,149602,80454],{"class":264},[254,149604,1210],{"class":313},[254,149606,149544],{"class":369},[254,149608,271],{"class":264},[254,149610,149611],{"class":256,"line":1334},[254,149612,2540],{"emptyLinePlaceholder":184},[254,149614,149615],{"class":256,"line":1340},[254,149616,2540],{"emptyLinePlaceholder":184},[254,149618,149619,149622,149624],{"class":256,"line":1354},[254,149620,149621],{"class":264},"student ",[254,149623,310],{"class":260},[254,149625,149626],{"class":264}," Student()\n",[254,149628,149629,149632,149634],{"class":256,"line":1360},[254,149630,149631],{"class":264},"student.name ",[254,149633,310],{"class":260},[254,149635,149493],{"class":369},[254,149637,149638,149641,149643],{"class":256,"line":1451},[254,149639,149640],{"class":264},"student.age ",[254,149642,310],{"class":260},[254,149644,146691],{"class":313},[254,149646,149647],{"class":256,"line":1457},[254,149648,149649],{"class":264},"student.introduce()\n",[14,149651,149652],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[34,149654,149656],{"id":149655},"_112-类和对象","11.2 类和对象",[14,149658,149659],{},"类是模板，对象是根据模板创建出来的具体实例。",[245,149661,149663],{"className":30519,"code":149662,"language":30521,"meta":174,"style":174},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[251,149664,149665,149673,149678,149682,149686,149695],{"__ignoreMap":174},[254,149666,149667,149669,149671],{"class":256,"line":257},[254,149668,14835],{"class":260},[254,149670,8039],{"class":2103},[254,149672,3879],{"class":264},[254,149674,149675],{"class":256,"line":175},[254,149676,149677],{"class":260},"    pass\n",[254,149679,149680],{"class":256,"line":1319},[254,149681,2540],{"emptyLinePlaceholder":184},[254,149683,149684],{"class":256,"line":1334},[254,149685,2540],{"emptyLinePlaceholder":184},[254,149687,149688,149691,149693],{"class":256,"line":1340},[254,149689,149690],{"class":264},"student1 ",[254,149692,310],{"class":260},[254,149694,149626],{"class":264},[254,149696,149697,149700,149702],{"class":256,"line":1354},[254,149698,149699],{"class":264},"student2 ",[254,149701,310],{"class":260},[254,149703,149626],{"class":264},[14,149705,149706,149709,149710,101159,149713,149716],{},[251,149707,149708],{},"Student"," 是类，",[251,149711,149712],{},"student1",[251,149714,149715],{},"student2"," 是对象。",[34,149718,149720],{"id":149719},"_113-属性","11.3 属性",[14,149722,149723],{},"属性是对象保存的数据。",[245,149725,149727],{"className":30519,"code":149726,"language":30521,"meta":174,"style":174},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[251,149728,149729,149737,149741,149745,149749,149757,149765,149773,149777,149784],{"__ignoreMap":174},[254,149730,149731,149733,149735],{"class":256,"line":257},[254,149732,14835],{"class":260},[254,149734,8039],{"class":2103},[254,149736,3879],{"class":264},[254,149738,149739],{"class":256,"line":175},[254,149740,149677],{"class":260},[254,149742,149743],{"class":256,"line":1319},[254,149744,2540],{"emptyLinePlaceholder":184},[254,149746,149747],{"class":256,"line":1334},[254,149748,2540],{"emptyLinePlaceholder":184},[254,149750,149751,149753,149755],{"class":256,"line":1340},[254,149752,149621],{"class":264},[254,149754,310],{"class":260},[254,149756,149626],{"class":264},[254,149758,149759,149761,149763],{"class":256,"line":1354},[254,149760,149631],{"class":264},[254,149762,310],{"class":260},[254,149764,149493],{"class":369},[254,149766,149767,149769,149771],{"class":256,"line":1360},[254,149768,149640],{"class":264},[254,149770,310],{"class":260},[254,149772,146691],{"class":313},[254,149774,149775],{"class":256,"line":1451},[254,149776,2540],{"emptyLinePlaceholder":184},[254,149778,149779,149781],{"class":256,"line":1457},[254,149780,30556],{"class":313},[254,149782,149783],{"class":264},"(student.name)\n",[254,149785,149786,149788],{"class":256,"line":1469},[254,149787,30556],{"class":313},[254,149789,149790],{"class":264},"(student.age)\n",[14,149792,149793],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[34,149795,149797],{"id":149796},"_114-方法","11.4 方法",[14,149799,149800],{},"类中的函数叫方法。",[245,149802,149803],{"className":30519,"code":149561,"language":30521,"meta":174,"style":174},[251,149804,149805,149813,149821,149849,149853,149857,149865,149873,149881],{"__ignoreMap":174},[254,149806,149807,149809,149811],{"class":256,"line":257},[254,149808,14835],{"class":260},[254,149810,8039],{"class":2103},[254,149812,3879],{"class":264},[254,149814,149815,149817,149819],{"class":256,"line":175},[254,149816,30942],{"class":260},[254,149818,149512],{"class":2103},[254,149820,30948],{"class":264},[254,149822,149823,149825,149827,149829,149831,149833,149835,149837,149839,149841,149843,149845,149847],{"class":256,"line":1319},[254,149824,32592],{"class":313},[254,149826,265],{"class":264},[254,149828,317],{"class":260},[254,149830,149526],{"class":369},[254,149832,149592],{"class":313},[254,149834,80442],{"class":264},[254,149836,1210],{"class":313},[254,149838,149535],{"class":369},[254,149840,149592],{"class":313},[254,149842,80454],{"class":264},[254,149844,1210],{"class":313},[254,149846,149544],{"class":369},[254,149848,271],{"class":264},[254,149850,149851],{"class":256,"line":1334},[254,149852,2540],{"emptyLinePlaceholder":184},[254,149854,149855],{"class":256,"line":1340},[254,149856,2540],{"emptyLinePlaceholder":184},[254,149858,149859,149861,149863],{"class":256,"line":1354},[254,149860,149621],{"class":264},[254,149862,310],{"class":260},[254,149864,149626],{"class":264},[254,149866,149867,149869,149871],{"class":256,"line":1360},[254,149868,149631],{"class":264},[254,149870,310],{"class":260},[254,149872,149493],{"class":369},[254,149874,149875,149877,149879],{"class":256,"line":1451},[254,149876,149640],{"class":264},[254,149878,310],{"class":260},[254,149880,146691],{"class":313},[254,149882,149883],{"class":256,"line":1457},[254,149884,149649],{"class":264},[14,149886,149887,149889,149890,149892],{},[251,149888,30964],{}," 表示当前对象。调用方法时不需要手动传入 ",[251,149891,30964],{},"，Python 会自动传。",[34,149894,149896],{"id":149895},"_115-构造方法__init__","11.5 构造方法__init__",[14,149898,149899,149901],{},[251,149900,30970],{}," 在对象创建时自动执行，用于初始化属性。",[245,149903,149905],{"className":30519,"code":149904,"language":30521,"meta":174,"style":174},"class Student:\n    def __init__(self, name, age, score):\n        self.name = name\n        self.age = age\n        self.score = score\n\n    def introduce(self):\n        print(f\"我叫{self.name}，今年{self.age}岁，成绩{self.score}\")\n\n\nstudent = Student(\"小明\", 18, 95)\nstudent.introduce()\n",[251,149906,149907,149915,149924,149936,149948,149959,149963,149971,150009,150013,150017,150039],{"__ignoreMap":174},[254,149908,149909,149911,149913],{"class":256,"line":257},[254,149910,14835],{"class":260},[254,149912,8039],{"class":2103},[254,149914,3879],{"class":264},[254,149916,149917,149919,149921],{"class":256,"line":175},[254,149918,30942],{"class":260},[254,149920,30945],{"class":313},[254,149922,149923],{"class":264},"(self, name, age, score):\n",[254,149925,149926,149928,149931,149933],{"class":256,"line":1319},[254,149927,30986],{"class":313},[254,149929,149930],{"class":264},".name ",[254,149932,310],{"class":260},[254,149934,149935],{"class":264}," name\n",[254,149937,149938,149940,149943,149945],{"class":256,"line":1334},[254,149939,30986],{"class":313},[254,149941,149942],{"class":264},".age ",[254,149944,310],{"class":260},[254,149946,149947],{"class":264}," age\n",[254,149949,149950,149952,149955,149957],{"class":256,"line":1340},[254,149951,30986],{"class":313},[254,149953,149954],{"class":264},".score ",[254,149956,310],{"class":260},[254,149958,1719],{"class":264},[254,149960,149961],{"class":256,"line":1354},[254,149962,2540],{"emptyLinePlaceholder":184},[254,149964,149965,149967,149969],{"class":256,"line":1360},[254,149966,30942],{"class":260},[254,149968,149512],{"class":2103},[254,149970,30948],{"class":264},[254,149972,149973,149975,149977,149979,149981,149983,149985,149987,149989,149991,149993,149995,149998,150000,150003,150005,150007],{"class":256,"line":1451},[254,149974,32592],{"class":313},[254,149976,265],{"class":264},[254,149978,317],{"class":260},[254,149980,149526],{"class":369},[254,149982,149592],{"class":313},[254,149984,80442],{"class":264},[254,149986,1210],{"class":313},[254,149988,149535],{"class":369},[254,149990,149592],{"class":313},[254,149992,80454],{"class":264},[254,149994,1210],{"class":313},[254,149996,149997],{"class":369},"岁，成绩",[254,149999,149592],{"class":313},[254,150001,150002],{"class":264},".score",[254,150004,1210],{"class":313},[254,150006,515],{"class":369},[254,150008,271],{"class":264},[254,150010,150011],{"class":256,"line":1457},[254,150012,2540],{"emptyLinePlaceholder":184},[254,150014,150015],{"class":256,"line":1469},[254,150016,2540],{"emptyLinePlaceholder":184},[254,150018,150019,150021,150023,150026,150029,150031,150033,150035,150037],{"class":256,"line":1752},[254,150020,149621],{"class":264},[254,150022,310],{"class":260},[254,150024,150025],{"class":264}," Student(",[254,150027,150028],{"class":369},"\"小明\"",[254,150030,12576],{"class":264},[254,150032,914],{"class":313},[254,150034,12576],{"class":264},[254,150036,1253],{"class":313},[254,150038,271],{"class":264},[254,150040,150041],{"class":256,"line":1757},[254,150042,149649],{"class":264},[14,150044,150045],{},"构造方法的好处：",[21,150047,150048,150051,150054],{},[24,150049,150050],{},"创建对象时必须提供必要数据。",[24,150052,150053],{},"属性初始化集中，不容易漏。",[24,150055,150056],{},"对象状态更完整。",[34,150058,150060,150061],{"id":150059},"_116-str","11.6 ",[414,150062,1439],{},[14,150064,150065,150066,28526],{},"直接打印对象时，默认输出不直观。可以定义 ",[251,150067,150068],{},"__str__",[245,150070,150072],{"className":30519,"code":150071,"language":30521,"meta":174,"style":174},"class Student:\n    def __init__(self, name, age):\n        self.name = name\n        self.age = age\n\n    def __str__(self):\n        return f\"Student(name={self.name}, age={self.age})\"\n\n\nstudent = Student(\"小明\", 18)\nprint(student)\n",[251,150073,150074,150082,150091,150101,150111,150115,150124,150152,150156,150160,150176],{"__ignoreMap":174},[254,150075,150076,150078,150080],{"class":256,"line":257},[254,150077,14835],{"class":260},[254,150079,8039],{"class":2103},[254,150081,3879],{"class":264},[254,150083,150084,150086,150088],{"class":256,"line":175},[254,150085,30942],{"class":260},[254,150087,30945],{"class":313},[254,150089,150090],{"class":264},"(self, name, age):\n",[254,150092,150093,150095,150097,150099],{"class":256,"line":1319},[254,150094,30986],{"class":313},[254,150096,149930],{"class":264},[254,150098,310],{"class":260},[254,150100,149935],{"class":264},[254,150102,150103,150105,150107,150109],{"class":256,"line":1334},[254,150104,30986],{"class":313},[254,150106,149942],{"class":264},[254,150108,310],{"class":260},[254,150110,149947],{"class":264},[254,150112,150113],{"class":256,"line":1340},[254,150114,2540],{"emptyLinePlaceholder":184},[254,150116,150117,150119,150122],{"class":256,"line":1354},[254,150118,30942],{"class":260},[254,150120,150121],{"class":313}," __str__",[254,150123,30948],{"class":264},[254,150125,150126,150128,150131,150134,150136,150138,150140,150143,150145,150147,150149],{"class":256,"line":1360},[254,150127,14893],{"class":260},[254,150129,150130],{"class":260}," f",[254,150132,150133],{"class":369},"\"Student(name=",[254,150135,149592],{"class":313},[254,150137,80442],{"class":264},[254,150139,1210],{"class":313},[254,150141,150142],{"class":369},", age=",[254,150144,149592],{"class":313},[254,150146,80454],{"class":264},[254,150148,1210],{"class":313},[254,150150,150151],{"class":369},")\"\n",[254,150153,150154],{"class":256,"line":1451},[254,150155,2540],{"emptyLinePlaceholder":184},[254,150157,150158],{"class":256,"line":1457},[254,150159,2540],{"emptyLinePlaceholder":184},[254,150161,150162,150164,150166,150168,150170,150172,150174],{"class":256,"line":1469},[254,150163,149621],{"class":264},[254,150165,310],{"class":260},[254,150167,150025],{"class":264},[254,150169,150028],{"class":369},[254,150171,12576],{"class":264},[254,150173,914],{"class":313},[254,150175,271],{"class":264},[254,150177,150178,150180],{"class":256,"line":1752},[254,150179,30556],{"class":313},[254,150181,150182],{"class":264},"(student)\n",[34,150184,150186],{"id":150185},"_117-封装","11.7 封装",[14,150188,150189],{},"封装就是把数据和方法放到类中，并控制访问方式。",[14,150191,150192],{},"Python 中以双下划线开头的属性通常视为私有属性。",[245,150194,150196],{"className":30519,"code":150195,"language":30521,"meta":174,"style":174},"class Account:\n    def __init__(self, owner, balance):\n        self.owner = owner\n        self.__balance = balance\n\n    def get_balance(self):\n        return self.__balance\n\n    def deposit(self, money):\n        if money \u003C= 0:\n            print(\"存款金额必须大于0\")\n            return\n        self.__balance += money\n\n    def withdraw(self, money):\n        if money \u003C= 0:\n            print(\"取款金额必须大于0\")\n            return\n        if money > self.__balance:\n            print(\"余额不足\")\n            return\n        self.__balance -= money\n\n\naccount = Account(\"小明\", 1000)\naccount.deposit(200)\naccount.withdraw(100)\nprint(account.get_balance())\n",[251,150197,150198,150207,150216,150228,150240,150244,150253,150262,150266,150276,150289,150300,150305,150316,150320,150329,150341,150352,150356,150369,150380,150384,150395,150399,150403,150421,150430,150439],{"__ignoreMap":174},[254,150199,150200,150202,150205],{"class":256,"line":257},[254,150201,14835],{"class":260},[254,150203,150204],{"class":2103}," Account",[254,150206,3879],{"class":264},[254,150208,150209,150211,150213],{"class":256,"line":175},[254,150210,30942],{"class":260},[254,150212,30945],{"class":313},[254,150214,150215],{"class":264},"(self, owner, balance):\n",[254,150217,150218,150220,150223,150225],{"class":256,"line":1319},[254,150219,30986],{"class":313},[254,150221,150222],{"class":264},".owner ",[254,150224,310],{"class":260},[254,150226,150227],{"class":264}," owner\n",[254,150229,150230,150232,150235,150237],{"class":256,"line":1334},[254,150231,30986],{"class":313},[254,150233,150234],{"class":264},".__balance ",[254,150236,310],{"class":260},[254,150238,150239],{"class":264}," balance\n",[254,150241,150242],{"class":256,"line":1340},[254,150243,2540],{"emptyLinePlaceholder":184},[254,150245,150246,150248,150251],{"class":256,"line":1354},[254,150247,30942],{"class":260},[254,150249,150250],{"class":2103}," get_balance",[254,150252,30948],{"class":264},[254,150254,150255,150257,150259],{"class":256,"line":1360},[254,150256,14893],{"class":260},[254,150258,39014],{"class":313},[254,150260,150261],{"class":264},".__balance\n",[254,150263,150264],{"class":256,"line":1451},[254,150265,2540],{"emptyLinePlaceholder":184},[254,150267,150268,150270,150273],{"class":256,"line":1457},[254,150269,30942],{"class":260},[254,150271,150272],{"class":2103}," deposit",[254,150274,150275],{"class":264},"(self, money):\n",[254,150277,150278,150280,150283,150285,150287],{"class":256,"line":1469},[254,150279,2637],{"class":260},[254,150281,150282],{"class":264}," money ",[254,150284,1728],{"class":260},[254,150286,4233],{"class":313},[254,150288,3879],{"class":264},[254,150290,150291,150293,150295,150298],{"class":256,"line":1752},[254,150292,34791],{"class":313},[254,150294,265],{"class":264},[254,150296,150297],{"class":369},"\"存款金额必须大于0\"",[254,150299,271],{"class":264},[254,150301,150302],{"class":256,"line":1757},[254,150303,150304],{"class":260},"            return\n",[254,150306,150307,150309,150311,150313],{"class":256,"line":1763},[254,150308,30986],{"class":313},[254,150310,150234],{"class":264},[254,150312,9618],{"class":260},[254,150314,150315],{"class":264}," money\n",[254,150317,150318],{"class":256,"line":1768},[254,150319,2540],{"emptyLinePlaceholder":184},[254,150321,150322,150324,150327],{"class":256,"line":1782},[254,150323,30942],{"class":260},[254,150325,150326],{"class":2103}," withdraw",[254,150328,150275],{"class":264},[254,150330,150331,150333,150335,150337,150339],{"class":256,"line":1787},[254,150332,2637],{"class":260},[254,150334,150282],{"class":264},[254,150336,1728],{"class":260},[254,150338,4233],{"class":313},[254,150340,3879],{"class":264},[254,150342,150343,150345,150347,150350],{"class":256,"line":1793},[254,150344,34791],{"class":313},[254,150346,265],{"class":264},[254,150348,150349],{"class":369},"\"取款金额必须大于0\"",[254,150351,271],{"class":264},[254,150353,150354],{"class":256,"line":1814},[254,150355,150304],{"class":260},[254,150357,150358,150360,150362,150364,150366],{"class":256,"line":1819},[254,150359,2637],{"class":260},[254,150361,150282],{"class":264},[254,150363,1224],{"class":260},[254,150365,39014],{"class":313},[254,150367,150368],{"class":264},".__balance:\n",[254,150370,150371,150373,150375,150378],{"class":256,"line":1833},[254,150372,34791],{"class":313},[254,150374,265],{"class":264},[254,150376,150377],{"class":369},"\"余额不足\"",[254,150379,271],{"class":264},[254,150381,150382],{"class":256,"line":1838},[254,150383,150304],{"class":260},[254,150385,150386,150388,150390,150393],{"class":256,"line":1867},[254,150387,30986],{"class":313},[254,150389,150234],{"class":264},[254,150391,150392],{"class":260},"-=",[254,150394,150315],{"class":264},[254,150396,150397],{"class":256,"line":1872},[254,150398,2540],{"emptyLinePlaceholder":184},[254,150400,150401],{"class":256,"line":1889},[254,150402,2540],{"emptyLinePlaceholder":184},[254,150404,150405,150408,150410,150413,150415,150417,150419],{"class":256,"line":1894},[254,150406,150407],{"class":264},"account ",[254,150409,310],{"class":260},[254,150411,150412],{"class":264}," Account(",[254,150414,150028],{"class":369},[254,150416,12576],{"class":264},[254,150418,6551],{"class":313},[254,150420,271],{"class":264},[254,150422,150423,150426,150428],{"class":256,"line":1899},[254,150424,150425],{"class":264},"account.deposit(",[254,150427,1862],{"class":313},[254,150429,271],{"class":264},[254,150431,150432,150435,150437],{"class":256,"line":1904},[254,150433,150434],{"class":264},"account.withdraw(",[254,150436,575],{"class":313},[254,150438,271],{"class":264},[254,150440,150441,150443],{"class":256,"line":1918},[254,150442,30556],{"class":313},[254,150444,150445],{"class":264},"(account.get_balance())\n",[14,150447,150448],{},"封装的意义是避免外部随意修改内部状态。",[34,150450,150452],{"id":150451},"_118-继承","11.8 继承",[14,150454,150455],{},"继承可以让子类复用父类的属性和方法。",[245,150457,150459],{"className":30519,"code":150458,"language":30521,"meta":174,"style":174},"class Animal:\n    def eat(self):\n        print(\"吃东西\")\n\n\nclass Dog(Animal):\n    def bark(self):\n        print(\"汪汪\")\n\n\ndog = Dog()\ndog.eat()\ndog.bark()\n",[251,150460,150461,150470,150479,150490,150494,150498,150512,150521,150532,150536,150540,150550,150555],{"__ignoreMap":174},[254,150462,150463,150465,150468],{"class":256,"line":257},[254,150464,14835],{"class":260},[254,150466,150467],{"class":2103}," Animal",[254,150469,3879],{"class":264},[254,150471,150472,150474,150477],{"class":256,"line":175},[254,150473,30942],{"class":260},[254,150475,150476],{"class":2103}," eat",[254,150478,30948],{"class":264},[254,150480,150481,150483,150485,150488],{"class":256,"line":1319},[254,150482,32592],{"class":313},[254,150484,265],{"class":264},[254,150486,150487],{"class":369},"\"吃东西\"",[254,150489,271],{"class":264},[254,150491,150492],{"class":256,"line":1334},[254,150493,2540],{"emptyLinePlaceholder":184},[254,150495,150496],{"class":256,"line":1340},[254,150497,2540],{"emptyLinePlaceholder":184},[254,150499,150500,150502,150505,150507,150510],{"class":256,"line":1354},[254,150501,14835],{"class":260},[254,150503,150504],{"class":2103}," Dog",[254,150506,265],{"class":264},[254,150508,150509],{"class":2103},"Animal",[254,150511,30927],{"class":264},[254,150513,150514,150516,150519],{"class":256,"line":1360},[254,150515,30942],{"class":260},[254,150517,150518],{"class":2103}," bark",[254,150520,30948],{"class":264},[254,150522,150523,150525,150527,150530],{"class":256,"line":1451},[254,150524,32592],{"class":313},[254,150526,265],{"class":264},[254,150528,150529],{"class":369},"\"汪汪\"",[254,150531,271],{"class":264},[254,150533,150534],{"class":256,"line":1457},[254,150535,2540],{"emptyLinePlaceholder":184},[254,150537,150538],{"class":256,"line":1469},[254,150539,2540],{"emptyLinePlaceholder":184},[254,150541,150542,150545,150547],{"class":256,"line":1752},[254,150543,150544],{"class":264},"dog ",[254,150546,310],{"class":260},[254,150548,150549],{"class":264}," Dog()\n",[254,150551,150552],{"class":256,"line":1757},[254,150553,150554],{"class":264},"dog.eat()\n",[254,150556,150557],{"class":256,"line":1763},[254,150558,150559],{"class":264},"dog.bark()\n",[14,150561,150562],{},"子类可以扩展新方法，也可以重写父类方法。",[34,150564,150566],{"id":150565},"_119-方法重写","11.9 方法重写",[245,150568,150570],{"className":30519,"code":150569,"language":30521,"meta":174,"style":174},"class Animal:\n    def speak(self):\n        print(\"动物叫\")\n\n\nclass Dog(Animal):\n    def speak(self):\n        print(\"汪汪\")\n\n\nclass Cat(Animal):\n    def speak(self):\n        print(\"喵喵\")\n\n\ndog = Dog()\ncat = Cat()\n\ndog.speak()\ncat.speak()\n",[251,150571,150572,150580,150589,150600,150604,150608,150620,150628,150638,150642,150646,150659,150667,150678,150682,150686,150694,150704,150708,150713],{"__ignoreMap":174},[254,150573,150574,150576,150578],{"class":256,"line":257},[254,150575,14835],{"class":260},[254,150577,150467],{"class":2103},[254,150579,3879],{"class":264},[254,150581,150582,150584,150587],{"class":256,"line":175},[254,150583,30942],{"class":260},[254,150585,150586],{"class":2103}," speak",[254,150588,30948],{"class":264},[254,150590,150591,150593,150595,150598],{"class":256,"line":1319},[254,150592,32592],{"class":313},[254,150594,265],{"class":264},[254,150596,150597],{"class":369},"\"动物叫\"",[254,150599,271],{"class":264},[254,150601,150602],{"class":256,"line":1334},[254,150603,2540],{"emptyLinePlaceholder":184},[254,150605,150606],{"class":256,"line":1340},[254,150607,2540],{"emptyLinePlaceholder":184},[254,150609,150610,150612,150614,150616,150618],{"class":256,"line":1354},[254,150611,14835],{"class":260},[254,150613,150504],{"class":2103},[254,150615,265],{"class":264},[254,150617,150509],{"class":2103},[254,150619,30927],{"class":264},[254,150621,150622,150624,150626],{"class":256,"line":1360},[254,150623,30942],{"class":260},[254,150625,150586],{"class":2103},[254,150627,30948],{"class":264},[254,150629,150630,150632,150634,150636],{"class":256,"line":1451},[254,150631,32592],{"class":313},[254,150633,265],{"class":264},[254,150635,150529],{"class":369},[254,150637,271],{"class":264},[254,150639,150640],{"class":256,"line":1457},[254,150641,2540],{"emptyLinePlaceholder":184},[254,150643,150644],{"class":256,"line":1469},[254,150645,2540],{"emptyLinePlaceholder":184},[254,150647,150648,150650,150653,150655,150657],{"class":256,"line":1752},[254,150649,14835],{"class":260},[254,150651,150652],{"class":2103}," Cat",[254,150654,265],{"class":264},[254,150656,150509],{"class":2103},[254,150658,30927],{"class":264},[254,150660,150661,150663,150665],{"class":256,"line":1757},[254,150662,30942],{"class":260},[254,150664,150586],{"class":2103},[254,150666,30948],{"class":264},[254,150668,150669,150671,150673,150676],{"class":256,"line":1763},[254,150670,32592],{"class":313},[254,150672,265],{"class":264},[254,150674,150675],{"class":369},"\"喵喵\"",[254,150677,271],{"class":264},[254,150679,150680],{"class":256,"line":1768},[254,150681,2540],{"emptyLinePlaceholder":184},[254,150683,150684],{"class":256,"line":1782},[254,150685,2540],{"emptyLinePlaceholder":184},[254,150687,150688,150690,150692],{"class":256,"line":1787},[254,150689,150544],{"class":264},[254,150691,310],{"class":260},[254,150693,150549],{"class":264},[254,150695,150696,150699,150701],{"class":256,"line":1793},[254,150697,150698],{"class":264},"cat ",[254,150700,310],{"class":260},[254,150702,150703],{"class":264}," Cat()\n",[254,150705,150706],{"class":256,"line":1814},[254,150707,2540],{"emptyLinePlaceholder":184},[254,150709,150710],{"class":256,"line":1819},[254,150711,150712],{"class":264},"dog.speak()\n",[254,150714,150715],{"class":256,"line":1833},[254,150716,150717],{"class":264},"cat.speak()\n",[34,150719,150721],{"id":150720},"_1110-super","11.10 super",[14,150723,150724,150725,150728],{},"子类可以通过 ",[251,150726,150727],{},"super()"," 调用父类方法。",[245,150730,150732],{"className":30519,"code":150731,"language":30521,"meta":174,"style":174},"class Person:\n    def __init__(self, name):\n        self.name = name\n\n\nclass Student(Person):\n    def __init__(self, name, score):\n        super().__init__(name)\n        self.score = score\n\n\nstudent = Student(\"小明\", 95)\nprint(student.name, student.score)\n",[251,150733,150734,150742,150751,150761,150765,150769,150781,150790,150801,150811,150815,150819,150835],{"__ignoreMap":174},[254,150735,150736,150738,150740],{"class":256,"line":257},[254,150737,14835],{"class":260},[254,150739,15710],{"class":2103},[254,150741,3879],{"class":264},[254,150743,150744,150746,150748],{"class":256,"line":175},[254,150745,30942],{"class":260},[254,150747,30945],{"class":313},[254,150749,150750],{"class":264},"(self, name):\n",[254,150752,150753,150755,150757,150759],{"class":256,"line":1319},[254,150754,30986],{"class":313},[254,150756,149930],{"class":264},[254,150758,310],{"class":260},[254,150760,149935],{"class":264},[254,150762,150763],{"class":256,"line":1334},[254,150764,2540],{"emptyLinePlaceholder":184},[254,150766,150767],{"class":256,"line":1340},[254,150768,2540],{"emptyLinePlaceholder":184},[254,150770,150771,150773,150775,150777,150779],{"class":256,"line":1354},[254,150772,14835],{"class":260},[254,150774,8039],{"class":2103},[254,150776,265],{"class":264},[254,150778,19187],{"class":2103},[254,150780,30927],{"class":264},[254,150782,150783,150785,150787],{"class":256,"line":1360},[254,150784,30942],{"class":260},[254,150786,30945],{"class":313},[254,150788,150789],{"class":264},"(self, name, score):\n",[254,150791,150792,150794,150796,150798],{"class":256,"line":1451},[254,150793,30958],{"class":313},[254,150795,17402],{"class":264},[254,150797,30970],{"class":313},[254,150799,150800],{"class":264},"(name)\n",[254,150802,150803,150805,150807,150809],{"class":256,"line":1457},[254,150804,30986],{"class":313},[254,150806,149954],{"class":264},[254,150808,310],{"class":260},[254,150810,1719],{"class":264},[254,150812,150813],{"class":256,"line":1469},[254,150814,2540],{"emptyLinePlaceholder":184},[254,150816,150817],{"class":256,"line":1752},[254,150818,2540],{"emptyLinePlaceholder":184},[254,150820,150821,150823,150825,150827,150829,150831,150833],{"class":256,"line":1757},[254,150822,149621],{"class":264},[254,150824,310],{"class":260},[254,150826,150025],{"class":264},[254,150828,150028],{"class":369},[254,150830,12576],{"class":264},[254,150832,1253],{"class":313},[254,150834,271],{"class":264},[254,150836,150837,150839],{"class":256,"line":1763},[254,150838,30556],{"class":313},[254,150840,150841],{"class":264},"(student.name, student.score)\n",[34,150843,150845],{"id":150844},"_1111-多态","11.11 多态",[14,150847,150848],{},"多态指不同对象响应同一个方法，表现出不同结果。",[245,150850,150852],{"className":30519,"code":150851,"language":30521,"meta":174,"style":174},"class Dog:\n    def speak(self):\n        print(\"汪汪\")\n\n\nclass Cat:\n    def speak(self):\n        print(\"喵喵\")\n\n\ndef make_sound(animal):\n    animal.speak()\n\n\nmake_sound(Dog())\nmake_sound(Cat())\n",[251,150853,150854,150862,150870,150880,150884,150888,150896,150904,150914,150918,150922,150932,150937,150941,150945,150950],{"__ignoreMap":174},[254,150855,150856,150858,150860],{"class":256,"line":257},[254,150857,14835],{"class":260},[254,150859,150504],{"class":2103},[254,150861,3879],{"class":264},[254,150863,150864,150866,150868],{"class":256,"line":175},[254,150865,30942],{"class":260},[254,150867,150586],{"class":2103},[254,150869,30948],{"class":264},[254,150871,150872,150874,150876,150878],{"class":256,"line":1319},[254,150873,32592],{"class":313},[254,150875,265],{"class":264},[254,150877,150529],{"class":369},[254,150879,271],{"class":264},[254,150881,150882],{"class":256,"line":1334},[254,150883,2540],{"emptyLinePlaceholder":184},[254,150885,150886],{"class":256,"line":1340},[254,150887,2540],{"emptyLinePlaceholder":184},[254,150889,150890,150892,150894],{"class":256,"line":1354},[254,150891,14835],{"class":260},[254,150893,150652],{"class":2103},[254,150895,3879],{"class":264},[254,150897,150898,150900,150902],{"class":256,"line":1360},[254,150899,30942],{"class":260},[254,150901,150586],{"class":2103},[254,150903,30948],{"class":264},[254,150905,150906,150908,150910,150912],{"class":256,"line":1451},[254,150907,32592],{"class":313},[254,150909,265],{"class":264},[254,150911,150675],{"class":369},[254,150913,271],{"class":264},[254,150915,150916],{"class":256,"line":1457},[254,150917,2540],{"emptyLinePlaceholder":184},[254,150919,150920],{"class":256,"line":1469},[254,150921,2540],{"emptyLinePlaceholder":184},[254,150923,150924,150926,150929],{"class":256,"line":1752},[254,150925,32088],{"class":260},[254,150927,150928],{"class":2103}," make_sound",[254,150930,150931],{"class":264},"(animal):\n",[254,150933,150934],{"class":256,"line":1757},[254,150935,150936],{"class":264},"    animal.speak()\n",[254,150938,150939],{"class":256,"line":1763},[254,150940,2540],{"emptyLinePlaceholder":184},[254,150942,150943],{"class":256,"line":1768},[254,150944,2540],{"emptyLinePlaceholder":184},[254,150946,150947],{"class":256,"line":1782},[254,150948,150949],{"class":264},"make_sound(Dog())\n",[254,150951,150952],{"class":256,"line":1787},[254,150953,150954],{"class":264},"make_sound(Cat())\n",[14,150956,150957],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[34,150959,150961],{"id":150960},"_1112-类属性和实例属性","11.12 类属性和实例属性",[14,150963,150964],{},"实例属性属于对象：",[245,150966,150968],{"className":30519,"code":150967,"language":30521,"meta":174,"style":174},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[251,150969,150970,150978,150986],{"__ignoreMap":174},[254,150971,150972,150974,150976],{"class":256,"line":257},[254,150973,14835],{"class":260},[254,150975,8039],{"class":2103},[254,150977,3879],{"class":264},[254,150979,150980,150982,150984],{"class":256,"line":175},[254,150981,30942],{"class":260},[254,150983,30945],{"class":313},[254,150985,150750],{"class":264},[254,150987,150988,150990,150992,150994],{"class":256,"line":1319},[254,150989,30986],{"class":313},[254,150991,149930],{"class":264},[254,150993,310],{"class":260},[254,150995,149935],{"class":264},[14,150997,150998],{},"类属性属于类，所有对象共享：",[245,151000,151002],{"className":30519,"code":151001,"language":30521,"meta":174,"style":174},"class Student:\n    school = \"黑马学校\"\n\n    def __init__(self, name):\n        self.name = name\n\n\ns1 = Student(\"小明\")\ns2 = Student(\"小红\")\n\nprint(s1.school)\nprint(s2.school)\nprint(Student.school)\n",[251,151003,151004,151012,151022,151026,151034,151044,151048,151052,151065,151079,151083,151090,151097],{"__ignoreMap":174},[254,151005,151006,151008,151010],{"class":256,"line":257},[254,151007,14835],{"class":260},[254,151009,8039],{"class":2103},[254,151011,3879],{"class":264},[254,151013,151014,151017,151019],{"class":256,"line":175},[254,151015,151016],{"class":264},"    school ",[254,151018,310],{"class":260},[254,151020,151021],{"class":369}," \"黑马学校\"\n",[254,151023,151024],{"class":256,"line":1319},[254,151025,2540],{"emptyLinePlaceholder":184},[254,151027,151028,151030,151032],{"class":256,"line":1334},[254,151029,30942],{"class":260},[254,151031,30945],{"class":313},[254,151033,150750],{"class":264},[254,151035,151036,151038,151040,151042],{"class":256,"line":1340},[254,151037,30986],{"class":313},[254,151039,149930],{"class":264},[254,151041,310],{"class":260},[254,151043,149935],{"class":264},[254,151045,151046],{"class":256,"line":1354},[254,151047,2540],{"emptyLinePlaceholder":184},[254,151049,151050],{"class":256,"line":1360},[254,151051,2540],{"emptyLinePlaceholder":184},[254,151053,151054,151057,151059,151061,151063],{"class":256,"line":1451},[254,151055,151056],{"class":264},"s1 ",[254,151058,310],{"class":260},[254,151060,150025],{"class":264},[254,151062,150028],{"class":369},[254,151064,271],{"class":264},[254,151066,151067,151070,151072,151074,151077],{"class":256,"line":1457},[254,151068,151069],{"class":264},"s2 ",[254,151071,310],{"class":260},[254,151073,150025],{"class":264},[254,151075,151076],{"class":369},"\"小红\"",[254,151078,271],{"class":264},[254,151080,151081],{"class":256,"line":1469},[254,151082,2540],{"emptyLinePlaceholder":184},[254,151084,151085,151087],{"class":256,"line":1752},[254,151086,30556],{"class":313},[254,151088,151089],{"class":264},"(s1.school)\n",[254,151091,151092,151094],{"class":256,"line":1757},[254,151093,30556],{"class":313},[254,151095,151096],{"class":264},"(s2.school)\n",[254,151098,151099,151101],{"class":256,"line":1763},[254,151100,30556],{"class":313},[254,151102,151103],{"class":264},"(Student.school)\n",[14,151105,151106],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[34,151108,151110],{"id":151109},"_1113-类方法和静态方法","11.13 类方法和静态方法",[225,151112,151114],{"id":151113},"_11131-类方法","11.13.1 类方法",[14,151116,151117,151118,151121,151122,28526],{},"类方法使用 ",[251,151119,151120],{},"@classmethod","，第一个参数通常是 ",[251,151123,151124],{},"cls",[245,151126,151128],{"className":30519,"code":151127,"language":30521,"meta":174,"style":174},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[251,151129,151130,151138,151146,151150,151158,151168,151178,151182,151186],{"__ignoreMap":174},[254,151131,151132,151134,151136],{"class":256,"line":257},[254,151133,14835],{"class":260},[254,151135,8039],{"class":2103},[254,151137,3879],{"class":264},[254,151139,151140,151142,151144],{"class":256,"line":175},[254,151141,151016],{"class":264},[254,151143,310],{"class":260},[254,151145,151021],{"class":369},[254,151147,151148],{"class":256,"line":1319},[254,151149,2540],{"emptyLinePlaceholder":184},[254,151151,151152,151155],{"class":256,"line":1334},[254,151153,151154],{"class":2103},"    @",[254,151156,151157],{"class":313},"classmethod\n",[254,151159,151160,151162,151165],{"class":256,"line":1340},[254,151161,30942],{"class":260},[254,151163,151164],{"class":2103}," get_school",[254,151166,151167],{"class":264},"(cls):\n",[254,151169,151170,151172,151175],{"class":256,"line":1354},[254,151171,14893],{"class":260},[254,151173,151174],{"class":313}," cls",[254,151176,151177],{"class":264},".school\n",[254,151179,151180],{"class":256,"line":1360},[254,151181,2540],{"emptyLinePlaceholder":184},[254,151183,151184],{"class":256,"line":1451},[254,151185,2540],{"emptyLinePlaceholder":184},[254,151187,151188,151190],{"class":256,"line":1457},[254,151189,30556],{"class":313},[254,151191,151192],{"class":264},"(Student.get_school())\n",[225,151194,151196],{"id":151195},"_11132-静态方法","11.13.2 静态方法",[14,151198,151199,151200,151203],{},"静态方法使用 ",[251,151201,151202],{},"@staticmethod","，不需要访问实例和类。",[245,151205,151207],{"className":30519,"code":151206,"language":30521,"meta":174,"style":174},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[251,151208,151209,151218,151225,151234,151245,151249,151253],{"__ignoreMap":174},[254,151210,151211,151213,151216],{"class":256,"line":257},[254,151212,14835],{"class":260},[254,151214,151215],{"class":2103}," MathUtils",[254,151217,3879],{"class":264},[254,151219,151220,151222],{"class":256,"line":175},[254,151221,151154],{"class":2103},[254,151223,151224],{"class":313},"staticmethod\n",[254,151226,151227,151229,151231],{"class":256,"line":1319},[254,151228,30942],{"class":260},[254,151230,5350],{"class":2103},[254,151232,151233],{"class":264},"(a, b):\n",[254,151235,151236,151238,151240,151242],{"class":256,"line":1334},[254,151237,14893],{"class":260},[254,151239,11010],{"class":264},[254,151241,745],{"class":260},[254,151243,151244],{"class":264}," b\n",[254,151246,151247],{"class":256,"line":1340},[254,151248,2540],{"emptyLinePlaceholder":184},[254,151250,151251],{"class":256,"line":1354},[254,151252,2540],{"emptyLinePlaceholder":184},[254,151254,151255,151257,151260,151262,151264,151266],{"class":256,"line":1360},[254,151256,30556],{"class":313},[254,151258,151259],{"class":264},"(MathUtils.add(",[254,151261,482],{"class":313},[254,151263,12576],{"class":264},[254,151265,342],{"class":313},[254,151267,30638],{"class":264},[14,151269,151270],{},"静态方法本质上是放在类命名空间里的普通函数。",[34,151272,151274],{"id":151273},"_1114-dataclass","11.14 dataclass",[14,151276,151277,151280],{},[251,151278,151279],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[245,151282,151284],{"className":30519,"code":151283,"language":30521,"meta":174,"style":174},"from dataclasses import dataclass\n\n\n@dataclass\nclass Student:\n    name: str\n    age: int\n    score: float\n\n\nstudent = Student(\"小明\", 18, 95)\nprint(student)\n",[251,151285,151286,151298,151302,151306,151311,151319,151327,151335,151343,151347,151351,151371],{"__ignoreMap":174},[254,151287,151288,151290,151293,151295],{"class":256,"line":257},[254,151289,30878],{"class":260},[254,151291,151292],{"class":264}," dataclasses ",[254,151294,30533],{"class":260},[254,151296,151297],{"class":264}," dataclass\n",[254,151299,151300],{"class":256,"line":175},[254,151301,2540],{"emptyLinePlaceholder":184},[254,151303,151304],{"class":256,"line":1319},[254,151305,2540],{"emptyLinePlaceholder":184},[254,151307,151308],{"class":256,"line":1334},[254,151309,151310],{"class":2103},"@dataclass\n",[254,151312,151313,151315,151317],{"class":256,"line":1340},[254,151314,14835],{"class":260},[254,151316,8039],{"class":2103},[254,151318,3879],{"class":264},[254,151320,151321,151324],{"class":256,"line":1354},[254,151322,151323],{"class":264},"    name: ",[254,151325,151326],{"class":313},"str\n",[254,151328,151329,151332],{"class":256,"line":1360},[254,151330,151331],{"class":264},"    age: ",[254,151333,151334],{"class":313},"int\n",[254,151336,151337,151340],{"class":256,"line":1451},[254,151338,151339],{"class":264},"    score: ",[254,151341,151342],{"class":313},"float\n",[254,151344,151345],{"class":256,"line":1457},[254,151346,2540],{"emptyLinePlaceholder":184},[254,151348,151349],{"class":256,"line":1469},[254,151350,2540],{"emptyLinePlaceholder":184},[254,151352,151353,151355,151357,151359,151361,151363,151365,151367,151369],{"class":256,"line":1752},[254,151354,149621],{"class":264},[254,151356,310],{"class":260},[254,151358,150025],{"class":264},[254,151360,150028],{"class":369},[254,151362,12576],{"class":264},[254,151364,914],{"class":313},[254,151366,12576],{"class":264},[254,151368,1253],{"class":313},[254,151370,271],{"class":264},[254,151372,151373,151375],{"class":256,"line":1757},[254,151374,30556],{"class":313},[254,151376,150182],{"class":264},[14,151378,151379,151380,477,151382,151385],{},"它会自动生成 ",[251,151381,30970],{},[251,151383,151384],{},"__repr__"," 等方法。适合数据模型类。",[34,151387,151389],{"id":151388},"_1115-小案例学生类","11.15 小案例：学生类",[245,151391,151393],{"className":30519,"code":151392,"language":30521,"meta":174,"style":174},"class Student:\n    def __init__(self, student_id, name, age, score):\n        self.student_id = student_id\n        self.name = name\n        self.age = age\n        self.score = score\n\n    def is_passed(self):\n        return self.score >= 60\n\n    def to_dict(self):\n        return {\n            \"student_id\": self.student_id,\n            \"name\": self.name,\n            \"age\": self.age,\n            \"score\": self.score,\n        }\n\n    @classmethod\n    def from_dict(cls, data):\n        return cls(\n            data[\"student_id\"],\n            data[\"name\"],\n            data[\"age\"],\n            data[\"score\"],\n        )\n\n    def __str__(self):\n        return f\"{self.student_id} {self.name} {self.age} {self.score}\"\n\n\nstudent = Student(\"001\", \"小明\", 18, 95)\nprint(student.is_passed())\nprint(student.to_dict())\n",[251,151394,151395,151403,151412,151424,151434,151444,151454,151458,151467,151480,151484,151493,151499,151511,151523,151535,151547,151551,151555,151561,151571,151580,151590,151598,151606,151615,151619,151623,151631,151667,151671,151675,151700,151707],{"__ignoreMap":174},[254,151396,151397,151399,151401],{"class":256,"line":257},[254,151398,14835],{"class":260},[254,151400,8039],{"class":2103},[254,151402,3879],{"class":264},[254,151404,151405,151407,151409],{"class":256,"line":175},[254,151406,30942],{"class":260},[254,151408,30945],{"class":313},[254,151410,151411],{"class":264},"(self, student_id, name, age, score):\n",[254,151413,151414,151416,151419,151421],{"class":256,"line":1319},[254,151415,30986],{"class":313},[254,151417,151418],{"class":264},".student_id ",[254,151420,310],{"class":260},[254,151422,151423],{"class":264}," student_id\n",[254,151425,151426,151428,151430,151432],{"class":256,"line":1334},[254,151427,30986],{"class":313},[254,151429,149930],{"class":264},[254,151431,310],{"class":260},[254,151433,149935],{"class":264},[254,151435,151436,151438,151440,151442],{"class":256,"line":1340},[254,151437,30986],{"class":313},[254,151439,149942],{"class":264},[254,151441,310],{"class":260},[254,151443,149947],{"class":264},[254,151445,151446,151448,151450,151452],{"class":256,"line":1354},[254,151447,30986],{"class":313},[254,151449,149954],{"class":264},[254,151451,310],{"class":260},[254,151453,1719],{"class":264},[254,151455,151456],{"class":256,"line":1360},[254,151457,2540],{"emptyLinePlaceholder":184},[254,151459,151460,151462,151465],{"class":256,"line":1451},[254,151461,30942],{"class":260},[254,151463,151464],{"class":2103}," is_passed",[254,151466,30948],{"class":264},[254,151468,151469,151471,151473,151475,151477],{"class":256,"line":1457},[254,151470,14893],{"class":260},[254,151472,39014],{"class":313},[254,151474,149954],{"class":264},[254,151476,1850],{"class":260},[254,151478,151479],{"class":313}," 60\n",[254,151481,151482],{"class":256,"line":1469},[254,151483,2540],{"emptyLinePlaceholder":184},[254,151485,151486,151488,151491],{"class":256,"line":1752},[254,151487,30942],{"class":260},[254,151489,151490],{"class":2103}," to_dict",[254,151492,30948],{"class":264},[254,151494,151495,151497],{"class":256,"line":1757},[254,151496,14893],{"class":260},[254,151498,15713],{"class":264},[254,151500,151501,151504,151506,151508],{"class":256,"line":1763},[254,151502,151503],{"class":369},"            \"student_id\"",[254,151505,51578],{"class":264},[254,151507,30964],{"class":313},[254,151509,151510],{"class":264},".student_id,\n",[254,151512,151513,151516,151518,151520],{"class":256,"line":1768},[254,151514,151515],{"class":369},"            \"name\"",[254,151517,51578],{"class":264},[254,151519,30964],{"class":313},[254,151521,151522],{"class":264},".name,\n",[254,151524,151525,151528,151530,151532],{"class":256,"line":1782},[254,151526,151527],{"class":369},"            \"age\"",[254,151529,51578],{"class":264},[254,151531,30964],{"class":313},[254,151533,151534],{"class":264},".age,\n",[254,151536,151537,151540,151542,151544],{"class":256,"line":1787},[254,151538,151539],{"class":369},"            \"score\"",[254,151541,51578],{"class":264},[254,151543,30964],{"class":313},[254,151545,151546],{"class":264},".score,\n",[254,151548,151549],{"class":256,"line":1793},[254,151550,2669],{"class":264},[254,151552,151553],{"class":256,"line":1814},[254,151554,2540],{"emptyLinePlaceholder":184},[254,151556,151557,151559],{"class":256,"line":1819},[254,151558,151154],{"class":2103},[254,151560,151157],{"class":313},[254,151562,151563,151565,151568],{"class":256,"line":1833},[254,151564,30942],{"class":260},[254,151566,151567],{"class":2103}," from_dict",[254,151569,151570],{"class":264},"(cls, data):\n",[254,151572,151573,151575,151577],{"class":256,"line":1838},[254,151574,14893],{"class":260},[254,151576,151174],{"class":313},[254,151578,151579],{"class":264},"(\n",[254,151581,151582,151585,151588],{"class":256,"line":1867},[254,151583,151584],{"class":264},"            data[",[254,151586,151587],{"class":369},"\"student_id\"",[254,151589,87977],{"class":264},[254,151591,151592,151594,151596],{"class":256,"line":1872},[254,151593,151584],{"class":264},[254,151595,62820],{"class":369},[254,151597,87977],{"class":264},[254,151599,151600,151602,151604],{"class":256,"line":1889},[254,151601,151584],{"class":264},[254,151603,69265],{"class":369},[254,151605,87977],{"class":264},[254,151607,151608,151610,151613],{"class":256,"line":1894},[254,151609,151584],{"class":264},[254,151611,151612],{"class":369},"\"score\"",[254,151614,87977],{"class":264},[254,151616,151617],{"class":256,"line":1899},[254,151618,38267],{"class":264},[254,151620,151621],{"class":256,"line":1904},[254,151622,2540],{"emptyLinePlaceholder":184},[254,151624,151625,151627,151629],{"class":256,"line":1918},[254,151626,30942],{"class":260},[254,151628,150121],{"class":313},[254,151630,30948],{"class":264},[254,151632,151633,151635,151637,151639,151641,151644,151646,151649,151651,151653,151655,151657,151659,151661,151663,151665],{"class":256,"line":1923},[254,151634,14893],{"class":260},[254,151636,150130],{"class":260},[254,151638,515],{"class":369},[254,151640,149592],{"class":313},[254,151642,151643],{"class":264},".student_id",[254,151645,1210],{"class":313},[254,151647,151648],{"class":313}," {self",[254,151650,80442],{"class":264},[254,151652,1210],{"class":313},[254,151654,151648],{"class":313},[254,151656,80454],{"class":264},[254,151658,1210],{"class":313},[254,151660,151648],{"class":313},[254,151662,150002],{"class":264},[254,151664,1210],{"class":313},[254,151666,25274],{"class":369},[254,151668,151669],{"class":256,"line":2717},[254,151670,2540],{"emptyLinePlaceholder":184},[254,151672,151673],{"class":256,"line":2731},[254,151674,2540],{"emptyLinePlaceholder":184},[254,151676,151677,151679,151681,151683,151686,151688,151690,151692,151694,151696,151698],{"class":256,"line":2739},[254,151678,149621],{"class":264},[254,151680,310],{"class":260},[254,151682,150025],{"class":264},[254,151684,151685],{"class":369},"\"001\"",[254,151687,12576],{"class":264},[254,151689,150028],{"class":369},[254,151691,12576],{"class":264},[254,151693,914],{"class":313},[254,151695,12576],{"class":264},[254,151697,1253],{"class":313},[254,151699,271],{"class":264},[254,151701,151702,151704],{"class":256,"line":2744},[254,151703,30556],{"class":313},[254,151705,151706],{"class":264},"(student.is_passed())\n",[254,151708,151709,151711],{"class":256,"line":2750},[254,151710,30556],{"class":313},[254,151712,151713],{"class":264},"(student.to_dict())\n",[14,151715,151716,101159,151719,151722],{},[251,151717,151718],{},"to_dict()",[251,151720,151721],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[34,151724,151726],{"id":151725},"_1116-易错点","11.16 易错点",[21,151728,151729,151735,151741,151746,151749,151752],{},[24,151730,151731,151732,28526],{},"类名推荐使用大驼峰，如 ",[251,151733,151734],{},"StudentManager",[24,151736,151737,151738,151740],{},"方法第一个参数必须写 ",[251,151739,30964],{},"，调用时不用传。",[24,151742,151743,151745],{},[251,151744,30970],{}," 不是普通方法，它在创建对象时自动执行。",[24,151747,151748],{},"私有属性不是绝对安全，只是约定和名称改写。",[24,151750,151751],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[24,151753,151754],{},"类中方法太多时，说明职责可能过重。",[34,151756,151758],{"id":151757},"_1117-本章练习","11.17 本章练习",[21,151760,151761,151767,151773,151778,151791],{},[24,151762,151763,151764,151766],{},"定义 ",[251,151765,149708],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[24,151768,151763,151769,151772],{},[251,151770,151771],{},"Account"," 类，实现存款、取款、查询余额。",[24,151774,151763,151775,151777],{},[251,151776,17367],{}," 类，计算圆的周长和面积。",[24,151779,151763,151780,477,151783,151786,151787,151790],{},[251,151781,151782],{},"Dog",[251,151784,151785],{},"Cat"," 类，并用同一个函数调用它们的 ",[251,151788,151789],{},"speak()"," 方法。",[24,151792,104507,151793,151795,151796,28526],{},[251,151794,151279],{}," 定义一个商品类 ",[251,151797,151798],{},"Product",[5267,151800,151801],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":174,"searchDepth":175,"depth":175,"links":151803},[151804,151805,151806,151807,151808,151809,151811,151812,151813,151814,151815,151816,151817,151821,151822,151823,151824],{"id":149472,"depth":175,"text":149473},{"id":149655,"depth":175,"text":149656},{"id":149719,"depth":175,"text":149720},{"id":149796,"depth":175,"text":149797},{"id":149895,"depth":175,"text":149896},{"id":150059,"depth":175,"text":151810},"11.6 str",{"id":150185,"depth":175,"text":150186},{"id":150451,"depth":175,"text":150452},{"id":150565,"depth":175,"text":150566},{"id":150720,"depth":175,"text":150721},{"id":150844,"depth":175,"text":150845},{"id":150960,"depth":175,"text":150961},{"id":151109,"depth":175,"text":151110,"children":151818},[151819,151820],{"id":151113,"depth":1319,"text":151114},{"id":151195,"depth":1319,"text":151196},{"id":151273,"depth":175,"text":151274},{"id":151388,"depth":175,"text":151389},{"id":151725,"depth":175,"text":151726},{"id":151757,"depth":175,"text":151758},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149464,"description":23518},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":151831,"title":151832,"body":151833,"description":23518,"extension":181,"meta":155146,"navigation":184,"path":155147,"seo":155148,"stem":155149,"__hash__":155150},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":151834,"toc":155122},[151835,151838,151842,151845,151848,151877,151880,151888,151892,151896,151899,151922,151925,151931,151935,153381,153384,153405,153409,153412,153424,153427,153611,153614,153740,153743,153747,153751,153887,153891,153977,153981,154063,154067,154104,154108,154297,154301,154304,154534,154538,154541,154722,154725,154729,154732,154738,154741,154767,154771,154774,154788,154791,154816,154819,154833,154836,154853,154856,154873,154876,154893,154897,154923,154927,154950,154954,154957,154959,154965,154967,154988,154991,154997,155003,155007,155010,155086,155089,155093,155119],[10,151836,151832],{"id":151837},"_12-综合案例与复习路线",[34,151839,151841],{"id":151840},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[14,151843,151844],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[14,151846,151847],{},"一个合格的入门综合项目最好覆盖：",[21,151849,151850,151853,151856,151859,151862,151865,151868,151871,151874],{},[24,151851,151852],{},"输入输出。",[24,151854,151855],{},"判断和循环。",[24,151857,151858],{},"函数拆分。",[24,151860,151861],{},"列表、字典等容器。",[24,151863,151864],{},"文件持久化。",[24,151866,151867],{},"异常处理。",[24,151869,151870],{},"模块拆分。",[24,151872,151873],{},"可选：面向对象。",[24,151875,151876],{},"可选：数据可视化。",[14,151878,151879],{},"本章整理两个方向：",[21,151881,151882,151885],{},[24,151883,151884],{},"学生管理系统。",[24,151886,151887],{},"销售数据统计和可视化。",[34,151889,151891],{"id":151890},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[225,151893,151895],{"id":151894},"_1221-需求","12.2.1 需求",[14,151897,151898],{},"实现一个命令行学生管理系统：",[21,151900,151901,151904,151907,151910,151913,151916,151919],{},[24,151902,151903],{},"添加学生。",[24,151905,151906],{},"删除学生。",[24,151908,151909],{},"修改学生。",[24,151911,151912],{},"查询学生。",[24,151914,151915],{},"显示所有学生。",[24,151917,151918],{},"保存到 JSON 文件。",[24,151920,151921],{},"程序启动时自动读取 JSON 文件。",[14,151923,151924],{},"学生字段：",[245,151926,151929],{"className":151927,"code":151928,"language":5328,"meta":174},[5326],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[251,151930,151928],{"__ignoreMap":174},[34,151932,151934],{"id":151933},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[245,151936,151938],{"className":30519,"code":151937,"language":30521,"meta":174,"style":174},"import json\nfrom pathlib import Path\n\nDATA_FILE = Path(\"students.json\")\n\n\ndef load_students():\n    if not DATA_FILE.exists():\n        return []\n\n    try:\n        with open(DATA_FILE, \"r\", encoding=\"utf-8\") as file:\n            return json.load(file)\n    except json.JSONDecodeError:\n        print(\"数据文件格式错误，已使用空数据启动\")\n        return []\n\n\ndef save_students(students):\n    with open(DATA_FILE, \"w\", encoding=\"utf-8\") as file:\n        json.dump(students, file, ensure_ascii=False, indent=2)\n\n\ndef show_menu():\n    print(\"====== 学生管理系统 ======\")\n    print(\"1. 添加学生\")\n    print(\"2. 删除学生\")\n    print(\"3. 修改学生\")\n    print(\"4. 查询学生\")\n    print(\"5. 显示所有学生\")\n    print(\"0. 退出系统\")\n\n\ndef find_student(students, student_id):\n    for student in students:\n        if student[\"student_id\"] == student_id:\n            return student\n    return None\n\n\ndef input_int(prompt):\n    while True:\n        try:\n            return int(input(prompt))\n        except ValueError:\n            print(\"请输入整数\")\n\n\ndef input_float(prompt):\n    while True:\n        try:\n            return float(input(prompt))\n        except ValueError:\n            print(\"请输入数字\")\n\n\ndef add_student(students):\n    student_id = input(\"请输入学号:\")\n\n    if find_student(students, student_id):\n        print(\"学号已存在\")\n        return\n\n    name = input(\"请输入姓名:\")\n    age = input_int(\"请输入年龄:\")\n    score = input_float(\"请输入成绩:\")\n\n    students.append({\n        \"student_id\": student_id,\n        \"name\": name,\n        \"age\": age,\n        \"score\": score,\n    })\n    save_students(students)\n    print(\"添加成功\")\n\n\ndef delete_student(students):\n    student_id = input(\"请输入要删除的学号:\")\n    student = find_student(students, student_id)\n\n    if student is None:\n        print(\"学生不存在\")\n        return\n\n    students.remove(student)\n    save_students(students)\n    print(\"删除成功\")\n\n\ndef update_student(students):\n    student_id = input(\"请输入要修改的学号:\")\n    student = find_student(students, student_id)\n\n    if student is None:\n        print(\"学生不存在\")\n        return\n\n    name = input(\"请输入新姓名:\")\n    age = input_int(\"请输入新年龄:\")\n    score = input_float(\"请输入新成绩:\")\n\n    student[\"name\"] = name\n    student[\"age\"] = age\n    student[\"score\"] = score\n\n    save_students(students)\n    print(\"修改成功\")\n\n\ndef query_student(students):\n    student_id = input(\"请输入要查询的学号:\")\n    student = find_student(students, student_id)\n\n    if student is None:\n        print(\"学生不存在\")\n        return\n\n    print_student(student)\n\n\ndef print_student(student):\n    print(\n        f\"{student['student_id']}\\t\"\n        f\"{student['name']}\\t\"\n        f\"{student['age']}\\t\"\n        f\"{student['score']}\"\n    )\n\n\ndef show_all_students(students):\n    if not students:\n        print(\"暂无学生\")\n        return\n\n    print(\"学号\\t姓名\\t年龄\\t成绩\")\n    for student in students:\n        print_student(student)\n\n\ndef main():\n    students = load_students()\n\n    while True:\n        show_menu()\n        choice = input(\"请输入操作:\")\n\n        if choice == \"1\":\n            add_student(students)\n        elif choice == \"2\":\n            delete_student(students)\n        elif choice == \"3\":\n            update_student(students)\n        elif choice == \"4\":\n            query_student(students)\n        elif choice == \"5\":\n            show_all_students(students)\n        elif choice == \"0\":\n            print(\"退出系统\")\n            break\n        else:\n            print(\"输入错误\")\n\n\nif __name__ == \"__main__\":\n    main()\n",[251,151939,151940,151946,151956,151960,151974,151978,151982,151991,152003,152009,152013,152019,152050,152060,152067,152078,152084,152088,152092,152102,152133,152159,152163,152167,152176,152187,152198,152209,152220,152231,152242,152253,152257,152261,152271,152283,152299,152306,152313,152317,152321,152331,152339,152346,152359,152369,152380,152384,152388,152397,152405,152411,152423,152431,152442,152446,152450,152459,152475,152479,152486,152497,152502,152506,152522,152537,152552,152556,152561,152569,152577,152585,152593,152597,152602,152613,152617,152621,152630,152645,152655,152659,152671,152682,152686,152690,152695,152699,152710,152714,152718,152727,152742,152750,152754,152766,152776,152780,152784,152799,152812,152825,152829,152842,152854,152866,152870,152874,152885,152889,152893,152902,152917,152925,152929,152941,152951,152955,152959,152964,152968,152972,152982,152988,153010,153029,153048,153067,153072,153076,153080,153089,153097,153108,153112,153116,153142,153152,153157,153161,153165,153173,153183,153187,153195,153200,153216,153220,153234,153239,153253,153258,153271,153276,153289,153294,153307,153312,153325,153336,153340,153346,153357,153361,153365,153377],{"__ignoreMap":174},[254,151941,151942,151944],{"class":256,"line":257},[254,151943,30533],{"class":260},[254,151945,147231],{"class":264},[254,151947,151948,151950,151952,151954],{"class":256,"line":175},[254,151949,30878],{"class":260},[254,151951,108452],{"class":264},[254,151953,30533],{"class":260},[254,151955,108457],{"class":264},[254,151957,151958],{"class":256,"line":1319},[254,151959,2540],{"emptyLinePlaceholder":184},[254,151961,151962,151965,151967,151969,151972],{"class":256,"line":1334},[254,151963,151964],{"class":313},"DATA_FILE",[254,151966,13705],{"class":260},[254,151968,108686],{"class":264},[254,151970,151971],{"class":369},"\"students.json\"",[254,151973,271],{"class":264},[254,151975,151976],{"class":256,"line":1340},[254,151977,2540],{"emptyLinePlaceholder":184},[254,151979,151980],{"class":256,"line":1354},[254,151981,2540],{"emptyLinePlaceholder":184},[254,151983,151984,151986,151989],{"class":256,"line":1360},[254,151985,32088],{"class":260},[254,151987,151988],{"class":2103}," load_students",[254,151990,32094],{"class":264},[254,151992,151993,151995,151997,152000],{"class":256,"line":1451},[254,151994,3241],{"class":260},[254,151996,39071],{"class":260},[254,151998,151999],{"class":313}," DATA_FILE",[254,152001,152002],{"class":264},".exists():\n",[254,152004,152005,152007],{"class":256,"line":1457},[254,152006,14893],{"class":260},[254,152008,51979],{"class":264},[254,152010,152011],{"class":256,"line":1469},[254,152012,2540],{"emptyLinePlaceholder":184},[254,152014,152015,152017],{"class":256,"line":1752},[254,152016,125924],{"class":260},[254,152018,3879],{"class":264},[254,152020,152021,152024,152026,152028,152030,152032,152034,152036,152038,152040,152042,152044,152046,152048],{"class":256,"line":1757},[254,152022,152023],{"class":260},"        with",[254,152025,146931],{"class":313},[254,152027,265],{"class":264},[254,152029,151964],{"class":313},[254,152031,12576],{"class":264},[254,152033,146941],{"class":369},[254,152035,12576],{"class":264},[254,152037,146946],{"class":5357},[254,152039,310],{"class":260},[254,152041,146951],{"class":369},[254,152043,13855],{"class":264},[254,152045,31524],{"class":260},[254,152047,148293],{"class":5357},[254,152049,3879],{"class":264},[254,152051,152052,152054,152056,152058],{"class":256,"line":1763},[254,152053,15873],{"class":260},[254,152055,148304],{"class":264},[254,152057,45495],{"class":5357},[254,152059,271],{"class":264},[254,152061,152062,152064],{"class":256,"line":1768},[254,152063,125952],{"class":260},[254,152065,152066],{"class":264}," json.JSONDecodeError:\n",[254,152068,152069,152071,152073,152076],{"class":256,"line":1782},[254,152070,32592],{"class":313},[254,152072,265],{"class":264},[254,152074,152075],{"class":369},"\"数据文件格式错误，已使用空数据启动\"",[254,152077,271],{"class":264},[254,152079,152080,152082],{"class":256,"line":1787},[254,152081,14893],{"class":260},[254,152083,51979],{"class":264},[254,152085,152086],{"class":256,"line":1793},[254,152087,2540],{"emptyLinePlaceholder":184},[254,152089,152090],{"class":256,"line":1814},[254,152091,2540],{"emptyLinePlaceholder":184},[254,152093,152094,152096,152099],{"class":256,"line":1819},[254,152095,32088],{"class":260},[254,152097,152098],{"class":2103}," save_students",[254,152100,152101],{"class":264},"(students):\n",[254,152103,152104,152106,152108,152110,152112,152114,152117,152119,152121,152123,152125,152127,152129,152131],{"class":256,"line":1833},[254,152105,34319],{"class":260},[254,152107,146931],{"class":313},[254,152109,265],{"class":264},[254,152111,151964],{"class":313},[254,152113,12576],{"class":264},[254,152115,152116],{"class":369},"\"w\"",[254,152118,12576],{"class":264},[254,152120,146946],{"class":5357},[254,152122,310],{"class":260},[254,152124,146951],{"class":369},[254,152126,13855],{"class":264},[254,152128,31524],{"class":260},[254,152130,148293],{"class":5357},[254,152132,3879],{"class":264},[254,152134,152135,152138,152140,152142,152144,152146,152148,152150,152153,152155,152157],{"class":256,"line":1838},[254,152136,152137],{"class":264},"        json.dump(students, ",[254,152139,45495],{"class":5357},[254,152141,12576],{"class":264},[254,152143,147277],{"class":5357},[254,152145,310],{"class":260},[254,152147,34128],{"class":313},[254,152149,12576],{"class":264},[254,152151,152152],{"class":5357},"indent",[254,152154,310],{"class":260},[254,152156,342],{"class":313},[254,152158,271],{"class":264},[254,152160,152161],{"class":256,"line":1867},[254,152162,2540],{"emptyLinePlaceholder":184},[254,152164,152165],{"class":256,"line":1872},[254,152166,2540],{"emptyLinePlaceholder":184},[254,152168,152169,152171,152174],{"class":256,"line":1889},[254,152170,32088],{"class":260},[254,152172,152173],{"class":2103}," show_menu",[254,152175,32094],{"class":264},[254,152177,152178,152180,152182,152185],{"class":256,"line":1894},[254,152179,31440],{"class":313},[254,152181,265],{"class":264},[254,152183,152184],{"class":369},"\"====== 学生管理系统 ======\"",[254,152186,271],{"class":264},[254,152188,152189,152191,152193,152196],{"class":256,"line":1899},[254,152190,31440],{"class":313},[254,152192,265],{"class":264},[254,152194,152195],{"class":369},"\"1. 添加学生\"",[254,152197,271],{"class":264},[254,152199,152200,152202,152204,152207],{"class":256,"line":1904},[254,152201,31440],{"class":313},[254,152203,265],{"class":264},[254,152205,152206],{"class":369},"\"2. 删除学生\"",[254,152208,271],{"class":264},[254,152210,152211,152213,152215,152218],{"class":256,"line":1918},[254,152212,31440],{"class":313},[254,152214,265],{"class":264},[254,152216,152217],{"class":369},"\"3. 修改学生\"",[254,152219,271],{"class":264},[254,152221,152222,152224,152226,152229],{"class":256,"line":1923},[254,152223,31440],{"class":313},[254,152225,265],{"class":264},[254,152227,152228],{"class":369},"\"4. 查询学生\"",[254,152230,271],{"class":264},[254,152232,152233,152235,152237,152240],{"class":256,"line":2717},[254,152234,31440],{"class":313},[254,152236,265],{"class":264},[254,152238,152239],{"class":369},"\"5. 显示所有学生\"",[254,152241,271],{"class":264},[254,152243,152244,152246,152248,152251],{"class":256,"line":2731},[254,152245,31440],{"class":313},[254,152247,265],{"class":264},[254,152249,152250],{"class":369},"\"0. 退出系统\"",[254,152252,271],{"class":264},[254,152254,152255],{"class":256,"line":2739},[254,152256,2540],{"emptyLinePlaceholder":184},[254,152258,152259],{"class":256,"line":2744},[254,152260,2540],{"emptyLinePlaceholder":184},[254,152262,152263,152265,152268],{"class":256,"line":2750},[254,152264,32088],{"class":260},[254,152266,152267],{"class":2103}," find_student",[254,152269,152270],{"class":264},"(students, student_id):\n",[254,152272,152273,152275,152278,152280],{"class":256,"line":2756},[254,152274,3341],{"class":260},[254,152276,152277],{"class":264}," student ",[254,152279,26184],{"class":260},[254,152281,152282],{"class":264}," students:\n",[254,152284,152285,152287,152290,152292,152294,152296],{"class":256,"line":2761},[254,152286,2637],{"class":260},[254,152288,152289],{"class":264}," student[",[254,152291,151587],{"class":369},[254,152293,4583],{"class":264},[254,152295,3089],{"class":260},[254,152297,152298],{"class":264}," student_id:\n",[254,152300,152301,152303],{"class":256,"line":8089},[254,152302,15873],{"class":260},[254,152304,152305],{"class":264}," student\n",[254,152307,152308,152310],{"class":256,"line":8113},[254,152309,4230],{"class":260},[254,152311,152312],{"class":313}," None\n",[254,152314,152315],{"class":256,"line":8118},[254,152316,2540],{"emptyLinePlaceholder":184},[254,152318,152319],{"class":256,"line":8124},[254,152320,2540],{"emptyLinePlaceholder":184},[254,152322,152323,152325,152328],{"class":256,"line":8151},[254,152324,32088],{"class":260},[254,152326,152327],{"class":2103}," input_int",[254,152329,152330],{"class":264},"(prompt):\n",[254,152332,152333,152335,152337],{"class":256,"line":8156},[254,152334,2391],{"class":260},[254,152336,95433],{"class":313},[254,152338,3879],{"class":264},[254,152340,152341,152344],{"class":256,"line":8162},[254,152342,152343],{"class":260},"        try",[254,152345,3879],{"class":264},[254,152347,152348,152350,152352,152354,152356],{"class":256,"line":8174},[254,152349,15873],{"class":260},[254,152351,2522],{"class":313},[254,152353,265],{"class":264},[254,152355,53962],{"class":313},[254,152357,152358],{"class":264},"(prompt))\n",[254,152360,152361,152364,152367],{"class":256,"line":8186},[254,152362,152363],{"class":260},"        except",[254,152365,152366],{"class":313}," ValueError",[254,152368,3879],{"class":264},[254,152370,152371,152373,152375,152378],{"class":256,"line":8198},[254,152372,34791],{"class":313},[254,152374,265],{"class":264},[254,152376,152377],{"class":369},"\"请输入整数\"",[254,152379,271],{"class":264},[254,152381,152382],{"class":256,"line":9857},[254,152383,2540],{"emptyLinePlaceholder":184},[254,152385,152386],{"class":256,"line":9882},[254,152387,2540],{"emptyLinePlaceholder":184},[254,152389,152390,152392,152395],{"class":256,"line":9905},[254,152391,32088],{"class":260},[254,152393,152394],{"class":2103}," input_float",[254,152396,152330],{"class":264},[254,152398,152399,152401,152403],{"class":256,"line":9929},[254,152400,2391],{"class":260},[254,152402,95433],{"class":313},[254,152404,3879],{"class":264},[254,152406,152407,152409],{"class":256,"line":9934},[254,152408,152343],{"class":260},[254,152410,3879],{"class":264},[254,152412,152413,152415,152417,152419,152421],{"class":256,"line":9939},[254,152414,15873],{"class":260},[254,152416,109938],{"class":313},[254,152418,265],{"class":264},[254,152420,53962],{"class":313},[254,152422,152358],{"class":264},[254,152424,152425,152427,152429],{"class":256,"line":9944},[254,152426,152363],{"class":260},[254,152428,152366],{"class":313},[254,152430,3879],{"class":264},[254,152432,152433,152435,152437,152440],{"class":256,"line":9953},[254,152434,34791],{"class":313},[254,152436,265],{"class":264},[254,152438,152439],{"class":369},"\"请输入数字\"",[254,152441,271],{"class":264},[254,152443,152444],{"class":256,"line":9958},[254,152445,2540],{"emptyLinePlaceholder":184},[254,152447,152448],{"class":256,"line":9964},[254,152449,2540],{"emptyLinePlaceholder":184},[254,152451,152452,152454,152457],{"class":256,"line":9985},[254,152453,32088],{"class":260},[254,152455,152456],{"class":2103}," add_student",[254,152458,152101],{"class":264},[254,152460,152461,152464,152466,152468,152470,152473],{"class":256,"line":9991},[254,152462,152463],{"class":264},"    student_id ",[254,152465,310],{"class":260},[254,152467,60746],{"class":313},[254,152469,265],{"class":264},[254,152471,152472],{"class":369},"\"请输入学号:\"",[254,152474,271],{"class":264},[254,152476,152477],{"class":256,"line":10005},[254,152478,2540],{"emptyLinePlaceholder":184},[254,152480,152481,152483],{"class":256,"line":10011},[254,152482,3241],{"class":260},[254,152484,152485],{"class":264}," find_student(students, student_id):\n",[254,152487,152488,152490,152492,152495],{"class":256,"line":10038},[254,152489,32592],{"class":313},[254,152491,265],{"class":264},[254,152493,152494],{"class":369},"\"学号已存在\"",[254,152496,271],{"class":264},[254,152498,152499],{"class":256,"line":10047},[254,152500,152501],{"class":260},"        return\n",[254,152503,152504],{"class":256,"line":10053},[254,152505,2540],{"emptyLinePlaceholder":184},[254,152507,152508,152511,152513,152515,152517,152520],{"class":256,"line":10061},[254,152509,152510],{"class":264},"    name ",[254,152512,310],{"class":260},[254,152514,60746],{"class":313},[254,152516,265],{"class":264},[254,152518,152519],{"class":369},"\"请输入姓名:\"",[254,152521,271],{"class":264},[254,152523,152524,152527,152529,152532,152535],{"class":256,"line":10066},[254,152525,152526],{"class":264},"    age ",[254,152528,310],{"class":260},[254,152530,152531],{"class":264}," input_int(",[254,152533,152534],{"class":369},"\"请输入年龄:\"",[254,152536,271],{"class":264},[254,152538,152539,152542,152544,152547,152550],{"class":256,"line":16745},[254,152540,152541],{"class":264},"    score ",[254,152543,310],{"class":260},[254,152545,152546],{"class":264}," input_float(",[254,152548,152549],{"class":369},"\"请输入成绩:\"",[254,152551,271],{"class":264},[254,152553,152554],{"class":256,"line":16751},[254,152555,2540],{"emptyLinePlaceholder":184},[254,152557,152558],{"class":256,"line":16774},[254,152559,152560],{"class":264},"    students.append({\n",[254,152562,152563,152566],{"class":256,"line":16780},[254,152564,152565],{"class":369},"        \"student_id\"",[254,152567,152568],{"class":264},": student_id,\n",[254,152570,152571,152574],{"class":256,"line":16803},[254,152572,152573],{"class":369},"        \"name\"",[254,152575,152576],{"class":264},": name,\n",[254,152578,152579,152582],{"class":256,"line":16817},[254,152580,152581],{"class":369},"        \"age\"",[254,152583,152584],{"class":264},": age,\n",[254,152586,152587,152590],{"class":256,"line":16837},[254,152588,152589],{"class":369},"        \"score\"",[254,152591,152592],{"class":264},": score,\n",[254,152594,152595],{"class":256,"line":16843},[254,152596,33602],{"class":264},[254,152598,152599],{"class":256,"line":16854},[254,152600,152601],{"class":264},"    save_students(students)\n",[254,152603,152604,152606,152608,152611],{"class":256,"line":16877},[254,152605,31440],{"class":313},[254,152607,265],{"class":264},[254,152609,152610],{"class":369},"\"添加成功\"",[254,152612,271],{"class":264},[254,152614,152615],{"class":256,"line":16899},[254,152616,2540],{"emptyLinePlaceholder":184},[254,152618,152619],{"class":256,"line":16904},[254,152620,2540],{"emptyLinePlaceholder":184},[254,152622,152623,152625,152628],{"class":256,"line":16910},[254,152624,32088],{"class":260},[254,152626,152627],{"class":2103}," delete_student",[254,152629,152101],{"class":264},[254,152631,152632,152634,152636,152638,152640,152643],{"class":256,"line":16924},[254,152633,152463],{"class":264},[254,152635,310],{"class":260},[254,152637,60746],{"class":313},[254,152639,265],{"class":264},[254,152641,152642],{"class":369},"\"请输入要删除的学号:\"",[254,152644,271],{"class":264},[254,152646,152647,152650,152652],{"class":256,"line":16937},[254,152648,152649],{"class":264},"    student ",[254,152651,310],{"class":260},[254,152653,152654],{"class":264}," find_student(students, student_id)\n",[254,152656,152657],{"class":256,"line":16942},[254,152658,2540],{"emptyLinePlaceholder":184},[254,152660,152661,152663,152665,152667,152669],{"class":256,"line":16956},[254,152662,3241],{"class":260},[254,152664,152277],{"class":264},[254,152666,39068],{"class":260},[254,152668,39074],{"class":313},[254,152670,3879],{"class":264},[254,152672,152673,152675,152677,152680],{"class":256,"line":16961},[254,152674,32592],{"class":313},[254,152676,265],{"class":264},[254,152678,152679],{"class":369},"\"学生不存在\"",[254,152681,271],{"class":264},[254,152683,152684],{"class":256,"line":16967},[254,152685,152501],{"class":260},[254,152687,152688],{"class":256,"line":16972},[254,152689,2540],{"emptyLinePlaceholder":184},[254,152691,152692],{"class":256,"line":16986},[254,152693,152694],{"class":264},"    students.remove(student)\n",[254,152696,152697],{"class":256,"line":16991},[254,152698,152601],{"class":264},[254,152700,152701,152703,152705,152708],{"class":256,"line":16996},[254,152702,31440],{"class":313},[254,152704,265],{"class":264},[254,152706,152707],{"class":369},"\"删除成功\"",[254,152709,271],{"class":264},[254,152711,152712],{"class":256,"line":17010},[254,152713,2540],{"emptyLinePlaceholder":184},[254,152715,152716],{"class":256,"line":17022},[254,152717,2540],{"emptyLinePlaceholder":184},[254,152719,152720,152722,152725],{"class":256,"line":17027},[254,152721,32088],{"class":260},[254,152723,152724],{"class":2103}," update_student",[254,152726,152101],{"class":264},[254,152728,152729,152731,152733,152735,152737,152740],{"class":256,"line":17040},[254,152730,152463],{"class":264},[254,152732,310],{"class":260},[254,152734,60746],{"class":313},[254,152736,265],{"class":264},[254,152738,152739],{"class":369},"\"请输入要修改的学号:\"",[254,152741,271],{"class":264},[254,152743,152744,152746,152748],{"class":256,"line":17045},[254,152745,152649],{"class":264},[254,152747,310],{"class":260},[254,152749,152654],{"class":264},[254,152751,152752],{"class":256,"line":17050},[254,152753,2540],{"emptyLinePlaceholder":184},[254,152755,152756,152758,152760,152762,152764],{"class":256,"line":17055},[254,152757,3241],{"class":260},[254,152759,152277],{"class":264},[254,152761,39068],{"class":260},[254,152763,39074],{"class":313},[254,152765,3879],{"class":264},[254,152767,152768,152770,152772,152774],{"class":256,"line":17068},[254,152769,32592],{"class":313},[254,152771,265],{"class":264},[254,152773,152679],{"class":369},[254,152775,271],{"class":264},[254,152777,152778],{"class":256,"line":17073},[254,152779,152501],{"class":260},[254,152781,152782],{"class":256,"line":32774},[254,152783,2540],{"emptyLinePlaceholder":184},[254,152785,152786,152788,152790,152792,152794,152797],{"class":256,"line":32780},[254,152787,152510],{"class":264},[254,152789,310],{"class":260},[254,152791,60746],{"class":313},[254,152793,265],{"class":264},[254,152795,152796],{"class":369},"\"请输入新姓名:\"",[254,152798,271],{"class":264},[254,152800,152801,152803,152805,152807,152810],{"class":256,"line":32786},[254,152802,152526],{"class":264},[254,152804,310],{"class":260},[254,152806,152531],{"class":264},[254,152808,152809],{"class":369},"\"请输入新年龄:\"",[254,152811,271],{"class":264},[254,152813,152814,152816,152818,152820,152823],{"class":256,"line":32792},[254,152815,152541],{"class":264},[254,152817,310],{"class":260},[254,152819,152546],{"class":264},[254,152821,152822],{"class":369},"\"请输入新成绩:\"",[254,152824,271],{"class":264},[254,152826,152827],{"class":256,"line":32798},[254,152828,2540],{"emptyLinePlaceholder":184},[254,152830,152831,152834,152836,152838,152840],{"class":256,"line":32809},[254,152832,152833],{"class":264},"    student[",[254,152835,62820],{"class":369},[254,152837,4583],{"class":264},[254,152839,310],{"class":260},[254,152841,149935],{"class":264},[254,152843,152844,152846,152848,152850,152852],{"class":256,"line":32815},[254,152845,152833],{"class":264},[254,152847,69265],{"class":369},[254,152849,4583],{"class":264},[254,152851,310],{"class":260},[254,152853,149947],{"class":264},[254,152855,152856,152858,152860,152862,152864],{"class":256,"line":32835},[254,152857,152833],{"class":264},[254,152859,151612],{"class":369},[254,152861,4583],{"class":264},[254,152863,310],{"class":260},[254,152865,1719],{"class":264},[254,152867,152868],{"class":256,"line":32841},[254,152869,2540],{"emptyLinePlaceholder":184},[254,152871,152872],{"class":256,"line":32852},[254,152873,152601],{"class":264},[254,152875,152876,152878,152880,152883],{"class":256,"line":32858},[254,152877,31440],{"class":313},[254,152879,265],{"class":264},[254,152881,152882],{"class":369},"\"修改成功\"",[254,152884,271],{"class":264},[254,152886,152887],{"class":256,"line":32864},[254,152888,2540],{"emptyLinePlaceholder":184},[254,152890,152891],{"class":256,"line":32870},[254,152892,2540],{"emptyLinePlaceholder":184},[254,152894,152895,152897,152900],{"class":256,"line":32876},[254,152896,32088],{"class":260},[254,152898,152899],{"class":2103}," query_student",[254,152901,152101],{"class":264},[254,152903,152904,152906,152908,152910,152912,152915],{"class":256,"line":32882},[254,152905,152463],{"class":264},[254,152907,310],{"class":260},[254,152909,60746],{"class":313},[254,152911,265],{"class":264},[254,152913,152914],{"class":369},"\"请输入要查询的学号:\"",[254,152916,271],{"class":264},[254,152918,152919,152921,152923],{"class":256,"line":32888},[254,152920,152649],{"class":264},[254,152922,310],{"class":260},[254,152924,152654],{"class":264},[254,152926,152927],{"class":256,"line":32894},[254,152928,2540],{"emptyLinePlaceholder":184},[254,152930,152931,152933,152935,152937,152939],{"class":256,"line":32914},[254,152932,3241],{"class":260},[254,152934,152277],{"class":264},[254,152936,39068],{"class":260},[254,152938,39074],{"class":313},[254,152940,3879],{"class":264},[254,152942,152943,152945,152947,152949],{"class":256,"line":32920},[254,152944,32592],{"class":313},[254,152946,265],{"class":264},[254,152948,152679],{"class":369},[254,152950,271],{"class":264},[254,152952,152953],{"class":256,"line":32936},[254,152954,152501],{"class":260},[254,152956,152957],{"class":256,"line":32942},[254,152958,2540],{"emptyLinePlaceholder":184},[254,152960,152961],{"class":256,"line":32956},[254,152962,152963],{"class":264},"    print_student(student)\n",[254,152965,152966],{"class":256,"line":32962},[254,152967,2540],{"emptyLinePlaceholder":184},[254,152969,152970],{"class":256,"line":32977},[254,152971,2540],{"emptyLinePlaceholder":184},[254,152973,152974,152976,152979],{"class":256,"line":32983},[254,152975,32088],{"class":260},[254,152977,152978],{"class":2103}," print_student",[254,152980,152981],{"class":264},"(student):\n",[254,152983,152984,152986],{"class":256,"line":32992},[254,152985,31440],{"class":313},[254,152987,151579],{"class":264},[254,152989,152990,152993,152995,152997,153000,153003,153005,153008],{"class":256,"line":32998},[254,152991,152992],{"class":260},"        f",[254,152994,515],{"class":369},[254,152996,1160],{"class":313},[254,152998,152999],{"class":264},"student[",[254,153001,153002],{"class":369},"'student_id'",[254,153004,1204],{"class":264},[254,153006,153007],{"class":313},"}\\t",[254,153009,25274],{"class":369},[254,153011,153012,153014,153016,153018,153020,153023,153025,153027],{"class":256,"line":33007},[254,153013,152992],{"class":260},[254,153015,515],{"class":369},[254,153017,1160],{"class":313},[254,153019,152999],{"class":264},[254,153021,153022],{"class":369},"'name'",[254,153024,1204],{"class":264},[254,153026,153007],{"class":313},[254,153028,25274],{"class":369},[254,153030,153031,153033,153035,153037,153039,153042,153044,153046],{"class":256,"line":33013},[254,153032,152992],{"class":260},[254,153034,515],{"class":369},[254,153036,1160],{"class":313},[254,153038,152999],{"class":264},[254,153040,153041],{"class":369},"'age'",[254,153043,1204],{"class":264},[254,153045,153007],{"class":313},[254,153047,25274],{"class":369},[254,153049,153050,153052,153054,153056,153058,153061,153063,153065],{"class":256,"line":33019},[254,153051,152992],{"class":260},[254,153053,515],{"class":369},[254,153055,1160],{"class":313},[254,153057,152999],{"class":264},[254,153059,153060],{"class":369},"'score'",[254,153062,1204],{"class":264},[254,153064,1210],{"class":313},[254,153066,25274],{"class":369},[254,153068,153069],{"class":256,"line":33028},[254,153070,153071],{"class":264},"    )\n",[254,153073,153074],{"class":256,"line":33034},[254,153075,2540],{"emptyLinePlaceholder":184},[254,153077,153078],{"class":256,"line":33045},[254,153079,2540],{"emptyLinePlaceholder":184},[254,153081,153082,153084,153087],{"class":256,"line":33051},[254,153083,32088],{"class":260},[254,153085,153086],{"class":2103}," show_all_students",[254,153088,152101],{"class":264},[254,153090,153091,153093,153095],{"class":256,"line":33070},[254,153092,3241],{"class":260},[254,153094,39071],{"class":260},[254,153096,152282],{"class":264},[254,153098,153099,153101,153103,153106],{"class":256,"line":33076},[254,153100,32592],{"class":313},[254,153102,265],{"class":264},[254,153104,153105],{"class":369},"\"暂无学生\"",[254,153107,271],{"class":264},[254,153109,153110],{"class":256,"line":33087},[254,153111,152501],{"class":260},[254,153113,153114],{"class":256,"line":33093},[254,153115,2540],{"emptyLinePlaceholder":184},[254,153117,153118,153120,153122,153125,153127,153130,153132,153135,153137,153140],{"class":256,"line":33113},[254,153119,31440],{"class":313},[254,153121,265],{"class":264},[254,153123,153124],{"class":369},"\"学号",[254,153126,1370],{"class":313},[254,153128,153129],{"class":369},"姓名",[254,153131,1370],{"class":313},[254,153133,153134],{"class":369},"年龄",[254,153136,1370],{"class":313},[254,153138,153139],{"class":369},"成绩\"",[254,153141,271],{"class":264},[254,153143,153144,153146,153148,153150],{"class":256,"line":33129},[254,153145,3341],{"class":260},[254,153147,152277],{"class":264},[254,153149,26184],{"class":260},[254,153151,152282],{"class":264},[254,153153,153154],{"class":256,"line":33135},[254,153155,153156],{"class":264},"        print_student(student)\n",[254,153158,153159],{"class":256,"line":33149},[254,153160,2540],{"emptyLinePlaceholder":184},[254,153162,153163],{"class":256,"line":33155},[254,153164,2540],{"emptyLinePlaceholder":184},[254,153166,153167,153169,153171],{"class":256,"line":33161},[254,153168,32088],{"class":260},[254,153170,2113],{"class":2103},[254,153172,32094],{"class":264},[254,153174,153175,153178,153180],{"class":256,"line":33172},[254,153176,153177],{"class":264},"    students ",[254,153179,310],{"class":260},[254,153181,153182],{"class":264}," load_students()\n",[254,153184,153185],{"class":256,"line":33178},[254,153186,2540],{"emptyLinePlaceholder":184},[254,153188,153189,153191,153193],{"class":256,"line":33184},[254,153190,2391],{"class":260},[254,153192,95433],{"class":313},[254,153194,3879],{"class":264},[254,153196,153197],{"class":256,"line":33194},[254,153198,153199],{"class":264},"        show_menu()\n",[254,153201,153202,153205,153207,153209,153211,153214],{"class":256,"line":33200},[254,153203,153204],{"class":264},"        choice ",[254,153206,310],{"class":260},[254,153208,60746],{"class":313},[254,153210,265],{"class":264},[254,153212,153213],{"class":369},"\"请输入操作:\"",[254,153215,271],{"class":264},[254,153217,153218],{"class":256,"line":33211},[254,153219,2540],{"emptyLinePlaceholder":184},[254,153221,153222,153224,153227,153229,153232],{"class":256,"line":33217},[254,153223,2637],{"class":260},[254,153225,153226],{"class":264}," choice ",[254,153228,3089],{"class":260},[254,153230,153231],{"class":369}," \"1\"",[254,153233,3879],{"class":264},[254,153235,153236],{"class":256,"line":33227},[254,153237,153238],{"class":264},"            add_student(students)\n",[254,153240,153241,153244,153246,153248,153251],{"class":256,"line":33232},[254,153242,153243],{"class":260},"        elif",[254,153245,153226],{"class":264},[254,153247,3089],{"class":260},[254,153249,153250],{"class":369}," \"2\"",[254,153252,3879],{"class":264},[254,153254,153255],{"class":256,"line":33238},[254,153256,153257],{"class":264},"            delete_student(students)\n",[254,153259,153260,153262,153264,153266,153269],{"class":256,"line":33287},[254,153261,153243],{"class":260},[254,153263,153226],{"class":264},[254,153265,3089],{"class":260},[254,153267,153268],{"class":369}," \"3\"",[254,153270,3879],{"class":264},[254,153272,153273],{"class":256,"line":33334},[254,153274,153275],{"class":264},"            update_student(students)\n",[254,153277,153278,153280,153282,153284,153287],{"class":256,"line":33339},[254,153279,153243],{"class":260},[254,153281,153226],{"class":264},[254,153283,3089],{"class":260},[254,153285,153286],{"class":369}," \"4\"",[254,153288,3879],{"class":264},[254,153290,153291],{"class":256,"line":33345},[254,153292,153293],{"class":264},"            query_student(students)\n",[254,153295,153296,153298,153300,153302,153305],{"class":256,"line":33364},[254,153297,153243],{"class":260},[254,153299,153226],{"class":264},[254,153301,3089],{"class":260},[254,153303,153304],{"class":369}," \"5\"",[254,153306,3879],{"class":264},[254,153308,153309],{"class":256,"line":33370},[254,153310,153311],{"class":264},"            show_all_students(students)\n",[254,153313,153314,153316,153318,153320,153323],{"class":256,"line":33390},[254,153315,153243],{"class":260},[254,153317,153226],{"class":264},[254,153319,3089],{"class":260},[254,153321,153322],{"class":369}," \"0\"",[254,153324,3879],{"class":264},[254,153326,153327,153329,153331,153334],{"class":256,"line":33396},[254,153328,34791],{"class":313},[254,153330,265],{"class":264},[254,153332,153333],{"class":369},"\"退出系统\"",[254,153335,271],{"class":264},[254,153337,153338],{"class":256,"line":33402},[254,153339,115239],{"class":260},[254,153341,153342,153344],{"class":256,"line":33412},[254,153343,2674],{"class":260},[254,153345,3879],{"class":264},[254,153347,153348,153350,153352,153355],{"class":256,"line":33417},[254,153349,34791],{"class":313},[254,153351,265],{"class":264},[254,153353,153354],{"class":369},"\"输入错误\"",[254,153356,271],{"class":264},[254,153358,153359],{"class":256,"line":33423},[254,153360,2540],{"emptyLinePlaceholder":184},[254,153362,153363],{"class":256,"line":33439},[254,153364,2540],{"emptyLinePlaceholder":184},[254,153366,153367,153369,153371,153373,153375],{"class":256,"line":33484},[254,153368,1671],{"class":260},[254,153370,31361],{"class":313},[254,153372,101700],{"class":260},[254,153374,101703],{"class":369},[254,153376,3879],{"class":264},[254,153378,153379],{"class":256,"line":33490},[254,153380,101710],{"class":264},[14,153382,153383],{},"这个项目串联了：",[21,153385,153386,153389,153392,153395,153398,153400],{},[24,153387,153388],{},"菜单循环。",[24,153390,153391],{},"函数封装。",[24,153393,153394],{},"列表字典。",[24,153396,153397],{},"JSON 读写。",[24,153399,151867],{},[24,153401,153402,28526],{},[251,153403,153404],{},"if __name__ == \"__main__\"",[34,153406,153408],{"id":153407},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[14,153410,153411],{},"可以进一步拆成两个类：",[21,153413,153414,153419],{},[24,153415,153416,153418],{},[251,153417,149708],{},"：表示单个学生。",[24,153420,153421,153423],{},[251,153422,151734],{},"：负责学生增删改查和文件保存。",[14,153425,153426],{},"示意代码：",[245,153428,153430],{"className":30519,"code":153429,"language":30521,"meta":174,"style":174},"from dataclasses import dataclass\n\n\n@dataclass\nclass Student:\n    student_id: str\n    name: str\n    age: int\n    score: float\n\n    def to_dict(self):\n        return {\n            \"student_id\": self.student_id,\n            \"name\": self.name,\n            \"age\": self.age,\n            \"score\": self.score,\n        }\n\n    @classmethod\n    def from_dict(cls, data):\n        return cls(\n            data[\"student_id\"],\n            data[\"name\"],\n            data[\"age\"],\n            data[\"score\"],\n        )\n",[251,153431,153432,153442,153446,153450,153454,153462,153469,153475,153481,153487,153491,153499,153505,153515,153525,153535,153545,153549,153553,153559,153567,153575,153583,153591,153599,153607],{"__ignoreMap":174},[254,153433,153434,153436,153438,153440],{"class":256,"line":257},[254,153435,30878],{"class":260},[254,153437,151292],{"class":264},[254,153439,30533],{"class":260},[254,153441,151297],{"class":264},[254,153443,153444],{"class":256,"line":175},[254,153445,2540],{"emptyLinePlaceholder":184},[254,153447,153448],{"class":256,"line":1319},[254,153449,2540],{"emptyLinePlaceholder":184},[254,153451,153452],{"class":256,"line":1334},[254,153453,151310],{"class":2103},[254,153455,153456,153458,153460],{"class":256,"line":1340},[254,153457,14835],{"class":260},[254,153459,8039],{"class":2103},[254,153461,3879],{"class":264},[254,153463,153464,153467],{"class":256,"line":1354},[254,153465,153466],{"class":264},"    student_id: ",[254,153468,151326],{"class":313},[254,153470,153471,153473],{"class":256,"line":1360},[254,153472,151323],{"class":264},[254,153474,151326],{"class":313},[254,153476,153477,153479],{"class":256,"line":1451},[254,153478,151331],{"class":264},[254,153480,151334],{"class":313},[254,153482,153483,153485],{"class":256,"line":1457},[254,153484,151339],{"class":264},[254,153486,151342],{"class":313},[254,153488,153489],{"class":256,"line":1469},[254,153490,2540],{"emptyLinePlaceholder":184},[254,153492,153493,153495,153497],{"class":256,"line":1752},[254,153494,30942],{"class":260},[254,153496,151490],{"class":2103},[254,153498,30948],{"class":264},[254,153500,153501,153503],{"class":256,"line":1757},[254,153502,14893],{"class":260},[254,153504,15713],{"class":264},[254,153506,153507,153509,153511,153513],{"class":256,"line":1763},[254,153508,151503],{"class":369},[254,153510,51578],{"class":264},[254,153512,30964],{"class":313},[254,153514,151510],{"class":264},[254,153516,153517,153519,153521,153523],{"class":256,"line":1768},[254,153518,151515],{"class":369},[254,153520,51578],{"class":264},[254,153522,30964],{"class":313},[254,153524,151522],{"class":264},[254,153526,153527,153529,153531,153533],{"class":256,"line":1782},[254,153528,151527],{"class":369},[254,153530,51578],{"class":264},[254,153532,30964],{"class":313},[254,153534,151534],{"class":264},[254,153536,153537,153539,153541,153543],{"class":256,"line":1787},[254,153538,151539],{"class":369},[254,153540,51578],{"class":264},[254,153542,30964],{"class":313},[254,153544,151546],{"class":264},[254,153546,153547],{"class":256,"line":1793},[254,153548,2669],{"class":264},[254,153550,153551],{"class":256,"line":1814},[254,153552,2540],{"emptyLinePlaceholder":184},[254,153554,153555,153557],{"class":256,"line":1819},[254,153556,151154],{"class":2103},[254,153558,151157],{"class":313},[254,153560,153561,153563,153565],{"class":256,"line":1833},[254,153562,30942],{"class":260},[254,153564,151567],{"class":2103},[254,153566,151570],{"class":264},[254,153568,153569,153571,153573],{"class":256,"line":1838},[254,153570,14893],{"class":260},[254,153572,151174],{"class":313},[254,153574,151579],{"class":264},[254,153576,153577,153579,153581],{"class":256,"line":1867},[254,153578,151584],{"class":264},[254,153580,151587],{"class":369},[254,153582,87977],{"class":264},[254,153584,153585,153587,153589],{"class":256,"line":1872},[254,153586,151584],{"class":264},[254,153588,62820],{"class":369},[254,153590,87977],{"class":264},[254,153592,153593,153595,153597],{"class":256,"line":1889},[254,153594,151584],{"class":264},[254,153596,69265],{"class":369},[254,153598,87977],{"class":264},[254,153600,153601,153603,153605],{"class":256,"line":1894},[254,153602,151584],{"class":264},[254,153604,151612],{"class":369},[254,153606,87977],{"class":264},[254,153608,153609],{"class":256,"line":1899},[254,153610,38267],{"class":264},[14,153612,153613],{},"管理器示意：",[245,153615,153617],{"className":30519,"code":153616,"language":30521,"meta":174,"style":174},"class StudentManager:\n    def __init__(self):\n        self.students = []\n\n    def find_by_id(self, student_id):\n        for student in self.students:\n            if student.student_id == student_id:\n                return student\n        return None\n\n    def add(self, student):\n        if self.find_by_id(student.student_id):\n            return False\n        self.students.append(student)\n        return True\n",[251,153618,153619,153628,153636,153647,153651,153661,153674,153685,153692,153698,153702,153711,153720,153726,153733],{"__ignoreMap":174},[254,153620,153621,153623,153626],{"class":256,"line":257},[254,153622,14835],{"class":260},[254,153624,153625],{"class":2103}," StudentManager",[254,153627,3879],{"class":264},[254,153629,153630,153632,153634],{"class":256,"line":175},[254,153631,30942],{"class":260},[254,153633,30945],{"class":313},[254,153635,30948],{"class":264},[254,153637,153638,153640,153643,153645],{"class":256,"line":1319},[254,153639,30986],{"class":313},[254,153641,153642],{"class":264},".students ",[254,153644,310],{"class":260},[254,153646,51979],{"class":264},[254,153648,153649],{"class":256,"line":1334},[254,153650,2540],{"emptyLinePlaceholder":184},[254,153652,153653,153655,153658],{"class":256,"line":1340},[254,153654,30942],{"class":260},[254,153656,153657],{"class":2103}," find_by_id",[254,153659,153660],{"class":264},"(self, student_id):\n",[254,153662,153663,153665,153667,153669,153671],{"class":256,"line":1354},[254,153664,3543],{"class":260},[254,153666,152277],{"class":264},[254,153668,26184],{"class":260},[254,153670,39014],{"class":313},[254,153672,153673],{"class":264},".students:\n",[254,153675,153676,153678,153681,153683],{"class":256,"line":1360},[254,153677,4782],{"class":260},[254,153679,153680],{"class":264}," student.student_id ",[254,153682,3089],{"class":260},[254,153684,152298],{"class":264},[254,153686,153687,153690],{"class":256,"line":1451},[254,153688,153689],{"class":260},"                return",[254,153691,152305],{"class":264},[254,153693,153694,153696],{"class":256,"line":1457},[254,153695,14893],{"class":260},[254,153697,152312],{"class":313},[254,153699,153700],{"class":256,"line":1469},[254,153701,2540],{"emptyLinePlaceholder":184},[254,153703,153704,153706,153708],{"class":256,"line":1752},[254,153705,30942],{"class":260},[254,153707,5350],{"class":2103},[254,153709,153710],{"class":264},"(self, student):\n",[254,153712,153713,153715,153717],{"class":256,"line":1757},[254,153714,2637],{"class":260},[254,153716,39014],{"class":313},[254,153718,153719],{"class":264},".find_by_id(student.student_id):\n",[254,153721,153722,153724],{"class":256,"line":1763},[254,153723,15873],{"class":260},[254,153725,125947],{"class":313},[254,153727,153728,153730],{"class":256,"line":1768},[254,153729,30986],{"class":313},[254,153731,153732],{"class":264},".students.append(student)\n",[254,153734,153735,153737],{"class":256,"line":1782},[254,153736,14893],{"class":260},[254,153738,153739],{"class":313}," True\n",[14,153741,153742],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[34,153744,153746],{"id":153745},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[225,153748,153750],{"id":153749},"_1251-数据结构","12.5.1 数据结构",[245,153752,153754],{"className":30519,"code":153753,"language":30521,"meta":174,"style":174},"sales = [\n    {\"date\": \"2024-10-01\", \"category\": \"手机\", \"amount\": 12000},\n    {\"date\": \"2024-10-01\", \"category\": \"电脑\", \"amount\": 18000},\n    {\"date\": \"2024-10-02\", \"category\": \"手机\", \"amount\": 15000},\n    {\"date\": \"2024-10-02\", \"category\": \"电脑\", \"amount\": 16000},\n]\n",[251,153755,153756,153764,153795,153825,153854,153883],{"__ignoreMap":174},[254,153757,153758,153760,153762],{"class":256,"line":257},[254,153759,148605],{"class":264},[254,153761,310],{"class":260},[254,153763,55588],{"class":264},[254,153765,153766,153768,153770,153772,153774,153776,153779,153781,153784,153786,153788,153790,153793],{"class":256,"line":175},[254,153767,148525],{"class":264},[254,153769,148137],{"class":369},[254,153771,51578],{"class":264},[254,153773,148748],{"class":369},[254,153775,12576],{"class":264},[254,153777,153778],{"class":369},"\"category\"",[254,153780,51578],{"class":264},[254,153782,153783],{"class":369},"\"手机\"",[254,153785,12576],{"class":264},[254,153787,84225],{"class":369},[254,153789,51578],{"class":264},[254,153791,153792],{"class":313},"12000",[254,153794,5070],{"class":264},[254,153796,153797,153799,153801,153803,153805,153807,153809,153811,153814,153816,153818,153820,153823],{"class":256,"line":1319},[254,153798,148525],{"class":264},[254,153800,148137],{"class":369},[254,153802,51578],{"class":264},[254,153804,148748],{"class":369},[254,153806,12576],{"class":264},[254,153808,153778],{"class":369},[254,153810,51578],{"class":264},[254,153812,153813],{"class":369},"\"电脑\"",[254,153815,12576],{"class":264},[254,153817,84225],{"class":369},[254,153819,51578],{"class":264},[254,153821,153822],{"class":313},"18000",[254,153824,5070],{"class":264},[254,153826,153827,153829,153831,153833,153835,153837,153839,153841,153843,153845,153847,153849,153852],{"class":256,"line":1334},[254,153828,148525],{"class":264},[254,153830,148137],{"class":369},[254,153832,51578],{"class":264},[254,153834,148769],{"class":369},[254,153836,12576],{"class":264},[254,153838,153778],{"class":369},[254,153840,51578],{"class":264},[254,153842,153783],{"class":369},[254,153844,12576],{"class":264},[254,153846,84225],{"class":369},[254,153848,51578],{"class":264},[254,153850,153851],{"class":313},"15000",[254,153853,5070],{"class":264},[254,153855,153856,153858,153860,153862,153864,153866,153868,153870,153872,153874,153876,153878,153881],{"class":256,"line":1340},[254,153857,148525],{"class":264},[254,153859,148137],{"class":369},[254,153861,51578],{"class":264},[254,153863,148769],{"class":369},[254,153865,12576],{"class":264},[254,153867,153778],{"class":369},[254,153869,51578],{"class":264},[254,153871,153813],{"class":369},[254,153873,12576],{"class":264},[254,153875,84225],{"class":369},[254,153877,51578],{"class":264},[254,153879,153880],{"class":313},"16000",[254,153882,5070],{"class":264},[254,153884,153885],{"class":256,"line":1354},[254,153886,33387],{"class":264},[225,153888,153890],{"id":153889},"_1252-按日期统计","12.5.2 按日期统计",[245,153892,153894],{"className":30519,"code":153893,"language":30521,"meta":174,"style":174},"daily_total = {}\n\nfor item in sales:\n    date = item[\"date\"]\n    amount = item[\"amount\"]\n    daily_total[date] = daily_total.get(date, 0) + amount\n\nprint(daily_total)\n",[251,153895,153896,153905,153909,153920,153934,153947,153966,153970],{"__ignoreMap":174},[254,153897,153898,153901,153903],{"class":256,"line":257},[254,153899,153900],{"class":264},"daily_total ",[254,153902,310],{"class":260},[254,153904,88009],{"class":264},[254,153906,153907],{"class":256,"line":175},[254,153908,2540],{"emptyLinePlaceholder":184},[254,153910,153911,153913,153915,153917],{"class":256,"line":1319},[254,153912,3165],{"class":260},[254,153914,148349],{"class":264},[254,153916,26184],{"class":260},[254,153918,153919],{"class":264}," sales:\n",[254,153921,153922,153925,153927,153930,153932],{"class":256,"line":1334},[254,153923,153924],{"class":264},"    date ",[254,153926,310],{"class":260},[254,153928,153929],{"class":264}," item[",[254,153931,148137],{"class":369},[254,153933,33387],{"class":264},[254,153935,153936,153939,153941,153943,153945],{"class":256,"line":1340},[254,153937,153938],{"class":264},"    amount ",[254,153940,310],{"class":260},[254,153942,153929],{"class":264},[254,153944,84225],{"class":369},[254,153946,33387],{"class":264},[254,153948,153949,153952,153954,153957,153959,153961,153963],{"class":256,"line":1354},[254,153950,153951],{"class":264},"    daily_total[date] ",[254,153953,310],{"class":260},[254,153955,153956],{"class":264}," daily_total.get(date, ",[254,153958,456],{"class":313},[254,153960,13855],{"class":264},[254,153962,745],{"class":260},[254,153964,153965],{"class":264}," amount\n",[254,153967,153968],{"class":256,"line":1360},[254,153969,2540],{"emptyLinePlaceholder":184},[254,153971,153972,153974],{"class":256,"line":1451},[254,153973,30556],{"class":313},[254,153975,153976],{"class":264},"(daily_total)\n",[225,153978,153980],{"id":153979},"_1253-按类别统计","12.5.3 按类别统计",[245,153982,153984],{"className":30519,"code":153983,"language":30521,"meta":174,"style":174},"category_total = {}\n\nfor item in sales:\n    category = item[\"category\"]\n    amount = item[\"amount\"]\n    category_total[category] = category_total.get(category, 0) + amount\n\nprint(category_total)\n",[251,153985,153986,153995,153999,154009,154022,154034,154052,154056],{"__ignoreMap":174},[254,153987,153988,153991,153993],{"class":256,"line":257},[254,153989,153990],{"class":264},"category_total ",[254,153992,310],{"class":260},[254,153994,88009],{"class":264},[254,153996,153997],{"class":256,"line":175},[254,153998,2540],{"emptyLinePlaceholder":184},[254,154000,154001,154003,154005,154007],{"class":256,"line":1319},[254,154002,3165],{"class":260},[254,154004,148349],{"class":264},[254,154006,26184],{"class":260},[254,154008,153919],{"class":264},[254,154010,154011,154014,154016,154018,154020],{"class":256,"line":1334},[254,154012,154013],{"class":264},"    category ",[254,154015,310],{"class":260},[254,154017,153929],{"class":264},[254,154019,153778],{"class":369},[254,154021,33387],{"class":264},[254,154023,154024,154026,154028,154030,154032],{"class":256,"line":1340},[254,154025,153938],{"class":264},[254,154027,310],{"class":260},[254,154029,153929],{"class":264},[254,154031,84225],{"class":369},[254,154033,33387],{"class":264},[254,154035,154036,154039,154041,154044,154046,154048,154050],{"class":256,"line":1354},[254,154037,154038],{"class":264},"    category_total[category] ",[254,154040,310],{"class":260},[254,154042,154043],{"class":264}," category_total.get(category, ",[254,154045,456],{"class":313},[254,154047,13855],{"class":264},[254,154049,745],{"class":260},[254,154051,153965],{"class":264},[254,154053,154054],{"class":256,"line":1360},[254,154055,2540],{"emptyLinePlaceholder":184},[254,154057,154058,154060],{"class":256,"line":1451},[254,154059,30556],{"class":313},[254,154061,154062],{"class":264},"(category_total)\n",[225,154064,154066],{"id":154065},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[245,154068,154070],{"className":30519,"code":154069,"language":30521,"meta":174,"style":174},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[251,154071,154072,154097],{"__ignoreMap":174},[254,154073,154074,154077,154079,154081,154084,154087,154090,154093,154095],{"class":256,"line":257},[254,154075,154076],{"class":264},"top_date, top_amount ",[254,154078,310],{"class":260},[254,154080,6092],{"class":313},[254,154082,154083],{"class":264},"(daily_total.items(), ",[254,154085,154086],{"class":5357},"key",[254,154088,154089],{"class":260},"=lambda",[254,154091,154092],{"class":264}," item: item[",[254,154094,482],{"class":313},[254,154096,4797],{"class":264},[254,154098,154099,154101],{"class":256,"line":175},[254,154100,30556],{"class":313},[254,154102,154103],{"class":264},"(top_date, top_amount)\n",[34,154105,154107],{"id":154106},"_126-绘制柱状图","12.6 绘制柱状图",[245,154109,154111],{"className":30519,"code":154110,"language":30521,"meta":174,"style":174},"from pyecharts import options as opts\nfrom pyecharts.charts import Bar\n\ncategory_total = {\n    \"手机\": 27000,\n    \"电脑\": 34000,\n    \"耳机\": 8000,\n}\n\nbar = Bar()\nbar.add_xaxis(list(category_total.keys()))\nbar.add_yaxis(\"销售额\", list(category_total.values()))\nbar.set_global_opts(\n    title_opts=opts.TitleOpts(title=\"品类销售额\"),\n    xaxis_opts=opts.AxisOpts(name=\"品类\"),\n    yaxis_opts=opts.AxisOpts(name=\"销售额\"),\n)\nbar.render(\"category_sales.html\")\n",[251,154112,154113,154127,154138,154142,154150,154162,154174,154185,154189,154193,154203,154214,154228,154233,154250,154267,154283,154287],{"__ignoreMap":174},[254,154114,154115,154117,154119,154121,154123,154125],{"class":256,"line":257},[254,154116,30878],{"class":260},[254,154118,147519],{"class":264},[254,154120,30533],{"class":260},[254,154122,147524],{"class":264},[254,154124,31524],{"class":260},[254,154126,147529],{"class":264},[254,154128,154129,154131,154133,154135],{"class":256,"line":175},[254,154130,30878],{"class":260},[254,154132,147378],{"class":264},[254,154134,30533],{"class":260},[254,154136,154137],{"class":264}," Bar\n",[254,154139,154140],{"class":256,"line":1319},[254,154141,2540],{"emptyLinePlaceholder":184},[254,154143,154144,154146,154148],{"class":256,"line":1334},[254,154145,153990],{"class":264},[254,154147,310],{"class":260},[254,154149,15713],{"class":264},[254,154151,154152,154155,154157,154160],{"class":256,"line":1340},[254,154153,154154],{"class":369},"    \"手机\"",[254,154156,51578],{"class":264},[254,154158,154159],{"class":313},"27000",[254,154161,31607],{"class":264},[254,154163,154164,154167,154169,154172],{"class":256,"line":1354},[254,154165,154166],{"class":369},"    \"电脑\"",[254,154168,51578],{"class":264},[254,154170,154171],{"class":313},"34000",[254,154173,31607],{"class":264},[254,154175,154176,154179,154181,154183],{"class":256,"line":1360},[254,154177,154178],{"class":369},"    \"耳机\"",[254,154180,51578],{"class":264},[254,154182,124539],{"class":313},[254,154184,31607],{"class":264},[254,154186,154187],{"class":256,"line":1451},[254,154188,1705],{"class":264},[254,154190,154191],{"class":256,"line":1457},[254,154192,2540],{"emptyLinePlaceholder":184},[254,154194,154195,154198,154200],{"class":256,"line":1469},[254,154196,154197],{"class":264},"bar ",[254,154199,310],{"class":260},[254,154201,154202],{"class":264}," Bar()\n",[254,154204,154205,154208,154211],{"class":256,"line":1752},[254,154206,154207],{"class":264},"bar.add_xaxis(",[254,154209,154210],{"class":313},"list",[254,154212,154213],{"class":264},"(category_total.keys()))\n",[254,154215,154216,154219,154221,154223,154225],{"class":256,"line":1757},[254,154217,154218],{"class":264},"bar.add_yaxis(",[254,154220,147435],{"class":369},[254,154222,12576],{"class":264},[254,154224,154210],{"class":313},[254,154226,154227],{"class":264},"(category_total.values()))\n",[254,154229,154230],{"class":256,"line":1763},[254,154231,154232],{"class":264},"bar.set_global_opts(\n",[254,154234,154235,154237,154239,154241,154243,154245,154248],{"class":256,"line":1768},[254,154236,147613],{"class":5357},[254,154238,310],{"class":260},[254,154240,147618],{"class":264},[254,154242,51548],{"class":5357},[254,154244,310],{"class":260},[254,154246,154247],{"class":369},"\"品类销售额\"",[254,154249,38188],{"class":264},[254,154251,154252,154254,154256,154258,154260,154262,154265],{"class":256,"line":1782},[254,154253,147632],{"class":5357},[254,154255,310],{"class":260},[254,154257,147637],{"class":264},[254,154259,79951],{"class":5357},[254,154261,310],{"class":260},[254,154263,154264],{"class":369},"\"品类\"",[254,154266,38188],{"class":264},[254,154268,154269,154271,154273,154275,154277,154279,154281],{"class":256,"line":1787},[254,154270,147651],{"class":5357},[254,154272,310],{"class":260},[254,154274,147637],{"class":264},[254,154276,79951],{"class":5357},[254,154278,310],{"class":260},[254,154280,147435],{"class":369},[254,154282,38188],{"class":264},[254,154284,154285],{"class":256,"line":1793},[254,154286,271],{"class":264},[254,154288,154289,154292,154295],{"class":256,"line":1814},[254,154290,154291],{"class":264},"bar.render(",[254,154293,154294],{"class":369},"\"category_sales.html\"",[254,154296,271],{"class":264},[34,154298,154300],{"id":154299},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[14,154302,154303],{},"时间线适合展示不同日期、月份、年份的数据变化。",[245,154305,154307],{"className":30519,"code":154306,"language":30521,"meta":174,"style":174},"from pyecharts import options as opts\nfrom pyecharts.charts import Bar, Timeline\n\ndata = {\n    \"2024-10-01\": {\"手机\": 12000, \"电脑\": 18000},\n    \"2024-10-02\": {\"手机\": 15000, \"电脑\": 16000},\n    \"2024-10-03\": {\"手机\": 17000, \"电脑\": 19000},\n}\n\ntimeline = Timeline()\n\nfor date, category_data in data.items():\n    bar = Bar()\n    bar.add_xaxis(list(category_data.keys()))\n    bar.add_yaxis(\"销售额\", list(category_data.values()))\n    bar.set_global_opts(title_opts=opts.TitleOpts(title=f\"{date}销售额\"))\n    timeline.add(bar, date)\n\ntimeline.render(\"timeline_sales.html\")\n",[251,154308,154309,154323,154334,154338,154346,154370,154393,154418,154422,154426,154436,154440,154451,154460,154470,154484,154515,154520,154524],{"__ignoreMap":174},[254,154310,154311,154313,154315,154317,154319,154321],{"class":256,"line":257},[254,154312,30878],{"class":260},[254,154314,147519],{"class":264},[254,154316,30533],{"class":260},[254,154318,147524],{"class":264},[254,154320,31524],{"class":260},[254,154322,147529],{"class":264},[254,154324,154325,154327,154329,154331],{"class":256,"line":175},[254,154326,30878],{"class":260},[254,154328,147378],{"class":264},[254,154330,30533],{"class":260},[254,154332,154333],{"class":264}," Bar, Timeline\n",[254,154335,154336],{"class":256,"line":1319},[254,154337,2540],{"emptyLinePlaceholder":184},[254,154339,154340,154342,154344],{"class":256,"line":1334},[254,154341,101799],{"class":264},[254,154343,310],{"class":260},[254,154345,15713],{"class":264},[254,154347,154348,154351,154354,154356,154358,154360,154362,154364,154366,154368],{"class":256,"line":1340},[254,154349,154350],{"class":369},"    \"2024-10-01\"",[254,154352,154353],{"class":264},": {",[254,154355,153783],{"class":369},[254,154357,51578],{"class":264},[254,154359,153792],{"class":313},[254,154361,12576],{"class":264},[254,154363,153813],{"class":369},[254,154365,51578],{"class":264},[254,154367,153822],{"class":313},[254,154369,5070],{"class":264},[254,154371,154372,154375,154377,154379,154381,154383,154385,154387,154389,154391],{"class":256,"line":1354},[254,154373,154374],{"class":369},"    \"2024-10-02\"",[254,154376,154353],{"class":264},[254,154378,153783],{"class":369},[254,154380,51578],{"class":264},[254,154382,153851],{"class":313},[254,154384,12576],{"class":264},[254,154386,153813],{"class":369},[254,154388,51578],{"class":264},[254,154390,153880],{"class":313},[254,154392,5070],{"class":264},[254,154394,154395,154398,154400,154402,154404,154407,154409,154411,154413,154416],{"class":256,"line":1360},[254,154396,154397],{"class":369},"    \"2024-10-03\"",[254,154399,154353],{"class":264},[254,154401,153783],{"class":369},[254,154403,51578],{"class":264},[254,154405,154406],{"class":313},"17000",[254,154408,12576],{"class":264},[254,154410,153813],{"class":369},[254,154412,51578],{"class":264},[254,154414,154415],{"class":313},"19000",[254,154417,5070],{"class":264},[254,154419,154420],{"class":256,"line":1451},[254,154421,1705],{"class":264},[254,154423,154424],{"class":256,"line":1457},[254,154425,2540],{"emptyLinePlaceholder":184},[254,154427,154428,154431,154433],{"class":256,"line":1469},[254,154429,154430],{"class":264},"timeline ",[254,154432,310],{"class":260},[254,154434,154435],{"class":264}," Timeline()\n",[254,154437,154438],{"class":256,"line":1752},[254,154439,2540],{"emptyLinePlaceholder":184},[254,154441,154442,154444,154447,154449],{"class":256,"line":1757},[254,154443,3165],{"class":260},[254,154445,154446],{"class":264}," date, category_data ",[254,154448,26184],{"class":260},[254,154450,149288],{"class":264},[254,154452,154453,154456,154458],{"class":256,"line":1763},[254,154454,154455],{"class":264},"    bar ",[254,154457,310],{"class":260},[254,154459,154202],{"class":264},[254,154461,154462,154465,154467],{"class":256,"line":1768},[254,154463,154464],{"class":264},"    bar.add_xaxis(",[254,154466,154210],{"class":313},[254,154468,154469],{"class":264},"(category_data.keys()))\n",[254,154471,154472,154475,154477,154479,154481],{"class":256,"line":1782},[254,154473,154474],{"class":264},"    bar.add_yaxis(",[254,154476,147435],{"class":369},[254,154478,12576],{"class":264},[254,154480,154210],{"class":313},[254,154482,154483],{"class":264},"(category_data.values()))\n",[254,154485,154486,154489,154492,154494,154496,154498,154500,154502,154504,154506,154508,154510,154513],{"class":256,"line":1787},[254,154487,154488],{"class":264},"    bar.set_global_opts(",[254,154490,154491],{"class":5357},"title_opts",[254,154493,310],{"class":260},[254,154495,147618],{"class":264},[254,154497,51548],{"class":5357},[254,154499,310],{"class":260},[254,154501,317],{"class":260},[254,154503,515],{"class":369},[254,154505,1160],{"class":313},[254,154507,74067],{"class":264},[254,154509,1210],{"class":313},[254,154511,154512],{"class":369},"销售额\"",[254,154514,30638],{"class":264},[254,154516,154517],{"class":256,"line":1793},[254,154518,154519],{"class":264},"    timeline.add(bar, date)\n",[254,154521,154522],{"class":256,"line":1814},[254,154523,2540],{"emptyLinePlaceholder":184},[254,154525,154526,154529,154532],{"class":256,"line":1819},[254,154527,154528],{"class":264},"timeline.render(",[254,154530,154531],{"class":369},"\"timeline_sales.html\"",[254,154533,271],{"class":264},[34,154535,154537],{"id":154536},"_128-绘制地图","12.8 绘制地图",[14,154539,154540],{},"地图适合展示地区数据。",[245,154542,154544],{"className":30519,"code":154543,"language":30521,"meta":174,"style":174},"from pyecharts import options as opts\nfrom pyecharts.charts import Map\n\ndata = [\n    (\"北京\", 120),\n    (\"上海\", 150),\n    (\"广东\", 200),\n    (\"浙江\", 180),\n]\n\nmap_chart = Map()\nmap_chart.add(\"销售额\", data, \"china\")\nmap_chart.set_global_opts(\n    title_opts=opts.TitleOpts(title=\"地区销售额\"),\n    visualmap_opts=opts.VisualMapOpts(max_=200),\n)\nmap_chart.render(\"map_sales.html\")\n",[251,154545,154546,154560,154571,154575,154583,154596,154608,154621,154634,154638,154642,154652,154667,154672,154689,154708,154712],{"__ignoreMap":174},[254,154547,154548,154550,154552,154554,154556,154558],{"class":256,"line":257},[254,154549,30878],{"class":260},[254,154551,147519],{"class":264},[254,154553,30533],{"class":260},[254,154555,147524],{"class":264},[254,154557,31524],{"class":260},[254,154559,147529],{"class":264},[254,154561,154562,154564,154566,154568],{"class":256,"line":175},[254,154563,30878],{"class":260},[254,154565,147378],{"class":264},[254,154567,30533],{"class":260},[254,154569,154570],{"class":264}," Map\n",[254,154572,154573],{"class":256,"line":1319},[254,154574,2540],{"emptyLinePlaceholder":184},[254,154576,154577,154579,154581],{"class":256,"line":1334},[254,154578,101799],{"class":264},[254,154580,310],{"class":260},[254,154582,55588],{"class":264},[254,154584,154585,154588,154590,154592,154594],{"class":256,"line":1340},[254,154586,154587],{"class":264},"    (",[254,154589,69410],{"class":369},[254,154591,12576],{"class":264},[254,154593,1081],{"class":313},[254,154595,38188],{"class":264},[254,154597,154598,154600,154602,154604,154606],{"class":256,"line":1354},[254,154599,154587],{"class":264},[254,154601,69430],{"class":369},[254,154603,12576],{"class":264},[254,154605,147452],{"class":313},[254,154607,38188],{"class":264},[254,154609,154610,154612,154615,154617,154619],{"class":256,"line":1360},[254,154611,154587],{"class":264},[254,154613,154614],{"class":369},"\"广东\"",[254,154616,12576],{"class":264},[254,154618,1862],{"class":313},[254,154620,38188],{"class":264},[254,154622,154623,154625,154628,154630,154632],{"class":256,"line":1451},[254,154624,154587],{"class":264},[254,154626,154627],{"class":369},"\"浙江\"",[254,154629,12576],{"class":264},[254,154631,147457],{"class":313},[254,154633,38188],{"class":264},[254,154635,154636],{"class":256,"line":1457},[254,154637,33387],{"class":264},[254,154639,154640],{"class":256,"line":1469},[254,154641,2540],{"emptyLinePlaceholder":184},[254,154643,154644,154647,154649],{"class":256,"line":1752},[254,154645,154646],{"class":264},"map_chart ",[254,154648,310],{"class":260},[254,154650,154651],{"class":264}," Map()\n",[254,154653,154654,154657,154659,154662,154665],{"class":256,"line":1757},[254,154655,154656],{"class":264},"map_chart.add(",[254,154658,147435],{"class":369},[254,154660,154661],{"class":264},", data, ",[254,154663,154664],{"class":369},"\"china\"",[254,154666,271],{"class":264},[254,154668,154669],{"class":256,"line":1763},[254,154670,154671],{"class":264},"map_chart.set_global_opts(\n",[254,154673,154674,154676,154678,154680,154682,154684,154687],{"class":256,"line":1768},[254,154675,147613],{"class":5357},[254,154677,310],{"class":260},[254,154679,147618],{"class":264},[254,154681,51548],{"class":5357},[254,154683,310],{"class":260},[254,154685,154686],{"class":369},"\"地区销售额\"",[254,154688,38188],{"class":264},[254,154690,154691,154694,154696,154699,154702,154704,154706],{"class":256,"line":1782},[254,154692,154693],{"class":5357},"    visualmap_opts",[254,154695,310],{"class":260},[254,154697,154698],{"class":264},"opts.VisualMapOpts(",[254,154700,154701],{"class":5357},"max_",[254,154703,310],{"class":260},[254,154705,1862],{"class":313},[254,154707,38188],{"class":264},[254,154709,154710],{"class":256,"line":1787},[254,154711,271],{"class":264},[254,154713,154714,154717,154720],{"class":256,"line":1793},[254,154715,154716],{"class":264},"map_chart.render(",[254,154718,154719],{"class":369},"\"map_sales.html\"",[254,154721,271],{"class":264},[14,154723,154724],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[34,154726,154728],{"id":154727},"_129-项目拆分建议","12.9 项目拆分建议",[14,154730,154731],{},"当代码超过一个文件时，可以这样组织：",[245,154733,154736],{"className":154734,"code":154735,"language":5328,"meta":174},[5326],"sales_project\u002F\n  main.py\n  data\u002F\n    sales.json\n  services\u002F\n    __init__.py\n    sales_service.py\n  charts\u002F\n    __init__.py\n    chart_builder.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n",[251,154737,154735],{"__ignoreMap":174},[14,154739,154740],{},"职责：",[21,154742,154743,154749,154755,154761],{},[24,154744,154745,154748],{},[251,154746,154747],{},"main.py","：程序入口。",[24,154750,154751,154754],{},[251,154752,154753],{},"file_utils.py","：读写 JSON。",[24,154756,154757,154760],{},[251,154758,154759],{},"sales_service.py","：统计销售数据。",[24,154762,154763,154766],{},[251,154764,154765],{},"chart_builder.py","：生成图表。",[34,154768,154770],{"id":154769},"_1210-python基础复习清单","12.10 Python基础复习清单",[14,154772,154773],{},"语法基础：",[21,154775,154776,154779,154782,154785],{},[24,154777,154778],{},"会写变量、注释、输入输出。",[24,154780,154781],{},"会使用 int、float、str、bool。",[24,154783,154784],{},"会做类型转换。",[24,154786,154787],{},"会使用 f-string 格式化输出。",[14,154789,154790],{},"流程控制：",[21,154792,154793,154799,154805,154813],{},[24,154794,154795,154796,28526],{},"会写 ",[251,154797,154798],{},"if elif else",[24,154800,154795,154801,101159,154803,28526],{},[251,154802,108804],{},[251,154804,3165],{},[24,154806,154807,154808,101159,154810,28526],{},"理解 ",[251,154809,2193],{},[251,154811,154812],{},"continue",[24,154814,154815],{},"能写嵌套循环。",[14,154817,154818],{},"函数：",[21,154820,154821,154824,154827,154830],{},[24,154822,154823],{},"会定义和调用函数。",[24,154825,154826],{},"理解参数和返回值。",[24,154828,154829],{},"知道局部变量和全局变量。",[24,154831,154832],{},"会使用默认参数、关键字参数、不定长参数。",[14,154834,154835],{},"容器：",[21,154837,154838,154841,154844,154847,154850],{},[24,154839,154840],{},"会使用列表增删改查。",[24,154842,154843],{},"会遍历列表、字典。",[24,154845,154846],{},"会使用切片。",[24,154848,154849],{},"会用集合去重。",[24,154851,154852],{},"会处理列表嵌套字典。",[14,154854,154855],{},"文件和模块：",[21,154857,154858,154861,154864,154867,154870],{},[24,154859,154860],{},"会读写文本文件。",[24,154862,154863],{},"会读写 JSON。",[24,154865,154866],{},"会捕获常见异常。",[24,154868,154869],{},"会导入模块和第三方包。",[24,154871,154872],{},"会创建简单包结构。",[14,154874,154875],{},"项目能力：",[21,154877,154878,154881,154884,154887,154890],{},[24,154879,154880],{},"能把代码拆成函数。",[24,154882,154883],{},"能把数据保存到文件。",[24,154885,154886],{},"能处理用户输入错误。",[24,154888,154889],{},"能写一个完整菜单程序。",[24,154891,154892],{},"能用 pyecharts 生成图表。",[34,154894,154896],{"id":154895},"_1211-推荐练习顺序","12.11 推荐练习顺序",[21,154898,154899,154902,154905,154908,154911,154914,154917,154920],{},[24,154900,154901],{},"猜数字游戏。",[24,154903,154904],{},"ATM 菜单程序。",[24,154906,154907],{},"学生成绩统计。",[24,154909,154910],{},"学生管理系统函数版。",[24,154912,154913],{},"学生管理系统文件持久化版。",[24,154915,154916],{},"学生管理系统面向对象版。",[24,154918,154919],{},"销售数据统计。",[24,154921,154922],{},"销售数据可视化。",[34,154924,154926],{"id":154925},"_1212-常见学习误区","12.12 常见学习误区",[21,154928,154929,154932,154935,154938,154941,154944,154947],{},[24,154930,154931],{},"只看视频不敲代码。",[24,154933,154934],{},"一报错就复制错误去搜，不先读报错位置。",[24,154936,154937],{},"变量名随便写，后续自己看不懂。",[24,154939,154940],{},"所有代码都写在一个文件一个函数里。",[24,154942,154943],{},"不保存练习代码，复习时没有材料。",[24,154945,154946],{},"还没掌握列表字典就急着学框架。",[24,154948,154949],{},"不会读官方文档，只依赖教程。",[34,154951,154953],{"id":154952},"_1213-如何读报错","12.13 如何读报错",[14,154955,154956],{},"报错通常从下往上看最后几行。",[14,154958,15276],{},[245,154960,154963],{"className":154961,"code":154962,"language":5328,"meta":174},[5326],"ValueError: invalid literal for int() with base 10: 'abc'\n",[251,154964,154962],{"__ignoreMap":174},[14,154966,24740],{},[21,154968,154969,154975,154985],{},[24,154970,154971,154972,28526],{},"异常类型是 ",[251,154973,154974],{},"ValueError",[24,154976,107486,154977,154980,154981,154984],{},[251,154978,154979],{},"int()"," 无法把 ",[251,154982,154983],{},"'abc'"," 转成整数。",[24,154986,154987],{},"应该检查输入内容或增加异常处理。",[14,154989,154990],{},"再看文件名和行号：",[245,154992,154995],{"className":154993,"code":154994,"language":5328,"meta":174},[5326],"File \"main.py\", line 10, in \u003Cmodule>\n",[251,154996,154994],{"__ignoreMap":174},[14,154998,154999,155000,155002],{},"表示错误发生在 ",[251,155001,154747],{}," 第 10 行。",[34,155004,155006],{"id":155005},"_1214-后续学习方向","12.14 后续学习方向",[14,155008,155009],{},"Python 基础完成后，可以按兴趣选择方向：",[21,155011,155012,155024,155033,155045,155056,155065,155075],{},[24,155013,155014,155015,477,155018,477,155021,28526],{},"自动化办公：",[251,155016,155017],{},"openpyxl",[251,155019,155020],{},"python-docx",[251,155022,155023],{},"pdfplumber",[24,155025,155026,155027,477,155029,477,155031,28526],{},"数据分析：",[251,155028,100767],{},[251,155030,146325],{},[251,155032,146333],{},[24,155034,155035,155036,477,155039,477,155042,28526],{},"Web 后端：",[251,155037,155038],{},"Flask",[251,155040,155041],{},"FastAPI",[251,155043,155044],{},"Django",[24,155046,155047,155048,477,155050,477,155053,28526],{},"爬虫：",[251,155049,146310],{},[251,155051,155052],{},"BeautifulSoup",[251,155054,155055],{},"Scrapy",[24,155057,155058,155059,477,155061,155064],{},"测试开发：",[251,155060,146357],{},[251,155062,155063],{},"selenium","、接口测试。",[24,155066,155067,155068,477,155070,477,155072,28526],{},"人工智能：",[251,155069,100767],{},[251,155071,146325],{},[251,155073,155074],{},"pytorch",[24,155076,155077,155078,477,155080,477,155083,28526],{},"运维脚本：",[251,155079,145926],{},[251,155081,155082],{},"subprocess",[251,155084,155085],{},"paramiko",[14,155087,155088],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[34,155090,155092],{"id":155091},"_1215-结课练习","12.15 结课练习",[21,155094,155095,155098,155101,155104,155107,155110,155113,155116],{},[24,155096,155097],{},"完成函数版学生管理系统。",[24,155099,155100],{},"给学生管理系统增加 JSON 持久化。",[24,155102,155103],{},"给学生管理系统增加异常处理。",[24,155105,155106],{},"把学生管理系统改成面向对象版。",[24,155108,155109],{},"使用 pyecharts 绘制学生成绩柱状图。",[24,155111,155112],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[24,155114,155115],{},"按品类统计销售额并绘制柱状图。",[24,155117,155118],{},"写一份自己的 Python 学习路线图。",[5267,155120,155121],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":174,"searchDepth":175,"depth":175,"links":155123},[155124,155125,155128,155129,155130,155136,155137,155138,155139,155140,155141,155142,155143,155144,155145],{"id":151840,"depth":175,"text":151841},{"id":151890,"depth":175,"text":151891,"children":155126},[155127],{"id":151894,"depth":1319,"text":151895},{"id":151933,"depth":175,"text":151934},{"id":153407,"depth":175,"text":153408},{"id":153745,"depth":175,"text":153746,"children":155131},[155132,155133,155134,155135],{"id":153749,"depth":1319,"text":153750},{"id":153889,"depth":1319,"text":153890},{"id":153979,"depth":1319,"text":153980},{"id":154065,"depth":1319,"text":154066},{"id":154106,"depth":175,"text":154107},{"id":154299,"depth":175,"text":154300},{"id":154536,"depth":175,"text":154537},{"id":154727,"depth":175,"text":154728},{"id":154769,"depth":175,"text":154770},{"id":154895,"depth":175,"text":154896},{"id":154925,"depth":175,"text":154926},{"id":154952,"depth":175,"text":154953},{"id":155005,"depth":175,"text":155006},{"id":155091,"depth":175,"text":155092},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":151832,"description":23518},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":155152,"title":155153,"body":155154,"description":23518,"extension":181,"meta":157623,"navigation":184,"path":157624,"seo":157625,"stem":157626,"__hash__":157627},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155155,"toc":157598},[155156,155159,155163,155166,155169,155189,155192,155215,155218,155221,155243,155246,155268,155272,155275,155315,155318,155439,155443,155446,155486,155489,155513,155516,155520,155523,155537,155570,155573,155608,155611,155634,155637,155670,155673,155675,155681,155756,155759,155765,155782,155822,155826,155829,155875,155877,155915,155918,155953,155956,155991,155994,156026,156029,156048,156052,156056,156169,156171,156246,156250,156296,156299,156325,156334,156338,156341,156404,156412,156440,156444,156484,156549,156553,156556,156595,156598,156643,156646,156707,156711,156738,156741,156769,156772,156776,156780,156845,156848,156886,156889,156921,156925,157024,157028,157031,157104,157107,157155,157159,157165,157205,157208,157255,157258,157307,157311,157313,157327,157329,157510,157514,157541,157561,157568,157572,157589,157595],[10,155157,155153],{"id":155158},"_2-基础语法变量与字符串",[34,155160,155162],{"id":155161},"_21-注释","2.1 注释",[14,155164,155165],{},"注释是给人看的说明文字，不会被 Python 执行。",[14,155167,155168],{},"单行注释：",[245,155170,155172],{"className":30519,"code":155171,"language":30521,"meta":174,"style":174},"# 这是单行注释\nprint(\"hello\")\n",[251,155173,155174,155179],{"__ignoreMap":174},[254,155175,155176],{"class":256,"line":257},[254,155177,155178],{"class":323},"# 这是单行注释\n",[254,155180,155181,155183,155185,155187],{"class":256,"line":175},[254,155182,30556],{"class":313},[254,155184,265],{"class":264},[254,155186,5985],{"class":369},[254,155188,271],{"class":264},[14,155190,155191],{},"多行说明常用三引号：",[245,155193,155195],{"className":30519,"code":155194,"language":30521,"meta":174,"style":174},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[251,155196,155197,155201,155206,155211],{"__ignoreMap":174},[254,155198,155199],{"class":256,"line":257},[254,155200,95839],{"class":369},[254,155202,155203],{"class":256,"line":175},[254,155204,155205],{"class":369},"这是多行说明。\n",[254,155207,155208],{"class":256,"line":1319},[254,155209,155210],{"class":369},"常用于文件顶部说明、函数说明等。\n",[254,155212,155213],{"class":256,"line":1334},[254,155214,95839],{"class":369},[14,155216,155217],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[14,155219,155220],{},"不好：",[245,155222,155224],{"className":30519,"code":155223,"language":30521,"meta":174,"style":174},"# age 加 1\nage = age + 1\n",[251,155225,155226,155231],{"__ignoreMap":174},[254,155227,155228],{"class":256,"line":257},[254,155229,155230],{"class":323},"# age 加 1\n",[254,155232,155233,155235,155237,155239,155241],{"class":256,"line":175},[254,155234,146686],{"class":264},[254,155236,310],{"class":260},[254,155238,15848],{"class":264},[254,155240,745],{"class":260},[254,155242,55840],{"class":313},[14,155244,155245],{},"较好：",[245,155247,155249],{"className":30519,"code":155248,"language":30521,"meta":174,"style":174},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[251,155250,155251,155256],{"__ignoreMap":174},[254,155252,155253],{"class":256,"line":257},[254,155254,155255],{"class":323},"# 用户过完生日后，年龄增加一岁\n",[254,155257,155258,155260,155262,155264,155266],{"class":256,"line":175},[254,155259,146686],{"class":264},[254,155261,310],{"class":260},[254,155263,15848],{"class":264},[254,155265,745],{"class":260},[254,155267,55840],{"class":313},[34,155269,155271],{"id":155270},"_22-字面量","2.2 字面量",[14,155273,155274],{},"字面量就是代码中直接写出来的数据。",[245,155276,155278],{"className":30519,"code":155277,"language":30521,"meta":174,"style":174},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[251,155279,155280,155287,155294,155301,155308],{"__ignoreMap":174},[254,155281,155282,155284],{"class":256,"line":257},[254,155283,575],{"class":313},[254,155285,155286],{"class":323},"          # 整数\n",[254,155288,155289,155291],{"class":256,"line":175},[254,155290,314],{"class":313},[254,155292,155293],{"class":323},"         # 小数\n",[254,155295,155296,155298],{"class":256,"line":1319},[254,155297,5985],{"class":369},[254,155299,155300],{"class":323},"      # 字符串\n",[254,155302,155303,155305],{"class":256,"line":1334},[254,155304,31617],{"class":313},[254,155306,155307],{"class":323},"         # 布尔值\n",[254,155309,155310,155312],{"class":256,"line":1340},[254,155311,95827],{"class":313},[254,155313,155314],{"class":323},"         # 空值\n",[14,155316,155317],{},"常见字面量类型：",[402,155319,155320,155330],{},[405,155321,155322],{},[408,155323,155324,155326,155328],{},[411,155325,23878],{},[411,155327,27633],{},[411,155329,26010],{},[449,155331,155332,155343,155354,155365,155377,155389,155401,155414,155426],{},[408,155333,155334,155336,155340],{},[454,155335,268],{},[454,155337,155338],{},[251,155339,575],{},[454,155341,155342],{},"整数",[408,155344,155345,155347,155351],{},[454,155346,304],{},[454,155348,155349],{},[251,155350,314],{},[454,155352,155353],{},"浮点数",[408,155355,155356,155358,155362],{},[454,155357,1439],{},[454,155359,155360],{},[251,155361,5985],{},[454,155363,155364],{},"字符串",[408,155366,155367,155369,155375],{},[454,155368,1494],{},[454,155370,155371,477,155373],{},[251,155372,31617],{},[251,155374,34128],{},[454,155376,66156],{},[408,155378,155379,155382,155386],{},[454,155380,155381],{},"NoneType",[454,155383,155384],{},[251,155385,95827],{},[454,155387,155388],{},"空值",[408,155390,155391,155393,155398],{},[454,155392,154210],{},[454,155394,155395],{},[251,155396,155397],{},"[1, 2, 3]",[454,155399,155400],{},"列表",[408,155402,155403,155406,155411],{},[454,155404,155405],{},"tuple",[454,155407,155408],{},[251,155409,155410],{},"(1, 2, 3)",[454,155412,155413],{},"元组",[408,155415,155416,155418,155423],{},[454,155417,114687],{},[454,155419,155420],{},[251,155421,155422],{},"{\"name\": \"张三\"}",[454,155424,155425],{},"字典",[408,155427,155428,155431,155436],{},[454,155429,155430],{},"set",[454,155432,155433],{},[251,155434,155435],{},"{1, 2, 3}",[454,155437,155438],{},"集合",[34,155440,155442],{"id":155441},"_23-变量","2.3 变量",[14,155444,155445],{},"变量是保存数据的名字。",[245,155447,155449],{"className":30519,"code":155448,"language":30521,"meta":174,"style":174},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[251,155450,155451,155459,155467,155477],{"__ignoreMap":174},[254,155452,155453,155455,155457],{"class":256,"line":257},[254,155454,146676],{"class":264},[254,155456,310],{"class":260},[254,155458,149493],{"class":369},[254,155460,155461,155463,155465],{"class":256,"line":175},[254,155462,146686],{"class":264},[254,155464,310],{"class":260},[254,155466,146691],{"class":313},[254,155468,155469,155472,155474],{"class":256,"line":1319},[254,155470,155471],{"class":264},"height ",[254,155473,310],{"class":260},[254,155475,155476],{"class":313}," 1.75\n",[254,155478,155479,155482,155484],{"class":256,"line":1334},[254,155480,155481],{"class":264},"is_student ",[254,155483,310],{"class":260},[254,155485,153739],{"class":313},[14,155487,155488],{},"Python 的变量不需要提前声明类型：",[245,155490,155492],{"className":30519,"code":155491,"language":30521,"meta":174,"style":174},"score = 100\nscore = \"满分\"\n",[251,155493,155494,155504],{"__ignoreMap":174},[254,155495,155496,155499,155501],{"class":256,"line":257},[254,155497,155498],{"class":264},"score ",[254,155500,310],{"class":260},[254,155502,155503],{"class":313}," 100\n",[254,155505,155506,155508,155510],{"class":256,"line":175},[254,155507,155498],{"class":264},[254,155509,310],{"class":260},[254,155511,155512],{"class":369}," \"满分\"\n",[14,155514,155515],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[34,155517,155519],{"id":155518},"_24-变量命名规则","2.4 变量命名规则",[14,155521,155522],{},"硬性规则：",[21,155524,155525,155528,155531,155534],{},[24,155526,155527],{},"只能由字母、数字、下划线组成。",[24,155529,155530],{},"不能以数字开头。",[24,155532,155533],{},"不能使用 Python 关键字。",[24,155535,155536],{},"区分大小写。",[245,155538,155540],{"className":30519,"code":155539,"language":30521,"meta":174,"style":174},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[251,155541,155542,155551,155560],{"__ignoreMap":174},[254,155543,155544,155547,155549],{"class":256,"line":257},[254,155545,155546],{"class":264},"user_name ",[254,155548,310],{"class":260},[254,155550,146681],{"class":369},[254,155552,155553,155556,155558],{"class":256,"line":175},[254,155554,155555],{"class":264},"age2 ",[254,155557,310],{"class":260},[254,155559,146691],{"class":313},[254,155561,155562,155565,155567],{"class":256,"line":1319},[254,155563,155564],{"class":264},"_token ",[254,155566,310],{"class":260},[254,155568,155569],{"class":369}," \"abc\"\n",[14,155571,155572],{},"错误写法：",[245,155574,155576],{"className":30519,"code":155575,"language":30521,"meta":174,"style":174},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[251,155577,155578,155587,155599],{"__ignoreMap":174},[254,155579,155580,155583,155585],{"class":256,"line":257},[254,155581,155582],{"class":77544},"2age",[254,155584,13705],{"class":260},[254,155586,146691],{"class":313},[254,155588,155589,155591,155593,155595,155597],{"class":256,"line":175},[254,155590,131724],{"class":264},[254,155592,796],{"class":260},[254,155594,146676],{"class":264},[254,155596,310],{"class":260},[254,155598,146681],{"class":369},[254,155600,155601,155603,155605],{"class":256,"line":1319},[254,155602,14835],{"class":260},[254,155604,13705],{"class":260},[254,155606,155607],{"class":369}," \"一班\"\n",[14,155609,155610],{},"查看关键字：",[245,155612,155614],{"className":30519,"code":155613,"language":30521,"meta":174,"style":174},"import keyword\n\nprint(keyword.kwlist)\n",[251,155615,155616,155623,155627],{"__ignoreMap":174},[254,155617,155618,155620],{"class":256,"line":257},[254,155619,30533],{"class":260},[254,155621,155622],{"class":264}," keyword\n",[254,155624,155625],{"class":256,"line":175},[254,155626,2540],{"emptyLinePlaceholder":184},[254,155628,155629,155631],{"class":256,"line":1319},[254,155630,30556],{"class":313},[254,155632,155633],{"class":264},"(keyword.kwlist)\n",[14,155635,155636],{},"推荐命名风格：",[245,155638,155640],{"className":30519,"code":155639,"language":30521,"meta":174,"style":174},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[251,155641,155642,155651,155661],{"__ignoreMap":174},[254,155643,155644,155647,155649],{"class":256,"line":257},[254,155645,155646],{"class":264},"student_name ",[254,155648,310],{"class":260},[254,155650,149493],{"class":369},[254,155652,155653,155656,155658],{"class":256,"line":175},[254,155654,155655],{"class":264},"total_price ",[254,155657,310],{"class":260},[254,155659,155660],{"class":313}," 99.8\n",[254,155662,155663,155666,155668],{"class":256,"line":1319},[254,155664,155665],{"class":264},"is_finished ",[254,155667,310],{"class":260},[254,155669,125947],{"class":313},[14,155671,155672],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[34,155674,50873],{"id":50872},[14,155676,104507,155677,155680],{},[251,155678,155679],{},"type()"," 查看数据类型：",[245,155682,155684],{"className":30519,"code":155683,"language":30521,"meta":174,"style":174},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[251,155685,155686,155700,155714,155728,155742],{"__ignoreMap":174},[254,155687,155688,155690,155692,155694,155696,155698],{"class":256,"line":257},[254,155689,30556],{"class":313},[254,155691,265],{"class":264},[254,155693,103248],{"class":313},[254,155695,265],{"class":264},[254,155697,575],{"class":313},[254,155699,30638],{"class":264},[254,155701,155702,155704,155706,155708,155710,155712],{"class":256,"line":175},[254,155703,30556],{"class":313},[254,155705,265],{"class":264},[254,155707,103248],{"class":313},[254,155709,265],{"class":264},[254,155711,314],{"class":313},[254,155713,30638],{"class":264},[254,155715,155716,155718,155720,155722,155724,155726],{"class":256,"line":1319},[254,155717,30556],{"class":313},[254,155719,265],{"class":264},[254,155721,103248],{"class":313},[254,155723,265],{"class":264},[254,155725,5985],{"class":369},[254,155727,30638],{"class":264},[254,155729,155730,155732,155734,155736,155738,155740],{"class":256,"line":1334},[254,155731,30556],{"class":313},[254,155733,265],{"class":264},[254,155735,103248],{"class":313},[254,155737,265],{"class":264},[254,155739,31617],{"class":313},[254,155741,30638],{"class":264},[254,155743,155744,155746,155748,155750,155752,155754],{"class":256,"line":1340},[254,155745,30556],{"class":313},[254,155747,265],{"class":264},[254,155749,103248],{"class":313},[254,155751,265],{"class":264},[254,155753,95827],{"class":313},[254,155755,30638],{"class":264},[14,155757,155758],{},"输出类似：",[245,155760,155763],{"className":155761,"code":155762,"language":5328,"meta":174},[5326],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[251,155764,155762],{"__ignoreMap":174},[14,155766,9166,155767,107424,155769,155771,155772,155774,155775,21641,155777,155774,155779,155781],{},[251,155768,1494],{},[251,155770,268],{}," 的子类，",[251,155773,31617],{}," 可以当作 ",[251,155776,482],{},[251,155778,34128],{},[251,155780,456],{},"，但业务代码中不要滥用。",[245,155783,155785],{"className":30519,"code":155784,"language":30521,"meta":174,"style":174},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[251,155786,155787,155805],{"__ignoreMap":174},[254,155788,155789,155791,155793,155795,155797,155799,155802],{"class":256,"line":257},[254,155790,30556],{"class":313},[254,155792,265],{"class":264},[254,155794,31617],{"class":313},[254,155796,45707],{"class":260},[254,155798,25259],{"class":313},[254,155800,155801],{"class":264},")   ",[254,155803,155804],{"class":323},"# 2\n",[254,155806,155807,155809,155811,155813,155815,155817,155819],{"class":256,"line":175},[254,155808,30556],{"class":313},[254,155810,265],{"class":264},[254,155812,34128],{"class":313},[254,155814,45707],{"class":260},[254,155816,25259],{"class":313},[254,155818,45949],{"class":264},[254,155820,155821],{"class":323},"# 1\n",[34,155823,155825],{"id":155824},"_26-类型转换","2.6 类型转换",[14,155827,155828],{},"常用转换函数：",[245,155830,155832],{"className":30519,"code":155831,"language":30521,"meta":174,"style":174},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[251,155833,155834,155844,155855,155865],{"__ignoreMap":174},[254,155835,155836,155838,155840,155842],{"class":256,"line":257},[254,155837,268],{"class":313},[254,155839,265],{"class":264},[254,155841,54457],{"class":369},[254,155843,271],{"class":264},[254,155845,155846,155848,155850,155853],{"class":256,"line":175},[254,155847,304],{"class":313},[254,155849,265],{"class":264},[254,155851,155852],{"class":369},"\"3.14\"",[254,155854,271],{"class":264},[254,155856,155857,155859,155861,155863],{"class":256,"line":1319},[254,155858,1439],{"class":313},[254,155860,265],{"class":264},[254,155862,575],{"class":313},[254,155864,271],{"class":264},[254,155866,155867,155869,155871,155873],{"class":256,"line":1334},[254,155868,1494],{"class":313},[254,155870,265],{"class":264},[254,155872,482],{"class":313},[254,155874,271],{"class":264},[14,155876,15276],{},[245,155878,155880],{"className":30519,"code":155879,"language":30521,"meta":174,"style":174},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[251,155881,155882,155891,155902],{"__ignoreMap":174},[254,155883,155884,155886,155888],{"class":256,"line":257},[254,155885,146686],{"class":264},[254,155887,310],{"class":260},[254,155889,155890],{"class":369}," \"18\"\n",[254,155892,155893,155895,155897,155899],{"class":256,"line":175},[254,155894,146686],{"class":264},[254,155896,310],{"class":260},[254,155898,2522],{"class":313},[254,155900,155901],{"class":264},"(age)\n",[254,155903,155904,155906,155909,155911,155913],{"class":256,"line":1319},[254,155905,30556],{"class":313},[254,155907,155908],{"class":264},"(age ",[254,155910,745],{"class":260},[254,155912,25259],{"class":313},[254,155914,271],{"class":264},[14,155916,155917],{},"输入得到的内容永远是字符串：",[245,155919,155921],{"className":30519,"code":155920,"language":30521,"meta":174,"style":174},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[251,155922,155923,155939],{"__ignoreMap":174},[254,155924,155925,155928,155930,155932,155934,155937],{"class":256,"line":257},[254,155926,155927],{"class":264},"num ",[254,155929,310],{"class":260},[254,155931,60746],{"class":313},[254,155933,265],{"class":264},[254,155935,155936],{"class":369},"\"请输入数字:\"",[254,155938,271],{"class":264},[254,155940,155941,155943,155945,155947,155950],{"class":256,"line":175},[254,155942,30556],{"class":313},[254,155944,265],{"class":264},[254,155946,103248],{"class":313},[254,155948,155949],{"class":264},"(num))  ",[254,155951,155952],{"class":323},"# str\n",[14,155954,155955],{},"如果要做数学运算，必须转换：",[245,155957,155959],{"className":30519,"code":155958,"language":30521,"meta":174,"style":174},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[251,155960,155961,155979],{"__ignoreMap":174},[254,155962,155963,155965,155967,155969,155971,155973,155975,155977],{"class":256,"line":257},[254,155964,155927],{"class":264},[254,155966,310],{"class":260},[254,155968,2522],{"class":313},[254,155970,265],{"class":264},[254,155972,53962],{"class":313},[254,155974,265],{"class":264},[254,155976,155936],{"class":369},[254,155978,30638],{"class":264},[254,155980,155981,155983,155985,155987,155989],{"class":256,"line":175},[254,155982,30556],{"class":313},[254,155984,45760],{"class":264},[254,155986,745],{"class":260},[254,155988,2178],{"class":313},[254,155990,271],{"class":264},[14,155992,155993],{},"常见错误：",[245,155995,155997],{"className":30519,"code":155996,"language":30521,"meta":174,"style":174},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[251,155998,155999,156012],{"__ignoreMap":174},[254,156000,156001,156003,156005,156007,156009],{"class":256,"line":257},[254,156002,268],{"class":313},[254,156004,265],{"class":264},[254,156006,155852],{"class":369},[254,156008,155801],{"class":264},[254,156010,156011],{"class":323},"# 错误\n",[254,156013,156014,156016,156018,156021,156024],{"class":256,"line":175},[254,156015,268],{"class":313},[254,156017,265],{"class":264},[254,156019,156020],{"class":369},"\"abc\"",[254,156022,156023],{"class":264},")    ",[254,156025,156011],{"class":323},[14,156027,156028],{},"正确写法：",[245,156030,156032],{"className":30519,"code":156031,"language":30521,"meta":174,"style":174},"num = float(\"3.14\")\n",[251,156033,156034],{"__ignoreMap":174},[254,156035,156036,156038,156040,156042,156044,156046],{"class":256,"line":257},[254,156037,155927],{"class":264},[254,156039,310],{"class":260},[254,156041,109938],{"class":313},[254,156043,265],{"class":264},[254,156045,155852],{"class":369},[254,156047,271],{"class":264},[34,156049,156051],{"id":156050},"_27-运算符","2.7 运算符",[225,156053,156055],{"id":156054},"_271-算术运算符","2.7.1 算术运算符",[402,156057,156058,156069],{},[405,156059,156060],{},[408,156061,156062,156065,156067],{},[411,156063,156064],{},"运算符",[411,156066,26010],{},[411,156068,27633],{},[449,156070,156071,156085,156099,156113,156127,156141,156155],{},[408,156072,156073,156077,156080],{},[454,156074,156075],{},[251,156076,745],{},[454,156078,156079],{},"加法",[454,156081,156082],{},[251,156083,156084],{},"1 + 2",[408,156086,156087,156091,156094],{},[454,156088,156089],{},[251,156090,796],{},[454,156092,156093],{},"减法",[454,156095,156096],{},[251,156097,156098],{},"5 - 3",[408,156100,156101,156105,156108],{},[454,156102,156103],{},[251,156104,719],{},[454,156106,156107],{},"乘法",[454,156109,156110],{},[251,156111,156112],{},"2 * 3",[408,156114,156115,156119,156122],{},[454,156116,156117],{},[251,156118,848],{},[454,156120,156121],{},"除法，结果是浮点数",[454,156123,156124],{},[251,156125,156126],{},"5 \u002F 2",[408,156128,156129,156133,156136],{},[454,156130,156131],{},[251,156132,33470],{},[454,156134,156135],{},"整除",[454,156137,156138],{},[251,156139,156140],{},"5 \u002F\u002F 2",[408,156142,156143,156147,156150],{},[454,156144,156145],{},[251,156146,592],{},[454,156148,156149],{},"取余",[454,156151,156152],{},[251,156153,156154],{},"5 % 2",[408,156156,156157,156161,156164],{},[454,156158,156159],{},[251,156160,10802],{},[454,156162,156163],{},"幂运算",[454,156165,156166],{},[251,156167,156168],{},"2 ** 3",[14,156170,15276],{},[245,156172,156174],{"className":30519,"code":156173,"language":30521,"meta":174,"style":174},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[251,156175,156176,156194,156211,156228],{"__ignoreMap":174},[254,156177,156178,156180,156182,156184,156187,156189,156191],{"class":256,"line":257},[254,156179,30556],{"class":313},[254,156181,265],{"class":264},[254,156183,583],{"class":313},[254,156185,156186],{"class":260}," \u002F",[254,156188,14896],{"class":313},[254,156190,155801],{"class":264},[254,156192,156193],{"class":323},"# 2.5\n",[254,156195,156196,156198,156200,156202,156205,156207,156209],{"class":256,"line":175},[254,156197,30556],{"class":313},[254,156199,265],{"class":264},[254,156201,583],{"class":313},[254,156203,156204],{"class":260}," \u002F\u002F",[254,156206,14896],{"class":313},[254,156208,45949],{"class":264},[254,156210,155804],{"class":323},[254,156212,156213,156215,156217,156219,156222,156224,156226],{"class":256,"line":1319},[254,156214,30556],{"class":313},[254,156216,265],{"class":264},[254,156218,583],{"class":313},[254,156220,156221],{"class":260}," %",[254,156223,14896],{"class":313},[254,156225,155801],{"class":264},[254,156227,155821],{"class":323},[254,156229,156230,156232,156234,156236,156239,156241,156243],{"class":256,"line":1334},[254,156231,30556],{"class":313},[254,156233,265],{"class":264},[254,156235,342],{"class":313},[254,156237,156238],{"class":260}," **",[254,156240,78211],{"class":313},[254,156242,45949],{"class":264},[254,156244,156245],{"class":323},"# 8\n",[225,156247,156249],{"id":156248},"_272-赋值运算符","2.7.2 赋值运算符",[245,156251,156253],{"className":30519,"code":156252,"language":30521,"meta":174,"style":174},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[251,156254,156255,156263,156271,156279,156287],{"__ignoreMap":174},[254,156256,156257,156259,156261],{"class":256,"line":257},[254,156258,155927],{"class":264},[254,156260,310],{"class":260},[254,156262,58569],{"class":313},[254,156264,156265,156267,156269],{"class":256,"line":175},[254,156266,155927],{"class":264},[254,156268,9618],{"class":260},[254,156270,54568],{"class":313},[254,156272,156273,156275,156277],{"class":256,"line":1319},[254,156274,155927],{"class":264},[254,156276,150392],{"class":260},[254,156278,47864],{"class":313},[254,156280,156281,156283,156285],{"class":256,"line":1334},[254,156282,155927],{"class":264},[254,156284,137288],{"class":260},[254,156286,120176],{"class":313},[254,156288,156289,156291,156294],{"class":256,"line":1340},[254,156290,155927],{"class":264},[254,156292,156293],{"class":260},"\u002F=",[254,156295,47864],{"class":313},[14,156297,156298],{},"等价关系：",[245,156300,156302],{"className":30519,"code":156301,"language":30521,"meta":174,"style":174},"num += 1\nnum = num + 1\n",[251,156303,156304,156312],{"__ignoreMap":174},[254,156305,156306,156308,156310],{"class":256,"line":257},[254,156307,155927],{"class":264},[254,156309,9618],{"class":260},[254,156311,55840],{"class":313},[254,156313,156314,156316,156318,156321,156323],{"class":256,"line":175},[254,156315,155927],{"class":264},[254,156317,310],{"class":260},[254,156319,156320],{"class":264}," num ",[254,156322,745],{"class":260},[254,156324,55840],{"class":313},[14,156326,156327,156328,101159,156331,28526],{},"Python 没有 ",[251,156329,156330],{},"num++",[251,156332,156333],{},"num--",[225,156335,156337],{"id":156336},"_273-比较运算符","2.7.3 比较运算符",[14,156339,156340],{},"比较运算结果是布尔值。",[245,156342,156344],{"className":30519,"code":156343,"language":30521,"meta":174,"style":174},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[251,156345,156346,156360,156375,156389],{"__ignoreMap":174},[254,156347,156348,156350,156352,156354,156356,156358],{"class":256,"line":257},[254,156349,30556],{"class":313},[254,156351,265],{"class":264},[254,156353,710],{"class":313},[254,156355,26363],{"class":260},[254,156357,2288],{"class":313},[254,156359,271],{"class":264},[254,156361,156362,156364,156366,156368,156371,156373],{"class":256,"line":175},[254,156363,30556],{"class":313},[254,156365,265],{"class":264},[254,156367,710],{"class":313},[254,156369,156370],{"class":260}," >=",[254,156372,2178],{"class":313},[254,156374,271],{"class":264},[254,156376,156377,156379,156381,156383,156385,156387],{"class":256,"line":1319},[254,156378,30556],{"class":313},[254,156380,265],{"class":264},[254,156382,710],{"class":313},[254,156384,101700],{"class":260},[254,156386,2223],{"class":313},[254,156388,271],{"class":264},[254,156390,156391,156393,156395,156397,156400,156402],{"class":256,"line":1334},[254,156392,30556],{"class":313},[254,156394,265],{"class":264},[254,156396,710],{"class":313},[254,156398,156399],{"class":260}," !=",[254,156401,2223],{"class":313},[254,156403,271],{"class":264},[14,156405,156406,156407,156409,156410,28526],{},"注意：判断相等用 ",[251,156408,3089],{},"，赋值用 ",[251,156411,310],{},[245,156413,156415],{"className":30519,"code":156414,"language":30521,"meta":174,"style":174},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[251,156416,156417,156429],{"__ignoreMap":174},[254,156418,156419,156421,156423,156426],{"class":256,"line":257},[254,156420,146686],{"class":264},[254,156422,310],{"class":260},[254,156424,156425],{"class":313}," 18",[254,156427,156428],{"class":323},"       # 赋值\n",[254,156430,156431,156433,156435,156437],{"class":256,"line":175},[254,156432,146686],{"class":264},[254,156434,3089],{"class":260},[254,156436,156425],{"class":313},[254,156438,156439],{"class":323},"      # 判断是否相等\n",[225,156441,156443],{"id":156442},"_274-逻辑运算符","2.7.4 逻辑运算符",[402,156445,156446,156454],{},[405,156447,156448],{},[408,156449,156450,156452],{},[411,156451,156064],{},[411,156453,26010],{},[449,156455,156456,156465,156474],{},[408,156457,156458,156462],{},[454,156459,156460],{},[251,156461,30603],{},[454,156463,156464],{},"并且",[408,156466,156467,156471],{},[454,156468,156469],{},[251,156470,115231],{},[454,156472,156473],{},"或者",[408,156475,156476,156481],{},[454,156477,156478],{},[251,156479,156480],{},"not",[454,156482,156483],{},"取反",[245,156485,156487],{"className":30519,"code":156486,"language":30521,"meta":174,"style":174},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[251,156488,156489,156497,156506,156510,156525,156539],{"__ignoreMap":174},[254,156490,156491,156493,156495],{"class":256,"line":257},[254,156492,146686],{"class":264},[254,156494,310],{"class":260},[254,156496,88206],{"class":313},[254,156498,156499,156502,156504],{"class":256,"line":175},[254,156500,156501],{"class":264},"has_ticket ",[254,156503,310],{"class":260},[254,156505,153739],{"class":313},[254,156507,156508],{"class":256,"line":1319},[254,156509,2540],{"emptyLinePlaceholder":184},[254,156511,156512,156514,156516,156518,156520,156522],{"class":256,"line":1334},[254,156513,30556],{"class":313},[254,156515,155908],{"class":264},[254,156517,1850],{"class":260},[254,156519,156425],{"class":313},[254,156521,120569],{"class":260},[254,156523,156524],{"class":264}," has_ticket)\n",[254,156526,156527,156529,156531,156533,156535,156537],{"class":256,"line":1340},[254,156528,30556],{"class":313},[254,156530,155908],{"class":264},[254,156532,1174],{"class":260},[254,156534,156425],{"class":313},[254,156536,114342],{"class":260},[254,156538,156524],{"class":264},[254,156540,156541,156543,156545,156547],{"class":256,"line":1354},[254,156542,30556],{"class":313},[254,156544,265],{"class":264},[254,156546,156480],{"class":260},[254,156548,156524],{"class":264},[34,156550,156552],{"id":156551},"_28-字符串定义","2.8 字符串定义",[14,156554,156555],{},"三种常见写法：",[245,156557,156559],{"className":30519,"code":156558,"language":30521,"meta":174,"style":174},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[251,156560,156561,156571,156580,156590],{"__ignoreMap":174},[254,156562,156563,156566,156568],{"class":256,"line":257},[254,156564,156565],{"class":264},"name1 ",[254,156567,310],{"class":260},[254,156569,156570],{"class":369}," '小明'\n",[254,156572,156573,156576,156578],{"class":256,"line":175},[254,156574,156575],{"class":264},"name2 ",[254,156577,310],{"class":260},[254,156579,149493],{"class":369},[254,156581,156582,156585,156587],{"class":256,"line":1319},[254,156583,156584],{"class":264},"text ",[254,156586,310],{"class":260},[254,156588,156589],{"class":369}," \"\"\"这是多行字符串\n",[254,156591,156592],{"class":256,"line":1334},[254,156593,156594],{"class":369},"可以换行\"\"\"\n",[14,156596,156597],{},"字符串中包含引号：",[245,156599,156601],{"className":30519,"code":156600,"language":30521,"meta":174,"style":174},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[251,156602,156603,156613,156623],{"__ignoreMap":174},[254,156604,156605,156608,156610],{"class":256,"line":257},[254,156606,156607],{"class":264},"msg ",[254,156609,310],{"class":260},[254,156611,156612],{"class":369}," \"他说:'你好'\"\n",[254,156614,156615,156618,156620],{"class":256,"line":175},[254,156616,156617],{"class":264},"msg2 ",[254,156619,310],{"class":260},[254,156621,156622],{"class":369}," '他说:\"你好\"'\n",[254,156624,156625,156628,156630,156633,156636,156639,156641],{"class":256,"line":1319},[254,156626,156627],{"class":264},"msg3 ",[254,156629,310],{"class":260},[254,156631,156632],{"class":369}," \"他说:",[254,156634,156635],{"class":313},"\\\"",[254,156637,156638],{"class":369},"你好",[254,156640,156635],{"class":313},[254,156642,25274],{"class":369},[14,156644,156645],{},"常见转义字符：",[402,156647,156648,156657],{},[405,156649,156650],{},[408,156651,156652,156655],{},[411,156653,156654],{},"写法",[411,156656,100841],{},[449,156658,156659,156669,156678,156688,156697],{},[408,156660,156661,156666],{},[454,156662,156663],{},[251,156664,156665],{},"\\n",[454,156667,156668],{},"换行",[408,156670,156671,156675],{},[454,156672,156673],{},[251,156674,1370],{},[454,156676,156677],{},"制表符",[408,156679,156680,156685],{},[454,156681,156682],{},[251,156683,156684],{},"\\\\",[454,156686,156687],{},"反斜杠",[408,156689,156690,156694],{},[454,156691,156692],{},[251,156693,156635],{},[454,156695,156696],{},"双引号",[408,156698,156699,156704],{},[454,156700,156701],{},[251,156702,156703],{},"\\'",[454,156705,156706],{},"单引号",[34,156708,156710],{"id":156709},"_29-字符串拼接","2.9 字符串拼接",[245,156712,156714],{"className":30519,"code":156713,"language":30521,"meta":174,"style":174},"name = \"小明\"\nprint(\"你好，\" + name)\n",[251,156715,156716,156724],{"__ignoreMap":174},[254,156717,156718,156720,156722],{"class":256,"line":257},[254,156719,146676],{"class":264},[254,156721,310],{"class":260},[254,156723,149493],{"class":369},[254,156725,156726,156728,156730,156733,156735],{"class":256,"line":175},[254,156727,30556],{"class":313},[254,156729,265],{"class":264},[254,156731,156732],{"class":369},"\"你好，\"",[254,156734,45707],{"class":260},[254,156736,156737],{"class":264}," name)\n",[14,156739,156740],{},"字符串只能和字符串拼接：",[245,156742,156744],{"className":30519,"code":156743,"language":30521,"meta":174,"style":174},"age = 18\nprint(\"年龄:\" + str(age))\n",[251,156745,156746,156754],{"__ignoreMap":174},[254,156747,156748,156750,156752],{"class":256,"line":257},[254,156749,146686],{"class":264},[254,156751,310],{"class":260},[254,156753,146691],{"class":313},[254,156755,156756,156758,156760,156762,156764,156766],{"class":256,"line":175},[254,156757,30556],{"class":313},[254,156759,265],{"class":264},[254,156761,146657],{"class":369},[254,156763,45707],{"class":260},[254,156765,74060],{"class":313},[254,156767,156768],{"class":264},"(age))\n",[14,156770,156771],{},"更推荐使用格式化字符串。",[34,156773,156775],{"id":156774},"_210-字符串格式化","2.10 字符串格式化",[225,156777,156779],{"id":156778},"_2101-百分号格式化","2.10.1 百分号格式化",[245,156781,156783],{"className":30519,"code":156782,"language":30521,"meta":174,"style":174},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[251,156784,156785,156793,156801,156810,156814],{"__ignoreMap":174},[254,156786,156787,156789,156791],{"class":256,"line":257},[254,156788,146676],{"class":264},[254,156790,310],{"class":260},[254,156792,149493],{"class":369},[254,156794,156795,156797,156799],{"class":256,"line":175},[254,156796,146686],{"class":264},[254,156798,310],{"class":260},[254,156800,146691],{"class":313},[254,156802,156803,156805,156807],{"class":256,"line":1319},[254,156804,155498],{"class":264},[254,156806,310],{"class":260},[254,156808,156809],{"class":313}," 95.5\n",[254,156811,156812],{"class":256,"line":1334},[254,156813,2540],{"emptyLinePlaceholder":184},[254,156815,156816,156818,156820,156823,156826,156829,156832,156835,156838,156840,156842],{"class":256,"line":1340},[254,156817,30556],{"class":313},[254,156819,265],{"class":264},[254,156821,156822],{"class":369},"\"姓名:",[254,156824,156825],{"class":313},"%s",[254,156827,156828],{"class":369}," 年龄:",[254,156830,156831],{"class":313},"%d",[254,156833,156834],{"class":369}," 分数:",[254,156836,156837],{"class":313},"%.1f",[254,156839,515],{"class":369},[254,156841,156221],{"class":260},[254,156843,156844],{"class":264}," (name, age, score))\n",[14,156846,156847],{},"常用占位符：",[402,156849,156850,156859],{},[405,156851,156852],{},[408,156853,156854,156857],{},[411,156855,156856],{},"占位符",[411,156858,26010],{},[449,156860,156861,156869,156877],{},[408,156862,156863,156867],{},[454,156864,156865],{},[251,156866,156825],{},[454,156868,155364],{},[408,156870,156871,156875],{},[454,156872,156873],{},[251,156874,156831],{},[454,156876,155342],{},[408,156878,156879,156884],{},[454,156880,156881],{},[251,156882,156883],{},"%f",[454,156885,155353],{},[14,156887,156888],{},"精度控制：",[245,156890,156892],{"className":30519,"code":156891,"language":30521,"meta":174,"style":174},"price = 12.3456\nprint(\"%.2f\" % price)\n",[251,156893,156894,156903],{"__ignoreMap":174},[254,156895,156896,156898,156900],{"class":256,"line":257},[254,156897,146821],{"class":264},[254,156899,310],{"class":260},[254,156901,156902],{"class":313}," 12.3456\n",[254,156904,156905,156907,156909,156911,156914,156916,156918],{"class":256,"line":175},[254,156906,30556],{"class":313},[254,156908,265],{"class":264},[254,156910,515],{"class":369},[254,156912,156913],{"class":313},"%.2f",[254,156915,515],{"class":369},[254,156917,156221],{"class":260},[254,156919,156920],{"class":264}," price)\n",[225,156922,156924],{"id":156923},"_2102-format方法","2.10.2 format方法",[245,156926,156928],{"className":30519,"code":156927,"language":30521,"meta":174,"style":174},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[251,156929,156930,156938,156946,156950,156969,156989],{"__ignoreMap":174},[254,156931,156932,156934,156936],{"class":256,"line":257},[254,156933,146676],{"class":264},[254,156935,310],{"class":260},[254,156937,149493],{"class":369},[254,156939,156940,156942,156944],{"class":256,"line":175},[254,156941,146686],{"class":264},[254,156943,310],{"class":260},[254,156945,146691],{"class":313},[254,156947,156948],{"class":256,"line":1319},[254,156949,2540],{"emptyLinePlaceholder":184},[254,156951,156952,156954,156956,156958,156960,156962,156964,156966],{"class":256,"line":1334},[254,156953,30556],{"class":313},[254,156955,265],{"class":264},[254,156957,156822],{"class":369},[254,156959,32600],{"class":313},[254,156961,156828],{"class":369},[254,156963,32600],{"class":313},[254,156965,515],{"class":369},[254,156967,156968],{"class":264},".format(name, age))\n",[254,156970,156971,156973,156975,156977,156980,156982,156985,156987],{"class":256,"line":1340},[254,156972,30556],{"class":313},[254,156974,265],{"class":264},[254,156976,156822],{"class":369},[254,156978,156979],{"class":313},"{0}",[254,156981,156828],{"class":369},[254,156983,156984],{"class":313},"{1}",[254,156986,515],{"class":369},[254,156988,156968],{"class":264},[254,156990,156991,156993,156995,156997,157000,157002,157005,157007,157010,157012,157014,157017,157019,157021],{"class":256,"line":1354},[254,156992,30556],{"class":313},[254,156994,265],{"class":264},[254,156996,156822],{"class":369},[254,156998,156999],{"class":313},"{name}",[254,157001,156828],{"class":369},[254,157003,157004],{"class":313},"{age}",[254,157006,515],{"class":369},[254,157008,157009],{"class":264},".format(",[254,157011,79951],{"class":5357},[254,157013,310],{"class":260},[254,157015,157016],{"class":264},"name, ",[254,157018,70362],{"class":5357},[254,157020,310],{"class":260},[254,157022,157023],{"class":264},"age))\n",[225,157025,157027],{"id":157026},"_2103-f-string","2.10.3 f-string",[14,157029,157030],{},"推荐写法：",[245,157032,157034],{"className":30519,"code":157033,"language":30521,"meta":174,"style":174},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[251,157035,157036,157044,157052,157060,157064],{"__ignoreMap":174},[254,157037,157038,157040,157042],{"class":256,"line":257},[254,157039,146676],{"class":264},[254,157041,310],{"class":260},[254,157043,149493],{"class":369},[254,157045,157046,157048,157050],{"class":256,"line":175},[254,157047,146686],{"class":264},[254,157049,310],{"class":260},[254,157051,146691],{"class":313},[254,157053,157054,157056,157058],{"class":256,"line":1319},[254,157055,155498],{"class":264},[254,157057,310],{"class":260},[254,157059,156809],{"class":313},[254,157061,157062],{"class":256,"line":1334},[254,157063,2540],{"emptyLinePlaceholder":184},[254,157065,157066,157068,157070,157072,157074,157076,157078,157080,157082,157084,157086,157088,157090,157092,157095,157098,157100,157102],{"class":256,"line":1340},[254,157067,30556],{"class":313},[254,157069,265],{"class":264},[254,157071,317],{"class":260},[254,157073,156822],{"class":369},[254,157075,1160],{"class":313},[254,157077,79951],{"class":264},[254,157079,1210],{"class":313},[254,157081,156828],{"class":369},[254,157083,1160],{"class":313},[254,157085,70362],{"class":264},[254,157087,1210],{"class":313},[254,157089,156834],{"class":369},[254,157091,1160],{"class":313},[254,157093,157094],{"class":264},"score",[254,157096,157097],{"class":260},":.1f",[254,157099,1210],{"class":313},[254,157101,515],{"class":369},[254,157103,271],{"class":264},[14,157105,157106],{},"表达式也可以放进去：",[245,157108,157110],{"className":30519,"code":157109,"language":30521,"meta":174,"style":174},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[251,157111,157112,157120,157128],{"__ignoreMap":174},[254,157113,157114,157116,157118],{"class":256,"line":257},[254,157115,146821],{"class":264},[254,157117,310],{"class":260},[254,157119,146826],{"class":313},[254,157121,157122,157124,157126],{"class":256,"line":175},[254,157123,146831],{"class":264},[254,157125,310],{"class":260},[254,157127,54568],{"class":313},[254,157129,157130,157132,157134,157136,157139,157141,157143,157145,157148,157150,157153],{"class":256,"line":1319},[254,157131,30556],{"class":313},[254,157133,265],{"class":264},[254,157135,317],{"class":260},[254,157137,157138],{"class":369},"\"总价:",[254,157140,1160],{"class":313},[254,157142,146821],{"class":264},[254,157144,719],{"class":260},[254,157146,157147],{"class":264}," count",[254,157149,1210],{"class":313},[254,157151,157152],{"class":369},"元\"",[254,157154,271],{"class":264},[34,157156,157158],{"id":157157},"_211-input输入","2.11 input输入",[14,157160,157161,157164],{},[251,157162,157163],{},"input()"," 会暂停程序，等待用户输入。",[245,157166,157168],{"className":30519,"code":157167,"language":30521,"meta":174,"style":174},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[251,157169,157170,157184],{"__ignoreMap":174},[254,157171,157172,157174,157176,157178,157180,157182],{"class":256,"line":257},[254,157173,146676],{"class":264},[254,157175,310],{"class":260},[254,157177,60746],{"class":313},[254,157179,265],{"class":264},[254,157181,152519],{"class":369},[254,157183,271],{"class":264},[254,157185,157186,157188,157190,157192,157195,157197,157199,157201,157203],{"class":256,"line":175},[254,157187,30556],{"class":313},[254,157189,265],{"class":264},[254,157191,317],{"class":260},[254,157193,157194],{"class":369},"\"你好，",[254,157196,1160],{"class":313},[254,157198,79951],{"class":264},[254,157200,1210],{"class":313},[254,157202,515],{"class":369},[254,157204,271],{"class":264},[14,157206,157207],{},"输入整数：",[245,157209,157211],{"className":30519,"code":157210,"language":30521,"meta":174,"style":174},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[251,157212,157213,157231],{"__ignoreMap":174},[254,157214,157215,157217,157219,157221,157223,157225,157227,157229],{"class":256,"line":257},[254,157216,146686],{"class":264},[254,157218,310],{"class":260},[254,157220,2522],{"class":313},[254,157222,265],{"class":264},[254,157224,53962],{"class":313},[254,157226,265],{"class":264},[254,157228,152534],{"class":369},[254,157230,30638],{"class":264},[254,157232,157233,157235,157237,157239,157242,157244,157246,157248,157251,157253],{"class":256,"line":175},[254,157234,30556],{"class":313},[254,157236,265],{"class":264},[254,157238,317],{"class":260},[254,157240,157241],{"class":369},"\"明年你",[254,157243,1160],{"class":313},[254,157245,146686],{"class":264},[254,157247,745],{"class":260},[254,157249,157250],{"class":313}," 1}",[254,157252,149544],{"class":369},[254,157254,271],{"class":264},[14,157256,157257],{},"输入小数：",[245,157259,157261],{"className":30519,"code":157260,"language":30521,"meta":174,"style":174},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[251,157262,157263,157282],{"__ignoreMap":174},[254,157264,157265,157267,157269,157271,157273,157275,157277,157280],{"class":256,"line":257},[254,157266,155471],{"class":264},[254,157268,310],{"class":260},[254,157270,109938],{"class":313},[254,157272,265],{"class":264},[254,157274,53962],{"class":313},[254,157276,265],{"class":264},[254,157278,157279],{"class":369},"\"请输入身高:\"",[254,157281,30638],{"class":264},[254,157283,157284,157286,157288,157290,157293,157295,157297,157300,157302,157305],{"class":256,"line":175},[254,157285,30556],{"class":313},[254,157287,265],{"class":264},[254,157289,317],{"class":260},[254,157291,157292],{"class":369},"\"身高:",[254,157294,1160],{"class":313},[254,157296,25122],{"class":264},[254,157298,157299],{"class":260},":.2f",[254,157301,1210],{"class":313},[254,157303,157304],{"class":369},"米\"",[254,157306,271],{"class":264},[34,157308,157310],{"id":157309},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[14,157312,123432],{},[21,157314,157315,157318,157321,157324],{},[24,157316,157317],{},"输入商品单价。",[24,157319,157320],{},"输入购买数量。",[24,157322,157323],{},"输入折扣，例如 0.8 表示八折。",[24,157325,157326],{},"输出最终金额，保留两位小数。",[14,157328,10176],{},[245,157330,157332],{"className":30519,"code":157331,"language":30521,"meta":174,"style":174},"price = float(input(\"请输入商品单价:\"))\ncount = int(input(\"请输入购买数量:\"))\ndiscount = float(input(\"请输入折扣:\"))\n\ntotal = price * count * discount\n\nprint(f\"商品单价:{price:.2f}\")\nprint(f\"购买数量:{count}\")\nprint(f\"折扣:{discount}\")\nprint(f\"应付金额:{total:.2f}元\")\n",[251,157333,157334,157353,157372,157392,157396,157416,157420,157443,157464,157486],{"__ignoreMap":174},[254,157335,157336,157338,157340,157342,157344,157346,157348,157351],{"class":256,"line":257},[254,157337,146821],{"class":264},[254,157339,310],{"class":260},[254,157341,109938],{"class":313},[254,157343,265],{"class":264},[254,157345,53962],{"class":313},[254,157347,265],{"class":264},[254,157349,157350],{"class":369},"\"请输入商品单价:\"",[254,157352,30638],{"class":264},[254,157354,157355,157357,157359,157361,157363,157365,157367,157370],{"class":256,"line":175},[254,157356,146831],{"class":264},[254,157358,310],{"class":260},[254,157360,2522],{"class":313},[254,157362,265],{"class":264},[254,157364,53962],{"class":313},[254,157366,265],{"class":264},[254,157368,157369],{"class":369},"\"请输入购买数量:\"",[254,157371,30638],{"class":264},[254,157373,157374,157377,157379,157381,157383,157385,157387,157390],{"class":256,"line":1319},[254,157375,157376],{"class":264},"discount ",[254,157378,310],{"class":260},[254,157380,109938],{"class":313},[254,157382,265],{"class":264},[254,157384,53962],{"class":313},[254,157386,265],{"class":264},[254,157388,157389],{"class":369},"\"请输入折扣:\"",[254,157391,30638],{"class":264},[254,157393,157394],{"class":256,"line":1334},[254,157395,2540],{"emptyLinePlaceholder":184},[254,157397,157398,157401,157403,157406,157408,157411,157413],{"class":256,"line":1340},[254,157399,157400],{"class":264},"total ",[254,157402,310],{"class":260},[254,157404,157405],{"class":264}," price ",[254,157407,719],{"class":260},[254,157409,157410],{"class":264}," count ",[254,157412,719],{"class":260},[254,157414,157415],{"class":264}," discount\n",[254,157417,157418],{"class":256,"line":1354},[254,157419,2540],{"emptyLinePlaceholder":184},[254,157421,157422,157424,157426,157428,157431,157433,157435,157437,157439,157441],{"class":256,"line":1360},[254,157423,30556],{"class":313},[254,157425,265],{"class":264},[254,157427,317],{"class":260},[254,157429,157430],{"class":369},"\"商品单价:",[254,157432,1160],{"class":313},[254,157434,79956],{"class":264},[254,157436,157299],{"class":260},[254,157438,1210],{"class":313},[254,157440,515],{"class":369},[254,157442,271],{"class":264},[254,157444,157445,157447,157449,157451,157454,157456,157458,157460,157462],{"class":256,"line":1451},[254,157446,30556],{"class":313},[254,157448,265],{"class":264},[254,157450,317],{"class":260},[254,157452,157453],{"class":369},"\"购买数量:",[254,157455,1160],{"class":313},[254,157457,84575],{"class":264},[254,157459,1210],{"class":313},[254,157461,515],{"class":369},[254,157463,271],{"class":264},[254,157465,157466,157468,157470,157472,157475,157477,157480,157482,157484],{"class":256,"line":1457},[254,157467,30556],{"class":313},[254,157469,265],{"class":264},[254,157471,317],{"class":260},[254,157473,157474],{"class":369},"\"折扣:",[254,157476,1160],{"class":313},[254,157478,157479],{"class":264},"discount",[254,157481,1210],{"class":313},[254,157483,515],{"class":369},[254,157485,271],{"class":264},[254,157487,157488,157490,157492,157494,157497,157499,157502,157504,157506,157508],{"class":256,"line":1469},[254,157489,30556],{"class":313},[254,157491,265],{"class":264},[254,157493,317],{"class":260},[254,157495,157496],{"class":369},"\"应付金额:",[254,157498,1160],{"class":313},[254,157500,157501],{"class":264},"total",[254,157503,157299],{"class":260},[254,157505,1210],{"class":313},[254,157507,157152],{"class":369},[254,157509,271],{"class":264},[34,157511,157513],{"id":157512},"_213-易错点","2.13 易错点",[21,157515,157516,157521,157527,157535,157538],{},[24,157517,157518,157520],{},[251,157519,157163],{}," 的结果是字符串，做运算前要转换。",[24,157522,157523,157524,28526],{},"字符串拼接时，数字要先 ",[251,157525,157526],{},"str()",[24,157528,157529,157531,157532,157534],{},[251,157530,310],{}," 是赋值，",[251,157533,3089],{}," 是比较。",[24,157536,157537],{},"Python 没有自增自减运算符。",[24,157539,157540],{},"浮点数计算可能有精度误差：",[245,157542,157544],{"className":30519,"code":157543,"language":30521,"meta":174,"style":174},"print(0.1 + 0.2)\n",[251,157545,157546],{"__ignoreMap":174},[254,157547,157548,157550,157552,157554,157556,157559],{"class":256,"line":257},[254,157549,30556],{"class":313},[254,157551,265],{"class":264},[254,157553,86351],{"class":313},[254,157555,45707],{"class":260},[254,157557,157558],{"class":313}," 0.2",[254,157560,271],{"class":264},[14,157562,157563,157564,157567],{},"金额计算如果要求严格，可以后续学习 ",[251,157565,157566],{},"decimal"," 模块。",[34,157569,157571],{"id":157570},"_214-本章练习","2.14 本章练习",[21,157573,157574,157577,157580,157583,157586],{},[24,157575,157576],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[24,157578,157579],{},"输入圆的半径，计算面积，保留两位小数。",[24,157581,157582],{},"输入工资和奖金，计算总收入。",[24,157584,157585],{},"输入摄氏温度，转换为华氏温度。",[24,157587,157588],{},"写一个 BMI 计算程序：",[245,157590,157593],{"className":157591,"code":157592,"language":5328,"meta":174},[5326],"BMI = 体重kg \u002F 身高m ** 2\n",[251,157594,157592],{"__ignoreMap":174},[5267,157596,157597],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s7hpK, html code.shiki .s7hpK{--shiki-default:#B31D28;--shiki-default-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":174,"searchDepth":175,"depth":175,"links":157599},[157600,157601,157602,157603,157604,157605,157606,157612,157613,157614,157619,157620,157621,157622],{"id":155161,"depth":175,"text":155162},{"id":155270,"depth":175,"text":155271},{"id":155441,"depth":175,"text":155442},{"id":155518,"depth":175,"text":155519},{"id":50872,"depth":175,"text":50873},{"id":155824,"depth":175,"text":155825},{"id":156050,"depth":175,"text":156051,"children":157607},[157608,157609,157610,157611],{"id":156054,"depth":1319,"text":156055},{"id":156248,"depth":1319,"text":156249},{"id":156336,"depth":1319,"text":156337},{"id":156442,"depth":1319,"text":156443},{"id":156551,"depth":175,"text":156552},{"id":156709,"depth":175,"text":156710},{"id":156774,"depth":175,"text":156775,"children":157615},[157616,157617,157618],{"id":156778,"depth":1319,"text":156779},{"id":156923,"depth":1319,"text":156924},{"id":157026,"depth":1319,"text":157027},{"id":157157,"depth":175,"text":157158},{"id":157309,"depth":175,"text":157310},{"id":157512,"depth":175,"text":157513},{"id":157570,"depth":175,"text":157571},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":155153,"description":23518},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":157629,"title":157630,"body":157631,"description":23518,"extension":181,"meta":159267,"navigation":184,"path":159268,"seo":159269,"stem":159270,"__hash__":159271},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":157632,"toc":159248},[157633,157636,157640,157643,157658,157661,157689,157693,157743,157745,157761,157764,157790,157793,157797,157864,157867,157883,157887,157890,158008,158011,158018,158067,158073,158077,158080,158193,158196,158200,158204,158207,158257,158261,158264,158314,158318,158321,158359,158363,158366,158412,158415,158450,158454,158459,158462,158508,158510,158577,158581,158587,158698,158707,158711,158713,158724,158726,158892,158896,158898,158912,158914,159128,159132,159151,159168,159171,159217,159221,159245],[10,157634,157630],{"id":157635},"_3-判断语句",[34,157637,157639],{"id":157638},"_31-布尔值","3.1 布尔值",[14,157641,157642],{},"判断语句依赖布尔值：",[245,157644,157646],{"className":30519,"code":157645,"language":30521,"meta":174,"style":174},"True\nFalse\n",[251,157647,157648,157653],{"__ignoreMap":174},[254,157649,157650],{"class":256,"line":257},[254,157651,157652],{"class":313},"True\n",[254,157654,157655],{"class":256,"line":175},[254,157656,157657],{"class":313},"False\n",[14,157659,157660],{},"比较表达式会产生布尔值：",[245,157662,157664],{"className":30519,"code":157663,"language":30521,"meta":174,"style":174},"age = 18\nprint(age >= 18)  # True\n",[251,157665,157666,157674],{"__ignoreMap":174},[254,157667,157668,157670,157672],{"class":256,"line":257},[254,157669,146686],{"class":264},[254,157671,310],{"class":260},[254,157673,146691],{"class":313},[254,157675,157676,157678,157680,157682,157684,157686],{"class":256,"line":175},[254,157677,30556],{"class":313},[254,157679,155908],{"class":264},[254,157681,1850],{"class":260},[254,157683,156425],{"class":313},[254,157685,45949],{"class":264},[254,157687,157688],{"class":323},"# True\n",[34,157690,157692],{"id":157691},"_32-if基础语法","3.2 if基础语法",[245,157694,157696],{"className":30519,"code":157695,"language":30521,"meta":174,"style":174},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[251,157697,157698,157716,157720,157732],{"__ignoreMap":174},[254,157699,157700,157702,157704,157706,157708,157710,157712,157714],{"class":256,"line":257},[254,157701,146686],{"class":264},[254,157703,310],{"class":260},[254,157705,2522],{"class":313},[254,157707,265],{"class":264},[254,157709,53962],{"class":313},[254,157711,265],{"class":264},[254,157713,152534],{"class":369},[254,157715,30638],{"class":264},[254,157717,157718],{"class":256,"line":175},[254,157719,2540],{"emptyLinePlaceholder":184},[254,157721,157722,157724,157726,157728,157730],{"class":256,"line":1319},[254,157723,1671],{"class":260},[254,157725,15848],{"class":264},[254,157727,1850],{"class":260},[254,157729,156425],{"class":313},[254,157731,3879],{"class":264},[254,157733,157734,157736,157738,157741],{"class":256,"line":1334},[254,157735,31440],{"class":313},[254,157737,265],{"class":264},[254,157739,157740],{"class":369},"\"可以进入网吧\"",[254,157742,271],{"class":264},[14,157744,9166],{},[21,157746,157747,157752,157755,157758],{},[24,157748,157749,157751],{},[251,157750,1671],{}," 后面是条件表达式。",[24,157753,157754],{},"条件后面必须写冒号。",[24,157756,157757],{},"条件成立时执行缩进代码块。",[24,157759,157760],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[14,157762,157763],{},"错误示例：",[245,157765,157767],{"className":30519,"code":157766,"language":30521,"meta":174,"style":174},"if age >= 18\n    print(\"可以进入\")\n",[251,157768,157769,157779],{"__ignoreMap":174},[254,157770,157771,157773,157775,157777],{"class":256,"line":257},[254,157772,1671],{"class":260},[254,157774,15848],{"class":264},[254,157776,1850],{"class":260},[254,157778,146691],{"class":313},[254,157780,157781,157783,157785,157788],{"class":256,"line":175},[254,157782,31440],{"class":313},[254,157784,265],{"class":264},[254,157786,157787],{"class":369},"\"可以进入\"",[254,157789,271],{"class":264},[14,157791,157792],{},"缺少冒号。",[34,157794,157796],{"id":157795},"_33-if-else","3.3 if else",[245,157798,157800],{"className":30519,"code":157799,"language":30521,"meta":174,"style":174},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[251,157801,157802,157820,157824,157836,157847,157853],{"__ignoreMap":174},[254,157803,157804,157806,157808,157810,157812,157814,157816,157818],{"class":256,"line":257},[254,157805,146686],{"class":264},[254,157807,310],{"class":260},[254,157809,2522],{"class":313},[254,157811,265],{"class":264},[254,157813,53962],{"class":313},[254,157815,265],{"class":264},[254,157817,152534],{"class":369},[254,157819,30638],{"class":264},[254,157821,157822],{"class":256,"line":175},[254,157823,2540],{"emptyLinePlaceholder":184},[254,157825,157826,157828,157830,157832,157834],{"class":256,"line":1319},[254,157827,1671],{"class":260},[254,157829,15848],{"class":264},[254,157831,1850],{"class":260},[254,157833,156425],{"class":313},[254,157835,3879],{"class":264},[254,157837,157838,157840,157842,157845],{"class":256,"line":1334},[254,157839,31440],{"class":313},[254,157841,265],{"class":264},[254,157843,157844],{"class":369},"\"成年人\"",[254,157846,271],{"class":264},[254,157848,157849,157851],{"class":256,"line":1340},[254,157850,1841],{"class":260},[254,157852,3879],{"class":264},[254,157854,157855,157857,157859,157862],{"class":256,"line":1354},[254,157856,31440],{"class":313},[254,157858,265],{"class":264},[254,157860,157861],{"class":369},"\"未成年人\"",[254,157863,271],{"class":264},[14,157865,157866],{},"执行逻辑：",[21,157868,157869,157875,157880],{},[24,157870,157871,157872,157874],{},"条件成立，执行 ",[251,157873,1671],{}," 代码块。",[24,157876,157877,157878,157874],{},"条件不成立，执行 ",[251,157879,1841],{},[24,157881,157882],{},"两个代码块只会执行其中一个。",[34,157884,157886],{"id":157885},"_34-if-elif-else","3.4 if elif else",[14,157888,157889],{},"多条件判断：",[245,157891,157893],{"className":30519,"code":157892,"language":30521,"meta":174,"style":174},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[251,157894,157895,157913,157917,157931,157942,157956,157967,157980,157991,157997],{"__ignoreMap":174},[254,157896,157897,157899,157901,157903,157905,157907,157909,157911],{"class":256,"line":257},[254,157898,155498],{"class":264},[254,157900,310],{"class":260},[254,157902,2522],{"class":313},[254,157904,265],{"class":264},[254,157906,53962],{"class":313},[254,157908,265],{"class":264},[254,157910,152549],{"class":369},[254,157912,30638],{"class":264},[254,157914,157915],{"class":256,"line":175},[254,157916,2540],{"emptyLinePlaceholder":184},[254,157918,157919,157921,157924,157926,157929],{"class":256,"line":1319},[254,157920,1671],{"class":260},[254,157922,157923],{"class":264}," score ",[254,157925,1850],{"class":260},[254,157927,157928],{"class":313}," 90",[254,157930,3879],{"class":264},[254,157932,157933,157935,157937,157940],{"class":256,"line":1334},[254,157934,31440],{"class":313},[254,157936,265],{"class":264},[254,157938,157939],{"class":369},"\"优秀\"",[254,157941,271],{"class":264},[254,157943,157944,157947,157949,157951,157954],{"class":256,"line":1340},[254,157945,157946],{"class":260},"elif",[254,157948,157923],{"class":264},[254,157950,1850],{"class":260},[254,157952,157953],{"class":313}," 80",[254,157955,3879],{"class":264},[254,157957,157958,157960,157962,157965],{"class":256,"line":1354},[254,157959,31440],{"class":313},[254,157961,265],{"class":264},[254,157963,157964],{"class":369},"\"良好\"",[254,157966,271],{"class":264},[254,157968,157969,157971,157973,157975,157978],{"class":256,"line":1360},[254,157970,157946],{"class":260},[254,157972,157923],{"class":264},[254,157974,1850],{"class":260},[254,157976,157977],{"class":313}," 60",[254,157979,3879],{"class":264},[254,157981,157982,157984,157986,157989],{"class":256,"line":1451},[254,157983,31440],{"class":313},[254,157985,265],{"class":264},[254,157987,157988],{"class":369},"\"及格\"",[254,157990,271],{"class":264},[254,157992,157993,157995],{"class":256,"line":1457},[254,157994,1841],{"class":260},[254,157996,3879],{"class":264},[254,157998,157999,158001,158003,158006],{"class":256,"line":1469},[254,158000,31440],{"class":313},[254,158002,265],{"class":264},[254,158004,158005],{"class":369},"\"不及格\"",[254,158007,271],{"class":264},[14,158009,158010],{},"注意判断顺序很重要。",[14,158012,158013,158014,158017],{},"如果把 ",[251,158015,158016],{},"score >= 60"," 放在最前面：",[245,158019,158021],{"className":30519,"code":158020,"language":30521,"meta":174,"style":174},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[251,158022,158023,158035,158045,158057],{"__ignoreMap":174},[254,158024,158025,158027,158029,158031,158033],{"class":256,"line":257},[254,158026,1671],{"class":260},[254,158028,157923],{"class":264},[254,158030,1850],{"class":260},[254,158032,157977],{"class":313},[254,158034,3879],{"class":264},[254,158036,158037,158039,158041,158043],{"class":256,"line":175},[254,158038,31440],{"class":313},[254,158040,265],{"class":264},[254,158042,157988],{"class":369},[254,158044,271],{"class":264},[254,158046,158047,158049,158051,158053,158055],{"class":256,"line":1319},[254,158048,157946],{"class":260},[254,158050,157923],{"class":264},[254,158052,1850],{"class":260},[254,158054,157928],{"class":313},[254,158056,3879],{"class":264},[254,158058,158059,158061,158063,158065],{"class":256,"line":1334},[254,158060,31440],{"class":313},[254,158062,265],{"class":264},[254,158064,157939],{"class":369},[254,158066,271],{"class":264},[14,158068,158069,158070,158072],{},"成绩 95 会先满足 ",[251,158071,158016],{},"，后面的优秀分支就不会执行。",[34,158074,158076],{"id":158075},"_35-判断语句嵌套","3.5 判断语句嵌套",[14,158078,158079],{},"嵌套判断就是在一个判断内部再写判断。",[245,158081,158083],{"className":30519,"code":158082,"language":30521,"meta":174,"style":174},"age = int(input(\"请输入年龄:\"))\nhas_ticket = input(\"是否有票(y\u002Fn):\")\n\nif age >= 18:\n    if has_ticket == \"y\":\n        print(\"可以进入\")\n    else:\n        print(\"请先买票\")\nelse:\n    print(\"未成年人禁止进入\")\n",[251,158084,158085,158103,158118,158122,158134,158148,158158,158165,158176,158182],{"__ignoreMap":174},[254,158086,158087,158089,158091,158093,158095,158097,158099,158101],{"class":256,"line":257},[254,158088,146686],{"class":264},[254,158090,310],{"class":260},[254,158092,2522],{"class":313},[254,158094,265],{"class":264},[254,158096,53962],{"class":313},[254,158098,265],{"class":264},[254,158100,152534],{"class":369},[254,158102,30638],{"class":264},[254,158104,158105,158107,158109,158111,158113,158116],{"class":256,"line":175},[254,158106,156501],{"class":264},[254,158108,310],{"class":260},[254,158110,60746],{"class":313},[254,158112,265],{"class":264},[254,158114,158115],{"class":369},"\"是否有票(y\u002Fn):\"",[254,158117,271],{"class":264},[254,158119,158120],{"class":256,"line":1319},[254,158121,2540],{"emptyLinePlaceholder":184},[254,158123,158124,158126,158128,158130,158132],{"class":256,"line":1334},[254,158125,1671],{"class":260},[254,158127,15848],{"class":264},[254,158129,1850],{"class":260},[254,158131,156425],{"class":313},[254,158133,3879],{"class":264},[254,158135,158136,158138,158141,158143,158146],{"class":256,"line":1340},[254,158137,3241],{"class":260},[254,158139,158140],{"class":264}," has_ticket ",[254,158142,3089],{"class":260},[254,158144,158145],{"class":369}," \"y\"",[254,158147,3879],{"class":264},[254,158149,158150,158152,158154,158156],{"class":256,"line":1354},[254,158151,32592],{"class":313},[254,158153,265],{"class":264},[254,158155,157787],{"class":369},[254,158157,271],{"class":264},[254,158159,158160,158163],{"class":256,"line":1360},[254,158161,158162],{"class":260},"    else",[254,158164,3879],{"class":264},[254,158166,158167,158169,158171,158174],{"class":256,"line":1451},[254,158168,32592],{"class":313},[254,158170,265],{"class":264},[254,158172,158173],{"class":369},"\"请先买票\"",[254,158175,271],{"class":264},[254,158177,158178,158180],{"class":256,"line":1457},[254,158179,1841],{"class":260},[254,158181,3879],{"class":264},[254,158183,158184,158186,158188,158191],{"class":256,"line":1469},[254,158185,31440],{"class":313},[254,158187,265],{"class":264},[254,158189,158190],{"class":369},"\"未成年人禁止进入\"",[254,158192,271],{"class":264},[14,158194,158195],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[34,158197,158199],{"id":158198},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[225,158201,158203],{"id":158202},"_361-and","3.6.1 and",[14,158205,158206],{},"两个条件都成立才成立。",[245,158208,158210],{"className":30519,"code":158209,"language":30521,"meta":174,"style":174},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[251,158211,158212,158220,158228,158232,158247],{"__ignoreMap":174},[254,158213,158214,158216,158218],{"class":256,"line":257},[254,158215,146686],{"class":264},[254,158217,310],{"class":260},[254,158219,88206],{"class":313},[254,158221,158222,158224,158226],{"class":256,"line":175},[254,158223,156501],{"class":264},[254,158225,310],{"class":260},[254,158227,153739],{"class":313},[254,158229,158230],{"class":256,"line":1319},[254,158231,2540],{"emptyLinePlaceholder":184},[254,158233,158234,158236,158238,158240,158242,158244],{"class":256,"line":1334},[254,158235,1671],{"class":260},[254,158237,15848],{"class":264},[254,158239,1850],{"class":260},[254,158241,156425],{"class":313},[254,158243,120569],{"class":260},[254,158245,158246],{"class":264}," has_ticket:\n",[254,158248,158249,158251,158253,158255],{"class":256,"line":1340},[254,158250,31440],{"class":313},[254,158252,265],{"class":264},[254,158254,157787],{"class":369},[254,158256,271],{"class":264},[225,158258,158260],{"id":158259},"_362-or","3.6.2 or",[14,158262,158263],{},"只要一个条件成立就成立。",[245,158265,158267],{"className":30519,"code":158266,"language":30521,"meta":174,"style":174},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[251,158268,158269,158278,158287,158291,158303],{"__ignoreMap":174},[254,158270,158271,158274,158276],{"class":256,"line":257},[254,158272,158273],{"class":264},"is_vip ",[254,158275,310],{"class":260},[254,158277,125947],{"class":313},[254,158279,158280,158283,158285],{"class":256,"line":175},[254,158281,158282],{"class":264},"coupon ",[254,158284,310],{"class":260},[254,158286,153739],{"class":313},[254,158288,158289],{"class":256,"line":1319},[254,158290,2540],{"emptyLinePlaceholder":184},[254,158292,158293,158295,158298,158300],{"class":256,"line":1334},[254,158294,1671],{"class":260},[254,158296,158297],{"class":264}," is_vip ",[254,158299,115231],{"class":260},[254,158301,158302],{"class":264}," coupon:\n",[254,158304,158305,158307,158309,158312],{"class":256,"line":1340},[254,158306,31440],{"class":313},[254,158308,265],{"class":264},[254,158310,158311],{"class":369},"\"可以享受优惠\"",[254,158313,271],{"class":264},[225,158315,158317],{"id":158316},"_363-not","3.6.3 not",[14,158319,158320],{},"取反。",[245,158322,158324],{"className":30519,"code":158323,"language":30521,"meta":174,"style":174},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[251,158325,158326,158335,158339,158348],{"__ignoreMap":174},[254,158327,158328,158331,158333],{"class":256,"line":257},[254,158329,158330],{"class":264},"is_closed ",[254,158332,310],{"class":260},[254,158334,125947],{"class":313},[254,158336,158337],{"class":256,"line":175},[254,158338,2540],{"emptyLinePlaceholder":184},[254,158340,158341,158343,158345],{"class":256,"line":1319},[254,158342,1671],{"class":260},[254,158344,39071],{"class":260},[254,158346,158347],{"class":264}," is_closed:\n",[254,158349,158350,158352,158354,158357],{"class":256,"line":1334},[254,158351,31440],{"class":313},[254,158353,265],{"class":264},[254,158355,158356],{"class":369},"\"店铺营业中\"",[254,158358,271],{"class":264},[34,158360,158362],{"id":158361},"_37-链式比较","3.7 链式比较",[14,158364,158365],{},"Python 支持链式比较：",[245,158367,158369],{"className":30519,"code":158368,"language":30521,"meta":174,"style":174},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[251,158370,158371,158380,158384,158401],{"__ignoreMap":174},[254,158372,158373,158375,158377],{"class":256,"line":257},[254,158374,155498],{"class":264},[254,158376,310],{"class":260},[254,158378,158379],{"class":313}," 85\n",[254,158381,158382],{"class":256,"line":175},[254,158383,2540],{"emptyLinePlaceholder":184},[254,158385,158386,158388,158390,158393,158395,158397,158399],{"class":256,"line":1319},[254,158387,1671],{"class":260},[254,158389,4233],{"class":313},[254,158391,158392],{"class":260}," \u003C=",[254,158394,157923],{"class":264},[254,158396,1728],{"class":260},[254,158398,5895],{"class":313},[254,158400,3879],{"class":264},[254,158402,158403,158405,158407,158410],{"class":256,"line":1334},[254,158404,31440],{"class":313},[254,158406,265],{"class":264},[254,158408,158409],{"class":369},"\"成绩合法\"",[254,158411,271],{"class":264},[14,158413,158414],{},"等价于：",[245,158416,158418],{"className":30519,"code":158417,"language":30521,"meta":174,"style":174},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[251,158419,158420,158440],{"__ignoreMap":174},[254,158421,158422,158424,158426,158428,158430,158432,158434,158436,158438],{"class":256,"line":257},[254,158423,1671],{"class":260},[254,158425,157923],{"class":264},[254,158427,1850],{"class":260},[254,158429,4233],{"class":313},[254,158431,120569],{"class":260},[254,158433,157923],{"class":264},[254,158435,1728],{"class":260},[254,158437,5895],{"class":313},[254,158439,3879],{"class":264},[254,158441,158442,158444,158446,158448],{"class":256,"line":175},[254,158443,31440],{"class":313},[254,158445,265],{"class":264},[254,158447,158409],{"class":369},[254,158449,271],{"class":264},[34,158451,158453],{"id":158452},"_38-真值和假值","3.8 真值和假值",[14,158455,116608,158456,158458],{},[251,158457,1671],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[14,158460,158461],{},"假值：",[245,158463,158465],{"className":30519,"code":158464,"language":30521,"meta":174,"style":174},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[251,158466,158467,158471,158476,158480,158484,158489,158493,158497,158502],{"__ignoreMap":174},[254,158468,158469],{"class":256,"line":257},[254,158470,157657],{"class":313},[254,158472,158473],{"class":256,"line":175},[254,158474,158475],{"class":313},"None\n",[254,158477,158478],{"class":256,"line":1319},[254,158479,3225],{"class":313},[254,158481,158482],{"class":256,"line":1334},[254,158483,32483],{"class":313},[254,158485,158486],{"class":256,"line":1340},[254,158487,158488],{"class":369},"\"\"\n",[254,158490,158491],{"class":256,"line":1354},[254,158492,32498],{"class":264},[254,158494,158495],{"class":256,"line":1360},[254,158496,2116],{"class":264},[254,158498,158499],{"class":256,"line":1451},[254,158500,158501],{"class":264},"{}\n",[254,158503,158504,158506],{"class":256,"line":1457},[254,158505,155430],{"class":313},[254,158507,2116],{"class":264},[14,158509,15276],{},[245,158511,158513],{"className":30519,"code":158512,"language":30521,"meta":174,"style":174},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[251,158514,158515,158529,158533,158540,158560,158566],{"__ignoreMap":174},[254,158516,158517,158519,158521,158523,158525,158527],{"class":256,"line":257},[254,158518,146676],{"class":264},[254,158520,310],{"class":260},[254,158522,60746],{"class":313},[254,158524,265],{"class":264},[254,158526,152519],{"class":369},[254,158528,271],{"class":264},[254,158530,158531],{"class":256,"line":175},[254,158532,2540],{"emptyLinePlaceholder":184},[254,158534,158535,158537],{"class":256,"line":1319},[254,158536,1671],{"class":260},[254,158538,158539],{"class":264}," name:\n",[254,158541,158542,158544,158546,158548,158550,158552,158554,158556,158558],{"class":256,"line":1334},[254,158543,31440],{"class":313},[254,158545,265],{"class":264},[254,158547,317],{"class":260},[254,158549,157194],{"class":369},[254,158551,1160],{"class":313},[254,158553,79951],{"class":264},[254,158555,1210],{"class":313},[254,158557,515],{"class":369},[254,158559,271],{"class":264},[254,158561,158562,158564],{"class":256,"line":1340},[254,158563,1841],{"class":260},[254,158565,3879],{"class":264},[254,158567,158568,158570,158572,158575],{"class":256,"line":1354},[254,158569,31440],{"class":313},[254,158571,265],{"class":264},[254,158573,158574],{"class":369},"\"姓名不能为空\"",[254,158576,271],{"class":264},[34,158578,158580],{"id":158579},"_39-match语句","3.9 match语句",[14,158582,158583,158584,158586],{},"Python 3.10 开始支持 ",[251,158585,71406],{},"。它适合处理固定选项。",[245,158588,158590],{"className":30519,"code":158589,"language":30521,"meta":174,"style":174},"command = input(\"请输入命令:\")\n\nmatch command:\n    case \"start\":\n        print(\"启动\")\n    case \"stop\":\n        print(\"停止\")\n    case \"restart\":\n        print(\"重启\")\n    case _:\n        print(\"未知命令\")\n",[251,158591,158592,158608,158612,158619,158629,158640,158649,158660,158669,158680,158687],{"__ignoreMap":174},[254,158593,158594,158597,158599,158601,158603,158606],{"class":256,"line":257},[254,158595,158596],{"class":264},"command ",[254,158598,310],{"class":260},[254,158600,60746],{"class":313},[254,158602,265],{"class":264},[254,158604,158605],{"class":369},"\"请输入命令:\"",[254,158607,271],{"class":264},[254,158609,158610],{"class":256,"line":175},[254,158611,2540],{"emptyLinePlaceholder":184},[254,158613,158614,158616],{"class":256,"line":1319},[254,158615,71406],{"class":260},[254,158617,158618],{"class":264}," command:\n",[254,158620,158621,158624,158627],{"class":256,"line":1334},[254,158622,158623],{"class":260},"    case",[254,158625,158626],{"class":369}," \"start\"",[254,158628,3879],{"class":264},[254,158630,158631,158633,158635,158638],{"class":256,"line":1340},[254,158632,32592],{"class":313},[254,158634,265],{"class":264},[254,158636,158637],{"class":369},"\"启动\"",[254,158639,271],{"class":264},[254,158641,158642,158644,158647],{"class":256,"line":1354},[254,158643,158623],{"class":260},[254,158645,158646],{"class":369}," \"stop\"",[254,158648,3879],{"class":264},[254,158650,158651,158653,158655,158658],{"class":256,"line":1360},[254,158652,32592],{"class":313},[254,158654,265],{"class":264},[254,158656,158657],{"class":369},"\"停止\"",[254,158659,271],{"class":264},[254,158661,158662,158664,158667],{"class":256,"line":1451},[254,158663,158623],{"class":260},[254,158665,158666],{"class":369}," \"restart\"",[254,158668,3879],{"class":264},[254,158670,158671,158673,158675,158678],{"class":256,"line":1457},[254,158672,32592],{"class":313},[254,158674,265],{"class":264},[254,158676,158677],{"class":369},"\"重启\"",[254,158679,271],{"class":264},[254,158681,158682,158684],{"class":256,"line":1469},[254,158683,158623],{"class":260},[254,158685,158686],{"class":264}," _:\n",[254,158688,158689,158691,158693,158696],{"class":256,"line":1752},[254,158690,32592],{"class":313},[254,158692,265],{"class":264},[254,158694,158695],{"class":369},"\"未知命令\"",[254,158697,271],{"class":264},[14,158699,158700,158701,158703,158704,158706],{},"入门阶段掌握 ",[251,158702,154798],{}," 更重要，",[251,158705,71406],{}," 可以作为补充。",[34,158708,158710],{"id":158709},"_310-小案例成绩等级","3.10 小案例：成绩等级",[14,158712,123432],{},[21,158714,158715,158718,158721],{},[24,158716,158717],{},"输入成绩。",[24,158719,158720],{},"判断成绩是否合法。",[24,158722,158723],{},"输出等级。",[14,158725,10176],{},[245,158727,158729],{"className":30519,"code":158728,"language":30521,"meta":174,"style":174},"score = float(input(\"请输入成绩:\"))\n\nif not 0 \u003C= score \u003C= 100:\n    print(\"成绩不合法\")\nelif score >= 90:\n    print(\"等级:A\")\nelif score >= 80:\n    print(\"等级:B\")\nelif score >= 70:\n    print(\"等级:C\")\nelif score >= 60:\n    print(\"等级:D\")\nelse:\n    print(\"等级:E\")\n",[251,158730,158731,158749,158753,158771,158782,158794,158805,158817,158828,158841,158852,158864,158875,158881],{"__ignoreMap":174},[254,158732,158733,158735,158737,158739,158741,158743,158745,158747],{"class":256,"line":257},[254,158734,155498],{"class":264},[254,158736,310],{"class":260},[254,158738,109938],{"class":313},[254,158740,265],{"class":264},[254,158742,53962],{"class":313},[254,158744,265],{"class":264},[254,158746,152549],{"class":369},[254,158748,30638],{"class":264},[254,158750,158751],{"class":256,"line":175},[254,158752,2540],{"emptyLinePlaceholder":184},[254,158754,158755,158757,158759,158761,158763,158765,158767,158769],{"class":256,"line":1319},[254,158756,1671],{"class":260},[254,158758,39071],{"class":260},[254,158760,4233],{"class":313},[254,158762,158392],{"class":260},[254,158764,157923],{"class":264},[254,158766,1728],{"class":260},[254,158768,5895],{"class":313},[254,158770,3879],{"class":264},[254,158772,158773,158775,158777,158780],{"class":256,"line":1334},[254,158774,31440],{"class":313},[254,158776,265],{"class":264},[254,158778,158779],{"class":369},"\"成绩不合法\"",[254,158781,271],{"class":264},[254,158783,158784,158786,158788,158790,158792],{"class":256,"line":1340},[254,158785,157946],{"class":260},[254,158787,157923],{"class":264},[254,158789,1850],{"class":260},[254,158791,157928],{"class":313},[254,158793,3879],{"class":264},[254,158795,158796,158798,158800,158803],{"class":256,"line":1354},[254,158797,31440],{"class":313},[254,158799,265],{"class":264},[254,158801,158802],{"class":369},"\"等级:A\"",[254,158804,271],{"class":264},[254,158806,158807,158809,158811,158813,158815],{"class":256,"line":1360},[254,158808,157946],{"class":260},[254,158810,157923],{"class":264},[254,158812,1850],{"class":260},[254,158814,157953],{"class":313},[254,158816,3879],{"class":264},[254,158818,158819,158821,158823,158826],{"class":256,"line":1451},[254,158820,31440],{"class":313},[254,158822,265],{"class":264},[254,158824,158825],{"class":369},"\"等级:B\"",[254,158827,271],{"class":264},[254,158829,158830,158832,158834,158836,158839],{"class":256,"line":1457},[254,158831,157946],{"class":260},[254,158833,157923],{"class":264},[254,158835,1850],{"class":260},[254,158837,158838],{"class":313}," 70",[254,158840,3879],{"class":264},[254,158842,158843,158845,158847,158850],{"class":256,"line":1469},[254,158844,31440],{"class":313},[254,158846,265],{"class":264},[254,158848,158849],{"class":369},"\"等级:C\"",[254,158851,271],{"class":264},[254,158853,158854,158856,158858,158860,158862],{"class":256,"line":1752},[254,158855,157946],{"class":260},[254,158857,157923],{"class":264},[254,158859,1850],{"class":260},[254,158861,157977],{"class":313},[254,158863,3879],{"class":264},[254,158865,158866,158868,158870,158873],{"class":256,"line":1757},[254,158867,31440],{"class":313},[254,158869,265],{"class":264},[254,158871,158872],{"class":369},"\"等级:D\"",[254,158874,271],{"class":264},[254,158876,158877,158879],{"class":256,"line":1763},[254,158878,1841],{"class":260},[254,158880,3879],{"class":264},[254,158882,158883,158885,158887,158890],{"class":256,"line":1768},[254,158884,31440],{"class":313},[254,158886,265],{"class":264},[254,158888,158889],{"class":369},"\"等级:E\"",[254,158891,271],{"class":264},[34,158893,158895],{"id":158894},"_311-小案例会员折扣","3.11 小案例：会员折扣",[14,158897,123432],{},[21,158899,158900,158903,158906,158909],{},[24,158901,158902],{},"输入消费金额。",[24,158904,158905],{},"输入会员等级，普通、银卡、金卡。",[24,158907,158908],{},"普通不打折，银卡 9 折，金卡 8 折。",[24,158910,158911],{},"满 500 再减 50。",[14,158913,10176],{},[245,158915,158917],{"className":30519,"code":158916,"language":30521,"meta":174,"style":174},"amount = float(input(\"请输入消费金额:\"))\nlevel = input(\"请输入会员等级(普通\u002F银卡\u002F金卡):\")\n\ndiscount = 1\n\nif level == \"银卡\":\n    discount = 0.9\nelif level == \"金卡\":\n    discount = 0.8\nelif level == \"普通\":\n    discount = 1\nelse:\n    print(\"会员等级输入错误，按普通会员计算\")\n\npay = amount * discount\n\nif pay >= 500:\n    pay -= 50\n\nprint(f\"应付金额:{pay:.2f}元\")\n",[251,158918,158919,158939,158955,158959,158967,158971,158985,158995,159008,159017,159030,159038,159044,159055,159059,159073,159077,159091,159101,159105],{"__ignoreMap":174},[254,158920,158921,158924,158926,158928,158930,158932,158934,158937],{"class":256,"line":257},[254,158922,158923],{"class":264},"amount ",[254,158925,310],{"class":260},[254,158927,109938],{"class":313},[254,158929,265],{"class":264},[254,158931,53962],{"class":313},[254,158933,265],{"class":264},[254,158935,158936],{"class":369},"\"请输入消费金额:\"",[254,158938,30638],{"class":264},[254,158940,158941,158944,158946,158948,158950,158953],{"class":256,"line":175},[254,158942,158943],{"class":264},"level ",[254,158945,310],{"class":260},[254,158947,60746],{"class":313},[254,158949,265],{"class":264},[254,158951,158952],{"class":369},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[254,158954,271],{"class":264},[254,158956,158957],{"class":256,"line":1319},[254,158958,2540],{"emptyLinePlaceholder":184},[254,158960,158961,158963,158965],{"class":256,"line":1334},[254,158962,157376],{"class":264},[254,158964,310],{"class":260},[254,158966,55840],{"class":313},[254,158968,158969],{"class":256,"line":1340},[254,158970,2540],{"emptyLinePlaceholder":184},[254,158972,158973,158975,158978,158980,158983],{"class":256,"line":1354},[254,158974,1671],{"class":260},[254,158976,158977],{"class":264}," level ",[254,158979,3089],{"class":260},[254,158981,158982],{"class":369}," \"银卡\"",[254,158984,3879],{"class":264},[254,158986,158987,158990,158992],{"class":256,"line":1360},[254,158988,158989],{"class":264},"    discount ",[254,158991,310],{"class":260},[254,158993,158994],{"class":313}," 0.9\n",[254,158996,158997,158999,159001,159003,159006],{"class":256,"line":1451},[254,158998,157946],{"class":260},[254,159000,158977],{"class":264},[254,159002,3089],{"class":260},[254,159004,159005],{"class":369}," \"金卡\"",[254,159007,3879],{"class":264},[254,159009,159010,159012,159014],{"class":256,"line":1457},[254,159011,158989],{"class":264},[254,159013,310],{"class":260},[254,159015,159016],{"class":313}," 0.8\n",[254,159018,159019,159021,159023,159025,159028],{"class":256,"line":1469},[254,159020,157946],{"class":260},[254,159022,158977],{"class":264},[254,159024,3089],{"class":260},[254,159026,159027],{"class":369}," \"普通\"",[254,159029,3879],{"class":264},[254,159031,159032,159034,159036],{"class":256,"line":1752},[254,159033,158989],{"class":264},[254,159035,310],{"class":260},[254,159037,55840],{"class":313},[254,159039,159040,159042],{"class":256,"line":1757},[254,159041,1841],{"class":260},[254,159043,3879],{"class":264},[254,159045,159046,159048,159050,159053],{"class":256,"line":1763},[254,159047,31440],{"class":313},[254,159049,265],{"class":264},[254,159051,159052],{"class":369},"\"会员等级输入错误，按普通会员计算\"",[254,159054,271],{"class":264},[254,159056,159057],{"class":256,"line":1768},[254,159058,2540],{"emptyLinePlaceholder":184},[254,159060,159061,159064,159066,159069,159071],{"class":256,"line":1782},[254,159062,159063],{"class":264},"pay ",[254,159065,310],{"class":260},[254,159067,159068],{"class":264}," amount ",[254,159070,719],{"class":260},[254,159072,157415],{"class":264},[254,159074,159075],{"class":256,"line":1787},[254,159076,2540],{"emptyLinePlaceholder":184},[254,159078,159079,159081,159084,159086,159089],{"class":256,"line":1793},[254,159080,1671],{"class":260},[254,159082,159083],{"class":264}," pay ",[254,159085,1850],{"class":260},[254,159087,159088],{"class":313}," 500",[254,159090,3879],{"class":264},[254,159092,159093,159096,159098],{"class":256,"line":1814},[254,159094,159095],{"class":264},"    pay ",[254,159097,150392],{"class":260},[254,159099,159100],{"class":313}," 50\n",[254,159102,159103],{"class":256,"line":1819},[254,159104,2540],{"emptyLinePlaceholder":184},[254,159106,159107,159109,159111,159113,159115,159117,159120,159122,159124,159126],{"class":256,"line":1833},[254,159108,30556],{"class":313},[254,159110,265],{"class":264},[254,159112,317],{"class":260},[254,159114,157496],{"class":369},[254,159116,1160],{"class":313},[254,159118,159119],{"class":264},"pay",[254,159121,157299],{"class":260},[254,159123,1210],{"class":313},[254,159125,157152],{"class":369},[254,159127,271],{"class":264},[34,159129,159131],{"id":159130},"_312-易错点","3.12 易错点",[21,159133,159134,159137,159140,159143,159148],{},[24,159135,159136],{},"冒号不能漏。",[24,159138,159139],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[24,159141,159142],{},"多分支判断要注意顺序。",[24,159144,159145,159146,28526],{},"判断相等用 ",[251,159147,3089],{},[24,159149,159150],{},"字符串比较区分大小写：",[245,159152,159154],{"className":30519,"code":159153,"language":30521,"meta":174,"style":174},"\"Y\" == \"y\"  # False\n",[251,159155,159156],{"__ignoreMap":174},[254,159157,159158,159161,159163,159165],{"class":256,"line":257},[254,159159,159160],{"class":369},"\"Y\"",[254,159162,101700],{"class":260},[254,159164,158145],{"class":369},[254,159166,159167],{"class":323},"  # False\n",[14,159169,159170],{},"可转换后再判断：",[245,159172,159174],{"className":30519,"code":159173,"language":30521,"meta":174,"style":174},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[251,159175,159176,159193,159206],{"__ignoreMap":174},[254,159177,159178,159181,159183,159185,159187,159190],{"class":256,"line":257},[254,159179,159180],{"class":264},"answer ",[254,159182,310],{"class":260},[254,159184,60746],{"class":313},[254,159186,265],{"class":264},[254,159188,159189],{"class":369},"\"是否继续(y\u002Fn):\"",[254,159191,159192],{"class":264},").lower()\n",[254,159194,159195,159197,159200,159202,159204],{"class":256,"line":175},[254,159196,1671],{"class":260},[254,159198,159199],{"class":264}," answer ",[254,159201,3089],{"class":260},[254,159203,158145],{"class":369},[254,159205,3879],{"class":264},[254,159207,159208,159210,159212,159215],{"class":256,"line":1319},[254,159209,31440],{"class":313},[254,159211,265],{"class":264},[254,159213,159214],{"class":369},"\"继续\"",[254,159216,271],{"class":264},[34,159218,159220],{"id":159219},"_313-本章练习","3.13 本章练习",[21,159222,159223,159226,159229,159232,159242],{},[24,159224,159225],{},"输入年龄，判断是否成年。",[24,159227,159228],{},"输入年份，判断是否为闰年。",[24,159230,159231],{},"输入三个数字，输出最大值。",[24,159233,159234,159235,159238,159239,159241],{},"写登录判断：用户名是 ",[251,159236,159237],{},"admin"," 且密码是 ",[251,159240,15225],{}," 才登录成功。",[24,159243,159244],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[5267,159246,159247],{},"html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":174,"searchDepth":175,"depth":175,"links":159249},[159250,159251,159252,159253,159254,159255,159260,159261,159262,159263,159264,159265,159266],{"id":157638,"depth":175,"text":157639},{"id":157691,"depth":175,"text":157692},{"id":157795,"depth":175,"text":157796},{"id":157885,"depth":175,"text":157886},{"id":158075,"depth":175,"text":158076},{"id":158198,"depth":175,"text":158199,"children":159256},[159257,159258,159259],{"id":158202,"depth":1319,"text":158203},{"id":158259,"depth":1319,"text":158260},{"id":158316,"depth":1319,"text":158317},{"id":158361,"depth":175,"text":158362},{"id":158452,"depth":175,"text":158453},{"id":158579,"depth":175,"text":158580},{"id":158709,"depth":175,"text":158710},{"id":158894,"depth":175,"text":158895},{"id":159130,"depth":175,"text":159131},{"id":159219,"depth":175,"text":159220},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":157630,"description":23518},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159273,"title":159274,"body":159275,"description":23518,"extension":181,"meta":161044,"navigation":184,"path":161045,"seo":161046,"stem":161047,"__hash__":161048},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159276,"toc":161024},[159277,159280,159284,159290,159293,159310,159314,159316,159333,159335,159380,159382,159399,159403,159406,159472,159475,159493,159497,159658,159667,159671,159675,159680,159727,159729,159735,159739,159744,159791,159793,159799,159803,159808,159844,159847,159894,159898,159904,159962,159967,159998,160003,160007,160062,160065,160137,160140,160199,160203,160206,160281,160284,160288,160394,160397,160423,160427,160439,160508,160511,160603,160607,160609,160620,160622,160752,160756,160958,160966,160970,161000,161004,161021],[10,159278,159274],{"id":159279},"_4-循环语句",[34,159281,159283],{"id":159282},"_41-为什么需要循环","4.1 为什么需要循环",[14,159285,159286,159287,159289],{},"如果要输出 1 到 100，不应该写 100 行 ",[251,159288,146612],{},"，而应该用循环。",[14,159291,159292],{},"循环适合处理重复任务：",[21,159294,159295,159298,159301,159304,159307],{},[24,159296,159297],{},"重复输出。",[24,159299,159300],{},"重复输入。",[24,159302,159303],{},"遍历数据。",[24,159305,159306],{},"持续执行菜单。",[24,159308,159309],{},"批量处理文件或数据。",[34,159311,159313],{"id":159312},"_42-while循环","4.2 while循环",[14,159315,5322],{},[245,159317,159319],{"className":30519,"code":159318,"language":30521,"meta":174,"style":174},"while 条件:\n    循环体\n",[251,159320,159321,159328],{"__ignoreMap":174},[254,159322,159323,159325],{"class":256,"line":257},[254,159324,108804],{"class":260},[254,159326,159327],{"class":264}," 条件:\n",[254,159329,159330],{"class":256,"line":175},[254,159331,159332],{"class":264},"    循环体\n",[14,159334,15276],{},[245,159336,159338],{"className":30519,"code":159337,"language":30521,"meta":174,"style":174},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[251,159339,159340,159348,159352,159364,159371],{"__ignoreMap":174},[254,159341,159342,159344,159346],{"class":256,"line":257},[254,159343,100289],{"class":264},[254,159345,310],{"class":260},[254,159347,55840],{"class":313},[254,159349,159350],{"class":256,"line":175},[254,159351,2540],{"emptyLinePlaceholder":184},[254,159353,159354,159356,159358,159360,159362],{"class":256,"line":1319},[254,159355,108804],{"class":260},[254,159357,9579],{"class":264},[254,159359,1728],{"class":260},[254,159361,2288],{"class":313},[254,159363,3879],{"class":264},[254,159365,159366,159368],{"class":256,"line":1334},[254,159367,31440],{"class":313},[254,159369,159370],{"class":264},"(i)\n",[254,159372,159373,159376,159378],{"class":256,"line":1340},[254,159374,159375],{"class":264},"    i ",[254,159377,9618],{"class":260},[254,159379,55840],{"class":313},[14,159381,81070],{},[21,159383,159384,159390,159393,159396],{},[24,159385,159386,159387,28526],{},"判断条件 ",[251,159388,159389],{},"i \u003C= 5",[24,159391,159392],{},"条件成立，执行循环体。",[24,159394,159395],{},"执行完后回到条件判断。",[24,159397,159398],{},"条件不成立，退出循环。",[34,159400,159402],{"id":159401},"_43-while累加","4.3 while累加",[14,159404,159405],{},"计算 1 到 100 的和：",[245,159407,159409],{"className":30519,"code":159408,"language":30521,"meta":174,"style":174},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[251,159410,159411,159419,159427,159431,159443,159453,159461,159465],{"__ignoreMap":174},[254,159412,159413,159415,159417],{"class":256,"line":257},[254,159414,100289],{"class":264},[254,159416,310],{"class":260},[254,159418,55840],{"class":313},[254,159420,159421,159423,159425],{"class":256,"line":175},[254,159422,157400],{"class":264},[254,159424,310],{"class":260},[254,159426,47474],{"class":313},[254,159428,159429],{"class":256,"line":1319},[254,159430,2540],{"emptyLinePlaceholder":184},[254,159432,159433,159435,159437,159439,159441],{"class":256,"line":1334},[254,159434,108804],{"class":260},[254,159436,9579],{"class":264},[254,159438,1728],{"class":260},[254,159440,5895],{"class":313},[254,159442,3879],{"class":264},[254,159444,159445,159448,159450],{"class":256,"line":1340},[254,159446,159447],{"class":264},"    total ",[254,159449,9618],{"class":260},[254,159451,159452],{"class":264}," i\n",[254,159454,159455,159457,159459],{"class":256,"line":1354},[254,159456,159375],{"class":264},[254,159458,9618],{"class":260},[254,159460,55840],{"class":313},[254,159462,159463],{"class":256,"line":1360},[254,159464,2540],{"emptyLinePlaceholder":184},[254,159466,159467,159469],{"class":256,"line":1451},[254,159468,30556],{"class":313},[254,159470,159471],{"class":264},"(total)\n",[14,159473,159474],{},"核心思想：",[21,159476,159477,159482,159487],{},[24,159478,159479,159481],{},[251,159480,705],{}," 控制循环次数。",[24,159483,159484,159486],{},[251,159485,157501],{}," 保存累加结果。",[24,159488,159489,159490,159492],{},"每轮循环都要更新 ",[251,159491,705],{},"，否则可能死循环。",[34,159494,159496],{"id":159495},"_44-while猜数字","4.4 while猜数字",[245,159498,159500],{"className":30519,"code":159499,"language":30521,"meta":174,"style":174},"import random\n\nanswer = random.randint(1, 100)\ncount = 0\n\nwhile True:\n    guess = int(input(\"请输入1到100之间的数字:\"))\n    count += 1\n\n    if guess > answer:\n        print(\"猜大了\")\n    elif guess \u003C answer:\n        print(\"猜小了\")\n    else:\n        print(f\"猜对了，一共猜了{count}次\")\n        break\n",[251,159501,159502,159508,159512,159529,159537,159541,159549,159569,159578,159582,159594,159605,159615,159626,159632,159654],{"__ignoreMap":174},[254,159503,159504,159506],{"class":256,"line":257},[254,159505,30533],{"class":260},[254,159507,45469],{"class":264},[254,159509,159510],{"class":256,"line":175},[254,159511,2540],{"emptyLinePlaceholder":184},[254,159513,159514,159516,159518,159521,159523,159525,159527],{"class":256,"line":1319},[254,159515,159180],{"class":264},[254,159517,310],{"class":260},[254,159519,159520],{"class":264}," random.randint(",[254,159522,482],{"class":313},[254,159524,12576],{"class":264},[254,159526,575],{"class":313},[254,159528,271],{"class":264},[254,159530,159531,159533,159535],{"class":256,"line":1334},[254,159532,146831],{"class":264},[254,159534,310],{"class":260},[254,159536,47474],{"class":313},[254,159538,159539],{"class":256,"line":1340},[254,159540,2540],{"emptyLinePlaceholder":184},[254,159542,159543,159545,159547],{"class":256,"line":1354},[254,159544,108804],{"class":260},[254,159546,95433],{"class":313},[254,159548,3879],{"class":264},[254,159550,159551,159554,159556,159558,159560,159562,159564,159567],{"class":256,"line":1360},[254,159552,159553],{"class":264},"    guess ",[254,159555,310],{"class":260},[254,159557,2522],{"class":313},[254,159559,265],{"class":264},[254,159561,53962],{"class":313},[254,159563,265],{"class":264},[254,159565,159566],{"class":369},"\"请输入1到100之间的数字:\"",[254,159568,30638],{"class":264},[254,159570,159571,159574,159576],{"class":256,"line":1451},[254,159572,159573],{"class":264},"    count ",[254,159575,9618],{"class":260},[254,159577,55840],{"class":313},[254,159579,159580],{"class":256,"line":1457},[254,159581,2540],{"emptyLinePlaceholder":184},[254,159583,159584,159586,159589,159591],{"class":256,"line":1469},[254,159585,3241],{"class":260},[254,159587,159588],{"class":264}," guess ",[254,159590,1224],{"class":260},[254,159592,159593],{"class":264}," answer:\n",[254,159595,159596,159598,159600,159603],{"class":256,"line":1752},[254,159597,32592],{"class":313},[254,159599,265],{"class":264},[254,159601,159602],{"class":369},"\"猜大了\"",[254,159604,271],{"class":264},[254,159606,159607,159609,159611,159613],{"class":256,"line":1757},[254,159608,39434],{"class":260},[254,159610,159588],{"class":264},[254,159612,1174],{"class":260},[254,159614,159593],{"class":264},[254,159616,159617,159619,159621,159624],{"class":256,"line":1763},[254,159618,32592],{"class":313},[254,159620,265],{"class":264},[254,159622,159623],{"class":369},"\"猜小了\"",[254,159625,271],{"class":264},[254,159627,159628,159630],{"class":256,"line":1768},[254,159629,158162],{"class":260},[254,159631,3879],{"class":264},[254,159633,159634,159636,159638,159640,159643,159645,159647,159649,159652],{"class":256,"line":1782},[254,159635,32592],{"class":313},[254,159637,265],{"class":264},[254,159639,317],{"class":260},[254,159641,159642],{"class":369},"\"猜对了，一共猜了",[254,159644,1160],{"class":313},[254,159646,84575],{"class":264},[254,159648,1210],{"class":313},[254,159650,159651],{"class":369},"次\"",[254,159653,271],{"class":264},[254,159655,159656],{"class":256,"line":1787},[254,159657,31768],{"class":260},[14,159659,159660,159663,159664,159666],{},[251,159661,159662],{},"while True"," 表示无限循环，通常配合 ",[251,159665,2193],{}," 使用。",[34,159668,159670],{"id":159669},"_45-break和continue","4.5 break和continue",[225,159672,159674],{"id":159673},"_451-break","4.5.1 break",[14,159676,159677,159679],{},[251,159678,2193],{}," 直接结束整个循环。",[245,159681,159683],{"className":30519,"code":159682,"language":30521,"meta":174,"style":174},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[251,159684,159685,159705,159717,159721],{"__ignoreMap":174},[254,159686,159687,159689,159691,159693,159695,159697,159699,159701,159703],{"class":256,"line":257},[254,159688,3165],{"class":260},[254,159690,9579],{"class":264},[254,159692,26184],{"class":260},[254,159694,32584],{"class":313},[254,159696,265],{"class":264},[254,159698,482],{"class":313},[254,159700,12576],{"class":264},[254,159702,608],{"class":313},[254,159704,30927],{"class":264},[254,159706,159707,159709,159711,159713,159715],{"class":256,"line":175},[254,159708,3241],{"class":260},[254,159710,9579],{"class":264},[254,159712,3089],{"class":260},[254,159714,78211],{"class":313},[254,159716,3879],{"class":264},[254,159718,159719],{"class":256,"line":1319},[254,159720,31768],{"class":260},[254,159722,159723,159725],{"class":256,"line":1334},[254,159724,31440],{"class":313},[254,159726,159370],{"class":264},[14,159728,146597],{},[245,159730,159733],{"className":159731,"code":159732,"language":5328,"meta":174},[5326],"1\n2\n",[251,159734,159732],{"__ignoreMap":174},[225,159736,159738],{"id":159737},"_452-continue","4.5.2 continue",[14,159740,159741,159743],{},[251,159742,154812],{}," 跳过本轮剩余代码，进入下一轮循环。",[245,159745,159747],{"className":30519,"code":159746,"language":30521,"meta":174,"style":174},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[251,159748,159749,159769,159781,159785],{"__ignoreMap":174},[254,159750,159751,159753,159755,159757,159759,159761,159763,159765,159767],{"class":256,"line":257},[254,159752,3165],{"class":260},[254,159754,9579],{"class":264},[254,159756,26184],{"class":260},[254,159758,32584],{"class":313},[254,159760,265],{"class":264},[254,159762,482],{"class":313},[254,159764,12576],{"class":264},[254,159766,608],{"class":313},[254,159768,30927],{"class":264},[254,159770,159771,159773,159775,159777,159779],{"class":256,"line":175},[254,159772,3241],{"class":260},[254,159774,9579],{"class":264},[254,159776,3089],{"class":260},[254,159778,78211],{"class":313},[254,159780,3879],{"class":264},[254,159782,159783],{"class":256,"line":1319},[254,159784,148652],{"class":260},[254,159786,159787,159789],{"class":256,"line":1334},[254,159788,31440],{"class":313},[254,159790,159370],{"class":264},[14,159792,146597],{},[245,159794,159797],{"className":159795,"code":159796,"language":5328,"meta":174},[5326],"1\n2\n4\n5\n",[251,159798,159796],{"__ignoreMap":174},[34,159800,159802],{"id":159801},"_46-for循环","4.6 for循环",[14,159804,159805,159807],{},[251,159806,3165],{}," 常用于遍历序列。",[245,159809,159811],{"className":30519,"code":159810,"language":30521,"meta":174,"style":174},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[251,159812,159813,159822,159826,159837],{"__ignoreMap":174},[254,159814,159815,159817,159819],{"class":256,"line":257},[254,159816,146676],{"class":264},[254,159818,310],{"class":260},[254,159820,159821],{"class":369}," \"python\"\n",[254,159823,159824],{"class":256,"line":175},[254,159825,2540],{"emptyLinePlaceholder":184},[254,159827,159828,159830,159833,159835],{"class":256,"line":1319},[254,159829,3165],{"class":260},[254,159831,159832],{"class":264}," ch ",[254,159834,26184],{"class":260},[254,159836,158539],{"class":264},[254,159838,159839,159841],{"class":256,"line":1334},[254,159840,31440],{"class":313},[254,159842,159843],{"class":264},"(ch)\n",[14,159845,159846],{},"遍历列表：",[245,159848,159850],{"className":30519,"code":159849,"language":30521,"meta":174,"style":174},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[251,159851,159852,159874,159878,159888],{"__ignoreMap":174},[254,159853,159854,159857,159859,159861,159863,159865,159867,159869,159872],{"class":256,"line":257},[254,159855,159856],{"class":264},"students ",[254,159858,310],{"class":260},[254,159860,52367],{"class":264},[254,159862,150028],{"class":369},[254,159864,12576],{"class":264},[254,159866,151076],{"class":369},[254,159868,12576],{"class":264},[254,159870,159871],{"class":369},"\"小刚\"",[254,159873,33387],{"class":264},[254,159875,159876],{"class":256,"line":175},[254,159877,2540],{"emptyLinePlaceholder":184},[254,159879,159880,159882,159884,159886],{"class":256,"line":1319},[254,159881,3165],{"class":260},[254,159883,152277],{"class":264},[254,159885,26184],{"class":260},[254,159887,152282],{"class":264},[254,159889,159890,159892],{"class":256,"line":1334},[254,159891,31440],{"class":313},[254,159893,150182],{"class":264},[34,159895,159897],{"id":159896},"_47-range函数","4.7 range函数",[14,159899,159900,159903],{},[251,159901,159902],{},"range()"," 用于生成整数序列。",[245,159905,159907],{"className":30519,"code":159906,"language":30521,"meta":174,"style":174},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[251,159908,159909,159923,159941],{"__ignoreMap":174},[254,159910,159911,159913,159915,159917,159920],{"class":256,"line":257},[254,159912,33557],{"class":313},[254,159914,265],{"class":264},[254,159916,583],{"class":313},[254,159918,159919],{"class":264},")          ",[254,159921,159922],{"class":323},"# 0,1,2,3,4\n",[254,159924,159925,159927,159929,159931,159933,159935,159938],{"class":256,"line":175},[254,159926,33557],{"class":313},[254,159928,265],{"class":264},[254,159930,482],{"class":313},[254,159932,12576],{"class":264},[254,159934,583],{"class":313},[254,159936,159937],{"class":264},")       ",[254,159939,159940],{"class":323},"# 1,2,3,4\n",[254,159942,159943,159945,159947,159949,159951,159953,159955,159957,159959],{"class":256,"line":1319},[254,159944,33557],{"class":313},[254,159946,265],{"class":264},[254,159948,482],{"class":313},[254,159950,12576],{"class":264},[254,159952,710],{"class":313},[254,159954,12576],{"class":264},[254,159956,342],{"class":313},[254,159958,155801],{"class":264},[254,159960,159961],{"class":323},"# 1,3,5,7,9\n",[14,159963,159964,159965,24759],{},"配合 ",[251,159966,3165],{},[245,159968,159970],{"className":30519,"code":159969,"language":30521,"meta":174,"style":174},"for i in range(1, 6):\n    print(i)\n",[251,159971,159972,159992],{"__ignoreMap":174},[254,159973,159974,159976,159978,159980,159982,159984,159986,159988,159990],{"class":256,"line":257},[254,159975,3165],{"class":260},[254,159977,9579],{"class":264},[254,159979,26184],{"class":260},[254,159981,32584],{"class":313},[254,159983,265],{"class":264},[254,159985,482],{"class":313},[254,159987,12576],{"class":264},[254,159989,608],{"class":313},[254,159991,30927],{"class":264},[254,159993,159994,159996],{"class":256,"line":175},[254,159995,31440],{"class":313},[254,159997,159370],{"class":264},[14,159999,9166,160000,160002],{},[251,160001,33557],{}," 的结束值不包含在内。",[34,160004,160006],{"id":160005},"_48-for循环求和","4.8 for循环求和",[245,160008,160010],{"className":30519,"code":160009,"language":30521,"meta":174,"style":174},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[251,160011,160012,160020,160024,160044,160052,160056],{"__ignoreMap":174},[254,160013,160014,160016,160018],{"class":256,"line":257},[254,160015,157400],{"class":264},[254,160017,310],{"class":260},[254,160019,47474],{"class":313},[254,160021,160022],{"class":256,"line":175},[254,160023,2540],{"emptyLinePlaceholder":184},[254,160025,160026,160028,160030,160032,160034,160036,160038,160040,160042],{"class":256,"line":1319},[254,160027,3165],{"class":260},[254,160029,9579],{"class":264},[254,160031,26184],{"class":260},[254,160033,32584],{"class":313},[254,160035,265],{"class":264},[254,160037,482],{"class":313},[254,160039,12576],{"class":264},[254,160041,601],{"class":313},[254,160043,30927],{"class":264},[254,160045,160046,160048,160050],{"class":256,"line":1334},[254,160047,159447],{"class":264},[254,160049,9618],{"class":260},[254,160051,159452],{"class":264},[254,160053,160054],{"class":256,"line":1340},[254,160055,2540],{"emptyLinePlaceholder":184},[254,160057,160058,160060],{"class":256,"line":1354},[254,160059,30556],{"class":313},[254,160061,159471],{"class":264},[14,160063,160064],{},"求偶数和：",[245,160066,160068],{"className":30519,"code":160067,"language":30521,"meta":174,"style":174},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[251,160069,160070,160078,160082,160102,160118,160127,160131],{"__ignoreMap":174},[254,160071,160072,160074,160076],{"class":256,"line":257},[254,160073,157400],{"class":264},[254,160075,310],{"class":260},[254,160077,47474],{"class":313},[254,160079,160080],{"class":256,"line":175},[254,160081,2540],{"emptyLinePlaceholder":184},[254,160083,160084,160086,160088,160090,160092,160094,160096,160098,160100],{"class":256,"line":1319},[254,160085,3165],{"class":260},[254,160087,9579],{"class":264},[254,160089,26184],{"class":260},[254,160091,32584],{"class":313},[254,160093,265],{"class":264},[254,160095,482],{"class":313},[254,160097,12576],{"class":264},[254,160099,601],{"class":313},[254,160101,30927],{"class":264},[254,160103,160104,160106,160108,160110,160112,160114,160116],{"class":256,"line":1334},[254,160105,3241],{"class":260},[254,160107,9579],{"class":264},[254,160109,592],{"class":260},[254,160111,14896],{"class":313},[254,160113,101700],{"class":260},[254,160115,4233],{"class":313},[254,160117,3879],{"class":264},[254,160119,160120,160123,160125],{"class":256,"line":1340},[254,160121,160122],{"class":264},"        total ",[254,160124,9618],{"class":260},[254,160126,159452],{"class":264},[254,160128,160129],{"class":256,"line":1354},[254,160130,2540],{"emptyLinePlaceholder":184},[254,160132,160133,160135],{"class":256,"line":1360},[254,160134,30556],{"class":313},[254,160136,159471],{"class":264},[14,160138,160139],{},"也可以：",[245,160141,160143],{"className":30519,"code":160142,"language":30521,"meta":174,"style":174},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[251,160144,160145,160153,160157,160181,160189,160193],{"__ignoreMap":174},[254,160146,160147,160149,160151],{"class":256,"line":257},[254,160148,157400],{"class":264},[254,160150,310],{"class":260},[254,160152,47474],{"class":313},[254,160154,160155],{"class":256,"line":175},[254,160156,2540],{"emptyLinePlaceholder":184},[254,160158,160159,160161,160163,160165,160167,160169,160171,160173,160175,160177,160179],{"class":256,"line":1319},[254,160160,3165],{"class":260},[254,160162,9579],{"class":264},[254,160164,26184],{"class":260},[254,160166,32584],{"class":313},[254,160168,265],{"class":264},[254,160170,342],{"class":313},[254,160172,12576],{"class":264},[254,160174,601],{"class":313},[254,160176,12576],{"class":264},[254,160178,342],{"class":313},[254,160180,30927],{"class":264},[254,160182,160183,160185,160187],{"class":256,"line":1334},[254,160184,159447],{"class":264},[254,160186,9618],{"class":260},[254,160188,159452],{"class":264},[254,160190,160191],{"class":256,"line":1340},[254,160192,2540],{"emptyLinePlaceholder":184},[254,160194,160195,160197],{"class":256,"line":1354},[254,160196,30556],{"class":313},[254,160198,159471],{"class":264},[34,160200,160202],{"id":160201},"_49-循环嵌套","4.9 循环嵌套",[14,160204,160205],{},"嵌套循环就是循环里面再写循环。",[245,160207,160209],{"className":30519,"code":160208,"language":30521,"meta":174,"style":174},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[251,160210,160211,160231,160251],{"__ignoreMap":174},[254,160212,160213,160215,160217,160219,160221,160223,160225,160227,160229],{"class":256,"line":257},[254,160214,3165],{"class":260},[254,160216,9579],{"class":264},[254,160218,26184],{"class":260},[254,160220,32584],{"class":313},[254,160222,265],{"class":264},[254,160224,482],{"class":313},[254,160226,12576],{"class":264},[254,160228,557],{"class":313},[254,160230,30927],{"class":264},[254,160232,160233,160235,160237,160239,160241,160243,160245,160247,160249],{"class":256,"line":175},[254,160234,3341],{"class":260},[254,160236,9641],{"class":264},[254,160238,26184],{"class":260},[254,160240,32584],{"class":313},[254,160242,265],{"class":264},[254,160244,482],{"class":313},[254,160246,12576],{"class":264},[254,160248,557],{"class":313},[254,160250,30927],{"class":264},[254,160252,160253,160255,160257,160259,160262,160264,160266,160268,160271,160273,160275,160277,160279],{"class":256,"line":1319},[254,160254,32592],{"class":313},[254,160256,265],{"class":264},[254,160258,317],{"class":260},[254,160260,160261],{"class":369},"\"i=",[254,160263,1160],{"class":313},[254,160265,705],{"class":264},[254,160267,1210],{"class":313},[254,160269,160270],{"class":369},", j=",[254,160272,1160],{"class":313},[254,160274,731],{"class":264},[254,160276,1210],{"class":313},[254,160278,515],{"class":369},[254,160280,271],{"class":264},[14,160282,160283],{},"外层循环执行一次，内层循环执行完整一轮。",[34,160285,160287],{"id":160286},"_410-九九乘法表","4.10 九九乘法表",[245,160289,160291],{"className":30519,"code":160290,"language":30521,"meta":174,"style":174},"for i in range(1, 10):\n    for j in range(1, i + 1):\n        print(f\"{j}*{i}={i * j}\", end=\"\\t\")\n    print()\n",[251,160292,160293,160313,160336,160388],{"__ignoreMap":174},[254,160294,160295,160297,160299,160301,160303,160305,160307,160309,160311],{"class":256,"line":257},[254,160296,3165],{"class":260},[254,160298,9579],{"class":264},[254,160300,26184],{"class":260},[254,160302,32584],{"class":313},[254,160304,265],{"class":264},[254,160306,482],{"class":313},[254,160308,12576],{"class":264},[254,160310,710],{"class":313},[254,160312,30927],{"class":264},[254,160314,160315,160317,160319,160321,160323,160325,160327,160330,160332,160334],{"class":256,"line":175},[254,160316,3341],{"class":260},[254,160318,9641],{"class":264},[254,160320,26184],{"class":260},[254,160322,32584],{"class":313},[254,160324,265],{"class":264},[254,160326,482],{"class":313},[254,160328,160329],{"class":264},", i ",[254,160331,745],{"class":260},[254,160333,25259],{"class":313},[254,160335,30927],{"class":264},[254,160337,160338,160340,160342,160344,160346,160348,160350,160352,160354,160356,160358,160360,160362,160364,160366,160368,160370,160372,160374,160376,160378,160380,160382,160384,160386],{"class":256,"line":1319},[254,160339,32592],{"class":313},[254,160341,265],{"class":264},[254,160343,317],{"class":260},[254,160345,515],{"class":369},[254,160347,1160],{"class":313},[254,160349,731],{"class":264},[254,160351,1210],{"class":313},[254,160353,719],{"class":369},[254,160355,1160],{"class":313},[254,160357,705],{"class":264},[254,160359,1210],{"class":313},[254,160361,310],{"class":369},[254,160363,1160],{"class":313},[254,160365,100289],{"class":264},[254,160367,719],{"class":260},[254,160369,3550],{"class":264},[254,160371,1210],{"class":313},[254,160373,515],{"class":369},[254,160375,12576],{"class":264},[254,160377,45942],{"class":5357},[254,160379,310],{"class":260},[254,160381,515],{"class":369},[254,160383,1370],{"class":313},[254,160385,515],{"class":369},[254,160387,271],{"class":264},[254,160389,160390,160392],{"class":256,"line":1334},[254,160391,31440],{"class":313},[254,160393,2116],{"class":264},[14,160395,160396],{},"关键点：",[21,160398,160399,160405,160411,160417],{},[24,160400,160401,160402,160404],{},"外层 ",[251,160403,705],{}," 控制行。",[24,160406,160407,160408,160410],{},"内层 ",[251,160409,731],{}," 控制列。",[24,160412,160413,160414,160416],{},"每行结束后用 ",[251,160415,146612],{}," 换行。",[24,160418,160419,160422],{},[251,160420,160421],{},"end=\"\\t\""," 让同一行的内容横向排列。",[34,160424,160426],{"id":160425},"_411-循环else","4.11 循环else",[14,160428,160429,160430,160432,160433,160435,160436,160438],{},"Python 的循环可以带 ",[251,160431,1841],{},"。当循环正常结束时执行 ",[251,160434,1841],{},"，如果被 ",[251,160437,2193],{}," 打断，则不执行。",[245,160440,160442],{"className":30519,"code":160441,"language":30521,"meta":174,"style":174},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[251,160443,160444,160464,160476,160487,160491,160497],{"__ignoreMap":174},[254,160445,160446,160448,160450,160452,160454,160456,160458,160460,160462],{"class":256,"line":257},[254,160447,3165],{"class":260},[254,160449,9579],{"class":264},[254,160451,26184],{"class":260},[254,160453,32584],{"class":313},[254,160455,265],{"class":264},[254,160457,482],{"class":313},[254,160459,12576],{"class":264},[254,160461,608],{"class":313},[254,160463,30927],{"class":264},[254,160465,160466,160468,160470,160472,160474],{"class":256,"line":175},[254,160467,3241],{"class":260},[254,160469,9579],{"class":264},[254,160471,3089],{"class":260},[254,160473,2178],{"class":313},[254,160475,3879],{"class":264},[254,160477,160478,160480,160482,160485],{"class":256,"line":1319},[254,160479,32592],{"class":313},[254,160481,265],{"class":264},[254,160483,160484],{"class":369},"\"找到了\"",[254,160486,271],{"class":264},[254,160488,160489],{"class":256,"line":1334},[254,160490,31768],{"class":260},[254,160492,160493,160495],{"class":256,"line":1340},[254,160494,1841],{"class":260},[254,160496,3879],{"class":264},[254,160498,160499,160501,160503,160506],{"class":256,"line":1354},[254,160500,31440],{"class":313},[254,160502,265],{"class":264},[254,160504,160505],{"class":369},"\"没找到\"",[254,160507,271],{"class":264},[14,160509,160510],{},"常用于搜索。",[245,160512,160514],{"className":30519,"code":160513,"language":30521,"meta":174,"style":174},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[251,160515,160516,160537,160546,160550,160562,160573,160583,160587,160593],{"__ignoreMap":174},[254,160517,160518,160521,160523,160525,160527,160529,160531,160533,160535],{"class":256,"line":257},[254,160519,160520],{"class":264},"names ",[254,160522,310],{"class":260},[254,160524,52367],{"class":264},[254,160526,150028],{"class":369},[254,160528,12576],{"class":264},[254,160530,151076],{"class":369},[254,160532,12576],{"class":264},[254,160534,159871],{"class":369},[254,160536,33387],{"class":264},[254,160538,160539,160541,160543],{"class":256,"line":175},[254,160540,111719],{"class":264},[254,160542,310],{"class":260},[254,160544,160545],{"class":369}," \"小李\"\n",[254,160547,160548],{"class":256,"line":1319},[254,160549,2540],{"emptyLinePlaceholder":184},[254,160551,160552,160554,160557,160559],{"class":256,"line":1334},[254,160553,3165],{"class":260},[254,160555,160556],{"class":264}," name ",[254,160558,26184],{"class":260},[254,160560,160561],{"class":264}," names:\n",[254,160563,160564,160566,160568,160570],{"class":256,"line":1340},[254,160565,3241],{"class":260},[254,160567,160556],{"class":264},[254,160569,3089],{"class":260},[254,160571,160572],{"class":264}," target:\n",[254,160574,160575,160577,160579,160581],{"class":256,"line":1354},[254,160576,32592],{"class":313},[254,160578,265],{"class":264},[254,160580,160484],{"class":369},[254,160582,271],{"class":264},[254,160584,160585],{"class":256,"line":1360},[254,160586,31768],{"class":260},[254,160588,160589,160591],{"class":256,"line":1451},[254,160590,1841],{"class":260},[254,160592,3879],{"class":264},[254,160594,160595,160597,160599,160601],{"class":256,"line":1457},[254,160596,31440],{"class":313},[254,160598,265],{"class":264},[254,160600,160505],{"class":369},[254,160602,271],{"class":264},[34,160604,160606],{"id":160605},"_412-小案例登录重试","4.12 小案例：登录重试",[14,160608,123432],{},[21,160610,160611,160614,160617],{},[24,160612,160613],{},"用户最多输入 3 次密码。",[24,160615,160616],{},"密码正确则登录成功。",[24,160618,160619],{},"3 次都错误则锁定账号。",[14,160621,10176],{},[245,160623,160625],{"className":30519,"code":160624,"language":30521,"meta":174,"style":174},"password = \"123456\"\n\nfor i in range(3):\n    user_password = input(\"请输入密码:\")\n\n    if user_password == password:\n        print(\"登录成功\")\n        break\n    else:\n        print(f\"密码错误，还剩{2 - i}次机会\")\nelse:\n    print(\"账号已锁定\")\n",[251,160626,160627,160637,160641,160657,160673,160677,160689,160700,160704,160710,160735,160741],{"__ignoreMap":174},[254,160628,160629,160632,160634],{"class":256,"line":257},[254,160630,160631],{"class":264},"password ",[254,160633,310],{"class":260},[254,160635,160636],{"class":369}," \"123456\"\n",[254,160638,160639],{"class":256,"line":175},[254,160640,2540],{"emptyLinePlaceholder":184},[254,160642,160643,160645,160647,160649,160651,160653,160655],{"class":256,"line":1319},[254,160644,3165],{"class":260},[254,160646,9579],{"class":264},[254,160648,26184],{"class":260},[254,160650,32584],{"class":313},[254,160652,265],{"class":264},[254,160654,336],{"class":313},[254,160656,30927],{"class":264},[254,160658,160659,160662,160664,160666,160668,160671],{"class":256,"line":1334},[254,160660,160661],{"class":264},"    user_password ",[254,160663,310],{"class":260},[254,160665,60746],{"class":313},[254,160667,265],{"class":264},[254,160669,160670],{"class":369},"\"请输入密码:\"",[254,160672,271],{"class":264},[254,160674,160675],{"class":256,"line":1340},[254,160676,2540],{"emptyLinePlaceholder":184},[254,160678,160679,160681,160684,160686],{"class":256,"line":1354},[254,160680,3241],{"class":260},[254,160682,160683],{"class":264}," user_password ",[254,160685,3089],{"class":260},[254,160687,160688],{"class":264}," password:\n",[254,160690,160691,160693,160695,160698],{"class":256,"line":1360},[254,160692,32592],{"class":313},[254,160694,265],{"class":264},[254,160696,160697],{"class":369},"\"登录成功\"",[254,160699,271],{"class":264},[254,160701,160702],{"class":256,"line":1451},[254,160703,31768],{"class":260},[254,160705,160706,160708],{"class":256,"line":1457},[254,160707,158162],{"class":260},[254,160709,3879],{"class":264},[254,160711,160712,160714,160716,160718,160721,160724,160726,160728,160730,160733],{"class":256,"line":1469},[254,160713,32592],{"class":313},[254,160715,265],{"class":264},[254,160717,317],{"class":260},[254,160719,160720],{"class":369},"\"密码错误，还剩",[254,160722,160723],{"class":313},"{2",[254,160725,52412],{"class":260},[254,160727,3172],{"class":264},[254,160729,1210],{"class":313},[254,160731,160732],{"class":369},"次机会\"",[254,160734,271],{"class":264},[254,160736,160737,160739],{"class":256,"line":1752},[254,160738,1841],{"class":260},[254,160740,3879],{"class":264},[254,160742,160743,160745,160747,160750],{"class":256,"line":1757},[254,160744,31440],{"class":313},[254,160746,265],{"class":264},[254,160748,160749],{"class":369},"\"账号已锁定\"",[254,160751,271],{"class":264},[34,160753,160755],{"id":160754},"_413-小案例菜单程序","4.13 小案例：菜单程序",[245,160757,160759],{"className":30519,"code":160758,"language":30521,"meta":174,"style":174},"while True:\n    print(\"====== 菜单 ======\")\n    print(\"1. 查询余额\")\n    print(\"2. 存款\")\n    print(\"3. 取款\")\n    print(\"0. 退出\")\n\n    choice = input(\"请输入操作:\")\n\n    if choice == \"1\":\n        print(\"余额为1000元\")\n    elif choice == \"2\":\n        print(\"存款功能\")\n    elif choice == \"3\":\n        print(\"取款功能\")\n    elif choice == \"0\":\n        print(\"退出系统\")\n        break\n    else:\n        print(\"输入错误\")\n",[251,160760,160761,160769,160780,160791,160802,160813,160824,160828,160843,160847,160859,160870,160882,160893,160905,160916,160928,160938,160942,160948],{"__ignoreMap":174},[254,160762,160763,160765,160767],{"class":256,"line":257},[254,160764,108804],{"class":260},[254,160766,95433],{"class":313},[254,160768,3879],{"class":264},[254,160770,160771,160773,160775,160778],{"class":256,"line":175},[254,160772,31440],{"class":313},[254,160774,265],{"class":264},[254,160776,160777],{"class":369},"\"====== 菜单 ======\"",[254,160779,271],{"class":264},[254,160781,160782,160784,160786,160789],{"class":256,"line":1319},[254,160783,31440],{"class":313},[254,160785,265],{"class":264},[254,160787,160788],{"class":369},"\"1. 查询余额\"",[254,160790,271],{"class":264},[254,160792,160793,160795,160797,160800],{"class":256,"line":1334},[254,160794,31440],{"class":313},[254,160796,265],{"class":264},[254,160798,160799],{"class":369},"\"2. 存款\"",[254,160801,271],{"class":264},[254,160803,160804,160806,160808,160811],{"class":256,"line":1340},[254,160805,31440],{"class":313},[254,160807,265],{"class":264},[254,160809,160810],{"class":369},"\"3. 取款\"",[254,160812,271],{"class":264},[254,160814,160815,160817,160819,160822],{"class":256,"line":1354},[254,160816,31440],{"class":313},[254,160818,265],{"class":264},[254,160820,160821],{"class":369},"\"0. 退出\"",[254,160823,271],{"class":264},[254,160825,160826],{"class":256,"line":1360},[254,160827,2540],{"emptyLinePlaceholder":184},[254,160829,160830,160833,160835,160837,160839,160841],{"class":256,"line":1451},[254,160831,160832],{"class":264},"    choice ",[254,160834,310],{"class":260},[254,160836,60746],{"class":313},[254,160838,265],{"class":264},[254,160840,153213],{"class":369},[254,160842,271],{"class":264},[254,160844,160845],{"class":256,"line":1457},[254,160846,2540],{"emptyLinePlaceholder":184},[254,160848,160849,160851,160853,160855,160857],{"class":256,"line":1469},[254,160850,3241],{"class":260},[254,160852,153226],{"class":264},[254,160854,3089],{"class":260},[254,160856,153231],{"class":369},[254,160858,3879],{"class":264},[254,160860,160861,160863,160865,160868],{"class":256,"line":1752},[254,160862,32592],{"class":313},[254,160864,265],{"class":264},[254,160866,160867],{"class":369},"\"余额为1000元\"",[254,160869,271],{"class":264},[254,160871,160872,160874,160876,160878,160880],{"class":256,"line":1757},[254,160873,39434],{"class":260},[254,160875,153226],{"class":264},[254,160877,3089],{"class":260},[254,160879,153250],{"class":369},[254,160881,3879],{"class":264},[254,160883,160884,160886,160888,160891],{"class":256,"line":1763},[254,160885,32592],{"class":313},[254,160887,265],{"class":264},[254,160889,160890],{"class":369},"\"存款功能\"",[254,160892,271],{"class":264},[254,160894,160895,160897,160899,160901,160903],{"class":256,"line":1768},[254,160896,39434],{"class":260},[254,160898,153226],{"class":264},[254,160900,3089],{"class":260},[254,160902,153268],{"class":369},[254,160904,3879],{"class":264},[254,160906,160907,160909,160911,160914],{"class":256,"line":1782},[254,160908,32592],{"class":313},[254,160910,265],{"class":264},[254,160912,160913],{"class":369},"\"取款功能\"",[254,160915,271],{"class":264},[254,160917,160918,160920,160922,160924,160926],{"class":256,"line":1787},[254,160919,39434],{"class":260},[254,160921,153226],{"class":264},[254,160923,3089],{"class":260},[254,160925,153322],{"class":369},[254,160927,3879],{"class":264},[254,160929,160930,160932,160934,160936],{"class":256,"line":1793},[254,160931,32592],{"class":313},[254,160933,265],{"class":264},[254,160935,153333],{"class":369},[254,160937,271],{"class":264},[254,160939,160940],{"class":256,"line":1814},[254,160941,31768],{"class":260},[254,160943,160944,160946],{"class":256,"line":1819},[254,160945,158162],{"class":260},[254,160947,3879],{"class":264},[254,160949,160950,160952,160954,160956],{"class":256,"line":1833},[254,160951,32592],{"class":313},[254,160953,265],{"class":264},[254,160955,153354],{"class":369},[254,160957,271],{"class":264},[14,160959,160960,160961,160963,160964,28526],{},"菜单类程序通常使用 ",[251,160962,159662],{},"，用户选择退出时 ",[251,160965,2193],{},[34,160967,160969],{"id":160968},"_414-易错点","4.14 易错点",[21,160971,160972,160977,160983,160991,160997],{},[24,160973,160974,160976],{},[251,160975,108804],{}," 循环必须更新控制变量。",[24,160978,160979,160982],{},[251,160980,160981],{},"range(1, 10)"," 不包含 10。",[24,160984,160985,160987,160988,160990],{},[251,160986,2193],{}," 结束整个循环，",[251,160989,154812],{}," 只跳过本轮。",[24,160992,160993,160994,160996],{},"嵌套循环中，",[251,160995,2193],{}," 只跳出当前所在的一层循环。",[24,160998,160999],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[34,161001,161003],{"id":161002},"_415-本章练习","4.15 本章练习",[21,161005,161006,161009,161012,161015,161018],{},[24,161007,161008],{},"输出 1 到 100。",[24,161010,161011],{},"计算 1 到 100 的偶数和。",[24,161013,161014],{},"输出 100 以内能被 3 和 5 同时整除的数。",[24,161016,161017],{},"编写猜数字游戏，限制最多猜 7 次。",[24,161019,161020],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[5267,161022,161023],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":174,"searchDepth":175,"depth":175,"links":161025},[161026,161027,161028,161029,161030,161034,161035,161036,161037,161038,161039,161040,161041,161042,161043],{"id":159282,"depth":175,"text":159283},{"id":159312,"depth":175,"text":159313},{"id":159401,"depth":175,"text":159402},{"id":159495,"depth":175,"text":159496},{"id":159669,"depth":175,"text":159670,"children":161031},[161032,161033],{"id":159673,"depth":1319,"text":159674},{"id":159737,"depth":1319,"text":159738},{"id":159801,"depth":175,"text":159802},{"id":159896,"depth":175,"text":159897},{"id":160005,"depth":175,"text":160006},{"id":160201,"depth":175,"text":160202},{"id":160286,"depth":175,"text":160287},{"id":160425,"depth":175,"text":160426},{"id":160605,"depth":175,"text":160606},{"id":160754,"depth":175,"text":160755},{"id":160968,"depth":175,"text":160969},{"id":161002,"depth":175,"text":161003},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159274,"description":23518},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":161050,"title":161051,"body":161052,"description":23518,"extension":181,"meta":163057,"navigation":184,"path":163058,"seo":163059,"stem":163060,"__hash__":163061},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":161053,"toc":163037},[161054,161057,161061,161064,161067,161081,161084,161098,161102,161104,161123,161125,161172,161174,161188,161192,161266,161269,161273,161276,161335,161343,161346,161399,161402,161406,161411,161466,161474,161524,161528,161533,161541,161640,161646,161650,161655,161658,161669,161710,161723,161727,161730,161766,161769,161782,161785,161845,161849,161853,161856,161907,161911,161914,161961,161967,162033,162036,162040,162043,162159,162162,162166,162169,162275,162279,162282,162320,162323,162365,162368,162428,162431,162435,162899,162902,162906,162933,162939,163000,163004,163034],[10,161055,161051],{"id":161056},"_5-函数基础",[34,161058,161060],{"id":161059},"_51-为什么需要函数","5.1 为什么需要函数",[14,161062,161063],{},"函数用于封装一段可以重复使用的代码。",[14,161065,161066],{},"不使用函数的问题：",[21,161068,161069,161072,161075,161078],{},[24,161070,161071],{},"重复代码多。",[24,161073,161074],{},"修改逻辑时容易漏改。",[24,161076,161077],{},"主流程不清晰。",[24,161079,161080],{},"程序越写越长，难以维护。",[14,161082,161083],{},"使用函数后的好处：",[21,161085,161086,161089,161092,161095],{},[24,161087,161088],{},"提高复用性。",[24,161090,161091],{},"提高可读性。",[24,161093,161094],{},"便于调试。",[24,161096,161097],{},"便于分工。",[34,161099,161101],{"id":161100},"_52-函数定义","5.2 函数定义",[14,161103,5322],{},[245,161105,161107],{"className":30519,"code":161106,"language":30521,"meta":174,"style":174},"def 函数名():\n    函数体\n",[251,161108,161109,161118],{"__ignoreMap":174},[254,161110,161111,161113,161116],{"class":256,"line":257},[254,161112,32088],{"class":260},[254,161114,161115],{"class":2103}," 函数名",[254,161117,32094],{"class":264},[254,161119,161120],{"class":256,"line":175},[254,161121,161122],{"class":264},"    函数体\n",[14,161124,15276],{},[245,161126,161128],{"className":30519,"code":161127,"language":30521,"meta":174,"style":174},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[251,161129,161130,161139,161149,161159,161163,161167],{"__ignoreMap":174},[254,161131,161132,161134,161137],{"class":256,"line":257},[254,161133,32088],{"class":260},[254,161135,161136],{"class":2103}," say_hello",[254,161138,32094],{"class":264},[254,161140,161141,161143,161145,161147],{"class":256,"line":175},[254,161142,31440],{"class":313},[254,161144,265],{"class":264},[254,161146,5985],{"class":369},[254,161148,271],{"class":264},[254,161150,161151,161153,161155,161157],{"class":256,"line":1319},[254,161152,31440],{"class":313},[254,161154,265],{"class":264},[254,161156,146779],{"class":369},[254,161158,271],{"class":264},[254,161160,161161],{"class":256,"line":1334},[254,161162,2540],{"emptyLinePlaceholder":184},[254,161164,161165],{"class":256,"line":1340},[254,161166,2540],{"emptyLinePlaceholder":184},[254,161168,161169],{"class":256,"line":1354},[254,161170,161171],{"class":264},"say_hello()\n",[14,161173,9166],{},[21,161175,161176,161179,161182,161185],{},[24,161177,161178],{},"函数必须先定义，再调用。",[24,161180,161181],{},"函数名遵循变量命名规则。",[24,161183,161184],{},"函数体需要缩进。",[24,161186,161187],{},"函数不调用就不会执行。",[34,161189,161191],{"id":161190},"_53-函数调用","5.3 函数调用",[245,161193,161195],{"className":30519,"code":161194,"language":30521,"meta":174,"style":174},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[251,161196,161197,161206,161217,161228,161239,161249,161253,161257,161262],{"__ignoreMap":174},[254,161198,161199,161201,161204],{"class":256,"line":257},[254,161200,32088],{"class":260},[254,161202,161203],{"class":2103}," print_menu",[254,161205,32094],{"class":264},[254,161207,161208,161210,161212,161215],{"class":256,"line":175},[254,161209,31440],{"class":313},[254,161211,265],{"class":264},[254,161213,161214],{"class":369},"\"1. 查询\"",[254,161216,271],{"class":264},[254,161218,161219,161221,161223,161226],{"class":256,"line":1319},[254,161220,31440],{"class":313},[254,161222,265],{"class":264},[254,161224,161225],{"class":369},"\"2. 添加\"",[254,161227,271],{"class":264},[254,161229,161230,161232,161234,161237],{"class":256,"line":1334},[254,161231,31440],{"class":313},[254,161233,265],{"class":264},[254,161235,161236],{"class":369},"\"3. 删除\"",[254,161238,271],{"class":264},[254,161240,161241,161243,161245,161247],{"class":256,"line":1340},[254,161242,31440],{"class":313},[254,161244,265],{"class":264},[254,161246,160821],{"class":369},[254,161248,271],{"class":264},[254,161250,161251],{"class":256,"line":1354},[254,161252,2540],{"emptyLinePlaceholder":184},[254,161254,161255],{"class":256,"line":1360},[254,161256,2540],{"emptyLinePlaceholder":184},[254,161258,161259],{"class":256,"line":1451},[254,161260,161261],{"class":264},"print_menu()\n",[254,161263,161264],{"class":256,"line":1457},[254,161265,161261],{"class":264},[14,161267,161268],{},"函数可以多次调用，每次调用都会执行函数体。",[34,161270,161272],{"id":161271},"_54-参数","5.4 参数",[14,161274,161275],{},"参数用于向函数传递数据。",[245,161277,161279],{"className":30519,"code":161278,"language":30521,"meta":174,"style":174},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[251,161280,161281,161290,161310,161314,161318,161327],{"__ignoreMap":174},[254,161282,161283,161285,161287],{"class":256,"line":257},[254,161284,32088],{"class":260},[254,161286,161136],{"class":2103},[254,161288,161289],{"class":264},"(name):\n",[254,161291,161292,161294,161296,161298,161300,161302,161304,161306,161308],{"class":256,"line":175},[254,161293,31440],{"class":313},[254,161295,265],{"class":264},[254,161297,317],{"class":260},[254,161299,157194],{"class":369},[254,161301,1160],{"class":313},[254,161303,79951],{"class":264},[254,161305,1210],{"class":313},[254,161307,515],{"class":369},[254,161309,271],{"class":264},[254,161311,161312],{"class":256,"line":1319},[254,161313,2540],{"emptyLinePlaceholder":184},[254,161315,161316],{"class":256,"line":1334},[254,161317,2540],{"emptyLinePlaceholder":184},[254,161319,161320,161323,161325],{"class":256,"line":1340},[254,161321,161322],{"class":264},"say_hello(",[254,161324,150028],{"class":369},[254,161326,271],{"class":264},[254,161328,161329,161331,161333],{"class":256,"line":1354},[254,161330,161322],{"class":264},[254,161332,151076],{"class":369},[254,161334,271],{"class":264},[14,161336,161337,161339,161340,161342],{},[251,161338,79951],{}," 是形参，",[251,161341,150028],{}," 是实参。",[14,161344,161345],{},"多个参数：",[245,161347,161349],{"className":30519,"code":161348,"language":30521,"meta":174,"style":174},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[251,161350,161351,161359,161372,161378,161382,161386],{"__ignoreMap":174},[254,161352,161353,161355,161357],{"class":256,"line":257},[254,161354,32088],{"class":260},[254,161356,5350],{"class":2103},[254,161358,151233],{"class":264},[254,161360,161361,161364,161366,161368,161370],{"class":256,"line":175},[254,161362,161363],{"class":264},"    result ",[254,161365,310],{"class":260},[254,161367,11010],{"class":264},[254,161369,745],{"class":260},[254,161371,151244],{"class":264},[254,161373,161374,161376],{"class":256,"line":1319},[254,161375,31440],{"class":313},[254,161377,76726],{"class":264},[254,161379,161380],{"class":256,"line":1334},[254,161381,2540],{"emptyLinePlaceholder":184},[254,161383,161384],{"class":256,"line":1340},[254,161385,2540],{"emptyLinePlaceholder":184},[254,161387,161388,161391,161393,161395,161397],{"class":256,"line":1354},[254,161389,161390],{"class":264},"add(",[254,161392,710],{"class":313},[254,161394,12576],{"class":264},[254,161396,964],{"class":313},[254,161398,271],{"class":264},[14,161400,161401],{},"调用时参数数量必须匹配。",[34,161403,161405],{"id":161404},"_55-返回值","5.5 返回值",[14,161407,161408,161410],{},[251,161409,17187],{}," 用于把函数内部的结果返回给调用者。",[245,161412,161414],{"className":30519,"code":161413,"language":30521,"meta":174,"style":174},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[251,161415,161416,161424,161434,161438,161442,161460],{"__ignoreMap":174},[254,161417,161418,161420,161422],{"class":256,"line":257},[254,161419,32088],{"class":260},[254,161421,5350],{"class":2103},[254,161423,151233],{"class":264},[254,161425,161426,161428,161430,161432],{"class":256,"line":175},[254,161427,4230],{"class":260},[254,161429,11010],{"class":264},[254,161431,745],{"class":260},[254,161433,151244],{"class":264},[254,161435,161436],{"class":256,"line":1319},[254,161437,2540],{"emptyLinePlaceholder":184},[254,161439,161440],{"class":256,"line":1334},[254,161441,2540],{"emptyLinePlaceholder":184},[254,161443,161444,161447,161449,161452,161454,161456,161458],{"class":256,"line":1340},[254,161445,161446],{"class":264},"result ",[254,161448,310],{"class":260},[254,161450,161451],{"class":264}," add(",[254,161453,710],{"class":313},[254,161455,12576],{"class":264},[254,161457,964],{"class":313},[254,161459,271],{"class":264},[254,161461,161462,161464],{"class":256,"line":1354},[254,161463,30556],{"class":313},[254,161465,76726],{"class":264},[14,161467,161468,161469,161471,161472,28526],{},"如果函数没有写 ",[251,161470,17187],{},"，默认返回 ",[251,161473,95827],{},[245,161475,161477],{"className":30519,"code":161476,"language":30521,"meta":174,"style":174},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[251,161478,161479,161487,161497,161501,161505,161514],{"__ignoreMap":174},[254,161480,161481,161483,161485],{"class":256,"line":257},[254,161482,32088],{"class":260},[254,161484,161136],{"class":2103},[254,161486,32094],{"class":264},[254,161488,161489,161491,161493,161495],{"class":256,"line":175},[254,161490,31440],{"class":313},[254,161492,265],{"class":264},[254,161494,5985],{"class":369},[254,161496,271],{"class":264},[254,161498,161499],{"class":256,"line":1319},[254,161500,2540],{"emptyLinePlaceholder":184},[254,161502,161503],{"class":256,"line":1334},[254,161504,2540],{"emptyLinePlaceholder":184},[254,161506,161507,161509,161511],{"class":256,"line":1340},[254,161508,161446],{"class":264},[254,161510,310],{"class":260},[254,161512,161513],{"class":264}," say_hello()\n",[254,161515,161516,161518,161521],{"class":256,"line":1354},[254,161517,30556],{"class":313},[254,161519,161520],{"class":264},"(result)  ",[254,161522,161523],{"class":323},"# None\n",[34,161525,161527],{"id":161526},"_56-return的作用","5.6 return的作用",[14,161529,161530,161532],{},[251,161531,17187],{}," 有两个作用：",[21,161534,161535,161538],{},[24,161536,161537],{},"返回结果。",[24,161539,161540],{},"结束函数。",[245,161542,161544],{"className":30519,"code":161543,"language":30521,"meta":174,"style":174},"def check_age(age):\n    if age \u003C 0:\n        return \"年龄不合法\"\n\n    if age >= 18:\n        return \"成年人\"\n\n    return \"未成年人\"\n\n\nprint(check_age(20))\nprint(check_age(-1))\n",[251,161545,161546,161556,161568,161575,161579,161591,161598,161602,161609,161613,161617,161628],{"__ignoreMap":174},[254,161547,161548,161550,161553],{"class":256,"line":257},[254,161549,32088],{"class":260},[254,161551,161552],{"class":2103}," check_age",[254,161554,161555],{"class":264},"(age):\n",[254,161557,161558,161560,161562,161564,161566],{"class":256,"line":175},[254,161559,3241],{"class":260},[254,161561,15848],{"class":264},[254,161563,1174],{"class":260},[254,161565,4233],{"class":313},[254,161567,3879],{"class":264},[254,161569,161570,161572],{"class":256,"line":1319},[254,161571,14893],{"class":260},[254,161573,161574],{"class":369}," \"年龄不合法\"\n",[254,161576,161577],{"class":256,"line":1334},[254,161578,2540],{"emptyLinePlaceholder":184},[254,161580,161581,161583,161585,161587,161589],{"class":256,"line":1340},[254,161582,3241],{"class":260},[254,161584,15848],{"class":264},[254,161586,1850],{"class":260},[254,161588,156425],{"class":313},[254,161590,3879],{"class":264},[254,161592,161593,161595],{"class":256,"line":1354},[254,161594,14893],{"class":260},[254,161596,161597],{"class":369}," \"成年人\"\n",[254,161599,161600],{"class":256,"line":1360},[254,161601,2540],{"emptyLinePlaceholder":184},[254,161603,161604,161606],{"class":256,"line":1451},[254,161605,4230],{"class":260},[254,161607,161608],{"class":369}," \"未成年人\"\n",[254,161610,161611],{"class":256,"line":1457},[254,161612,2540],{"emptyLinePlaceholder":184},[254,161614,161615],{"class":256,"line":1469},[254,161616,2540],{"emptyLinePlaceholder":184},[254,161618,161619,161621,161624,161626],{"class":256,"line":1752},[254,161620,30556],{"class":313},[254,161622,161623],{"class":264},"(check_age(",[254,161625,964],{"class":313},[254,161627,30638],{"class":264},[254,161629,161630,161632,161634,161636,161638],{"class":256,"line":1757},[254,161631,30556],{"class":313},[254,161633,161623],{"class":264},[254,161635,796],{"class":260},[254,161637,482],{"class":313},[254,161639,30638],{"class":264},[14,161641,161642,161643,161645],{},"函数执行到 ",[251,161644,17187],{}," 后，后面的代码不会继续执行。",[34,161647,161649],{"id":161648},"_57-none","5.7 None",[14,161651,161652,161654],{},[251,161653,95827],{}," 表示空值或没有结果。",[14,161656,161657],{},"常见使用场景：",[21,161659,161660,161663,161666],{},[24,161661,161662],{},"函数没有返回值。",[24,161664,161665],{},"变量暂时没有具体值。",[24,161667,161668],{},"表示查询不到结果。",[245,161670,161672],{"className":30519,"code":161671,"language":30521,"meta":174,"style":174},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[251,161673,161674,161682,161686,161699],{"__ignoreMap":174},[254,161675,161676,161678,161680],{"class":256,"line":257},[254,161677,161446],{"class":264},[254,161679,310],{"class":260},[254,161681,152312],{"class":313},[254,161683,161684],{"class":256,"line":175},[254,161685,2540],{"emptyLinePlaceholder":184},[254,161687,161688,161690,161693,161695,161697],{"class":256,"line":1319},[254,161689,1671],{"class":260},[254,161691,161692],{"class":264}," result ",[254,161694,39068],{"class":260},[254,161696,39074],{"class":313},[254,161698,3879],{"class":264},[254,161700,161701,161703,161705,161708],{"class":256,"line":1334},[254,161702,31440],{"class":313},[254,161704,265],{"class":264},[254,161706,161707],{"class":369},"\"没有数据\"",[254,161709,271],{"class":264},[14,161711,161712,161713,161715,161716,161719,161720,28526],{},"判断 ",[251,161714,95827],{}," 推荐使用 ",[251,161717,161718],{},"is None","，不要写成 ",[251,161721,161722],{},"== None",[34,161724,161726],{"id":161725},"_58-函数文档字符串","5.8 函数文档字符串",[14,161728,161729],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[245,161731,161733],{"className":30519,"code":161732,"language":30521,"meta":174,"style":174},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[251,161734,161735,161745,161750],{"__ignoreMap":174},[254,161736,161737,161739,161742],{"class":256,"line":257},[254,161738,32088],{"class":260},[254,161740,161741],{"class":2103}," calculate_bmi",[254,161743,161744],{"class":264},"(weight, height):\n",[254,161746,161747],{"class":256,"line":175},[254,161748,161749],{"class":369},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[254,161751,161752,161754,161757,161759,161762,161764],{"class":256,"line":1319},[254,161753,4230],{"class":260},[254,161755,161756],{"class":264}," weight ",[254,161758,848],{"class":260},[254,161760,161761],{"class":264}," height ",[254,161763,10802],{"class":260},[254,161765,47864],{"class":313},[14,161767,161768],{},"查看说明：",[245,161770,161772],{"className":30519,"code":161771,"language":30521,"meta":174,"style":174},"help(calculate_bmi)\n",[251,161773,161774],{"__ignoreMap":174},[254,161775,161776,161779],{"class":256,"line":257},[254,161777,161778],{"class":313},"help",[254,161780,161781],{"class":264},"(calculate_bmi)\n",[14,161783,161784],{},"较完整的写法：",[245,161786,161788],{"className":30519,"code":161787,"language":30521,"meta":174,"style":174},"def calculate_bmi(weight, height):\n    \"\"\"\n    计算BMI。\n\n    :param weight: 体重，单位kg\n    :param height: 身高，单位m\n    :return: BMI数值\n    \"\"\"\n    return weight \u002F height ** 2\n",[251,161789,161790,161798,161803,161808,161812,161817,161822,161827,161831],{"__ignoreMap":174},[254,161791,161792,161794,161796],{"class":256,"line":257},[254,161793,32088],{"class":260},[254,161795,161741],{"class":2103},[254,161797,161744],{"class":264},[254,161799,161800],{"class":256,"line":175},[254,161801,161802],{"class":369},"    \"\"\"\n",[254,161804,161805],{"class":256,"line":1319},[254,161806,161807],{"class":369},"    计算BMI。\n",[254,161809,161810],{"class":256,"line":1334},[254,161811,2540],{"emptyLinePlaceholder":184},[254,161813,161814],{"class":256,"line":1340},[254,161815,161816],{"class":369},"    :param weight: 体重，单位kg\n",[254,161818,161819],{"class":256,"line":1354},[254,161820,161821],{"class":369},"    :param height: 身高，单位m\n",[254,161823,161824],{"class":256,"line":1360},[254,161825,161826],{"class":369},"    :return: BMI数值\n",[254,161828,161829],{"class":256,"line":1451},[254,161830,161802],{"class":369},[254,161832,161833,161835,161837,161839,161841,161843],{"class":256,"line":1457},[254,161834,4230],{"class":260},[254,161836,161756],{"class":264},[254,161838,848],{"class":260},[254,161840,161761],{"class":264},[254,161842,10802],{"class":260},[254,161844,47864],{"class":313},[34,161846,161848],{"id":161847},"_59-变量作用域","5.9 变量作用域",[225,161850,161852],{"id":161851},"_591-局部变量","5.9.1 局部变量",[14,161854,161855],{},"在函数内部定义的变量，只能在函数内部使用。",[245,161857,161859],{"className":30519,"code":161858,"language":30521,"meta":174,"style":174},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[251,161860,161861,161870,161878,161884,161888,161892,161897],{"__ignoreMap":174},[254,161862,161863,161865,161868],{"class":256,"line":257},[254,161864,32088],{"class":260},[254,161866,161867],{"class":2103}," test",[254,161869,32094],{"class":264},[254,161871,161872,161874,161876],{"class":256,"line":175},[254,161873,45734],{"class":264},[254,161875,310],{"class":260},[254,161877,58569],{"class":313},[254,161879,161880,161882],{"class":256,"line":1319},[254,161881,31440],{"class":313},[254,161883,278],{"class":264},[254,161885,161886],{"class":256,"line":1334},[254,161887,2540],{"emptyLinePlaceholder":184},[254,161889,161890],{"class":256,"line":1340},[254,161891,2540],{"emptyLinePlaceholder":184},[254,161893,161894],{"class":256,"line":1354},[254,161895,161896],{"class":264},"test()\n",[254,161898,161899,161901,161904],{"class":256,"line":1360},[254,161900,30556],{"class":313},[254,161902,161903],{"class":264},"(num)  ",[254,161905,161906],{"class":323},"# 报错\n",[225,161908,161910],{"id":161909},"_592-全局变量","5.9.2 全局变量",[14,161912,161913],{},"在函数外部定义的变量，可以在函数内部读取。",[245,161915,161917],{"className":30519,"code":161916,"language":30521,"meta":174,"style":174},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[251,161918,161919,161927,161931,161935,161943,161949,161953,161957],{"__ignoreMap":174},[254,161920,161921,161923,161925],{"class":256,"line":257},[254,161922,146676],{"class":264},[254,161924,310],{"class":260},[254,161926,149493],{"class":369},[254,161928,161929],{"class":256,"line":175},[254,161930,2540],{"emptyLinePlaceholder":184},[254,161932,161933],{"class":256,"line":1319},[254,161934,2540],{"emptyLinePlaceholder":184},[254,161936,161937,161939,161941],{"class":256,"line":1334},[254,161938,32088],{"class":260},[254,161940,161136],{"class":2103},[254,161942,32094],{"class":264},[254,161944,161945,161947],{"class":256,"line":1340},[254,161946,31440],{"class":313},[254,161948,150800],{"class":264},[254,161950,161951],{"class":256,"line":1354},[254,161952,2540],{"emptyLinePlaceholder":184},[254,161954,161955],{"class":256,"line":1360},[254,161956,2540],{"emptyLinePlaceholder":184},[254,161958,161959],{"class":256,"line":1451},[254,161960,161171],{"class":264},[14,161962,161963,161964,28526],{},"如果要在函数内部修改全局变量，需要 ",[251,161965,161966],{},"global",[245,161968,161970],{"className":30519,"code":161969,"language":30521,"meta":174,"style":174},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[251,161971,161972,161980,161984,161988,161997,162005,162013,162017,162021,162026],{"__ignoreMap":174},[254,161973,161974,161976,161978],{"class":256,"line":257},[254,161975,146831],{"class":264},[254,161977,310],{"class":260},[254,161979,47474],{"class":313},[254,161981,161982],{"class":256,"line":175},[254,161983,2540],{"emptyLinePlaceholder":184},[254,161985,161986],{"class":256,"line":1319},[254,161987,2540],{"emptyLinePlaceholder":184},[254,161989,161990,161992,161995],{"class":256,"line":1334},[254,161991,32088],{"class":260},[254,161993,161994],{"class":2103}," add_count",[254,161996,32094],{"class":264},[254,161998,161999,162002],{"class":256,"line":1340},[254,162000,162001],{"class":260},"    global",[254,162003,162004],{"class":264}," count\n",[254,162006,162007,162009,162011],{"class":256,"line":1354},[254,162008,159573],{"class":264},[254,162010,9618],{"class":260},[254,162012,55840],{"class":313},[254,162014,162015],{"class":256,"line":1360},[254,162016,2540],{"emptyLinePlaceholder":184},[254,162018,162019],{"class":256,"line":1451},[254,162020,2540],{"emptyLinePlaceholder":184},[254,162022,162023],{"class":256,"line":1457},[254,162024,162025],{"class":264},"add_count()\n",[254,162027,162028,162030],{"class":256,"line":1469},[254,162029,30556],{"class":313},[254,162031,162032],{"class":264},"(count)\n",[14,162034,162035],{},"不建议大量使用全局变量，项目变大后很难维护。",[34,162037,162039],{"id":162038},"_510-函数嵌套调用","5.10 函数嵌套调用",[14,162041,162042],{},"一个函数中可以调用另一个函数。",[245,162044,162046],{"className":30519,"code":162045,"language":30521,"meta":174,"style":174},"def print_line():\n    print(\"-\" * 30)\n\n\ndef print_info(name, age):\n    print_line()\n    print(f\"姓名:{name}\")\n    print(f\"年龄:{age}\")\n    print_line()\n\n\nprint_info(\"小明\", 18)\n",[251,162047,162048,162057,162071,162075,162079,162088,162093,162113,162134,162138,162142,162146],{"__ignoreMap":174},[254,162049,162050,162052,162055],{"class":256,"line":257},[254,162051,32088],{"class":260},[254,162053,162054],{"class":2103}," print_line",[254,162056,32094],{"class":264},[254,162058,162059,162061,162063,162065,162067,162069],{"class":256,"line":175},[254,162060,31440],{"class":313},[254,162062,265],{"class":264},[254,162064,32624],{"class":369},[254,162066,6659],{"class":260},[254,162068,78806],{"class":313},[254,162070,271],{"class":264},[254,162072,162073],{"class":256,"line":1319},[254,162074,2540],{"emptyLinePlaceholder":184},[254,162076,162077],{"class":256,"line":1334},[254,162078,2540],{"emptyLinePlaceholder":184},[254,162080,162081,162083,162086],{"class":256,"line":1340},[254,162082,32088],{"class":260},[254,162084,162085],{"class":2103}," print_info",[254,162087,149515],{"class":264},[254,162089,162090],{"class":256,"line":1354},[254,162091,162092],{"class":264},"    print_line()\n",[254,162094,162095,162097,162099,162101,162103,162105,162107,162109,162111],{"class":256,"line":1360},[254,162096,31440],{"class":313},[254,162098,265],{"class":264},[254,162100,317],{"class":260},[254,162102,156822],{"class":369},[254,162104,1160],{"class":313},[254,162106,79951],{"class":264},[254,162108,1210],{"class":313},[254,162110,515],{"class":369},[254,162112,271],{"class":264},[254,162114,162115,162117,162119,162121,162124,162126,162128,162130,162132],{"class":256,"line":1451},[254,162116,31440],{"class":313},[254,162118,265],{"class":264},[254,162120,317],{"class":260},[254,162122,162123],{"class":369},"\"年龄:",[254,162125,1160],{"class":313},[254,162127,70362],{"class":264},[254,162129,1210],{"class":313},[254,162131,515],{"class":369},[254,162133,271],{"class":264},[254,162135,162136],{"class":256,"line":1457},[254,162137,162092],{"class":264},[254,162139,162140],{"class":256,"line":1469},[254,162141,2540],{"emptyLinePlaceholder":184},[254,162143,162144],{"class":256,"line":1752},[254,162145,2540],{"emptyLinePlaceholder":184},[254,162147,162148,162151,162153,162155,162157],{"class":256,"line":1757},[254,162149,162150],{"class":264},"print_info(",[254,162152,150028],{"class":369},[254,162154,12576],{"class":264},[254,162156,914],{"class":313},[254,162158,271],{"class":264},[14,162160,162161],{},"这种方式可以把小功能组合成大功能。",[34,162163,162165],{"id":162164},"_511-参数检查","5.11 参数检查",[14,162167,162168],{},"函数内部可以检查参数是否合法。",[245,162170,162172],{"className":30519,"code":162171,"language":30521,"meta":174,"style":174},"def divide(a, b):\n    if b == 0:\n        return None\n    return a \u002F b\n\n\nresult = divide(10, 0)\n\nif result is None:\n    print(\"除数不能为0\")\nelse:\n    print(result)\n",[251,162173,162174,162183,162195,162201,162211,162215,162219,162236,162240,162252,162263,162269],{"__ignoreMap":174},[254,162175,162176,162178,162181],{"class":256,"line":257},[254,162177,32088],{"class":260},[254,162179,162180],{"class":2103}," divide",[254,162182,151233],{"class":264},[254,162184,162185,162187,162189,162191,162193],{"class":256,"line":175},[254,162186,3241],{"class":260},[254,162188,11023],{"class":264},[254,162190,3089],{"class":260},[254,162192,4233],{"class":313},[254,162194,3879],{"class":264},[254,162196,162197,162199],{"class":256,"line":1319},[254,162198,14893],{"class":260},[254,162200,152312],{"class":313},[254,162202,162203,162205,162207,162209],{"class":256,"line":1334},[254,162204,4230],{"class":260},[254,162206,11010],{"class":264},[254,162208,848],{"class":260},[254,162210,151244],{"class":264},[254,162212,162213],{"class":256,"line":1340},[254,162214,2540],{"emptyLinePlaceholder":184},[254,162216,162217],{"class":256,"line":1354},[254,162218,2540],{"emptyLinePlaceholder":184},[254,162220,162221,162223,162225,162228,162230,162232,162234],{"class":256,"line":1360},[254,162222,161446],{"class":264},[254,162224,310],{"class":260},[254,162226,162227],{"class":264}," divide(",[254,162229,710],{"class":313},[254,162231,12576],{"class":264},[254,162233,456],{"class":313},[254,162235,271],{"class":264},[254,162237,162238],{"class":256,"line":1451},[254,162239,2540],{"emptyLinePlaceholder":184},[254,162241,162242,162244,162246,162248,162250],{"class":256,"line":1457},[254,162243,1671],{"class":260},[254,162245,161692],{"class":264},[254,162247,39068],{"class":260},[254,162249,39074],{"class":313},[254,162251,3879],{"class":264},[254,162253,162254,162256,162258,162261],{"class":256,"line":1469},[254,162255,31440],{"class":313},[254,162257,265],{"class":264},[254,162259,162260],{"class":369},"\"除数不能为0\"",[254,162262,271],{"class":264},[254,162264,162265,162267],{"class":256,"line":1752},[254,162266,1841],{"class":260},[254,162268,3879],{"class":264},[254,162270,162271,162273],{"class":256,"line":1757},[254,162272,31440],{"class":313},[254,162274,76726],{"class":264},[34,162276,162278],{"id":162277},"_512-类型提示","5.12 类型提示",[14,162280,162281],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[245,162283,162285],{"className":30519,"code":162284,"language":30521,"meta":174,"style":174},"def add(a: int, b: int) -> int:\n    return a + b\n",[251,162286,162287,162310],{"__ignoreMap":174},[254,162288,162289,162291,162293,162296,162298,162301,162303,162306,162308],{"class":256,"line":257},[254,162290,32088],{"class":260},[254,162292,5350],{"class":2103},[254,162294,162295],{"class":264},"(a: ",[254,162297,268],{"class":313},[254,162299,162300],{"class":264},", b: ",[254,162302,268],{"class":313},[254,162304,162305],{"class":264},") -> ",[254,162307,268],{"class":313},[254,162309,3879],{"class":264},[254,162311,162312,162314,162316,162318],{"class":256,"line":175},[254,162313,4230],{"class":260},[254,162315,11010],{"class":264},[254,162317,745],{"class":260},[254,162319,151244],{"class":264},[14,162321,162322],{},"字符串参数：",[245,162324,162326],{"className":30519,"code":162325,"language":30521,"meta":174,"style":174},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[251,162327,162328,162345],{"__ignoreMap":174},[254,162329,162330,162332,162334,162337,162339,162341,162343],{"class":256,"line":257},[254,162331,32088],{"class":260},[254,162333,161136],{"class":2103},[254,162335,162336],{"class":264},"(name: ",[254,162338,1439],{"class":313},[254,162340,162305],{"class":264},[254,162342,95827],{"class":313},[254,162344,3879],{"class":264},[254,162346,162347,162349,162351,162353,162355,162357,162359,162361,162363],{"class":256,"line":175},[254,162348,31440],{"class":313},[254,162350,265],{"class":264},[254,162352,317],{"class":260},[254,162354,157194],{"class":369},[254,162356,1160],{"class":313},[254,162358,79951],{"class":264},[254,162360,1210],{"class":313},[254,162362,515],{"class":369},[254,162364,271],{"class":264},[14,162366,162367],{},"列表参数：",[245,162369,162371],{"className":30519,"code":162370,"language":30521,"meta":174,"style":174},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[251,162372,162373,162392,162400,162412,162421],{"__ignoreMap":174},[254,162374,162375,162377,162380,162383,162385,162388,162390],{"class":256,"line":257},[254,162376,32088],{"class":260},[254,162378,162379],{"class":2103}," get_total",[254,162381,162382],{"class":264},"(numbers: list[",[254,162384,268],{"class":313},[254,162386,162387],{"class":264},"]) -> ",[254,162389,268],{"class":313},[254,162391,3879],{"class":264},[254,162393,162394,162396,162398],{"class":256,"line":175},[254,162395,159447],{"class":264},[254,162397,310],{"class":260},[254,162399,47474],{"class":313},[254,162401,162402,162404,162407,162409],{"class":256,"line":1319},[254,162403,3341],{"class":260},[254,162405,162406],{"class":264}," number ",[254,162408,26184],{"class":260},[254,162410,162411],{"class":264}," numbers:\n",[254,162413,162414,162416,162418],{"class":256,"line":1334},[254,162415,160122],{"class":264},[254,162417,9618],{"class":260},[254,162419,162420],{"class":264}," number\n",[254,162422,162423,162425],{"class":256,"line":1340},[254,162424,4230],{"class":260},[254,162426,162427],{"class":264}," total\n",[14,162429,162430],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[34,162432,162434],{"id":162433},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[245,162436,162438],{"className":30519,"code":162437,"language":30521,"meta":174,"style":174},"balance = 1000\n\n\ndef show_menu():\n    print(\"====== ATM ======\")\n    print(\"1. 查询余额\")\n    print(\"2. 存款\")\n    print(\"3. 取款\")\n    print(\"0. 退出\")\n\n\ndef show_balance():\n    print(f\"当前余额:{balance}元\")\n\n\ndef save_money():\n    global balance\n    money = float(input(\"请输入存款金额:\"))\n    if money \u003C= 0:\n        print(\"金额必须大于0\")\n        return\n    balance += money\n    print(\"存款成功\")\n    show_balance()\n\n\ndef withdraw_money():\n    global balance\n    money = float(input(\"请输入取款金额:\"))\n    if money \u003C= 0:\n        print(\"金额必须大于0\")\n        return\n    if money > balance:\n        print(\"余额不足\")\n        return\n    balance -= money\n    print(\"取款成功\")\n    show_balance()\n\n\nwhile True:\n    show_menu()\n    choice = input(\"请输入操作:\")\n\n    if choice == \"1\":\n        show_balance()\n    elif choice == \"2\":\n        save_money()\n    elif choice == \"3\":\n        withdraw_money()\n    elif choice == \"0\":\n        print(\"退出系统\")\n        break\n    else:\n        print(\"输入错误\")\n",[251,162439,162440,162450,162454,162458,162466,162477,162487,162497,162507,162517,162521,162525,162534,162556,162560,162564,162573,162579,162599,162611,162622,162626,162635,162646,162651,162655,162659,162668,162674,162693,162705,162715,162719,162730,162740,162744,162752,162763,162767,162771,162775,162783,162788,162802,162806,162818,162823,162835,162840,162852,162857,162869,162879,162883,162889],{"__ignoreMap":174},[254,162441,162442,162445,162447],{"class":256,"line":257},[254,162443,162444],{"class":264},"balance ",[254,162446,310],{"class":260},[254,162448,162449],{"class":313}," 1000\n",[254,162451,162452],{"class":256,"line":175},[254,162453,2540],{"emptyLinePlaceholder":184},[254,162455,162456],{"class":256,"line":1319},[254,162457,2540],{"emptyLinePlaceholder":184},[254,162459,162460,162462,162464],{"class":256,"line":1334},[254,162461,32088],{"class":260},[254,162463,152173],{"class":2103},[254,162465,32094],{"class":264},[254,162467,162468,162470,162472,162475],{"class":256,"line":1340},[254,162469,31440],{"class":313},[254,162471,265],{"class":264},[254,162473,162474],{"class":369},"\"====== ATM ======\"",[254,162476,271],{"class":264},[254,162478,162479,162481,162483,162485],{"class":256,"line":1354},[254,162480,31440],{"class":313},[254,162482,265],{"class":264},[254,162484,160788],{"class":369},[254,162486,271],{"class":264},[254,162488,162489,162491,162493,162495],{"class":256,"line":1360},[254,162490,31440],{"class":313},[254,162492,265],{"class":264},[254,162494,160799],{"class":369},[254,162496,271],{"class":264},[254,162498,162499,162501,162503,162505],{"class":256,"line":1451},[254,162500,31440],{"class":313},[254,162502,265],{"class":264},[254,162504,160810],{"class":369},[254,162506,271],{"class":264},[254,162508,162509,162511,162513,162515],{"class":256,"line":1457},[254,162510,31440],{"class":313},[254,162512,265],{"class":264},[254,162514,160821],{"class":369},[254,162516,271],{"class":264},[254,162518,162519],{"class":256,"line":1469},[254,162520,2540],{"emptyLinePlaceholder":184},[254,162522,162523],{"class":256,"line":1752},[254,162524,2540],{"emptyLinePlaceholder":184},[254,162526,162527,162529,162532],{"class":256,"line":1757},[254,162528,32088],{"class":260},[254,162530,162531],{"class":2103}," show_balance",[254,162533,32094],{"class":264},[254,162535,162536,162538,162540,162542,162545,162547,162550,162552,162554],{"class":256,"line":1763},[254,162537,31440],{"class":313},[254,162539,265],{"class":264},[254,162541,317],{"class":260},[254,162543,162544],{"class":369},"\"当前余额:",[254,162546,1160],{"class":313},[254,162548,162549],{"class":264},"balance",[254,162551,1210],{"class":313},[254,162553,157152],{"class":369},[254,162555,271],{"class":264},[254,162557,162558],{"class":256,"line":1768},[254,162559,2540],{"emptyLinePlaceholder":184},[254,162561,162562],{"class":256,"line":1782},[254,162563,2540],{"emptyLinePlaceholder":184},[254,162565,162566,162568,162571],{"class":256,"line":1787},[254,162567,32088],{"class":260},[254,162569,162570],{"class":2103}," save_money",[254,162572,32094],{"class":264},[254,162574,162575,162577],{"class":256,"line":1793},[254,162576,162001],{"class":260},[254,162578,150239],{"class":264},[254,162580,162581,162584,162586,162588,162590,162592,162594,162597],{"class":256,"line":1814},[254,162582,162583],{"class":264},"    money ",[254,162585,310],{"class":260},[254,162587,109938],{"class":313},[254,162589,265],{"class":264},[254,162591,53962],{"class":313},[254,162593,265],{"class":264},[254,162595,162596],{"class":369},"\"请输入存款金额:\"",[254,162598,30638],{"class":264},[254,162600,162601,162603,162605,162607,162609],{"class":256,"line":1819},[254,162602,3241],{"class":260},[254,162604,150282],{"class":264},[254,162606,1728],{"class":260},[254,162608,4233],{"class":313},[254,162610,3879],{"class":264},[254,162612,162613,162615,162617,162620],{"class":256,"line":1833},[254,162614,32592],{"class":313},[254,162616,265],{"class":264},[254,162618,162619],{"class":369},"\"金额必须大于0\"",[254,162621,271],{"class":264},[254,162623,162624],{"class":256,"line":1838},[254,162625,152501],{"class":260},[254,162627,162628,162631,162633],{"class":256,"line":1867},[254,162629,162630],{"class":264},"    balance ",[254,162632,9618],{"class":260},[254,162634,150315],{"class":264},[254,162636,162637,162639,162641,162644],{"class":256,"line":1872},[254,162638,31440],{"class":313},[254,162640,265],{"class":264},[254,162642,162643],{"class":369},"\"存款成功\"",[254,162645,271],{"class":264},[254,162647,162648],{"class":256,"line":1889},[254,162649,162650],{"class":264},"    show_balance()\n",[254,162652,162653],{"class":256,"line":1894},[254,162654,2540],{"emptyLinePlaceholder":184},[254,162656,162657],{"class":256,"line":1899},[254,162658,2540],{"emptyLinePlaceholder":184},[254,162660,162661,162663,162666],{"class":256,"line":1904},[254,162662,32088],{"class":260},[254,162664,162665],{"class":2103}," withdraw_money",[254,162667,32094],{"class":264},[254,162669,162670,162672],{"class":256,"line":1918},[254,162671,162001],{"class":260},[254,162673,150239],{"class":264},[254,162675,162676,162678,162680,162682,162684,162686,162688,162691],{"class":256,"line":1923},[254,162677,162583],{"class":264},[254,162679,310],{"class":260},[254,162681,109938],{"class":313},[254,162683,265],{"class":264},[254,162685,53962],{"class":313},[254,162687,265],{"class":264},[254,162689,162690],{"class":369},"\"请输入取款金额:\"",[254,162692,30638],{"class":264},[254,162694,162695,162697,162699,162701,162703],{"class":256,"line":2717},[254,162696,3241],{"class":260},[254,162698,150282],{"class":264},[254,162700,1728],{"class":260},[254,162702,4233],{"class":313},[254,162704,3879],{"class":264},[254,162706,162707,162709,162711,162713],{"class":256,"line":2731},[254,162708,32592],{"class":313},[254,162710,265],{"class":264},[254,162712,162619],{"class":369},[254,162714,271],{"class":264},[254,162716,162717],{"class":256,"line":2739},[254,162718,152501],{"class":260},[254,162720,162721,162723,162725,162727],{"class":256,"line":2744},[254,162722,3241],{"class":260},[254,162724,150282],{"class":264},[254,162726,1224],{"class":260},[254,162728,162729],{"class":264}," balance:\n",[254,162731,162732,162734,162736,162738],{"class":256,"line":2750},[254,162733,32592],{"class":313},[254,162735,265],{"class":264},[254,162737,150377],{"class":369},[254,162739,271],{"class":264},[254,162741,162742],{"class":256,"line":2756},[254,162743,152501],{"class":260},[254,162745,162746,162748,162750],{"class":256,"line":2761},[254,162747,162630],{"class":264},[254,162749,150392],{"class":260},[254,162751,150315],{"class":264},[254,162753,162754,162756,162758,162761],{"class":256,"line":8089},[254,162755,31440],{"class":313},[254,162757,265],{"class":264},[254,162759,162760],{"class":369},"\"取款成功\"",[254,162762,271],{"class":264},[254,162764,162765],{"class":256,"line":8113},[254,162766,162650],{"class":264},[254,162768,162769],{"class":256,"line":8118},[254,162770,2540],{"emptyLinePlaceholder":184},[254,162772,162773],{"class":256,"line":8124},[254,162774,2540],{"emptyLinePlaceholder":184},[254,162776,162777,162779,162781],{"class":256,"line":8151},[254,162778,108804],{"class":260},[254,162780,95433],{"class":313},[254,162782,3879],{"class":264},[254,162784,162785],{"class":256,"line":8156},[254,162786,162787],{"class":264},"    show_menu()\n",[254,162789,162790,162792,162794,162796,162798,162800],{"class":256,"line":8162},[254,162791,160832],{"class":264},[254,162793,310],{"class":260},[254,162795,60746],{"class":313},[254,162797,265],{"class":264},[254,162799,153213],{"class":369},[254,162801,271],{"class":264},[254,162803,162804],{"class":256,"line":8174},[254,162805,2540],{"emptyLinePlaceholder":184},[254,162807,162808,162810,162812,162814,162816],{"class":256,"line":8186},[254,162809,3241],{"class":260},[254,162811,153226],{"class":264},[254,162813,3089],{"class":260},[254,162815,153231],{"class":369},[254,162817,3879],{"class":264},[254,162819,162820],{"class":256,"line":8198},[254,162821,162822],{"class":264},"        show_balance()\n",[254,162824,162825,162827,162829,162831,162833],{"class":256,"line":9857},[254,162826,39434],{"class":260},[254,162828,153226],{"class":264},[254,162830,3089],{"class":260},[254,162832,153250],{"class":369},[254,162834,3879],{"class":264},[254,162836,162837],{"class":256,"line":9882},[254,162838,162839],{"class":264},"        save_money()\n",[254,162841,162842,162844,162846,162848,162850],{"class":256,"line":9905},[254,162843,39434],{"class":260},[254,162845,153226],{"class":264},[254,162847,3089],{"class":260},[254,162849,153268],{"class":369},[254,162851,3879],{"class":264},[254,162853,162854],{"class":256,"line":9929},[254,162855,162856],{"class":264},"        withdraw_money()\n",[254,162858,162859,162861,162863,162865,162867],{"class":256,"line":9934},[254,162860,39434],{"class":260},[254,162862,153226],{"class":264},[254,162864,3089],{"class":260},[254,162866,153322],{"class":369},[254,162868,3879],{"class":264},[254,162870,162871,162873,162875,162877],{"class":256,"line":9939},[254,162872,32592],{"class":313},[254,162874,265],{"class":264},[254,162876,153333],{"class":369},[254,162878,271],{"class":264},[254,162880,162881],{"class":256,"line":9944},[254,162882,31768],{"class":260},[254,162884,162885,162887],{"class":256,"line":9953},[254,162886,158162],{"class":260},[254,162888,3879],{"class":264},[254,162890,162891,162893,162895,162897],{"class":256,"line":9958},[254,162892,32592],{"class":313},[254,162894,265],{"class":264},[254,162896,153354],{"class":369},[254,162898,271],{"class":264},[14,162900,162901],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[34,162903,162905],{"id":162904},"_514-易错点","5.14 易错点",[21,162907,162908,162911,162914,162919,162924,162927],{},[24,162909,162910],{},"函数定义后必须调用才会执行。",[24,162912,162913],{},"函数名后面有括号才是调用。",[24,162915,162916,162918],{},[251,162917,17187],{}," 后面的代码不会执行。",[24,162920,162921,162922,28526],{},"没有返回值的函数默认返回 ",[251,162923,95827],{},[24,162925,162926],{},"局部变量不能在函数外部访问。",[24,162928,162929,162930,162932],{},"不要滥用 ",[251,162931,161966],{},"，更好的方式是让函数返回新值。",[14,162934,162935,162936,162938],{},"例如不用 ",[251,162937,161966],{}," 改写存款：",[245,162940,162942],{"className":30519,"code":162941,"language":30521,"meta":174,"style":174},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[251,162943,162944,162953,162964,162968,162972,162980,162993],{"__ignoreMap":174},[254,162945,162946,162948,162950],{"class":256,"line":257},[254,162947,32088],{"class":260},[254,162949,162570],{"class":2103},[254,162951,162952],{"class":264},"(balance, money):\n",[254,162954,162955,162957,162960,162962],{"class":256,"line":175},[254,162956,4230],{"class":260},[254,162958,162959],{"class":264}," balance ",[254,162961,745],{"class":260},[254,162963,150315],{"class":264},[254,162965,162966],{"class":256,"line":1319},[254,162967,2540],{"emptyLinePlaceholder":184},[254,162969,162970],{"class":256,"line":1334},[254,162971,2540],{"emptyLinePlaceholder":184},[254,162973,162974,162976,162978],{"class":256,"line":1340},[254,162975,162444],{"class":264},[254,162977,310],{"class":260},[254,162979,162449],{"class":313},[254,162981,162982,162984,162986,162989,162991],{"class":256,"line":1354},[254,162983,162444],{"class":264},[254,162985,310],{"class":260},[254,162987,162988],{"class":264}," save_money(balance, ",[254,162990,1862],{"class":313},[254,162992,271],{"class":264},[254,162994,162995,162997],{"class":256,"line":1360},[254,162996,30556],{"class":313},[254,162998,162999],{"class":264},"(balance)\n",[34,163001,163003],{"id":163002},"_515-本章练习","5.15 本章练习",[21,163005,163006,163013,163019,163025,163031],{},[24,163007,163008,163009,163012],{},"定义函数 ",[251,163010,163011],{},"print_student(name, age)","，输出学生信息。",[24,163014,163008,163015,163018],{},[251,163016,163017],{},"get_max(a, b, c)","，返回三个数中的最大值。",[24,163020,163008,163021,163024],{},[251,163022,163023],{},"is_even(num)","，判断一个数是否为偶数。",[24,163026,163008,163027,163030],{},[251,163028,163029],{},"calculate_bmi(weight, height)","，返回 BMI。",[24,163032,163033],{},"把第 4 章的菜单程序拆分成多个函数。",[5267,163035,163036],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":174,"searchDepth":175,"depth":175,"links":163038},[163039,163040,163041,163042,163043,163044,163045,163046,163047,163051,163052,163053,163054,163055,163056],{"id":161059,"depth":175,"text":161060},{"id":161100,"depth":175,"text":161101},{"id":161190,"depth":175,"text":161191},{"id":161271,"depth":175,"text":161272},{"id":161404,"depth":175,"text":161405},{"id":161526,"depth":175,"text":161527},{"id":161648,"depth":175,"text":161649},{"id":161725,"depth":175,"text":161726},{"id":161847,"depth":175,"text":161848,"children":163048},[163049,163050],{"id":161851,"depth":1319,"text":161852},{"id":161909,"depth":1319,"text":161910},{"id":162038,"depth":175,"text":162039},{"id":162164,"depth":175,"text":162165},{"id":162277,"depth":175,"text":162278},{"id":162433,"depth":175,"text":162434},{"id":162904,"depth":175,"text":162905},{"id":163002,"depth":175,"text":163003},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":161051,"description":23518},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":163063,"title":163064,"body":163065,"description":23518,"extension":181,"meta":166109,"navigation":184,"path":166110,"seo":166111,"stem":166112,"__hash__":166113},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":163066,"toc":166090},[163067,163070,163074,163077,163080,163184,163187,163191,163194,163274,163277,163281,163284,163344,163347,163383,163386,163401,163405,163478,163481,163536,163539,163609,163612,163696,163706,163764,163768,163813,163816,163842,163845,163951,163955,163958,164000,164003,164067,164070,164074,164077,164138,164141,164171,164174,164212,164216,164219,164228,164231,164355,164358,164399,164403,164406,164417,164457,164460,164475,164480,164483,164550,164553,164643,164647,164650,164698,164701,164728,164730,164760,164763,164783,164786,164817,164820,164853,164857,164860,164884,164887,164911,164914,164938,164942,164945,165075,165078,165158,165161,165236,165240,165243,165293,165296,165338,165341,165365,165367,165391,165394,165449,165452,165518,165522,165525,165528,165566,165569,165622,165625,165671,165674,165707,165710,165714,166033,166037,166066,166070,166087],[10,163068,163064],{"id":163069},"_6-数据容器",[34,163071,163073],{"id":163072},"_61-什么是数据容器","6.1 什么是数据容器",[14,163075,163076],{},"数据容器用于一次保存多个数据。",[14,163078,163079],{},"常见容器：",[402,163081,163082,163099],{},[405,163083,163084],{},[408,163085,163086,163088,163091,163094,163097],{},[411,163087,25912],{},[411,163089,163090],{},"是否有序",[411,163092,163093],{},"是否可变",[411,163095,163096],{},"是否允许重复",[411,163098,27633],{},[449,163100,163101,163119,163135,163150,163167],{},[408,163102,163103,163106,163109,163112,163115],{},[454,163104,163105],{},"list列表",[454,163107,163108],{},"有序",[454,163110,163111],{},"可变",[454,163113,163114],{},"允许",[454,163116,163117],{},[251,163118,155397],{},[408,163120,163121,163124,163126,163129,163131],{},[454,163122,163123],{},"tuple元组",[454,163125,163108],{},[454,163127,163128],{},"不可变",[454,163130,163114],{},[454,163132,163133],{},[251,163134,155410],{},[408,163136,163137,163140,163142,163144,163146],{},[454,163138,163139],{},"str字符串",[454,163141,163108],{},[454,163143,163128],{},[454,163145,163114],{},[454,163147,163148],{},[251,163149,156020],{},[408,163151,163152,163155,163158,163160,163163],{},[454,163153,163154],{},"set集合",[454,163156,163157],{},"无序",[454,163159,163111],{},[454,163161,163162],{},"不允许",[454,163164,163165],{},[251,163166,155435],{},[408,163168,163169,163172,163174,163176,163179],{},[454,163170,163171],{},"dict字典",[454,163173,163108],{},[454,163175,163111],{},[454,163177,163178],{},"key不允许重复",[454,163180,163181],{},[251,163182,163183],{},"{\"name\": \"小明\"}",[14,163185,163186],{},"Python 3.7 之后，字典保持插入顺序。",[34,163188,163190],{"id":163189},"_62-列表list","6.2 列表list",[14,163192,163193],{},"列表用于保存一组有顺序的数据。",[245,163195,163197],{"className":30519,"code":163196,"language":30521,"meta":174,"style":174},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[251,163198,163199,163219,163244,163265],{"__ignoreMap":174},[254,163200,163201,163203,163205,163207,163209,163211,163213,163215,163217],{"class":256,"line":257},[254,163202,160520],{"class":264},[254,163204,310],{"class":260},[254,163206,52367],{"class":264},[254,163208,150028],{"class":369},[254,163210,12576],{"class":264},[254,163212,151076],{"class":369},[254,163214,12576],{"class":264},[254,163216,159871],{"class":369},[254,163218,33387],{"class":264},[254,163220,163221,163224,163226,163228,163230,163232,163234,163236,163238,163240,163242],{"class":256,"line":175},[254,163222,163223],{"class":264},"numbers ",[254,163225,310],{"class":260},[254,163227,52367],{"class":264},[254,163229,482],{"class":313},[254,163231,12576],{"class":264},[254,163233,342],{"class":313},[254,163235,12576],{"class":264},[254,163237,336],{"class":313},[254,163239,12576],{"class":264},[254,163241,557],{"class":313},[254,163243,33387],{"class":264},[254,163245,163246,163249,163251,163253,163255,163257,163259,163261,163263],{"class":256,"line":1319},[254,163247,163248],{"class":264},"mixed ",[254,163250,310],{"class":260},[254,163252,52367],{"class":264},[254,163254,150028],{"class":369},[254,163256,12576],{"class":264},[254,163258,914],{"class":313},[254,163260,12576],{"class":264},[254,163262,31617],{"class":313},[254,163264,33387],{"class":264},[254,163266,163267,163270,163272],{"class":256,"line":1334},[254,163268,163269],{"class":264},"empty ",[254,163271,310],{"class":260},[254,163273,51979],{"class":264},[14,163275,163276],{},"推荐一个列表中保存同类数据，代码更清晰。",[34,163278,163280],{"id":163279},"_63-列表索引","6.3 列表索引",[14,163282,163283],{},"正向索引从 0 开始：",[245,163285,163287],{"className":30519,"code":163286,"language":30521,"meta":174,"style":174},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[251,163288,163289,163309,163313,163324,163334],{"__ignoreMap":174},[254,163290,163291,163293,163295,163297,163299,163301,163303,163305,163307],{"class":256,"line":257},[254,163292,160520],{"class":264},[254,163294,310],{"class":260},[254,163296,52367],{"class":264},[254,163298,150028],{"class":369},[254,163300,12576],{"class":264},[254,163302,151076],{"class":369},[254,163304,12576],{"class":264},[254,163306,159871],{"class":369},[254,163308,33387],{"class":264},[254,163310,163311],{"class":256,"line":175},[254,163312,2540],{"emptyLinePlaceholder":184},[254,163314,163315,163317,163320,163322],{"class":256,"line":1319},[254,163316,30556],{"class":313},[254,163318,163319],{"class":264},"(names[",[254,163321,456],{"class":313},[254,163323,4797],{"class":264},[254,163325,163326,163328,163330,163332],{"class":256,"line":1334},[254,163327,30556],{"class":313},[254,163329,163319],{"class":264},[254,163331,482],{"class":313},[254,163333,4797],{"class":264},[254,163335,163336,163338,163340,163342],{"class":256,"line":1340},[254,163337,30556],{"class":313},[254,163339,163319],{"class":264},[254,163341,342],{"class":313},[254,163343,4797],{"class":264},[14,163345,163346],{},"反向索引从 -1 开始：",[245,163348,163350],{"className":30519,"code":163349,"language":30521,"meta":174,"style":174},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[251,163351,163352,163368],{"__ignoreMap":174},[254,163353,163354,163356,163358,163360,163362,163365],{"class":256,"line":257},[254,163355,30556],{"class":313},[254,163357,163319],{"class":264},[254,163359,796],{"class":260},[254,163361,482],{"class":313},[254,163363,163364],{"class":264},"])  ",[254,163366,163367],{"class":323},"# 小刚\n",[254,163369,163370,163372,163374,163376,163378,163380],{"class":256,"line":175},[254,163371,30556],{"class":313},[254,163373,163319],{"class":264},[254,163375,796],{"class":260},[254,163377,342],{"class":313},[254,163379,163364],{"class":264},[254,163381,163382],{"class":323},"# 小红\n",[14,163384,163385],{},"索引越界会报错：",[245,163387,163389],{"className":30519,"code":163388,"language":30521,"meta":174,"style":174},"print(names[3])\n",[251,163390,163391],{"__ignoreMap":174},[254,163392,163393,163395,163397,163399],{"class":256,"line":257},[254,163394,30556],{"class":313},[254,163396,163319],{"class":264},[254,163398,336],{"class":313},[254,163400,4797],{"class":264},[34,163402,163404],{"id":163403},"_64-列表常用方法","6.4 列表常用方法",[245,163406,163408],{"className":30519,"code":163407,"language":30521,"meta":174,"style":174},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[251,163409,163410,163426,163430,163439,163453,163467,163471],{"__ignoreMap":174},[254,163411,163412,163414,163416,163418,163420,163422,163424],{"class":256,"line":257},[254,163413,160520],{"class":264},[254,163415,310],{"class":260},[254,163417,52367],{"class":264},[254,163419,150028],{"class":369},[254,163421,12576],{"class":264},[254,163423,151076],{"class":369},[254,163425,33387],{"class":264},[254,163427,163428],{"class":256,"line":175},[254,163429,2540],{"emptyLinePlaceholder":184},[254,163431,163432,163435,163437],{"class":256,"line":1319},[254,163433,163434],{"class":264},"names.append(",[254,163436,159871],{"class":369},[254,163438,271],{"class":264},[254,163440,163441,163444,163446,163448,163451],{"class":256,"line":1334},[254,163442,163443],{"class":264},"names.insert(",[254,163445,482],{"class":313},[254,163447,12576],{"class":264},[254,163449,163450],{"class":369},"\"小李\"",[254,163452,271],{"class":264},[254,163454,163455,163458,163460,163462,163465],{"class":256,"line":1340},[254,163456,163457],{"class":264},"names.extend([",[254,163459,8824],{"class":369},[254,163461,12576],{"class":264},[254,163463,163464],{"class":369},"\"小赵\"",[254,163466,4797],{"class":264},[254,163468,163469],{"class":256,"line":1354},[254,163470,2540],{"emptyLinePlaceholder":184},[254,163472,163473,163475],{"class":256,"line":1360},[254,163474,30556],{"class":313},[254,163476,163477],{"class":264},"(names)\n",[14,163479,163480],{},"删除元素：",[245,163482,163484],{"className":30519,"code":163483,"language":30521,"meta":174,"style":174},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[251,163485,163486,163495,163505,163519,163531],{"__ignoreMap":174},[254,163487,163488,163491,163493],{"class":256,"line":257},[254,163489,163490],{"class":264},"names.remove(",[254,163492,151076],{"class":369},[254,163494,271],{"class":264},[254,163496,163497,163500,163502],{"class":256,"line":175},[254,163498,163499],{"class":264},"last ",[254,163501,310],{"class":260},[254,163503,163504],{"class":264}," names.pop()\n",[254,163506,163507,163510,163512,163515,163517],{"class":256,"line":1319},[254,163508,163509],{"class":264},"first ",[254,163511,310],{"class":260},[254,163513,163514],{"class":264}," names.pop(",[254,163516,456],{"class":313},[254,163518,271],{"class":264},[254,163520,163521,163524,163527,163529],{"class":256,"line":1334},[254,163522,163523],{"class":260},"del",[254,163525,163526],{"class":264}," names[",[254,163528,456],{"class":313},[254,163530,33387],{"class":264},[254,163532,163533],{"class":256,"line":1340},[254,163534,163535],{"class":264},"names.clear()\n",[14,163537,163538],{},"查询和统计：",[245,163540,163542],{"className":30519,"code":163541,"language":30521,"meta":174,"style":174},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[251,163543,163544,163572,163576,163587,163598],{"__ignoreMap":174},[254,163545,163546,163548,163550,163552,163554,163556,163558,163560,163562,163564,163566,163568,163570],{"class":256,"line":257},[254,163547,163223],{"class":264},[254,163549,310],{"class":260},[254,163551,52367],{"class":264},[254,163553,482],{"class":313},[254,163555,12576],{"class":264},[254,163557,342],{"class":313},[254,163559,12576],{"class":264},[254,163561,336],{"class":313},[254,163563,12576],{"class":264},[254,163565,342],{"class":313},[254,163567,12576],{"class":264},[254,163569,557],{"class":313},[254,163571,33387],{"class":264},[254,163573,163574],{"class":256,"line":175},[254,163575,2540],{"emptyLinePlaceholder":184},[254,163577,163578,163580,163583,163585],{"class":256,"line":1319},[254,163579,30556],{"class":313},[254,163581,163582],{"class":264},"(numbers.index(",[254,163584,336],{"class":313},[254,163586,30638],{"class":264},[254,163588,163589,163591,163594,163596],{"class":256,"line":1334},[254,163590,30556],{"class":313},[254,163592,163593],{"class":264},"(numbers.count(",[254,163595,342],{"class":313},[254,163597,30638],{"class":264},[254,163599,163600,163602,163604,163606],{"class":256,"line":1340},[254,163601,30556],{"class":313},[254,163603,265],{"class":264},[254,163605,7499],{"class":313},[254,163607,163608],{"class":264},"(numbers))\n",[14,163610,163611],{},"排序：",[245,163613,163615],{"className":30519,"code":163614,"language":30521,"meta":174,"style":174},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[251,163616,163617,163641,163645,163650,163657,163661,163675,163681,163685,163690],{"__ignoreMap":174},[254,163618,163619,163621,163623,163625,163627,163629,163631,163633,163635,163637,163639],{"class":256,"line":257},[254,163620,163223],{"class":264},[254,163622,310],{"class":260},[254,163624,52367],{"class":264},[254,163626,336],{"class":313},[254,163628,12576],{"class":264},[254,163630,482],{"class":313},[254,163632,12576],{"class":264},[254,163634,583],{"class":313},[254,163636,12576],{"class":264},[254,163638,342],{"class":313},[254,163640,33387],{"class":264},[254,163642,163643],{"class":256,"line":175},[254,163644,2540],{"emptyLinePlaceholder":184},[254,163646,163647],{"class":256,"line":1319},[254,163648,163649],{"class":264},"numbers.sort()\n",[254,163651,163652,163654],{"class":256,"line":1334},[254,163653,30556],{"class":313},[254,163655,163656],{"class":264},"(numbers)\n",[254,163658,163659],{"class":256,"line":1340},[254,163660,2540],{"emptyLinePlaceholder":184},[254,163662,163663,163666,163669,163671,163673],{"class":256,"line":1354},[254,163664,163665],{"class":264},"numbers.sort(",[254,163667,163668],{"class":5357},"reverse",[254,163670,310],{"class":260},[254,163672,31617],{"class":313},[254,163674,271],{"class":264},[254,163676,163677,163679],{"class":256,"line":1360},[254,163678,30556],{"class":313},[254,163680,163656],{"class":264},[254,163682,163683],{"class":256,"line":1451},[254,163684,2540],{"emptyLinePlaceholder":184},[254,163686,163687],{"class":256,"line":1457},[254,163688,163689],{"class":264},"numbers.reverse()\n",[254,163691,163692,163694],{"class":256,"line":1469},[254,163693,30556],{"class":313},[254,163695,163656],{"class":264},[14,163697,163698,163701,163702,163705],{},[251,163699,163700],{},"sort()"," 会修改原列表，",[251,163703,163704],{},"sorted()"," 返回新列表。",[245,163707,163709],{"className":30519,"code":163708,"language":30521,"meta":174,"style":174},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[251,163710,163711,163735,163747,163751,163757],{"__ignoreMap":174},[254,163712,163713,163715,163717,163719,163721,163723,163725,163727,163729,163731,163733],{"class":256,"line":257},[254,163714,163223],{"class":264},[254,163716,310],{"class":260},[254,163718,52367],{"class":264},[254,163720,336],{"class":313},[254,163722,12576],{"class":264},[254,163724,482],{"class":313},[254,163726,12576],{"class":264},[254,163728,583],{"class":313},[254,163730,12576],{"class":264},[254,163732,342],{"class":313},[254,163734,33387],{"class":264},[254,163736,163737,163740,163742,163745],{"class":256,"line":175},[254,163738,163739],{"class":264},"new_numbers ",[254,163741,310],{"class":260},[254,163743,163744],{"class":313}," sorted",[254,163746,163656],{"class":264},[254,163748,163749],{"class":256,"line":1319},[254,163750,2540],{"emptyLinePlaceholder":184},[254,163752,163753,163755],{"class":256,"line":1334},[254,163754,30556],{"class":313},[254,163756,163656],{"class":264},[254,163758,163759,163761],{"class":256,"line":1340},[254,163760,30556],{"class":313},[254,163762,163763],{"class":264},"(new_numbers)\n",[34,163765,163767],{"id":163766},"_65-列表遍历","6.5 列表遍历",[245,163769,163771],{"className":30519,"code":163770,"language":30521,"meta":174,"style":174},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[251,163772,163773,163793,163797,163807],{"__ignoreMap":174},[254,163774,163775,163777,163779,163781,163783,163785,163787,163789,163791],{"class":256,"line":257},[254,163776,160520],{"class":264},[254,163778,310],{"class":260},[254,163780,52367],{"class":264},[254,163782,150028],{"class":369},[254,163784,12576],{"class":264},[254,163786,151076],{"class":369},[254,163788,12576],{"class":264},[254,163790,159871],{"class":369},[254,163792,33387],{"class":264},[254,163794,163795],{"class":256,"line":175},[254,163796,2540],{"emptyLinePlaceholder":184},[254,163798,163799,163801,163803,163805],{"class":256,"line":1319},[254,163800,3165],{"class":260},[254,163802,160556],{"class":264},[254,163804,26184],{"class":260},[254,163806,160561],{"class":264},[254,163808,163809,163811],{"class":256,"line":1334},[254,163810,31440],{"class":313},[254,163812,150800],{"class":264},[14,163814,163815],{},"需要索引时：",[245,163817,163819],{"className":30519,"code":163818,"language":30521,"meta":174,"style":174},"for index, name in enumerate(names):\n    print(index, name)\n",[251,163820,163821,163835],{"__ignoreMap":174},[254,163822,163823,163825,163828,163830,163832],{"class":256,"line":257},[254,163824,3165],{"class":260},[254,163826,163827],{"class":264}," index, name ",[254,163829,26184],{"class":260},[254,163831,31747],{"class":313},[254,163833,163834],{"class":264},"(names):\n",[254,163836,163837,163839],{"class":256,"line":175},[254,163838,31440],{"class":313},[254,163840,163841],{"class":264},"(index, name)\n",[14,163843,163844],{},"统计总分：",[245,163846,163848],{"className":30519,"code":163847,"language":30521,"meta":174,"style":174},"scores = [90, 85, 66, 78]\ntotal = 0\n\nfor score in scores:\n    total += score\n\navg = total \u002F len(scores)\nprint(f\"平均分:{avg:.2f}\")\n",[251,163849,163850,163875,163883,163887,163898,163906,163910,163927],{"__ignoreMap":174},[254,163851,163852,163855,163857,163859,163861,163863,163865,163867,163869,163871,163873],{"class":256,"line":257},[254,163853,163854],{"class":264},"scores ",[254,163856,310],{"class":260},[254,163858,52367],{"class":264},[254,163860,1126],{"class":313},[254,163862,12576],{"class":264},[254,163864,1000],{"class":313},[254,163866,12576],{"class":264},[254,163868,518],{"class":313},[254,163870,12576],{"class":264},[254,163872,825],{"class":313},[254,163874,33387],{"class":264},[254,163876,163877,163879,163881],{"class":256,"line":175},[254,163878,157400],{"class":264},[254,163880,310],{"class":260},[254,163882,47474],{"class":313},[254,163884,163885],{"class":256,"line":1319},[254,163886,2540],{"emptyLinePlaceholder":184},[254,163888,163889,163891,163893,163895],{"class":256,"line":1334},[254,163890,3165],{"class":260},[254,163892,157923],{"class":264},[254,163894,26184],{"class":260},[254,163896,163897],{"class":264}," scores:\n",[254,163899,163900,163902,163904],{"class":256,"line":1340},[254,163901,159447],{"class":264},[254,163903,9618],{"class":260},[254,163905,1719],{"class":264},[254,163907,163908],{"class":256,"line":1354},[254,163909,2540],{"emptyLinePlaceholder":184},[254,163911,163912,163915,163917,163920,163922,163924],{"class":256,"line":1360},[254,163913,163914],{"class":264},"avg ",[254,163916,310],{"class":260},[254,163918,163919],{"class":264}," total ",[254,163921,848],{"class":260},[254,163923,7472],{"class":313},[254,163925,163926],{"class":264},"(scores)\n",[254,163928,163929,163931,163933,163935,163938,163940,163943,163945,163947,163949],{"class":256,"line":1451},[254,163930,30556],{"class":313},[254,163932,265],{"class":264},[254,163934,317],{"class":260},[254,163936,163937],{"class":369},"\"平均分:",[254,163939,1160],{"class":313},[254,163941,163942],{"class":264},"avg",[254,163944,157299],{"class":260},[254,163946,1210],{"class":313},[254,163948,515],{"class":369},[254,163950,271],{"class":264},[34,163952,163954],{"id":163953},"_66-元组tuple","6.6 元组tuple",[14,163956,163957],{},"元组和列表类似，但不可修改。",[245,163959,163961],{"className":30519,"code":163960,"language":30521,"meta":174,"style":174},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[251,163962,163963,163980],{"__ignoreMap":174},[254,163964,163965,163968,163970,163972,163974,163976,163978],{"class":256,"line":257},[254,163966,163967],{"class":264},"point ",[254,163969,310],{"class":260},[254,163971,1798],{"class":264},[254,163973,710],{"class":313},[254,163975,12576],{"class":264},[254,163977,964],{"class":313},[254,163979,271],{"class":264},[254,163981,163982,163984,163986,163988,163990,163992,163994,163996,163998],{"class":256,"line":175},[254,163983,116455],{"class":264},[254,163985,310],{"class":260},[254,163987,1798],{"class":264},[254,163989,150028],{"class":369},[254,163991,12576],{"class":264},[254,163993,914],{"class":313},[254,163995,12576],{"class":264},[254,163997,69410],{"class":369},[254,163999,271],{"class":264},[14,164001,164002],{},"单元素元组必须加逗号：",[245,164004,164006],{"className":30519,"code":164005,"language":30521,"meta":174,"style":174},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[251,164007,164008,164022,164035,164039,164053],{"__ignoreMap":174},[254,164009,164010,164013,164015,164017,164019],{"class":256,"line":257},[254,164011,164012],{"class":264},"t1 ",[254,164014,310],{"class":260},[254,164016,1798],{"class":264},[254,164018,710],{"class":313},[254,164020,164021],{"class":264},",)\n",[254,164023,164024,164027,164029,164031,164033],{"class":256,"line":175},[254,164025,164026],{"class":264},"t2 ",[254,164028,310],{"class":260},[254,164030,1798],{"class":264},[254,164032,710],{"class":313},[254,164034,271],{"class":264},[254,164036,164037],{"class":256,"line":1319},[254,164038,2540],{"emptyLinePlaceholder":184},[254,164040,164041,164043,164045,164047,164050],{"class":256,"line":1334},[254,164042,30556],{"class":313},[254,164044,265],{"class":264},[254,164046,103248],{"class":313},[254,164048,164049],{"class":264},"(t1))  ",[254,164051,164052],{"class":323},"# tuple\n",[254,164054,164055,164057,164059,164061,164064],{"class":256,"line":1340},[254,164056,30556],{"class":313},[254,164058,265],{"class":264},[254,164060,103248],{"class":313},[254,164062,164063],{"class":264},"(t2))  ",[254,164065,164066],{"class":323},"# int\n",[14,164068,164069],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[34,164071,164073],{"id":164072},"_67-字符串str","6.7 字符串str",[14,164075,164076],{},"字符串也是序列，可以索引、切片和遍历。",[245,164078,164080],{"className":30519,"code":164079,"language":30521,"meta":174,"style":174},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[251,164081,164082,164090,164094,164105,164117,164121,164132],{"__ignoreMap":174},[254,164083,164084,164086,164088],{"class":256,"line":257},[254,164085,156584],{"class":264},[254,164087,310],{"class":260},[254,164089,159821],{"class":369},[254,164091,164092],{"class":256,"line":175},[254,164093,2540],{"emptyLinePlaceholder":184},[254,164095,164096,164098,164101,164103],{"class":256,"line":1319},[254,164097,30556],{"class":313},[254,164099,164100],{"class":264},"(text[",[254,164102,456],{"class":313},[254,164104,4797],{"class":264},[254,164106,164107,164109,164111,164113,164115],{"class":256,"line":1334},[254,164108,30556],{"class":313},[254,164110,164100],{"class":264},[254,164112,796],{"class":260},[254,164114,482],{"class":313},[254,164116,4797],{"class":264},[254,164118,164119],{"class":256,"line":1340},[254,164120,2540],{"emptyLinePlaceholder":184},[254,164122,164123,164125,164127,164129],{"class":256,"line":1354},[254,164124,3165],{"class":260},[254,164126,159832],{"class":264},[254,164128,26184],{"class":260},[254,164130,164131],{"class":264}," text:\n",[254,164133,164134,164136],{"class":256,"line":1360},[254,164135,31440],{"class":313},[254,164137,159843],{"class":264},[14,164139,164140],{},"字符串不可变：",[245,164142,164144],{"className":30519,"code":164143,"language":30521,"meta":174,"style":174},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[251,164145,164146,164154],{"__ignoreMap":174},[254,164147,164148,164150,164152],{"class":256,"line":257},[254,164149,156584],{"class":264},[254,164151,310],{"class":260},[254,164153,159821],{"class":369},[254,164155,164156,164159,164161,164163,164165,164168],{"class":256,"line":175},[254,164157,164158],{"class":264},"text[",[254,164160,456],{"class":313},[254,164162,4583],{"class":264},[254,164164,310],{"class":260},[254,164166,164167],{"class":369}," \"P\"",[254,164169,164170],{"class":323},"  # 报错\n",[14,164172,164173],{},"如果要得到新字符串：",[245,164175,164177],{"className":30519,"code":164176,"language":30521,"meta":174,"style":174},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[251,164178,164179,164187,164205],{"__ignoreMap":174},[254,164180,164181,164183,164185],{"class":256,"line":257},[254,164182,156584],{"class":264},[254,164184,310],{"class":260},[254,164186,159821],{"class":369},[254,164188,164189,164191,164193,164195,164197,164200,164202],{"class":256,"line":175},[254,164190,156584],{"class":264},[254,164192,310],{"class":260},[254,164194,164167],{"class":369},[254,164196,45707],{"class":260},[254,164198,164199],{"class":264}," text[",[254,164201,482],{"class":313},[254,164203,164204],{"class":264},":]\n",[254,164206,164207,164209],{"class":256,"line":1319},[254,164208,30556],{"class":313},[254,164210,164211],{"class":264},"(text)\n",[34,164213,164215],{"id":164214},"_68-切片","6.8 切片",[14,164217,164218],{},"切片用于从序列中取一部分。",[245,164220,164222],{"className":30519,"code":164221,"language":30521,"meta":174,"style":174},"序列[开始:结束:步长]\n",[251,164223,164224],{"__ignoreMap":174},[254,164225,164226],{"class":256,"line":257},[254,164227,164221],{"class":264},[14,164229,164230],{},"结束位置不包含。",[245,164232,164234],{"className":30519,"code":164233,"language":30521,"meta":174,"style":174},"nums = [0, 1, 2, 3, 4, 5, 6]\n\nprint(nums[1:4])    # [1, 2, 3]\nprint(nums[:3])     # [0, 1, 2]\nprint(nums[3:])     # [3, 4, 5, 6]\nprint(nums[::2])    # [0, 2, 4, 6]\nprint(nums[::-1])   # 反转\n",[251,164235,164236,164273,164277,164296,164311,164325,164339],{"__ignoreMap":174},[254,164237,164238,164241,164243,164245,164247,164249,164251,164253,164255,164257,164259,164261,164263,164265,164267,164269,164271],{"class":256,"line":257},[254,164239,164240],{"class":264},"nums ",[254,164242,310],{"class":260},[254,164244,52367],{"class":264},[254,164246,456],{"class":313},[254,164248,12576],{"class":264},[254,164250,482],{"class":313},[254,164252,12576],{"class":264},[254,164254,342],{"class":313},[254,164256,12576],{"class":264},[254,164258,336],{"class":313},[254,164260,12576],{"class":264},[254,164262,557],{"class":313},[254,164264,12576],{"class":264},[254,164266,583],{"class":313},[254,164268,12576],{"class":264},[254,164270,608],{"class":313},[254,164272,33387],{"class":264},[254,164274,164275],{"class":256,"line":175},[254,164276,2540],{"emptyLinePlaceholder":184},[254,164278,164279,164281,164284,164286,164288,164290,164293],{"class":256,"line":1319},[254,164280,30556],{"class":313},[254,164282,164283],{"class":264},"(nums[",[254,164285,482],{"class":313},[254,164287,1123],{"class":264},[254,164289,557],{"class":313},[254,164291,164292],{"class":264},"])    ",[254,164294,164295],{"class":323},"# [1, 2, 3]\n",[254,164297,164298,164300,164303,164305,164308],{"class":256,"line":1334},[254,164299,30556],{"class":313},[254,164301,164302],{"class":264},"(nums[:",[254,164304,336],{"class":313},[254,164306,164307],{"class":264},"])     ",[254,164309,164310],{"class":323},"# [0, 1, 2]\n",[254,164312,164313,164315,164317,164319,164322],{"class":256,"line":1340},[254,164314,30556],{"class":313},[254,164316,164283],{"class":264},[254,164318,336],{"class":313},[254,164320,164321],{"class":264},":])     ",[254,164323,164324],{"class":323},"# [3, 4, 5, 6]\n",[254,164326,164327,164329,164332,164334,164336],{"class":256,"line":1354},[254,164328,30556],{"class":313},[254,164330,164331],{"class":264},"(nums[::",[254,164333,342],{"class":313},[254,164335,164292],{"class":264},[254,164337,164338],{"class":323},"# [0, 2, 4, 6]\n",[254,164340,164341,164343,164345,164347,164349,164352],{"class":256,"line":1360},[254,164342,30556],{"class":313},[254,164344,164331],{"class":264},[254,164346,796],{"class":260},[254,164348,482],{"class":313},[254,164350,164351],{"class":264},"])   ",[254,164353,164354],{"class":323},"# 反转\n",[14,164356,164357],{},"字符串切片：",[245,164359,164361],{"className":30519,"code":164360,"language":30521,"meta":174,"style":174},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[251,164362,164363,164372,164386],{"__ignoreMap":174},[254,164364,164365,164367,164369],{"class":256,"line":257},[254,164366,156584],{"class":264},[254,164368,310],{"class":260},[254,164370,164371],{"class":369}," \"abcdef\"\n",[254,164373,164374,164376,164378,164380,164382,164384],{"class":256,"line":175},[254,164375,30556],{"class":313},[254,164377,164100],{"class":264},[254,164379,482],{"class":313},[254,164381,1123],{"class":264},[254,164383,557],{"class":313},[254,164385,4797],{"class":264},[254,164387,164388,164390,164393,164395,164397],{"class":256,"line":1319},[254,164389,30556],{"class":313},[254,164391,164392],{"class":264},"(text[::",[254,164394,796],{"class":260},[254,164396,482],{"class":313},[254,164398,4797],{"class":264},[34,164400,164402],{"id":164401},"_69-集合set","6.9 集合set",[14,164404,164405],{},"集合特点：",[21,164407,164408,164411,164414],{},[24,164409,164410],{},"无序。",[24,164412,164413],{},"元素不重复。",[24,164415,164416],{},"可以做交集、并集、差集。",[245,164418,164420],{"className":30519,"code":164419,"language":30521,"meta":174,"style":174},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[251,164421,164422,164450],{"__ignoreMap":174},[254,164423,164424,164426,164428,164430,164432,164434,164436,164438,164440,164442,164444,164446,164448],{"class":256,"line":257},[254,164425,164240],{"class":264},[254,164427,310],{"class":260},[254,164429,4588],{"class":264},[254,164431,482],{"class":313},[254,164433,12576],{"class":264},[254,164435,342],{"class":313},[254,164437,12576],{"class":264},[254,164439,336],{"class":313},[254,164441,12576],{"class":264},[254,164443,336],{"class":313},[254,164445,12576],{"class":264},[254,164447,557],{"class":313},[254,164449,1705],{"class":264},[254,164451,164452,164454],{"class":256,"line":175},[254,164453,30556],{"class":313},[254,164455,164456],{"class":264},"(nums)\n",[14,164458,164459],{},"创建空集合：",[245,164461,164463],{"className":30519,"code":164462,"language":30521,"meta":174,"style":174},"s = set()\n",[251,164464,164465],{"__ignoreMap":174},[254,164466,164467,164469,164471,164473],{"class":256,"line":257},[254,164468,10720],{"class":264},[254,164470,310],{"class":260},[254,164472,119862],{"class":313},[254,164474,2116],{"class":264},[14,164476,9166,164477,164479],{},[251,164478,32600],{}," 是空字典，不是空集合。",[14,164481,164482],{},"集合常用操作：",[245,164484,164486],{"className":30519,"code":164485,"language":30521,"meta":174,"style":174},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[251,164487,164488,164508,164512,164521,164530,164539],{"__ignoreMap":174},[254,164489,164490,164492,164494,164496,164498,164500,164502,164504,164506],{"class":256,"line":257},[254,164491,10720],{"class":264},[254,164493,310],{"class":260},[254,164495,4588],{"class":264},[254,164497,482],{"class":313},[254,164499,12576],{"class":264},[254,164501,342],{"class":313},[254,164503,12576],{"class":264},[254,164505,336],{"class":313},[254,164507,1705],{"class":264},[254,164509,164510],{"class":256,"line":175},[254,164511,2540],{"emptyLinePlaceholder":184},[254,164513,164514,164517,164519],{"class":256,"line":1319},[254,164515,164516],{"class":264},"s.add(",[254,164518,557],{"class":313},[254,164520,271],{"class":264},[254,164522,164523,164526,164528],{"class":256,"line":1334},[254,164524,164525],{"class":264},"s.remove(",[254,164527,342],{"class":313},[254,164529,271],{"class":264},[254,164531,164532,164535,164537],{"class":256,"line":1340},[254,164533,164534],{"class":264},"s.discard(",[254,164536,710],{"class":313},[254,164538,271],{"class":264},[254,164540,164541,164543,164545,164547],{"class":256,"line":1354},[254,164542,30556],{"class":313},[254,164544,265],{"class":264},[254,164546,7499],{"class":313},[254,164548,164549],{"class":264},"(s))\n",[14,164551,164552],{},"交并差：",[245,164554,164556],{"className":30519,"code":164555,"language":30521,"meta":174,"style":174},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[251,164557,164558,164578,164598,164602,164617,164630],{"__ignoreMap":174},[254,164559,164560,164562,164564,164566,164568,164570,164572,164574,164576],{"class":256,"line":257},[254,164561,11060],{"class":264},[254,164563,310],{"class":260},[254,164565,4588],{"class":264},[254,164567,482],{"class":313},[254,164569,12576],{"class":264},[254,164571,342],{"class":313},[254,164573,12576],{"class":264},[254,164575,336],{"class":313},[254,164577,1705],{"class":264},[254,164579,164580,164582,164584,164586,164588,164590,164592,164594,164596],{"class":256,"line":175},[254,164581,11086],{"class":264},[254,164583,310],{"class":260},[254,164585,4588],{"class":264},[254,164587,336],{"class":313},[254,164589,12576],{"class":264},[254,164591,557],{"class":313},[254,164593,12576],{"class":264},[254,164595,583],{"class":313},[254,164597,1705],{"class":264},[254,164599,164600],{"class":256,"line":1319},[254,164601,2540],{"emptyLinePlaceholder":184},[254,164603,164604,164606,164609,164611,164614],{"class":256,"line":1334},[254,164605,30556],{"class":313},[254,164607,164608],{"class":264},"(a ",[254,164610,617],{"class":260},[254,164612,164613],{"class":264}," b)  ",[254,164615,164616],{"class":323},"# 交集\n",[254,164618,164619,164621,164623,164625,164627],{"class":256,"line":1340},[254,164620,30556],{"class":313},[254,164622,164608],{"class":264},[254,164624,1185],{"class":260},[254,164626,164613],{"class":264},[254,164628,164629],{"class":323},"# 并集\n",[254,164631,164632,164634,164636,164638,164640],{"class":256,"line":1354},[254,164633,30556],{"class":313},[254,164635,164608],{"class":264},[254,164637,796],{"class":260},[254,164639,164613],{"class":264},[254,164641,164642],{"class":323},"# 差集\n",[34,164644,164646],{"id":164645},"_610-字典dict","6.10 字典dict",[14,164648,164649],{},"字典通过 key-value 保存数据。",[245,164651,164653],{"className":30519,"code":164652,"language":30521,"meta":174,"style":174},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[251,164654,164655,164663,164673,164684,164694],{"__ignoreMap":174},[254,164656,164657,164659,164661],{"class":256,"line":257},[254,164658,149621],{"class":264},[254,164660,310],{"class":260},[254,164662,15713],{"class":264},[254,164664,164665,164667,164669,164671],{"class":256,"line":175},[254,164666,147160],{"class":369},[254,164668,51578],{"class":264},[254,164670,150028],{"class":369},[254,164672,31607],{"class":264},[254,164674,164675,164678,164680,164682],{"class":256,"line":1319},[254,164676,164677],{"class":369},"    \"age\"",[254,164679,51578],{"class":264},[254,164681,914],{"class":313},[254,164683,31607],{"class":264},[254,164685,164686,164689,164691],{"class":256,"line":1334},[254,164687,164688],{"class":369},"    \"score\"",[254,164690,51578],{"class":264},[254,164692,164693],{"class":313},"95\n",[254,164695,164696],{"class":256,"line":1340},[254,164697,1705],{"class":264},[14,164699,164700],{},"获取值：",[245,164702,164704],{"className":30519,"code":164703,"language":30521,"meta":174,"style":174},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[251,164705,164706,164717],{"__ignoreMap":174},[254,164707,164708,164710,164713,164715],{"class":256,"line":257},[254,164709,30556],{"class":313},[254,164711,164712],{"class":264},"(student[",[254,164714,62820],{"class":369},[254,164716,4797],{"class":264},[254,164718,164719,164721,164724,164726],{"class":256,"line":175},[254,164720,30556],{"class":313},[254,164722,164723],{"class":264},"(student.get(",[254,164725,62820],{"class":369},[254,164727,30638],{"class":264},[14,164729,15529],{},[245,164731,164733],{"className":30519,"code":164732,"language":30521,"meta":174,"style":174},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[251,164734,164735,164748],{"__ignoreMap":174},[254,164736,164737,164739,164742,164745],{"class":256,"line":257},[254,164738,152999],{"class":264},[254,164740,164741],{"class":369},"\"address\"",[254,164743,164744],{"class":264},"]     ",[254,164746,164747],{"class":323},"# key不存在会报错\n",[254,164749,164750,164753,164755,164757],{"class":256,"line":175},[254,164751,164752],{"class":264},"student.get(",[254,164754,164741],{"class":369},[254,164756,13855],{"class":264},[254,164758,164759],{"class":323},"# key不存在返回None\n",[14,164761,164762],{},"设置默认值：",[245,164764,164766],{"className":30519,"code":164765,"language":30521,"meta":174,"style":174},"print(student.get(\"address\", \"未知\"))\n",[251,164767,164768],{"__ignoreMap":174},[254,164769,164770,164772,164774,164776,164778,164781],{"class":256,"line":257},[254,164771,30556],{"class":313},[254,164773,164723],{"class":264},[254,164775,164741],{"class":369},[254,164777,12576],{"class":264},[254,164779,164780],{"class":369},"\"未知\"",[254,164782,30638],{"class":264},[14,164784,164785],{},"新增和修改：",[245,164787,164789],{"className":30519,"code":164788,"language":30521,"meta":174,"style":174},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[251,164790,164791,164804],{"__ignoreMap":174},[254,164792,164793,164795,164797,164799,164801],{"class":256,"line":257},[254,164794,152999],{"class":264},[254,164796,69265],{"class":369},[254,164798,4583],{"class":264},[254,164800,310],{"class":260},[254,164802,164803],{"class":313}," 19\n",[254,164805,164806,164808,164810,164812,164814],{"class":256,"line":175},[254,164807,152999],{"class":264},[254,164809,164741],{"class":369},[254,164811,4583],{"class":264},[254,164813,310],{"class":260},[254,164815,164816],{"class":369}," \"北京\"\n",[14,164818,164819],{},"删除：",[245,164821,164823],{"className":30519,"code":164822,"language":30521,"meta":174,"style":174},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[251,164824,164825,164838,164848],{"__ignoreMap":174},[254,164826,164827,164829,164831,164834,164836],{"class":256,"line":257},[254,164828,155498],{"class":264},[254,164830,310],{"class":260},[254,164832,164833],{"class":264}," student.pop(",[254,164835,151612],{"class":369},[254,164837,271],{"class":264},[254,164839,164840,164842,164844,164846],{"class":256,"line":175},[254,164841,163523],{"class":260},[254,164843,152289],{"class":264},[254,164845,69265],{"class":369},[254,164847,33387],{"class":264},[254,164849,164850],{"class":256,"line":1319},[254,164851,164852],{"class":264},"student.clear()\n",[34,164854,164856],{"id":164855},"_611-字典遍历","6.11 字典遍历",[14,164858,164859],{},"遍历 key：",[245,164861,164863],{"className":30519,"code":164862,"language":30521,"meta":174,"style":174},"for key in student:\n    print(key, student[key])\n",[251,164864,164865,164877],{"__ignoreMap":174},[254,164866,164867,164869,164872,164874],{"class":256,"line":257},[254,164868,3165],{"class":260},[254,164870,164871],{"class":264}," key ",[254,164873,26184],{"class":260},[254,164875,164876],{"class":264}," student:\n",[254,164878,164879,164881],{"class":256,"line":175},[254,164880,31440],{"class":313},[254,164882,164883],{"class":264},"(key, student[key])\n",[14,164885,164886],{},"遍历 value：",[245,164888,164890],{"className":30519,"code":164889,"language":30521,"meta":174,"style":174},"for value in student.values():\n    print(value)\n",[251,164891,164892,164904],{"__ignoreMap":174},[254,164893,164894,164896,164899,164901],{"class":256,"line":257},[254,164895,3165],{"class":260},[254,164897,164898],{"class":264}," value ",[254,164900,26184],{"class":260},[254,164902,164903],{"class":264}," student.values():\n",[254,164905,164906,164908],{"class":256,"line":175},[254,164907,31440],{"class":313},[254,164909,164910],{"class":264},"(value)\n",[14,164912,164913],{},"遍历 key 和 value：",[245,164915,164917],{"className":30519,"code":164916,"language":30521,"meta":174,"style":174},"for key, value in student.items():\n    print(key, value)\n",[251,164918,164919,164931],{"__ignoreMap":174},[254,164920,164921,164923,164926,164928],{"class":256,"line":257},[254,164922,3165],{"class":260},[254,164924,164925],{"class":264}," key, value ",[254,164927,26184],{"class":260},[254,164929,164930],{"class":264}," student.items():\n",[254,164932,164933,164935],{"class":256,"line":175},[254,164934,31440],{"class":313},[254,164936,164937],{"class":264},"(key, value)\n",[34,164939,164941],{"id":164940},"_612-嵌套容器","6.12 嵌套容器",[14,164943,164944],{},"列表中保存字典，是项目中最常见的结构之一。",[245,164946,164948],{"className":30519,"code":164947,"language":30521,"meta":174,"style":174},"students = [\n    {\"name\": \"小明\", \"age\": 18, \"score\": 95},\n    {\"name\": \"小红\", \"age\": 17, \"score\": 88},\n    {\"name\": \"小刚\", \"age\": 19, \"score\": 72},\n]\n\nfor student in students:\n    print(student[\"name\"], student[\"score\"])\n",[251,164949,164950,164958,164986,165014,165042,165046,165050,165060],{"__ignoreMap":174},[254,164951,164952,164954,164956],{"class":256,"line":257},[254,164953,159856],{"class":264},[254,164955,310],{"class":260},[254,164957,55588],{"class":264},[254,164959,164960,164962,164964,164966,164968,164970,164972,164974,164976,164978,164980,164982,164984],{"class":256,"line":175},[254,164961,148525],{"class":264},[254,164963,62820],{"class":369},[254,164965,51578],{"class":264},[254,164967,150028],{"class":369},[254,164969,12576],{"class":264},[254,164971,69265],{"class":369},[254,164973,51578],{"class":264},[254,164975,914],{"class":313},[254,164977,12576],{"class":264},[254,164979,151612],{"class":369},[254,164981,51578],{"class":264},[254,164983,1253],{"class":313},[254,164985,5070],{"class":264},[254,164987,164988,164990,164992,164994,164996,164998,165000,165002,165004,165006,165008,165010,165012],{"class":256,"line":1319},[254,164989,148525],{"class":264},[254,164991,62820],{"class":369},[254,164993,51578],{"class":264},[254,164995,151076],{"class":369},[254,164997,12576],{"class":264},[254,164999,69265],{"class":369},[254,165001,51578],{"class":264},[254,165003,889],{"class":313},[254,165005,12576],{"class":264},[254,165007,151612],{"class":369},[254,165009,51578],{"class":264},[254,165011,1075],{"class":313},[254,165013,5070],{"class":264},[254,165015,165016,165018,165020,165022,165024,165026,165028,165030,165032,165034,165036,165038,165040],{"class":256,"line":1334},[254,165017,148525],{"class":264},[254,165019,62820],{"class":369},[254,165021,51578],{"class":264},[254,165023,159871],{"class":369},[254,165025,12576],{"class":264},[254,165027,69265],{"class":369},[254,165029,51578],{"class":264},[254,165031,939],{"class":313},[254,165033,12576],{"class":264},[254,165035,151612],{"class":369},[254,165037,51578],{"class":264},[254,165039,670],{"class":313},[254,165041,5070],{"class":264},[254,165043,165044],{"class":256,"line":1340},[254,165045,33387],{"class":264},[254,165047,165048],{"class":256,"line":1354},[254,165049,2540],{"emptyLinePlaceholder":184},[254,165051,165052,165054,165056,165058],{"class":256,"line":1360},[254,165053,3165],{"class":260},[254,165055,152277],{"class":264},[254,165057,26184],{"class":260},[254,165059,152282],{"class":264},[254,165061,165062,165064,165066,165068,165071,165073],{"class":256,"line":1451},[254,165063,31440],{"class":313},[254,165065,164712],{"class":264},[254,165067,62820],{"class":369},[254,165069,165070],{"class":264},"], student[",[254,165072,151612],{"class":369},[254,165074,4797],{"class":264},[14,165076,165077],{},"统计平均分：",[245,165079,165081],{"className":30519,"code":165080,"language":30521,"meta":174,"style":174},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[251,165082,165083,165091,165095,165105,165117,165121,165136],{"__ignoreMap":174},[254,165084,165085,165087,165089],{"class":256,"line":257},[254,165086,157400],{"class":264},[254,165088,310],{"class":260},[254,165090,47474],{"class":313},[254,165092,165093],{"class":256,"line":175},[254,165094,2540],{"emptyLinePlaceholder":184},[254,165096,165097,165099,165101,165103],{"class":256,"line":1319},[254,165098,3165],{"class":260},[254,165100,152277],{"class":264},[254,165102,26184],{"class":260},[254,165104,152282],{"class":264},[254,165106,165107,165109,165111,165113,165115],{"class":256,"line":1334},[254,165108,159447],{"class":264},[254,165110,9618],{"class":260},[254,165112,152289],{"class":264},[254,165114,151612],{"class":369},[254,165116,33387],{"class":264},[254,165118,165119],{"class":256,"line":1340},[254,165120,2540],{"emptyLinePlaceholder":184},[254,165122,165123,165125,165127,165129,165131,165133],{"class":256,"line":1354},[254,165124,163914],{"class":264},[254,165126,310],{"class":260},[254,165128,163919],{"class":264},[254,165130,848],{"class":260},[254,165132,7472],{"class":313},[254,165134,165135],{"class":264},"(students)\n",[254,165137,165138,165140,165142,165144,165146,165148,165150,165152,165154,165156],{"class":256,"line":1360},[254,165139,30556],{"class":313},[254,165141,265],{"class":264},[254,165143,317],{"class":260},[254,165145,163937],{"class":369},[254,165147,1160],{"class":313},[254,165149,163942],{"class":264},[254,165151,157299],{"class":260},[254,165153,1210],{"class":313},[254,165155,515],{"class":369},[254,165157,271],{"class":264},[14,165159,165160],{},"查找学生：",[245,165162,165164],{"className":30519,"code":165163,"language":30521,"meta":174,"style":174},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[251,165165,165166,165181,165185,165195,165209,165215,165219,165225],{"__ignoreMap":174},[254,165167,165168,165170,165172,165174,165176,165179],{"class":256,"line":257},[254,165169,111719],{"class":264},[254,165171,310],{"class":260},[254,165173,60746],{"class":313},[254,165175,265],{"class":264},[254,165177,165178],{"class":369},"\"请输入学生姓名:\"",[254,165180,271],{"class":264},[254,165182,165183],{"class":256,"line":175},[254,165184,2540],{"emptyLinePlaceholder":184},[254,165186,165187,165189,165191,165193],{"class":256,"line":1319},[254,165188,3165],{"class":260},[254,165190,152277],{"class":264},[254,165192,26184],{"class":260},[254,165194,152282],{"class":264},[254,165196,165197,165199,165201,165203,165205,165207],{"class":256,"line":1334},[254,165198,3241],{"class":260},[254,165200,152289],{"class":264},[254,165202,62820],{"class":369},[254,165204,4583],{"class":264},[254,165206,3089],{"class":260},[254,165208,160572],{"class":264},[254,165210,165211,165213],{"class":256,"line":1340},[254,165212,32592],{"class":313},[254,165214,150182],{"class":264},[254,165216,165217],{"class":256,"line":1354},[254,165218,31768],{"class":260},[254,165220,165221,165223],{"class":256,"line":1360},[254,165222,1841],{"class":260},[254,165224,3879],{"class":264},[254,165226,165227,165229,165231,165234],{"class":256,"line":1451},[254,165228,31440],{"class":313},[254,165230,265],{"class":264},[254,165232,165233],{"class":369},"\"没有找到\"",[254,165235,271],{"class":264},[34,165237,165239],{"id":165238},"_613-容器通用操作","6.13 容器通用操作",[14,165241,165242],{},"长度：",[245,165244,165246],{"className":30519,"code":165245,"language":30521,"meta":174,"style":174},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[251,165247,165248,165267,165277],{"__ignoreMap":174},[254,165249,165250,165252,165255,165257,165259,165261,165263,165265],{"class":256,"line":257},[254,165251,7499],{"class":313},[254,165253,165254],{"class":264},"([",[254,165256,482],{"class":313},[254,165258,12576],{"class":264},[254,165260,342],{"class":313},[254,165262,12576],{"class":264},[254,165264,336],{"class":313},[254,165266,4797],{"class":264},[254,165268,165269,165271,165273,165275],{"class":256,"line":175},[254,165270,7499],{"class":313},[254,165272,265],{"class":264},[254,165274,156020],{"class":369},[254,165276,271],{"class":264},[254,165278,165279,165281,165284,165286,165288,165290],{"class":256,"line":1319},[254,165280,7499],{"class":313},[254,165282,165283],{"class":264},"({",[254,165285,62820],{"class":369},[254,165287,51578],{"class":264},[254,165289,150028],{"class":369},[254,165291,165292],{"class":264},"})\n",[14,165294,165295],{},"最大最小：",[245,165297,165299],{"className":30519,"code":165298,"language":30521,"meta":174,"style":174},"max([1, 2, 3])\nmin([1, 2, 3])\n",[251,165300,165301,165319],{"__ignoreMap":174},[254,165302,165303,165305,165307,165309,165311,165313,165315,165317],{"class":256,"line":257},[254,165304,6156],{"class":313},[254,165306,165254],{"class":264},[254,165308,482],{"class":313},[254,165310,12576],{"class":264},[254,165312,342],{"class":313},[254,165314,12576],{"class":264},[254,165316,336],{"class":313},[254,165318,4797],{"class":264},[254,165320,165321,165324,165326,165328,165330,165332,165334,165336],{"class":256,"line":175},[254,165322,165323],{"class":313},"min",[254,165325,165254],{"class":264},[254,165327,482],{"class":313},[254,165329,12576],{"class":264},[254,165331,342],{"class":313},[254,165333,12576],{"class":264},[254,165335,336],{"class":313},[254,165337,4797],{"class":264},[14,165339,165340],{},"求和：",[245,165342,165344],{"className":30519,"code":165343,"language":30521,"meta":174,"style":174},"sum([1, 2, 3])\n",[251,165345,165346],{"__ignoreMap":174},[254,165347,165348,165351,165353,165355,165357,165359,165361,165363],{"class":256,"line":257},[254,165349,165350],{"class":313},"sum",[254,165352,165254],{"class":264},[254,165354,482],{"class":313},[254,165356,12576],{"class":264},[254,165358,342],{"class":313},[254,165360,12576],{"class":264},[254,165362,336],{"class":313},[254,165364,4797],{"class":264},[14,165366,163611],{},[245,165368,165370],{"className":30519,"code":165369,"language":30521,"meta":174,"style":174},"sorted([3, 1, 2])\n",[251,165371,165372],{"__ignoreMap":174},[254,165373,165374,165377,165379,165381,165383,165385,165387,165389],{"class":256,"line":257},[254,165375,165376],{"class":313},"sorted",[254,165378,165254],{"class":264},[254,165380,336],{"class":313},[254,165382,12576],{"class":264},[254,165384,482],{"class":313},[254,165386,12576],{"class":264},[254,165388,342],{"class":313},[254,165390,4797],{"class":264},[14,165392,165393],{},"类型转换：",[245,165395,165397],{"className":30519,"code":165396,"language":30521,"meta":174,"style":174},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[251,165398,165399,165409,165427],{"__ignoreMap":174},[254,165400,165401,165403,165405,165407],{"class":256,"line":257},[254,165402,154210],{"class":313},[254,165404,265],{"class":264},[254,165406,156020],{"class":369},[254,165408,271],{"class":264},[254,165410,165411,165413,165415,165417,165419,165421,165423,165425],{"class":256,"line":175},[254,165412,155405],{"class":313},[254,165414,165254],{"class":264},[254,165416,482],{"class":313},[254,165418,12576],{"class":264},[254,165420,342],{"class":313},[254,165422,12576],{"class":264},[254,165424,336],{"class":313},[254,165426,4797],{"class":264},[254,165428,165429,165431,165433,165435,165437,165439,165441,165443,165445,165447],{"class":256,"line":1319},[254,165430,155430],{"class":313},[254,165432,165254],{"class":264},[254,165434,482],{"class":313},[254,165436,12576],{"class":264},[254,165438,482],{"class":313},[254,165440,12576],{"class":264},[254,165442,342],{"class":313},[254,165444,12576],{"class":264},[254,165446,336],{"class":313},[254,165448,4797],{"class":264},[14,165450,165451],{},"成员判断：",[245,165453,165455],{"className":30519,"code":165454,"language":30521,"meta":174,"style":174},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[251,165456,165457,165474,165498],{"__ignoreMap":174},[254,165458,165459,165461,165463,165466,165469,165472],{"class":256,"line":257},[254,165460,30556],{"class":313},[254,165462,265],{"class":264},[254,165464,165465],{"class":369},"\"a\"",[254,165467,165468],{"class":260}," in",[254,165470,165471],{"class":369}," \"abc\"",[254,165473,271],{"class":264},[254,165475,165476,165478,165480,165482,165484,165486,165488,165490,165492,165494,165496],{"class":256,"line":175},[254,165477,30556],{"class":313},[254,165479,265],{"class":264},[254,165481,482],{"class":313},[254,165483,165468],{"class":260},[254,165485,52367],{"class":264},[254,165487,482],{"class":313},[254,165489,12576],{"class":264},[254,165491,342],{"class":313},[254,165493,12576],{"class":264},[254,165495,336],{"class":313},[254,165497,4797],{"class":264},[254,165499,165500,165502,165504,165506,165508,165510,165512,165514,165516],{"class":256,"line":1319},[254,165501,30556],{"class":313},[254,165503,265],{"class":264},[254,165505,62820],{"class":369},[254,165507,165468],{"class":260},[254,165509,4588],{"class":264},[254,165511,62820],{"class":369},[254,165513,51578],{"class":264},[254,165515,150028],{"class":369},[254,165517,165292],{"class":264},[34,165519,165521],{"id":165520},"_614-推导式","6.14 推导式",[14,165523,165524],{},"推导式用于快速生成容器。",[14,165526,165527],{},"列表推导式：",[245,165529,165531],{"className":30519,"code":165530,"language":30521,"meta":174,"style":174},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[251,165532,165533,165560],{"__ignoreMap":174},[254,165534,165535,165537,165539,165542,165544,165546,165548,165550,165552,165554,165556,165558],{"class":256,"line":257},[254,165536,164240],{"class":264},[254,165538,310],{"class":260},[254,165540,165541],{"class":264}," [i ",[254,165543,3165],{"class":260},[254,165545,9579],{"class":264},[254,165547,26184],{"class":260},[254,165549,32584],{"class":313},[254,165551,265],{"class":264},[254,165553,482],{"class":313},[254,165555,12576],{"class":264},[254,165557,608],{"class":313},[254,165559,97441],{"class":264},[254,165561,165562,165564],{"class":256,"line":175},[254,165563,30556],{"class":313},[254,165565,164456],{"class":264},[14,165567,165568],{},"带条件：",[245,165570,165572],{"className":30519,"code":165571,"language":30521,"meta":174,"style":174},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[251,165573,165574,165615],{"__ignoreMap":174},[254,165575,165576,165579,165581,165583,165585,165587,165589,165591,165593,165595,165597,165599,165601,165603,165605,165607,165609,165611,165613],{"class":256,"line":257},[254,165577,165578],{"class":264},"even_nums ",[254,165580,310],{"class":260},[254,165582,165541],{"class":264},[254,165584,3165],{"class":260},[254,165586,9579],{"class":264},[254,165588,26184],{"class":260},[254,165590,32584],{"class":313},[254,165592,265],{"class":264},[254,165594,482],{"class":313},[254,165596,12576],{"class":264},[254,165598,601],{"class":313},[254,165600,13855],{"class":264},[254,165602,1671],{"class":260},[254,165604,9579],{"class":264},[254,165606,592],{"class":260},[254,165608,14896],{"class":313},[254,165610,101700],{"class":260},[254,165612,4233],{"class":313},[254,165614,33387],{"class":264},[254,165616,165617,165619],{"class":256,"line":175},[254,165618,30556],{"class":313},[254,165620,165621],{"class":264},"(even_nums)\n",[14,165623,165624],{},"字典推导式：",[245,165626,165628],{"className":30519,"code":165627,"language":30521,"meta":174,"style":174},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[251,165629,165630,165664],{"__ignoreMap":174},[254,165631,165632,165635,165637,165640,165642,165644,165647,165649,165651,165653,165655,165657,165659,165661],{"class":256,"line":257},[254,165633,165634],{"class":264},"squares ",[254,165636,310],{"class":260},[254,165638,165639],{"class":264}," {i: i ",[254,165641,10802],{"class":260},[254,165643,14896],{"class":313},[254,165645,165646],{"class":260}," for",[254,165648,9579],{"class":264},[254,165650,26184],{"class":260},[254,165652,32584],{"class":313},[254,165654,265],{"class":264},[254,165656,482],{"class":313},[254,165658,12576],{"class":264},[254,165660,608],{"class":313},[254,165662,165663],{"class":264},")}\n",[254,165665,165666,165668],{"class":256,"line":175},[254,165667,30556],{"class":313},[254,165669,165670],{"class":264},"(squares)\n",[14,165672,165673],{},"集合推导式：",[245,165675,165677],{"className":30519,"code":165676,"language":30521,"meta":174,"style":174},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[251,165678,165679,165700],{"__ignoreMap":174},[254,165680,165681,165684,165686,165689,165691,165693,165695,165698],{"class":256,"line":257},[254,165682,165683],{"class":264},"chars ",[254,165685,310],{"class":260},[254,165687,165688],{"class":264}," {ch ",[254,165690,3165],{"class":260},[254,165692,159832],{"class":264},[254,165694,26184],{"class":260},[254,165696,165697],{"class":369}," \"hello\"",[254,165699,1705],{"class":264},[254,165701,165702,165704],{"class":256,"line":175},[254,165703,30556],{"class":313},[254,165705,165706],{"class":264},"(chars)\n",[14,165708,165709],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[34,165711,165713],{"id":165712},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[245,165715,165717],{"className":30519,"code":165716,"language":30521,"meta":174,"style":174},"students = [\n    {\"name\": \"小明\", \"score\": 95},\n    {\"name\": \"小红\", \"score\": 88},\n    {\"name\": \"小刚\", \"score\": 72},\n    {\"name\": \"小李\", \"score\": 59},\n]\n\ntotal = 0\nmax_student = students[0]\npassed = []\n\nfor student in students:\n    total += student[\"score\"]\n\n    if student[\"score\"] > max_student[\"score\"]:\n        max_student = student\n\n    if student[\"score\"] >= 60:\n        passed.append(student)\n\navg = total \u002F len(students)\n\nprint(f\"平均分:{avg:.2f}\")\nprint(f\"最高分学生:{max_student['name']} {max_student['score']}\")\nprint(f\"及格人数:{len(passed)}\")\n",[251,165718,165719,165727,165747,165767,165787,165807,165811,165815,165823,165837,165846,165850,165860,165872,165876,165896,165905,165909,165925,165930,165934,165948,165952,165974,166010],{"__ignoreMap":174},[254,165720,165721,165723,165725],{"class":256,"line":257},[254,165722,159856],{"class":264},[254,165724,310],{"class":260},[254,165726,55588],{"class":264},[254,165728,165729,165731,165733,165735,165737,165739,165741,165743,165745],{"class":256,"line":175},[254,165730,148525],{"class":264},[254,165732,62820],{"class":369},[254,165734,51578],{"class":264},[254,165736,150028],{"class":369},[254,165738,12576],{"class":264},[254,165740,151612],{"class":369},[254,165742,51578],{"class":264},[254,165744,1253],{"class":313},[254,165746,5070],{"class":264},[254,165748,165749,165751,165753,165755,165757,165759,165761,165763,165765],{"class":256,"line":1319},[254,165750,148525],{"class":264},[254,165752,62820],{"class":369},[254,165754,51578],{"class":264},[254,165756,151076],{"class":369},[254,165758,12576],{"class":264},[254,165760,151612],{"class":369},[254,165762,51578],{"class":264},[254,165764,1075],{"class":313},[254,165766,5070],{"class":264},[254,165768,165769,165771,165773,165775,165777,165779,165781,165783,165785],{"class":256,"line":1334},[254,165770,148525],{"class":264},[254,165772,62820],{"class":369},[254,165774,51578],{"class":264},[254,165776,159871],{"class":369},[254,165778,12576],{"class":264},[254,165780,151612],{"class":369},[254,165782,51578],{"class":264},[254,165784,670],{"class":313},[254,165786,5070],{"class":264},[254,165788,165789,165791,165793,165795,165797,165799,165801,165803,165805],{"class":256,"line":1340},[254,165790,148525],{"class":264},[254,165792,62820],{"class":369},[254,165794,51578],{"class":264},[254,165796,163450],{"class":369},[254,165798,12576],{"class":264},[254,165800,151612],{"class":369},[254,165802,51578],{"class":264},[254,165804,1146],{"class":313},[254,165806,5070],{"class":264},[254,165808,165809],{"class":256,"line":1354},[254,165810,33387],{"class":264},[254,165812,165813],{"class":256,"line":1360},[254,165814,2540],{"emptyLinePlaceholder":184},[254,165816,165817,165819,165821],{"class":256,"line":1451},[254,165818,157400],{"class":264},[254,165820,310],{"class":260},[254,165822,47474],{"class":313},[254,165824,165825,165828,165830,165833,165835],{"class":256,"line":1457},[254,165826,165827],{"class":264},"max_student ",[254,165829,310],{"class":260},[254,165831,165832],{"class":264}," students[",[254,165834,456],{"class":313},[254,165836,33387],{"class":264},[254,165838,165839,165842,165844],{"class":256,"line":1469},[254,165840,165841],{"class":264},"passed ",[254,165843,310],{"class":260},[254,165845,51979],{"class":264},[254,165847,165848],{"class":256,"line":1752},[254,165849,2540],{"emptyLinePlaceholder":184},[254,165851,165852,165854,165856,165858],{"class":256,"line":1757},[254,165853,3165],{"class":260},[254,165855,152277],{"class":264},[254,165857,26184],{"class":260},[254,165859,152282],{"class":264},[254,165861,165862,165864,165866,165868,165870],{"class":256,"line":1763},[254,165863,159447],{"class":264},[254,165865,9618],{"class":260},[254,165867,152289],{"class":264},[254,165869,151612],{"class":369},[254,165871,33387],{"class":264},[254,165873,165874],{"class":256,"line":1768},[254,165875,2540],{"emptyLinePlaceholder":184},[254,165877,165878,165880,165882,165884,165886,165888,165891,165893],{"class":256,"line":1782},[254,165879,3241],{"class":260},[254,165881,152289],{"class":264},[254,165883,151612],{"class":369},[254,165885,4583],{"class":264},[254,165887,1224],{"class":260},[254,165889,165890],{"class":264}," max_student[",[254,165892,151612],{"class":369},[254,165894,165895],{"class":264},"]:\n",[254,165897,165898,165901,165903],{"class":256,"line":1787},[254,165899,165900],{"class":264},"        max_student ",[254,165902,310],{"class":260},[254,165904,152305],{"class":264},[254,165906,165907],{"class":256,"line":1793},[254,165908,2540],{"emptyLinePlaceholder":184},[254,165910,165911,165913,165915,165917,165919,165921,165923],{"class":256,"line":1814},[254,165912,3241],{"class":260},[254,165914,152289],{"class":264},[254,165916,151612],{"class":369},[254,165918,4583],{"class":264},[254,165920,1850],{"class":260},[254,165922,157977],{"class":313},[254,165924,3879],{"class":264},[254,165926,165927],{"class":256,"line":1819},[254,165928,165929],{"class":264},"        passed.append(student)\n",[254,165931,165932],{"class":256,"line":1833},[254,165933,2540],{"emptyLinePlaceholder":184},[254,165935,165936,165938,165940,165942,165944,165946],{"class":256,"line":1838},[254,165937,163914],{"class":264},[254,165939,310],{"class":260},[254,165941,163919],{"class":264},[254,165943,848],{"class":260},[254,165945,7472],{"class":313},[254,165947,165135],{"class":264},[254,165949,165950],{"class":256,"line":1867},[254,165951,2540],{"emptyLinePlaceholder":184},[254,165953,165954,165956,165958,165960,165962,165964,165966,165968,165970,165972],{"class":256,"line":1872},[254,165955,30556],{"class":313},[254,165957,265],{"class":264},[254,165959,317],{"class":260},[254,165961,163937],{"class":369},[254,165963,1160],{"class":313},[254,165965,163942],{"class":264},[254,165967,157299],{"class":260},[254,165969,1210],{"class":313},[254,165971,515],{"class":369},[254,165973,271],{"class":264},[254,165975,165976,165978,165980,165982,165985,165987,165990,165992,165994,165996,165998,166000,166002,166004,166006,166008],{"class":256,"line":1889},[254,165977,30556],{"class":313},[254,165979,265],{"class":264},[254,165981,317],{"class":260},[254,165983,165984],{"class":369},"\"最高分学生:",[254,165986,1160],{"class":313},[254,165988,165989],{"class":264},"max_student[",[254,165991,153022],{"class":369},[254,165993,1204],{"class":264},[254,165995,1210],{"class":313},[254,165997,4588],{"class":313},[254,165999,165989],{"class":264},[254,166001,153060],{"class":369},[254,166003,1204],{"class":264},[254,166005,1210],{"class":313},[254,166007,515],{"class":369},[254,166009,271],{"class":264},[254,166011,166012,166014,166016,166018,166021,166024,166027,166029,166031],{"class":256,"line":1894},[254,166013,30556],{"class":313},[254,166015,265],{"class":264},[254,166017,317],{"class":260},[254,166019,166020],{"class":369},"\"及格人数:",[254,166022,166023],{"class":313},"{len",[254,166025,166026],{"class":264},"(passed)",[254,166028,1210],{"class":313},[254,166030,515],{"class":369},[254,166032,271],{"class":264},[34,166034,166036],{"id":166035},"_616-易错点","6.16 易错点",[21,166038,166039,166042,166045,166048,166054,166063],{},[24,166040,166041],{},"列表可变，元组和字符串不可变。",[24,166043,166044],{},"切片结束位置不包含。",[24,166046,166047],{},"字典通过 key 取值，不是通过索引。",[24,166049,166050,166051,28526],{},"空集合要用 ",[251,166052,166053],{},"set()",[24,166055,104507,166056,166059,166060,28526],{},[251,166057,166058],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[251,166061,166062],{},"get()",[24,166064,166065],{},"嵌套容器要先看清楚每一层是什么类型。",[34,166067,166069],{"id":166068},"_617-本章练习","6.17 本章练习",[21,166071,166072,166075,166078,166081,166084],{},[24,166073,166074],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[24,166076,166077],{},"输入一句话，统计每个字符出现次数。",[24,166079,166080],{},"使用集合去除列表中的重复元素。",[24,166082,166083],{},"使用字典保存一个学生的信息，并实现修改成绩。",[24,166085,166086],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[5267,166088,166089],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":174,"searchDepth":175,"depth":175,"links":166091},[166092,166093,166094,166095,166096,166097,166098,166099,166100,166101,166102,166103,166104,166105,166106,166107,166108],{"id":163072,"depth":175,"text":163073},{"id":163189,"depth":175,"text":163190},{"id":163279,"depth":175,"text":163280},{"id":163403,"depth":175,"text":163404},{"id":163766,"depth":175,"text":163767},{"id":163953,"depth":175,"text":163954},{"id":164072,"depth":175,"text":164073},{"id":164214,"depth":175,"text":164215},{"id":164401,"depth":175,"text":164402},{"id":164645,"depth":175,"text":164646},{"id":164855,"depth":175,"text":164856},{"id":164940,"depth":175,"text":164941},{"id":165238,"depth":175,"text":165239},{"id":165520,"depth":175,"text":165521},{"id":165712,"depth":175,"text":165713},{"id":166035,"depth":175,"text":166036},{"id":166068,"depth":175,"text":166069},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":163064,"description":23518},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":166115,"title":166116,"body":166117,"description":23518,"extension":181,"meta":168289,"navigation":184,"path":168290,"seo":168291,"stem":168292,"__hash__":168293},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":166118,"toc":168264},[166119,166122,166126,166129,166209,166212,166233,166236,166240,166243,166305,166308,166325,166329,166332,166377,166379,166387,166391,166394,166476,166479,166482,166507,166510,166533,166537,166540,166542,166604,166607,166609,166660,166664,166668,166674,166779,166783,166789,166860,166864,166867,166935,166938,167018,167022,167028,167064,167067,167070,167180,167186,167190,167193,167265,167268,167272,167276,167281,167343,167347,167352,167420,167424,167429,167545,167549,167552,167632,167635,167639,167642,167746,167748,167763,167766,167770,167908,167916,167920,167922,167933,167935,168193,168197,168229,168233,168261],[10,166120,166116],{"id":166121},"_7-函数进阶",[34,166123,166125],{"id":166124},"_71-多返回值","7.1 多返回值",[14,166127,166128],{},"Python 函数可以返回多个值，本质上返回的是元组。",[245,166130,166132],{"className":30519,"code":166131,"language":30521,"meta":174,"style":174},"def get_info():\n    name = \"小明\"\n    age = 18\n    score = 95\n    return name, age, score\n\n\nresult = get_info()\nprint(result)\nprint(type(result))\n",[251,166133,166134,166143,166151,166159,166168,166175,166179,166183,166192,166198],{"__ignoreMap":174},[254,166135,166136,166138,166141],{"class":256,"line":257},[254,166137,32088],{"class":260},[254,166139,166140],{"class":2103}," get_info",[254,166142,32094],{"class":264},[254,166144,166145,166147,166149],{"class":256,"line":175},[254,166146,152510],{"class":264},[254,166148,310],{"class":260},[254,166150,149493],{"class":369},[254,166152,166153,166155,166157],{"class":256,"line":1319},[254,166154,152526],{"class":264},[254,166156,310],{"class":260},[254,166158,146691],{"class":313},[254,166160,166161,166163,166165],{"class":256,"line":1334},[254,166162,152541],{"class":264},[254,166164,310],{"class":260},[254,166166,166167],{"class":313}," 95\n",[254,166169,166170,166172],{"class":256,"line":1340},[254,166171,4230],{"class":260},[254,166173,166174],{"class":264}," name, age, score\n",[254,166176,166177],{"class":256,"line":1354},[254,166178,2540],{"emptyLinePlaceholder":184},[254,166180,166181],{"class":256,"line":1360},[254,166182,2540],{"emptyLinePlaceholder":184},[254,166184,166185,166187,166189],{"class":256,"line":1451},[254,166186,161446],{"class":264},[254,166188,310],{"class":260},[254,166190,166191],{"class":264}," get_info()\n",[254,166193,166194,166196],{"class":256,"line":1457},[254,166195,30556],{"class":313},[254,166197,76726],{"class":264},[254,166199,166200,166202,166204,166206],{"class":256,"line":1469},[254,166201,30556],{"class":313},[254,166203,265],{"class":264},[254,166205,103248],{"class":313},[254,166207,166208],{"class":264},"(result))\n",[14,166210,166211],{},"可以直接解包：",[245,166213,166215],{"className":30519,"code":166214,"language":30521,"meta":174,"style":174},"name, age, score = get_info()\nprint(name, age, score)\n",[251,166216,166217,166226],{"__ignoreMap":174},[254,166218,166219,166222,166224],{"class":256,"line":257},[254,166220,166221],{"class":264},"name, age, score ",[254,166223,310],{"class":260},[254,166225,166191],{"class":264},[254,166227,166228,166230],{"class":256,"line":175},[254,166229,30556],{"class":313},[254,166231,166232],{"class":264},"(name, age, score)\n",[14,166234,166235],{},"返回多个值适合函数需要同时给出多个结果时使用。",[34,166237,166239],{"id":166238},"_72-位置参数","7.2 位置参数",[14,166241,166242],{},"位置参数按顺序传递。",[245,166244,166246],{"className":30519,"code":166245,"language":30521,"meta":174,"style":174},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[251,166247,166248,166256,166284,166288,166292],{"__ignoreMap":174},[254,166249,166250,166252,166254],{"class":256,"line":257},[254,166251,32088],{"class":260},[254,166253,149512],{"class":2103},[254,166255,149515],{"class":264},[254,166257,166258,166260,166262,166264,166266,166268,166270,166272,166274,166276,166278,166280,166282],{"class":256,"line":175},[254,166259,31440],{"class":313},[254,166261,265],{"class":264},[254,166263,317],{"class":260},[254,166265,149526],{"class":369},[254,166267,1160],{"class":313},[254,166269,79951],{"class":264},[254,166271,1210],{"class":313},[254,166273,149535],{"class":369},[254,166275,1160],{"class":313},[254,166277,70362],{"class":264},[254,166279,1210],{"class":313},[254,166281,149544],{"class":369},[254,166283,271],{"class":264},[254,166285,166286],{"class":256,"line":1319},[254,166287,2540],{"emptyLinePlaceholder":184},[254,166289,166290],{"class":256,"line":1334},[254,166291,2540],{"emptyLinePlaceholder":184},[254,166293,166294,166297,166299,166301,166303],{"class":256,"line":1340},[254,166295,166296],{"class":264},"introduce(",[254,166298,150028],{"class":369},[254,166300,12576],{"class":264},[254,166302,914],{"class":313},[254,166304,271],{"class":264},[14,166306,166307],{},"顺序错了就会得到错误含义：",[245,166309,166311],{"className":30519,"code":166310,"language":30521,"meta":174,"style":174},"introduce(18, \"小明\")\n",[251,166312,166313],{"__ignoreMap":174},[254,166314,166315,166317,166319,166321,166323],{"class":256,"line":257},[254,166316,166296],{"class":264},[254,166318,914],{"class":313},[254,166320,12576],{"class":264},[254,166322,150028],{"class":369},[254,166324,271],{"class":264},[34,166326,166328],{"id":166327},"_73-关键字参数","7.3 关键字参数",[14,166330,166331],{},"关键字参数按参数名传递。",[245,166333,166335],{"className":30519,"code":166334,"language":30521,"meta":174,"style":174},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[251,166336,166337,166357],{"__ignoreMap":174},[254,166338,166339,166341,166343,166345,166347,166349,166351,166353,166355],{"class":256,"line":257},[254,166340,166296],{"class":264},[254,166342,79951],{"class":5357},[254,166344,310],{"class":260},[254,166346,150028],{"class":369},[254,166348,12576],{"class":264},[254,166350,70362],{"class":5357},[254,166352,310],{"class":260},[254,166354,914],{"class":313},[254,166356,271],{"class":264},[254,166358,166359,166361,166363,166365,166367,166369,166371,166373,166375],{"class":256,"line":175},[254,166360,166296],{"class":264},[254,166362,70362],{"class":5357},[254,166364,310],{"class":260},[254,166366,914],{"class":313},[254,166368,12576],{"class":264},[254,166370,79951],{"class":5357},[254,166372,310],{"class":260},[254,166374,150028],{"class":369},[254,166376,271],{"class":264},[14,166378,118074],{},[21,166380,166381,166384],{},[24,166382,166383],{},"顺序不容易错。",[24,166385,166386],{},"调用时可读性更强。",[34,166388,166390],{"id":166389},"_74-默认参数","7.4 默认参数",[14,166392,166393],{},"默认参数给参数设置默认值。",[245,166395,166397],{"className":30519,"code":166396,"language":30521,"meta":174,"style":174},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[251,166398,166399,166415,166445,166449,166453,166463],{"__ignoreMap":174},[254,166400,166401,166403,166405,166408,166410,166413],{"class":256,"line":257},[254,166402,32088],{"class":260},[254,166404,122233],{"class":2103},[254,166406,166407],{"class":264},"(host, port",[254,166409,310],{"class":260},[254,166411,166412],{"class":313},"3306",[254,166414,30927],{"class":264},[254,166416,166417,166419,166421,166423,166426,166428,166430,166432,166434,166436,166439,166441,166443],{"class":256,"line":175},[254,166418,31440],{"class":313},[254,166420,265],{"class":264},[254,166422,317],{"class":260},[254,166424,166425],{"class":369},"\"连接",[254,166427,1160],{"class":313},[254,166429,27536],{"class":264},[254,166431,1210],{"class":313},[254,166433,1123],{"class":369},[254,166435,1160],{"class":313},[254,166437,166438],{"class":264},"port",[254,166440,1210],{"class":313},[254,166442,515],{"class":369},[254,166444,271],{"class":264},[254,166446,166447],{"class":256,"line":1319},[254,166448,2540],{"emptyLinePlaceholder":184},[254,166450,166451],{"class":256,"line":1334},[254,166452,2540],{"emptyLinePlaceholder":184},[254,166454,166455,166458,166461],{"class":256,"line":1340},[254,166456,166457],{"class":264},"connect(",[254,166459,166460],{"class":369},"\"localhost\"",[254,166462,271],{"class":264},[254,166464,166465,166467,166469,166471,166474],{"class":256,"line":1354},[254,166466,166457],{"class":264},[254,166468,166460],{"class":369},[254,166470,12576],{"class":264},[254,166472,166473],{"class":313},"6379",[254,166475,271],{"class":264},[14,166477,166478],{},"注意：默认参数必须放在非默认参数后面。",[14,166480,166481],{},"错误：",[245,166483,166485],{"className":30519,"code":166484,"language":30521,"meta":174,"style":174},"def connect(port=3306, host):\n    pass\n",[251,166486,166487,166503],{"__ignoreMap":174},[254,166488,166489,166491,166493,166496,166498,166500],{"class":256,"line":257},[254,166490,32088],{"class":260},[254,166492,122233],{"class":2103},[254,166494,166495],{"class":264},"(port",[254,166497,310],{"class":260},[254,166499,166412],{"class":313},[254,166501,166502],{"class":264},", host):\n",[254,166504,166505],{"class":256,"line":175},[254,166506,149677],{"class":260},[14,166508,166509],{},"正确：",[245,166511,166513],{"className":30519,"code":166512,"language":30521,"meta":174,"style":174},"def connect(host, port=3306):\n    pass\n",[251,166514,166515,166529],{"__ignoreMap":174},[254,166516,166517,166519,166521,166523,166525,166527],{"class":256,"line":257},[254,166518,32088],{"class":260},[254,166520,122233],{"class":2103},[254,166522,166407],{"class":264},[254,166524,310],{"class":260},[254,166526,166412],{"class":313},[254,166528,30927],{"class":264},[254,166530,166531],{"class":256,"line":175},[254,166532,149677],{"class":260},[34,166534,166536],{"id":166535},"_75-默认参数的坑","7.5 默认参数的坑",[14,166538,166539],{},"不要使用可变对象作为默认参数。",[14,166541,157763],{},[245,166543,166545],{"className":30519,"code":166544,"language":30521,"meta":174,"style":174},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[251,166546,166547,166562,166567,166574,166578,166582,166593],{"__ignoreMap":174},[254,166548,166549,166551,166554,166557,166559],{"class":256,"line":257},[254,166550,32088],{"class":260},[254,166552,166553],{"class":2103}," add_item",[254,166555,166556],{"class":264},"(item, items",[254,166558,310],{"class":260},[254,166560,166561],{"class":264},"[]):\n",[254,166563,166564],{"class":256,"line":175},[254,166565,166566],{"class":264},"    items.append(item)\n",[254,166568,166569,166571],{"class":256,"line":1319},[254,166570,4230],{"class":260},[254,166572,166573],{"class":264}," items\n",[254,166575,166576],{"class":256,"line":1334},[254,166577,2540],{"emptyLinePlaceholder":184},[254,166579,166580],{"class":256,"line":1340},[254,166581,2540],{"emptyLinePlaceholder":184},[254,166583,166584,166586,166589,166591],{"class":256,"line":1354},[254,166585,30556],{"class":313},[254,166587,166588],{"class":264},"(add_item(",[254,166590,165465],{"class":369},[254,166592,30638],{"class":264},[254,166594,166595,166597,166599,166602],{"class":256,"line":1360},[254,166596,30556],{"class":313},[254,166598,166588],{"class":264},[254,166600,166601],{"class":369},"\"b\"",[254,166603,30638],{"class":264},[14,166605,166606],{},"第二次调用会复用第一次的列表。",[14,166608,156028],{},[245,166610,166612],{"className":30519,"code":166611,"language":30521,"meta":174,"style":174},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[251,166613,166614,166628,166641,166650,166654],{"__ignoreMap":174},[254,166615,166616,166618,166620,166622,166624,166626],{"class":256,"line":257},[254,166617,32088],{"class":260},[254,166619,166553],{"class":2103},[254,166621,166556],{"class":264},[254,166623,310],{"class":260},[254,166625,95827],{"class":313},[254,166627,30927],{"class":264},[254,166629,166630,166632,166635,166637,166639],{"class":256,"line":175},[254,166631,3241],{"class":260},[254,166633,166634],{"class":264}," items ",[254,166636,39068],{"class":260},[254,166638,39074],{"class":313},[254,166640,3879],{"class":264},[254,166642,166643,166646,166648],{"class":256,"line":1319},[254,166644,166645],{"class":264},"        items ",[254,166647,310],{"class":260},[254,166649,51979],{"class":264},[254,166651,166652],{"class":256,"line":1334},[254,166653,166566],{"class":264},[254,166655,166656,166658],{"class":256,"line":1340},[254,166657,4230],{"class":260},[254,166659,166573],{"class":264},[34,166661,166663],{"id":166662},"_76-不定长参数","7.6 不定长参数",[225,166665,166667],{"id":166666},"_761-args","7.6.1 *args",[14,166669,166670,166673],{},[251,166671,166672],{},"*args"," 接收任意数量的位置参数，得到元组。",[245,166675,166677],{"className":30519,"code":166676,"language":30521,"meta":174,"style":174},"def add(*args):\n    total = 0\n    for num in args:\n        total += num\n    return total\n\n\nprint(add(1, 2, 3))\nprint(add(1, 2, 3, 4, 5))\n",[251,166678,166679,166692,166700,166711,166720,166726,166730,166734,166753],{"__ignoreMap":174},[254,166680,166681,166683,166685,166687,166689],{"class":256,"line":257},[254,166682,32088],{"class":260},[254,166684,5350],{"class":2103},[254,166686,265],{"class":264},[254,166688,719],{"class":260},[254,166690,166691],{"class":264},"args):\n",[254,166693,166694,166696,166698],{"class":256,"line":175},[254,166695,159447],{"class":264},[254,166697,310],{"class":260},[254,166699,47474],{"class":313},[254,166701,166702,166704,166706,166708],{"class":256,"line":1319},[254,166703,3341],{"class":260},[254,166705,156320],{"class":264},[254,166707,26184],{"class":260},[254,166709,166710],{"class":264}," args:\n",[254,166712,166713,166715,166717],{"class":256,"line":1334},[254,166714,160122],{"class":264},[254,166716,9618],{"class":260},[254,166718,166719],{"class":264}," num\n",[254,166721,166722,166724],{"class":256,"line":1340},[254,166723,4230],{"class":260},[254,166725,162427],{"class":264},[254,166727,166728],{"class":256,"line":1354},[254,166729,2540],{"emptyLinePlaceholder":184},[254,166731,166732],{"class":256,"line":1360},[254,166733,2540],{"emptyLinePlaceholder":184},[254,166735,166736,166738,166741,166743,166745,166747,166749,166751],{"class":256,"line":1451},[254,166737,30556],{"class":313},[254,166739,166740],{"class":264},"(add(",[254,166742,482],{"class":313},[254,166744,12576],{"class":264},[254,166746,342],{"class":313},[254,166748,12576],{"class":264},[254,166750,336],{"class":313},[254,166752,30638],{"class":264},[254,166754,166755,166757,166759,166761,166763,166765,166767,166769,166771,166773,166775,166777],{"class":256,"line":1457},[254,166756,30556],{"class":313},[254,166758,166740],{"class":264},[254,166760,482],{"class":313},[254,166762,12576],{"class":264},[254,166764,342],{"class":313},[254,166766,12576],{"class":264},[254,166768,336],{"class":313},[254,166770,12576],{"class":264},[254,166772,557],{"class":313},[254,166774,12576],{"class":264},[254,166776,583],{"class":313},[254,166778,30638],{"class":264},[225,166780,166782],{"id":166781},"_762-kwargs","7.6.2 **kwargs",[14,166784,166785,166788],{},[251,166786,166787],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[245,166790,166792],{"className":30519,"code":166791,"language":30521,"meta":174,"style":174},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[251,166793,166794,166807,166818,166824,166828,166832],{"__ignoreMap":174},[254,166795,166796,166798,166800,166802,166804],{"class":256,"line":257},[254,166797,32088],{"class":260},[254,166799,162085],{"class":2103},[254,166801,265],{"class":264},[254,166803,10802],{"class":260},[254,166805,166806],{"class":264},"kwargs):\n",[254,166808,166809,166811,166813,166815],{"class":256,"line":175},[254,166810,3341],{"class":260},[254,166812,164925],{"class":264},[254,166814,26184],{"class":260},[254,166816,166817],{"class":264}," kwargs.items():\n",[254,166819,166820,166822],{"class":256,"line":1319},[254,166821,32592],{"class":313},[254,166823,164937],{"class":264},[254,166825,166826],{"class":256,"line":1334},[254,166827,2540],{"emptyLinePlaceholder":184},[254,166829,166830],{"class":256,"line":1340},[254,166831,2540],{"emptyLinePlaceholder":184},[254,166833,166834,166836,166838,166840,166842,166844,166846,166848,166850,166852,166854,166856,166858],{"class":256,"line":1354},[254,166835,162150],{"class":264},[254,166837,79951],{"class":5357},[254,166839,310],{"class":260},[254,166841,150028],{"class":369},[254,166843,12576],{"class":264},[254,166845,70362],{"class":5357},[254,166847,310],{"class":260},[254,166849,914],{"class":313},[254,166851,12576],{"class":264},[254,166853,70413],{"class":5357},[254,166855,310],{"class":260},[254,166857,69410],{"class":369},[254,166859,271],{"class":264},[34,166861,166863],{"id":166862},"_77-参数解包","7.7 参数解包",[14,166865,166866],{},"列表或元组解包为位置参数：",[245,166868,166870],{"className":30519,"code":166869,"language":30521,"meta":174,"style":174},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[251,166871,166872,166881,166896,166900,166904,166924],{"__ignoreMap":174},[254,166873,166874,166876,166878],{"class":256,"line":257},[254,166875,32088],{"class":260},[254,166877,5350],{"class":2103},[254,166879,166880],{"class":264},"(a, b, c):\n",[254,166882,166883,166885,166887,166889,166891,166893],{"class":256,"line":175},[254,166884,4230],{"class":260},[254,166886,11010],{"class":264},[254,166888,745],{"class":260},[254,166890,11023],{"class":264},[254,166892,745],{"class":260},[254,166894,166895],{"class":264}," c\n",[254,166897,166898],{"class":256,"line":1319},[254,166899,2540],{"emptyLinePlaceholder":184},[254,166901,166902],{"class":256,"line":1334},[254,166903,2540],{"emptyLinePlaceholder":184},[254,166905,166906,166908,166910,166912,166914,166916,166918,166920,166922],{"class":256,"line":1340},[254,166907,164240],{"class":264},[254,166909,310],{"class":260},[254,166911,52367],{"class":264},[254,166913,482],{"class":313},[254,166915,12576],{"class":264},[254,166917,342],{"class":313},[254,166919,12576],{"class":264},[254,166921,336],{"class":313},[254,166923,33387],{"class":264},[254,166925,166926,166928,166930,166932],{"class":256,"line":1354},[254,166927,30556],{"class":313},[254,166929,166740],{"class":264},[254,166931,719],{"class":260},[254,166933,166934],{"class":264},"nums))\n",[14,166936,166937],{},"字典解包为关键字参数：",[245,166939,166941],{"className":30519,"code":166940,"language":30521,"meta":174,"style":174},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[251,166942,166943,166951,166977,166981,166985,167009],{"__ignoreMap":174},[254,166944,166945,166947,166949],{"class":256,"line":257},[254,166946,32088],{"class":260},[254,166948,149512],{"class":2103},[254,166950,149515],{"class":264},[254,166952,166953,166955,166957,166959,166961,166963,166965,166967,166969,166971,166973,166975],{"class":256,"line":175},[254,166954,31440],{"class":313},[254,166956,265],{"class":264},[254,166958,317],{"class":260},[254,166960,515],{"class":369},[254,166962,1160],{"class":313},[254,166964,79951],{"class":264},[254,166966,1210],{"class":313},[254,166968,4588],{"class":313},[254,166970,70362],{"class":264},[254,166972,1210],{"class":313},[254,166974,515],{"class":369},[254,166976,271],{"class":264},[254,166978,166979],{"class":256,"line":1319},[254,166980,2540],{"emptyLinePlaceholder":184},[254,166982,166983],{"class":256,"line":1334},[254,166984,2540],{"emptyLinePlaceholder":184},[254,166986,166987,166989,166991,166993,166995,166997,166999,167001,167003,167005,167007],{"class":256,"line":1340},[254,166988,116455],{"class":264},[254,166990,310],{"class":260},[254,166992,4588],{"class":264},[254,166994,62820],{"class":369},[254,166996,51578],{"class":264},[254,166998,150028],{"class":369},[254,167000,12576],{"class":264},[254,167002,69265],{"class":369},[254,167004,51578],{"class":264},[254,167006,914],{"class":313},[254,167008,1705],{"class":264},[254,167010,167011,167013,167015],{"class":256,"line":1354},[254,167012,166296],{"class":264},[254,167014,10802],{"class":260},[254,167016,167017],{"class":264},"info)\n",[34,167019,167021],{"id":167020},"_78-匿名函数lambda","7.8 匿名函数lambda",[14,167023,167024,167027],{},[251,167025,167026],{},"lambda"," 用于定义简单匿名函数。",[245,167029,167031],{"className":30519,"code":167030,"language":30521,"meta":174,"style":174},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[251,167032,167033,167050],{"__ignoreMap":174},[254,167034,167035,167038,167040,167043,167046,167048],{"class":256,"line":257},[254,167036,167037],{"class":264},"add ",[254,167039,310],{"class":260},[254,167041,167042],{"class":260}," lambda",[254,167044,167045],{"class":264}," a, b: a ",[254,167047,745],{"class":260},[254,167049,151244],{"class":264},[254,167051,167052,167054,167056,167058,167060,167062],{"class":256,"line":175},[254,167053,30556],{"class":313},[254,167055,166740],{"class":264},[254,167057,482],{"class":313},[254,167059,12576],{"class":264},[254,167061,342],{"class":313},[254,167063,30638],{"class":264},[14,167065,167066],{},"常和排序、过滤等函数一起使用。",[14,167068,167069],{},"按分数排序：",[245,167071,167073],{"className":30519,"code":167072,"language":30521,"meta":174,"style":174},"students = [\n    {\"name\": \"小明\", \"score\": 95},\n    {\"name\": \"小红\", \"score\": 88},\n    {\"name\": \"小刚\", \"score\": 72},\n]\n\nstudents.sort(key=lambda item: item[\"score\"], reverse=True)\nprint(students)\n",[251,167074,167075,167083,167103,167123,167143,167147,167151,167174],{"__ignoreMap":174},[254,167076,167077,167079,167081],{"class":256,"line":257},[254,167078,159856],{"class":264},[254,167080,310],{"class":260},[254,167082,55588],{"class":264},[254,167084,167085,167087,167089,167091,167093,167095,167097,167099,167101],{"class":256,"line":175},[254,167086,148525],{"class":264},[254,167088,62820],{"class":369},[254,167090,51578],{"class":264},[254,167092,150028],{"class":369},[254,167094,12576],{"class":264},[254,167096,151612],{"class":369},[254,167098,51578],{"class":264},[254,167100,1253],{"class":313},[254,167102,5070],{"class":264},[254,167104,167105,167107,167109,167111,167113,167115,167117,167119,167121],{"class":256,"line":1319},[254,167106,148525],{"class":264},[254,167108,62820],{"class":369},[254,167110,51578],{"class":264},[254,167112,151076],{"class":369},[254,167114,12576],{"class":264},[254,167116,151612],{"class":369},[254,167118,51578],{"class":264},[254,167120,1075],{"class":313},[254,167122,5070],{"class":264},[254,167124,167125,167127,167129,167131,167133,167135,167137,167139,167141],{"class":256,"line":1334},[254,167126,148525],{"class":264},[254,167128,62820],{"class":369},[254,167130,51578],{"class":264},[254,167132,159871],{"class":369},[254,167134,12576],{"class":264},[254,167136,151612],{"class":369},[254,167138,51578],{"class":264},[254,167140,670],{"class":313},[254,167142,5070],{"class":264},[254,167144,167145],{"class":256,"line":1340},[254,167146,33387],{"class":264},[254,167148,167149],{"class":256,"line":1354},[254,167150,2540],{"emptyLinePlaceholder":184},[254,167152,167153,167156,167158,167160,167162,167164,167166,167168,167170,167172],{"class":256,"line":1360},[254,167154,167155],{"class":264},"students.sort(",[254,167157,154086],{"class":5357},[254,167159,154089],{"class":260},[254,167161,154092],{"class":264},[254,167163,151612],{"class":369},[254,167165,112343],{"class":264},[254,167167,163668],{"class":5357},[254,167169,310],{"class":260},[254,167171,31617],{"class":313},[254,167173,271],{"class":264},[254,167175,167176,167178],{"class":256,"line":1451},[254,167177,30556],{"class":313},[254,167179,165135],{"class":264},[14,167181,167182,167183,167185],{},"如果逻辑复杂，不要硬写 ",[251,167184,167026],{},"，定义普通函数更清晰。",[34,167187,167189],{"id":167188},"_79-函数作为参数","7.9 函数作为参数",[14,167191,167192],{},"函数可以作为参数传给另一个函数。",[245,167194,167196],{"className":30519,"code":167195,"language":30521,"meta":174,"style":174},"def add(a, b):\n    return a + b\n\n\ndef calculate(a, b, func):\n    return func(a, b)\n\n\nprint(calculate(10, 20, add))\n",[251,167197,167198,167206,167216,167220,167224,167234,167241,167245,167249],{"__ignoreMap":174},[254,167199,167200,167202,167204],{"class":256,"line":257},[254,167201,32088],{"class":260},[254,167203,5350],{"class":2103},[254,167205,151233],{"class":264},[254,167207,167208,167210,167212,167214],{"class":256,"line":175},[254,167209,4230],{"class":260},[254,167211,11010],{"class":264},[254,167213,745],{"class":260},[254,167215,151244],{"class":264},[254,167217,167218],{"class":256,"line":1319},[254,167219,2540],{"emptyLinePlaceholder":184},[254,167221,167222],{"class":256,"line":1334},[254,167223,2540],{"emptyLinePlaceholder":184},[254,167225,167226,167228,167231],{"class":256,"line":1340},[254,167227,32088],{"class":260},[254,167229,167230],{"class":2103}," calculate",[254,167232,167233],{"class":264},"(a, b, func):\n",[254,167235,167236,167238],{"class":256,"line":1354},[254,167237,4230],{"class":260},[254,167239,167240],{"class":264}," func(a, b)\n",[254,167242,167243],{"class":256,"line":1360},[254,167244,2540],{"emptyLinePlaceholder":184},[254,167246,167247],{"class":256,"line":1451},[254,167248,2540],{"emptyLinePlaceholder":184},[254,167250,167251,167253,167256,167258,167260,167262],{"class":256,"line":1457},[254,167252,30556],{"class":313},[254,167254,167255],{"class":264},"(calculate(",[254,167257,710],{"class":313},[254,167259,12576],{"class":264},[254,167261,964],{"class":313},[254,167263,167264],{"class":264},", add))\n",[14,167266,167267],{},"这种思想在排序、回调、框架中经常出现。",[34,167269,167271],{"id":167270},"_710-mapfiltersorted","7.10 map、filter、sorted",[225,167273,167275],{"id":167274},"_7101-map","7.10.1 map",[14,167277,167278,167280],{},[251,167279,74185],{}," 对每个元素执行函数。",[245,167282,167284],{"className":30519,"code":167283,"language":30521,"meta":174,"style":174},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[251,167285,167286,167310,167333],{"__ignoreMap":174},[254,167287,167288,167290,167292,167294,167296,167298,167300,167302,167304,167306,167308],{"class":256,"line":257},[254,167289,164240],{"class":264},[254,167291,310],{"class":260},[254,167293,52367],{"class":264},[254,167295,482],{"class":313},[254,167297,12576],{"class":264},[254,167299,342],{"class":313},[254,167301,12576],{"class":264},[254,167303,336],{"class":313},[254,167305,12576],{"class":264},[254,167307,557],{"class":313},[254,167309,33387],{"class":264},[254,167311,167312,167314,167316,167319,167321,167323,167326,167328,167330],{"class":256,"line":175},[254,167313,161446],{"class":264},[254,167315,310],{"class":260},[254,167317,167318],{"class":313}," map",[254,167320,265],{"class":264},[254,167322,167026],{"class":260},[254,167324,167325],{"class":264}," x: x ",[254,167327,719],{"class":260},[254,167329,14896],{"class":313},[254,167331,167332],{"class":264},", nums)\n",[254,167334,167335,167337,167339,167341],{"class":256,"line":1319},[254,167336,30556],{"class":313},[254,167338,265],{"class":264},[254,167340,154210],{"class":313},[254,167342,166208],{"class":264},[225,167344,167346],{"id":167345},"_7102-filter","7.10.2 filter",[14,167348,167349,167351],{},[251,167350,80192],{}," 保留满足条件的元素。",[245,167353,167355],{"className":30519,"code":167354,"language":30521,"meta":174,"style":174},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[251,167356,167357,167385,167410],{"__ignoreMap":174},[254,167358,167359,167361,167363,167365,167367,167369,167371,167373,167375,167377,167379,167381,167383],{"class":256,"line":257},[254,167360,164240],{"class":264},[254,167362,310],{"class":260},[254,167364,52367],{"class":264},[254,167366,482],{"class":313},[254,167368,12576],{"class":264},[254,167370,342],{"class":313},[254,167372,12576],{"class":264},[254,167374,336],{"class":313},[254,167376,12576],{"class":264},[254,167378,557],{"class":313},[254,167380,12576],{"class":264},[254,167382,583],{"class":313},[254,167384,33387],{"class":264},[254,167386,167387,167389,167391,167394,167396,167398,167400,167402,167404,167406,167408],{"class":256,"line":175},[254,167388,161446],{"class":264},[254,167390,310],{"class":260},[254,167392,167393],{"class":313}," filter",[254,167395,265],{"class":264},[254,167397,167026],{"class":260},[254,167399,167325],{"class":264},[254,167401,592],{"class":260},[254,167403,14896],{"class":313},[254,167405,101700],{"class":260},[254,167407,4233],{"class":313},[254,167409,167332],{"class":264},[254,167411,167412,167414,167416,167418],{"class":256,"line":1319},[254,167413,30556],{"class":313},[254,167415,265],{"class":264},[254,167417,154210],{"class":313},[254,167419,166208],{"class":264},[225,167421,167423],{"id":167422},"_7103-sorted","7.10.3 sorted",[14,167425,167426,167428],{},[251,167427,165376],{}," 返回排序后的新列表。",[245,167430,167432],{"className":30519,"code":167431,"language":30521,"meta":174,"style":174},"students = [\n    {\"name\": \"小明\", \"score\": 95},\n    {\"name\": \"小红\", \"score\": 88},\n    {\"name\": \"小刚\", \"score\": 72},\n]\n\nresult = sorted(students, key=lambda item: item[\"score\"], reverse=True)\nprint(result)\n",[251,167433,167434,167442,167462,167482,167502,167506,167510,167539],{"__ignoreMap":174},[254,167435,167436,167438,167440],{"class":256,"line":257},[254,167437,159856],{"class":264},[254,167439,310],{"class":260},[254,167441,55588],{"class":264},[254,167443,167444,167446,167448,167450,167452,167454,167456,167458,167460],{"class":256,"line":175},[254,167445,148525],{"class":264},[254,167447,62820],{"class":369},[254,167449,51578],{"class":264},[254,167451,150028],{"class":369},[254,167453,12576],{"class":264},[254,167455,151612],{"class":369},[254,167457,51578],{"class":264},[254,167459,1253],{"class":313},[254,167461,5070],{"class":264},[254,167463,167464,167466,167468,167470,167472,167474,167476,167478,167480],{"class":256,"line":1319},[254,167465,148525],{"class":264},[254,167467,62820],{"class":369},[254,167469,51578],{"class":264},[254,167471,151076],{"class":369},[254,167473,12576],{"class":264},[254,167475,151612],{"class":369},[254,167477,51578],{"class":264},[254,167479,1075],{"class":313},[254,167481,5070],{"class":264},[254,167483,167484,167486,167488,167490,167492,167494,167496,167498,167500],{"class":256,"line":1334},[254,167485,148525],{"class":264},[254,167487,62820],{"class":369},[254,167489,51578],{"class":264},[254,167491,159871],{"class":369},[254,167493,12576],{"class":264},[254,167495,151612],{"class":369},[254,167497,51578],{"class":264},[254,167499,670],{"class":313},[254,167501,5070],{"class":264},[254,167503,167504],{"class":256,"line":1340},[254,167505,33387],{"class":264},[254,167507,167508],{"class":256,"line":1354},[254,167509,2540],{"emptyLinePlaceholder":184},[254,167511,167512,167514,167516,167518,167521,167523,167525,167527,167529,167531,167533,167535,167537],{"class":256,"line":1360},[254,167513,161446],{"class":264},[254,167515,310],{"class":260},[254,167517,163744],{"class":313},[254,167519,167520],{"class":264},"(students, ",[254,167522,154086],{"class":5357},[254,167524,154089],{"class":260},[254,167526,154092],{"class":264},[254,167528,151612],{"class":369},[254,167530,112343],{"class":264},[254,167532,163668],{"class":5357},[254,167534,310],{"class":260},[254,167536,31617],{"class":313},[254,167538,271],{"class":264},[254,167540,167541,167543],{"class":256,"line":1451},[254,167542,30556],{"class":313},[254,167544,76726],{"class":264},[34,167546,167548],{"id":167547},"_711-闭包入门","7.11 闭包入门",[14,167550,167551],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[245,167553,167555],{"className":30519,"code":167554,"language":30521,"meta":174,"style":174},"def outer(base):\n    def inner(num):\n        return base + num\n\n    return inner\n\n\nadd_10 = outer(10)\nprint(add_10(5))\n",[251,167556,167557,167567,167577,167588,167592,167599,167603,167607,167621],{"__ignoreMap":174},[254,167558,167559,167561,167564],{"class":256,"line":257},[254,167560,32088],{"class":260},[254,167562,167563],{"class":2103}," outer",[254,167565,167566],{"class":264},"(base):\n",[254,167568,167569,167571,167574],{"class":256,"line":175},[254,167570,30942],{"class":260},[254,167572,167573],{"class":2103}," inner",[254,167575,167576],{"class":264},"(num):\n",[254,167578,167579,167581,167584,167586],{"class":256,"line":1319},[254,167580,14893],{"class":260},[254,167582,167583],{"class":264}," base ",[254,167585,745],{"class":260},[254,167587,166719],{"class":264},[254,167589,167590],{"class":256,"line":1334},[254,167591,2540],{"emptyLinePlaceholder":184},[254,167593,167594,167596],{"class":256,"line":1340},[254,167595,4230],{"class":260},[254,167597,167598],{"class":264}," inner\n",[254,167600,167601],{"class":256,"line":1354},[254,167602,2540],{"emptyLinePlaceholder":184},[254,167604,167605],{"class":256,"line":1360},[254,167606,2540],{"emptyLinePlaceholder":184},[254,167608,167609,167612,167614,167617,167619],{"class":256,"line":1451},[254,167610,167611],{"class":264},"add_10 ",[254,167613,310],{"class":260},[254,167615,167616],{"class":264}," outer(",[254,167618,710],{"class":313},[254,167620,271],{"class":264},[254,167622,167623,167625,167628,167630],{"class":256,"line":1457},[254,167624,30556],{"class":313},[254,167626,167627],{"class":264},"(add_10(",[254,167629,583],{"class":313},[254,167631,30638],{"class":264},[14,167633,167634],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[34,167636,167638],{"id":167637},"_712-装饰器入门","7.12 装饰器入门",[14,167640,167641],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[245,167643,167645],{"className":30519,"code":167644,"language":30521,"meta":174,"style":174},"def log(func):\n    def wrapper():\n        print(\"函数开始执行\")\n        func()\n        print(\"函数执行结束\")\n\n    return wrapper\n\n\n@log\ndef say_hello():\n    print(\"hello\")\n\n\nsay_hello()\n",[251,167646,167647,167656,167665,167676,167681,167692,167696,167703,167707,167711,167716,167724,167734,167738,167742],{"__ignoreMap":174},[254,167648,167649,167651,167653],{"class":256,"line":257},[254,167650,32088],{"class":260},[254,167652,87332],{"class":2103},[254,167654,167655],{"class":264},"(func):\n",[254,167657,167658,167660,167663],{"class":256,"line":175},[254,167659,30942],{"class":260},[254,167661,167662],{"class":2103}," wrapper",[254,167664,32094],{"class":264},[254,167666,167667,167669,167671,167674],{"class":256,"line":1319},[254,167668,32592],{"class":313},[254,167670,265],{"class":264},[254,167672,167673],{"class":369},"\"函数开始执行\"",[254,167675,271],{"class":264},[254,167677,167678],{"class":256,"line":1334},[254,167679,167680],{"class":264},"        func()\n",[254,167682,167683,167685,167687,167690],{"class":256,"line":1340},[254,167684,32592],{"class":313},[254,167686,265],{"class":264},[254,167688,167689],{"class":369},"\"函数执行结束\"",[254,167691,271],{"class":264},[254,167693,167694],{"class":256,"line":1354},[254,167695,2540],{"emptyLinePlaceholder":184},[254,167697,167698,167700],{"class":256,"line":1360},[254,167699,4230],{"class":260},[254,167701,167702],{"class":264}," wrapper\n",[254,167704,167705],{"class":256,"line":1451},[254,167706,2540],{"emptyLinePlaceholder":184},[254,167708,167709],{"class":256,"line":1457},[254,167710,2540],{"emptyLinePlaceholder":184},[254,167712,167713],{"class":256,"line":1469},[254,167714,167715],{"class":2103},"@log\n",[254,167717,167718,167720,167722],{"class":256,"line":1752},[254,167719,32088],{"class":260},[254,167721,161136],{"class":2103},[254,167723,32094],{"class":264},[254,167725,167726,167728,167730,167732],{"class":256,"line":1757},[254,167727,31440],{"class":313},[254,167729,265],{"class":264},[254,167731,5985],{"class":369},[254,167733,271],{"class":264},[254,167735,167736],{"class":256,"line":1763},[254,167737,2540],{"emptyLinePlaceholder":184},[254,167739,167740],{"class":256,"line":1768},[254,167741,2540],{"emptyLinePlaceholder":184},[254,167743,167744],{"class":256,"line":1782},[254,167745,161171],{"class":264},[14,167747,158414],{},[245,167749,167751],{"className":30519,"code":167750,"language":30521,"meta":174,"style":174},"say_hello = log(say_hello)\n",[251,167752,167753],{"__ignoreMap":174},[254,167754,167755,167758,167760],{"class":256,"line":257},[254,167756,167757],{"class":264},"say_hello ",[254,167759,310],{"class":260},[254,167761,167762],{"class":264}," log(say_hello)\n",[14,167764,167765],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[34,167767,167769],{"id":167768},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[245,167771,167773],{"className":30519,"code":167772,"language":30521,"meta":174,"style":174},"def log(func):\n    def wrapper(*args, **kwargs):\n        print(\"函数开始执行\")\n        result = func(*args, **kwargs)\n        print(\"函数执行结束\")\n        return result\n\n    return wrapper\n\n\n@log\ndef add(a, b):\n    return a + b\n\n\nprint(add(10, 20))\n",[251,167774,167775,167783,167800,167810,167829,167839,167846,167850,167856,167860,167864,167868,167876,167886,167890,167894],{"__ignoreMap":174},[254,167776,167777,167779,167781],{"class":256,"line":257},[254,167778,32088],{"class":260},[254,167780,87332],{"class":2103},[254,167782,167655],{"class":264},[254,167784,167785,167787,167789,167791,167793,167796,167798],{"class":256,"line":175},[254,167786,30942],{"class":260},[254,167788,167662],{"class":2103},[254,167790,265],{"class":264},[254,167792,719],{"class":260},[254,167794,167795],{"class":264},"args, ",[254,167797,10802],{"class":260},[254,167799,166806],{"class":264},[254,167801,167802,167804,167806,167808],{"class":256,"line":1319},[254,167803,32592],{"class":313},[254,167805,265],{"class":264},[254,167807,167673],{"class":369},[254,167809,271],{"class":264},[254,167811,167812,167815,167817,167820,167822,167824,167826],{"class":256,"line":1334},[254,167813,167814],{"class":264},"        result ",[254,167816,310],{"class":260},[254,167818,167819],{"class":264}," func(",[254,167821,719],{"class":260},[254,167823,167795],{"class":264},[254,167825,10802],{"class":260},[254,167827,167828],{"class":264},"kwargs)\n",[254,167830,167831,167833,167835,167837],{"class":256,"line":1340},[254,167832,32592],{"class":313},[254,167834,265],{"class":264},[254,167836,167689],{"class":369},[254,167838,271],{"class":264},[254,167840,167841,167843],{"class":256,"line":1354},[254,167842,14893],{"class":260},[254,167844,167845],{"class":264}," result\n",[254,167847,167848],{"class":256,"line":1360},[254,167849,2540],{"emptyLinePlaceholder":184},[254,167851,167852,167854],{"class":256,"line":1451},[254,167853,4230],{"class":260},[254,167855,167702],{"class":264},[254,167857,167858],{"class":256,"line":1457},[254,167859,2540],{"emptyLinePlaceholder":184},[254,167861,167862],{"class":256,"line":1469},[254,167863,2540],{"emptyLinePlaceholder":184},[254,167865,167866],{"class":256,"line":1752},[254,167867,167715],{"class":2103},[254,167869,167870,167872,167874],{"class":256,"line":1757},[254,167871,32088],{"class":260},[254,167873,5350],{"class":2103},[254,167875,151233],{"class":264},[254,167877,167878,167880,167882,167884],{"class":256,"line":1763},[254,167879,4230],{"class":260},[254,167881,11010],{"class":264},[254,167883,745],{"class":260},[254,167885,151244],{"class":264},[254,167887,167888],{"class":256,"line":1768},[254,167889,2540],{"emptyLinePlaceholder":184},[254,167891,167892],{"class":256,"line":1782},[254,167893,2540],{"emptyLinePlaceholder":184},[254,167895,167896,167898,167900,167902,167904,167906],{"class":256,"line":1787},[254,167897,30556],{"class":313},[254,167899,166740],{"class":264},[254,167901,710],{"class":313},[254,167903,12576],{"class":264},[254,167905,964],{"class":313},[254,167907,30638],{"class":264},[14,167909,167910,167911,101159,167913,167915],{},"这个写法使用 ",[251,167912,166672],{},[251,167914,166787],{}," 接收原函数的所有参数。",[34,167917,167919],{"id":167918},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[14,167921,123432],{},[21,167923,167924,167927,167930],{},[24,167925,167926],{},"给定一组学生数据。",[24,167928,167929],{},"封装函数，根据传入规则筛选学生。",[24,167931,167932],{},"筛选及格、优秀、未成年学生。",[14,167934,10176],{},[245,167936,167938],{"className":30519,"code":167937,"language":30521,"meta":174,"style":174},"students = [\n    {\"name\": \"小明\", \"age\": 18, \"score\": 95},\n    {\"name\": \"小红\", \"age\": 17, \"score\": 88},\n    {\"name\": \"小刚\", \"age\": 19, \"score\": 59},\n]\n\n\ndef filter_students(students, condition):\n    result = []\n    for student in students:\n        if condition(student):\n            result.append(student)\n    return result\n\n\npassed = filter_students(students, lambda s: s[\"score\"] >= 60)\nexcellent = filter_students(students, lambda s: s[\"score\"] >= 90)\nunder_age = filter_students(students, lambda s: s[\"age\"] \u003C 18)\n\nprint(passed)\nprint(excellent)\nprint(under_age)\n",[251,167939,167940,167948,167976,168004,168032,168036,168040,168044,168054,168062,168072,168079,168084,168090,168094,168098,168122,168145,168168,168172,168179,168186],{"__ignoreMap":174},[254,167941,167942,167944,167946],{"class":256,"line":257},[254,167943,159856],{"class":264},[254,167945,310],{"class":260},[254,167947,55588],{"class":264},[254,167949,167950,167952,167954,167956,167958,167960,167962,167964,167966,167968,167970,167972,167974],{"class":256,"line":175},[254,167951,148525],{"class":264},[254,167953,62820],{"class":369},[254,167955,51578],{"class":264},[254,167957,150028],{"class":369},[254,167959,12576],{"class":264},[254,167961,69265],{"class":369},[254,167963,51578],{"class":264},[254,167965,914],{"class":313},[254,167967,12576],{"class":264},[254,167969,151612],{"class":369},[254,167971,51578],{"class":264},[254,167973,1253],{"class":313},[254,167975,5070],{"class":264},[254,167977,167978,167980,167982,167984,167986,167988,167990,167992,167994,167996,167998,168000,168002],{"class":256,"line":1319},[254,167979,148525],{"class":264},[254,167981,62820],{"class":369},[254,167983,51578],{"class":264},[254,167985,151076],{"class":369},[254,167987,12576],{"class":264},[254,167989,69265],{"class":369},[254,167991,51578],{"class":264},[254,167993,889],{"class":313},[254,167995,12576],{"class":264},[254,167997,151612],{"class":369},[254,167999,51578],{"class":264},[254,168001,1075],{"class":313},[254,168003,5070],{"class":264},[254,168005,168006,168008,168010,168012,168014,168016,168018,168020,168022,168024,168026,168028,168030],{"class":256,"line":1334},[254,168007,148525],{"class":264},[254,168009,62820],{"class":369},[254,168011,51578],{"class":264},[254,168013,159871],{"class":369},[254,168015,12576],{"class":264},[254,168017,69265],{"class":369},[254,168019,51578],{"class":264},[254,168021,939],{"class":313},[254,168023,12576],{"class":264},[254,168025,151612],{"class":369},[254,168027,51578],{"class":264},[254,168029,1146],{"class":313},[254,168031,5070],{"class":264},[254,168033,168034],{"class":256,"line":1340},[254,168035,33387],{"class":264},[254,168037,168038],{"class":256,"line":1354},[254,168039,2540],{"emptyLinePlaceholder":184},[254,168041,168042],{"class":256,"line":1360},[254,168043,2540],{"emptyLinePlaceholder":184},[254,168045,168046,168048,168051],{"class":256,"line":1451},[254,168047,32088],{"class":260},[254,168049,168050],{"class":2103}," filter_students",[254,168052,168053],{"class":264},"(students, condition):\n",[254,168055,168056,168058,168060],{"class":256,"line":1457},[254,168057,161363],{"class":264},[254,168059,310],{"class":260},[254,168061,51979],{"class":264},[254,168063,168064,168066,168068,168070],{"class":256,"line":1469},[254,168065,3341],{"class":260},[254,168067,152277],{"class":264},[254,168069,26184],{"class":260},[254,168071,152282],{"class":264},[254,168073,168074,168076],{"class":256,"line":1752},[254,168075,2637],{"class":260},[254,168077,168078],{"class":264}," condition(student):\n",[254,168080,168081],{"class":256,"line":1757},[254,168082,168083],{"class":264},"            result.append(student)\n",[254,168085,168086,168088],{"class":256,"line":1763},[254,168087,4230],{"class":260},[254,168089,167845],{"class":264},[254,168091,168092],{"class":256,"line":1768},[254,168093,2540],{"emptyLinePlaceholder":184},[254,168095,168096],{"class":256,"line":1782},[254,168097,2540],{"emptyLinePlaceholder":184},[254,168099,168100,168102,168104,168107,168109,168112,168114,168116,168118,168120],{"class":256,"line":1787},[254,168101,165841],{"class":264},[254,168103,310],{"class":260},[254,168105,168106],{"class":264}," filter_students(students, ",[254,168108,167026],{"class":260},[254,168110,168111],{"class":264}," s: s[",[254,168113,151612],{"class":369},[254,168115,4583],{"class":264},[254,168117,1850],{"class":260},[254,168119,157977],{"class":313},[254,168121,271],{"class":264},[254,168123,168124,168127,168129,168131,168133,168135,168137,168139,168141,168143],{"class":256,"line":1793},[254,168125,168126],{"class":264},"excellent ",[254,168128,310],{"class":260},[254,168130,168106],{"class":264},[254,168132,167026],{"class":260},[254,168134,168111],{"class":264},[254,168136,151612],{"class":369},[254,168138,4583],{"class":264},[254,168140,1850],{"class":260},[254,168142,157928],{"class":313},[254,168144,271],{"class":264},[254,168146,168147,168150,168152,168154,168156,168158,168160,168162,168164,168166],{"class":256,"line":1814},[254,168148,168149],{"class":264},"under_age ",[254,168151,310],{"class":260},[254,168153,168106],{"class":264},[254,168155,167026],{"class":260},[254,168157,168111],{"class":264},[254,168159,69265],{"class":369},[254,168161,4583],{"class":264},[254,168163,1174],{"class":260},[254,168165,156425],{"class":313},[254,168167,271],{"class":264},[254,168169,168170],{"class":256,"line":1819},[254,168171,2540],{"emptyLinePlaceholder":184},[254,168173,168174,168176],{"class":256,"line":1833},[254,168175,30556],{"class":313},[254,168177,168178],{"class":264},"(passed)\n",[254,168180,168181,168183],{"class":256,"line":1838},[254,168182,30556],{"class":313},[254,168184,168185],{"class":264},"(excellent)\n",[254,168187,168188,168190],{"class":256,"line":1867},[254,168189,30556],{"class":313},[254,168191,168192],{"class":264},"(under_age)\n",[34,168194,168196],{"id":168195},"_715-易错点","7.15 易错点",[21,168198,168199,168202,168210,168215,168226],{},[24,168200,168201],{},"默认参数不要写可变对象。",[24,168203,168204,168206,168207,168209],{},[251,168205,166672],{}," 是元组，",[251,168208,166787],{}," 是字典。",[24,168211,168212,168214],{},[251,168213,167026],{}," 只适合简单表达式。",[24,168216,168217,101159,168219,168221,168222,168225],{},[251,168218,74185],{},[251,168220,80192],{}," 的结果是迭代器，常用 ",[251,168223,168224],{},"list()"," 转换查看。",[24,168227,168228],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[34,168230,168232],{"id":168231},"_716-本章练习","7.16 本章练习",[21,168234,168235,168242,168248,168253,168258],{},[24,168236,168237,168238,168241],{},"写函数 ",[251,168239,168240],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[24,168243,168237,168244,168247],{},[251,168245,168246],{},"print_user(**kwargs)","，输出用户所有字段。",[24,168249,104507,168250,168252],{},[251,168251,167026],{}," 对学生列表按年龄排序。",[24,168254,104507,168255,168257],{},[251,168256,80192],{}," 找出成绩不及格的学生。",[24,168259,168260],{},"写一个装饰器，统计函数执行前后的提示信息。",[5267,168262,168263],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":174,"searchDepth":175,"depth":175,"links":168265},[168266,168267,168268,168269,168270,168271,168275,168276,168277,168278,168283,168284,168285,168286,168287,168288],{"id":166124,"depth":175,"text":166125},{"id":166238,"depth":175,"text":166239},{"id":166327,"depth":175,"text":166328},{"id":166389,"depth":175,"text":166390},{"id":166535,"depth":175,"text":166536},{"id":166662,"depth":175,"text":166663,"children":168272},[168273,168274],{"id":166666,"depth":1319,"text":166667},{"id":166781,"depth":1319,"text":166782},{"id":166862,"depth":175,"text":166863},{"id":167020,"depth":175,"text":167021},{"id":167188,"depth":175,"text":167189},{"id":167270,"depth":175,"text":167271,"children":168279},[168280,168281,168282],{"id":167274,"depth":1319,"text":167275},{"id":167345,"depth":1319,"text":167346},{"id":167422,"depth":1319,"text":167423},{"id":167547,"depth":175,"text":167548},{"id":167637,"depth":175,"text":167638},{"id":167768,"depth":175,"text":167769},{"id":167918,"depth":175,"text":167919},{"id":168195,"depth":175,"text":168196},{"id":168231,"depth":175,"text":168232},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":166116,"description":23518},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168295,"title":168296,"body":168297,"description":23518,"extension":181,"meta":170816,"navigation":184,"path":170817,"seo":170818,"stem":170819,"__hash__":170820},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168298,"toc":170791},[168299,168302,168306,168309,168312,168343,168347,168351,168354,168381,168385,168388,168439,168442,168457,168460,168495,168499,168501,168525,168528,168588,168592,168596,168599,168656,168659,168679,168683,168686,168749,168753,168756,168812,168819,168843,168847,168850,168913,168917,168922,168973,168976,168980,168985,169052,169055,169137,169141,169146,169197,169200,169204,169207,169210,169218,169221,169267,169270,169316,169320,169326,169370,169373,169419,169422,169462,169465,169526,169530,169533,169623,169626,169768,169771,169838,169842,169845,169848,169989,169992,170070,170073,170249,170253,170255,170266,170268,170467,170471,170715,170719,170753,170757,170788],[10,168300,168296],{"id":168301},"_8-文件操作",[34,168303,168305],{"id":168304},"_81-文件操作的意义","8.1 文件操作的意义",[14,168307,168308],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[14,168310,168311],{},"常见文件类型：",[21,168313,168314,168320,168326,168332,168338],{},[24,168315,168316,168319],{},[251,168317,168318],{},".txt","：普通文本。",[24,168321,168322,168325],{},[251,168323,168324],{},".csv","：表格文本。",[24,168327,168328,168331],{},[251,168329,168330],{},".json","：结构化数据。",[24,168333,168334,168337],{},[251,168335,168336],{},".log","：日志文件。",[24,168339,168340,168342],{},[251,168341,146492],{},"：Python 源代码。",[34,168344,168346],{"id":168345},"_82-路径","8.2 路径",[225,168348,168350],{"id":168349},"_821-相对路径","8.2.1 相对路径",[14,168352,168353],{},"相对当前运行目录：",[245,168355,168357],{"className":30519,"code":168356,"language":30521,"meta":174,"style":174},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[251,168358,168359],{"__ignoreMap":174},[254,168360,168361,168363,168365,168367,168369,168371,168373,168375,168377,168379],{"class":256,"line":257},[254,168362,87056],{"class":313},[254,168364,265],{"class":264},[254,168366,146936],{"class":369},[254,168368,12576],{"class":264},[254,168370,146941],{"class":369},[254,168372,12576],{"class":264},[254,168374,146946],{"class":5357},[254,168376,310],{"class":260},[254,168378,146951],{"class":369},[254,168380,271],{"class":264},[225,168382,168384],{"id":168383},"_822-绝对路径","8.2.2 绝对路径",[14,168386,168387],{},"从根目录或盘符开始：",[245,168389,168391],{"className":30519,"code":168390,"language":30521,"meta":174,"style":174},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[251,168392,168393,168416],{"__ignoreMap":174},[254,168394,168395,168397,168399,168402,168404,168406,168408,168410,168412,168414],{"class":256,"line":257},[254,168396,87056],{"class":313},[254,168398,265],{"class":264},[254,168400,168401],{"class":369},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[254,168403,12576],{"class":264},[254,168405,146941],{"class":369},[254,168407,12576],{"class":264},[254,168409,146946],{"class":5357},[254,168411,310],{"class":260},[254,168413,146951],{"class":369},[254,168415,271],{"class":264},[254,168417,168418,168420,168422,168425,168427,168429,168431,168433,168435,168437],{"class":256,"line":175},[254,168419,87056],{"class":313},[254,168421,265],{"class":264},[254,168423,168424],{"class":369},"\"D:\u002Fdata\u002Fdata.txt\"",[254,168426,12576],{"class":264},[254,168428,146941],{"class":369},[254,168430,12576],{"class":264},[254,168432,146946],{"class":5357},[254,168434,310],{"class":260},[254,168436,146951],{"class":369},[254,168438,271],{"class":264},[14,168440,168441],{},"Windows 路径建议写成：",[245,168443,168445],{"className":30519,"code":168444,"language":30521,"meta":174,"style":174},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[251,168446,168447],{"__ignoreMap":174},[254,168448,168449,168452,168454],{"class":256,"line":257},[254,168450,168451],{"class":264},"path ",[254,168453,310],{"class":260},[254,168455,168456],{"class":369}," \"D:\u002Fdata\u002Fdata.txt\"\n",[14,168458,168459],{},"或原始字符串：",[245,168461,168463],{"className":30519,"code":168462,"language":30521,"meta":174,"style":174},"path = r\"D:\\data\\data.txt\"\n",[251,168464,168465],{"__ignoreMap":174},[254,168466,168467,168469,168471,168473,168475,168478,168481,168484,168486,168488,168490,168493],{"class":256,"line":257},[254,168468,168451],{"class":264},[254,168470,310],{"class":260},[254,168472,17262],{"class":260},[254,168474,515],{"class":369},[254,168476,168477],{"class":48118},"D:",[254,168479,168480],{"class":313},"\\d",[254,168482,168483],{"class":48118},"ata",[254,168485,168480],{"class":313},[254,168487,168483],{"class":48118},[254,168489,822],{"class":313},[254,168491,168492],{"class":48118},"txt",[254,168494,25274],{"class":369},[34,168496,168498],{"id":168497},"_83-open函数","8.3 open函数",[14,168500,5322],{},[245,168502,168504],{"className":30519,"code":168503,"language":30521,"meta":174,"style":174},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[251,168505,168506],{"__ignoreMap":174},[254,168507,168508,168510,168512,168514,168517,168519,168521,168523],{"class":256,"line":257},[254,168509,45495],{"class":5357},[254,168511,13705],{"class":260},[254,168513,146931],{"class":313},[254,168515,168516],{"class":264},"(文件路径, 打开模式, ",[254,168518,146946],{"class":5357},[254,168520,310],{"class":260},[254,168522,146951],{"class":369},[254,168524,271],{"class":264},[14,168526,168527],{},"常见模式：",[402,168529,168530,168539],{},[405,168531,168532],{},[408,168533,168534,168537],{},[411,168535,168536],{},"模式",[411,168538,26010],{},[449,168540,168541,168550,168559,168568,168578],{},[408,168542,168543,168547],{},[454,168544,168545],{},[251,168546,934],{},[454,168548,168549],{},"只读，文件不存在会报错",[408,168551,168552,168556],{},[454,168553,168554],{},[251,168555,1059],{},[454,168557,168558],{},"只写，文件不存在会创建，存在会清空",[408,168560,168561,168565],{},[454,168562,168563],{},[251,168564,42],{},[454,168566,168567],{},"追加，文件不存在会创建",[408,168569,168570,168575],{},[454,168571,168572],{},[251,168573,168574],{},"rb",[454,168576,168577],{},"二进制只读",[408,168579,168580,168585],{},[454,168581,168582],{},[251,168583,168584],{},"wb",[454,168586,168587],{},"二进制只写",[34,168589,168591],{"id":168590},"_84-读取文件","8.4 读取文件",[225,168593,168595],{"id":168594},"_841-read","8.4.1 read",[14,168597,168598],{},"一次读取全部内容：",[245,168600,168602],{"className":30519,"code":168601,"language":30521,"meta":174,"style":174},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[251,168603,168604,168630,168642,168649],{"__ignoreMap":174},[254,168605,168606,168608,168610,168612,168614,168616,168618,168620,168622,168624,168626,168628],{"class":256,"line":257},[254,168607,45495],{"class":5357},[254,168609,13705],{"class":260},[254,168611,146931],{"class":313},[254,168613,265],{"class":264},[254,168615,146936],{"class":369},[254,168617,12576],{"class":264},[254,168619,146941],{"class":369},[254,168621,12576],{"class":264},[254,168623,146946],{"class":5357},[254,168625,310],{"class":260},[254,168627,146951],{"class":369},[254,168629,271],{"class":264},[254,168631,168632,168635,168637,168639],{"class":256,"line":175},[254,168633,168634],{"class":264},"content ",[254,168636,310],{"class":260},[254,168638,148293],{"class":5357},[254,168640,168641],{"class":264},".read()\n",[254,168643,168644,168646],{"class":256,"line":1319},[254,168645,30556],{"class":313},[254,168647,168648],{"class":264},"(content)\n",[254,168650,168651,168653],{"class":256,"line":1334},[254,168652,45495],{"class":5357},[254,168654,168655],{"class":264},".close()\n",[14,168657,168658],{},"可以指定读取字符数：",[245,168660,168662],{"className":30519,"code":168661,"language":30521,"meta":174,"style":174},"content = file.read(10)\n",[251,168663,168664],{"__ignoreMap":174},[254,168665,168666,168668,168670,168672,168675,168677],{"class":256,"line":257},[254,168667,168634],{"class":264},[254,168669,310],{"class":260},[254,168671,148293],{"class":5357},[254,168673,168674],{"class":264},".read(",[254,168676,710],{"class":313},[254,168678,271],{"class":264},[225,168680,168682],{"id":168681},"_842-readline","8.4.2 readline",[14,168684,168685],{},"一次读取一行：",[245,168687,168689],{"className":30519,"code":168688,"language":30521,"meta":174,"style":174},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[251,168690,168691,168717,168721,168732,168739,168743],{"__ignoreMap":174},[254,168692,168693,168695,168697,168699,168701,168703,168705,168707,168709,168711,168713,168715],{"class":256,"line":257},[254,168694,45495],{"class":5357},[254,168696,13705],{"class":260},[254,168698,146931],{"class":313},[254,168700,265],{"class":264},[254,168702,146936],{"class":369},[254,168704,12576],{"class":264},[254,168706,146941],{"class":369},[254,168708,12576],{"class":264},[254,168710,146946],{"class":5357},[254,168712,310],{"class":260},[254,168714,146951],{"class":369},[254,168716,271],{"class":264},[254,168718,168719],{"class":256,"line":175},[254,168720,2540],{"emptyLinePlaceholder":184},[254,168722,168723,168725,168727,168729],{"class":256,"line":1319},[254,168724,147392],{"class":264},[254,168726,310],{"class":260},[254,168728,148293],{"class":5357},[254,168730,168731],{"class":264},".readline()\n",[254,168733,168734,168736],{"class":256,"line":1334},[254,168735,30556],{"class":313},[254,168737,168738],{"class":264},"(line)\n",[254,168740,168741],{"class":256,"line":1340},[254,168742,2540],{"emptyLinePlaceholder":184},[254,168744,168745,168747],{"class":256,"line":1354},[254,168746,45495],{"class":5357},[254,168748,168655],{"class":264},[225,168750,168752],{"id":168751},"_843-readlines","8.4.3 readlines",[14,168754,168755],{},"读取所有行，返回列表：",[245,168757,168759],{"className":30519,"code":168758,"language":30521,"meta":174,"style":174},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[251,168760,168761,168787,168799,168806],{"__ignoreMap":174},[254,168762,168763,168765,168767,168769,168771,168773,168775,168777,168779,168781,168783,168785],{"class":256,"line":257},[254,168764,45495],{"class":5357},[254,168766,13705],{"class":260},[254,168768,146931],{"class":313},[254,168770,265],{"class":264},[254,168772,146936],{"class":369},[254,168774,12576],{"class":264},[254,168776,146941],{"class":369},[254,168778,12576],{"class":264},[254,168780,146946],{"class":5357},[254,168782,310],{"class":260},[254,168784,146951],{"class":369},[254,168786,271],{"class":264},[254,168788,168789,168792,168794,168796],{"class":256,"line":175},[254,168790,168791],{"class":264},"lines ",[254,168793,310],{"class":260},[254,168795,148293],{"class":5357},[254,168797,168798],{"class":264},".readlines()\n",[254,168800,168801,168803],{"class":256,"line":1319},[254,168802,30556],{"class":313},[254,168804,168805],{"class":264},"(lines)\n",[254,168807,168808,168810],{"class":256,"line":1334},[254,168809,45495],{"class":5357},[254,168811,168655],{"class":264},[14,168813,168814,168815,168818],{},"每一行通常带有换行符，可以用 ",[251,168816,168817],{},"strip()"," 去掉：",[245,168820,168822],{"className":30519,"code":168821,"language":30521,"meta":174,"style":174},"for line in lines:\n    print(line.strip())\n",[251,168823,168824,168836],{"__ignoreMap":174},[254,168825,168826,168828,168831,168833],{"class":256,"line":257},[254,168827,3165],{"class":260},[254,168829,168830],{"class":264}," line ",[254,168832,26184],{"class":260},[254,168834,168835],{"class":264}," lines:\n",[254,168837,168838,168840],{"class":256,"line":175},[254,168839,31440],{"class":313},[254,168841,168842],{"class":264},"(line.strip())\n",[225,168844,168846],{"id":168845},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[14,168848,168849],{},"推荐读取大文件时使用：",[245,168851,168853],{"className":30519,"code":168852,"language":30521,"meta":174,"style":174},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[251,168854,168855,168881,168885,168897,168903,168907],{"__ignoreMap":174},[254,168856,168857,168859,168861,168863,168865,168867,168869,168871,168873,168875,168877,168879],{"class":256,"line":257},[254,168858,45495],{"class":5357},[254,168860,13705],{"class":260},[254,168862,146931],{"class":313},[254,168864,265],{"class":264},[254,168866,146936],{"class":369},[254,168868,12576],{"class":264},[254,168870,146941],{"class":369},[254,168872,12576],{"class":264},[254,168874,146946],{"class":5357},[254,168876,310],{"class":260},[254,168878,146951],{"class":369},[254,168880,271],{"class":264},[254,168882,168883],{"class":256,"line":175},[254,168884,2540],{"emptyLinePlaceholder":184},[254,168886,168887,168889,168891,168893,168895],{"class":256,"line":1319},[254,168888,3165],{"class":260},[254,168890,168830],{"class":264},[254,168892,26184],{"class":260},[254,168894,148293],{"class":5357},[254,168896,3879],{"class":264},[254,168898,168899,168901],{"class":256,"line":1334},[254,168900,31440],{"class":313},[254,168902,168842],{"class":264},[254,168904,168905],{"class":256,"line":1340},[254,168906,2540],{"emptyLinePlaceholder":184},[254,168908,168909,168911],{"class":256,"line":1354},[254,168910,45495],{"class":5357},[254,168912,168655],{"class":264},[34,168914,168916],{"id":168915},"_85-with语句","8.5 with语句",[14,168918,168919,168921],{},[251,168920,107974],{}," 会自动关闭文件，推荐使用。",[245,168923,168925],{"className":30519,"code":168924,"language":30521,"meta":174,"style":174},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[251,168926,168927,168957,168967],{"__ignoreMap":174},[254,168928,168929,168931,168933,168935,168937,168939,168941,168943,168945,168947,168949,168951,168953,168955],{"class":256,"line":257},[254,168930,107974],{"class":260},[254,168932,146931],{"class":313},[254,168934,265],{"class":264},[254,168936,146936],{"class":369},[254,168938,12576],{"class":264},[254,168940,146941],{"class":369},[254,168942,12576],{"class":264},[254,168944,146946],{"class":5357},[254,168946,310],{"class":260},[254,168948,146951],{"class":369},[254,168950,13855],{"class":264},[254,168952,31524],{"class":260},[254,168954,148293],{"class":5357},[254,168956,3879],{"class":264},[254,168958,168959,168961,168963,168965],{"class":256,"line":175},[254,168960,146963],{"class":264},[254,168962,310],{"class":260},[254,168964,148293],{"class":5357},[254,168966,168641],{"class":264},[254,168968,168969,168971],{"class":256,"line":1319},[254,168970,31440],{"class":313},[254,168972,168648],{"class":264},[14,168974,168975],{},"等价于打开文件、读取、最后关闭，但更安全。",[34,168977,168979],{"id":168978},"_86-写入文件","8.6 写入文件",[14,168981,168982,168984],{},[251,168983,1059],{}," 模式会清空原文件。",[245,168986,168988],{"className":30519,"code":168987,"language":30521,"meta":174,"style":174},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[251,168989,168990,169020,169037],{"__ignoreMap":174},[254,168991,168992,168994,168996,168998,169000,169002,169004,169006,169008,169010,169012,169014,169016,169018],{"class":256,"line":257},[254,168993,107974],{"class":260},[254,168995,146931],{"class":313},[254,168997,265],{"class":264},[254,168999,146936],{"class":369},[254,169001,12576],{"class":264},[254,169003,152116],{"class":369},[254,169005,12576],{"class":264},[254,169007,146946],{"class":5357},[254,169009,310],{"class":260},[254,169011,146951],{"class":369},[254,169013,13855],{"class":264},[254,169015,31524],{"class":260},[254,169017,148293],{"class":5357},[254,169019,3879],{"class":264},[254,169021,169022,169025,169028,169031,169033,169035],{"class":256,"line":175},[254,169023,169024],{"class":5357},"    file",[254,169026,169027],{"class":264},".write(",[254,169029,169030],{"class":369},"\"hello",[254,169032,156665],{"class":313},[254,169034,515],{"class":369},[254,169036,271],{"class":264},[254,169038,169039,169041,169043,169046,169048,169050],{"class":256,"line":1319},[254,169040,169024],{"class":5357},[254,169042,169027],{"class":264},[254,169044,169045],{"class":369},"\"python",[254,169047,156665],{"class":313},[254,169049,515],{"class":369},[254,169051,271],{"class":264},[14,169053,169054],{},"写入多行：",[245,169056,169058],{"className":30519,"code":169057,"language":30521,"meta":174,"style":174},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[251,169059,169060,169095,169099,169130],{"__ignoreMap":174},[254,169061,169062,169064,169066,169068,169071,169073,169075,169077,169080,169082,169084,169086,169089,169091,169093],{"class":256,"line":257},[254,169063,168791],{"class":264},[254,169065,310],{"class":260},[254,169067,52367],{"class":264},[254,169069,169070],{"class":369},"\"小明,18",[254,169072,156665],{"class":313},[254,169074,515],{"class":369},[254,169076,12576],{"class":264},[254,169078,169079],{"class":369},"\"小红,17",[254,169081,156665],{"class":313},[254,169083,515],{"class":369},[254,169085,12576],{"class":264},[254,169087,169088],{"class":369},"\"小刚,19",[254,169090,156665],{"class":313},[254,169092,515],{"class":369},[254,169094,33387],{"class":264},[254,169096,169097],{"class":256,"line":175},[254,169098,2540],{"emptyLinePlaceholder":184},[254,169100,169101,169103,169105,169107,169110,169112,169114,169116,169118,169120,169122,169124,169126,169128],{"class":256,"line":1319},[254,169102,107974],{"class":260},[254,169104,146931],{"class":313},[254,169106,265],{"class":264},[254,169108,169109],{"class":369},"\"students.txt\"",[254,169111,12576],{"class":264},[254,169113,152116],{"class":369},[254,169115,12576],{"class":264},[254,169117,146946],{"class":5357},[254,169119,310],{"class":260},[254,169121,146951],{"class":369},[254,169123,13855],{"class":264},[254,169125,31524],{"class":260},[254,169127,148293],{"class":5357},[254,169129,3879],{"class":264},[254,169131,169132,169134],{"class":256,"line":1334},[254,169133,169024],{"class":5357},[254,169135,169136],{"class":264},".writelines(lines)\n",[34,169138,169140],{"id":169139},"_87-追加文件","8.7 追加文件",[14,169142,169143,169145],{},[251,169144,42],{}," 模式不会清空原内容，而是在末尾追加。",[245,169147,169149],{"className":30519,"code":169148,"language":30521,"meta":174,"style":174},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[251,169150,169151,169182],{"__ignoreMap":174},[254,169152,169153,169155,169157,169159,169162,169164,169166,169168,169170,169172,169174,169176,169178,169180],{"class":256,"line":257},[254,169154,107974],{"class":260},[254,169156,146931],{"class":313},[254,169158,265],{"class":264},[254,169160,169161],{"class":369},"\"log.txt\"",[254,169163,12576],{"class":264},[254,169165,165465],{"class":369},[254,169167,12576],{"class":264},[254,169169,146946],{"class":5357},[254,169171,310],{"class":260},[254,169173,146951],{"class":369},[254,169175,13855],{"class":264},[254,169177,31524],{"class":260},[254,169179,148293],{"class":5357},[254,169181,3879],{"class":264},[254,169183,169184,169186,169188,169191,169193,169195],{"class":256,"line":175},[254,169185,169024],{"class":5357},[254,169187,169027],{"class":264},[254,169189,169190],{"class":369},"\"程序启动",[254,169192,156665],{"class":313},[254,169194,515],{"class":369},[254,169196,271],{"class":264},[14,169198,169199],{},"日志类文件常用追加模式。",[34,169201,169203],{"id":169202},"_88-文件编码","8.8 文件编码",[14,169205,169206],{},"编码决定文字如何保存为字节。",[14,169208,169209],{},"常见编码：",[21,169211,169212,169215],{},[24,169213,169214],{},"UTF-8：推荐。",[24,169216,169217],{},"GBK：部分 Windows 中文文件常见。",[14,169219,169220],{},"读取文件乱码时，可以尝试：",[245,169222,169224],{"className":30519,"code":169223,"language":30521,"meta":174,"style":174},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[251,169225,169226,169257],{"__ignoreMap":174},[254,169227,169228,169230,169232,169234,169236,169238,169240,169242,169244,169246,169249,169251,169253,169255],{"class":256,"line":257},[254,169229,107974],{"class":260},[254,169231,146931],{"class":313},[254,169233,265],{"class":264},[254,169235,146936],{"class":369},[254,169237,12576],{"class":264},[254,169239,146941],{"class":369},[254,169241,12576],{"class":264},[254,169243,146946],{"class":5357},[254,169245,310],{"class":260},[254,169247,169248],{"class":369},"\"gbk\"",[254,169250,13855],{"class":264},[254,169252,31524],{"class":260},[254,169254,148293],{"class":5357},[254,169256,3879],{"class":264},[254,169258,169259,169261,169263,169265],{"class":256,"line":175},[254,169260,146963],{"class":264},[254,169262,310],{"class":260},[254,169264,148293],{"class":5357},[254,169266,168641],{"class":264},[14,169268,169269],{},"写文件时建议统一 UTF-8：",[245,169271,169273],{"className":30519,"code":169272,"language":30521,"meta":174,"style":174},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[251,169274,169275,169305],{"__ignoreMap":174},[254,169276,169277,169279,169281,169283,169285,169287,169289,169291,169293,169295,169297,169299,169301,169303],{"class":256,"line":257},[254,169278,107974],{"class":260},[254,169280,146931],{"class":313},[254,169282,265],{"class":264},[254,169284,146936],{"class":369},[254,169286,12576],{"class":264},[254,169288,152116],{"class":369},[254,169290,12576],{"class":264},[254,169292,146946],{"class":5357},[254,169294,310],{"class":260},[254,169296,146951],{"class":369},[254,169298,13855],{"class":264},[254,169300,31524],{"class":260},[254,169302,148293],{"class":5357},[254,169304,3879],{"class":264},[254,169306,169307,169309,169311,169314],{"class":256,"line":175},[254,169308,169024],{"class":5357},[254,169310,169027],{"class":264},[254,169312,169313],{"class":369},"\"中文内容\"",[254,169315,271],{"class":264},[34,169317,169319],{"id":169318},"_89-pathlib","8.9 pathlib",[14,169321,169322,169325],{},[251,169323,169324],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[245,169327,169329],{"className":30519,"code":169328,"language":30521,"meta":174,"style":174},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[251,169330,169331,169341,169345,169363],{"__ignoreMap":174},[254,169332,169333,169335,169337,169339],{"class":256,"line":257},[254,169334,30878],{"class":260},[254,169336,108452],{"class":264},[254,169338,30533],{"class":260},[254,169340,108457],{"class":264},[254,169342,169343],{"class":256,"line":175},[254,169344,2540],{"emptyLinePlaceholder":184},[254,169346,169347,169349,169351,169353,169356,169358,169360],{"class":256,"line":1319},[254,169348,168451],{"class":264},[254,169350,310],{"class":260},[254,169352,108686],{"class":264},[254,169354,169355],{"class":369},"\"data\"",[254,169357,13855],{"class":264},[254,169359,848],{"class":260},[254,169361,169362],{"class":369}," \"students.txt\"\n",[254,169364,169365,169367],{"class":256,"line":1334},[254,169366,30556],{"class":313},[254,169368,169369],{"class":264},"(path)\n",[14,169371,169372],{},"创建目录：",[245,169374,169376],{"className":30519,"code":169375,"language":30521,"meta":174,"style":174},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[251,169377,169378,169388,169392,169405],{"__ignoreMap":174},[254,169379,169380,169382,169384,169386],{"class":256,"line":257},[254,169381,30878],{"class":260},[254,169383,108452],{"class":264},[254,169385,30533],{"class":260},[254,169387,108457],{"class":264},[254,169389,169390],{"class":256,"line":175},[254,169391,2540],{"emptyLinePlaceholder":184},[254,169393,169394,169397,169399,169401,169403],{"class":256,"line":1319},[254,169395,169396],{"class":264},"data_dir ",[254,169398,310],{"class":260},[254,169400,108686],{"class":264},[254,169402,169355],{"class":369},[254,169404,271],{"class":264},[254,169406,169407,169410,169413,169415,169417],{"class":256,"line":1334},[254,169408,169409],{"class":264},"data_dir.mkdir(",[254,169411,169412],{"class":5357},"exist_ok",[254,169414,310],{"class":260},[254,169416,31617],{"class":313},[254,169418,271],{"class":264},[14,169420,169421],{},"判断文件是否存在：",[245,169423,169425],{"className":30519,"code":169424,"language":30521,"meta":174,"style":174},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[251,169426,169427,169440,169444,169451],{"__ignoreMap":174},[254,169428,169429,169431,169433,169435,169438],{"class":256,"line":257},[254,169430,168451],{"class":264},[254,169432,310],{"class":260},[254,169434,108686],{"class":264},[254,169436,169437],{"class":369},"\"data\u002Fstudents.txt\"",[254,169439,271],{"class":264},[254,169441,169442],{"class":256,"line":175},[254,169443,2540],{"emptyLinePlaceholder":184},[254,169445,169446,169448],{"class":256,"line":1319},[254,169447,1671],{"class":260},[254,169449,169450],{"class":264}," path.exists():\n",[254,169452,169453,169455,169457,169460],{"class":256,"line":1334},[254,169454,31440],{"class":313},[254,169456,265],{"class":264},[254,169458,169459],{"class":369},"\"文件存在\"",[254,169461,271],{"class":264},[14,169463,169464],{},"读写文本：",[245,169466,169468],{"className":30519,"code":169467,"language":30521,"meta":174,"style":174},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[251,169469,169470,169482,169486,169503,169520],{"__ignoreMap":174},[254,169471,169472,169474,169476,169478,169480],{"class":256,"line":257},[254,169473,168451],{"class":264},[254,169475,310],{"class":260},[254,169477,108686],{"class":264},[254,169479,146936],{"class":369},[254,169481,271],{"class":264},[254,169483,169484],{"class":256,"line":175},[254,169485,2540],{"emptyLinePlaceholder":184},[254,169487,169488,169491,169493,169495,169497,169499,169501],{"class":256,"line":1319},[254,169489,169490],{"class":264},"path.write_text(",[254,169492,146016],{"class":369},[254,169494,12576],{"class":264},[254,169496,146946],{"class":5357},[254,169498,310],{"class":260},[254,169500,146951],{"class":369},[254,169502,271],{"class":264},[254,169504,169505,169507,169509,169512,169514,169516,169518],{"class":256,"line":1334},[254,169506,168634],{"class":264},[254,169508,310],{"class":260},[254,169510,169511],{"class":264}," path.read_text(",[254,169513,146946],{"class":5357},[254,169515,310],{"class":260},[254,169517,146951],{"class":369},[254,169519,271],{"class":264},[254,169521,169522,169524],{"class":256,"line":1340},[254,169523,30556],{"class":313},[254,169525,168648],{"class":264},[34,169527,169529],{"id":169528},"_810-json文件","8.10 JSON文件",[14,169531,169532],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[245,169534,169536],{"className":30519,"code":169535,"language":30521,"meta":174,"style":174},"import json\n\nstudent = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n\ntext = json.dumps(student, ensure_ascii=False, indent=2)\nprint(text)\n",[251,169537,169538,169544,169548,169556,169566,169576,169584,169588,169592,169617],{"__ignoreMap":174},[254,169539,169540,169542],{"class":256,"line":257},[254,169541,30533],{"class":260},[254,169543,147231],{"class":264},[254,169545,169546],{"class":256,"line":175},[254,169547,2540],{"emptyLinePlaceholder":184},[254,169549,169550,169552,169554],{"class":256,"line":1319},[254,169551,149621],{"class":264},[254,169553,310],{"class":260},[254,169555,15713],{"class":264},[254,169557,169558,169560,169562,169564],{"class":256,"line":1334},[254,169559,147160],{"class":369},[254,169561,51578],{"class":264},[254,169563,150028],{"class":369},[254,169565,31607],{"class":264},[254,169567,169568,169570,169572,169574],{"class":256,"line":1340},[254,169569,164677],{"class":369},[254,169571,51578],{"class":264},[254,169573,914],{"class":313},[254,169575,31607],{"class":264},[254,169577,169578,169580,169582],{"class":256,"line":1354},[254,169579,164688],{"class":369},[254,169581,51578],{"class":264},[254,169583,164693],{"class":313},[254,169585,169586],{"class":256,"line":1360},[254,169587,1705],{"class":264},[254,169589,169590],{"class":256,"line":1451},[254,169591,2540],{"emptyLinePlaceholder":184},[254,169593,169594,169596,169598,169601,169603,169605,169607,169609,169611,169613,169615],{"class":256,"line":1457},[254,169595,156584],{"class":264},[254,169597,310],{"class":260},[254,169599,169600],{"class":264}," json.dumps(student, ",[254,169602,147277],{"class":5357},[254,169604,310],{"class":260},[254,169606,34128],{"class":313},[254,169608,12576],{"class":264},[254,169610,152152],{"class":5357},[254,169612,310],{"class":260},[254,169614,342],{"class":313},[254,169616,271],{"class":264},[254,169618,169619,169621],{"class":256,"line":1469},[254,169620,30556],{"class":313},[254,169622,164211],{"class":264},[14,169624,169625],{},"写入 JSON 文件：",[245,169627,169629],{"className":30519,"code":169628,"language":30521,"meta":174,"style":174},"import json\n\nstudents = [\n    {\"name\": \"小明\", \"age\": 18, \"score\": 95},\n    {\"name\": \"小红\", \"age\": 17, \"score\": 88},\n]\n\nwith open(\"students.json\", \"w\", encoding=\"utf-8\") as file:\n    json.dump(students, file, ensure_ascii=False, indent=2)\n",[251,169630,169631,169637,169641,169649,169677,169705,169709,169713,169743],{"__ignoreMap":174},[254,169632,169633,169635],{"class":256,"line":257},[254,169634,30533],{"class":260},[254,169636,147231],{"class":264},[254,169638,169639],{"class":256,"line":175},[254,169640,2540],{"emptyLinePlaceholder":184},[254,169642,169643,169645,169647],{"class":256,"line":1319},[254,169644,159856],{"class":264},[254,169646,310],{"class":260},[254,169648,55588],{"class":264},[254,169650,169651,169653,169655,169657,169659,169661,169663,169665,169667,169669,169671,169673,169675],{"class":256,"line":1334},[254,169652,148525],{"class":264},[254,169654,62820],{"class":369},[254,169656,51578],{"class":264},[254,169658,150028],{"class":369},[254,169660,12576],{"class":264},[254,169662,69265],{"class":369},[254,169664,51578],{"class":264},[254,169666,914],{"class":313},[254,169668,12576],{"class":264},[254,169670,151612],{"class":369},[254,169672,51578],{"class":264},[254,169674,1253],{"class":313},[254,169676,5070],{"class":264},[254,169678,169679,169681,169683,169685,169687,169689,169691,169693,169695,169697,169699,169701,169703],{"class":256,"line":1340},[254,169680,148525],{"class":264},[254,169682,62820],{"class":369},[254,169684,51578],{"class":264},[254,169686,151076],{"class":369},[254,169688,12576],{"class":264},[254,169690,69265],{"class":369},[254,169692,51578],{"class":264},[254,169694,889],{"class":313},[254,169696,12576],{"class":264},[254,169698,151612],{"class":369},[254,169700,51578],{"class":264},[254,169702,1075],{"class":313},[254,169704,5070],{"class":264},[254,169706,169707],{"class":256,"line":1354},[254,169708,33387],{"class":264},[254,169710,169711],{"class":256,"line":1360},[254,169712,2540],{"emptyLinePlaceholder":184},[254,169714,169715,169717,169719,169721,169723,169725,169727,169729,169731,169733,169735,169737,169739,169741],{"class":256,"line":1451},[254,169716,107974],{"class":260},[254,169718,146931],{"class":313},[254,169720,265],{"class":264},[254,169722,151971],{"class":369},[254,169724,12576],{"class":264},[254,169726,152116],{"class":369},[254,169728,12576],{"class":264},[254,169730,146946],{"class":5357},[254,169732,310],{"class":260},[254,169734,146951],{"class":369},[254,169736,13855],{"class":264},[254,169738,31524],{"class":260},[254,169740,148293],{"class":5357},[254,169742,3879],{"class":264},[254,169744,169745,169748,169750,169752,169754,169756,169758,169760,169762,169764,169766],{"class":256,"line":1457},[254,169746,169747],{"class":264},"    json.dump(students, ",[254,169749,45495],{"class":5357},[254,169751,12576],{"class":264},[254,169753,147277],{"class":5357},[254,169755,310],{"class":260},[254,169757,34128],{"class":313},[254,169759,12576],{"class":264},[254,169761,152152],{"class":5357},[254,169763,310],{"class":260},[254,169765,342],{"class":313},[254,169767,271],{"class":264},[14,169769,169770],{},"读取 JSON 文件：",[245,169772,169774],{"className":30519,"code":169773,"language":30521,"meta":174,"style":174},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[251,169775,169776,169782,169786,169816,169828,169832],{"__ignoreMap":174},[254,169777,169778,169780],{"class":256,"line":257},[254,169779,30533],{"class":260},[254,169781,147231],{"class":264},[254,169783,169784],{"class":256,"line":175},[254,169785,2540],{"emptyLinePlaceholder":184},[254,169787,169788,169790,169792,169794,169796,169798,169800,169802,169804,169806,169808,169810,169812,169814],{"class":256,"line":1319},[254,169789,107974],{"class":260},[254,169791,146931],{"class":313},[254,169793,265],{"class":264},[254,169795,151971],{"class":369},[254,169797,12576],{"class":264},[254,169799,146941],{"class":369},[254,169801,12576],{"class":264},[254,169803,146946],{"class":5357},[254,169805,310],{"class":260},[254,169807,146951],{"class":369},[254,169809,13855],{"class":264},[254,169811,31524],{"class":260},[254,169813,148293],{"class":5357},[254,169815,3879],{"class":264},[254,169817,169818,169820,169822,169824,169826],{"class":256,"line":1334},[254,169819,153177],{"class":264},[254,169821,310],{"class":260},[254,169823,148304],{"class":264},[254,169825,45495],{"class":5357},[254,169827,271],{"class":264},[254,169829,169830],{"class":256,"line":1340},[254,169831,2540],{"emptyLinePlaceholder":184},[254,169833,169834,169836],{"class":256,"line":1354},[254,169835,30556],{"class":313},[254,169837,165135],{"class":264},[34,169839,169841],{"id":169840},"_811-csv文件","8.11 CSV文件",[14,169843,169844],{},"CSV 是逗号分隔值，常用于表格数据。",[14,169846,169847],{},"写入 CSV：",[245,169849,169851],{"className":30519,"code":169850,"language":30521,"meta":174,"style":174},"import csv\n\nstudents = [\n    [\"姓名\", \"年龄\", \"成绩\"],\n    [\"小明\", 18, 95],\n    [\"小红\", 17, 88],\n]\n\nwith open(\"students.csv\", \"w\", encoding=\"utf-8\", newline=\"\") as file:\n    writer = csv.writer(file)\n    writer.writerows(students)\n",[251,169852,169853,169860,169864,169872,169890,169906,169922,169926,169930,169970,169984],{"__ignoreMap":174},[254,169854,169855,169857],{"class":256,"line":257},[254,169856,30533],{"class":260},[254,169858,169859],{"class":264}," csv\n",[254,169861,169862],{"class":256,"line":175},[254,169863,2540],{"emptyLinePlaceholder":184},[254,169865,169866,169868,169870],{"class":256,"line":1319},[254,169867,159856],{"class":264},[254,169869,310],{"class":260},[254,169871,55588],{"class":264},[254,169873,169874,169877,169879,169881,169883,169885,169888],{"class":256,"line":1334},[254,169875,169876],{"class":264},"    [",[254,169878,73240],{"class":369},[254,169880,12576],{"class":264},[254,169882,73273],{"class":369},[254,169884,12576],{"class":264},[254,169886,169887],{"class":369},"\"成绩\"",[254,169889,87977],{"class":264},[254,169891,169892,169894,169896,169898,169900,169902,169904],{"class":256,"line":1340},[254,169893,169876],{"class":264},[254,169895,150028],{"class":369},[254,169897,12576],{"class":264},[254,169899,914],{"class":313},[254,169901,12576],{"class":264},[254,169903,1253],{"class":313},[254,169905,87977],{"class":264},[254,169907,169908,169910,169912,169914,169916,169918,169920],{"class":256,"line":1354},[254,169909,169876],{"class":264},[254,169911,151076],{"class":369},[254,169913,12576],{"class":264},[254,169915,889],{"class":313},[254,169917,12576],{"class":264},[254,169919,1075],{"class":313},[254,169921,87977],{"class":264},[254,169923,169924],{"class":256,"line":1360},[254,169925,33387],{"class":264},[254,169927,169928],{"class":256,"line":1451},[254,169929,2540],{"emptyLinePlaceholder":184},[254,169931,169932,169934,169936,169938,169941,169943,169945,169947,169949,169951,169953,169955,169958,169960,169962,169964,169966,169968],{"class":256,"line":1457},[254,169933,107974],{"class":260},[254,169935,146931],{"class":313},[254,169937,265],{"class":264},[254,169939,169940],{"class":369},"\"students.csv\"",[254,169942,12576],{"class":264},[254,169944,152116],{"class":369},[254,169946,12576],{"class":264},[254,169948,146946],{"class":5357},[254,169950,310],{"class":260},[254,169952,146951],{"class":369},[254,169954,12576],{"class":264},[254,169956,169957],{"class":5357},"newline",[254,169959,310],{"class":260},[254,169961,7793],{"class":369},[254,169963,13855],{"class":264},[254,169965,31524],{"class":260},[254,169967,148293],{"class":5357},[254,169969,3879],{"class":264},[254,169971,169972,169975,169977,169980,169982],{"class":256,"line":1469},[254,169973,169974],{"class":264},"    writer ",[254,169976,310],{"class":260},[254,169978,169979],{"class":264}," csv.writer(",[254,169981,45495],{"class":5357},[254,169983,271],{"class":264},[254,169985,169986],{"class":256,"line":1752},[254,169987,169988],{"class":264},"    writer.writerows(students)\n",[14,169990,169991],{},"读取 CSV：",[245,169993,169995],{"className":30519,"code":169994,"language":30521,"meta":174,"style":174},"import csv\n\nwith open(\"students.csv\", \"r\", encoding=\"utf-8\") as file:\n    reader = csv.reader(file)\n    for row in reader:\n        print(row)\n",[251,169996,169997,170003,170007,170037,170051,170063],{"__ignoreMap":174},[254,169998,169999,170001],{"class":256,"line":257},[254,170000,30533],{"class":260},[254,170002,169859],{"class":264},[254,170004,170005],{"class":256,"line":175},[254,170006,2540],{"emptyLinePlaceholder":184},[254,170008,170009,170011,170013,170015,170017,170019,170021,170023,170025,170027,170029,170031,170033,170035],{"class":256,"line":1319},[254,170010,107974],{"class":260},[254,170012,146931],{"class":313},[254,170014,265],{"class":264},[254,170016,169940],{"class":369},[254,170018,12576],{"class":264},[254,170020,146941],{"class":369},[254,170022,12576],{"class":264},[254,170024,146946],{"class":5357},[254,170026,310],{"class":260},[254,170028,146951],{"class":369},[254,170030,13855],{"class":264},[254,170032,31524],{"class":260},[254,170034,148293],{"class":5357},[254,170036,3879],{"class":264},[254,170038,170039,170042,170044,170047,170049],{"class":256,"line":1334},[254,170040,170041],{"class":264},"    reader ",[254,170043,310],{"class":260},[254,170045,170046],{"class":264}," csv.reader(",[254,170048,45495],{"class":5357},[254,170050,271],{"class":264},[254,170052,170053,170055,170058,170060],{"class":256,"line":1340},[254,170054,3341],{"class":260},[254,170056,170057],{"class":264}," row ",[254,170059,26184],{"class":260},[254,170061,170062],{"class":264}," reader:\n",[254,170064,170065,170067],{"class":256,"line":1354},[254,170066,32592],{"class":313},[254,170068,170069],{"class":264},"(row)\n",[14,170071,170072],{},"使用字典写入：",[245,170074,170076],{"className":30519,"code":170075,"language":30521,"meta":174,"style":174},"import csv\n\nstudents = [\n    {\"name\": \"小明\", \"age\": 18, \"score\": 95},\n    {\"name\": \"小红\", \"age\": 17, \"score\": 88},\n]\n\nwith open(\"students.csv\", \"w\", encoding=\"utf-8\", newline=\"\") as file:\n    fieldnames = [\"name\", \"age\", \"score\"]\n    writer = csv.DictWriter(file, fieldnames=fieldnames)\n    writer.writeheader()\n    writer.writerows(students)\n",[251,170077,170078,170084,170088,170096,170124,170152,170156,170160,170198,170219,170240,170245],{"__ignoreMap":174},[254,170079,170080,170082],{"class":256,"line":257},[254,170081,30533],{"class":260},[254,170083,169859],{"class":264},[254,170085,170086],{"class":256,"line":175},[254,170087,2540],{"emptyLinePlaceholder":184},[254,170089,170090,170092,170094],{"class":256,"line":1319},[254,170091,159856],{"class":264},[254,170093,310],{"class":260},[254,170095,55588],{"class":264},[254,170097,170098,170100,170102,170104,170106,170108,170110,170112,170114,170116,170118,170120,170122],{"class":256,"line":1334},[254,170099,148525],{"class":264},[254,170101,62820],{"class":369},[254,170103,51578],{"class":264},[254,170105,150028],{"class":369},[254,170107,12576],{"class":264},[254,170109,69265],{"class":369},[254,170111,51578],{"class":264},[254,170113,914],{"class":313},[254,170115,12576],{"class":264},[254,170117,151612],{"class":369},[254,170119,51578],{"class":264},[254,170121,1253],{"class":313},[254,170123,5070],{"class":264},[254,170125,170126,170128,170130,170132,170134,170136,170138,170140,170142,170144,170146,170148,170150],{"class":256,"line":1340},[254,170127,148525],{"class":264},[254,170129,62820],{"class":369},[254,170131,51578],{"class":264},[254,170133,151076],{"class":369},[254,170135,12576],{"class":264},[254,170137,69265],{"class":369},[254,170139,51578],{"class":264},[254,170141,889],{"class":313},[254,170143,12576],{"class":264},[254,170145,151612],{"class":369},[254,170147,51578],{"class":264},[254,170149,1075],{"class":313},[254,170151,5070],{"class":264},[254,170153,170154],{"class":256,"line":1354},[254,170155,33387],{"class":264},[254,170157,170158],{"class":256,"line":1360},[254,170159,2540],{"emptyLinePlaceholder":184},[254,170161,170162,170164,170166,170168,170170,170172,170174,170176,170178,170180,170182,170184,170186,170188,170190,170192,170194,170196],{"class":256,"line":1451},[254,170163,107974],{"class":260},[254,170165,146931],{"class":313},[254,170167,265],{"class":264},[254,170169,169940],{"class":369},[254,170171,12576],{"class":264},[254,170173,152116],{"class":369},[254,170175,12576],{"class":264},[254,170177,146946],{"class":5357},[254,170179,310],{"class":260},[254,170181,146951],{"class":369},[254,170183,12576],{"class":264},[254,170185,169957],{"class":5357},[254,170187,310],{"class":260},[254,170189,7793],{"class":369},[254,170191,13855],{"class":264},[254,170193,31524],{"class":260},[254,170195,148293],{"class":5357},[254,170197,3879],{"class":264},[254,170199,170200,170203,170205,170207,170209,170211,170213,170215,170217],{"class":256,"line":1457},[254,170201,170202],{"class":264},"    fieldnames ",[254,170204,310],{"class":260},[254,170206,52367],{"class":264},[254,170208,62820],{"class":369},[254,170210,12576],{"class":264},[254,170212,69265],{"class":369},[254,170214,12576],{"class":264},[254,170216,151612],{"class":369},[254,170218,33387],{"class":264},[254,170220,170221,170223,170225,170228,170230,170232,170235,170237],{"class":256,"line":1469},[254,170222,169974],{"class":264},[254,170224,310],{"class":260},[254,170226,170227],{"class":264}," csv.DictWriter(",[254,170229,45495],{"class":5357},[254,170231,12576],{"class":264},[254,170233,170234],{"class":5357},"fieldnames",[254,170236,310],{"class":260},[254,170238,170239],{"class":264},"fieldnames)\n",[254,170241,170242],{"class":256,"line":1752},[254,170243,170244],{"class":264},"    writer.writeheader()\n",[254,170246,170247],{"class":256,"line":1757},[254,170248,169988],{"class":264},[34,170250,170252],{"id":170251},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[14,170254,123432],{},[21,170256,170257,170260,170263],{},[24,170258,170259],{},"读取文本文件。",[24,170261,170262],{},"统计每个单词出现次数。",[24,170264,170265],{},"输出出现次数最多的前 10 个单词。",[14,170267,10176],{},[245,170269,170271],{"className":30519,"code":170270,"language":30521,"meta":174,"style":174},"from pathlib import Path\n\npath = Path(\"article.txt\")\ncontent = path.read_text(encoding=\"utf-8\")\n\nwords = content.lower().split()\ncounter = {}\n\nfor word in words:\n    word = word.strip(\".,!?;:\\\"'()[]\")\n    if not word:\n        continue\n    counter[word] = counter.get(word, 0) + 1\n\nitems = sorted(counter.items(), key=lambda item: item[1], reverse=True)\n\nfor word, count in items[:10]:\n    print(word, count)\n",[251,170272,170273,170283,170287,170300,170316,170320,170330,170339,170343,170355,170375,170384,170388,170406,170410,170440,170444,170460],{"__ignoreMap":174},[254,170274,170275,170277,170279,170281],{"class":256,"line":257},[254,170276,30878],{"class":260},[254,170278,108452],{"class":264},[254,170280,30533],{"class":260},[254,170282,108457],{"class":264},[254,170284,170285],{"class":256,"line":175},[254,170286,2540],{"emptyLinePlaceholder":184},[254,170288,170289,170291,170293,170295,170298],{"class":256,"line":1319},[254,170290,168451],{"class":264},[254,170292,310],{"class":260},[254,170294,108686],{"class":264},[254,170296,170297],{"class":369},"\"article.txt\"",[254,170299,271],{"class":264},[254,170301,170302,170304,170306,170308,170310,170312,170314],{"class":256,"line":1334},[254,170303,168634],{"class":264},[254,170305,310],{"class":260},[254,170307,169511],{"class":264},[254,170309,146946],{"class":5357},[254,170311,310],{"class":260},[254,170313,146951],{"class":369},[254,170315,271],{"class":264},[254,170317,170318],{"class":256,"line":1340},[254,170319,2540],{"emptyLinePlaceholder":184},[254,170321,170322,170325,170327],{"class":256,"line":1354},[254,170323,170324],{"class":264},"words ",[254,170326,310],{"class":260},[254,170328,170329],{"class":264}," content.lower().split()\n",[254,170331,170332,170335,170337],{"class":256,"line":1360},[254,170333,170334],{"class":264},"counter ",[254,170336,310],{"class":260},[254,170338,88009],{"class":264},[254,170340,170341],{"class":256,"line":1451},[254,170342,2540],{"emptyLinePlaceholder":184},[254,170344,170345,170347,170350,170352],{"class":256,"line":1457},[254,170346,3165],{"class":260},[254,170348,170349],{"class":264}," word ",[254,170351,26184],{"class":260},[254,170353,170354],{"class":264}," words:\n",[254,170356,170357,170360,170362,170365,170368,170370,170373],{"class":256,"line":1469},[254,170358,170359],{"class":264},"    word ",[254,170361,310],{"class":260},[254,170363,170364],{"class":264}," word.strip(",[254,170366,170367],{"class":369},"\".,!?;:",[254,170369,156635],{"class":313},[254,170371,170372],{"class":369},"'()[]\"",[254,170374,271],{"class":264},[254,170376,170377,170379,170381],{"class":256,"line":1752},[254,170378,3241],{"class":260},[254,170380,39071],{"class":260},[254,170382,170383],{"class":264}," word:\n",[254,170385,170386],{"class":256,"line":1757},[254,170387,148652],{"class":260},[254,170389,170390,170393,170395,170398,170400,170402,170404],{"class":256,"line":1763},[254,170391,170392],{"class":264},"    counter[word] ",[254,170394,310],{"class":260},[254,170396,170397],{"class":264}," counter.get(word, ",[254,170399,456],{"class":313},[254,170401,13855],{"class":264},[254,170403,745],{"class":260},[254,170405,55840],{"class":313},[254,170407,170408],{"class":256,"line":1768},[254,170409,2540],{"emptyLinePlaceholder":184},[254,170411,170412,170415,170417,170419,170422,170424,170426,170428,170430,170432,170434,170436,170438],{"class":256,"line":1782},[254,170413,170414],{"class":264},"items ",[254,170416,310],{"class":260},[254,170418,163744],{"class":313},[254,170420,170421],{"class":264},"(counter.items(), ",[254,170423,154086],{"class":5357},[254,170425,154089],{"class":260},[254,170427,154092],{"class":264},[254,170429,482],{"class":313},[254,170431,112343],{"class":264},[254,170433,163668],{"class":5357},[254,170435,310],{"class":260},[254,170437,31617],{"class":313},[254,170439,271],{"class":264},[254,170441,170442],{"class":256,"line":1787},[254,170443,2540],{"emptyLinePlaceholder":184},[254,170445,170446,170448,170451,170453,170456,170458],{"class":256,"line":1793},[254,170447,3165],{"class":260},[254,170449,170450],{"class":264}," word, count ",[254,170452,26184],{"class":260},[254,170454,170455],{"class":264}," items[:",[254,170457,710],{"class":313},[254,170459,165895],{"class":264},[254,170461,170462,170464],{"class":256,"line":1814},[254,170463,31440],{"class":313},[254,170465,170466],{"class":264},"(word, count)\n",[34,170468,170470],{"id":170469},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[245,170472,170474],{"className":30519,"code":170473,"language":30521,"meta":174,"style":174},"import json\nfrom pathlib import Path\n\nDATA_FILE = Path(\"students.json\")\n\n\ndef load_students():\n    if not DATA_FILE.exists():\n        return []\n\n    with open(DATA_FILE, \"r\", encoding=\"utf-8\") as file:\n        return json.load(file)\n\n\ndef save_students(students):\n    with open(DATA_FILE, \"w\", encoding=\"utf-8\") as file:\n        json.dump(students, file, ensure_ascii=False, indent=2)\n\n\nstudents = load_students()\nstudents.append({\"name\": \"小明\", \"age\": 18, \"score\": 95})\nsave_students(students)\nprint(\"保存成功\")\n",[251,170475,170476,170482,170492,170496,170508,170512,170516,170524,170534,170540,170544,170574,170584,170588,170592,170600,170630,170654,170658,170662,170670,170699,170704],{"__ignoreMap":174},[254,170477,170478,170480],{"class":256,"line":257},[254,170479,30533],{"class":260},[254,170481,147231],{"class":264},[254,170483,170484,170486,170488,170490],{"class":256,"line":175},[254,170485,30878],{"class":260},[254,170487,108452],{"class":264},[254,170489,30533],{"class":260},[254,170491,108457],{"class":264},[254,170493,170494],{"class":256,"line":1319},[254,170495,2540],{"emptyLinePlaceholder":184},[254,170497,170498,170500,170502,170504,170506],{"class":256,"line":1334},[254,170499,151964],{"class":313},[254,170501,13705],{"class":260},[254,170503,108686],{"class":264},[254,170505,151971],{"class":369},[254,170507,271],{"class":264},[254,170509,170510],{"class":256,"line":1340},[254,170511,2540],{"emptyLinePlaceholder":184},[254,170513,170514],{"class":256,"line":1354},[254,170515,2540],{"emptyLinePlaceholder":184},[254,170517,170518,170520,170522],{"class":256,"line":1360},[254,170519,32088],{"class":260},[254,170521,151988],{"class":2103},[254,170523,32094],{"class":264},[254,170525,170526,170528,170530,170532],{"class":256,"line":1451},[254,170527,3241],{"class":260},[254,170529,39071],{"class":260},[254,170531,151999],{"class":313},[254,170533,152002],{"class":264},[254,170535,170536,170538],{"class":256,"line":1457},[254,170537,14893],{"class":260},[254,170539,51979],{"class":264},[254,170541,170542],{"class":256,"line":1469},[254,170543,2540],{"emptyLinePlaceholder":184},[254,170545,170546,170548,170550,170552,170554,170556,170558,170560,170562,170564,170566,170568,170570,170572],{"class":256,"line":1752},[254,170547,34319],{"class":260},[254,170549,146931],{"class":313},[254,170551,265],{"class":264},[254,170553,151964],{"class":313},[254,170555,12576],{"class":264},[254,170557,146941],{"class":369},[254,170559,12576],{"class":264},[254,170561,146946],{"class":5357},[254,170563,310],{"class":260},[254,170565,146951],{"class":369},[254,170567,13855],{"class":264},[254,170569,31524],{"class":260},[254,170571,148293],{"class":5357},[254,170573,3879],{"class":264},[254,170575,170576,170578,170580,170582],{"class":256,"line":1757},[254,170577,14893],{"class":260},[254,170579,148304],{"class":264},[254,170581,45495],{"class":5357},[254,170583,271],{"class":264},[254,170585,170586],{"class":256,"line":1763},[254,170587,2540],{"emptyLinePlaceholder":184},[254,170589,170590],{"class":256,"line":1768},[254,170591,2540],{"emptyLinePlaceholder":184},[254,170593,170594,170596,170598],{"class":256,"line":1782},[254,170595,32088],{"class":260},[254,170597,152098],{"class":2103},[254,170599,152101],{"class":264},[254,170601,170602,170604,170606,170608,170610,170612,170614,170616,170618,170620,170622,170624,170626,170628],{"class":256,"line":1787},[254,170603,34319],{"class":260},[254,170605,146931],{"class":313},[254,170607,265],{"class":264},[254,170609,151964],{"class":313},[254,170611,12576],{"class":264},[254,170613,152116],{"class":369},[254,170615,12576],{"class":264},[254,170617,146946],{"class":5357},[254,170619,310],{"class":260},[254,170621,146951],{"class":369},[254,170623,13855],{"class":264},[254,170625,31524],{"class":260},[254,170627,148293],{"class":5357},[254,170629,3879],{"class":264},[254,170631,170632,170634,170636,170638,170640,170642,170644,170646,170648,170650,170652],{"class":256,"line":1793},[254,170633,152137],{"class":264},[254,170635,45495],{"class":5357},[254,170637,12576],{"class":264},[254,170639,147277],{"class":5357},[254,170641,310],{"class":260},[254,170643,34128],{"class":313},[254,170645,12576],{"class":264},[254,170647,152152],{"class":5357},[254,170649,310],{"class":260},[254,170651,342],{"class":313},[254,170653,271],{"class":264},[254,170655,170656],{"class":256,"line":1814},[254,170657,2540],{"emptyLinePlaceholder":184},[254,170659,170660],{"class":256,"line":1819},[254,170661,2540],{"emptyLinePlaceholder":184},[254,170663,170664,170666,170668],{"class":256,"line":1833},[254,170665,159856],{"class":264},[254,170667,310],{"class":260},[254,170669,153182],{"class":264},[254,170671,170672,170675,170677,170679,170681,170683,170685,170687,170689,170691,170693,170695,170697],{"class":256,"line":1838},[254,170673,170674],{"class":264},"students.append({",[254,170676,62820],{"class":369},[254,170678,51578],{"class":264},[254,170680,150028],{"class":369},[254,170682,12576],{"class":264},[254,170684,69265],{"class":369},[254,170686,51578],{"class":264},[254,170688,914],{"class":313},[254,170690,12576],{"class":264},[254,170692,151612],{"class":369},[254,170694,51578],{"class":264},[254,170696,1253],{"class":313},[254,170698,165292],{"class":264},[254,170700,170701],{"class":256,"line":1867},[254,170702,170703],{"class":264},"save_students(students)\n",[254,170705,170706,170708,170710,170713],{"class":256,"line":1872},[254,170707,30556],{"class":313},[254,170709,265],{"class":264},[254,170711,170712],{"class":369},"\"保存成功\"",[254,170714,271],{"class":264},[34,170716,170718],{"id":170717},"_814-易错点","8.14 易错点",[21,170720,170721,170725,170731,170736,170743,170750],{},[24,170722,170723,168984],{},[251,170724,1059],{},[24,170726,170727,170728,28526],{},"读写中文要指定 ",[251,170729,170730],{},"encoding=\"utf-8\"",[24,170732,170733,170734,28526],{},"打开文件后要关闭，推荐使用 ",[251,170735,107974],{},[24,170737,170738,170739,170742],{},"读取大文件不要直接 ",[251,170740,170741],{},"read()"," 全部内容。",[24,170744,170745,170746,170749],{},"Windows 写 CSV 时建议加 ",[251,170747,170748],{},"newline=\"\"","，避免空行。",[24,170751,170752],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[34,170754,170756],{"id":170755},"_815-本章练习","8.15 本章练习",[21,170758,170759,170766,170771,170774,170777],{},[24,170760,170761,170762,170765],{},"写入一个 ",[251,170763,170764],{},"students.txt","，每行保存一个学生姓名。",[24,170767,104496,170768,170770],{},[251,170769,170764],{}," 并输出所有学生。",[24,170772,170773],{},"把学生列表保存为 JSON 文件。",[24,170775,170776],{},"从 JSON 文件读取学生数据，计算平均分。",[24,170778,170779,170780,170783,170784,170787],{},"写一个日志函数 ",[251,170781,170782],{},"write_log(message)","，每次调用向 ",[251,170785,170786],{},"app.log"," 追加一行。",[5267,170789,170790],{},"html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sA_wV, html code.shiki .sA_wV{--shiki-default:#032F62;--shiki-dark:#DBEDFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}",{"title":174,"searchDepth":175,"depth":175,"links":170792},[170793,170794,170798,170799,170805,170806,170807,170808,170809,170810,170811,170812,170813,170814,170815],{"id":168304,"depth":175,"text":168305},{"id":168345,"depth":175,"text":168346,"children":170795},[170796,170797],{"id":168349,"depth":1319,"text":168350},{"id":168383,"depth":1319,"text":168384},{"id":168497,"depth":175,"text":168498},{"id":168590,"depth":175,"text":168591,"children":170800},[170801,170802,170803,170804],{"id":168594,"depth":1319,"text":168595},{"id":168681,"depth":1319,"text":168682},{"id":168751,"depth":1319,"text":168752},{"id":168845,"depth":1319,"text":168846},{"id":168915,"depth":175,"text":168916},{"id":168978,"depth":175,"text":168979},{"id":169139,"depth":175,"text":169140},{"id":169202,"depth":175,"text":169203},{"id":169318,"depth":175,"text":169319},{"id":169528,"depth":175,"text":169529},{"id":169840,"depth":175,"text":169841},{"id":170251,"depth":175,"text":170252},{"id":170469,"depth":175,"text":170470},{"id":170717,"depth":175,"text":170718},{"id":170755,"depth":175,"text":170756},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168296,"description":23518},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":170822,"title":170823,"body":170824,"description":23518,"extension":181,"meta":173010,"navigation":184,"path":173011,"seo":173012,"stem":173013,"__hash__":173014},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":170825,"toc":172977},[170826,170829,170833,170836,170839,170931,170933,170952,170957,170961,170964,170967,170996,171003,171006,171010,171013,171042,171044,171096,171102,171155,171159,171257,171260,171327,171331,171388,171390,171396,171400,171405,171411,171502,171507,171511,171514,171592,171595,171633,171637,171755,171758,171762,171765,171810,171813,171817,171822,171828,171878,171881,171912,171916,171920,171950,171954,171989,171993,172028,172068,172072,172088,172091,172095,172099,172178,172182,172223,172227,172282,172286,172320,172324,172354,172363,172370,172376,172433,172436,172444,172447,172451,172458,172461,172467,172470,172487,172492,172496,172502,172515,172518,172555,172558,172569,172572,172586,172589,172603,172607,172614,172647,172650,172652,172658,172661,172665,172667,172673,172678,172851,172855,172918,172922,172946,172950,172974],[10,170827,170823],{"id":170828},"_9-异常模块与包",[34,170830,170832],{"id":170831},"_91-什么是异常","9.1 什么是异常",[14,170834,170835],{},"异常是程序运行过程中出现的错误。",[14,170837,170838],{},"常见异常：",[402,170840,170841,170850],{},[405,170842,170843],{},[408,170844,170845,170848],{},[411,170846,170847],{},"异常",[411,170849,26010],{},[449,170851,170852,170862,170872,170881,170891,170901,170911,170921],{},[408,170853,170854,170859],{},[454,170855,170856],{},[251,170857,170858],{},"NameError",[454,170860,170861],{},"使用了未定义变量",[408,170863,170864,170869],{},[454,170865,170866],{},[251,170867,170868],{},"TypeError",[454,170870,170871],{},"类型不匹配",[408,170873,170874,170878],{},[454,170875,170876],{},[251,170877,154974],{},[454,170879,170880],{},"值不合法",[408,170882,170883,170888],{},[454,170884,170885],{},[251,170886,170887],{},"IndexError",[454,170889,170890],{},"列表索引越界",[408,170892,170893,170898],{},[454,170894,170895],{},[251,170896,170897],{},"KeyError",[454,170899,170900],{},"字典 key 不存在",[408,170902,170903,170908],{},[454,170904,170905],{},[251,170906,170907],{},"FileNotFoundError",[454,170909,170910],{},"文件不存在",[408,170912,170913,170918],{},[454,170914,170915],{},[251,170916,170917],{},"ZeroDivisionError",[454,170919,170920],{},"除数为 0",[408,170922,170923,170928],{},[454,170924,170925],{},[251,170926,170927],{},"ImportError",[454,170929,170930],{},"导入失败",[14,170932,15276],{},[245,170934,170936],{"className":30519,"code":170935,"language":30521,"meta":174,"style":174},"num = int(\"abc\")\n",[251,170937,170938],{"__ignoreMap":174},[254,170939,170940,170942,170944,170946,170948,170950],{"class":256,"line":257},[254,170941,155927],{"class":264},[254,170943,310],{"class":260},[254,170945,2522],{"class":313},[254,170947,265],{"class":264},[254,170949,156020],{"class":369},[254,170951,271],{"class":264},[14,170953,170954,170955,28526],{},"会触发 ",[251,170956,154974],{},[34,170958,170960],{"id":170959},"_92-为什么要处理异常","9.2 为什么要处理异常",[14,170962,170963],{},"如果不处理异常，程序会直接终止。",[14,170965,170966],{},"例如用户输入年龄：",[245,170968,170970],{"className":30519,"code":170969,"language":30521,"meta":174,"style":174},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[251,170971,170972,170990],{"__ignoreMap":174},[254,170973,170974,170976,170978,170980,170982,170984,170986,170988],{"class":256,"line":257},[254,170975,146686],{"class":264},[254,170977,310],{"class":260},[254,170979,2522],{"class":313},[254,170981,265],{"class":264},[254,170983,53962],{"class":313},[254,170985,265],{"class":264},[254,170987,152534],{"class":369},[254,170989,30638],{"class":264},[254,170991,170992,170994],{"class":256,"line":175},[254,170993,30556],{"class":313},[254,170995,155901],{"class":264},[14,170997,170998,170999,171002],{},"用户输入 ",[251,171000,171001],{},"abc","，程序就会报错退出。",[14,171004,171005],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[34,171007,171009],{"id":171008},"_93-try-except","9.3 try except",[14,171011,171012],{},"基础语法：",[245,171014,171016],{"className":30519,"code":171015,"language":30521,"meta":174,"style":174},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[251,171017,171018,171025,171030,171037],{"__ignoreMap":174},[254,171019,171020,171023],{"class":256,"line":257},[254,171021,171022],{"class":260},"try",[254,171024,3879],{"class":264},[254,171026,171027],{"class":256,"line":175},[254,171028,171029],{"class":264},"    可能出错的代码\n",[254,171031,171032,171035],{"class":256,"line":1319},[254,171033,171034],{"class":260},"except",[254,171036,3879],{"class":264},[254,171038,171039],{"class":256,"line":1334},[254,171040,171041],{"class":264},"    出错后的处理代码\n",[14,171043,15276],{},[245,171045,171047],{"className":30519,"code":171046,"language":30521,"meta":174,"style":174},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[251,171048,171049,171055,171073,171079,171085],{"__ignoreMap":174},[254,171050,171051,171053],{"class":256,"line":257},[254,171052,171022],{"class":260},[254,171054,3879],{"class":264},[254,171056,171057,171059,171061,171063,171065,171067,171069,171071],{"class":256,"line":175},[254,171058,152526],{"class":264},[254,171060,310],{"class":260},[254,171062,2522],{"class":313},[254,171064,265],{"class":264},[254,171066,53962],{"class":313},[254,171068,265],{"class":264},[254,171070,152534],{"class":369},[254,171072,30638],{"class":264},[254,171074,171075,171077],{"class":256,"line":1319},[254,171076,31440],{"class":313},[254,171078,155901],{"class":264},[254,171080,171081,171083],{"class":256,"line":1334},[254,171082,171034],{"class":260},[254,171084,3879],{"class":264},[254,171086,171087,171089,171091,171094],{"class":256,"line":1340},[254,171088,31440],{"class":313},[254,171090,265],{"class":264},[254,171092,171093],{"class":369},"\"年龄必须是数字\"",[254,171095,271],{"class":264},[14,171097,171098,171099,171101],{},"不建议裸写 ",[251,171100,171034],{},"，最好指定异常类型。",[245,171103,171105],{"className":30519,"code":171104,"language":30521,"meta":174,"style":174},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[251,171106,171107,171113,171131,171137,171145],{"__ignoreMap":174},[254,171108,171109,171111],{"class":256,"line":257},[254,171110,171022],{"class":260},[254,171112,3879],{"class":264},[254,171114,171115,171117,171119,171121,171123,171125,171127,171129],{"class":256,"line":175},[254,171116,152526],{"class":264},[254,171118,310],{"class":260},[254,171120,2522],{"class":313},[254,171122,265],{"class":264},[254,171124,53962],{"class":313},[254,171126,265],{"class":264},[254,171128,152534],{"class":369},[254,171130,30638],{"class":264},[254,171132,171133,171135],{"class":256,"line":1319},[254,171134,31440],{"class":313},[254,171136,155901],{"class":264},[254,171138,171139,171141,171143],{"class":256,"line":1334},[254,171140,171034],{"class":260},[254,171142,152366],{"class":313},[254,171144,3879],{"class":264},[254,171146,171147,171149,171151,171153],{"class":256,"line":1340},[254,171148,31440],{"class":313},[254,171150,265],{"class":264},[254,171152,171093],{"class":369},[254,171154,271],{"class":264},[34,171156,171158],{"id":171157},"_94-捕获多个异常","9.4 捕获多个异常",[245,171160,171162],{"className":30519,"code":171161,"language":30521,"meta":174,"style":174},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[251,171163,171164,171170,171191,171211,171218,171226,171237,171246],{"__ignoreMap":174},[254,171165,171166,171168],{"class":256,"line":257},[254,171167,171022],{"class":260},[254,171169,3879],{"class":264},[254,171171,171172,171175,171177,171179,171181,171183,171185,171187,171189],{"class":256,"line":175},[254,171173,171174],{"class":264},"    nums ",[254,171176,310],{"class":260},[254,171178,52367],{"class":264},[254,171180,482],{"class":313},[254,171182,12576],{"class":264},[254,171184,342],{"class":313},[254,171186,12576],{"class":264},[254,171188,336],{"class":313},[254,171190,33387],{"class":264},[254,171192,171193,171196,171198,171200,171202,171204,171206,171209],{"class":256,"line":1319},[254,171194,171195],{"class":264},"    index ",[254,171197,310],{"class":260},[254,171199,2522],{"class":313},[254,171201,265],{"class":264},[254,171203,53962],{"class":313},[254,171205,265],{"class":264},[254,171207,171208],{"class":369},"\"请输入索引:\"",[254,171210,30638],{"class":264},[254,171212,171213,171215],{"class":256,"line":1334},[254,171214,31440],{"class":313},[254,171216,171217],{"class":264},"(nums[index])\n",[254,171219,171220,171222,171224],{"class":256,"line":1340},[254,171221,171034],{"class":260},[254,171223,152366],{"class":313},[254,171225,3879],{"class":264},[254,171227,171228,171230,171232,171235],{"class":256,"line":1354},[254,171229,31440],{"class":313},[254,171231,265],{"class":264},[254,171233,171234],{"class":369},"\"索引必须是整数\"",[254,171236,271],{"class":264},[254,171238,171239,171241,171244],{"class":256,"line":1360},[254,171240,171034],{"class":260},[254,171242,171243],{"class":313}," IndexError",[254,171245,3879],{"class":264},[254,171247,171248,171250,171252,171255],{"class":256,"line":1451},[254,171249,31440],{"class":313},[254,171251,265],{"class":264},[254,171253,171254],{"class":369},"\"索引越界\"",[254,171256,271],{"class":264},[14,171258,171259],{},"多个异常使用相同处理逻辑：",[245,171261,171263],{"className":30519,"code":171262,"language":30521,"meta":174,"style":174},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[251,171264,171265,171271,171289,171302,171316],{"__ignoreMap":174},[254,171266,171267,171269],{"class":256,"line":257},[254,171268,171022],{"class":260},[254,171270,3879],{"class":264},[254,171272,171273,171275,171277,171279,171281,171283,171285,171287],{"class":256,"line":175},[254,171274,45734],{"class":264},[254,171276,310],{"class":260},[254,171278,2522],{"class":313},[254,171280,265],{"class":264},[254,171282,53962],{"class":313},[254,171284,265],{"class":264},[254,171286,155936],{"class":369},[254,171288,30638],{"class":264},[254,171290,171291,171293,171295,171297,171299],{"class":256,"line":1319},[254,171292,31440],{"class":313},[254,171294,265],{"class":264},[254,171296,710],{"class":313},[254,171298,156186],{"class":260},[254,171300,171301],{"class":264}," num)\n",[254,171303,171304,171306,171308,171310,171312,171314],{"class":256,"line":1334},[254,171305,171034],{"class":260},[254,171307,1798],{"class":264},[254,171309,154974],{"class":313},[254,171311,12576],{"class":264},[254,171313,170917],{"class":313},[254,171315,30927],{"class":264},[254,171317,171318,171320,171322,171325],{"class":256,"line":1340},[254,171319,31440],{"class":313},[254,171321,265],{"class":264},[254,171323,171324],{"class":369},"\"输入不合法\"",[254,171326,271],{"class":264},[34,171328,171330],{"id":171329},"_95-获取异常信息","9.5 获取异常信息",[245,171332,171334],{"className":30519,"code":171333,"language":30521,"meta":174,"style":174},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[251,171335,171336,171342,171356,171367],{"__ignoreMap":174},[254,171337,171338,171340],{"class":256,"line":257},[254,171339,171022],{"class":260},[254,171341,3879],{"class":264},[254,171343,171344,171346,171348,171350,171352,171354],{"class":256,"line":175},[254,171345,45734],{"class":264},[254,171347,310],{"class":260},[254,171349,2522],{"class":313},[254,171351,265],{"class":264},[254,171353,156020],{"class":369},[254,171355,271],{"class":264},[254,171357,171358,171360,171362,171364],{"class":256,"line":1319},[254,171359,171034],{"class":260},[254,171361,152366],{"class":313},[254,171363,64745],{"class":260},[254,171365,171366],{"class":264}," e:\n",[254,171368,171369,171371,171373,171375,171378,171380,171382,171384,171386],{"class":256,"line":1334},[254,171370,31440],{"class":313},[254,171372,265],{"class":264},[254,171374,317],{"class":260},[254,171376,171377],{"class":369},"\"出错了:",[254,171379,1160],{"class":313},[254,171381,339],{"class":264},[254,171383,1210],{"class":313},[254,171385,515],{"class":369},[254,171387,271],{"class":264},[14,171389,146597],{},[245,171391,171394],{"className":171392,"code":171393,"language":5328,"meta":174},[5326],"出错了:invalid literal for int() with base 10: 'abc'\n",[251,171395,171393],{"__ignoreMap":174},[34,171397,171399],{"id":171398},"_96-else和finally","9.6 else和finally",[14,171401,171402,171404],{},[251,171403,1841],{},"：没有异常时执行。",[14,171406,171407,171410],{},[251,171408,171409],{},"finally","：无论是否异常都会执行。",[245,171412,171414],{"className":30519,"code":171413,"language":30521,"meta":174,"style":174},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[251,171415,171416,171422,171440,171448,171458,171464,171485,171491],{"__ignoreMap":174},[254,171417,171418,171420],{"class":256,"line":257},[254,171419,171022],{"class":260},[254,171421,3879],{"class":264},[254,171423,171424,171426,171428,171430,171432,171434,171436,171438],{"class":256,"line":175},[254,171425,45734],{"class":264},[254,171427,310],{"class":260},[254,171429,2522],{"class":313},[254,171431,265],{"class":264},[254,171433,53962],{"class":313},[254,171435,265],{"class":264},[254,171437,155936],{"class":369},[254,171439,30638],{"class":264},[254,171441,171442,171444,171446],{"class":256,"line":1319},[254,171443,171034],{"class":260},[254,171445,152366],{"class":313},[254,171447,3879],{"class":264},[254,171449,171450,171452,171454,171456],{"class":256,"line":1334},[254,171451,31440],{"class":313},[254,171453,265],{"class":264},[254,171455,153354],{"class":369},[254,171457,271],{"class":264},[254,171459,171460,171462],{"class":256,"line":1340},[254,171461,1841],{"class":260},[254,171463,3879],{"class":264},[254,171465,171466,171468,171470,171472,171475,171477,171479,171481,171483],{"class":256,"line":1354},[254,171467,31440],{"class":313},[254,171469,265],{"class":264},[254,171471,317],{"class":260},[254,171473,171474],{"class":369},"\"输入正确:",[254,171476,1160],{"class":313},[254,171478,1805],{"class":264},[254,171480,1210],{"class":313},[254,171482,515],{"class":369},[254,171484,271],{"class":264},[254,171486,171487,171489],{"class":256,"line":1360},[254,171488,171409],{"class":260},[254,171490,3879],{"class":264},[254,171492,171493,171495,171497,171500],{"class":256,"line":1451},[254,171494,31440],{"class":313},[254,171496,265],{"class":264},[254,171498,171499],{"class":369},"\"程序结束\"",[254,171501,271],{"class":264},[14,171503,171504,171506],{},[251,171505,171409],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[34,171508,171510],{"id":171509},"_97-抛出异常","9.7 抛出异常",[14,171512,171513],{},"程序可以主动抛出异常。",[245,171515,171517],{"className":30519,"code":171516,"language":30521,"meta":174,"style":174},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[251,171518,171519,171528,171540,171553,171573,171577,171581],{"__ignoreMap":174},[254,171520,171521,171523,171526],{"class":256,"line":257},[254,171522,32088],{"class":260},[254,171524,171525],{"class":2103}," set_age",[254,171527,161555],{"class":264},[254,171529,171530,171532,171534,171536,171538],{"class":256,"line":175},[254,171531,3241],{"class":260},[254,171533,15848],{"class":264},[254,171535,1174],{"class":260},[254,171537,4233],{"class":313},[254,171539,3879],{"class":264},[254,171541,171542,171544,171546,171548,171551],{"class":256,"line":1319},[254,171543,103573],{"class":260},[254,171545,152366],{"class":313},[254,171547,265],{"class":264},[254,171549,171550],{"class":369},"\"年龄不能为负数\"",[254,171552,271],{"class":264},[254,171554,171555,171557,171559,171561,171563,171565,171567,171569,171571],{"class":256,"line":1334},[254,171556,31440],{"class":313},[254,171558,265],{"class":264},[254,171560,317],{"class":260},[254,171562,162123],{"class":369},[254,171564,1160],{"class":313},[254,171566,70362],{"class":264},[254,171568,1210],{"class":313},[254,171570,515],{"class":369},[254,171572,271],{"class":264},[254,171574,171575],{"class":256,"line":1340},[254,171576,2540],{"emptyLinePlaceholder":184},[254,171578,171579],{"class":256,"line":1354},[254,171580,2540],{"emptyLinePlaceholder":184},[254,171582,171583,171586,171588,171590],{"class":256,"line":1360},[254,171584,171585],{"class":264},"set_age(",[254,171587,796],{"class":260},[254,171589,482],{"class":313},[254,171591,271],{"class":264},[14,171593,171594],{},"调用者可以捕获：",[245,171596,171598],{"className":30519,"code":171597,"language":30521,"meta":174,"style":174},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[251,171599,171600,171606,171617,171627],{"__ignoreMap":174},[254,171601,171602,171604],{"class":256,"line":257},[254,171603,171022],{"class":260},[254,171605,3879],{"class":264},[254,171607,171608,171611,171613,171615],{"class":256,"line":175},[254,171609,171610],{"class":264},"    set_age(",[254,171612,796],{"class":260},[254,171614,482],{"class":313},[254,171616,271],{"class":264},[254,171618,171619,171621,171623,171625],{"class":256,"line":1319},[254,171620,171034],{"class":260},[254,171622,152366],{"class":313},[254,171624,64745],{"class":260},[254,171626,171366],{"class":264},[254,171628,171629,171631],{"class":256,"line":1334},[254,171630,31440],{"class":313},[254,171632,67140],{"class":264},[34,171634,171636],{"id":171635},"_98-自定义异常","9.8 自定义异常",[245,171638,171640],{"className":30519,"code":171639,"language":30521,"meta":174,"style":174},"class BalanceNotEnoughError(Exception):\n    pass\n\n\ndef withdraw(balance, money):\n    if money > balance:\n        raise BalanceNotEnoughError(\"余额不足\")\n    return balance - money\n\n\ntry:\n    balance = withdraw(100, 200)\nexcept BalanceNotEnoughError as e:\n    print(e)\n",[251,171641,171642,171656,171660,171664,171668,171676,171686,171697,171707,171711,171715,171721,171738,171749],{"__ignoreMap":174},[254,171643,171644,171646,171649,171651,171654],{"class":256,"line":257},[254,171645,14835],{"class":260},[254,171647,171648],{"class":2103}," BalanceNotEnoughError",[254,171650,265],{"class":264},[254,171652,171653],{"class":313},"Exception",[254,171655,30927],{"class":264},[254,171657,171658],{"class":256,"line":175},[254,171659,149677],{"class":260},[254,171661,171662],{"class":256,"line":1319},[254,171663,2540],{"emptyLinePlaceholder":184},[254,171665,171666],{"class":256,"line":1334},[254,171667,2540],{"emptyLinePlaceholder":184},[254,171669,171670,171672,171674],{"class":256,"line":1340},[254,171671,32088],{"class":260},[254,171673,150326],{"class":2103},[254,171675,162952],{"class":264},[254,171677,171678,171680,171682,171684],{"class":256,"line":1354},[254,171679,3241],{"class":260},[254,171681,150282],{"class":264},[254,171683,1224],{"class":260},[254,171685,162729],{"class":264},[254,171687,171688,171690,171693,171695],{"class":256,"line":1360},[254,171689,103573],{"class":260},[254,171691,171692],{"class":264}," BalanceNotEnoughError(",[254,171694,150377],{"class":369},[254,171696,271],{"class":264},[254,171698,171699,171701,171703,171705],{"class":256,"line":1451},[254,171700,4230],{"class":260},[254,171702,162959],{"class":264},[254,171704,796],{"class":260},[254,171706,150315],{"class":264},[254,171708,171709],{"class":256,"line":1457},[254,171710,2540],{"emptyLinePlaceholder":184},[254,171712,171713],{"class":256,"line":1469},[254,171714,2540],{"emptyLinePlaceholder":184},[254,171716,171717,171719],{"class":256,"line":1752},[254,171718,171022],{"class":260},[254,171720,3879],{"class":264},[254,171722,171723,171725,171727,171730,171732,171734,171736],{"class":256,"line":1757},[254,171724,162630],{"class":264},[254,171726,310],{"class":260},[254,171728,171729],{"class":264}," withdraw(",[254,171731,575],{"class":313},[254,171733,12576],{"class":264},[254,171735,1862],{"class":313},[254,171737,271],{"class":264},[254,171739,171740,171742,171745,171747],{"class":256,"line":1763},[254,171741,171034],{"class":260},[254,171743,171744],{"class":264}," BalanceNotEnoughError ",[254,171746,31524],{"class":260},[254,171748,171366],{"class":264},[254,171750,171751,171753],{"class":256,"line":1768},[254,171752,31440],{"class":313},[254,171754,67140],{"class":264},[14,171756,171757],{},"入门阶段大多数情况使用内置异常即可。",[34,171759,171761],{"id":171760},"_99-traceback","9.9 traceback",[14,171763,171764],{},"调试时可以输出完整异常堆栈。",[245,171766,171768],{"className":30519,"code":171767,"language":30521,"meta":174,"style":174},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[251,171769,171770,171777,171781,171787,171797,171805],{"__ignoreMap":174},[254,171771,171772,171774],{"class":256,"line":257},[254,171773,30533],{"class":260},[254,171775,171776],{"class":264}," traceback\n",[254,171778,171779],{"class":256,"line":175},[254,171780,2540],{"emptyLinePlaceholder":184},[254,171782,171783,171785],{"class":256,"line":1319},[254,171784,171022],{"class":260},[254,171786,3879],{"class":264},[254,171788,171789,171791,171793,171795],{"class":256,"line":1334},[254,171790,2125],{"class":313},[254,171792,265],{"class":264},[254,171794,156020],{"class":369},[254,171796,271],{"class":264},[254,171798,171799,171801,171803],{"class":256,"line":1340},[254,171800,171034],{"class":260},[254,171802,152366],{"class":313},[254,171804,3879],{"class":264},[254,171806,171807],{"class":256,"line":1354},[254,171808,171809],{"class":264},"    traceback.print_exc()\n",[14,171811,171812],{},"日志系统中常把异常堆栈记录到文件。",[34,171814,171816],{"id":171815},"_910-什么是模块","9.10 什么是模块",[14,171818,171819,171820,126123],{},"模块就是一个 ",[251,171821,146492],{},[14,171823,171824,171825,24759],{},"例如创建 ",[251,171826,171827],{},"my_math.py",[245,171829,171831],{"className":30519,"code":171830,"language":30521,"meta":174,"style":174},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[251,171832,171833,171841,171851,171855,171859,171868],{"__ignoreMap":174},[254,171834,171835,171837,171839],{"class":256,"line":257},[254,171836,32088],{"class":260},[254,171838,5350],{"class":2103},[254,171840,151233],{"class":264},[254,171842,171843,171845,171847,171849],{"class":256,"line":175},[254,171844,4230],{"class":260},[254,171846,11010],{"class":264},[254,171848,745],{"class":260},[254,171850,151244],{"class":264},[254,171852,171853],{"class":256,"line":1319},[254,171854,2540],{"emptyLinePlaceholder":184},[254,171856,171857],{"class":256,"line":1334},[254,171858,2540],{"emptyLinePlaceholder":184},[254,171860,171861,171863,171866],{"class":256,"line":1340},[254,171862,32088],{"class":260},[254,171864,171865],{"class":2103}," sub",[254,171867,151233],{"class":264},[254,171869,171870,171872,171874,171876],{"class":256,"line":1354},[254,171871,4230],{"class":260},[254,171873,11010],{"class":264},[254,171875,796],{"class":260},[254,171877,151244],{"class":264},[14,171879,171880],{},"在另一个文件中导入：",[245,171882,171884],{"className":30519,"code":171883,"language":30521,"meta":174,"style":174},"import my_math\n\nprint(my_math.add(1, 2))\n",[251,171885,171886,171893,171897],{"__ignoreMap":174},[254,171887,171888,171890],{"class":256,"line":257},[254,171889,30533],{"class":260},[254,171891,171892],{"class":264}," my_math\n",[254,171894,171895],{"class":256,"line":175},[254,171896,2540],{"emptyLinePlaceholder":184},[254,171898,171899,171901,171904,171906,171908,171910],{"class":256,"line":1319},[254,171900,30556],{"class":313},[254,171902,171903],{"class":264},"(my_math.add(",[254,171905,482],{"class":313},[254,171907,12576],{"class":264},[254,171909,342],{"class":313},[254,171911,30638],{"class":264},[34,171913,171915],{"id":171914},"_911-import导入","9.11 import导入",[225,171917,171919],{"id":171918},"_9111-导入模块","9.11.1 导入模块",[245,171921,171923],{"className":30519,"code":171922,"language":30521,"meta":174,"style":174},"import random\n\nprint(random.randint(1, 10))\n",[251,171924,171925,171931,171935],{"__ignoreMap":174},[254,171926,171927,171929],{"class":256,"line":257},[254,171928,30533],{"class":260},[254,171930,45469],{"class":264},[254,171932,171933],{"class":256,"line":175},[254,171934,2540],{"emptyLinePlaceholder":184},[254,171936,171937,171939,171942,171944,171946,171948],{"class":256,"line":1319},[254,171938,30556],{"class":313},[254,171940,171941],{"class":264},"(random.randint(",[254,171943,482],{"class":313},[254,171945,12576],{"class":264},[254,171947,710],{"class":313},[254,171949,30638],{"class":264},[225,171951,171953],{"id":171952},"_9112-导入指定内容","9.11.2 导入指定内容",[245,171955,171957],{"className":30519,"code":171956,"language":30521,"meta":174,"style":174},"from random import randint\n\nprint(randint(1, 10))\n",[251,171958,171959,171970,171974],{"__ignoreMap":174},[254,171960,171961,171963,171965,171967],{"class":256,"line":257},[254,171962,30878],{"class":260},[254,171964,57937],{"class":264},[254,171966,30533],{"class":260},[254,171968,171969],{"class":264}," randint\n",[254,171971,171972],{"class":256,"line":175},[254,171973,2540],{"emptyLinePlaceholder":184},[254,171975,171976,171978,171981,171983,171985,171987],{"class":256,"line":1319},[254,171977,30556],{"class":313},[254,171979,171980],{"class":264},"(randint(",[254,171982,482],{"class":313},[254,171984,12576],{"class":264},[254,171986,710],{"class":313},[254,171988,30638],{"class":264},[225,171990,171992],{"id":171991},"_9113-起别名","9.11.3 起别名",[245,171994,171996],{"className":30519,"code":171995,"language":30521,"meta":174,"style":174},"import random as rd\n\nprint(rd.randint(1, 10))\n",[251,171997,171998,172009,172013],{"__ignoreMap":174},[254,171999,172000,172002,172004,172006],{"class":256,"line":257},[254,172001,30533],{"class":260},[254,172003,57937],{"class":264},[254,172005,31524],{"class":260},[254,172007,172008],{"class":264}," rd\n",[254,172010,172011],{"class":256,"line":175},[254,172012,2540],{"emptyLinePlaceholder":184},[254,172014,172015,172017,172020,172022,172024,172026],{"class":256,"line":1319},[254,172016,30556],{"class":313},[254,172018,172019],{"class":264},"(rd.randint(",[254,172021,482],{"class":313},[254,172023,12576],{"class":264},[254,172025,710],{"class":313},[254,172027,30638],{"class":264},[245,172029,172031],{"className":30519,"code":172030,"language":30521,"meta":174,"style":174},"from random import randint as rint\n\nprint(rint(1, 10))\n",[251,172032,172033,172049,172053],{"__ignoreMap":174},[254,172034,172035,172037,172039,172041,172044,172046],{"class":256,"line":257},[254,172036,30878],{"class":260},[254,172038,57937],{"class":264},[254,172040,30533],{"class":260},[254,172042,172043],{"class":264}," randint ",[254,172045,31524],{"class":260},[254,172047,172048],{"class":264}," rint\n",[254,172050,172051],{"class":256,"line":175},[254,172052,2540],{"emptyLinePlaceholder":184},[254,172054,172055,172057,172060,172062,172064,172066],{"class":256,"line":1319},[254,172056,30556],{"class":313},[254,172058,172059],{"class":264},"(rint(",[254,172061,482],{"class":313},[254,172063,12576],{"class":264},[254,172065,710],{"class":313},[254,172067,30638],{"class":264},[225,172069,172071],{"id":172070},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[245,172073,172075],{"className":30519,"code":172074,"language":30521,"meta":174,"style":174},"from random import *\n",[251,172076,172077],{"__ignoreMap":174},[254,172078,172079,172081,172083,172085],{"class":256,"line":257},[254,172080,30878],{"class":260},[254,172082,57937],{"class":264},[254,172084,30533],{"class":260},[254,172086,172087],{"class":260}," *\n",[14,172089,172090],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[34,172092,172094],{"id":172093},"_912-常用内置模块","9.12 常用内置模块",[225,172096,172098],{"id":172097},"_9121-random","9.12.1 random",[245,172100,172102],{"className":30519,"code":172101,"language":30521,"meta":174,"style":174},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[251,172103,172104,172110,172114,172128,172147],{"__ignoreMap":174},[254,172105,172106,172108],{"class":256,"line":257},[254,172107,30533],{"class":260},[254,172109,45469],{"class":264},[254,172111,172112],{"class":256,"line":175},[254,172113,2540],{"emptyLinePlaceholder":184},[254,172115,172116,172118,172120,172122,172124,172126],{"class":256,"line":1319},[254,172117,30556],{"class":313},[254,172119,171941],{"class":264},[254,172121,482],{"class":313},[254,172123,12576],{"class":264},[254,172125,710],{"class":313},[254,172127,30638],{"class":264},[254,172129,172130,172132,172135,172137,172139,172141,172143,172145],{"class":256,"line":1334},[254,172131,30556],{"class":313},[254,172133,172134],{"class":264},"(random.choice([",[254,172136,150028],{"class":369},[254,172138,12576],{"class":264},[254,172140,151076],{"class":369},[254,172142,12576],{"class":264},[254,172144,159871],{"class":369},[254,172146,33284],{"class":264},[254,172148,172149,172151,172154,172156,172158,172160,172162,172164,172166,172168,172170,172172,172174,172176],{"class":256,"line":1340},[254,172150,30556],{"class":313},[254,172152,172153],{"class":264},"(random.sample([",[254,172155,482],{"class":313},[254,172157,12576],{"class":264},[254,172159,342],{"class":313},[254,172161,12576],{"class":264},[254,172163,336],{"class":313},[254,172165,12576],{"class":264},[254,172167,557],{"class":313},[254,172169,12576],{"class":264},[254,172171,583],{"class":313},[254,172173,112343],{"class":264},[254,172175,342],{"class":313},[254,172177,30638],{"class":264},[225,172179,172181],{"id":172180},"_9122-time","9.12.2 time",[245,172183,172185],{"className":30519,"code":172184,"language":30521,"meta":174,"style":174},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[251,172186,172187,172193,172197,172204,172212],{"__ignoreMap":174},[254,172188,172189,172191],{"class":256,"line":257},[254,172190,30533],{"class":260},[254,172192,31970],{"class":264},[254,172194,172195],{"class":256,"line":175},[254,172196,2540],{"emptyLinePlaceholder":184},[254,172198,172199,172201],{"class":256,"line":1319},[254,172200,30556],{"class":313},[254,172202,172203],{"class":264},"(time.time())\n",[254,172205,172206,172208,172210],{"class":256,"line":1334},[254,172207,95212],{"class":264},[254,172209,482],{"class":313},[254,172211,271],{"class":264},[254,172213,172214,172216,172218,172221],{"class":256,"line":1340},[254,172215,30556],{"class":313},[254,172217,265],{"class":264},[254,172219,172220],{"class":369},"\"1秒后执行\"",[254,172222,271],{"class":264},[225,172224,172226],{"id":172225},"_9123-datetime","9.12.3 datetime",[245,172228,172230],{"className":30519,"code":172229,"language":30521,"meta":174,"style":174},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[251,172231,172232,172244,172248,172258,172265],{"__ignoreMap":174},[254,172233,172234,172236,172239,172241],{"class":256,"line":257},[254,172235,30878],{"class":260},[254,172237,172238],{"class":264}," datetime ",[254,172240,30533],{"class":260},[254,172242,172243],{"class":264}," datetime\n",[254,172245,172246],{"class":256,"line":175},[254,172247,2540],{"emptyLinePlaceholder":184},[254,172249,172250,172253,172255],{"class":256,"line":1319},[254,172251,172252],{"class":264},"now ",[254,172254,310],{"class":260},[254,172256,172257],{"class":264}," datetime.now()\n",[254,172259,172260,172262],{"class":256,"line":1334},[254,172261,30556],{"class":313},[254,172263,172264],{"class":264},"(now)\n",[254,172266,172267,172269,172272,172275,172277,172280],{"class":256,"line":1340},[254,172268,30556],{"class":313},[254,172270,172271],{"class":264},"(now.strftime(",[254,172273,172274],{"class":369},"\"%Y-%m-",[254,172276,156831],{"class":313},[254,172278,172279],{"class":369}," %H:%M:%S\"",[254,172281,30638],{"class":264},[225,172283,172285],{"id":172284},"_9124-os","9.12.4 os",[245,172287,172289],{"className":30519,"code":172288,"language":30521,"meta":174,"style":174},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[251,172290,172291,172297,172301,172308],{"__ignoreMap":174},[254,172292,172293,172295],{"class":256,"line":257},[254,172294,30533],{"class":260},[254,172296,45446],{"class":264},[254,172298,172299],{"class":256,"line":175},[254,172300,2540],{"emptyLinePlaceholder":184},[254,172302,172303,172305],{"class":256,"line":1319},[254,172304,30556],{"class":313},[254,172306,172307],{"class":264},"(os.getcwd())\n",[254,172309,172310,172312,172315,172318],{"class":256,"line":1334},[254,172311,30556],{"class":313},[254,172313,172314],{"class":264},"(os.listdir(",[254,172316,172317],{"class":369},"\".\"",[254,172319,30638],{"class":264},[225,172321,172323],{"id":172322},"_9125-sys","9.12.5 sys",[245,172325,172327],{"className":30519,"code":172326,"language":30521,"meta":174,"style":174},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[251,172328,172329,172336,172340,172347],{"__ignoreMap":174},[254,172330,172331,172333],{"class":256,"line":257},[254,172332,30533],{"class":260},[254,172334,172335],{"class":264}," sys\n",[254,172337,172338],{"class":256,"line":175},[254,172339,2540],{"emptyLinePlaceholder":184},[254,172341,172342,172344],{"class":256,"line":1319},[254,172343,30556],{"class":313},[254,172345,172346],{"class":264},"(sys.version)\n",[254,172348,172349,172351],{"class":256,"line":1334},[254,172350,30556],{"class":313},[254,172352,172353],{"class":264},"(sys.path)\n",[34,172355,172357,172358,172360,172361,515],{"id":172356},"_913-if-name-main","9.13 if ",[414,172359,79951],{}," == \"",[414,172362,102199],{},[14,172364,172365,172366,172369],{},"模块被直接运行和被导入时，",[251,172367,172368],{},"__name__"," 的值不同。",[14,172371,172372,172373,24759],{},"创建 ",[251,172374,172375],{},"my_module.py",[245,172377,172379],{"className":30519,"code":172378,"language":30521,"meta":174,"style":174},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[251,172380,172381,172389,172399,172403,172407,172419],{"__ignoreMap":174},[254,172382,172383,172385,172387],{"class":256,"line":257},[254,172384,32088],{"class":260},[254,172386,5350],{"class":2103},[254,172388,151233],{"class":264},[254,172390,172391,172393,172395,172397],{"class":256,"line":175},[254,172392,4230],{"class":260},[254,172394,11010],{"class":264},[254,172396,745],{"class":260},[254,172398,151244],{"class":264},[254,172400,172401],{"class":256,"line":1319},[254,172402,2540],{"emptyLinePlaceholder":184},[254,172404,172405],{"class":256,"line":1334},[254,172406,2540],{"emptyLinePlaceholder":184},[254,172408,172409,172411,172413,172415,172417],{"class":256,"line":1340},[254,172410,1671],{"class":260},[254,172412,31361],{"class":313},[254,172414,101700],{"class":260},[254,172416,101703],{"class":369},[254,172418,3879],{"class":264},[254,172420,172421,172423,172425,172427,172429,172431],{"class":256,"line":1354},[254,172422,31440],{"class":313},[254,172424,166740],{"class":264},[254,172426,482],{"class":313},[254,172428,12576],{"class":264},[254,172430,342],{"class":313},[254,172432,30638],{"class":264},[14,172434,172435],{},"作用：",[21,172437,172438,172441],{},[24,172439,172440],{},"直接运行该文件时，执行测试代码。",[24,172442,172443],{},"被其他文件导入时，不执行测试代码。",[14,172445,172446],{},"这是写模块时很常用的习惯。",[34,172448,172450],{"id":172449},"_914-包","9.14 包",[14,172452,172453,172454,172457],{},"包是包含 ",[251,172455,172456],{},"__init__.py"," 的目录，用于组织多个模块。",[14,172459,172460],{},"目录结构：",[245,172462,172465],{"className":172463,"code":172464,"language":5328,"meta":174},[5326],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[251,172466,172464],{"__ignoreMap":174},[14,172468,172469],{},"导入：",[245,172471,172473],{"className":30519,"code":172472,"language":30521,"meta":174,"style":174},"from utils.file_utils import read_file\n",[251,172474,172475],{"__ignoreMap":174},[254,172476,172477,172479,172482,172484],{"class":256,"line":257},[254,172478,30878],{"class":260},[254,172480,172481],{"class":264}," utils.file_utils ",[254,172483,30533],{"class":260},[254,172485,172486],{"class":264}," read_file\n",[14,172488,172489,172491],{},[251,172490,172456],{}," 可以为空，也可以写包初始化逻辑。",[34,172493,172495],{"id":172494},"_915-第三方包","9.15 第三方包",[14,172497,172498,172499,172501],{},"第三方包通过 ",[251,172500,23972],{}," 安装。",[245,172503,172505],{"className":23963,"code":172504,"language":23965,"meta":174,"style":174},"pip install requests\n",[251,172506,172507],{"__ignoreMap":174},[254,172508,172509,172511,172513],{"class":256,"line":257},[254,172510,23972],{"class":2103},[254,172512,23975],{"class":369},[254,172514,146238],{"class":369},[14,172516,172517],{},"使用：",[245,172519,172521],{"className":30519,"code":172520,"language":30521,"meta":174,"style":174},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[251,172522,172523,172529,172533,172548],{"__ignoreMap":174},[254,172524,172525,172527],{"class":256,"line":257},[254,172526,30533],{"class":260},[254,172528,146238],{"class":264},[254,172530,172531],{"class":256,"line":175},[254,172532,2540],{"emptyLinePlaceholder":184},[254,172534,172535,172538,172540,172543,172546],{"class":256,"line":1319},[254,172536,172537],{"class":264},"response ",[254,172539,310],{"class":260},[254,172541,172542],{"class":264}," requests.get(",[254,172544,172545],{"class":369},"\"https:\u002F\u002Fwww.example.com\"",[254,172547,271],{"class":264},[254,172549,172550,172552],{"class":256,"line":1334},[254,172551,30556],{"class":313},[254,172553,172554],{"class":264},"(response.status_code)\n",[14,172556,172557],{},"查看已安装包：",[245,172559,172561],{"className":23963,"code":172560,"language":23965,"meta":174,"style":174},"pip list\n",[251,172562,172563],{"__ignoreMap":174},[254,172564,172565,172567],{"class":256,"line":257},[254,172566,23972],{"class":2103},[254,172568,119095],{"class":369},[14,172570,172571],{},"导出项目依赖：",[245,172573,172574],{"className":23963,"code":146433,"language":23965,"meta":174,"style":174},[251,172575,172576],{"__ignoreMap":174},[254,172577,172578,172580,172582,172584],{"class":256,"line":257},[254,172579,23972],{"class":2103},[254,172581,146442],{"class":369},[254,172583,26363],{"class":260},[254,172585,146447],{"class":369},[14,172587,172588],{},"安装项目依赖：",[245,172590,172591],{"className":23963,"code":146453,"language":23965,"meta":174,"style":174},[251,172592,172593],{"__ignoreMap":174},[254,172594,172595,172597,172599,172601],{"class":256,"line":257},[254,172596,23972],{"class":2103},[254,172598,23975],{"class":369},[254,172600,119779],{"class":313},[254,172602,146447],{"class":369},[34,172604,172606],{"id":172605},"_916-模块搜索路径","9.16 模块搜索路径",[14,172608,172609,172610,172613],{},"Python 导入模块时会在 ",[251,172611,172612],{},"sys.path"," 中查找。",[245,172615,172617],{"className":30519,"code":172616,"language":30521,"meta":174,"style":174},"import sys\n\nfor path in sys.path:\n    print(path)\n",[251,172618,172619,172625,172629,172641],{"__ignoreMap":174},[254,172620,172621,172623],{"class":256,"line":257},[254,172622,30533],{"class":260},[254,172624,172335],{"class":264},[254,172626,172627],{"class":256,"line":175},[254,172628,2540],{"emptyLinePlaceholder":184},[254,172630,172631,172633,172636,172638],{"class":256,"line":1319},[254,172632,3165],{"class":260},[254,172634,172635],{"class":264}," path ",[254,172637,26184],{"class":260},[254,172639,172640],{"class":264}," sys.path:\n",[254,172642,172643,172645],{"class":256,"line":1334},[254,172644,31440],{"class":313},[254,172646,169369],{"class":264},[14,172648,172649],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[14,172651,157763],{},[245,172653,172656],{"className":172654,"code":172655,"language":5328,"meta":174},[5326],"random.py\njson.py\ntime.py\n",[251,172657,172655],{"__ignoreMap":174},[14,172659,172660],{},"这些文件名可能导致导入异常。",[34,172662,172664],{"id":172663},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[14,172666,172460],{},[245,172668,172671],{"className":172669,"code":172670,"language":5328,"meta":174},[5326],"student_system\u002F\n  main.py\n  services\u002F\n    __init__.py\n    student_service.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n",[251,172672,172670],{"__ignoreMap":174},[14,172674,172675,24759],{},[251,172676,172677],{},"utils\u002Ffile_utils.py",[245,172679,172681],{"className":30519,"code":172680,"language":30521,"meta":174,"style":174},"import json\nfrom pathlib import Path\n\n\ndef read_json(path):\n    path = Path(path)\n    if not path.exists():\n        return []\n\n    with open(path, \"r\", encoding=\"utf-8\") as file:\n        return json.load(file)\n\n\ndef write_json(path, data):\n    with open(path, \"w\", encoding=\"utf-8\") as file:\n        json.dump(data, file, ensure_ascii=False, indent=2)\n",[251,172682,172683,172689,172699,172703,172707,172717,172727,172735,172741,172745,172772,172782,172786,172790,172800,172826],{"__ignoreMap":174},[254,172684,172685,172687],{"class":256,"line":257},[254,172686,30533],{"class":260},[254,172688,147231],{"class":264},[254,172690,172691,172693,172695,172697],{"class":256,"line":175},[254,172692,30878],{"class":260},[254,172694,108452],{"class":264},[254,172696,30533],{"class":260},[254,172698,108457],{"class":264},[254,172700,172701],{"class":256,"line":1319},[254,172702,2540],{"emptyLinePlaceholder":184},[254,172704,172705],{"class":256,"line":1334},[254,172706,2540],{"emptyLinePlaceholder":184},[254,172708,172709,172711,172714],{"class":256,"line":1340},[254,172710,32088],{"class":260},[254,172712,172713],{"class":2103}," read_json",[254,172715,172716],{"class":264},"(path):\n",[254,172718,172719,172722,172724],{"class":256,"line":1354},[254,172720,172721],{"class":264},"    path ",[254,172723,310],{"class":260},[254,172725,172726],{"class":264}," Path(path)\n",[254,172728,172729,172731,172733],{"class":256,"line":1360},[254,172730,3241],{"class":260},[254,172732,39071],{"class":260},[254,172734,169450],{"class":264},[254,172736,172737,172739],{"class":256,"line":1451},[254,172738,14893],{"class":260},[254,172740,51979],{"class":264},[254,172742,172743],{"class":256,"line":1457},[254,172744,2540],{"emptyLinePlaceholder":184},[254,172746,172747,172749,172751,172754,172756,172758,172760,172762,172764,172766,172768,172770],{"class":256,"line":1469},[254,172748,34319],{"class":260},[254,172750,146931],{"class":313},[254,172752,172753],{"class":264},"(path, ",[254,172755,146941],{"class":369},[254,172757,12576],{"class":264},[254,172759,146946],{"class":5357},[254,172761,310],{"class":260},[254,172763,146951],{"class":369},[254,172765,13855],{"class":264},[254,172767,31524],{"class":260},[254,172769,148293],{"class":5357},[254,172771,3879],{"class":264},[254,172773,172774,172776,172778,172780],{"class":256,"line":1752},[254,172775,14893],{"class":260},[254,172777,148304],{"class":264},[254,172779,45495],{"class":5357},[254,172781,271],{"class":264},[254,172783,172784],{"class":256,"line":1757},[254,172785,2540],{"emptyLinePlaceholder":184},[254,172787,172788],{"class":256,"line":1763},[254,172789,2540],{"emptyLinePlaceholder":184},[254,172791,172792,172794,172797],{"class":256,"line":1768},[254,172793,32088],{"class":260},[254,172795,172796],{"class":2103}," write_json",[254,172798,172799],{"class":264},"(path, data):\n",[254,172801,172802,172804,172806,172808,172810,172812,172814,172816,172818,172820,172822,172824],{"class":256,"line":1782},[254,172803,34319],{"class":260},[254,172805,146931],{"class":313},[254,172807,172753],{"class":264},[254,172809,152116],{"class":369},[254,172811,12576],{"class":264},[254,172813,146946],{"class":5357},[254,172815,310],{"class":260},[254,172817,146951],{"class":369},[254,172819,13855],{"class":264},[254,172821,31524],{"class":260},[254,172823,148293],{"class":5357},[254,172825,3879],{"class":264},[254,172827,172828,172831,172833,172835,172837,172839,172841,172843,172845,172847,172849],{"class":256,"line":1787},[254,172829,172830],{"class":264},"        json.dump(data, ",[254,172832,45495],{"class":5357},[254,172834,12576],{"class":264},[254,172836,147277],{"class":5357},[254,172838,310],{"class":260},[254,172840,34128],{"class":313},[254,172842,12576],{"class":264},[254,172844,152152],{"class":5357},[254,172846,310],{"class":260},[254,172848,342],{"class":313},[254,172850,271],{"class":264},[14,172852,172853,24759],{},[251,172854,154747],{},[245,172856,172858],{"className":30519,"code":172857,"language":30521,"meta":174,"style":174},"from utils.file_utils import read_json, write_json\n\nstudents = read_json(\"students.json\")\nstudents.append({\"name\": \"小明\", \"score\": 95})\nwrite_json(\"students.json\", students)\n",[251,172859,172860,172871,172875,172888,172908],{"__ignoreMap":174},[254,172861,172862,172864,172866,172868],{"class":256,"line":257},[254,172863,30878],{"class":260},[254,172865,172481],{"class":264},[254,172867,30533],{"class":260},[254,172869,172870],{"class":264}," read_json, write_json\n",[254,172872,172873],{"class":256,"line":175},[254,172874,2540],{"emptyLinePlaceholder":184},[254,172876,172877,172879,172881,172884,172886],{"class":256,"line":1319},[254,172878,159856],{"class":264},[254,172880,310],{"class":260},[254,172882,172883],{"class":264}," read_json(",[254,172885,151971],{"class":369},[254,172887,271],{"class":264},[254,172889,172890,172892,172894,172896,172898,172900,172902,172904,172906],{"class":256,"line":1334},[254,172891,170674],{"class":264},[254,172893,62820],{"class":369},[254,172895,51578],{"class":264},[254,172897,150028],{"class":369},[254,172899,12576],{"class":264},[254,172901,151612],{"class":369},[254,172903,51578],{"class":264},[254,172905,1253],{"class":313},[254,172907,165292],{"class":264},[254,172909,172910,172913,172915],{"class":256,"line":1340},[254,172911,172912],{"class":264},"write_json(",[254,172914,151971],{"class":369},[254,172916,172917],{"class":264},", students)\n",[34,172919,172921],{"id":172920},"_918-易错点","9.18 易错点",[21,172923,172924,172927,172932,172937,172940,172943],{},[24,172925,172926],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[24,172928,172929,172930,28526],{},"能指定异常类型就不要裸写 ",[251,172931,171034],{},[24,172933,172934,172936],{},[251,172935,171409],{}," 无论是否出错都会执行。",[24,172938,172939],{},"模块文件名不要和标准库重名。",[24,172941,172942],{},"导入自己写的模块时，要注意运行目录。",[24,172944,172945],{},"第三方包要安装到当前解释器或虚拟环境中。",[34,172947,172949],{"id":172948},"_919-本章练习","9.19 本章练习",[21,172951,172952,172955,172958,172964,172971],{},[24,172953,172954],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[24,172956,172957],{},"写函数读取文件，如果文件不存在则返回空字符串。",[24,172959,172372,172960,172963],{},[251,172961,172962],{},"math_utils.py","，实现加减乘除函数并导入使用。",[24,172965,172966,172967,172970],{},"创建一个 ",[251,172968,172969],{},"utils"," 包，把 JSON 读写函数放进去。",[24,172972,172973],{},"写一个程序，捕获除零异常和输入格式异常。",[5267,172975,172976],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":174,"searchDepth":175,"depth":175,"links":172978},[172979,172980,172981,172982,172983,172984,172985,172986,172987,172988,172989,172995,173002,173004,173005,173006,173007,173008,173009],{"id":170831,"depth":175,"text":170832},{"id":170959,"depth":175,"text":170960},{"id":171008,"depth":175,"text":171009},{"id":171157,"depth":175,"text":171158},{"id":171329,"depth":175,"text":171330},{"id":171398,"depth":175,"text":171399},{"id":171509,"depth":175,"text":171510},{"id":171635,"depth":175,"text":171636},{"id":171760,"depth":175,"text":171761},{"id":171815,"depth":175,"text":171816},{"id":171914,"depth":175,"text":171915,"children":172990},[172991,172992,172993,172994],{"id":171918,"depth":1319,"text":171919},{"id":171952,"depth":1319,"text":171953},{"id":171991,"depth":1319,"text":171992},{"id":172070,"depth":1319,"text":172071},{"id":172093,"depth":175,"text":172094,"children":172996},[172997,172998,172999,173000,173001],{"id":172097,"depth":1319,"text":172098},{"id":172180,"depth":1319,"text":172181},{"id":172225,"depth":1319,"text":172226},{"id":172284,"depth":1319,"text":172285},{"id":172322,"depth":1319,"text":172323},{"id":172356,"depth":175,"text":173003},"9.13 if name == \"main\"",{"id":172449,"depth":175,"text":172450},{"id":172494,"depth":175,"text":172495},{"id":172605,"depth":175,"text":172606},{"id":172663,"depth":175,"text":172664},{"id":172920,"depth":175,"text":172921},{"id":172948,"depth":175,"text":172949},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":170823,"description":23518},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":4,"title":5,"body":173016,"description":180,"extension":181,"meta":173131,"navigation":184,"path":185,"seo":173132,"stem":187,"__hash__":188},{"type":7,"value":173017,"toc":173126},[173018,173020,173022,173024,173032,173034,173084,173086,173088,173090,173092,173094,173096,173098,173100,173102,173104],[10,173019,5],{"id":12},[14,173021,16],{},[14,173023,19],{},[21,173025,173026,173028,173030],{},[24,173027,26],{},[24,173029,29],{},[24,173031,32],{},[34,173033,36],{"id":36},[21,173035,173036,173040,173044,173048,173052,173056,173060,173064,173068,173072,173076,173080],{},[24,173037,173038],{},[42,173039,45],{"href":44},[24,173041,173042],{},[42,173043,51],{"href":50},[24,173045,173046],{},[42,173047,57],{"href":56},[24,173049,173050],{},[42,173051,63],{"href":62},[24,173053,173054],{},[42,173055,69],{"href":68},[24,173057,173058],{},[42,173059,75],{"href":74},[24,173061,173062],{},[42,173063,81],{"href":80},[24,173065,173066],{},[42,173067,87],{"href":86},[24,173069,173070],{},[42,173071,93],{"href":92},[24,173073,173074],{},[42,173075,99],{"href":98},[24,173077,173078],{},[42,173079,105],{"href":104},[24,173081,173082],{},[42,173083,111],{"href":110},[34,173085,114],{"id":114},[14,173087,117],{},[14,173089,120],{},[14,173091,123],{},[14,173093,126],{},[14,173095,129],{},[14,173097,132],{},[14,173099,135],{},[14,173101,138],{},[34,173103,141],{"id":141},[21,173105,173106,173111,173116,173121],{},[24,173107,146,173108],{},[42,173109,149],{"href":149,"rel":173110},[151],[24,173112,154,173113],{},[42,173114,157],{"href":157,"rel":173115},[151],[24,173117,161,173118],{},[42,173119,164],{"href":164,"rel":173120},[151],[24,173122,168,173123],{},[42,173124,171],{"href":171,"rel":173125},[151],{"title":174,"searchDepth":175,"depth":175,"links":173127},[173128,173129,173130],{"id":36,"depth":175,"text":36},{"id":114,"depth":175,"text":114},{"id":141,"depth":175,"text":141},{"category":183},{"title":5,"description":180},1781331413983]